mirror of
https://github.com/miniflux/v2.git
synced 2025-08-01 17:38:37 +00:00
Rationale: Opening links in the current tab is the default browser behavior. Using `target="_blank"` on external links can lead to accessibility issues and override user preferences. It may also interfere with assistive technologies and expected browser behavior. To maintain backward compatibility, this option is enabled by default (`true`), which adds `target="_blank"` to links.
283 lines
16 KiB
HTML
283 lines
16 KiB
HTML
{{ define "title"}}{{ t "page.edit_feed.title" .feed.Title }}{{ end }}
|
|
|
|
{{ define "page_header"}}
|
|
<section class="page-header" aria-labelledby="page-header-title">
|
|
<h1 id="page-header-title" dir="auto">{{ .feed.Title }}</h1>
|
|
<nav aria-label="{{ .feed.Title }} {{ t "menu.title" }}">
|
|
<ul>
|
|
<li>
|
|
<a href="{{ route "feeds" }}">{{ icon "feeds" }}{{ t "menu.feeds" }}</a>
|
|
</li>
|
|
<li>
|
|
<a href="{{ route "feedEntries" "feedID" .feed.ID }}">{{ icon "entries" }}{{ t "menu.feed_entries" }}</a>
|
|
</li>
|
|
<li>
|
|
<a href="#"
|
|
data-confirm="true"
|
|
data-label-question="{{ t "confirm.question.refresh" }}"
|
|
data-label-yes="{{ t "confirm.yes" }}"
|
|
data-label-no="{{ t "confirm.no" }}"
|
|
data-label-loading="{{ t "confirm.loading" }}"
|
|
data-url="{{ route "refreshFeed" "feedID" .feed.ID }}?forceRefresh=true"
|
|
data-no-action-url="{{ route "refreshFeed" "feedID" .feed.ID }}?forceRefresh=false">{{ icon "refresh" }}{{ t "menu.refresh_feed" }}</a>
|
|
</li>
|
|
</ul>
|
|
</nav>
|
|
</section>
|
|
{{ end }}
|
|
|
|
{{ define "content"}}
|
|
{{ if not .categories }}
|
|
<p role="alert" class="alert alert-error">{{ t "page.add_feed.no_category" }}</p>
|
|
{{ else }}
|
|
{{ if ne .feed.ParsingErrorCount 0 }}
|
|
<div role="alert" class="alert alert-error">
|
|
<h3>{{ t "page.edit_feed.last_parsing_error" }}</h3>
|
|
<p>{{ t .feed.ParsingErrorMsg }}</p>
|
|
</div>
|
|
{{ end }}
|
|
|
|
<form action="{{ route "updateFeed" "feedID" .feed.ID }}" method="post" autocomplete="off">
|
|
<input type="hidden" name="csrf" value="{{ .csrf }}">
|
|
|
|
{{ if .errorMessage }}
|
|
<div role="alert" class="alert alert-error">{{ .errorMessage }}</div>
|
|
{{ end }}
|
|
|
|
<fieldset>
|
|
<legend>{{ t "form.feed.fieldset.general" }}</legend>
|
|
|
|
<label for="form-category">{{ t "form.feed.label.category" }}</label>
|
|
<select id="form-category" name="category_id" autofocus>
|
|
{{ range .categories }}
|
|
<option value="{{ .ID }}" {{ if eq .ID $.form.CategoryID }}selected="selected"{{ end }}>{{ .Title }}</option>
|
|
{{ end }}
|
|
</select>
|
|
|
|
<label for="form-title">{{ t "form.feed.label.title" }}</label>
|
|
<input type="text" name="title" id="form-title" value="{{ .form.Title }}" spellcheck="false" required>
|
|
|
|
<label for="form-site-url">{{ t "form.feed.label.site_url" }}</label>
|
|
<input type="url" name="site_url" id="form-site-url" placeholder="https://domain.tld/" value="{{ .form.SiteURL }}" spellcheck="false" required>
|
|
|
|
<label for="form-feed-url">{{ t "form.feed.label.feed_url" }}</label>
|
|
<input type="url" name="feed_url" id="form-feed-url" placeholder="https://domain.tld/" value="{{ .form.FeedURL }}" spellcheck="false" required>
|
|
|
|
<label for="form-description">{{ t "form.feed.label.description" }}</label>
|
|
<textarea name="description" id="form-description" cols="40" rows="10" >{{ .form.Description }}</textarea>
|
|
|
|
{{ if not .form.CategoryHidden }}
|
|
<label><input type="checkbox" name="hide_globally" value="1"{{ if .form.HideGlobally }} checked{{ end }}> {{ t "form.feed.label.hide_globally" }}</label>
|
|
{{ end }}
|
|
|
|
<label><input type="checkbox" name="no_media_player" {{ if .form.NoMediaPlayer }}checked{{ end }} value="1" > {{ t "form.feed.label.no_media_player" }} </label>
|
|
<label><input type="checkbox" name="disabled" value="1" {{ if .form.Disabled }}checked{{ end }}> {{ t "form.feed.label.disabled" }}</label>
|
|
|
|
<div class="buttons">
|
|
<button type="submit" class="button button-primary" data-label-loading="{{ t "form.submit.saving" }}">{{ t "action.update" }}</button>
|
|
</div>
|
|
</fieldset>
|
|
|
|
<fieldset>
|
|
<legend>{{ t "form.feed.fieldset.network_settings" }}</legend>
|
|
|
|
<label for="form-feed-username">{{ t "form.feed.label.feed_username" }}</label>
|
|
<input type="text" name="feed_username" id="form-feed-username" value="{{ .form.Username }}" spellcheck="false">
|
|
|
|
<label for="form-feed-password">{{ t "form.feed.label.feed_password" }}</label>
|
|
<!--
|
|
We are using the type "text" otherwise Firefox always autocomplete this password:
|
|
|
|
- autocomplete="off" or autocomplete="new-password" doesn't change anything
|
|
- Changing the input ID doesn't change anything
|
|
- Using a different input name doesn't change anything
|
|
-->
|
|
<input type="text" name="feed_password" id="form-feed-password" value="{{ .form.Password }}" spellcheck="false">
|
|
|
|
<label for="form-user-agent">{{ t "form.feed.label.user_agent" }}</label>
|
|
<input type="text" name="user_agent" id="form-user-agent" placeholder="{{ .defaultUserAgent }}" value="{{ .form.UserAgent }}" spellcheck="false">
|
|
|
|
<label for="form-proxy-url">{{ t "form.feed.label.proxy_url" }}</label>
|
|
<input type="url" name="proxy_url" id="form-proxy-url" value="{{ .form.ProxyURL }}" spellcheck="false">
|
|
|
|
<label for="form-cookie">{{ t "form.feed.label.cookie" }}</label>
|
|
<input type="text" name="cookie" id="form-cookie" value="{{ .form.Cookie }}" spellcheck="false">
|
|
|
|
<label><input type="checkbox" name="crawler" value="1" {{ if .form.Crawler }}checked{{ end }}> {{ t "form.feed.label.crawler" }}</label>
|
|
<label><input type="checkbox" name="ignore_http_cache" value="1" {{ if .form.IgnoreHTTPCache }}checked{{ end }}> {{ t "form.feed.label.ignore_http_cache" }}</label>
|
|
<label><input type="checkbox" name="allow_self_signed_certificates" value="1" {{ if .form.AllowSelfSignedCertificates }}checked{{ end }}> {{ t "form.feed.label.allow_self_signed_certificates" }}</label>
|
|
<label><input type="checkbox" name="disable_http2" value="1" {{ if .form.DisableHTTP2 }}checked{{ end }}> {{ t "form.feed.label.disable_http2" }}</label>
|
|
{{ if .hasProxyConfigured }}
|
|
<label><input type="checkbox" name="fetch_via_proxy" value="1" {{ if .form.FetchViaProxy }}checked{{ end }}> {{ t "form.feed.label.fetch_via_proxy" }}</label>
|
|
{{ end }}
|
|
|
|
<div class="buttons">
|
|
<button type="submit" class="button button-primary" data-label-loading="{{ t "form.submit.saving" }}">{{ t "action.update" }}</button>
|
|
</div>
|
|
</fieldset>
|
|
|
|
<fieldset>
|
|
<legend>{{ t "form.feed.fieldset.rules" }}</legend>
|
|
|
|
<div class="form-label-row">
|
|
<label for="form-scraper-rules">
|
|
{{ t "form.feed.label.scraper_rules" }}
|
|
</label>
|
|
|
|
<a href="https://miniflux.app/docs/rules.html#scraper-rules" {{ if $.user.OpenExternalLinksInNewTab }}target="_blank"{{ end }}>
|
|
{{ icon "external-link" }}
|
|
</a>
|
|
</div>
|
|
<input type="text" name="scraper_rules" id="form-scraper-rules" value="{{ .form.ScraperRules }}" spellcheck="false">
|
|
|
|
<div class="form-label-row">
|
|
<label for="form-rewrite-rules">
|
|
{{ t "form.feed.label.rewrite_rules" }}
|
|
</label>
|
|
|
|
<a href="https://miniflux.app/docs/rules.html#rewrite-rules" {{ if $.user.OpenExternalLinksInNewTab }}target="_blank"{{ end }}>
|
|
{{ icon "external-link" }}
|
|
</a>
|
|
</div>
|
|
<input type="text" name="rewrite_rules" id="form-rewrite-rules" value="{{ .form.RewriteRules }}" spellcheck="false">
|
|
<div class="form-label-row">
|
|
<label for="form-blocklist-rules">
|
|
{{ t "form.feed.label.blocklist_rules" }}
|
|
</label>
|
|
|
|
<a href="https://miniflux.app/docs/rules.html#feed-filtering-rules" {{ if $.user.OpenExternalLinksInNewTab }}target="_blank"{{ end }}>
|
|
{{ icon "external-link" }}
|
|
</a>
|
|
</div>
|
|
<input type="text" name="blocklist_rules" id="form-blocklist-rules" value="{{ .form.BlocklistRules }}" spellcheck="false">
|
|
|
|
<div class="form-label-row">
|
|
<label for="form-keeplist-rules">
|
|
{{ t "form.feed.label.keeplist_rules" }}
|
|
</label>
|
|
|
|
<a href="https://miniflux.app/docs/rules.html#feed-filtering-rules" {{ if $.user.OpenExternalLinksInNewTab }}target="_blank"{{ end }}>
|
|
{{ icon "external-link" }}
|
|
</a>
|
|
</div>
|
|
<input type="text" name="keeplist_rules" id="form-keeplist-rules" value="{{ .form.KeeplistRules }}" spellcheck="false">
|
|
|
|
<div class="form-label-row">
|
|
<label for="form-urlrewrite-rules">
|
|
{{ t "form.feed.label.urlrewrite_rules" }}
|
|
</label>
|
|
|
|
<a href="https://miniflux.app/docs/rules.html#rewriteurl-rules" {{ if $.user.OpenExternalLinksInNewTab }}target="_blank"{{ end }}>
|
|
{{ icon "external-link" }}
|
|
</a>
|
|
</div>
|
|
<input type="text" name="urlrewrite_rules" id="form-urlrewrite-rules" value="{{ .form.UrlRewriteRules }}" spellcheck="false">
|
|
|
|
<div class="buttons">
|
|
<button type="submit" class="button button-primary" data-label-loading="{{ t "form.submit.saving" }}">{{ t "action.update" }}</button>
|
|
</div>
|
|
</fieldset>
|
|
|
|
<fieldset>
|
|
<legend>{{ t "form.feed.fieldset.integration" }}</legend>
|
|
|
|
<details {{ if .form.AppriseServiceURLs }}open{{ end }}>
|
|
<summary>Apprise</summary>
|
|
<div class="form-label-row">
|
|
<label for="form-apprise-service-urls">
|
|
{{ t "form.feed.label.apprise_service_urls" }}
|
|
</label>
|
|
</div>
|
|
<input type="text" name="apprise_service_urls" id="form-apprise-service-urls" value="{{ .form.AppriseServiceURLs }}" spellcheck="false" autocomplete="off">
|
|
</details>
|
|
|
|
<details {{ if .form.NtfyEnabled }}open{{ end }}>
|
|
<summary>Ntfy</summary>
|
|
<label><input type="checkbox" name="ntfy_enabled" value="1" {{ if .form.NtfyEnabled }}checked{{ end }}> {{ t "form.feed.label.ntfy_activate" }}</label>
|
|
<div class="form-label-row">
|
|
<label for="form-ntfy-topic">
|
|
{{ t "form.feed.label.ntfy_topic" }}
|
|
</label>
|
|
</div>
|
|
<input type="text" name="ntfy_topic" id="form-ntfy-topic" value="{{ .form.NtfyTopic }}" spellcheck="false" autocomplete="off">
|
|
<div class="form-label-row">
|
|
<label for="form-ntfy-priority">
|
|
{{ t "form.feed.label.ntfy_priority" }}
|
|
</label>
|
|
|
|
<a href="https://docs.ntfy.sh/publish/#message-priority" {{ if $.user.OpenExternalLinksInNewTab }}target="_blank"{{ end }}>
|
|
{{ icon "external-link" }}
|
|
</a>
|
|
</div>
|
|
<select id="form-ntfy-priority" name="ntfy_priority">
|
|
<option value="5" {{ if eq .form.NtfyPriority 5 }}selected{{ end }}>5 - {{ t "form.feed.label.ntfy_max_priority" }}</option>
|
|
<option value="4" {{ if eq .form.NtfyPriority 4 }}selected{{ end }}>4 - {{ t "form.feed.label.ntfy_high_priority" }}</option>
|
|
<option value="3" {{ if eq .form.NtfyPriority 3 }}selected{{ end }}>3 - {{ t "form.feed.label.ntfy_default_priority" }}</option>
|
|
<option value="2" {{ if eq .form.NtfyPriority 2 }}selected{{ end }}>2 - {{ t "form.feed.label.ntfy_low_priority" }}</option>
|
|
<option value="1" {{ if eq .form.NtfyPriority 1 }}selected{{ end }}>1 - {{ t "form.feed.label.ntfy_min_priority" }}</option>
|
|
</select>
|
|
</details>
|
|
|
|
<details {{ if .form.PushoverEnabled }}open{{ end }}>
|
|
<summary>Pushover</summary>
|
|
<label><input type="checkbox" name="pushover_enabled" value="1" {{ if .form.PushoverEnabled }}checked{{ end }}> {{ t "form.feed.label.pushover_activate" }}</label>
|
|
<div class="form-label-row">
|
|
<label for="form-pushover-priority">
|
|
{{ t "form.feed.label.pushover_priority" }}
|
|
</label>
|
|
|
|
<a href="https://pushover.net/api#priority" {{ if $.user.OpenExternalLinksInNewTab }}target="_blank"{{ end }}>
|
|
{{ icon "external-link" }}
|
|
</a>
|
|
</div>
|
|
<select id="form-pushover-priority" name="pushover_priority">
|
|
<option value="2" {{ if eq .form.PushoverPriority 2 }}selected{{ end }}>2 - {{ t "form.feed.label.pushover_max_priority" }}</option>
|
|
<option value="1" {{ if eq .form.PushoverPriority 1 }}selected{{ end }}>1 - {{ t "form.feed.label.pushover_high_priority" }}</option>
|
|
<option value="0" {{ if eq .form.PushoverPriority 0 }}selected{{ end }}>0 - {{ t "form.feed.label.pushover_default_priority" }}</option>
|
|
<option value="-1" {{ if eq .form.PushoverPriority -1 }}selected{{ end }}>-1 - {{ t "form.feed.label.pushover_low_priority" }}</option>
|
|
<option value="-2" {{ if eq .form.PushoverPriority -2 }}selected{{ end }}>-2 - {{ t "form.feed.label.pushover_min_priority" }}</option>
|
|
</select>
|
|
</details>
|
|
|
|
<details {{ if .form.WebhookURL }}open{{ end }}>
|
|
<summary>Webhook</summary>
|
|
<div class="form-label-row">
|
|
<label for="form-webhook-url">
|
|
{{ t "form.feed.label.webhook_url" }}
|
|
</label>
|
|
</div>
|
|
<input type="url" name="webhook_url" id="form-webhook-url" value="{{ .form.WebhookURL }}" spellcheck="false" autocomplete="off">
|
|
</details>
|
|
|
|
<div class="buttons">
|
|
<button type="submit" class="button button-primary" data-label-loading="{{ t "form.submit.saving" }}">{{ t "action.update" }}</button>
|
|
</div>
|
|
</fieldset>
|
|
</form>
|
|
|
|
<div class="panel">
|
|
<ul>
|
|
<li><strong>{{ t "page.edit_feed.last_check" }} </strong><time datetime="{{ isodate .feed.CheckedAt }}" title="{{ isodate .feed.CheckedAt }}">{{ elapsed $.user.Timezone .feed.CheckedAt }}</time></li>
|
|
{{ $nextCheckDuration := duration .feed.NextCheckAt }}
|
|
{{ if ne $nextCheckDuration "" }}
|
|
<li><strong>{{ t "page.feeds.next_check" }}</strong> <time datetime="{{ isodate .feed.NextCheckAt }}" title="{{ isodate .feed.NextCheckAt }}">{{ $nextCheckDuration }}</time></li>
|
|
{{ end }}
|
|
<li><strong>{{ t "page.edit_feed.etag_header" }} </strong>{{ if .feed.EtagHeader }}{{ .feed.EtagHeader }}{{ else }}{{ t "page.edit_feed.no_header" }}{{ end }}</li>
|
|
<li><strong>{{ t "page.edit_feed.last_modified_header" }} </strong>{{ if .feed.LastModifiedHeader }}{{ .feed.LastModifiedHeader }}{{ else }}{{ t "page.edit_feed.no_header" }}{{ end }}</li>
|
|
</ul>
|
|
</div>
|
|
|
|
<div role="alert" class="alert alert-error">
|
|
<a href="#"
|
|
data-confirm="true"
|
|
data-action="remove-feed"
|
|
data-label-question="{{ t "confirm.question" }}"
|
|
data-label-yes="{{ t "confirm.yes" }}"
|
|
data-label-no="{{ t "confirm.no" }}"
|
|
data-label-loading="{{ t "confirm.loading" }}"
|
|
data-url="{{ route "removeFeed" "feedID" .feed.ID }}"
|
|
data-redirect-url="{{ route "feeds" }}">{{ t "action.remove_feed" }}</a>
|
|
</div>
|
|
{{ end }}
|
|
|
|
{{ end }}
|