From 378dd16f4ff6c9b0d5a4ca36e61e36480150a744 Mon Sep 17 00:00:00 2001 From: Ralf Lang Date: Sat, 11 Apr 2026 12:45:26 +0200 Subject: [PATCH 1/2] refactor: Remove most reliance on prototype.js --- js/list.js | 50 +++++++++++++++++++++++++++----------------------- js/memo.js | 41 +++++++++++++++++++++++------------------ js/view.js | 18 ++++++++++-------- 3 files changed, 60 insertions(+), 49 deletions(-) diff --git a/js/list.js b/js/list.js index ed94f219..226a0054 100644 --- a/js/list.js +++ b/js/list.js @@ -15,37 +15,41 @@ var Mnemo_List = { // ajaxUrl sortCallback: function(column, sortDown) { - new Ajax.Request( - this.ajaxUrl, - { parameters: { pref: 'sortby', value: column.substring(1) } } - ); - new Ajax.Request( - this.ajaxUrl, - { parameters: { pref: 'sortdir', value: sortDown } } - ); + fetch(this.ajaxUrl, { + method: 'POST', + headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, + body: new URLSearchParams({ pref: 'sortby', value: column.substring(1) }) + }); + fetch(this.ajaxUrl, { + method: 'POST', + headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, + body: new URLSearchParams({ pref: 'sortdir', value: sortDown }) + }); }, onDomLoad: function() { - if ($('quicksearchL')) { - $('quicksearchL').observe( + var quicksearchL = document.getElementById('quicksearchL'); + if (quicksearchL) { + quicksearchL.addEventListener( 'click', function(e) { - $('quicksearchL').hide(); - $('quicksearch').show(); - $('quicksearchT').focus(); - e.stop(); - }.bindAsEventListener() + quicksearchL.hidden = true; + document.getElementById('quicksearch').hidden = false; + document.getElementById('quicksearchT').focus(); + e.preventDefault(); + } ); - $('quicksearchX').observe( + document.getElementById('quicksearchX').addEventListener( 'click', function(e) { - $('quicksearch').hide(); - $('quicksearchT').value = ''; - QuickFinder.filter($('quicksearchT')); - $('quicksearchL').show(); - e.stop(); - }.bindAsEventListener() + document.getElementById('quicksearch').hidden = true; + var searchField = document.getElementById('quicksearchT'); + searchField.value = ''; + QuickFinder.filter(searchField); + quicksearchL.hidden = false; + e.preventDefault(); + } ); } } @@ -56,4 +60,4 @@ function table_sortCallback(tableId, column, sortDown) Mnemo_List.sortCallback(column, sortDown); } -document.observe('dom:loaded', Mnemo_List.onDomLoad.bind(Mnemo_List)); +document.addEventListener('DOMContentLoaded', Mnemo_List.onDomLoad.bind(Mnemo_List)); diff --git a/js/memo.js b/js/memo.js index 4c155597..c15dd9d3 100644 --- a/js/memo.js +++ b/js/memo.js @@ -15,41 +15,46 @@ var Mnemo_Memo = { // confirm updateCharacterCount: function() { - if ($('mnemo-body')) { - $('mnemo-count').update( - $F('mnemo-body').replace(/[\r\n]/g, '').length - );; + var body = document.getElementById('mnemo-body'); + if (body) { + document.getElementById('mnemo-count').textContent = + body.value.replace(/[\r\n]/g, '').length; } }, onDomLoad: function() { - if ($('mnemo-passphrase')) { - $('mnemo-passphrase').focus(); + var passphrase = document.getElementById('mnemo-passphrase'); + if (passphrase) { + passphrase.focus(); } - if ($('mnemo-body')) { - $('mnemo-body').focus(); + var body = document.getElementById('mnemo-body'); + if (body) { + body.focus(); } - if ($('mnemo-delete')) { - $('mnemo-delete').observe( + var deleteBtn = document.getElementById('mnemo-delete'); + if (deleteBtn) { + deleteBtn.addEventListener( 'click', function(e) { if (this.confirm) { if (!window.confirm(this.confirm)) { - e.stop(); + e.preventDefault(); } } - }.bindAsEventListener(this) + }.bind(this) ); } - if ($('mnemo-body')) { - $('mnemo-body').observe('change', this.updateCharacterCount); - $('mnemo-body').observe('click', this.updateCharacterCount); - $('mnemo-body').observe('keypress', this.updateCharacterCount.defer.bind(this.updateCharacterCount)); + if (body) { + body.addEventListener('change', this.updateCharacterCount); + body.addEventListener('click', this.updateCharacterCount); + body.addEventListener('keypress', function() { + setTimeout(Mnemo_Memo.updateCharacterCount, 0); + }); } } -} -document.observe('dom:loaded', Mnemo_Memo.onDomLoad.bind(Mnemo_Memo)); +}; +document.addEventListener('DOMContentLoaded', Mnemo_Memo.onDomLoad.bind(Mnemo_Memo)); diff --git a/js/view.js b/js/view.js index 6b032d6e..1c2cf640 100644 --- a/js/view.js +++ b/js/view.js @@ -15,23 +15,25 @@ var Mnemo_View = { // confirm onDomLoad: function() { - if ($('mnemo-passphrase')) { - $('mnemo-passphrase').focus(); + var passphrase = document.getElementById('mnemo-passphrase'); + if (passphrase) { + passphrase.focus(); } - if ($('mnemo-delete')) { - $('mnemo-delete').observe( + var deleteBtn = document.getElementById('mnemo-delete'); + if (deleteBtn) { + deleteBtn.addEventListener( 'click', function(e) { if (this.confirm) { if (!window.confirm(this.confirm)) { - e.stop(); + e.preventDefault(); } } - }.bindAsEventListener(this) + }.bind(this) ); } } -} -document.observe('dom:loaded', Mnemo_View.onDomLoad.bind(Mnemo_View)); +}; +document.addEventListener('DOMContentLoaded', Mnemo_View.onDomLoad.bind(Mnemo_View)); From ad859de69d3bda5ff3135df321029865e50175ed Mon Sep 17 00:00:00 2001 From: Ralf Lang Date: Sat, 11 Apr 2026 12:53:50 +0200 Subject: [PATCH 2/2] docs: Add config example --- config/conf.php.dist | 55 ++++++++++++++++++++++++++++++++++++++++++++ config/routes.php | 2 ++ 2 files changed, 57 insertions(+) create mode 100644 config/conf.php.dist create mode 100644 config/routes.php diff --git a/config/conf.php.dist b/config/conf.php.dist new file mode 100644 index 00000000..dbf2632c --- /dev/null +++ b/config/conf.php.dist @@ -0,0 +1,55 @@ +