diff --git a/hourglass/client/main/main.js b/hourglass/client/main/main.js index 8c7a564..ba9e856 100644 --- a/hourglass/client/main/main.js +++ b/hourglass/client/main/main.js @@ -1,3 +1,4 @@ +/* jshint esversion: 6 */ import { Template } from 'meteor/templating'; @@ -13,7 +14,7 @@ var openValues = { "options": "-20%" }; -//Sets colors for different assignment statuses +// Sets colors for different assignment statuses var workColors = { "normal": "#2E4F74", "quiz": "#409333", @@ -22,20 +23,32 @@ var workColors = { "other": "#852E6D" }; +// Creates variables for due dates + +var ref = { + "1 Day": 1, + "2 Days": 2, + "1 Week": 7, + "1 Month": 30, + "Never": 0, + "Yes": true, + "No": false +}; + // Reactive variables. Session.set("user",null); Session.set("calendarClasses", null); Session.set("sidebar", null); // Status of sidebar -Session.set("newWork",null); // If user creating new work. -Session.set("currentWork",null); // Stores current selected work info. -Session.set("currentReadableWork",null); // Stores readable selected work info. -Session.set("modifying",null); // Stores current open input. -Session.set("noclass",null); // If user does not have classes. -Session.set("calCreWork",null); // If user is creating a work from calendar. -Session.set("classDisp",[]); // Stores current filter for classes. -Session.set("classDispHover",null); // Stores current hovered filter. -Session.set("refetchEvents",null); // Stores whether to get calendar events again. -Session.set("commentRestrict",null); // Stores text for comment character restriction. +Session.set("newWork", null); // If user creating new work. +Session.set("currentWork", null); // Stores current selected work info. +Session.set("currentReadableWork", null); // Stores readable selected work info. +Session.set("modifying", null); // Stores current open input. +Session.set("noclass", null); // If user does not have classes. +Session.set("calCreWork", null); // If user is creating a work from calendar. +Session.set("classDisp", []); // Stores current filter for classes. +Session.set("classDispHover", null); // Stores current hovered filter. +Session.set("refetchEvents", null); // Stores whether to get calendar events again. +Session.set("commentRestrict", null); // Stores text for comment character restriction. Template.registerHelper('user', () => { var user = Meteor.user().profile; @@ -72,44 +85,49 @@ Template.registerHelper('myClasses', () => { // Gets all classes and respective var classDisp = Session.get("classDisp"); // Get sidebar class filter. var hide = Session.get("user").preferences.timeHide; - for(var i = 0; i < courses.length; i++) { // For each user class. - found = classes.findOne({_id:courses[i]}); + for (var i = 0; i < courses.length; i++) { // For each user class. + found = classes.findOne({ + _id: courses[i] + }); found.subscribers = found.subscribers.length; found.mine = true; - if(found.admin === Meteor.userId()) { // If user owns this class. + if (found.admin === Meteor.userId()) { // If user owns this class. found.box = " owned"; found.mine = false; } - if(classDisp.indexOf(courses[i]) !== -1) found.selected = true; // Filter selected. + if (classDisp.indexOf(courses[i]) !== -1) found.selected = true; // Filter selected. array.push(found); - var thisWork = work.find({class: courses[i]}).fetch(); + var thisWork = work.find({ + class: courses[i] + }).fetch(); - if(classDisp.length !== 0 && classDisp.indexOf(found._id) === -1) { // Filter classes based on filter. + if (classDisp.length !== 0 && classDisp.indexOf(found._id) === -1) { // Filter classes based on filter. array[i].thisClassWork = []; continue; } - - for(var j = 0; j < thisWork.length; j++) { // For each work in class. - if(hide !== 0) { // Time to hide isn't never. - var due = (moment(thisWork[j].dueDate))["_d"]; - var offset = (moment().subtract(hide,'days'))["_d"]; - if(offset > due) { // If due is before hide days before today + + for (var j = 0; j < thisWork.length; j++) { // For each work in class. + if (hide !== 0) { // Time to hide isn't never. + var due = (moment(thisWork[j].dueDate))._d; + var offset = (moment().subtract(hide, 'days'))._d; + if (offset > due) { // If due is before hide days before today thisWork[j] = "no"; j = 0; } } + if(thisWork[j] !== "no" && Session.get("user").preferences.done) { // If done filter is true if(thisWork[j].done.indexOf(Meteor.userId()) !== -1) { // If user marked this work done. thisWork[j] = "no"; j = 0; } } - - } - while(thisWork.indexOf("no") !== -1) thisWork.splice(thisWork.indexOf("no"),1); // Splice all filtered works. - for(var j = 0; j < thisWork.length; j++) { + } + while (thisWork.indexOf("no") !== -1) thisWork.splice(thisWork.indexOf("no"), 1); // Splice all filtered works. + + for (j = 0; j < thisWork.length; j++) { thisWork[j].realDate = thisWork[j].dueDate; thisWork[j].dueDate = moment(thisWork[j].dueDate).calendar(null, { sameDay: '[Today]', @@ -120,18 +138,18 @@ Template.registerHelper('myClasses', () => { // Gets all classes and respective sameElse: 'MMMM Do' }); - if(thisWork[j].dueDate === "Today") { // Font weight based on date proximity. + if (thisWork[j].dueDate === "Today") { // Font weight based on date proximity. thisWork[j].cardDate = "600"; - } else if(thisWork[j].dueDate === "Tomorrow") { + } else if (thisWork[j].dueDate === "Tomorrow") { thisWork[j].cardDate = "400"; } thisWork[j].typeColor = workColors[thisWork[j].type]; - thisWork[j].confirmationLength = thisWork[j].confirmations.length // Counts the number of confirmations and reports for a particular work. - thisWork[j].reportLength = thisWork[j].reports.length - + thisWork[j].confirmationLength = thisWork[j].confirmations.length; // Counts the number of confirmations and reports for a particular work. + thisWork[j].reportLength = thisWork[j].reports.length; + var hoverHighlight = Session.get("classDispHover"); // Highlight/scale related class works on hover. - if(hoverHighlight !== null && hoverHighlight === found._id) { + if (hoverHighlight !== null && hoverHighlight === found._id) { thisWork[j].scale = "-ms-transform: scale(1.12)-webkit-transform: scale(1.12);transform: scale(1.12)"; } else { thisWork[j].scale = ""; @@ -139,9 +157,9 @@ Template.registerHelper('myClasses', () => { // Gets all classes and respective } array[i].thisClassWork = thisWork; } - Session.set("noclass",false); + Session.set("noclass", false); Session.set("calendarClasses", array); - Session.set("refetchEvents",true); + Session.set("refetchEvents", true); return array; } }); @@ -172,38 +190,33 @@ Template.main.helpers({ defaultMode() { //Loads the default display mode for user. if(load) { Session.set("mode",Session.get("user").preferences.mode); - load = false; } return; }, bgSrc() { // Returns background. - var pic = "Backgrounds/"+themeColors[Session.get("user").preferences.theme].background; - return pic; + return "Backgrounds/"+ themeColors[Session.get("user").preferences.theme].background; }, menuStatus() { // Status of of menu sidebar. - if (Session.equals("sidebar","menuContainer")) { + if (Session.equals("sidebar", "menuContainer")) { return "0%"; - } else if (Session.equals("sidebar","both")) { + } else if (Session.equals("sidebar", "both")) { return "0%"; } else { return openValues.menu; } }, optionsStatus() { // Status of options sidebar. - if (Session.equals("sidebar","optionsContainer")) { + if (Session.equals("sidebar", "optionsContainer")) { return "0%"; - } else if (Session.equals("sidebar","both")) { + } else if (Session.equals("sidebar", "both")) { return "0%"; } else { return openValues.options; } }, modeStatus(status) { // Color status of display modes. - if (Session.equals("mode",status)) { - return themeColors[Session.get("user").preferences.theme].highlightText; - } else { - return; - } + if (!Session.equals("mode",status)) return; + return themeColors[Session.get("user").preferences.theme].highlightText; }, currMode(name) { // Status of display mode. var mode = Session.get("mode"); @@ -228,17 +241,19 @@ Template.main.helpers({ var events = []; var userClasses = Session.get("calendarClasses"); - for(var i = 0; i < userClasses.length; i++) { + for (var i = 0; i < userClasses.length; i++) { var works = userClasses[i].thisClassWork; - for(var j = 0; j < works.length; j++) { + for (var j = 0; j < works.length; j++) { var work = works[j]; - var currClass = classes.findOne({_id: work.class}) + var currClass = classes.findOne({ + _id: work.class + }); var inRole = false; - if(Meteor.userId() === work.creator || - Roles.userIsInRole(Meteor.userId(), ['superadmin', 'admin']) || - currClass.moderators.indexOf(Meteor.userId()) !== -1 || - currClass.banned.indexOf(Meteor.userId()) !== -1 + if (Meteor.userId() === work.creator || + Roles.userIsInRole(Meteor.userId(), ['superadmin', 'admin']) || + currClass.moderators.indexOf(Meteor.userId()) !== -1 || + currClass.banned.indexOf(Meteor.userId()) !== -1 ) inRole = true; events.push({ @@ -248,34 +263,38 @@ Template.main.helpers({ backgroundColor: workColors[work.type], borderColor: "#444", startEditable: inRole, - className: "workevent "+work.class, - }) + className: "workevent " + work.class, + }); } } callback(events); }, eventDrop: function(event, delta, revertFunc) { // When user drops from click-dragging. - var current = work.findOne({_id:event.id}); + var current = work.findOne({ + _id: event.id + }); var date = event.start.format().split("-"); - current.dueDate = new Date(date[0],parseInt(date[1])-1,date[2],11,59,59); + current.dueDate = new Date(date[0], parseInt(date[1]) - 1, date[2], 11, 59, 59); serverData = current; sendData("editWork"); }, eventClick: function(event, jsEvent, view) { // On-click for work. - Session.set("newWork",false); - var thisWork = work.findOne({_id:event.id}) - Session.set("currentWork",thisWork); + Session.set("newWork", false); + var thisWork = work.findOne({ + _id: event.id + }); + Session.set("currentWork", thisWork); var thisReadWork = formReadable(thisWork); - Session.set("currentReadableWork",thisReadWork); + Session.set("currentReadableWork", thisReadWork); openDivFade(document.getElementsByClassName("overlay")[0]); }, dayClick: function(date, jsEvent, view) { // On-click for each day. - if(jsEvent.target.className.includes("fc-past")) return; + if (jsEvent.target.className.includes("fc-past")) return; Session.set("calCreWork", true); calWorkDate = date.format(); calWorkOpen = true; Session.set("newWork", true); - Session.set("sidebar","menuContainer"); + Session.set("sidebar", "menuContainer"); } }; }, @@ -285,32 +304,31 @@ Template.main.helpers({ }, calColor() { // Sets the color of the calendar according to theme return "color:"+themeColors[Session.get("user").preferences.theme].calendar; - }, - + }, calCreWork() { // Display instructions for creating a work. - if(Session.get("calCreWork")) return true; + if (Session.get("calCreWork")) return true; return false; }, filterOn() { - if(Session.get("classDisp").length !== 0) return true; + if (Session.get("classDisp").length !== 0) return true; return false; }, highlight() { // Calendar highlight/scale option. var hoverHighlight = Session.get("classDispHover"); var works = document.getElementsByClassName("workevent"); var work = $('.workevent'); - if(hoverHighlight === null) { - work.css('-webkit-transform',''); - work.css('-ms-transform',''); - work.css('transform',''); + if (hoverHighlight === null) { + work.css('-webkit-transform', ''); + work.css('-ms-transform', ''); + work.css('transform', ''); return; } - for(var i = 0; i < works.length; i++) { + for (var i = 0; i < works.length; i++) { var id = works[i].className; var index = id.indexOf("workevent"); - id = id.substring(index+10,index+27); - if(id === hoverHighlight) { + id = id.substring(index + 10, index + 27); + if (id === hoverHighlight) { works[i].style.webkitTransform = 'scale(1.12)'; works[i].style.msTransform = 'scale(1.12)'; works[i].style.transform = 'scale(1.12)'; @@ -318,30 +336,30 @@ Template.main.helpers({ works[i].style.webkitTransform = ''; works[i].style.msTransform = ''; works[i].style.transform = ''; - } + } } return; }, workCenter() { // Centers work overlay. var w = window.innerWidth * 0.3; var h = window.innerHeight * 0.7; - return "width:"+w.toString()+"px;height:"+h.toString()+"px;margin-left:"+-0.5*w.toString()+"px;margin-top:"+-0.5*h.toString()+"px"; + return "width:" + w.toString() + "px;height:" + h.toString() + "px;margin-left:" + -0.5 * w.toString() + "px;margin-top:" + -0.5 * h.toString() + "px"; }, commentDim() { // Dimensions of comment container. var work = Session.get("currentWork"); - if(Session.equals("newWork",null) || work === null) return; - if(Session.get("newWork") || work.comments.length <= 3) return; - return 0.23*window.innerHeight.toString() + "px"; + if (Session.equals("newWork", null) || work === null) return; + if (Session.get("newWork") || work.comments.length <= 3) return; + return 0.23 * window.innerHeight.toString() + "px"; }, work(value) { // Returns the specified work value. - if(Session.equals("currentWork",null)) return; + if (Session.equals("currentWork", null)) return; return Session.get("currentReadableWork")[value]; }, workType() { // Returns color for respective work type. - if(Session.equals("currentWork",null)) return; - if(Session.get("currentWork").type === undefined) return; + if (Session.equals("currentWork", null)) return; + if (Session.get("currentWork").type === undefined) return; type = Session.get("currentWork").type; - if(type.includes("edit")) { + if (type.includes("edit")) { return; } else { return workColors[type]; @@ -354,23 +372,26 @@ Template.main.helpers({ return Session.get("newWork"); }, inRole() { // Checks correct permissions. - if(Session.equals("currentWork",null)) return; - if(Session.get("newWork")) { + if (Session.equals("currentWork", null)) return; + if (Session.get("newWork")) { return true; } else { - var currClass = classes.findOne({_id: Session.get("currentWork")["class"]}) - if(Meteor.userId() === Session.get("currentWork").creator || - Roles.userIsInRole(Meteor.userId(), ['superadmin', 'admin']) || - currClass.moderators.indexOf(Meteor.userId()) !== -1 || - currClass.banned.indexOf(Meteor.userId()) !== -1 - ) return true; + var currClass = classes.findOne({ + _id: Session.get("currentWork")["class"] + }); + if (Meteor.userId() === Session.get("currentWork").creator || + Roles.userIsInRole(Meteor.userId(), ['superadmin', 'admin']) || + currClass.moderators.indexOf(Meteor.userId()) !== -1 || + currClass.banned.indexOf(Meteor.userId()) !== -1 + ) return true; } }, refetchEvents() { - if(Session.get("refetchEvents")) { - $("#fullcalendar").fullCalendar( 'refetchEvents' ); - Session.set("refetchEvents",null); - } } + if (Session.get("refetchEvents")) { + $("#fullcalendar").fullCalendar('refetchEvents'); + Session.set("refetchEvents", null); + } + } }); Template.main.events({ @@ -386,45 +407,46 @@ Template.main.events({ closeInput(modifyingInput); } - if (!Session.equals("sidebar",e) && // Sidebar closing. - !e.includes("fa-cog") && - !e.includes("fa-bars") && - !document.getElementById("menuContainer").contains(event.target) && - !document.getElementById("optionsContainer").contains(event.target)) { - if(Session.get("calCreWork")) { - if(!calWorkOpen) { - Session.set("calCreWork",false); - Session.set("sidebar",null); + if (!Session.equals("sidebar", e) && // Sidebar closing. + !e.includes("fa-cog") && + !e.includes("fa-bars") && + !document.getElementById("menuContainer").contains(event.target) && + !document.getElementById("optionsContainer").contains(event.target)) { + if (Session.get("calCreWork")) { + if (!calWorkOpen) { + Session.set("calCreWork", false); + Session.set("sidebar", null); } calWorkOpen = false; } else { - Session.set("sidebar",null); - } + Session.set("sidebar", null); + } } - if(e === "overlay") { // Overlay closing. + if (e === "overlay") { // Overlay closing. closeDivFade(document.getElementsByClassName("overlay")[0]); - if(!Session.get("newWork")) { - if(getHomeworkFormData() === null) return; + if (!Session.get("newWork")) { + if (getHomeworkFormData() === null) return; serverData = Session.get("currentWork"); sendData("editWork"); document.getElementById("workComment").value = ""; } - Session.set("newWork",null); - Session.set("currentWork",null); - Session.set("currentReadableWork",null); - $('.req').css("color",""); - Session.set("commentRestrict",null); + Session.set("newWork", null); + Session.set("currentWork", null); + Session.set("currentReadableWork", null); + $('.req').css("color", ""); + Session.set("commentRestrict", null); } if (!event.target.className.includes("radio") && // Dropdown closing. !event.target.parentNode.className.includes("workOptions") && !event.target.parentNode.className.includes("prefOptions") && event.target.readOnly !== true) { - if(Session.equals("sidebar","optionsContainer") || Session.equals("sidebar","both")) { - var radio = "prefOptions"; + var radio; + if (Session.equals("sidebar", "optionsContainer") || Session.equals("sidebar", "both")) { + radio = "prefOptions"; } else { - var radio = "workOptions"; + radio = "workOptions"; } for (var i = 0; i < document.getElementsByClassName(radio).length; i++) { try { @@ -459,74 +481,83 @@ Template.main.events({ } }, 'click .classes' () { // Click classes mode button. - if (Session.equals("mode","classes")) return; + if (Session.equals("mode", "classes")) return; var modeHolder = document.getElementById("mainBody"); closeDivFade(modeHolder); setTimeout(function() { Session.set("mode", "classes"); openDivFade(modeHolder); }, 300); - Session.set("sidebar",null); // Closes all sidebars. + Session.set("sidebar", null); // Closes all sidebars. }, 'click .calendar' () { // Click calendar mode button. - if (Session.equals("mode","calendar")) return; + if (Session.equals("mode", "calendar")) return; var modeHolder = document.getElementById("mainBody"); closeDivFade(modeHolder); setTimeout(function() { Session.set("mode", "calendar"); openDivFade(modeHolder); }, 300); - Session.set("sidebar",null); // Closes all sidebars. + Session.set("sidebar", null); // Closes all sidebars. }, 'click .creWork' (event) { // Cick add work button. - if(event.target.className !== "creWork") { - var attr = event.target.parentNode.getAttribute("classid"); + var attr; + if (event.target.className !== "creWork") { + attr = event.target.parentNode.getAttribute("classid"); } else { - var attr = event.target.getAttribute("classid"); + attr = event.target.getAttribute("classid"); } Session.set("newWork", true); Session.set("currentReadableWork", // Default readable work. - { - name:"Name | Click here to edit...", - class:attr, - dueDate:"Click here to edit...", - description:"Click here to edit...", - type:"Click here to edit..." + { + name: "Name | Click here to edit...", + class: attr, + dueDate: "Click here to edit...", + description: "Click here to edit...", + type: "Click here to edit..." + }); + Session.set("currentWork", { + class: attr }); - Session.set("currentWork",{class:attr}); openDivFade(document.getElementsByClassName("overlay")[0]); - }, + }, 'click .workCard' (event) { // Display work information on work card click. var dom = event.target; - while(event.target.className !== "workCard") event.target = event.target.parentNode; + while (event.target.className !== "workCard") event.target = event.target.parentNode; workid = event.target.getAttribute("workid"); - Session.set("newWork",false); - var thisWork = work.findOne({_id:workid}); - Session.set("currentWork",thisWork); + Session.set("newWork", false); + var thisWork = work.findOne({ + _id: workid + }); + Session.set("currentWork", thisWork); var thisReadWork = formReadable(thisWork); - Session.set("currentReadableWork",thisReadWork); + Session.set("currentReadableWork", thisReadWork); - if(!Session.get("newWork") && !document.getElementById("optionsContainer").contains(event.target)) { - var currClass = classes.findOne({_id: Session.get("currentWork")["class"]}); - if(!(Meteor.userId() === Session.get("currentWork").creator || // If user has permission. - Roles.userIsInRole(Meteor.userId(), ['superadmin', 'admin']) || - currClass.moderators.indexOf(Meteor.userId()) !== -1 || - currClass.banned.indexOf(Meteor.userId()) !== -1)) { - var inputs = $('#editWork .change').css("cursor","default"); - }; + if (!Session.get("newWork") && !document.getElementById("optionsContainer").contains(event.target)) { + var currClass = classes.findOne({ + _id: Session.get("currentWork")["class"] + }); + if (!(Meteor.userId() === Session.get("currentWork").creator || // If user has permission. + Roles.userIsInRole(Meteor.userId(), ['superadmin', 'admin']) || + currClass.moderators.indexOf(Meteor.userId()) !== -1 || + currClass.banned.indexOf(Meteor.userId()) !== -1)) { + var inputs = $('#editWork .change').css("cursor", "default"); + } } openDivFade(document.getElementsByClassName("overlay")[0]); }, // HANDLING INPUT CHANGING 'click .change' (event) { // Click changable inputs. Creates an input where the span is. - if(!Session.get("newWork") && !document.getElementById("optionsContainer").contains(event.target)) { - var currClass = classes.findOne({_id: Session.get("currentWork")["class"]}); - if(!(Meteor.userId() === Session.get("currentWork").creator || // If user has permission. - Roles.userIsInRole(Meteor.userId(), ['superadmin', 'admin']) || - currClass.moderators.indexOf(Meteor.userId()) !== -1 || - currClass.banned.indexOf(Meteor.userId()) !== -1 - )) return; + if (!Session.get("newWork") && !document.getElementById("optionsContainer").contains(event.target)) { + var currClass = classes.findOne({ + _id: Session.get("currentWork")["class"] + }); + if (!(Meteor.userId() === Session.get("currentWork").creator || // If user has permission. + Roles.userIsInRole(Meteor.userId(), ['superadmin', 'admin']) || + currClass.moderators.indexOf(Meteor.userId()) !== -1 || + currClass.banned.indexOf(Meteor.userId()) !== -1 + )) return; } // CSS and DOM manipulation. var ele = event.target; @@ -550,7 +581,7 @@ Template.main.events({ input.typ = "text"; input.style.height = 0.9 * dim.height.toString() + "px"; } - if(event.target.id !== "workDate") input.value = ele.childNodes[0].nodeValue; + if (event.target.id !== "workDate") input.value = ele.childNodes[0].nodeValue; input.className = "changeInput"; input.style.width = "70%"; @@ -564,7 +595,7 @@ Template.main.events({ } else { input.select(); } - if(ele.id === "workDate") { + if (ele.id === "workDate") { input.className += " form-control"; } input.focus(); @@ -581,25 +612,28 @@ Template.main.events({ } }, 'click .radio' (event) { // Click dropdown input. Opens the dropdown menu. - if(!Session.get("newWork") && !document.getElementById("optionsContainer").contains(event.target)) { - var currClass = classes.findOne({_id: Session.get("currentWork")["class"]}); - if(!(Meteor.userId() === Session.get("currentWork").creator || - Roles.userIsInRole(Meteor.userId(), ['superadmin', 'admin']) || - currClass.moderators.indexOf(Meteor.userId()) !== -1 || - currClass.banned.indexOf(Meteor.userId()) !== -1 - )) return; + if (!Session.get("newWork") && !document.getElementById("optionsContainer").contains(event.target)) { + var currClass = classes.findOne({ + _id: Session.get("currentWork")["class"] + }); + if (!(Meteor.userId() === Session.get("currentWork").creator || + Roles.userIsInRole(Meteor.userId(), ['superadmin', 'admin']) || + currClass.moderators.indexOf(Meteor.userId()) !== -1 || + currClass.banned.indexOf(Meteor.userId()) !== -1 + )) return; } var op = event.target; - if(Session.equals("sidebar","optionsContainer") || Session.equals("sidebar","both")) { - var radio = "prefOptions"; + var radio; + if (Session.equals("sidebar", "optionsContainer") || Session.equals("sidebar", "both")) { + radio = "prefOptions"; } else { - var radio = "workOptions"; + radio = "workOptions"; } try { for (var i = 0; i < document.getElementsByClassName(radio).length; i++) { // Close any previously open menus. var curr = document.getElementsByClassName(radio)[i]; - if(curr.childNodes[1] !== op.parentNode.parentNode.childNodes[3].childNodes[1]) { + if (curr.childNodes[1] !== op.parentNode.parentNode.childNodes[3].childNodes[1]) { closeDivFade(document.getElementsByClassName(radio)[i]); } } @@ -653,26 +687,28 @@ Template.main.events({ var input = document.getElementById('workComment'); comment = input.value; input.value = ""; - Session.set("commentRestrict",null); + Session.set("commentRestrict", null); if (comment !== "") { document.getElementById('workComment').value = ""; - Meteor.call('addComment', [comment, workId], function(err,result) { - var thisWork = work.findOne({_id:workId}); - Session.set("currentWork",thisWork); + Meteor.call('addComment', [comment, workId], function(err, result) { + var thisWork = work.findOne({ + _id: workId + }); + Session.set("currentWork", thisWork); var thisReadWork = formReadable(thisWork); - Session.set("currentReadableWork",thisReadWork); + Session.set("currentReadableWork", thisReadWork); }); } }, 'click #workSubmit' () { // Click submit work to create a work. - if(getHomeworkFormData() === null) return; // Makes sure to check valid homework. + if (getHomeworkFormData() === null) return; // Makes sure to check valid homework. serverData = Session.get("currentWork"); - if(Session.get("newWork")) { + if (Session.get("newWork")) { sendData("createWork"); } else { sendData("editWork"); } - Session.set("newWork",null); + Session.set("newWork", null); closeDivFade(document.getElementsByClassName("overlay")[0]); }, 'click #workDelete' () { @@ -680,82 +716,84 @@ Template.main.events({ sendData("deleteWork"); closeDivFade(document.getElementsByClassName("overlay")[0]); }, - 'keyup #workComment' (event) { // Restrict length on comment. - var chars = 200-event.target.value.length; + 'input #workComment' (event) { // Restrict length on comment. + var chars = 200 - event.target.value.length; document.getElementById("commentRestrict").style.color = "#7E7E7E"; - if(chars === 200) { // Don't display if nothing in comment. - Session.set("commentRestrict",""); + if (chars === 200) { // Don't display if nothing in comment. + Session.set("commentRestrict", ""); return; - } else if(chars === 0) { + } else if (chars === 0) { document.getElementById("commentRestrict").style.color = "#FF1A1A"; // Make text red if 0 characters left. } - Session.set("commentRestrict", "Characters left: " + chars.toString()); - - }, + Session.set("commentRestrict", chars.toString() + " characters left"); + }, 'click #markDone' () { // Click done button. - serverData = [Session.get("currentWork")._id, "done"] + serverData = [Session.get("currentWork")._id, "done"]; sendData("toggleWork"); }, 'click #markConfirm' () { // Click confirm button. - serverData = [Session.get("currentWork")._id, "confirmations"] + serverData = [Session.get("currentWork")._id, "confirmations"]; sendData("toggleWork"); }, 'click #markReport' () { // Click report button. - serverData = [Session.get("currentWork")._id, "reports"] + serverData = [Session.get("currentWork")._id, "reports"]; sendData("toggleWork"); }, // CLASS FILTERS 'click .sideClass' (event) { // Click class list in sidebar. var div = event.target; - while(div.getAttribute("classid") === null) div = div.parentNode; + while (div.getAttribute("classid") === null) div = div.parentNode; var classid = div.getAttribute("classid"); - if(Session.get("calCreWork")) { // If creating work from calendar. - Session.get("calCreWork",null); - Session.set("sidebar",null); + if (Session.get("calCreWork")) { // If creating work from calendar. + Session.get("calCreWork", null); + Session.set("sidebar", null); var date = calWorkDate.split("-"); - var date = new Date(date[0],parseInt(date[1])-1,date[2],11,59,59); + date = new Date(date[0], parseInt(date[1]) - 1, date[2], 11, 59, 59); Session.set("newWork", true); - Session.set("currentReadableWork", - { - name:"Name | Click here to edit...", - class:classid, - dueDate:getReadableDate(date), - description:"Click here to edit...", - type:"Click here to edit..." + Session.set("currentReadableWork", { + name: "Name | Click here to edit...", + class: classid, + dueDate: getReadableDate(date), + description: "Click here to edit...", + type: "Click here to edit..." }); - Session.set("currentWork",{class:classid,dueDate:date}); - openDivFade(document.getElementsByClassName("overlay")[0]); + Session.set("currentWork", { + class: classid, + dueDate: date + }); + openDivFade(document.getElementsByClassName("overlay")[0]); } else { // Normal clicking turns on filter. var array = Session.get("classDisp"); - if(array.indexOf(classid) !== -1) { - array.splice(array.indexOf(classid),1); + if (array.indexOf(classid) !== -1) { + array.splice(array.indexOf(classid), 1); } else { array.push(classid); } - Session.set("classDisp",array); + Session.set("classDisp", array); } }, 'click #disableFilter' () { - Session.set("classDisp",[]); + Session.set("classDisp", []); }, 'mouseover .sideClass' (event) { // Highlight/scale filter on-hover. - if(event.target.className !== "sideClass") { - var div = event.target.parentNode; + var div; + if (event.target.className !== "sideClass") { + div = event.target.parentNode; } else { - var div = event.target; + div = event.target; } - while(div.getAttribute("classid") === null) div = div.parentNode; + while (div.getAttribute("classid") === null) div = div.parentNode; var classid = div.getAttribute("classid"); - Session.set("classDispHover",classid); + Session.set("classDispHover", classid); }, 'mouseleave .sideClass' (event) { // Turn off highlight/scale filter on-leave. - if(event.target.className !== "sideClass") { + if (event.target.className !== "sideClass") { var div = event.target.parentNode; - if(div.contains(event.target)) return; + if (div.contains(event.target)) return; } - Session.set("classDispHover",null); + Session.set("classDispHover", null); } }); @@ -775,13 +813,15 @@ function closeDivFade(div) { } function sendData(funcName) { // Call Meteor function, and do actions after function is completed depending on function. - Meteor.call(funcName, serverData , function(err,result) { - if(funcName === "toggleWork") { + Meteor.call(funcName, serverData, function(err, result) { + if (funcName === "toggleWork") { var workId = Session.get("currentWork")._id; - var thisWork = work.findOne({_id:workId}); - Session.set("currentWork",thisWork); + var thisWork = work.findOne({ + _id: workId + }); + Session.set("currentWork", thisWork); var thisReadWork = formReadable(thisWork); - Session.set("currentReadableWork",thisReadWork); + Session.set("currentReadableWork", thisReadWork); } }); } @@ -789,10 +829,11 @@ function sendData(funcName) { // Call Meteor function, and do actions after func function closeInput(modifyingInput) { // Close a changeable input and change it back to span. var input = document.getElementById(modifyingInput + "a"); var span = document.getElementById(modifyingInput); - if(Session.equals("sidebar","optionsContainer") || Session.equals("sidebar","both")) { - var color = "#000"; + var color; + if (Session.equals("sidebar", "optionsContainer") || Session.equals("sidebar", "both")) { + color = "#000"; } else { - var color = "#8C8C8C"; + color = "#8C8C8C"; } span.style.color = color; input.parentNode.removeChild(input); @@ -808,11 +849,11 @@ function closeInput(modifyingInput) { // Close a changeable input and change it span.style.display = "initial"; Session.set("modifying", null); - if(Session.equals("sidebar","optionsContainer") || Session.equals("sidebar","both")) { // Close depending on work or preferences. + if (Session.equals("sidebar", "optionsContainer") || Session.equals("sidebar", "both")) { // Close depending on work or preferences. serverData = getPreferencesData(); sendData("editProfile"); - } else if(!Session.get("newWork")) { - if(getHomeworkFormData() === null) return; + } else if (!Session.get("newWork")) { + if (getHomeworkFormData() === null) return; serverData = Session.get("currentWork"); sendData("editWork"); } @@ -821,15 +862,15 @@ function closeInput(modifyingInput) { // Close a changeable input and change it function getHomeworkFormData() { // Get all data relating to work creation. var inputs = document.getElementsByClassName("req"); var stop; - for(var i = 0; i < inputs.length; i++) { + for (var i = 0; i < inputs.length; i++) { var value = inputs[i].childNodes[0].nodeValue; - if(value.includes("Click here to edit")) { + if (value.includes("Click here to edit")) { inputs[i].childNodes[0].nodeValue = "Missing field"; inputs[i].style.color = "#FF1A1A"; stop = true; } } - if(stop) return null; + if (stop) return null; var data = Session.get("currentWork"); data.name = document.getElementById("workName").childNodes[0].nodeValue; @@ -845,36 +886,36 @@ function getHomeworkFormData() { // Get all data relating to work creation. function getPreferencesData() { // Get all data relating to preferences. var profile = Session.get("user"); var options = { - "theme":document.getElementById("prefTheme").childNodes[0].nodeValue.toLowerCase(), - "mode":document.getElementById("prefMode").childNodes[0].nodeValue.toLowerCase(), - "timeHide":ref[document.getElementById("prefHide").childNodes[0].nodeValue], - "done":ref[document.getElementById("prefDone").childNodes[0].nodeValue] + "theme": document.getElementById("prefTheme").childNodes[0].nodeValue.toLowerCase(), + "mode": document.getElementById("prefMode").childNodes[0].nodeValue.toLowerCase(), + "timeHide": ref[document.getElementById("prefHide").childNodes[0].nodeValue], + "done": ref[document.getElementById("prefDone").childNodes[0].nodeValue] }; profile.preferences = options; return profile; } -var days = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]; -var months = ["January","February","March","April","May","June","July","August","September","October","November","December"]; +var days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]; +var months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; function getReadableDate(date) { // Get readable date from Date constructor. - return days[date.getDay()]+", "+months[date.getMonth()]+" "+date.getDate()+", "+date.getFullYear(); + return days[date.getDay()] + ", " + months[date.getMonth()] + " " + date.getDate() + ", " + date.getFullYear(); } function toDate(date) { // Turns formatted date back to Date constructor. - date = date.substring(date.search(",")+2,date.length); - month = months.indexOf(date.substring(0,date.search(" "))); - day = date.substring(date.search(" ")+1,date.search(",")); - year = date.substring(date.search(",")+2,date.length); - return new Date(year,month,day,11,59,59); + date = date.substring(date.search(",") + 2, date.length); + month = months.indexOf(date.substring(0, date.search(" "))); + day = date.substring(date.search(" ") + 1, date.search(",")); + year = date.substring(date.search(",") + 2, date.length); + return new Date(year, month, day, 11, 59, 59); } function formReadable(input) { // Makes work information readable by users. input.dueDate = getReadableDate(input.dueDate); input.type = input.type[0].toUpperCase() + input.type.slice(1); - if(!Session.get("newWork")) { - if(input.done.indexOf(Meteor.userId()) !== -1) { // If user marked as done. + if (!Session.get("newWork")) { + if (input.done.indexOf(Meteor.userId()) !== -1) { // If user marked as done. input.doneCol = "#27A127"; input.doneText = "Done!"; } else { @@ -882,17 +923,21 @@ function formReadable(input) { // Makes work information readable by users. input.doneText = "Mark done"; } - for(var i = 0; i < input.done.length; i++) { // Display users who marked as done. - input.done[i] = {"user":Meteor.users.findOne({_id:input.done[i]}).profile.name}; + for (var i = 0; i < input.done.length; i++) { // Display users who marked as done. + input.done[i] = { + "user": Meteor.users.findOne({ + _id: input.done[i] + }).profile.name + }; } - if(input.confirmations.indexOf(Meteor.userId()) !== -1) { // If user confirmed. - input.userConfirm = "#27A127"; + if (input.confirmations.indexOf(Meteor.userId()) !== -1) { // If user confirmed. + input.userConfirm = "#27A127"; } else { input.userConfirm = ""; } - if(input.reports.indexOf(Meteor.userId()) !== -1) { // If user reported. + if (input.reports.indexOf(Meteor.userId()) !== -1) { // If user reported. input.userReport = "#FF1A1A"; } else { input.userReport = ""; @@ -903,12 +948,18 @@ function formReadable(input) { // Makes work information readable by users. var comments = input.comments; var resort = []; - if(!Session.get("newWork")) { // Don't display comments if user is creating work. - for(var k = 0; k < comments.length; k++) { - var re = comments.length-k-1; - resort[re] = {"comment":comments[k].comment,"date":null,"user":null}; - resort[re].user = Meteor.users.findOne({_id:comments[k].user}).profile.name; - resort[re].date = moment(comments[k].date).fromNow(); + if (!Session.get("newWork")) { // Don't display comments if user is creating work. + for (var k = 0; k < comments.length; k++) { + var re = comments.length - k - 1; + resort[re] = { + "comment": comments[k].comment, + "date": null, + "user": null + }; + resort[re].user = Meteor.users.findOne({ + _id: comments[k].user + }).profile.name; + resort[re].date = moment(comments[k].date).fromNow(); } input.comments = resort; } diff --git a/hourglass/lib/router.js b/hourglass/lib/router.js index b85af25..5bdbcf9 100644 --- a/hourglass/lib/router.js +++ b/hourglass/lib/router.js @@ -4,11 +4,11 @@ Router.route('/', { this.redirect('/login'); } else { return [ - Meteor.subscribe('classes',this.params._id), - Meteor.subscribe('schools',this.params._id), - Meteor.subscribe('work',this.params._id), - Meteor.subscribe('requests',this.params._id), - Meteor.subscribe('users',this.params._id) + Meteor.subscribe('classes', this.params._id), + Meteor.subscribe('schools', this.params._id), + Meteor.subscribe('work', this.params._id), + Meteor.subscribe('requests', this.params._id), + Meteor.subscribe('users', this.params._id) ]; } }, @@ -33,15 +33,15 @@ Router.route('/profile', { this.redirect('/login'); } else { return [ - Meteor.subscribe('classes',this.params._id), - Meteor.subscribe('schools',this.params._id), - Meteor.subscribe('work',this.params._id), - Meteor.subscribe('requests',this.params._id), - Meteor.subscribe('users',this.params._id) + Meteor.subscribe('classes', this.params._id), + Meteor.subscribe('schools', this.params._id), + Meteor.subscribe('work', this.params._id), + Meteor.subscribe('requests', this.params._id), + Meteor.subscribe('users', this.params._id) ]; } }, - action: function() { + action: function() { this.render("profile"); } }); @@ -50,17 +50,17 @@ Router.route('/admin', { waitOn: function() { if (Roles.userIsInRole(Meteor.userId(), ['admin', 'superadmin'])) { return [ - Meteor.subscribe('classes',this.params._id), - Meteor.subscribe('schools',this.params._id), - Meteor.subscribe('work',this.params._id), - Meteor.subscribe('requests',this.params._id), - Meteor.subscribe('users',this.params._id) + Meteor.subscribe('classes', this.params._id), + Meteor.subscribe('schools', this.params._id), + Meteor.subscribe('work', this.params._id), + Meteor.subscribe('requests', this.params._id), + Meteor.subscribe('users', this.params._id) ]; } else { this.render('NotFound'); } }, - action: function() { + action: function() { this.render("admin"); } }); diff --git a/hourglass/server/main.js b/hourglass/server/main.js index 1f904c4..7e1c013 100644 --- a/hourglass/server/main.js +++ b/hourglass/server/main.js @@ -1,4 +1,4 @@ -//meteor things +/* jshint esversion: 6 */ import { Meteor } from 'meteor/meteor';