523 lines
17 KiB
JavaScript
523 lines
17 KiB
JavaScript
// Get the link element
|
|
const link = document.querySelector('.hamburger');
|
|
var converter = null;
|
|
var markdownit = null;
|
|
var references = {};
|
|
let saved = false;
|
|
|
|
// Add an event listener to the link
|
|
if (link) {
|
|
link.addEventListener('click', function () {
|
|
// Toggle the class of the link to open or close the menu
|
|
document.querySelector('ul.hamburger-list').classList.toggle('menu-open');
|
|
});
|
|
}
|
|
|
|
function setHeight() {
|
|
converter = new showdown.Converter();
|
|
//converter.setFlavor();
|
|
|
|
markdownit = new markdownit({
|
|
html: true,
|
|
linkify: true,
|
|
breaks: true
|
|
});
|
|
|
|
body = document.querySelector('body');
|
|
body.style.height = window.innerHeight + 'px';
|
|
|
|
cont = document.querySelector('.container');
|
|
cont.style.height = (window.innerHeight - 50) + 'px';
|
|
|
|
tabs = document.querySelector('.ref-tab');
|
|
tabs.style.height = (window.innerHeight - 60) + 'px';
|
|
|
|
ref = document.querySelector('.ref');
|
|
ref.style.height = (window.innerHeight - 125) + 'px';
|
|
|
|
notes = document.querySelector('.notes');
|
|
notes.style.height = (window.innerHeight - 130) + 'px';
|
|
|
|
notePreview = document.querySelector('#notePreview');
|
|
notePreview.style.height = (window.innerHeight - 150) + 'px';
|
|
|
|
date = document.querySelector('#noteDate');
|
|
dt = new Date();
|
|
date.value = dt.getFullYear() + '-' + ((dt.getMonth() < 9) ? '0' + (dt.getMonth() + 1) : (dt.getMonth() + 1)) + '-' + dt.getDate();
|
|
|
|
setTimeout(saveNote, 10000);
|
|
}
|
|
|
|
function newNote() {
|
|
notes = document.querySelector('.notes');
|
|
notes.textContent = '';
|
|
}
|
|
|
|
/**
|
|
* Save a note by sending it to the server for storage.
|
|
*
|
|
* @param {Event} event - The event object triggering the save action.
|
|
* @return {void} No explicit return value.
|
|
*/
|
|
function saveNote(event) {
|
|
if (event) {
|
|
event.preventDefault();
|
|
}
|
|
|
|
if (!validateNote()) {
|
|
setTimeout(saveNote, 5000);
|
|
return;
|
|
}
|
|
|
|
var note = {
|
|
id: document.querySelector("#noteId").value,
|
|
date: document.querySelector('#noteDate').value,
|
|
title: document.querySelector('#noteTitle').value,
|
|
speaker: document.querySelector('#speaker').value,
|
|
series: document.querySelector('#series').value,
|
|
passage: document.querySelector('#passage').value,
|
|
note: document.querySelector('#notes').value
|
|
};
|
|
fetch('/index.php/save-note', {
|
|
method: 'POST',
|
|
headers: {
|
|
"Content-Type": 'application/json'
|
|
},
|
|
body: JSON.stringify(note)
|
|
})
|
|
.then(response => response.json())
|
|
.then(data => {
|
|
if (data.msg == 'saved' && !saved) {
|
|
showSave();
|
|
saved = true;
|
|
}
|
|
})
|
|
.catch(error => console.log(error));
|
|
setTimeout(saveNote, 10000);
|
|
}
|
|
|
|
function validateNote() {
|
|
const note = document.querySelector('#notes');
|
|
const date = document.querySelector('#noteDate');
|
|
const speaker = document.querySelector('#speaker');
|
|
const series = document.querySelector('#series');
|
|
const title = document.querySelector('#noteTitle');
|
|
const id = document.querySelector('#noteId');
|
|
const psg = document.querySelector('#passage');
|
|
|
|
if (!parseInt(id.value)) { return false; }
|
|
if (!title.value.length) { return false; }
|
|
if (!date.value) { return false; }
|
|
if (!parseInt(speaker.value)) { return false; }
|
|
if (!parseInt(series.value)) { return false; }
|
|
if (!psg.value) { return false; }
|
|
if (!note.value.length) { return false; }
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Displays a checkmark animation on the screen.
|
|
*
|
|
* @param {none} - This function does not take any parameters.
|
|
* @return {none} - This function does not return any value.
|
|
*/
|
|
function showSave() {
|
|
if (saved) { return; }
|
|
|
|
var checkmark = document.getElementById("save-check");
|
|
|
|
// Schedule the animation to run every 1 second (which is equivalent to a 1-second delay between each iteration)
|
|
var si = setInterval(function () {
|
|
// Increment the opacity of the checkmark by 0.01 each time
|
|
op = parseFloat(checkmark.style.opacity);
|
|
checkmark.style.opacity = op + 0.1;
|
|
|
|
// If the opacity is greater than or equal to 1, reset it back to 0 and stop the animation
|
|
if (checkmark.style.opacity >= 1) {
|
|
checkmark.style.opacity = 0;
|
|
clearInterval(si);
|
|
saved = false;
|
|
}
|
|
}, 100);
|
|
}
|
|
|
|
/**
|
|
* Function to discard the note by clearing all input fields and closing the menu.
|
|
*/
|
|
function discardNote() {
|
|
document.querySelector('#noteTitle').value = '';
|
|
document.querySelector('#speaker').value = 0;
|
|
document.querySelector('#series').value = 0;
|
|
document.querySelector('#template').value = 0;
|
|
document.querySelector('#passage').value = '';
|
|
document.querySelector('#notes').value = '';
|
|
|
|
fetch('/index.php/discard-note', {
|
|
method: 'POST',
|
|
headers: {
|
|
'Content-Type': 'application/json'
|
|
},
|
|
body: JSON.stringify({
|
|
'id': document.querySelector('#noteId').value
|
|
})
|
|
.then(response => response.json())
|
|
.then(data => {
|
|
if (data.msg == 'deleted') {
|
|
alert('Note deleted.');
|
|
}
|
|
})
|
|
});
|
|
|
|
openRef();
|
|
}
|
|
|
|
function newSpeaker() {
|
|
if (document.querySelector('#speaker').value == 'new') {
|
|
document.querySelector('#newSpeaker').style.display = 'block';
|
|
document.querySelector('#speaker').style.display = 'none';
|
|
}
|
|
}
|
|
|
|
function saveSpeaker(event) {
|
|
if (event.keyCode == 13) {
|
|
fetch('/index.php/save-speaker', {
|
|
method: 'POST',
|
|
headers: {
|
|
'Content-Type': 'application/json'
|
|
},
|
|
body: JSON.stringify({
|
|
'speakerName': document.querySelector('#newSpeaker').value
|
|
})
|
|
})
|
|
.then(response => response.json())
|
|
.then(results => {
|
|
var newSpeaker = document.createElement('option');
|
|
newSpeaker.text = document.querySelector('#newSpeaker').value;
|
|
newSpeaker.value = results.id;
|
|
document.querySelector('#speaker').add(newSpeaker);
|
|
|
|
alert(results.msg);
|
|
document.querySelector('#newSpeaker').style.display = 'none';
|
|
document.querySelector('#speaker').style.display = 'block';
|
|
|
|
document.querySelector('#newSpeaker').value = '';
|
|
document.querySelector('#speaker').value = results.id;
|
|
});
|
|
}
|
|
}
|
|
|
|
function newSeries() {
|
|
if (document.querySelector('#series').value == 'new') {
|
|
document.querySelector('#newSeries').style.display = 'block';
|
|
document.querySelector('#series').style.display = 'none';
|
|
}
|
|
}
|
|
|
|
function saveSeries(event) {
|
|
if (event.keyCode == 13) {
|
|
fetch('/index.php/save-series', {
|
|
method: 'POST',
|
|
headers: {
|
|
'Content-Type': 'application/json'
|
|
},
|
|
body: JSON.stringify({
|
|
'seriesName': document.querySelector('#newSeries').value
|
|
})
|
|
})
|
|
.then(response => response.json())
|
|
.then(results => {
|
|
var newSeries = document.createElement('option');
|
|
newSeries.text = document.querySelector('#newSeries').value;
|
|
newSeries.value = results.id;
|
|
document.querySelector('#series').add(newSeries);
|
|
|
|
alert(results.msg);
|
|
document.querySelector('#newSeries').style.display = 'none';
|
|
document.querySelector('#series').style.display = 'block';
|
|
|
|
document.querySelector('#newSeries').value = '';
|
|
document.querySelector('#series').value = results.id;
|
|
});
|
|
}
|
|
}
|
|
|
|
function openRef() {
|
|
refQuery = document.querySelector('#refQuery');
|
|
if (refQuery.style.display === 'block') {
|
|
refQuery.style.display = 'none';
|
|
} else {
|
|
refQuery.style.display = 'block';
|
|
}
|
|
|
|
menu = document.querySelector('ul.hamburger-list');
|
|
refQuery.style.left = (menu.clientLeft + menu.clientWidth) + 'px';
|
|
refQuery.style.top = (menu.clientTop + menu.clientHeight) + 'px';
|
|
}
|
|
|
|
function queryRef() {
|
|
var input = document.querySelector('#refQuery #search');
|
|
var type = document.querySelector('#referenceType');
|
|
var book = document.querySelector('#referenceBook');
|
|
fetch('/index.php/retrieve-reference', {
|
|
method: 'POST',
|
|
headers: {
|
|
'Content-Type': 'plain/text'
|
|
},
|
|
body: JSON.stringify({
|
|
'type': type.value,
|
|
'book': book.value,
|
|
'reference': input.value
|
|
})
|
|
})
|
|
.then(response => response.text())
|
|
.then(results => {
|
|
results = JSON.parse(results);
|
|
|
|
const list = document.querySelector('#ref-list');
|
|
var newList = document.createElement('li');
|
|
newList.className = 'tab';
|
|
var button = document.createElement('button');
|
|
button.innerText = results.title;
|
|
button.onclick = function () {
|
|
document.querySelector('#ref').innerHTML = converter.makeHtml(references[button.innerText]);
|
|
}
|
|
button.ondblclick = function () {
|
|
document.querySelector('#ref').innerHTML = '';
|
|
delete references[results.title];
|
|
var list = button.parentElement;
|
|
list.remove();
|
|
}
|
|
newList.appendChild(button);
|
|
list.appendChild(newList);
|
|
|
|
const ref = document.querySelector('#ref');
|
|
ref.innerHTML = converter.makeHtml(results.text);
|
|
|
|
references[results.title] = results.text;
|
|
|
|
input.value = '';
|
|
document.querySelector('#referenceType').value = 0;
|
|
document.querySelector('#referenceBook').value = 0;
|
|
openRef();
|
|
link.click();
|
|
});
|
|
}
|
|
|
|
function retrieveTemplate(orig, dest) {
|
|
const temp = document.querySelector('#' + orig);
|
|
if (temp.value == '0') {
|
|
document.querySelector('#' + dest).value = '';
|
|
return;
|
|
}
|
|
fetch('/index.php/retrieve-template', {
|
|
method: 'POST',
|
|
headers: {
|
|
'Content-Type': 'plain/text'
|
|
},
|
|
body: JSON.stringify({
|
|
'template': temp.value
|
|
})
|
|
})
|
|
.then(response => response.text())
|
|
.then(results => {
|
|
const div = document.querySelector('#' + dest);
|
|
div.value = results;
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Saves the template by sending a POST request to the server with template data.
|
|
*/
|
|
function saveTemplate() {
|
|
fetch('/index.php/save-template', {
|
|
method: 'POST',
|
|
headers: {
|
|
'Content-Type': 'plain/text'
|
|
},
|
|
body: JSON.stringify({
|
|
'template_id': document.querySelector('#template_id').value,
|
|
'template_name': document.querySelector('#template_name').value,
|
|
'template_value': document.querySelector('#template_value').value,
|
|
})
|
|
})
|
|
.then(response => response.text())
|
|
.then(results => {
|
|
alert(results);
|
|
});
|
|
}
|
|
|
|
function toggleFields() {
|
|
const fieldsContainer = document.getElementById('fields-container');
|
|
const showHideBtn = document.getElementById('show-hide-btn');
|
|
|
|
if (fieldsContainer.classList.contains('show')) {
|
|
// Hide the fields when the button says "Show Fields"
|
|
fieldsContainer.classList.remove('show');
|
|
fieldsContainer.style.display = 'none';
|
|
showHideBtn.textContent = 'Show';
|
|
} else {
|
|
// Show the fields when the button says "Hide Fields"
|
|
fieldsContainer.classList.add('show');
|
|
fieldsContainer.style.display = 'block';
|
|
showHideBtn.textContent = 'Hide';
|
|
}
|
|
|
|
setHeight();
|
|
}
|
|
|
|
function retrieveBooks() {
|
|
const selectedType = document.querySelector('#referenceType').value;
|
|
if (!selectedType) { return; }
|
|
|
|
var bookList = document.querySelector('#referenceBook');
|
|
bookList.style.display = "block";
|
|
bookList.innerHTML = '';
|
|
if (selectedType == 'bible') {
|
|
var none = document.createElement("option");
|
|
none.value = '';
|
|
none.text = '-- Select --';
|
|
bookList.appendChild(none);
|
|
for (var x in BOOKS.bible) {
|
|
var newBook = document.createElement("option");
|
|
newBook.text = BOOKS.bible[x];
|
|
bookList.appendChild(newBook);
|
|
}
|
|
} else if (selectedType == 'creed') {
|
|
var none = document.createElement('option');
|
|
none.value = '';
|
|
none.text = '-- Select --';
|
|
bookList.appendChild(none);
|
|
for (var x in BOOKS.creed) {
|
|
var newBook = document.createElement('option');
|
|
newBook.value = x;
|
|
newBook.text = BOOKS.creed[x];
|
|
bookList.appendChild(newBook);
|
|
}
|
|
} else if (selectedType == 'cd') {
|
|
var none = document.createElement("option");
|
|
none.value = '';
|
|
none.text = '-- Select --';
|
|
bookList.appendChild(none);
|
|
for (var x in BOOKS.cd) {
|
|
var newBook = document.createElement("option");
|
|
newBook.text = BOOKS.cd[x];
|
|
bookList.appendChild(newBook);
|
|
}
|
|
} else {
|
|
var min = BOOKS[selectedType][0];
|
|
var max = BOOKS[selectedType][1];
|
|
var none = document.createElement("option");
|
|
none.value = '';
|
|
none.text = '-- Select --';
|
|
bookList.appendChild(none);
|
|
for (var x = min; x <= max; x++) {
|
|
var newBook = document.createElement("option");
|
|
newBook.value = x;
|
|
newBook.text = x;
|
|
bookList.appendChild(newBook);
|
|
}
|
|
}
|
|
}
|
|
|
|
function retrieveReference(el) {
|
|
fetch('/index.php/get-reference', {
|
|
method: "POST",
|
|
header: {
|
|
"Content-Type": "application/json"
|
|
},
|
|
body: JSON.stringify({
|
|
file: el.value,
|
|
type: el.options[el.selectedIndex].getAttribute('type')
|
|
})
|
|
})
|
|
.then(response => response.json())
|
|
.then(results => {
|
|
document.querySelector('#reference').value = results.text;
|
|
});
|
|
}
|
|
|
|
function saveReference() {
|
|
var select = document.querySelector('#references');
|
|
fetch('/index.php/save-reference', {
|
|
method: 'POST',
|
|
header: {
|
|
'Content-Type': 'application/json'
|
|
},
|
|
body: JSON.stringify({
|
|
type: select.options[select.selectedIndex].getAttribute('type'),
|
|
file: select.value,
|
|
text: document.querySelector('#reference').value
|
|
})
|
|
})
|
|
.then(response => response.json())
|
|
.then(results => {
|
|
alert(results.msg);
|
|
|
|
document.querySelector('#reference').value = '';
|
|
document.querySelector('#references').value = '';
|
|
});
|
|
}
|
|
|
|
function previewNote() {
|
|
var noteText = document.querySelector('#notes');
|
|
var notePreview = document.querySelector('#notePreview');
|
|
var previewButton = document.querySelector('#previewBtn');
|
|
|
|
//notePreview.innerHTML = converter.makeHtml(noteText.value);
|
|
notePreview.innerHTML = markdownit.render(noteText.value);
|
|
|
|
if (previewButton.value == 'Preview') {
|
|
previewButton.value = 'Hide Preview';
|
|
noteText.style.display = 'none';
|
|
notePreview.style.display = 'block';
|
|
} else {
|
|
previewButton.value = 'Preview';
|
|
noteText.style.display = 'block';
|
|
notePreview.style.display = 'none';
|
|
}
|
|
|
|
findLinks();
|
|
}
|
|
|
|
function findLinks() {
|
|
var links = document.querySelector('#notePreview').querySelectorAll('a');
|
|
alert(links.length);
|
|
}
|
|
|
|
function showSearchNote(event) {
|
|
event.preventDefault();
|
|
var searchNote = document.querySelector('#noteSearch');
|
|
if (searchNote.style.display == 'none') {
|
|
searchNote.style.display = 'block';
|
|
} else {
|
|
searchNote.style.display = 'none';
|
|
}
|
|
}
|
|
|
|
function searchNote() {
|
|
const search = document.querySelector('#noteSearchQuery');
|
|
|
|
fetch('/index.php/search-note', {
|
|
method: 'POST',
|
|
header: {
|
|
'Content-Type': 'application/json'
|
|
},
|
|
body: JSON.stringify({
|
|
"search": search.value
|
|
})
|
|
})
|
|
.then(response => response.json())
|
|
.then(result => {
|
|
document.querySelector('#notes').value = result.text;
|
|
document.querySelector('#passage').value = result.passage;
|
|
document.querySelector('#series').value = result.series.id;
|
|
document.querySelector('#speaker').value = result.speaker.id;
|
|
document.querySelector('#noteTitle').value = result.title;
|
|
document.querySelector('#noteDate').value = result.date;
|
|
document.querySelector('#noteId').value = result.id;
|
|
|
|
document.querySelector('#noteSearch').style.display = 'none';
|
|
link.click();
|
|
});
|
|
} |