mirror of
https://github.com/sissbruecker/linkding.git
synced 2025-08-13 21:49:26 +02:00

* Configurable tag grouping * update tag group name --------- Co-authored-by: Sascha Ißbrücker <sascha.issbruecker@gmail.com>
328 lines
15 KiB
HTML
328 lines
15 KiB
HTML
{% extends "bookmarks/layout.html" %}
|
|
{% load widget_tweaks %}
|
|
|
|
{% block content %}
|
|
<div class="settings-page">
|
|
|
|
{% include 'settings/nav.html' %}
|
|
|
|
{# Profile section #}
|
|
<section class="content-area">
|
|
{% if success_message %}
|
|
<div class="toast toast-success mb-4">{{ success_message }}</div>
|
|
{% endif %}
|
|
{% if error_message %}
|
|
<div class="toast toast-error mb-4">{{ error_message }}</div>
|
|
{% endif %}
|
|
<h2>Profile</h2>
|
|
<p>
|
|
<a href="{% url 'change_password' %}">Change password</a>
|
|
</p>
|
|
<form action="{% url 'bookmarks:settings.general' %}" method="post" novalidate>
|
|
{% csrf_token %}
|
|
<div class="form-group">
|
|
<label for="{{ form.theme.id_for_label }}" class="form-label">Theme</label>
|
|
{{ form.theme|add_class:"form-select width-25 width-sm-100" }}
|
|
<div class="form-input-hint">
|
|
Whether to use a light or dark theme, or automatically adjust the theme based on your system's settings.
|
|
</div>
|
|
</div>
|
|
<div class="form-group">
|
|
<label for="{{ form.bookmark_date_display.id_for_label }}" class="form-label">Bookmark date format</label>
|
|
{{ form.bookmark_date_display|add_class:"form-select width-25 width-sm-100" }}
|
|
<div class="form-input-hint">
|
|
Whether to show bookmark dates as relative (how long ago), or as absolute dates. Alternatively the date can
|
|
be hidden.
|
|
</div>
|
|
</div>
|
|
<div class="form-group">
|
|
<label for="{{ form.bookmark_description_display.id_for_label }}" class="form-label">Bookmark
|
|
description</label>
|
|
{{ form.bookmark_description_display|add_class:"form-select width-25 width-sm-100" }}
|
|
<div class="form-input-hint">
|
|
Whether to show bookmark descriptions and tags in the same line, or as separate blocks.
|
|
</div>
|
|
</div>
|
|
<div
|
|
class="form-group {% if request.user_profile.bookmark_description_display == 'inline' %}d-hide{% endif %}">
|
|
<label for="{{ form.bookmark_description_max_lines.id_for_label }}" class="form-label">Bookmark description
|
|
max lines</label>
|
|
{{ form.bookmark_description_max_lines|add_class:"form-input width-25 width-sm-100" }}
|
|
<div class="form-input-hint">
|
|
Limits the number of lines that are displayed for the bookmark description.
|
|
</div>
|
|
</div>
|
|
<div class="form-group">
|
|
<label for="{{ form.display_url.id_for_label }}" class="form-checkbox">
|
|
{{ form.display_url }}
|
|
<i class="form-icon"></i> Show bookmark URL
|
|
</label>
|
|
<div class="form-input-hint">
|
|
When enabled, this setting displays the bookmark URL below the title.
|
|
</div>
|
|
</div>
|
|
<div class="form-group">
|
|
<label for="{{ form.permanent_notes.id_for_label }}" class="form-checkbox">
|
|
{{ form.permanent_notes }}
|
|
<i class="form-icon"></i> Show notes permanently
|
|
</label>
|
|
<div class="form-input-hint">
|
|
Whether to show bookmark notes permanently, without having to toggle them individually.
|
|
Alternatively the keyboard shortcut <code>e</code> can be used to temporarily show all notes.
|
|
</div>
|
|
</div>
|
|
<div class="form-group">
|
|
<label>Bookmark actions</label>
|
|
<label for="{{ form.display_view_bookmark_action.id_for_label }}" class="form-checkbox">
|
|
{{ form.display_view_bookmark_action }}
|
|
<i class="form-icon"></i> View
|
|
</label>
|
|
<label for="{{ form.display_edit_bookmark_action.id_for_label }}" class="form-checkbox">
|
|
{{ form.display_edit_bookmark_action }}
|
|
<i class="form-icon"></i> Edit
|
|
</label>
|
|
<label for="{{ form.display_archive_bookmark_action.id_for_label }}" class="form-checkbox">
|
|
{{ form.display_archive_bookmark_action }}
|
|
<i class="form-icon"></i> Archive
|
|
</label>
|
|
<label for="{{ form.display_remove_bookmark_action.id_for_label }}" class="form-checkbox">
|
|
{{ form.display_remove_bookmark_action }}
|
|
<i class="form-icon"></i> Remove
|
|
</label>
|
|
<div class="form-input-hint">
|
|
Which actions to display for each bookmark.
|
|
</div>
|
|
</div>
|
|
<div class="form-group">
|
|
<label for="{{ form.bookmark_link_target.id_for_label }}" class="form-label">Open bookmarks in</label>
|
|
{{ form.bookmark_link_target|add_class:"form-select width-25 width-sm-100" }}
|
|
<div class="form-input-hint">
|
|
Whether to open bookmarks a new page or in the same page.
|
|
</div>
|
|
</div>
|
|
<div class="form-group">
|
|
<label for="{{ form.tag_search.id_for_label }}" class="form-label">Tag search</label>
|
|
{{ form.tag_search|add_class:"form-select width-25 width-sm-100" }}
|
|
<div class="form-input-hint">
|
|
In strict mode, tags must be prefixed with a hash character (#).
|
|
In lax mode, tags can also be searched without the hash character.
|
|
Note that tags without the hash character are indistinguishable from search terms, which means the search
|
|
result will also include bookmarks where a search term matches otherwise.
|
|
</div>
|
|
</div>
|
|
<div class="form-group">
|
|
<label for="{{ form.tag_grouping.id_for_label }}" class="form-label">Tag grouping</label>
|
|
{{ form.tag_grouping|add_class:"form-select width-25 width-sm-100" }}
|
|
<div class="form-input-hint">
|
|
In alphabetical mode, tags will be grouped by the first letter.
|
|
If disabled, tags will not be grouped.
|
|
</div>
|
|
</div>
|
|
<div class="form-group">
|
|
<label for="{{ form.enable_favicons.id_for_label }}" class="form-checkbox">
|
|
{{ form.enable_favicons }}
|
|
<i class="form-icon"></i> Enable Favicons
|
|
</label>
|
|
<div class="form-input-hint">
|
|
Automatically loads favicons for bookmarked websites and displays them next to each bookmark.
|
|
Enabling this feature automatically downloads all missing favicons.
|
|
By default, this feature uses a <b>Google service</b> to download favicons.
|
|
If you don't want to use this service, check the <a
|
|
href="https://github.com/sissbruecker/linkding/blob/master/docs/Options.md#ld_favicon_provider"
|
|
target="_blank">options documentation</a> on how to configure a custom favicon provider.
|
|
Icons are downloaded in the background, and it may take a while for them to show up.
|
|
</div>
|
|
{% if request.user_profile.enable_favicons and enable_refresh_favicons %}
|
|
<button class="btn mt-2" name="refresh_favicons">Refresh Favicons</button>
|
|
{% endif %}
|
|
</div>
|
|
<div class="form-group">
|
|
<label for="{{ form.enable_preview_images.id_for_label }}" class="form-checkbox">
|
|
{{ form.enable_preview_images }}
|
|
<i class="form-icon"></i> Enable Preview Images
|
|
</label>
|
|
<div class="form-input-hint">
|
|
Automatically loads preview images for bookmarked websites and displays them next to each bookmark.
|
|
Enabling this feature automatically downloads all missing preview images.
|
|
</div>
|
|
</div>
|
|
<div class="form-group">
|
|
<label for="{{ form.web_archive_integration.id_for_label }}" class="form-label">Internet Archive
|
|
integration</label>
|
|
{{ form.web_archive_integration|add_class:"form-select width-25 width-sm-100" }}
|
|
<div class="form-input-hint">
|
|
Enabling this feature will automatically create snapshots of bookmarked websites on the <a
|
|
href="https://web.archive.org/" target="_blank" rel="noopener">Internet Archive Wayback
|
|
Machine</a>.
|
|
This allows to preserve, and later access the website as it was at the point in time it was bookmarked, in
|
|
case it goes offline or its content is modified.
|
|
Please consider donating to the <a href="https://archive.org/donate" target="_blank"
|
|
rel="noopener">Internet Archive</a> if you make use of this feature.
|
|
</div>
|
|
</div>
|
|
<div class="form-group">
|
|
<label for="{{ form.enable_sharing.id_for_label }}" class="form-checkbox">
|
|
{{ form.enable_sharing }}
|
|
<i class="form-icon"></i> Enable bookmark sharing
|
|
</label>
|
|
<div class="form-input-hint">
|
|
Allows to share bookmarks with other users, and to view shared bookmarks.
|
|
Disabling this feature will hide all previously shared bookmarks from other users.
|
|
</div>
|
|
</div>
|
|
<div class="form-group">
|
|
<label for="{{ form.enable_public_sharing.id_for_label }}" class="form-checkbox">
|
|
{{ form.enable_public_sharing }}
|
|
<i class="form-icon"></i> Enable public bookmark sharing
|
|
</label>
|
|
<div class="form-input-hint">
|
|
Makes shared bookmarks publicly accessible, without requiring a login.
|
|
That means that anyone with a link to this instance can view shared bookmarks via the <a
|
|
href="{% url 'bookmarks:shared' %}">shared bookmarks page</a>.
|
|
</div>
|
|
</div>
|
|
{% if has_snapshot_support %}
|
|
<div class="form-group">
|
|
<label for="{{ form.enable_automatic_html_snapshots.id_for_label }}" class="form-checkbox">
|
|
{{ form.enable_automatic_html_snapshots }}
|
|
<i class="form-icon"></i> Automatically create HTML snapshots
|
|
</label>
|
|
<div class="form-input-hint">
|
|
Automatically creates HTML snapshots when adding bookmarks. Alternatively, when disabled, snapshots can be
|
|
created manually in the details view of a bookmark.
|
|
</div>
|
|
<button class="btn mt-2" name="create_missing_html_snapshots">Create missing HTML snapshots</button>
|
|
</div>
|
|
{% endif %}
|
|
<div class="form-group">
|
|
<label for="{{ form.default_mark_unread.id_for_label }}" class="form-checkbox">
|
|
{{ form.default_mark_unread }}
|
|
<i class="form-icon"></i> Create bookmarks as unread by default
|
|
</label>
|
|
<div class="form-input-hint">
|
|
Sets the default state for the "Mark as unread" option when creating a new bookmark.
|
|
Setting this option will make all new bookmarks default to unread.
|
|
This can be overridden when creating each new bookmark.
|
|
</div>
|
|
</div>
|
|
<div class="form-group">
|
|
<details {% if form.custom_css.value %}open{% endif %}>
|
|
<summary>Custom CSS</summary>
|
|
<label for="{{ form.custom_css.id_for_label }}" class="text-assistive">Custom CSS</label>
|
|
<div class="mt-2">
|
|
{{ form.custom_css|add_class:"form-input custom-css"|attr:"rows:6" }}
|
|
</div>
|
|
</details>
|
|
<div class="form-input-hint">
|
|
Allows to add custom CSS to the page.
|
|
</div>
|
|
</div>
|
|
<div class="form-group">
|
|
<input type="submit" name="update_profile" value="Save" class="btn btn-primary mt-2">
|
|
</div>
|
|
</form>
|
|
</section>
|
|
|
|
{# Import section #}
|
|
<section class="content-area">
|
|
<h2>Import</h2>
|
|
<p>Import bookmarks and tags in the Netscape HTML format. This will execute a sync where new bookmarks are
|
|
added and existing ones are updated.</p>
|
|
<form method="post" enctype="multipart/form-data" action="{% url 'bookmarks:settings.import' %}">
|
|
{% csrf_token %}
|
|
<div class="form-group">
|
|
<label for="import_map_private_flag" class="form-checkbox">
|
|
<input type="checkbox" id="import_map_private_flag" name="map_private_flag">
|
|
<i class="form-icon"></i> Import public bookmarks as shared
|
|
</label>
|
|
<div class="form-input-hint">
|
|
When importing bookmarks from a service that supports marking bookmarks as public or private (using the
|
|
<code>PRIVATE</code> attribute), enabling this option will import all bookmarks that are marked as not
|
|
private as shared bookmarks.
|
|
Otherwise, all bookmarks will be imported as private bookmarks.
|
|
</div>
|
|
</div>
|
|
<div class="form-group">
|
|
<div class="input-group width-75 width-md-100">
|
|
<input class="form-input" type="file" name="import_file">
|
|
<input type="submit" class="input-group-btn btn btn-primary" value="Upload">
|
|
</div>
|
|
</div>
|
|
</form>
|
|
</section>
|
|
|
|
{# Export section #}
|
|
<section class="content-area">
|
|
<h2>Export</h2>
|
|
<p>Export all bookmarks in Netscape HTML format.</p>
|
|
<a class="btn btn-primary" href="{% url 'bookmarks:settings.export' %}">Download (.html)</a>
|
|
{% if export_error %}
|
|
<div class="has-error">
|
|
<p class="form-input-hint">
|
|
{{ export_error }}
|
|
</p>
|
|
</div>
|
|
{% endif %}
|
|
</section>
|
|
|
|
{# About section #}
|
|
<section class="content-area about">
|
|
<h2>About</h2>
|
|
<table class="table">
|
|
<tbody>
|
|
<tr>
|
|
<td>Version</td>
|
|
<td>{{ version_info }}</td>
|
|
</tr>
|
|
<tr>
|
|
<td rowspan="3" style="vertical-align: top">Links</td>
|
|
<td><a href="https://github.com/sissbruecker/linkding/"
|
|
target="_blank">GitHub</a></td>
|
|
</tr>
|
|
<tr>
|
|
<td><a href="https://github.com/sissbruecker/linkding#documentation"
|
|
target="_blank">Documentation</a></td>
|
|
</tr>
|
|
<tr>
|
|
<td><a href="https://github.com/sissbruecker/linkding/blob/master/CHANGELOG.md"
|
|
target="_blank">Changelog</a></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</section>
|
|
</div>
|
|
|
|
<script>
|
|
const enableSharing = document.getElementById("{{ form.enable_sharing.id_for_label }}");
|
|
const enablePublicSharing = document.getElementById("{{ form.enable_public_sharing.id_for_label }}");
|
|
const bookmarkDescriptionDisplay = document.getElementById("{{ form.bookmark_description_display.id_for_label }}");
|
|
const bookmarkDescriptionMaxLines = document.getElementById("{{ form.bookmark_description_max_lines.id_for_label }}");
|
|
|
|
// Automatically disable public bookmark sharing if bookmark sharing is disabled
|
|
function updatePublicSharing() {
|
|
if (enableSharing.checked) {
|
|
enablePublicSharing.disabled = false;
|
|
} else {
|
|
enablePublicSharing.disabled = true;
|
|
enablePublicSharing.checked = false;
|
|
}
|
|
}
|
|
|
|
updatePublicSharing();
|
|
enableSharing.addEventListener("change", updatePublicSharing);
|
|
|
|
// Automatically hide the bookmark description max lines input if the description display is set to inline
|
|
function updateBookmarkDescriptionMaxLines() {
|
|
if (bookmarkDescriptionDisplay.value === "inline") {
|
|
bookmarkDescriptionMaxLines.closest(".form-group").classList.add("d-hide");
|
|
} else {
|
|
bookmarkDescriptionMaxLines.closest(".form-group").classList.remove("d-hide");
|
|
}
|
|
}
|
|
|
|
updateBookmarkDescriptionMaxLines();
|
|
bookmarkDescriptionDisplay.addEventListener("change", updateBookmarkDescriptionMaxLines);
|
|
</script>
|
|
|
|
{% endblock %}
|