feat: refactorer l'interface Daily/Weekly/Monthly avec design moderne masonry layout, topbar avec onglets pills interactifs (daily/weekly/monthly), toolbar de navigation avec boutons prev/next et date courante, grille responsive 4 colonnes avec cartes hover animées, variables CSS personnalisables, support complet thème clair/sombre, et amélioration responsive avec breakpoints optimisés pour mobile/tablette
This commit is contained in:
parent
ec8f08e003
commit
46ecb16241
@ -2571,6 +2571,285 @@ select:focus {
|
||||
}
|
||||
}
|
||||
|
||||
/* ===== Daily / Weekly / Monthly ===== */
|
||||
.daily {
|
||||
padding: 1.5rem 0 2.5rem;
|
||||
}
|
||||
|
||||
.daily-topbar {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
gap: 1rem;
|
||||
margin-bottom: 1.5rem;
|
||||
padding: 0.75rem 1rem;
|
||||
border-radius: 16px;
|
||||
background: var(--bg-card);
|
||||
border: 1px solid var(--border);
|
||||
box-shadow: var(--shadow-sm);
|
||||
}
|
||||
|
||||
.daily-topbar-left {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 0.6rem;
|
||||
font-weight: 600;
|
||||
color: var(--text-main);
|
||||
}
|
||||
|
||||
.daily-topbar-tabs {
|
||||
display: inline-flex;
|
||||
gap: 0.5rem;
|
||||
background: var(--bg-body);
|
||||
padding: 0.35rem;
|
||||
border-radius: 999px;
|
||||
border: 1px solid var(--border-light);
|
||||
}
|
||||
|
||||
.daily-tab {
|
||||
padding: 0.45rem 0.95rem;
|
||||
border-radius: 999px;
|
||||
font-weight: 600;
|
||||
font-size: 0.85rem;
|
||||
color: var(--text-secondary);
|
||||
transition: all 0.2s ease;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.04em;
|
||||
}
|
||||
|
||||
.daily-tab.is-active {
|
||||
background: var(--primary);
|
||||
color: #ffffff;
|
||||
box-shadow: 0 8px 18px rgba(59, 130, 246, 0.35);
|
||||
}
|
||||
|
||||
.daily-tab.is-inactive:hover {
|
||||
color: var(--text-main);
|
||||
background: var(--bg-card-hover);
|
||||
}
|
||||
|
||||
.daily-toolbar {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
gap: 1rem;
|
||||
margin-bottom: 1.75rem;
|
||||
padding: 0.9rem 1.1rem;
|
||||
border-radius: 16px;
|
||||
background: linear-gradient(135deg, rgba(15, 23, 42, 0.05), rgba(15, 23, 42, 0.02));
|
||||
border: 1px solid var(--border);
|
||||
}
|
||||
|
||||
.daily-toolbar-label {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 0.6rem;
|
||||
font-weight: 600;
|
||||
color: var(--text-main);
|
||||
}
|
||||
|
||||
.daily-toolbar-nav {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.75rem;
|
||||
flex: 1;
|
||||
justify-content: center;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.daily-nav-btn {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
padding: 0.5rem 0.95rem;
|
||||
border-radius: 10px;
|
||||
border: 1px solid var(--border);
|
||||
background: var(--bg-card);
|
||||
color: var(--text-main);
|
||||
font-weight: 600;
|
||||
font-size: 0.85rem;
|
||||
transition: all 0.2s ease;
|
||||
}
|
||||
|
||||
.daily-nav-btn:hover {
|
||||
background: var(--bg-card-hover);
|
||||
transform: translateY(-1px);
|
||||
}
|
||||
|
||||
.daily-nav-btn[disabled] {
|
||||
opacity: 0.5;
|
||||
cursor: not-allowed;
|
||||
transform: none;
|
||||
}
|
||||
|
||||
.daily-current-date {
|
||||
font-weight: 700;
|
||||
color: var(--text-main);
|
||||
padding: 0.35rem 0.9rem;
|
||||
border-radius: 999px;
|
||||
background: var(--bg-card);
|
||||
border: 1px dashed var(--border);
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
.daily-calendar-btn {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
padding: 0.5rem 0.95rem;
|
||||
border-radius: 999px;
|
||||
background: var(--primary-light);
|
||||
color: var(--primary);
|
||||
font-weight: 600;
|
||||
font-size: 0.85rem;
|
||||
}
|
||||
|
||||
.daily-calendar-btn:hover {
|
||||
background: rgba(59, 130, 246, 0.2);
|
||||
color: var(--primary-hover);
|
||||
}
|
||||
|
||||
.daily-grid {
|
||||
column-count: 4;
|
||||
column-gap: 18px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.daily-item {
|
||||
display: inline-block;
|
||||
width: 100%;
|
||||
margin-bottom: 18px;
|
||||
break-inside: avoid;
|
||||
}
|
||||
|
||||
.daily-card {
|
||||
background: var(--bg-card);
|
||||
border: 1px solid var(--border);
|
||||
border-radius: 18px;
|
||||
overflow: hidden;
|
||||
box-shadow: var(--shadow-md);
|
||||
transition: transform 0.25s ease, box-shadow 0.25s ease;
|
||||
}
|
||||
|
||||
.daily-card:hover {
|
||||
transform: translateY(-4px);
|
||||
box-shadow: var(--shadow-lg);
|
||||
}
|
||||
|
||||
.daily-item-header {
|
||||
display: block;
|
||||
padding: 1rem 1.1rem 0.75rem;
|
||||
font-weight: 600;
|
||||
color: var(--text-main);
|
||||
font-size: 1rem;
|
||||
line-height: 1.35;
|
||||
}
|
||||
|
||||
.daily-item-image {
|
||||
width: 100%;
|
||||
height: 160px;
|
||||
background-size: cover;
|
||||
background-position: center;
|
||||
}
|
||||
|
||||
.daily-item-body {
|
||||
padding: 0.85rem 1.1rem 0.5rem;
|
||||
color: var(--text-secondary);
|
||||
font-size: 0.9rem;
|
||||
line-height: 1.55;
|
||||
}
|
||||
|
||||
.daily-item-footer {
|
||||
padding: 0.75rem 1.1rem 1rem;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
gap: 0.75rem;
|
||||
flex-wrap: wrap;
|
||||
border-top: 1px solid var(--border-light);
|
||||
font-size: 0.8rem;
|
||||
color: var(--text-muted);
|
||||
}
|
||||
|
||||
.daily-item-footer-subtitle {
|
||||
color: var(--text-secondary);
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.daily-item-tags {
|
||||
color: var(--text-muted);
|
||||
font-size: 0.78rem;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
[data-theme="dark"] .daily-topbar,
|
||||
[data-theme="dark"] .daily-toolbar {
|
||||
background: #111827;
|
||||
border-color: #1f2937;
|
||||
}
|
||||
|
||||
[data-theme="dark"] .daily-topbar-tabs {
|
||||
background: #0f172a;
|
||||
border-color: #1f2937;
|
||||
}
|
||||
|
||||
[data-theme="dark"] .daily-tab.is-active {
|
||||
box-shadow: 0 10px 20px rgba(96, 165, 250, 0.35);
|
||||
}
|
||||
|
||||
[data-theme="dark"] .daily-calendar-btn {
|
||||
background: rgba(96, 165, 250, 0.15);
|
||||
color: #cfe1ff;
|
||||
}
|
||||
|
||||
[data-theme="dark"] .daily-card {
|
||||
background: #101a2c;
|
||||
border-color: #1e2a44;
|
||||
box-shadow: 0 18px 26px rgba(4, 12, 26, 0.45);
|
||||
}
|
||||
|
||||
[data-theme="dark"] .daily-item-footer {
|
||||
border-top-color: #1e2a44;
|
||||
}
|
||||
|
||||
@media (max-width: 1200px) {
|
||||
.daily-grid {
|
||||
column-count: 3;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 900px) {
|
||||
.daily-grid {
|
||||
column-count: 2;
|
||||
}
|
||||
|
||||
.daily-toolbar {
|
||||
flex-direction: column;
|
||||
align-items: flex-start;
|
||||
}
|
||||
|
||||
.daily-toolbar-nav {
|
||||
width: 100%;
|
||||
justify-content: flex-start;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 600px) {
|
||||
.daily-grid {
|
||||
column-count: 1;
|
||||
}
|
||||
|
||||
.daily-topbar {
|
||||
flex-direction: column;
|
||||
align-items: flex-start;
|
||||
}
|
||||
|
||||
.daily-topbar-tabs {
|
||||
width: 100%;
|
||||
justify-content: space-between;
|
||||
}
|
||||
}
|
||||
|
||||
/* ===== Bulk Bookmark Creation ===== */
|
||||
.page-add .col-md-6.col-md-offset-3 {
|
||||
width: 100%;
|
||||
|
||||
@ -7,47 +7,46 @@
|
||||
<body class="dark-toolbar">
|
||||
{include="page.header"}
|
||||
|
||||
<div class="subheader is-dark" style="margin-bottom: 1.5rem;">
|
||||
<div class="container text-center">
|
||||
<div class="btn-group" role="group">
|
||||
<a class="btn {if="array_key_exists('day', $_GET) || (!array_key_exists('week', $_GET) && !array_key_exists('month', $_GET))"}btn-primary{else}btn-secondary{/if}" href="{$base_path}/daily?day" title="{'Daily'|t}">{'Daily'|t}</a>
|
||||
<a class="btn {if="array_key_exists('week', $_GET)"}btn-primary{else}btn-secondary{/if}" href="{$base_path}/daily?week" title="{'Weekly'|t}">{'Weekly'|t}</a>
|
||||
<a class="btn {if="array_key_exists('month', $_GET)"}btn-primary{else}btn-secondary{/if}" href="{$base_path}/daily?month" title="{'Monthly'|t}">{'Monthly'|t}</a>
|
||||
<div class="daily">
|
||||
<div class="daily-topbar">
|
||||
<div class="daily-topbar-left">
|
||||
<i class="mdi mdi-compass-outline" aria-hidden="true"></i>
|
||||
<span>{'Time navigation'|t}</span>
|
||||
</div>
|
||||
<div class="daily-topbar-tabs" role="group" aria-label="{'Daily / Weekly / Monthly'|t}">
|
||||
<a class="daily-tab {if="array_key_exists('day', $_GET) || (!array_key_exists('week', $_GET) && !array_key_exists('month', $_GET))"}is-active{else}is-inactive{/if}" href="{$base_path}/daily?day" title="{'Daily'|t}">{'Daily'|t}</a>
|
||||
<a class="daily-tab {if="array_key_exists('week', $_GET)"}is-active{else}is-inactive{/if}" href="{$base_path}/daily?week" title="{'Weekly'|t}">{'Weekly'|t}</a>
|
||||
<a class="daily-tab {if="array_key_exists('month', $_GET)"}is-active{else}is-inactive{/if}" href="{$base_path}/daily?month" title="{'Monthly'|t}">{'Monthly'|t}</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="daily">
|
||||
<div id="plugin_zone_start_picwall" class="plugin_zone">
|
||||
{loop="$plugin_start_zone"}
|
||||
{$value}
|
||||
{/loop}
|
||||
</div>
|
||||
|
||||
<div class="daily-header">
|
||||
<h1>{$localizedType} Shaarli</h1>
|
||||
<p class="daily-header-subtitle">{function="t('All links of one :type in a single page.', '', 1, 'shaarli', [':type' => t($type)])"}</p>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-xs-6">
|
||||
<a {if="$previousday"}href="{$base_path}/daily?{$type}={$previousday}"{else}href="#"{/if} class="btn btn-secondary" {if="!$previousday"}disabled{/if}>
|
||||
<i class="mdi mdi-arrow-left"></i> {function="t('Previous :type', '', 1, 'shaarli', [':type' => t($type)], true)"}
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-xs-6 text-right">
|
||||
<a {if="$nextday"}href="{$base_path}/daily?{$type}={$nextday}"{else}href="#"{/if} class="btn btn-secondary" {if="!$nextday"}disabled{/if}>
|
||||
{function="t('Next :type', '', 1, 'shaarli', [':type' => t($type)], true)"} <i class="mdi mdi-arrow-right"></i>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr class="darker">
|
||||
<div class="daily-toolbar">
|
||||
<div class="daily-toolbar-label">
|
||||
<i class="mdi mdi-clock-outline" aria-hidden="true"></i>
|
||||
<span>{'Time navigation'|t}</span>
|
||||
</div>
|
||||
<div class="daily-toolbar-nav">
|
||||
<a {if="$previousday"}href="{$base_path}/daily?{$type}={$previousday}"{else}href="#"{/if} class="daily-nav-btn" {if="!$previousday"}disabled{/if}>
|
||||
<i class="mdi mdi-arrow-left"></i>
|
||||
{function="t('Previous :type', '', 1, 'shaarli', [':type' => t($type)], true)"}
|
||||
</a>
|
||||
<span class="daily-current-date">{$dayDesc}</span>
|
||||
<a {if="$nextday"}href="{$base_path}/daily?{$type}={$nextday}"{else}href="#"{/if} class="daily-nav-btn" {if="!$nextday"}disabled{/if}>
|
||||
{function="t('Next :type', '', 1, 'shaarli', [':type' => t($type)], true)"}
|
||||
<i class="mdi mdi-arrow-right"></i>
|
||||
</a>
|
||||
</div>
|
||||
<a class="daily-calendar-btn" href="{$base_path}/daily" title="{'Calendar'|t}">
|
||||
<i class="mdi mdi-calendar" aria-hidden="true"></i>
|
||||
<span>{'Calendar'|t}</span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<h2 class="daily-title">{$dayDesc}</h2>
|
||||
|
||||
<div id="plugin_zone_about_daily" class="plugin_zone">
|
||||
{loop="$daily_about_plugin"}
|
||||
{$value}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user