Jelajahi Sumber

Add target property on bookmarks widget

Svilen Markov 6 bulan lalu
induk
melakukan
491bc65a38

+ 7 - 1
docs/configuration.md

@@ -1520,10 +1520,11 @@ An array of groups which can optionally have a title and a custom color.
 | links | array | yes | |
 | same-tab | boolean | no | false |
 | hide-arrow | boolean | no | false |
+| target | string | no | |
 
 > [!TIP]
 >
-> You can set `same-tab` and `hide-arrow` either on the group which will apply them to all links in that group, or on each individual link which will override the value set on the group.
+> You can set `same-tab`, `hide-arrow` and `target` either on the group which will apply them to all links in that group, or on each individual link which will override the value set on the group.
 
 ###### Properties for each link
 | Name | Type | Required | Default |
@@ -1533,6 +1534,7 @@ An array of groups which can optionally have a title and a custom color.
 | icon | string | no | |
 | same-tab | boolean | no | false |
 | hide-arrow | boolean | no | false |
+| target | string | no | |
 
 `icon`
 
@@ -1556,6 +1558,10 @@ Whether to open the link in the same tab or a new one.
 
 Whether to hide the colored arrow on each link.
 
+`target`
+
+Set a custom value for the link's `target` attribute. Possible values are `_blank`, `_self`, `_parent` and `_top`, you can read more about what they do [here](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a#target). This property has precedence over `same-tab`.
+
 ### ChangeDetection.io
 Display a list watches from changedetection.io.
 

+ 1 - 1
internal/glance/templates/bookmarks.html

@@ -13,7 +13,7 @@
                 <img class="bookmarks-icon{{ if .Icon.IsFlatIcon }} flat-icon{{ end }}" src="{{ .Icon.URL }}" alt="" loading="lazy">
             </div>
             {{ end }}
-            <a href="{{ .URL | safeURL }}" class="bookmarks-link {{ if .HideArrow }}bookmarks-link-no-arrow {{ end }}color-highlight size-h4" {{ if not .SameTab }}target="_blank"{{ end }} rel="noreferrer">{{ .Title }}</a>
+            <a href="{{ .URL | safeURL }}" class="bookmarks-link {{ if .HideArrow }}bookmarks-link-no-arrow {{ end }}color-highlight size-h4" {{ if .Target }}target="{{ .Target }}"{{ end }} rel="noreferrer">{{ .Title }}</a>
         </li>
         {{ end }}
         </ul>

+ 18 - 4
internal/glance/widget-bookmarks.go

@@ -14,6 +14,7 @@ type bookmarksWidget struct {
 		Color     *hslColorField `yaml:"color"`
 		SameTab   bool           `yaml:"same-tab"`
 		HideArrow bool           `yaml:"hide-arrow"`
+		Target    string         `yaml:"target"`
 		Links     []struct {
 			Title string          `yaml:"title"`
 			URL   string          `yaml:"url"`
@@ -23,10 +24,11 @@ type bookmarksWidget struct {
 			// {{ if not .SameTab }} would return true for any non-nil pointer
 			// which leaves us with no way of checking if the value is true or
 			// false, hence the duplicated fields below
-			SameTabRaw   *bool `yaml:"same-tab"`
-			SameTab      bool  `yaml:"-"`
-			HideArrowRaw *bool `yaml:"hide-arrow"`
-			HideArrow    bool  `yaml:"-"`
+			SameTabRaw   *bool  `yaml:"same-tab"`
+			SameTab      bool   `yaml:"-"`
+			HideArrowRaw *bool  `yaml:"hide-arrow"`
+			HideArrow    bool   `yaml:"-"`
+			Target       string `yaml:"target"`
 		} `yaml:"links"`
 	} `yaml:"groups"`
 }
@@ -49,6 +51,18 @@ func (widget *bookmarksWidget) initialize() error {
 			} else {
 				link.HideArrow = *link.HideArrowRaw
 			}
+
+			if link.Target == "" {
+				if group.Target != "" {
+					link.Target = group.Target
+				} else {
+					if link.SameTab {
+						link.Target = ""
+					} else {
+						link.Target = "_blank"
+					}
+				}
+			}
 		}
 	}