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);
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;

View File

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

View File

@ -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;

View File

@ -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");
});
}

View File

@ -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);
}
});
}

View File

@ -78,7 +78,7 @@
<div id="formContainer">
<div class="formDiv">
<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 class="formDiv">
<p class="profTitle">Hour:</p>

View File

@ -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);
}
});
}

View File

@ -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()
}, {