1
0
Fork 0
mirror of synced 2024-07-16 03:35:46 +12:00
ArchiveBox/archivebox/templates/admin/base.html

325 lines
14 KiB
HTML
Raw Normal View History

{% load i18n static tz %}
{% get_current_language as LANGUAGE_CODE %}
{% get_current_language_bidi as LANGUAGE_BIDI %}
<!DOCTYPE html>
2019-04-23 13:40:42 +12:00
<html lang="{{ LANGUAGE_CODE|default:"en-us" }}" {% if LANGUAGE_BIDI %}dir="rtl"{% endif %}>
<head>
<title>{% block title %}Home{% endblock %} | ArchiveBox</title>
{% block blockbots %}
<meta name="robots" content="NONE,NOARCHIVE">
{% endblock %}
<link rel="stylesheet" type="text/css" href="{% block stylesheet %}{% static "admin/css/base.css" %}{% endblock %}">
{% block extrastyle %}{% endblock %}
{% if LANGUAGE_BIDI %}
<link rel="stylesheet" type="text/css" href="{% block stylesheet_rtl %}{% static "admin/css/rtl.css" %}{% endblock %}">
2019-04-23 13:40:42 +12:00
{% endif %}
{% block responsive %}
<meta name="viewport" content="user-scalable=no, width=device-width, initial-scale=1.0, maximum-scale=1.0">
<link rel="stylesheet" type="text/css" href="{% static "admin/css/responsive.css" %}">
{% if LANGUAGE_BIDI %}
<link rel="stylesheet" type="text/css" href="{% static "admin/css/responsive_rtl.css" %}">
{% endif %}
2019-04-23 13:40:42 +12:00
{% endblock %}
<link rel="stylesheet" type="text/css" href="{% static "admin.css" %}">
<script>
function selectSnapshotListView(e) {
e && e.stopPropagation()
e && e.preventDefault()
console.log('Switching to Snapshot list view...')
localStorage.setItem('preferred_snapshot_view_mode', 'list')
window.location = "{% url 'admin:core_snapshot_changelist' %}" + document.location.search
return false
}
function selectSnapshotGridView(e) {
e && e.stopPropagation()
e && e.preventDefault()
console.log('Switching to Snapshot grid view...')
localStorage.setItem('preferred_snapshot_view_mode', 'grid')
window.location = "{% url 'admin:grid' %}" + document.location.search
return false
}
const preferred_view = localStorage.getItem('preferred_snapshot_view_mode') || 'unset'
const current_view = (
window.location.pathname === "{% url 'admin:core_snapshot_changelist' %}"
? 'list'
: 'grid')
console.log('Preferred snapshot view is:', preferred_view, 'Current view mode is:', current_view)
if (preferred_view === 'grid' && current_view !== 'grid') {
selectSnapshotGridView()
}
</script>
{% block extrahead %}{% endblock %}
</head>
<body class="{% if is_popup %}popup {% endif %}{% block bodyclass %}{% endblock %}" data-admin-utc-offset="{% now "Z" %}">
{% include 'progressbar.html' %}
<div id="container">
{% if not is_popup %}
<div id="header">
<div id="branding">
<h1 id="site-name">
<a href="{% url 'Home' %}">
<img src="{% static 'archive.png' %}" id="logo">
ArchiveBox
</a>
</h1>
</div>
{% block usertools %}
{% if has_permission %}
{% include 'navigation.html' %}
{% endif %}
{% endblock %}
{% block nav-global %}{% endblock %}
</div>
{% block breadcrumbs %}
<div class="breadcrumbs">
<a href="{% url 'admin:index' %}">{% trans 'Home' %}</a>
{% if title %} &rsaquo; {{ title }}{% endif %}
</div>
{% endblock %}
{% endif %}
{% block messages %}
{% if messages %}
<ul class="messagelist">
{% for message in messages %}
<li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message|capfirst }}</li>
{% endfor %}
</ul>
{% endif %}
{% endblock messages %}
<div id="content" class="{% block coltype %}colM{% endblock %}">
{% if opts.model_name == 'snapshot' and cl %}
<small id="snapshot-view-mode">
<a href="#list" title="List view" id="snapshot-view-list"></a> |
<a href="#grid" title="Grid view" id="snapshot-view-grid" style="letter-spacing: -.4em;">⣿⣿</a>
</small>
{% endif %}
{% block pretitle %}{% endblock %}
{% block content_title %}{# {% if title %}<h1>{{ title }}</h1>{% endif %} #}{% endblock %}
{% block content %}
{% block object-tools %}{% endblock %}
{{ content }}
{% endblock %}
{% block sidebar %}{% endblock %}
<br class="clear">
</div>
{% block footer %}<div id="footer"></div>{% endblock %}
2020-07-28 22:00:09 +12:00
</div>
2019-04-23 13:40:42 +12:00
<script>
const installedVersion = "{{VERSION}}";
// get versions from GitHub
const github_releases_api = "https://api.github.com/repos/pirate/archivebox/releases";
let release_data = fetch(github_releases_api)
.then(response => response.json())
.then(release_data => {
let upgradeVersion = findUpgradeVersion(installedVersion, release_data);
let currentVersion = findCurrentVersion(installedVersion, release_data);
const showBanner = localStorage.getItem("bannerDismissed") !== "true" && currentVersion.html_url !== upgradeVersion.html_url
if (showBanner) {
createBanner(currentVersion, upgradeVersion);
}
})
.catch(error => {
console.error('Error fetching release data: ', error);
});
// finds the nearest stable version
function findCurrentVersion(currentVersionTagName, releaseData) {
for (let i = 0; i < releaseData.length; i++) {
if (compareVersions(releaseData[i].tag_name, currentVersionTagName) <= 0) {
return releaseData[i];
}
}
return releaseData[releaseData.length - 1];
}
function findUpgradeVersion(currentVersionTagName, releaseData) {
for (let i = 0; i < releaseData.length; i++) {
if (majorVersionDiff(releaseData[i].tag_name, currentVersionTagName) === 1) {
return releaseData[i];
}
}
return releaseData[0];
}
function createBanner(currentVersion, upgradeVersion) {
const banner = document.createElement('div');
banner.setAttribute('id', 'upgrade-banner');
banner.innerHTML = `
There's a new version of ArchiveBox available!
The next major version is <a href=${upgradeVersion.html_url}>${upgradeVersion.tag_name}</a>.
Your current version is <a href=${currentVersion.html_url}>${installedVersion}</a>
<p>
<a href=https://github.com/ArchiveBox/ArchiveBox/wiki/Upgrading-or-Merging-Archives>Upgrading</a> | <a href=https://github.com/ArchiveBox/ArchiveBox/releases>Changelog</a> | <a href=https://github.com/ArchiveBox/ArchiveBox/wiki/Roadmap>Roadmap</a>
</p>
<button>
<a href="#" onclick="dismissBanner()">Dismiss</a>
</button>
`
document.body.appendChild(banner);
}
// dismisses the version banner and stores a cookie to prevent it from showing again
function dismissBanner() {
var banner = document.getElementById("version-banner");
banner.style.display = "none";
localStorage.setItem("bannerDismissed", "true");
}
function parseVersion(v) {
return v.replace(/^v/, '').split(".").map(Number);
}
// compares two version strings formatted like "vx.x.x" (where the x's are integers)
// and returns 1 if v1 is newer than v2, 0 if they're the same, and -1
// if v1 is older than v2.
function compareVersions(v1, v2) {
let v1Parts = parseVersion(v1);
let v2Parts = parseVersion(v2);
for (let i = 0; i < 3; i++) {
if (v1Parts[i] < v2Parts[i]) {
return -1;
}
if (v1Parts[i] > v2Parts[i]) {
return 1;
}
}
return 0;
}
function majorVersionDiff(v1, v2) {
let v1Parts = parseVersion(v1);
let v2Parts = parseVersion(v2);
return v1Parts[1] - v2Parts[1];
}
$ = django.jQuery;
$.fn.reverse = [].reverse;
// hide images that fail to load
document.querySelector('body').addEventListener('error', function (e) {
e.target.style.opacity = 0;
}, true)
// setup timezone
{% get_current_timezone as TIME_ZONE %}
window.TIME_ZONE = '{{TIME_ZONE}}'
window.setCookie = function(name, value, days) {
let expires = ""
if (days) {
const date = new Date()
date.setTime(date.getTime() + (days*24*60*60*1000))
expires = "; expires=" + date.toUTCString()
}
document.cookie = name + "=" + (value || "") + expires + "; path=/"
}
2019-04-23 13:40:42 +12:00
function setTimeOffset() {
if (window.GMT_OFFSET) return
window.GMT_OFFSET = -(new Date).getTimezoneOffset()
window.setCookie('GMT_OFFSET', window.GMT_OFFSET, 365)
}
2019-04-23 13:40:42 +12:00
// change the admin actions button from a dropdown to buttons across
function fix_actions() {
const container = $('div.actions')
2020-07-28 22:00:09 +12:00
// too many actions to turn into buttons
if (container.find('select[name=action] option').length >= 11) return
2020-07-28 22:00:09 +12:00
// hide the empty default option thats just a placeholder with no value
container.find('label:nth-child(1), button[value=0]').hide()
2020-07-28 22:00:09 +12:00
const buttons = $('<div></div>')
.insertAfter('div.actions button[type=submit]')
2020-07-28 22:00:09 +12:00
.css('display', 'inline')
.addClass('class', 'action-buttons');
// for each action in the dropdown, turn it into a button instead
container.find('select[name=action] option:gt(0)').each(function () {
const action_type = this.value
2020-07-28 22:00:09 +12:00
$('<button>')
.attr('type', 'button')
.attr('name', action_type)
2020-07-28 22:00:09 +12:00
.addClass('button')
.text(this.text)
.click(function (e) {
e.preventDefault()
e.stopPropagation()
const num_selected = document.querySelector('.action-counter').innerText.split(' ')[0]
if (action_type === 'overwrite_snapshots') {
const message = (
'Are you sure you want to re-archive (overwrite) ' + num_selected + ' Snapshots?\n\n' +
'This will delete all previously saved files from these Snapshots and re-archive them from scratch.\n\n'
)
if (!window.confirm(message)) return false
}
if (action_type === 'delete_snapshots') {
const message = (
'Are you sure you want to permanently delete ' + num_selected + ' Snapshots?\n\n' +
'They will be removed from your index, and all their Snapshot content on disk will be permanently deleted.'
)
if (!window.confirm(message)) return false
}
// select the action button from the dropdown
container.find('select[name=action]')
.find('[selected]').removeAttr('selected').end()
.find('[value=' + action_type + ']').attr('selected', 'selected').click()
// click submit & replace the archivebox logo with a spinner
$('#changelist-form button[name="index"]').click()
2020-07-28 22:00:09 +12:00
document.querySelector('#logo').outerHTML = '<div class="loader"></div>'
return false
})
.appendTo(buttons)
})
console.log('Converted', buttons.children().length, 'admin actions from dropdown to buttons')
}
function setupSnapshotGridListToggle() {
$("#snapshot-view-list").click(selectSnapshotListView)
$("#snapshot-view-grid").click(selectSnapshotGridView)
$('#changelist-form .card input:checkbox').change(function() {
if ($(this).is(':checked'))
$(this).parents('.card').addClass('selected-card')
2020-12-15 10:00:59 +13:00
else
$(this).parents('.card').removeClass('selected-card')
})
};
$(document).ready(function() {
fix_actions()
setupSnapshotGridListToggle()
setTimeOffset()
})
</script>
</body>
2019-04-23 13:40:42 +12:00
</html>