mirror of
https://github.com/plexguide/Huntarr.io.git
synced 2026-02-19 07:15:52 -05:00
Welcome Message & Bug Icon
This commit is contained in:
@@ -584,6 +584,17 @@
|
||||
box-shadow: 0 2px 8px rgba(99, 102, 241, 0.2);
|
||||
}
|
||||
|
||||
.sidebar-social-btn.issues-btn {
|
||||
color: #f59e0b;
|
||||
background: rgba(245, 158, 11, 0.08);
|
||||
}
|
||||
.sidebar-social-btn.issues-btn:hover {
|
||||
color: #fbbf24;
|
||||
background: rgba(245, 158, 11, 0.2);
|
||||
border-color: rgba(245, 158, 11, 0.3);
|
||||
box-shadow: 0 2px 8px rgba(245, 158, 11, 0.2);
|
||||
}
|
||||
|
||||
/* ===== SIDEBAR FOOTER ===== */
|
||||
.sidebar-footer {
|
||||
position: absolute;
|
||||
|
||||
@@ -730,6 +730,8 @@ let huntarrUI = {
|
||||
if (window.HomeRequestarr) {
|
||||
window.HomeRequestarr.refresh();
|
||||
}
|
||||
// Show welcome message on first visit (not during setup wizard)
|
||||
this._maybeShowWelcome();
|
||||
} else if (section === 'logs-media-hunt' && this.elements.logsSection) {
|
||||
// Media Hunt logs - show logsSection under Movie Hunt sidebar (hide tab bar)
|
||||
var activitySection = document.getElementById('activitySection');
|
||||
@@ -2036,6 +2038,36 @@ let huntarrUI = {
|
||||
if (typeof setActiveNavItem === 'function') setActiveNavItem();
|
||||
},
|
||||
|
||||
_maybeShowWelcome: function() {
|
||||
// Don't show during setup wizard phase
|
||||
var wizardCompleted = HuntarrUtils.getUIPreference('media-hunt-wizard-completed', false);
|
||||
if (!wizardCompleted) return;
|
||||
// Check if already dismissed
|
||||
var dismissed = HuntarrUtils.getUIPreference('welcome-dismissed', false);
|
||||
if (dismissed) return;
|
||||
// Show the welcome modal
|
||||
var modal = document.getElementById('huntarr-welcome-modal');
|
||||
if (!modal) return;
|
||||
modal.style.display = 'flex';
|
||||
// Wire up dismiss handlers (only once)
|
||||
if (!modal._welcomeWired) {
|
||||
modal._welcomeWired = true;
|
||||
var dismissBtn = document.getElementById('huntarr-welcome-dismiss');
|
||||
var closeBtn = document.getElementById('huntarr-welcome-close');
|
||||
var backdrop = document.getElementById('huntarr-welcome-backdrop');
|
||||
var dismiss = function() {
|
||||
modal.style.display = 'none';
|
||||
HuntarrUtils.setUIPreference('welcome-dismissed', true);
|
||||
};
|
||||
if (dismissBtn) dismissBtn.addEventListener('click', dismiss);
|
||||
if (closeBtn) closeBtn.addEventListener('click', dismiss);
|
||||
if (backdrop) backdrop.addEventListener('click', dismiss);
|
||||
document.addEventListener('keydown', function(e) {
|
||||
if (e.key === 'Escape' && modal.style.display === 'flex') dismiss();
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
_updateMainSidebarBetaVisibility: function() {
|
||||
// Partner Projects always visible in unified sidebar
|
||||
},
|
||||
|
||||
32
frontend/static/js/dist/bundle-app.js
vendored
32
frontend/static/js/dist/bundle-app.js
vendored
@@ -732,6 +732,8 @@ let huntarrUI = {
|
||||
if (window.HomeRequestarr) {
|
||||
window.HomeRequestarr.refresh();
|
||||
}
|
||||
// Show welcome message on first visit (not during setup wizard)
|
||||
this._maybeShowWelcome();
|
||||
} else if (section === 'logs-media-hunt' && this.elements.logsSection) {
|
||||
// Media Hunt logs - show logsSection under Movie Hunt sidebar (hide tab bar)
|
||||
var activitySection = document.getElementById('activitySection');
|
||||
@@ -2038,6 +2040,36 @@ let huntarrUI = {
|
||||
if (typeof setActiveNavItem === 'function') setActiveNavItem();
|
||||
},
|
||||
|
||||
_maybeShowWelcome: function() {
|
||||
// Don't show during setup wizard phase
|
||||
var wizardCompleted = HuntarrUtils.getUIPreference('media-hunt-wizard-completed', false);
|
||||
if (!wizardCompleted) return;
|
||||
// Check if already dismissed
|
||||
var dismissed = HuntarrUtils.getUIPreference('welcome-dismissed', false);
|
||||
if (dismissed) return;
|
||||
// Show the welcome modal
|
||||
var modal = document.getElementById('huntarr-welcome-modal');
|
||||
if (!modal) return;
|
||||
modal.style.display = 'flex';
|
||||
// Wire up dismiss handlers (only once)
|
||||
if (!modal._welcomeWired) {
|
||||
modal._welcomeWired = true;
|
||||
var dismissBtn = document.getElementById('huntarr-welcome-dismiss');
|
||||
var closeBtn = document.getElementById('huntarr-welcome-close');
|
||||
var backdrop = document.getElementById('huntarr-welcome-backdrop');
|
||||
var dismiss = function() {
|
||||
modal.style.display = 'none';
|
||||
HuntarrUtils.setUIPreference('welcome-dismissed', true);
|
||||
};
|
||||
if (dismissBtn) dismissBtn.addEventListener('click', dismiss);
|
||||
if (closeBtn) closeBtn.addEventListener('click', dismiss);
|
||||
if (backdrop) backdrop.addEventListener('click', dismiss);
|
||||
document.addEventListener('keydown', function(e) {
|
||||
if (e.key === 'Escape' && modal.style.display === 'flex') dismiss();
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
_updateMainSidebarBetaVisibility: function() {
|
||||
// Partner Projects always visible in unified sidebar
|
||||
},
|
||||
|
||||
30
frontend/static/js/dist/bundle-settings.js
vendored
30
frontend/static/js/dist/bundle-settings.js
vendored
@@ -14547,6 +14547,13 @@ document.head.appendChild(styleEl);
|
||||
</button>
|
||||
<p class="setting-help">Re-show the Media Hunt setup wizard on next visit. Useful if you skipped the wizard and want to run it again.</p>
|
||||
</div>
|
||||
<div class="setting-item" style="margin-top: 15px; border-top: 1px solid rgba(148, 163, 184, 0.08); padding-top: 15px;">
|
||||
<label>Reset Welcome Message:</label>
|
||||
<button type="button" id="reset-welcome-message-btn" class="mset-btn-secondary" style="margin-top: 6px; padding: 7px 16px; background: rgba(239, 68, 68, 0.08); border: 1px solid rgba(239, 68, 68, 0.25); border-radius: 6px; color: #f87171; font-size: 0.85rem; cursor: pointer; transition: all 0.15s;">
|
||||
<i class="fas fa-envelope-open"></i> Reset Welcome
|
||||
</button>
|
||||
<p class="setting-help">Re-show the welcome message on the Home page. Useful for testing or if you want to see the welcome message again.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -14604,6 +14611,29 @@ document.head.appendChild(styleEl);
|
||||
});
|
||||
}
|
||||
|
||||
// Reset Welcome Message button
|
||||
var resetWelcomeBtn = container.querySelector('#reset-welcome-message-btn');
|
||||
if (resetWelcomeBtn) {
|
||||
resetWelcomeBtn.addEventListener('click', function() {
|
||||
if (window.HuntarrConfirm && window.HuntarrConfirm.show) {
|
||||
window.HuntarrConfirm.show({
|
||||
title: 'Reset Welcome Message',
|
||||
message: 'This will re-show the welcome message the next time you visit the Home page. Continue?',
|
||||
confirmLabel: 'Reset',
|
||||
cancelLabel: 'Cancel',
|
||||
onConfirm: function() {
|
||||
HuntarrUtils.setUIPreference('welcome-dismissed', false);
|
||||
if (window.HuntarrToast) window.HuntarrToast.success('Welcome message has been reset. It will show on your next visit to Home.');
|
||||
}
|
||||
});
|
||||
} else {
|
||||
if (confirm('Reset the welcome message? It will show again on your next Home page visit.')) {
|
||||
HuntarrUtils.setUIPreference('welcome-dismissed', false);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if (window.SettingsForms.setupSettingsManualSave) {
|
||||
window.SettingsForms.setupSettingsManualSave(container, settings);
|
||||
}
|
||||
|
||||
@@ -204,6 +204,13 @@
|
||||
</button>
|
||||
<p class="setting-help">Re-show the Media Hunt setup wizard on next visit. Useful if you skipped the wizard and want to run it again.</p>
|
||||
</div>
|
||||
<div class="setting-item" style="margin-top: 15px; border-top: 1px solid rgba(148, 163, 184, 0.08); padding-top: 15px;">
|
||||
<label>Reset Welcome Message:</label>
|
||||
<button type="button" id="reset-welcome-message-btn" class="mset-btn-secondary" style="margin-top: 6px; padding: 7px 16px; background: rgba(239, 68, 68, 0.08); border: 1px solid rgba(239, 68, 68, 0.25); border-radius: 6px; color: #f87171; font-size: 0.85rem; cursor: pointer; transition: all 0.15s;">
|
||||
<i class="fas fa-envelope-open"></i> Reset Welcome
|
||||
</button>
|
||||
<p class="setting-help">Re-show the welcome message on the Home page. Useful for testing or if you want to see the welcome message again.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -261,6 +268,29 @@
|
||||
});
|
||||
}
|
||||
|
||||
// Reset Welcome Message button
|
||||
var resetWelcomeBtn = container.querySelector('#reset-welcome-message-btn');
|
||||
if (resetWelcomeBtn) {
|
||||
resetWelcomeBtn.addEventListener('click', function() {
|
||||
if (window.HuntarrConfirm && window.HuntarrConfirm.show) {
|
||||
window.HuntarrConfirm.show({
|
||||
title: 'Reset Welcome Message',
|
||||
message: 'This will re-show the welcome message the next time you visit the Home page. Continue?',
|
||||
confirmLabel: 'Reset',
|
||||
cancelLabel: 'Cancel',
|
||||
onConfirm: function() {
|
||||
HuntarrUtils.setUIPreference('welcome-dismissed', false);
|
||||
if (window.HuntarrToast) window.HuntarrToast.success('Welcome message has been reset. It will show on your next visit to Home.');
|
||||
}
|
||||
});
|
||||
} else {
|
||||
if (confirm('Reset the welcome message? It will show again on your next Home page visit.')) {
|
||||
HuntarrUtils.setUIPreference('welcome-dismissed', false);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if (window.SettingsForms.setupSettingsManualSave) {
|
||||
window.SettingsForms.setupSettingsManualSave(container, settings);
|
||||
}
|
||||
|
||||
@@ -2342,4 +2342,199 @@ document.addEventListener('DOMContentLoaded', function() {
|
||||
// Home sponsor banner is driven by app-sponsor-rotation.js (same rotation as app pages)
|
||||
});
|
||||
</script>
|
||||
|
||||
<!-- Welcome Message Modal -->
|
||||
<div id="huntarr-welcome-modal" style="display: none;">
|
||||
<div class="huntarr-welcome-backdrop" id="huntarr-welcome-backdrop"></div>
|
||||
<div class="huntarr-welcome-content">
|
||||
<div class="huntarr-welcome-header">
|
||||
<button type="button" class="huntarr-welcome-close" id="huntarr-welcome-close" aria-label="Close">
|
||||
<i class="fas fa-times"></i>
|
||||
</button>
|
||||
<div class="huntarr-welcome-logo">
|
||||
<i class="fas fa-rocket"></i>
|
||||
</div>
|
||||
<h2 class="huntarr-welcome-title">Welcome to Huntarr</h2>
|
||||
<p class="huntarr-welcome-subtitle">Your all-in-one media management companion</p>
|
||||
</div>
|
||||
<div class="huntarr-welcome-body">
|
||||
<p>Thanks for choosing Huntarr! This app is built with one goal in mind: <strong>making media management simple</strong>. Rather than overwhelming you with hundreds of advanced settings, Huntarr focuses on what matters most — helping you find and organize your media with ease.</p>
|
||||
<p>Huntarr is designed for the <strong>90% of users</strong> who just want things to work. If you're new to the *arr ecosystem, you're in the right place.</p>
|
||||
<div class="huntarr-welcome-tip">
|
||||
<i class="fas fa-lightbulb"></i>
|
||||
<div>
|
||||
<strong>A note on updates:</strong> If you're running Huntarr via Docker with the <code>huntarr/huntarr:latest</code> tag, expect frequent updates and rapid changes — we move fast! For a more stable experience, pin to a specific version like <code>huntarr/huntarr:9.3.0</code>.
|
||||
</div>
|
||||
</div>
|
||||
<p>Huntarr is a free, community-driven project. The goal has always been to make your media experience enjoyable and hassle-free.</p>
|
||||
<p>A heartfelt thank you to everyone who has supported <strong>my daughter's education</strong> through sponsorships — it truly means the world to our family. Knowing that so many people I've never even met genuinely care is the greatest motivation I could ever ask for. A special shoutout to the <strong>r/Unraid</strong> community — where it all started! I build this for you.</p>
|
||||
<p class="huntarr-welcome-signoff">Happy hunting!<br><strong>— Admin9705</strong></p>
|
||||
</div>
|
||||
<div class="huntarr-welcome-footer">
|
||||
<button type="button" class="huntarr-welcome-dismiss" id="huntarr-welcome-dismiss">
|
||||
<i class="fas fa-check"></i> Got it, thanks!
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<style>
|
||||
#huntarr-welcome-modal {
|
||||
position: fixed;
|
||||
top: 0; left: 0; right: 0; bottom: 0;
|
||||
z-index: 10000;
|
||||
display: none;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
#huntarr-welcome-modal[style*="display: flex"] { display: flex !important; }
|
||||
|
||||
.huntarr-welcome-backdrop {
|
||||
position: fixed;
|
||||
top: 0; left: 0; right: 0; bottom: 0;
|
||||
background: rgba(0, 0, 0, 0.75);
|
||||
backdrop-filter: blur(14px);
|
||||
-webkit-backdrop-filter: blur(14px);
|
||||
z-index: 10000;
|
||||
}
|
||||
.huntarr-welcome-content {
|
||||
position: relative;
|
||||
z-index: 10001;
|
||||
background: rgba(15, 23, 42, 0.98);
|
||||
border: 2px solid rgba(99, 102, 241, 0.35);
|
||||
border-radius: 16px;
|
||||
max-width: 780px;
|
||||
width: 94%;
|
||||
max-height: 85vh;
|
||||
overflow-y: auto;
|
||||
box-shadow: 0 30px 60px rgba(0, 0, 0, 0.6), 0 0 60px rgba(99, 102, 241, 0.1);
|
||||
animation: welcomeFadeIn 0.3s ease-out;
|
||||
}
|
||||
@keyframes welcomeFadeIn {
|
||||
from { opacity: 0; transform: scale(0.95) translateY(10px); }
|
||||
to { opacity: 1; transform: scale(1) translateY(0); }
|
||||
}
|
||||
.huntarr-welcome-header {
|
||||
position: relative;
|
||||
padding: 28px 28px 18px;
|
||||
text-align: center;
|
||||
background: linear-gradient(135deg, #1e293b 0%, #334155 50%, #0f172a 100%);
|
||||
border-bottom: 1px solid rgba(148, 163, 184, 0.08);
|
||||
}
|
||||
.huntarr-welcome-close {
|
||||
position: absolute;
|
||||
top: 14px; right: 14px;
|
||||
background: transparent;
|
||||
border: none;
|
||||
color: #94a3b8;
|
||||
font-size: 1.2rem;
|
||||
cursor: pointer;
|
||||
padding: 4px;
|
||||
transition: color 0.15s;
|
||||
}
|
||||
.huntarr-welcome-close:hover { color: #f8fafc; }
|
||||
.huntarr-welcome-logo {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 56px; height: 56px;
|
||||
border-radius: 50%;
|
||||
background: linear-gradient(135deg, #6366f1, #4f46e5);
|
||||
margin-bottom: 12px;
|
||||
font-size: 1.5rem;
|
||||
color: #fff;
|
||||
box-shadow: 0 4px 20px rgba(99, 102, 241, 0.3);
|
||||
}
|
||||
.huntarr-welcome-title {
|
||||
margin: 0 0 4px;
|
||||
font-size: 1.5rem;
|
||||
font-weight: 700;
|
||||
color: #f8fafc;
|
||||
}
|
||||
.huntarr-welcome-subtitle {
|
||||
margin: 0;
|
||||
font-size: 0.95rem;
|
||||
color: #94a3b8;
|
||||
}
|
||||
.huntarr-welcome-body {
|
||||
padding: 22px 28px;
|
||||
color: #cbd5e1;
|
||||
font-size: 0.92rem;
|
||||
line-height: 1.65;
|
||||
}
|
||||
.huntarr-welcome-body p {
|
||||
margin: 0 0 14px;
|
||||
}
|
||||
.huntarr-welcome-body p:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.huntarr-welcome-body strong {
|
||||
color: #f1f5f9;
|
||||
}
|
||||
.huntarr-welcome-body code {
|
||||
background: rgba(99, 102, 241, 0.12);
|
||||
color: #a5b4fc;
|
||||
padding: 2px 6px;
|
||||
border-radius: 4px;
|
||||
font-size: 0.85em;
|
||||
font-family: 'JetBrains Mono', 'Fira Code', monospace;
|
||||
}
|
||||
.huntarr-welcome-tip {
|
||||
display: flex;
|
||||
gap: 12px;
|
||||
padding: 14px 16px;
|
||||
background: rgba(234, 179, 8, 0.06);
|
||||
border: 1px solid rgba(234, 179, 8, 0.18);
|
||||
border-radius: 10px;
|
||||
margin: 14px 0;
|
||||
color: #cbd5e1;
|
||||
font-size: 0.88rem;
|
||||
line-height: 1.55;
|
||||
}
|
||||
.huntarr-welcome-tip > i {
|
||||
color: #eab308;
|
||||
font-size: 1.1rem;
|
||||
margin-top: 2px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.huntarr-welcome-signoff {
|
||||
margin-top: 8px !important;
|
||||
color: #94a3b8;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
.huntarr-welcome-signoff strong {
|
||||
color: #a5b4fc;
|
||||
}
|
||||
.huntarr-welcome-footer {
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
padding: 20px 28px 24px;
|
||||
border-top: 1px solid rgba(148, 163, 184, 0.08);
|
||||
}
|
||||
.huntarr-welcome-dismiss {
|
||||
padding: 10px 24px;
|
||||
background: linear-gradient(135deg, #6366f1, #4f46e5);
|
||||
border: none;
|
||||
border-radius: 8px;
|
||||
color: #fff;
|
||||
font-size: 0.9rem;
|
||||
font-weight: 600;
|
||||
cursor: pointer;
|
||||
transition: filter 0.15s, transform 0.1s;
|
||||
}
|
||||
.huntarr-welcome-dismiss:hover { filter: brightness(1.15); }
|
||||
.huntarr-welcome-dismiss:active { transform: scale(0.98); }
|
||||
@media (max-width: 600px) {
|
||||
.huntarr-welcome-content {
|
||||
width: 96%;
|
||||
max-width: none;
|
||||
border-radius: 12px;
|
||||
}
|
||||
.huntarr-welcome-header { padding: 20px 18px 14px; }
|
||||
.huntarr-welcome-body { padding: 16px 18px; font-size: 0.88rem; }
|
||||
.huntarr-welcome-footer { padding: 16px 18px 20px; }
|
||||
.huntarr-welcome-title { font-size: 1.25rem; }
|
||||
.huntarr-welcome-tip { font-size: 0.84rem; padding: 12px 14px; }
|
||||
}
|
||||
</style>
|
||||
</section>
|
||||
|
||||
@@ -324,6 +324,9 @@
|
||||
<a href="https://plexguide.github.io/Huntarr.io/index.html" target="_blank" rel="noopener" class="sidebar-social-btn docs-btn" title="Documentation" aria-label="Documentation">
|
||||
<i class="fas fa-book-open"></i>
|
||||
</a>
|
||||
<a href="https://github.com/plexguide/Huntarr.io/issues" target="_blank" rel="noopener" class="sidebar-social-btn issues-btn" title="Report a Bug" aria-label="Report a Bug">
|
||||
<i class="fas fa-bug"></i>
|
||||
</a>
|
||||
</div>
|
||||
<div class="sidebar-footer-divider"></div>
|
||||
<div class="sidebar-footer-info">
|
||||
|
||||
Reference in New Issue
Block a user