Extract Materialize Sidenav controller

This commit is contained in:
Yassine Guedidi 2025-03-01 00:05:31 +01:00
parent 1c853de7bf
commit 12680816ad
5 changed files with 29 additions and 15 deletions

View file

@ -0,0 +1,24 @@
import { Controller } from '@hotwired/stimulus';
import M from '@materializecss/materialize';
const mobileMaxWidth = 993;
export default class extends Controller {
static values = {
edge: { type: String, default: 'left' },
};
connect() {
this.instance = M.Sidenav.init(this.element, { edge: this.edgeValue });
}
close() {
if (window.innerWidth < mobileMaxWidth) {
this.instance.close();
}
}
disconnect() {
this.instance.destroy();
}
}

View file

@ -39,8 +39,6 @@ import './js/shortcuts/entry';
/* Theme style */ /* Theme style */
import './scss/index.scss'; import './scss/index.scss';
const mobileMaxWidth = 993;
/* ========================================================================== /* ==========================================================================
Annotations & Remember position Annotations & Remember position
========================================================================== */ ========================================================================== */
@ -274,11 +272,6 @@ const articleScroll = () => {
}; };
$(document).ready(() => { $(document).ready(() => {
// sidenav
document.querySelectorAll('.sidenav').forEach((element) => {
$(element).sidenav({ edge: element.getAttribute('data-edge') ?? 'left' });
});
$('select').formSelect(); $('select').formSelect();
$('.collapsible[data-collapsible="accordion"]').collapsible(); $('.collapsible[data-collapsible="accordion"]').collapsible();
$('.collapsible[data-collapsible="expandable"]').collapsible({ $('.collapsible[data-collapsible="expandable"]').collapsible({
@ -309,9 +302,6 @@ $(document).ready(() => {
$('#nav-btn-add-tag').on('click', () => { $('#nav-btn-add-tag').on('click', () => {
$('.nav-panel-add-tag').toggle(); $('.nav-panel-add-tag').toggle();
$('.nav-panel-menu').addClass('hidden'); $('.nav-panel-menu').addClass('hidden');
if (window.innerWidth < mobileMaxWidth) {
$('.sidenav').sidenav('close');
}
$('#tag_label').focus(); $('#tag_label').focus();
return false; return false;
}); });

View file

@ -114,7 +114,7 @@
<!-- Export --> <!-- Export -->
{% if has_exports %} {% if has_exports %}
<div id="export" class="sidenav" data-edge="right"> <div id="export" class="sidenav" data-controller="materialize--sidenav" data-materialize--sidenav-edge-value="right">
{% set current_tag = null %} {% set current_tag = null %}
{% if tag is defined %} {% if tag is defined %}
{% set current_tag = tag.slug %} {% set current_tag = tag.slug %}
@ -140,7 +140,7 @@
<!-- Filters --> <!-- Filters -->
{% if has_filters %} {% if has_filters %}
<div id="filters" class="sidenav" data-edge="right"> <div id="filters" class="sidenav" data-controller="materialize--sidenav" data-materialize--sidenav-edge-value="right">
<form action="{{ path('all') }}"> <form action="{{ path('all') }}">
<h4 class="center">{{ 'entry.filters.title'|trans }}</h4> <h4 class="center">{{ 'entry.filters.title'|trans }}</h4>

View file

@ -42,7 +42,7 @@
</ul> </ul>
</div> </div>
</nav> </nav>
<ul id="slide-out" class="left-bar collapsible sidenav sidenav-fixed reader-mode" data-collapsible="accordion"> <ul id="slide-out" class="left-bar collapsible sidenav sidenav-fixed reader-mode" data-collapsible="accordion" data-controller="materialize--sidenav">
<li class="bold border-bottom hide-on-med-and-down"> <li class="bold border-bottom hide-on-med-and-down">
<a class="waves-effect collapsible-header" href="{{ path('homepage') }}"> <a class="waves-effect collapsible-header" href="{{ path('homepage') }}">
<i class="material-icons small">arrow_back</i> <i class="material-icons small">arrow_back</i>
@ -105,7 +105,7 @@
{% endif %} {% endif %}
<li class="bold border-bottom"> <li class="bold border-bottom">
<a class="waves-effect collapsible-header" id="nav-btn-add-tag"> <a class="waves-effect collapsible-header" id="nav-btn-add-tag" data-action="click->materialize--sidenav#close">
<i class="material-icons small">label_outline</i> <i class="material-icons small">label_outline</i>
<span>{{ 'entry.view.left_menu.add_a_tag'|trans }}</span> <span>{{ 'entry.view.left_menu.add_a_tag'|trans }}</span>
</a> </a>

View file

@ -43,7 +43,7 @@
{% block menu %} {% block menu %}
<nav class="cyan darken-1"> <nav class="cyan darken-1">
<ul id="slide-out" class="left-bar sidenav sidenav-fixed"> <ul id="slide-out" class="left-bar sidenav sidenav-fixed" data-controller="materialize--sidenav">
{% block logo %} {% block logo %}
<li class="logo border-bottom"> <li class="logo border-bottom">
{% if is_granted('LIST_ENTRIES') %} {% if is_granted('LIST_ENTRIES') %}