Many small fixes, work fully updating

This commit is contained in:
Kenneth Jao 2017-04-19 01:45:46 -04:00
parent f10e29767a
commit a1d821f712
8 changed files with 143 additions and 82 deletions

View File

@ -1208,7 +1208,8 @@ textarea.clickModify {
background-color: rgba(0,0,0,0.1); background-color: rgba(0,0,0,0.1);
position: relative; position: relative;
cursor: default; cursor: default !important;
display: table;
-webkit-transition: background-color 0.4s ease; -webkit-transition: background-color 0.4s ease;
-moz-transition: background-color 0.4s ease; -moz-transition: background-color 0.4s ease;
@ -1221,13 +1222,20 @@ textarea.clickModify {
} }
.doneUser div { .doneUser div {
display: inline-block;
text-align: center; text-align: center;
display: table-cell;
}
.doneUser div:first-child {
width: 15%;
vertical-align: middle;
} }
.doneUser img { .doneUser img {
display: inline-block; width: 4vh;
vertical-align: middle; height: 4vh;
line-height: normal; line-height: 4vh;
-moz-border-radius: 50%; -moz-border-radius: 50%;
-webkit-border-radius: 50%; -webkit-border-radius: 50%;
@ -1235,11 +1243,8 @@ textarea.clickModify {
} }
.doneUser span { .doneUser span {
margin-bottom: 0.3vw; text-align: center;
display: inline-block;
vertical-align: middle; vertical-align: middle;
line-height: normal;
} }
#toggleButtons { #toggleButtons {
@ -1320,7 +1325,7 @@ textarea.clickModify {
#userDropdownAvatar { #userDropdownAvatar {
width: 100%; width: 100%;
height: 10vw; height: 10.5vw;
position: relative; position: relative;
} }
@ -1340,7 +1345,7 @@ textarea.clickModify {
#userDropdownAvatar p { #userDropdownAvatar p {
font-size: 1.2vw; font-size: 1.2vw;
width: 12vw; width: 11vw;
margin: 0 auto 0 auto; margin: 0 auto 0 auto;
padding-top: 7.5vw; padding-top: 7.5vw;
text-align: center; text-align: center;

View File

@ -118,10 +118,10 @@
<p>{{work 'reports'}}</p> <p>{{work 'reports'}}</p>
</div> </div>
<div class="workCreator doneUser"> <div class="workCreator doneUser">
<div style="display:inline-block;width:{{screen '3' '140'}}"> <div>
<img src="{{work 'avatar'}}" style="width:{{screen '3' '140'}};height:{{screen '3' '140'}}"> <img src="{{work 'avatar'}}">
</div> </div>
<div style="display:inline-block;margin-left:0.3vw"> <div>
<span>{{work 'creator'}}</span> <span>{{work 'creator'}}</span>
</div> </div>
</div> </div>

View File

@ -49,7 +49,7 @@ Template.main.created = function() {
$(".overlay").fadeOut(150); $(".overlay").fadeOut(150);
} }
}); });
getClasses(); console.log(Session.get("user"));
work.find().observeChanges({ work.find().observeChanges({
added: function (id, fields) { added: function (id, fields) {
updateWork(id, fields, "added"); 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. Template.registerHelper('myClasses', () => { // Gets all classes and respective works.
var myClasses = Session.get("user").classes;
getClasses(myClasses);
/*var myClasses = Session.get("user").classes; /*var myClasses = Session.get("user").classes;
var classDisp = Session.get("classDisp"); var classDisp = Session.get("classDisp");
if (myClasses.length === 0) { // Null checking. if (myClasses.length === 0) { // Null checking.
@ -183,9 +185,8 @@ Template.registerHelper('myWork', () => {
return Session.get("myWork"); return Session.get("myWork");
}); });
getClasses = function() { getClasses = function(myClasses) {
var array = []; var array = [];
var myClasses = Session.get("user").classes;
var classDisp = Session.get("classDisp"); var classDisp = Session.get("classDisp");
for(var i = 0; i < myClasses.length; i++) { for(var i = 0; i < myClasses.length; i++) {
var classObj = {}; var classObj = {};
@ -230,9 +231,7 @@ updateWork = function(id, fields, type) {
if(type === "added") { if(type === "added") {
workObj = Object.assign({}, fields, {_id: id}) workObj = Object.assign({}, fields, {_id: id})
} else if(type === "changed") { } else if(type === "changed") {
workObj = Object.assign(Session.get("myWork").filter(function(work) { workObj = work.findOne({_id: id});
return work._id === id;
}), fields);
} }
workObj.classid = workObj.class; workObj.classid = workObj.class;

View File

@ -203,6 +203,7 @@ Template.registerHelper("classInfo", (info) => {
var thisClass = classes.findOne({ var thisClass = classes.findOne({
_id: Session.get("classInfo") _id: Session.get("classInfo")
}); });
if (thisClass === undefined) return;
var isYou = Session.equals("classInfo", Meteor.userId()); var isYou = Session.equals("classInfo", Meteor.userId());
switch (info) { switch (info) {
case "name": case "name":
@ -498,7 +499,7 @@ Template.joinClass.events({
timeout: 1500 timeout: 1500
}); });
} }
Meteor.subscribe("classes");
}); });
} }

View File

@ -45,16 +45,8 @@ Template.mProfile.rendered = function() {
return; return;
} }
_.each(myClasses, function(myClass) { joinClass(0);
Meteor.call("joinClass", [myClass, ""], function(err, result) {
if(err !== undefined) {
sAlert.error(message, {
effect: 'stackslide',
position: 'top'
});
}
})
});
var profile = Session.get("profile"); var profile = Session.get("profile");
profile.complete = true; profile.complete = true;
profile.preferences = Meteor.user().profile.preferences; 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) newSetting.classes.splice(newSetting.classes.indexOf(div.parentNode.getAttribute("classid")),1)
Session.set("profile", newSetting); 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);
}
});
} }

View File

@ -78,7 +78,7 @@
<div id="formContainer"> <div id="formContainer">
<div class="formDiv"> <div class="formDiv">
<p class="profTitle">**School:</p> <p class="profTitle">**School:</p>
<input id="school" class="creInput" type="text" form="school" value="{{pref 'school'}}" readonly> <input id="school" class="creInput" type="text" form="school" value="{{school}}" readonly>
</div> </div>
<div class="formDiv"> <div class="formDiv">
<p class="profTitle">Hour:</p> <p class="profTitle">Hour:</p>

View File

@ -50,7 +50,7 @@ Template.profile.helpers({
for (var i = 0; i < array.length; i++) { for (var i = 0; i < array.length; i++) {
array[i].join = true; array[i].join = true;
array[i].subscribers = array[i].subscribers.length; 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; return a + " " + b;
}); });
} }
@ -133,6 +133,9 @@ Template.profile.helpers({
return {name:a.name,_id:(Math.floor(Math.random()*1000)).toString(),x:true}; return {name:a.name,_id:(Math.floor(Math.random()*1000)).toString(),x:true};
})); }));
return array; return array;
},
school() {
return Session.get("profile").school;
} }
}); });
@ -187,26 +190,51 @@ Template.profile.events({
} }
values.privacy = (values.privacy === "Public") ? false : true; values.privacy = (values.privacy === "Public") ? false : true;
values.status = false; values.status = false;
values.category.toLowerCase(); values.category = values.category.toLowerCase();
values.code = ""; values.code = "";
var newClasses = Session.get("newClasses"); var newClasses = Session.get("newClasses");
var duplicate = false; var duplicate = false;
for(var i = 0; i < newClasses.length; i++) { for(var i = 0; i < newClasses.length; i++) {
if(JSON.stringify(newClasses[i]) === JSON.stringify(values)) duplicate = true; 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 && newClasses.length < 8) newClasses.push(values);
if(duplicate) sAlert.error("You already created this class!", { if(duplicate) {
effect: 'stackslide', sAlert.error("You already created this class!", {
position: 'bottom-right', effect: 'stackslide',
timeout: 3000 position: 'bottom-right',
}); timeout: 3000
if(newClasses.length === 8) sAlert.error("You already created 8 classes!", { });
effect: 'stackslide', }
position: 'bottom-right', if(newClasses.length === 8) {
timeout: 3000 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); Session.set("newClasses", newClasses);
$(".creInput").each(function(){$(this).val('');}); $(".creInput").each(function(){$(this).val('');});
$(".creInput")[0].value = Session.get("profile").school;
slideToField(Session.get("sections")[1]-1);
}, },
'click #backArrow' () { 'click #backArrow' () {
@ -283,12 +311,15 @@ Template.profile.events({
document.getElementById(modifyingInput).value = option; document.getElementById(modifyingInput).value = option;
toggleOptionMenu(false, modifyingInput); toggleOptionMenu(false, modifyingInput);
$(".selectedOption").removeClass("selectedOption"); $(".selectedOption").removeClass("selectedOption");
if(option !== Session.get("profile").school) { var newSetting = Session.get("profile");
newSetting = Session.get("profile"); if(modifyingInput === "school") {
newSetting["classes"] = []; if(option !== Session.get("profile").school) newSetting["classes"] = [];
newSetting.school = option; 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 'input #classSearch' (event) { // Auto-complete updater
if (event.target.value.length === 0) { if (event.target.value.length === 0) {
@ -381,18 +412,10 @@ Template.profile.events({
return; return;
} }
_.each(myClasses, function(myClass) { joinClass(0);
Meteor.call("joinClass", [myClass, ""], function(err, result) {
if(err !== undefined) {
sAlert.error(message, {
effect: 'stackslide',
position: 'top'
});
}
})
});
_.each(newClasses, function(newClass) { _.each(newClasses, function(newClass) {
if (!teachers.findOne({ if(!teachers.findOne({
name: newClass.teacher name: newClass.teacher
})) { })) {
Meteor.call("createTeacher", newClass.teacher, newClass.school, function(error, result) { Meteor.call("createTeacher", newClass.teacher, newClass.school, function(error, result) {
@ -401,28 +424,13 @@ Template.profile.events({
effect: 'stackslide', effect: 'stackslide',
position: 'top' 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"); var profile = Session.get("profile");
profile.complete = true; profile.complete = true;
profile.preferences = Meteor.user().profile.preferences; 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);
}
});
}

View File

@ -318,9 +318,13 @@ function securityCheck(checklist, input) {
results.push(error); results.push(error);
} }
error = results.find(function(result){return result !== 0;}); error = results.find(function(result){return result !== 0;});
if (checklist[checklist.length - 1] && error !== undefined) return error; if (checklist[checklist.length - 1] && error !== undefined) {
else if (results.find(function(result){return result === 0;}) === undefined) return results[0]; return error;
else return 0; } else if (results.find(function(result){return result === 0;}) === undefined) {
return results[0];
} else {
return 0;
}
} }
Meteor.methods({ Meteor.methods({
@ -524,8 +528,9 @@ Meteor.methods({
_id: currentwork.class _id: currentwork.class
}); });
if(change.description) change.description = change.description.trim(); 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})); Object.assign({}, currentclass || {}, currentwork, {description: change.description, name: change.name, dueDate: change.dueDate, type: change.type}));
if (!security) { if (!security) {
work.update({ work.update({
_id: change._id _id: change._id
@ -706,8 +711,8 @@ Meteor.methods({
subscribers: foundsubs.concat(Meteor.userId()) subscribers: foundsubs.concat(Meteor.userId())
} }
}); });
var current = Meteor.user().profile; var current = Meteor.users.findOne({_id: Meteor.userId()}).profile;
current.classes = current.classes.concat(change); current.classes.push(change);
Meteor.users.update({ Meteor.users.update({
_id: Meteor.userId() _id: Meteor.userId()
}, { }, {