From a1d821f712ae628286a7e3fea3bd28e33a4cf327 Mon Sep 17 00:00:00 2001 From: Kenneth Jao Date: Wed, 19 Apr 2017 01:45:46 -0400 Subject: [PATCH] Many small fixes, work fully updating --- hourglass/client/main/main.css | 25 +++-- hourglass/client/main/main.html | 6 +- hourglass/client/main/main.js | 11 +-- hourglass/client/menus/menus.js | 3 +- hourglass/client/profile/mProfile.js | 28 ++++-- hourglass/client/profile/profile.html | 2 +- hourglass/client/profile/profile.js | 133 +++++++++++++++++--------- hourglass/server/main.js | 17 ++-- 8 files changed, 143 insertions(+), 82 deletions(-) diff --git a/hourglass/client/main/main.css b/hourglass/client/main/main.css index 82e6f71..1e10e74 100644 --- a/hourglass/client/main/main.css +++ b/hourglass/client/main/main.css @@ -1208,7 +1208,8 @@ textarea.clickModify { background-color: rgba(0,0,0,0.1); position: relative; - cursor: default; + cursor: default !important; + display: table; -webkit-transition: background-color 0.4s ease; -moz-transition: background-color 0.4s ease; @@ -1221,13 +1222,20 @@ textarea.clickModify { } .doneUser div { + display: inline-block; text-align: center; + display: table-cell; +} + +.doneUser div:first-child { + width: 15%; + vertical-align: middle; } .doneUser img { - display: inline-block; - vertical-align: middle; - line-height: normal; + width: 4vh; + height: 4vh; + line-height: 4vh; -moz-border-radius: 50%; -webkit-border-radius: 50%; @@ -1235,11 +1243,8 @@ textarea.clickModify { } .doneUser span { - margin-bottom: 0.3vw; - - display: inline-block; + text-align: center; vertical-align: middle; - line-height: normal; } #toggleButtons { @@ -1320,7 +1325,7 @@ textarea.clickModify { #userDropdownAvatar { width: 100%; - height: 10vw; + height: 10.5vw; position: relative; } @@ -1340,7 +1345,7 @@ textarea.clickModify { #userDropdownAvatar p { font-size: 1.2vw; - width: 12vw; + width: 11vw; margin: 0 auto 0 auto; padding-top: 7.5vw; text-align: center; diff --git a/hourglass/client/main/main.html b/hourglass/client/main/main.html index 9277585..fab825e 100644 --- a/hourglass/client/main/main.html +++ b/hourglass/client/main/main.html @@ -118,10 +118,10 @@

{{work 'reports'}}

-
- +
+
-
+
{{work 'creator'}}
diff --git a/hourglass/client/main/main.js b/hourglass/client/main/main.js index da04805..1bd4ebe 100644 --- a/hourglass/client/main/main.js +++ b/hourglass/client/main/main.js @@ -49,7 +49,7 @@ Template.main.created = function() { $(".overlay").fadeOut(150); } }); - getClasses(); + console.log(Session.get("user")); work.find().observeChanges({ added: function (id, fields) { updateWork(id, fields, "added"); @@ -143,6 +143,8 @@ Template.registerHelper('overlayDim', (part) => { // Gets size of the overlay co }); Template.registerHelper('myClasses', () => { // Gets all classes and respective works. + var myClasses = Session.get("user").classes; + getClasses(myClasses); /*var myClasses = Session.get("user").classes; var classDisp = Session.get("classDisp"); if (myClasses.length === 0) { // Null checking. @@ -183,9 +185,8 @@ Template.registerHelper('myWork', () => { return Session.get("myWork"); }); -getClasses = function() { +getClasses = function(myClasses) { var array = []; - var myClasses = Session.get("user").classes; var classDisp = Session.get("classDisp"); for(var i = 0; i < myClasses.length; i++) { var classObj = {}; @@ -230,9 +231,7 @@ updateWork = function(id, fields, type) { if(type === "added") { workObj = Object.assign({}, fields, {_id: id}) } else if(type === "changed") { - workObj = Object.assign(Session.get("myWork").filter(function(work) { - return work._id === id; - }), fields); + workObj = work.findOne({_id: id}); } workObj.classid = workObj.class; diff --git a/hourglass/client/menus/menus.js b/hourglass/client/menus/menus.js index 9010581..8afb9ea 100644 --- a/hourglass/client/menus/menus.js +++ b/hourglass/client/menus/menus.js @@ -203,6 +203,7 @@ Template.registerHelper("classInfo", (info) => { var thisClass = classes.findOne({ _id: Session.get("classInfo") }); + if (thisClass === undefined) return; var isYou = Session.equals("classInfo", Meteor.userId()); switch (info) { case "name": @@ -498,7 +499,7 @@ Template.joinClass.events({ timeout: 1500 }); } - + Meteor.subscribe("classes"); }); } diff --git a/hourglass/client/profile/mProfile.js b/hourglass/client/profile/mProfile.js index f3986fc..6ceb987 100644 --- a/hourglass/client/profile/mProfile.js +++ b/hourglass/client/profile/mProfile.js @@ -45,16 +45,8 @@ Template.mProfile.rendered = function() { return; } - _.each(myClasses, function(myClass) { - Meteor.call("joinClass", [myClass, ""], function(err, result) { - if(err !== undefined) { - sAlert.error(message, { - effect: 'stackslide', - position: 'top' - }); - } - }) - }); + joinClass(0); + var profile = Session.get("profile"); profile.complete = true; profile.preferences = Meteor.user().profile.preferences; @@ -250,4 +242,20 @@ Template.mClassDisplay2.rendered = function() { newSetting.classes.splice(newSetting.classes.indexOf(div.parentNode.getAttribute("classid")),1) Session.set("profile", newSetting); }); +} + +function joinClass(num) { + var joining = Session.get("profile").classes; + Meteor.call("joinClass", [joining[num], ""], function(err, result) { + if(err !== undefined) { + sAlert.error(err.message, { + effect: 'stackslide', + position: 'top' + }); + } + joined++; + if(joined !== joining.length) { + joinClass(joined); + } + }); } \ No newline at end of file diff --git a/hourglass/client/profile/profile.html b/hourglass/client/profile/profile.html index a474c87..106b1d1 100644 --- a/hourglass/client/profile/profile.html +++ b/hourglass/client/profile/profile.html @@ -78,7 +78,7 @@

**School:

- +

Hour:

diff --git a/hourglass/client/profile/profile.js b/hourglass/client/profile/profile.js index 6c3122c..0719fa4 100644 --- a/hourglass/client/profile/profile.js +++ b/hourglass/client/profile/profile.js @@ -50,7 +50,7 @@ Template.profile.helpers({ for (var i = 0; i < array.length; i++) { array[i].join = true; array[i].subscribers = array[i].subscribers.length; - array[i].teachershort = array[i].teacher.split(" ").slice(1).reduce(function(a, b) { + array[i].teachershort = (array[i].teacher === undefined) ? "" : array[i].teacher.split(" ").slice(1).reduce(function(a, b) { return a + " " + b; }); } @@ -133,6 +133,9 @@ Template.profile.helpers({ return {name:a.name,_id:(Math.floor(Math.random()*1000)).toString(),x:true}; })); return array; + }, + school() { + return Session.get("profile").school; } }); @@ -187,26 +190,51 @@ Template.profile.events({ } values.privacy = (values.privacy === "Public") ? false : true; values.status = false; - values.category.toLowerCase(); + values.category = values.category.toLowerCase(); values.code = ""; + var newClasses = Session.get("newClasses"); var duplicate = false; for(var i = 0; i < newClasses.length; i++) { if(JSON.stringify(newClasses[i]) === JSON.stringify(values)) duplicate = true; + if(newClasses[i].school === values.school && newClasses[i].teacher === values.teacher && newClasses[i].hour === values.hour) { + sAlert.error("This teacher is already teaching a class elsewhere!", { + effect: 'stackslide', + position: 'bottom-right', + timeout: 3000 + }); + return; + } } if(!duplicate && newClasses.length < 8) newClasses.push(values); - if(duplicate) sAlert.error("You already created this class!", { - effect: 'stackslide', - position: 'bottom-right', - timeout: 3000 - }); - if(newClasses.length === 8) sAlert.error("You already created 8 classes!", { - effect: 'stackslide', - position: 'bottom-right', - timeout: 3000 - }); + if(duplicate) { + sAlert.error("You already created this class!", { + effect: 'stackslide', + position: 'bottom-right', + timeout: 3000 + }); + } + if(newClasses.length === 8) { + sAlert.error("You already created 8 classes!", { + effect: 'stackslide', + position: 'bottom-right', + timeout: 3000 + }); + return; + } + if(classes.findOne({school: values.school, teacher: values.teacher, status: true, privacy: false, hour: values.hour}) || (values.teacher === "" && values.hour === "")) { + sAlert.error("This teacher is already teaching a class elsewhere!", { + effect: 'stackslide', + position: 'bottom-right', + timeout: 3000 + }); + return; + } + Session.set("newClasses", newClasses); $(".creInput").each(function(){$(this).val('');}); + $(".creInput")[0].value = Session.get("profile").school; + slideToField(Session.get("sections")[1]-1); }, 'click #backArrow' () { @@ -283,12 +311,15 @@ Template.profile.events({ document.getElementById(modifyingInput).value = option; toggleOptionMenu(false, modifyingInput); $(".selectedOption").removeClass("selectedOption"); - if(option !== Session.get("profile").school) { - newSetting = Session.get("profile"); - newSetting["classes"] = []; + var newSetting = Session.get("profile"); + if(modifyingInput === "school") { + if(option !== Session.get("profile").school) newSetting["classes"] = []; newSetting.school = option; - Session.set("profile", newSetting); + } else if(modifyingInput === "grade") { + newSetting = Session.get("profile"); + newSetting.grade = option; } + Session.set("profile", newSetting); }, 'input #classSearch' (event) { // Auto-complete updater if (event.target.value.length === 0) { @@ -381,18 +412,10 @@ Template.profile.events({ return; } - _.each(myClasses, function(myClass) { - Meteor.call("joinClass", [myClass, ""], function(err, result) { - if(err !== undefined) { - sAlert.error(message, { - effect: 'stackslide', - position: 'top' - }); - } - }) - }); + joinClass(0); + _.each(newClasses, function(newClass) { - if (!teachers.findOne({ + if(!teachers.findOne({ name: newClass.teacher })) { Meteor.call("createTeacher", newClass.teacher, newClass.school, function(error, result) { @@ -401,28 +424,13 @@ Template.profile.events({ effect: 'stackslide', position: 'top' }); - } else { - Meteor.call("createClass", newClass, function(error, result) { - if(error !== undefined) { - sAlert.error(message, { - effect: 'stackslide', - position: 'top' - }); - } - }); - } - }); - } else { - Meteor.call("createClass", newClass, function(error, result) { - if(error !== undefined) { - sAlert.error(message, { - effect: 'stackslide', - position: 'top' - }); } }); } }); + + createClass(0); + var profile = Session.get("profile"); profile.complete = true; profile.preferences = Meteor.user().profile.preferences; @@ -462,3 +470,38 @@ function slideToField(field) { } }); } + +var joined = 0; +var created = 0; + +function joinClass(num) { + var joining = Session.get("profile").classes; + Meteor.call("joinClass", [joining[num], ""], function(err, result) { + if(err !== undefined) { + sAlert.error(err.message, { + effect: 'stackslide', + position: 'top' + }); + } + joined++; + if(joined !== joining.length) { + joinClass(joined); + } + }); +} + +function createClass(num) { + var creating = Session.get("newClasses"); + Meteor.call("createClass", creating[num], function(error, result) { + if(error !== undefined) { + sAlert.error(error.message, { + effect: 'stackslide', + position: 'top' + }); + } + created++; + if(created !== creating.length) { + createClass(created); + } + }); +} diff --git a/hourglass/server/main.js b/hourglass/server/main.js index 9abcd3b..d5863a5 100644 --- a/hourglass/server/main.js +++ b/hourglass/server/main.js @@ -318,9 +318,13 @@ function securityCheck(checklist, input) { results.push(error); } error = results.find(function(result){return result !== 0;}); - if (checklist[checklist.length - 1] && error !== undefined) return error; - else if (results.find(function(result){return result === 0;}) === undefined) return results[0]; - else return 0; + if (checklist[checklist.length - 1] && error !== undefined) { + return error; + } else if (results.find(function(result){return result === 0;}) === undefined) { + return results[0]; + } else { + return 0; + } } Meteor.methods({ @@ -524,8 +528,9 @@ Meteor.methods({ _id: currentwork.class }); if(change.description) change.description = change.description.trim(); - var security = securityCheck([[1, 16, 13, 5, false], 11, 12, 10, 20, true], + var security = securityCheck([[1,16, 13, 14, 5, false], 11, 12, 10, 20, true], Object.assign({}, currentclass || {}, currentwork, {description: change.description, name: change.name, dueDate: change.dueDate, type: change.type})); + if (!security) { work.update({ _id: change._id @@ -706,8 +711,8 @@ Meteor.methods({ subscribers: foundsubs.concat(Meteor.userId()) } }); - var current = Meteor.user().profile; - current.classes = current.classes.concat(change); + var current = Meteor.users.findOne({_id: Meteor.userId()}).profile; + current.classes.push(change); Meteor.users.update({ _id: Meteor.userId() }, {