]>
git.immae.eu Git - github/wallabag/wallabag.git/blob - app/Resources/static/themes/material/index.js
1 import $ from 'jquery';
3 /* Materialize imports */
4 import 'materialize-css/dist/css/materialize.css';
5 import 'materialize-css/dist/js/materialize';
8 import '../_global/index';
11 import { initExport
, initFilters
, initRandom
} from './js/tools';
13 /* Import shortcuts */
14 import './js/shortcuts/main';
15 import './js/shortcuts/entry';
18 import './css/index.scss';
20 const stickyNav
= () => {
21 const nav
= $('.js-entry-nav-top');
22 $('[data-toggle="actions"]').click(() => {
23 nav
.toggleClass('entry-nav-top--sticky');
27 const articleScroll
= () => {
28 const articleEl
= $('#article');
29 if (articleEl
.length
> 0) {
30 $(window
).scroll(() => {
31 const s
= $(window
).scrollTop();
32 const d
= $(document
).height();
33 const c
= $(window
).height();
34 const articleElBottom
= articleEl
.offset().top
+ articleEl
.height();
35 const scrollPercent
= (s
/ (d
- c
)) * 100;
36 $('.progress .determinate').css('width', `${scrollPercent}%`);
37 const fixedActionBtn
= $('.js-fixed-action-btn');
38 const toggleScrollDataName
= 'toggle-auto';
39 if ((s
+ c
) > articleElBottom
) {
40 fixedActionBtn
.data(toggleScrollDataName
, true);
41 fixedActionBtn
.openFAB();
42 } else if (fixedActionBtn
.data(toggleScrollDataName
) === true) {
43 fixedActionBtn
.data(toggleScrollDataName
, false);
44 fixedActionBtn
.closeFAB();
50 $(document
).ready(() => {
52 $('.button-collapse').sideNav();
53 $('select').material_select();
54 $('.collapsible').collapsible({
57 $('.datepicker').pickadate({
60 formatSubmit: 'yyyy-mm-dd',
66 $('.dropdown-trigger').dropdown({ hover: false });
74 const toggleNav
= (toShow
, toFocus
) => {
75 $('.nav-panel-actions').hide(100);
77 $('.nav-panels').css('background', 'white');
81 $('#nav-btn-add-tag').on('click', () => {
82 $('.nav-panel-add-tag').toggle(100);
83 $('.nav-panel-menu').addClass('hidden');
84 $('#tag_label').focus();
88 $('#nav-btn-add').on('click', () => {
89 toggleNav('.nav-panel-add', '#entry_url');
93 const materialAddForm
= $('.nav-panel-add');
94 materialAddForm
.on('submit', () => {
95 materialAddForm
.addClass('disabled');
96 $('input#entry_url', materialAddForm
).prop('readonly', true).trigger('blur');
99 $('#nav-btn-search').on('click', () => {
100 toggleNav('.nav-panel-search', '#search_entry_term');
104 $('.close').on('click', (e
) => {
105 $(e
.target
).parent('.nav-panel-item').hide(100);
106 $('.nav-panel-actions').show(100);
107 $('.nav-panels').css('background', 'transparent');
111 const mainCheckboxes
= document
.querySelectorAll('[data-js="checkboxes-toggle"]');
112 if (mainCheckboxes
.length
) {
113 [...mainCheckboxes
].forEach((el
) => {
114 el
.addEventListener('click', () => {
115 const checkboxes
= document
.querySelectorAll(el
.dataset
.toggle
);
116 [...checkboxes
].forEach((checkbox
) => {
117 const checkboxClone
= checkbox
;
118 checkboxClone
.checked
= el
.checked
;
124 $('.markasread').on('click', () => {
125 const article
= document
.getElementById('article');
126 const link
= document
.getElementById('link-archive');
127 const articleId
= article
.dataset
.id
;
128 const xhr
= new XMLHttpRequest();
130 xhr
.onload
= function toggleArchive() {
131 if (xhr
.status
=== 200) {
132 const previousStatus
= document
.getElementById('archive-icon').innerHTML
;
133 let status
= link
.dataset
.iconUnread
;
134 let label
= link
.dataset
.labelUnread
;
135 if (previousStatus
=== 'unarchive') {
136 status
= link
.dataset
.iconRead
;
137 label
= link
.dataset
.labelRead
;
139 document
.getElementById('archive-icon').innerHTML
= status
;
140 document
.getElementById('archive-label').innerHTML
= label
;
141 window
.Materialize
.toast(xhr
.responseText
, 4000);
145 const url
= `${Routing.generate('archive_entry', { id: articleId })}?some_var_name=true`;
146 xhr
.open('GET', url
, false);