function create_studysheet_entry(title, username, term_count, created, modified, sheet_id, author_id, is_private) { // convert viewership to boolean // 1 = public, 0 = private icon_name = "Public" if (is_private) { icon_name = "Lock" } let html = `

${title}

${username}

${term_count}

Created: ${created}

Modified: ${modified}

` let obj = htmlToObj(html); obj.querySelector(".studysheet-user-container").addEventListener("click", function(event) { event.stopPropagation(); window.location.href = `/user/${author_id}` }) obj.addEventListener("click", function(event) { window.location.href = `/studysheet/${sheet_id}/view` }) return obj; } function buildNote(id, is_multi, note_contents, is_editor=true) { let arr_id = id.split("."); arr_id = arr_id[arr_id.length-1]; let multi_class = is_multi ? "multi" : ""; let events = "" if (is_editor){ events = `onfocus="request_lock('${arr_id}-notes')" onfocusout="unlock_term('${arr_id}-notes')"` } let html_data = `
` let obj = htmlToObj(html_data); obj.querySelector(".comment").value = note_contents; if (!is_editor) { obj.querySelector(".comment").style.pointerEvents = "none"; } obj.querySelectorAll("textarea").forEach(textarea => { textarea.addEventListener("input", function() { textarea_resize(this) id_to_pass = this.parentNode.id.replace("-notes", "").split(".") socket.emit("creator", {"intents":"change_studysheet", "subintents":"set_term_data", "args":{"id_path":id_to_pass, "field": "notes", "content":this.value},"nonce":get_nonce()}) }); }); return obj; } function buildImageContainer(id, term_image_id, answer_image_id, is_editor=true) { let html_data = `
` let obj = htmlToObj(html_data); if (term_image_id != null) { console.log(obj) obj.querySelector(".image-term").style.display = "block"; obj.querySelector(".image-term").src = "/api/image/" + term_image_id; } if (answer_image_id != null) { obj.querySelector(".image-answer").style.display = "block"; obj.querySelector(".image-answer").src = "/api/image/" + answer_image_id; } if (is_editor) { obj.querySelector(".image-term").addEventListener("click", function() { removeImage(id, "term"); }); obj.querySelector(".image-term").style.cursor = "pointer"; obj.querySelector(".image-answer").addEventListener("click", function() { removeImage(id, "answer"); }); obj.querySelector(".image-answer").style.cursor = "pointer"; } return obj } function buildTerm(id, term, definition, is_multi, is_multi_head, note_associated=false, is_editor=true, has_star=false) { // id is a string in the format id.id.id // arr_id is just the unique id of the term // note status can be one of three types - "none", "has", or "is" // "none" means there are no notes // "has" means that there are notes associated with the term, but this is not the note object // "is" means that this is the note object // i swear if i write note one more time im gonna top map so much let arr_id = id.split("."); arr_id = arr_id[arr_id.length-1]; let multi_class = is_multi ? "multi" : ""; let events_t = "" let events_d = "" let multi_button_event = "" let notes_event = "" let delete_event = "" let term_image_event = "" let definition_image_event = "" if (is_editor){ events_t = `onfocus="request_lock('${arr_id}-term')" onfocusout="unlock_term('${arr_id}-term')"` events_d = `onfocus="request_lock('${arr_id}-answer')" onfocusout="unlock_term('${arr_id}-answer')"` multi_button_event = `onclick="add_term('${id}')"` notes_event = `onclick="add_note('${id}')"` delete_event = `onclick="delete_term('${id}')"` term_image_event = `onclick="add_image('${id}', 'term')"`; definition_image_event = `onclick="add_image('${id}', 'answer')"`; } let left_options = ` ` if (is_multi_head) { left_options = ` ` } else if (is_multi) { left_options = `` } let html_data = `
${left_options}
` let obj = htmlToObj(html_data); if (note_associated) { obj.setAttribute("data-has-notes", "true"); } if (!has_star) { obj.querySelector(".star").remove(); } else { obj.querySelector(".star").addEventListener("click", function() { // if its selected remove the class if (this.classList.contains("selected")) { this.classList.remove("selected"); } else { this.classList.add("selected"); } let id_to_pass = this.parentNode.id onlyStarred(false) fetch("/api/studysheet/" + studysheet_id + "/star/" + id_to_pass).then(response => { return response.json(); }).then(data => { console.log(data) }) }); } obj.querySelector(".term").value = term; obj.querySelector(".definition").value = definition; if (!is_editor) { obj.querySelector(".term").style.pointerEvents = "none"; obj.querySelector(".definition").style.pointerEvents = "none"; obj.querySelector(".left-options").style.display = "none"; obj.querySelector(".drag-handle").style.display = "none"; } if (is_multi_head) { obj.querySelector(".definition").remove() } // if (is_multi){ // obj.querySelector("#add-multi-button").remove() // } obj.querySelectorAll("textarea").forEach(textarea => { textarea.addEventListener("input", function() { textarea_resize(this) let field = this.className; // one of term, definition if (field == "definition"){ field = "answer"; } id_to_pass = this.parentNode.id.split(".") socket.emit("creator", {"intents":"change_studysheet", "subintents":"set_term_data", "args":{"id_path":id_to_pass, "field":field, "content":this.value},"nonce":get_nonce()}) }); if (!is_editor) { textarea.style.borderBottomWidth = "0px"; } }); return obj; } const originalAppend = Element.prototype.append; Element.prototype.append = function (...args) { originalAppend.apply(this, args); args[0].querySelectorAll("textarea").forEach(textarea => { textarea_resize(textarea) }) }; function textarea_resize(area){ area.style.height = "0"; area.style.height = (area.scrollHeight + window.getComputedStyle(area).borderBottomWidth.replace("px", "") * 1) + "px"; if (area.parentNode.className.includes("term-container")) { let textareas = area.parentNode.querySelectorAll("textarea") let tallestHeight = 0; textareas.forEach(textarea => { let height = textarea.style.height.replace("px", "") * 1; if (height > tallestHeight) { tallestHeight = height; } }); textareas.forEach(textarea => { textarea.style.height = tallestHeight + "px"; }); } }