4
0
Эх сурвалжийг харах

Do not show save link if no integration is configured

Frédéric Guillot 8 жил өмнө
parent
commit
31da4db14f

+ 15 - 0
storage/integration.go

@@ -176,3 +176,18 @@ func (s *Storage) CreateIntegration(userID int64) error {
 
 	return nil
 }
+
+// HasSaveEntry returns true if the given user can save articles to third-parties.
+func (s *Storage) HasSaveEntry(userID int64) (result bool) {
+	query := `
+		SELECT true FROM integrations
+		WHERE user_id=$1 AND
+		(pinboard_enabled='t' OR instapaper_enabled='t' OR wallabag_enabled='t' OR nunux_keeper_enabled='t')
+	`
+
+	if err := s.db.QueryRow(query, userID).Scan(&result); err != nil {
+		result = false
+	}
+
+	return result
+}

+ 18 - 16
template/common.go

@@ -1,5 +1,5 @@
 // Code generated by go generate; DO NOT EDIT.
-// 2018-04-29 16:22:00.539326448 -0700 PDT m=+0.023616542
+// 2018-04-29 17:36:50.459886967 -0700 PDT m=+0.024552529
 
 package template
 
@@ -32,18 +32,25 @@ var templateCommonMap = map[string]string{
         <li>
             <time datetime="{{ isodate .entry.Date }}" title="{{ isodate .entry.Date }}">{{ elapsed .user.Timezone .entry.Date }}</time>
         </li>
-        <li>
-            <a href="#"
-                title="{{ t "Save this article" }}"
-                data-save-entry="true"
-                data-save-url="{{ route "saveEntry" "entryID" .entry.ID }}"
-                data-label-loading="{{ t "Saving..." }}"
-                data-label-done="{{ t "Done!" }}"
-                >{{ t "Save" }}</a>
-        </li>
+        {{ if .hasSaveEntry }}
+            <li>
+                <a href="#"
+                    title="{{ t "Save this article" }}"
+                    data-save-entry="true"
+                    data-save-url="{{ route "saveEntry" "entryID" .entry.ID }}"
+                    data-label-loading="{{ t "Saving..." }}"
+                    data-label-done="{{ t "Done!" }}"
+                    >{{ t "Save" }}</a>
+            </li>
+        {{ end }}
         <li>
             <a href="{{ .entry.URL }}" target="_blank" rel="noopener noreferrer" referrerpolicy="no-referrer" data-original-link="true">{{ t "Original" }}</a>
         </li>
+        {{ if .entry.CommentsURL }}
+            <li>
+                <a href="{{ .entry.CommentsURL }}" title="{{ t "View Comments" }}" target="_blank" rel="noopener noreferrer" referrerpolicy="no-referrer">{{ t "Comments" }}</a>
+            </li>
+        {{ end }}
         <li>
             <a href="#"
                 data-toggle-bookmark="true"
@@ -63,11 +70,6 @@ var templateCommonMap = map[string]string{
                 data-value="{{ if eq .entry.Status "read" }}read{{ else }}unread{{ end }}"
                 >{{ if eq .entry.Status "read" }}✘ {{ t "Unread" }}{{ else }}✔ {{ t "Read" }}{{ end }}</a>
         </li>
-        {{ if .entry.CommentsURL }}
-            <li>
-                <a href="{{ .entry.CommentsURL }}" title="{{ t "View Comments" }}" target="_blank" rel="noopener noreferrer" referrerpolicy="no-referrer">{{ t "Comments" }}</a>
-            </li>
-        {{ end }}
     </ul>
 </div>
 {{ end }}`,
@@ -220,7 +222,7 @@ var templateCommonMap = map[string]string{
 
 var templateCommonMapChecksums = map[string]string{
 	"entry_pagination": "f1465fa70f585ae8043b200ec9de5bf437ffbb0c19fb7aefc015c3555614ee27",
-	"item_meta":        "c14b5b36076e087346def2ebcef4876ed5e8165218f40dc017db44e754c22d03",
+	"item_meta":        "6cff8ae243f19dac936e523867d2975f70aa749b2a461ae63f6ebbca94cf7419",
 	"layout":           "c7565e2cf904612e236bc1d7167c6c124ffe5d27348608eb5c2336606f266896",
 	"pagination":       "6ff462c2b2a53bc5448b651da017f40a39f1d4f16cef4b2f09784f0797286924",
 }

+ 1 - 1
template/html/starred.html → template/html/bookmark_entries.html

@@ -20,7 +20,7 @@
                 </span>
                 <span class="category"><a href="{{ route "categoryEntries" "categoryID" .Feed.Category.ID }}">{{ .Feed.Category.Title }}</a></span>
             </div>
-            {{ template "item_meta" dict "user" $.user "entry" . }}
+            {{ template "item_meta" dict "user" $.user "entry" . "hasSaveEntry" $.hasSaveEntry }}
         </article>
         {{ end }}
     </div>

+ 1 - 1
template/html/category_entries.html

@@ -27,7 +27,7 @@
                 </span>
                 <span class="category"><a href="{{ route "categoryEntries" "categoryID" .Feed.Category.ID }}">{{ .Feed.Category.Title }}</a></span>
             </div>
-            {{ template "item_meta" dict "user" $.user "entry" . }}
+            {{ template "item_meta" dict "user" $.user "entry" . "hasSaveEntry" $.hasSaveEntry  }}
         </article>
         {{ end }}
     </div>

+ 16 - 14
template/html/common/item_meta.html

@@ -7,18 +7,25 @@
         <li>
             <time datetime="{{ isodate .entry.Date }}" title="{{ isodate .entry.Date }}">{{ elapsed .user.Timezone .entry.Date }}</time>
         </li>
-        <li>
-            <a href="#"
-                title="{{ t "Save this article" }}"
-                data-save-entry="true"
-                data-save-url="{{ route "saveEntry" "entryID" .entry.ID }}"
-                data-label-loading="{{ t "Saving..." }}"
-                data-label-done="{{ t "Done!" }}"
-                >{{ t "Save" }}</a>
-        </li>
+        {{ if .hasSaveEntry }}
+            <li>
+                <a href="#"
+                    title="{{ t "Save this article" }}"
+                    data-save-entry="true"
+                    data-save-url="{{ route "saveEntry" "entryID" .entry.ID }}"
+                    data-label-loading="{{ t "Saving..." }}"
+                    data-label-done="{{ t "Done!" }}"
+                    >{{ t "Save" }}</a>
+            </li>
+        {{ end }}
         <li>
             <a href="{{ .entry.URL }}" target="_blank" rel="noopener noreferrer" referrerpolicy="no-referrer" data-original-link="true">{{ t "Original" }}</a>
         </li>
+        {{ if .entry.CommentsURL }}
+            <li>
+                <a href="{{ .entry.CommentsURL }}" title="{{ t "View Comments" }}" target="_blank" rel="noopener noreferrer" referrerpolicy="no-referrer">{{ t "Comments" }}</a>
+            </li>
+        {{ end }}
         <li>
             <a href="#"
                 data-toggle-bookmark="true"
@@ -38,11 +45,6 @@
                 data-value="{{ if eq .entry.Status "read" }}read{{ else }}unread{{ end }}"
                 >{{ if eq .entry.Status "read" }}✘ {{ t "Unread" }}{{ else }}✔ {{ t "Read" }}{{ end }}</a>
         </li>
-        {{ if .entry.CommentsURL }}
-            <li>
-                <a href="{{ .entry.CommentsURL }}" title="{{ t "View Comments" }}" target="_blank" rel="noopener noreferrer" referrerpolicy="no-referrer">{{ t "Comments" }}</a>
-            </li>
-        {{ end }}
     </ul>
 </div>
 {{ end }}

+ 11 - 9
template/html/entry.html

@@ -18,15 +18,17 @@
                         data-value="{{ if .Starred }}star{{ else }}unstar{{ end }}"
                         >{{ if .entry.Starred }}★ {{ t "Unstar" }}{{ else }}☆ {{ t "Star" }}{{ end }}</a>
                 </li>
-                <li>
-                    <a href="#"
-                        title="{{ t "Save this article" }}"
-                        data-save-entry="true"
-                        data-save-url="{{ route "saveEntry" "entryID" .entry.ID }}"
-                        data-label-loading="{{ t "Saving..." }}"
-                        data-label-done="{{ t "Done!" }}"
-                        >{{ t "Save" }}</a>
-                </li>
+                {{ if .hasSaveEntry }}
+                    <li>
+                        <a href="#"
+                            title="{{ t "Save this article" }}"
+                            data-save-entry="true"
+                            data-save-url="{{ route "saveEntry" "entryID" .entry.ID }}"
+                            data-label-loading="{{ t "Saving..." }}"
+                            data-label-done="{{ t "Done!" }}"
+                            >{{ t "Save" }}</a>
+                    </li>
+                {{ end }}
                 <li>
                     <a href="#"
                         title="{{ t "Fetch original content" }}"

+ 1 - 1
template/html/feed_entries.html

@@ -38,7 +38,7 @@
                 </span>
                 <span class="category"><a href="{{ route "categoryEntries" "categoryID" .Feed.Category.ID }}">{{ .Feed.Category.Title }}</a></span>
             </div>
-            {{ template "item_meta" dict "user" $.user "entry" . }}
+            {{ template "item_meta" dict "user" $.user "entry" . "hasSaveEntry" $.hasSaveEntry }}
         </article>
         {{ end }}
     </div>

+ 1 - 1
template/html/history.html → template/html/history_entries.html

@@ -27,7 +27,7 @@
                 </span>
                 <span class="category"><a href="{{ route "categoryEntries" "categoryID" .Feed.Category.ID }}">{{ .Feed.Category.Title }}</a></span>
             </div>
-            {{ template "item_meta" dict "user" $.user "entry" . }}
+            {{ template "item_meta" dict "user" $.user "entry" . "hasSaveEntry" $.hasSaveEntry  }}
         </article>
         {{ end }}
     </div>

+ 1 - 1
template/html/unread.html → template/html/unread_entries.html

@@ -30,7 +30,7 @@
                 </span>
                 <span class="category"><a href="{{ route "categoryEntries" "categoryID" .Feed.Category.ID }}">{{ .Feed.Category.Title }}</a></span>
             </div>
-            {{ template "item_meta" dict "user" $.user "entry" . }}
+            {{ template "item_meta" dict "user" $.user "entry" . "hasSaveEntry" $.hasSaveEntry }}
         </article>
         {{ end }}
     </div>

+ 55 - 53
template/views.go

@@ -1,5 +1,5 @@
 // Code generated by go generate; DO NOT EDIT.
-// 2018-04-29 16:22:00.531039167 -0700 PDT m=+0.015329261
+// 2018-04-29 17:36:50.450844913 -0700 PDT m=+0.015510475
 
 package template
 
@@ -91,6 +91,37 @@ var templateViewsMap = map[string]string{
     </form>
 {{ end }}
 
+{{ end }}
+`,
+	"bookmark_entries": `{{ define "title"}}{{ t "Favorites" }} ({{ .total }}){{ end }}
+
+{{ define "content"}}
+<section class="page-header">
+    <h1>{{ t "Favorites" }} ({{ .total }})</h1>
+</section>
+
+{{ if not .entries }}
+    <p class="alert alert-info">{{ t "There is no bookmark at the moment." }}</p>
+{{ else }}
+    <div class="items">
+        {{ range .entries }}
+        <article class="item touch-item item-status-{{ .Status }}" data-id="{{ .ID }}">
+            <div class="item-header">
+                <span class="item-title">
+                    {{ if ne .Feed.Icon.IconID 0 }}
+                        <img src="{{ route "icon" "iconID" .Feed.Icon.IconID }}" width="16" height="16">
+                    {{ end }}
+                    <a href="{{ route "starredEntry" "entryID" .ID }}">{{ .Title }}</a>
+                </span>
+                <span class="category"><a href="{{ route "categoryEntries" "categoryID" .Feed.Category.ID }}">{{ .Feed.Category.Title }}</a></span>
+            </div>
+            {{ template "item_meta" dict "user" $.user "entry" . "hasSaveEntry" $.hasSaveEntry }}
+        </article>
+        {{ end }}
+    </div>
+    {{ template "pagination" .pagination }}
+{{ end }}
+
 {{ end }}
 `,
 	"categories": `{{ define "title"}}{{ t "Categories" }} ({{ .total }}){{ end }}
@@ -179,7 +210,7 @@ var templateViewsMap = map[string]string{
                 </span>
                 <span class="category"><a href="{{ route "categoryEntries" "categoryID" .Feed.Category.ID }}">{{ .Feed.Category.Title }}</a></span>
             </div>
-            {{ template "item_meta" dict "user" $.user "entry" . }}
+            {{ template "item_meta" dict "user" $.user "entry" . "hasSaveEntry" $.hasSaveEntry  }}
         </article>
         {{ end }}
     </div>
@@ -483,15 +514,17 @@ var templateViewsMap = map[string]string{
                         data-value="{{ if .Starred }}star{{ else }}unstar{{ end }}"
                         >{{ if .entry.Starred }}★ {{ t "Unstar" }}{{ else }}☆ {{ t "Star" }}{{ end }}</a>
                 </li>
-                <li>
-                    <a href="#"
-                        title="{{ t "Save this article" }}"
-                        data-save-entry="true"
-                        data-save-url="{{ route "saveEntry" "entryID" .entry.ID }}"
-                        data-label-loading="{{ t "Saving..." }}"
-                        data-label-done="{{ t "Done!" }}"
-                        >{{ t "Save" }}</a>
-                </li>
+                {{ if .hasSaveEntry }}
+                    <li>
+                        <a href="#"
+                            title="{{ t "Save this article" }}"
+                            data-save-entry="true"
+                            data-save-url="{{ route "saveEntry" "entryID" .entry.ID }}"
+                            data-label-loading="{{ t "Saving..." }}"
+                            data-label-done="{{ t "Done!" }}"
+                            >{{ t "Save" }}</a>
+                    </li>
+                {{ end }}
                 <li>
                     <a href="#"
                         title="{{ t "Fetch original content" }}"
@@ -618,7 +651,7 @@ var templateViewsMap = map[string]string{
                 </span>
                 <span class="category"><a href="{{ route "categoryEntries" "categoryID" .Feed.Category.ID }}">{{ .Feed.Category.Title }}</a></span>
             </div>
-            {{ template "item_meta" dict "user" $.user "entry" . }}
+            {{ template "item_meta" dict "user" $.user "entry" . "hasSaveEntry" $.hasSaveEntry }}
         </article>
         {{ end }}
     </div>
@@ -705,7 +738,7 @@ var templateViewsMap = map[string]string{
 
 {{ end }}
 `,
-	"history": `{{ define "title"}}{{ t "History" }} ({{ .total }}){{ end }}
+	"history_entries": `{{ define "title"}}{{ t "History" }} ({{ .total }}){{ end }}
 
 {{ define "content"}}
 <section class="page-header">
@@ -734,7 +767,7 @@ var templateViewsMap = map[string]string{
                 </span>
                 <span class="category"><a href="{{ route "categoryEntries" "categoryID" .Feed.Category.ID }}">{{ .Feed.Category.Title }}</a></span>
             </div>
-            {{ template "item_meta" dict "user" $.user "entry" . }}
+            {{ template "item_meta" dict "user" $.user "entry" . "hasSaveEntry" $.hasSaveEntry  }}
         </article>
         {{ end }}
     </div>
@@ -1090,38 +1123,7 @@ var templateViewsMap = map[string]string{
 
 {{ end }}
 `,
-	"starred": `{{ define "title"}}{{ t "Favorites" }} ({{ .total }}){{ end }}
-
-{{ define "content"}}
-<section class="page-header">
-    <h1>{{ t "Favorites" }} ({{ .total }})</h1>
-</section>
-
-{{ if not .entries }}
-    <p class="alert alert-info">{{ t "There is no bookmark at the moment." }}</p>
-{{ else }}
-    <div class="items">
-        {{ range .entries }}
-        <article class="item touch-item item-status-{{ .Status }}" data-id="{{ .ID }}">
-            <div class="item-header">
-                <span class="item-title">
-                    {{ if ne .Feed.Icon.IconID 0 }}
-                        <img src="{{ route "icon" "iconID" .Feed.Icon.IconID }}" width="16" height="16">
-                    {{ end }}
-                    <a href="{{ route "starredEntry" "entryID" .ID }}">{{ .Title }}</a>
-                </span>
-                <span class="category"><a href="{{ route "categoryEntries" "categoryID" .Feed.Category.ID }}">{{ .Feed.Category.Title }}</a></span>
-            </div>
-            {{ template "item_meta" dict "user" $.user "entry" . }}
-        </article>
-        {{ end }}
-    </div>
-    {{ template "pagination" .pagination }}
-{{ end }}
-
-{{ end }}
-`,
-	"unread": `{{ define "title"}}{{ t "Unread Items" }} {{ if gt .countUnread 0 }}({{ .countUnread }}){{ end }} {{ end }}
+	"unread_entries": `{{ define "title"}}{{ t "Unread Items" }} {{ if gt .countUnread 0 }}({{ .countUnread }}){{ end }} {{ end }}
 
 {{ define "content"}}
 <section class="page-header">
@@ -1153,7 +1155,7 @@ var templateViewsMap = map[string]string{
                 </span>
                 <span class="category"><a href="{{ route "categoryEntries" "categoryID" .Feed.Category.ID }}">{{ .Feed.Category.Title }}</a></span>
             </div>
-            {{ template "item_meta" dict "user" $.user "entry" . }}
+            {{ template "item_meta" dict "user" $.user "entry" . "hasSaveEntry" $.hasSaveEntry }}
         </article>
         {{ end }}
     </div>
@@ -1230,24 +1232,24 @@ var templateViewsMap = map[string]string{
 var templateViewsMapChecksums = map[string]string{
 	"about":               "ad2fb778fc73c39b733b3f81b13e5c7d689b041fadd24ee2d4577f545aa788ad",
 	"add_subscription":    "053c920b0d7e109ea19dce6a448e304ce720db8633588ea04db16677f7209a7b",
+	"bookmark_entries":    "8e5fea7559218a34289c2f0e54955fc0ef3b9e629205927841cbcc2276aefb2a",
 	"categories":          "ca1280cd157bb527d4fc907da67b05a8347378f6dce965b9389d4bcdf3600a11",
-	"category_entries":    "686132d71c52a665329670756ac09959d915f7bc3227970149c623059988b035",
+	"category_entries":    "6ad52c8d0c28e21ea48be76228ea8432adde1dc190010753a48928477d52e065",
 	"choose_subscription": "a325f9c976ca2b2dc148e25c8fef0cf6ccab0e04e86e604e7812bb18dc4cdde1",
 	"create_category":     "2b82af5d2dcd67898dc5daa57a6461e6ff8121a6089b2a2a1be909f35e4a2275",
 	"create_user":         "233764778c915754141a20429ec8db9bf80ef2d7704867a2d7232c1e9df233ae",
 	"edit_category":       "cee720faadcec58289b707ad30af623d2ee66c1ce23a732965463250d7ff41c5",
 	"edit_feed":           "d2c1c8486d7faf4ee58151ccf3e3c690e53bd6872050d291c5db8452a83c3d53",
 	"edit_user":           "321e0a60cf3bf7441bff970f4920e4c5b7c1883f80ab1d1674f8137954b25033",
-	"entry":               "656a33552c3662c5d38a6178c811316ff55b38460b1f57d4087d51d631efe896",
-	"feed_entries":        "420da786e827a77fecc8794207d158af3a30e489ca2b2019f48d5228919af4a7",
+	"entry":               "bd611521ebb46714fce434fe7fa5d4e53e50da4c3ed02450ad3557f614f16e14",
+	"feed_entries":        "4dffdb55cfad29df20612efe7ed2dbed03d919c4556898543ab6450f610d3c99",
 	"feeds":               "2a5abe37968ea34a0576dbef52341645cb1fc9562e351382fbf721491da6f4fa",
-	"history":             "967bc95236269ab3a77455910aca1939f43f93171fe1af77eb3b1b4eac579e55",
+	"history_entries":     "451f0b202f47c9db5344d3e73862f5b7afbd4323fbdba21b6087866c40f045d3",
 	"import":              "73b5112e20bfd232bf73334544186ea419505936bc237d481517a8622901878f",
 	"integrations":        "979193f39c2a3b43cec192aa119713cc9cbe2d5fdaedf8d2b3573c752823446c",
 	"login":               "7d83c3067c02f1f6aafdd8816c7f97a4eb5a5a4bdaaaa4cc1e2fbb9c17ea65e8",
 	"sessions":            "3fa79031dd883847eba92fbafe5f535fa3a4e1614bb610f20588b6f8fc8b3624",
 	"settings":            "ea2505b9d0a6d6bb594dba87a92079de19baa6d494f0651693a7685489fb7de9",
-	"starred":             "d006f5bcfca7abc7c68b6bb38fe25838acb81b65f960fbf06b97b259ba03b936",
-	"unread":              "ad71a7bdd46c1d650efecbeeb37b7606a046027c15284c0712912b77397f90d4",
+	"unread_entries":      "ca3ef1547d7d170b005a2f48fabd4c0a15550884db5e481659c13ffe6a47d19d",
 	"users":               "c6d91b0b29984b4cb3073bec6a2933cfb72981ec60f54b6c7aa05194f0e860bd",
 }

+ 2 - 1
ui/bookmark_entries.go

@@ -56,6 +56,7 @@ func (c *Controller) ShowStarredPage(w http.ResponseWriter, r *http.Request) {
 	view.Set("menu", "starred")
 	view.Set("user", user)
 	view.Set("countUnread", c.store.CountUnreadEntries(user.ID))
+	view.Set("hasSaveEntry", c.store.HasSaveEntry(user.ID))
 
-	html.OK(w, view.Render("starred"))
+	html.OK(w, view.Render("bookmark_entries"))
 }

+ 1 - 0
ui/category_entries.go

@@ -73,6 +73,7 @@ func (c *Controller) CategoryEntries(w http.ResponseWriter, r *http.Request) {
 	view.Set("menu", "categories")
 	view.Set("user", user)
 	view.Set("countUnread", c.store.CountUnreadEntries(user.ID))
+	view.Set("hasSaveEntry", c.store.HasSaveEntry(user.ID))
 
 	html.OK(w, view.Render("category_entries"))
 }

+ 1 - 0
ui/entry_starred.go → ui/entry_bookmark.go

@@ -86,6 +86,7 @@ func (c *Controller) ShowStarredEntry(w http.ResponseWriter, r *http.Request) {
 	view.Set("menu", "starred")
 	view.Set("user", user)
 	view.Set("countUnread", c.store.CountUnreadEntries(user.ID))
+	view.Set("hasSaveEntry", c.store.HasSaveEntry(user.ID))
 
 	html.OK(w, view.Render("entry"))
 }

+ 1 - 0
ui/entry_category.go

@@ -93,6 +93,7 @@ func (c *Controller) ShowCategoryEntry(w http.ResponseWriter, r *http.Request) {
 	view.Set("menu", "categories")
 	view.Set("user", user)
 	view.Set("countUnread", c.store.CountUnreadEntries(user.ID))
+	view.Set("hasSaveEntry", c.store.HasSaveEntry(user.ID))
 
 	html.OK(w, view.Render("entry"))
 }

+ 1 - 0
ui/entry_feed.go

@@ -93,6 +93,7 @@ func (c *Controller) ShowFeedEntry(w http.ResponseWriter, r *http.Request) {
 	view.Set("menu", "feeds")
 	view.Set("user", user)
 	view.Set("countUnread", c.store.CountUnreadEntries(user.ID))
+	view.Set("hasSaveEntry", c.store.HasSaveEntry(user.ID))
 
 	html.OK(w, view.Render("entry"))
 }

+ 1 - 0
ui/entry_read.go

@@ -76,6 +76,7 @@ func (c *Controller) ShowReadEntry(w http.ResponseWriter, r *http.Request) {
 	view.Set("menu", "history")
 	view.Set("user", user)
 	view.Set("countUnread", c.store.CountUnreadEntries(user.ID))
+	view.Set("hasSaveEntry", c.store.HasSaveEntry(user.ID))
 
 	html.OK(w, view.Render("entry"))
 }

+ 1 - 0
ui/entry_unread.go

@@ -87,6 +87,7 @@ func (c *Controller) ShowUnreadEntry(w http.ResponseWriter, r *http.Request) {
 	view.Set("menu", "unread")
 	view.Set("user", user)
 	view.Set("countUnread", c.store.CountUnreadEntries(user.ID))
+	view.Set("hasSaveEntry", c.store.HasSaveEntry(user.ID))
 
 	html.OK(w, view.Render("entry"))
 }

+ 1 - 0
ui/feed_entries.go

@@ -73,6 +73,7 @@ func (c *Controller) ShowFeedEntries(w http.ResponseWriter, r *http.Request) {
 	view.Set("menu", "feeds")
 	view.Set("user", user)
 	view.Set("countUnread", c.store.CountUnreadEntries(user.ID))
+	view.Set("hasSaveEntry", c.store.HasSaveEntry(user.ID))
 
 	html.OK(w, view.Render("feed_entries"))
 }

+ 2 - 1
ui/history_entries.go

@@ -54,6 +54,7 @@ func (c *Controller) ShowHistoryPage(w http.ResponseWriter, r *http.Request) {
 	view.Set("menu", "history")
 	view.Set("user", user)
 	view.Set("countUnread", c.store.CountUnreadEntries(user.ID))
+	view.Set("hasSaveEntry", c.store.HasSaveEntry(user.ID))
 
-	html.OK(w, view.Render("history"))
+	html.OK(w, view.Render("history_entries"))
 }

+ 2 - 1
ui/unread_entries.go

@@ -58,6 +58,7 @@ func (c *Controller) ShowUnreadPage(w http.ResponseWriter, r *http.Request) {
 	view.Set("menu", "unread")
 	view.Set("user", user)
 	view.Set("countUnread", c.store.CountUnreadEntries(user.ID))
+	view.Set("hasSaveEntry", c.store.HasSaveEntry(user.ID))
 
-	html.OK(w, view.Render("unread"))
+	html.OK(w, view.Render("unread_entries"))
 }