new updating system, in progress
This commit is contained in:
parent
a029d886d0
commit
f10e29767a
@ -1089,6 +1089,11 @@ textarea.clickModify {
|
||||
pointer-events: auto;
|
||||
}
|
||||
|
||||
.fc-day {
|
||||
max-height: 11vh;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
#workComment {
|
||||
width: 99%;
|
||||
margin-bottom: 3%;
|
||||
|
||||
@ -23,6 +23,7 @@ var defaultWork = {
|
||||
Session.set("user", {}); // Stores user preferences.
|
||||
Session.set("calendarEvents", []); // Stores calendar classes.
|
||||
Session.set("myClasses", []); // Stores user classes.
|
||||
Session.set("myWork", []); // Stores user related work.
|
||||
Session.set("requests", false); // Status of requests.
|
||||
Session.set("sidebarMode", ""); // Status of sidebars.
|
||||
Session.set("newWork", null); // If user creating new work.
|
||||
@ -48,6 +49,18 @@ Template.main.created = function() {
|
||||
$(".overlay").fadeOut(150);
|
||||
}
|
||||
});
|
||||
getClasses();
|
||||
work.find().observeChanges({
|
||||
added: function (id, fields) {
|
||||
updateWork(id, fields, "added");
|
||||
},
|
||||
changed: function (id, fields) {
|
||||
updateWork(id, fields, "changed");
|
||||
},
|
||||
removed: function (id) {
|
||||
updateWork(id, null, "remove");
|
||||
}
|
||||
});
|
||||
/*if (Notification.permission !== "granted") {
|
||||
Notification.requestPermission().then(function(result) {
|
||||
|
||||
@ -130,19 +143,171 @@ Template.registerHelper('overlayDim', (part) => { // Gets size of the overlay co
|
||||
});
|
||||
|
||||
Template.registerHelper('myClasses', () => { // Gets all classes and respective works.
|
||||
if (Session.get("user").classes.length === 0) { // Null checking.
|
||||
/*var myClasses = Session.get("user").classes;
|
||||
var classDisp = Session.get("classDisp");
|
||||
if (myClasses.length === 0) { // Null checking.
|
||||
return [];
|
||||
} else {
|
||||
var array = myClasses();
|
||||
var array = [];
|
||||
for(var i = 0; i < myClasses.length; i++) {
|
||||
var classObj;
|
||||
if(myClasses[i] === Meteor.userId()) {
|
||||
classObj.name = "Personal";
|
||||
classObj.box = " owned";
|
||||
classObj.mine = false; // Actual value is reversed.
|
||||
classObj.subscribers = 1;
|
||||
} else {
|
||||
classObj = classes.findOne({_id: myClasses[i]});
|
||||
if(classObj === undefined) return;
|
||||
var isAdmin = classObj.admin === Meteor.userId();
|
||||
classObj.box = (isAdmin) ? " owned" : "";
|
||||
classObj.mine = (isAdmin) ? false : true; // Actual value is reversed
|
||||
classObj.subscribers = classObj.subscribers.length;
|
||||
classObj.teachershort = (found.teacher === undefined) ? "" : found.teacher.split(" ").slice(1).reduce(function(a,b) { return a+ " " + b;});
|
||||
}
|
||||
|
||||
classObj.selected = ((classDisp.indexOf(myClasses[i]) !== -1)) ? Session.get("user").preferences.theme.modeHighlight : "rgba(0,0,0,0)"; // Filter selected.
|
||||
array.push(classObj);
|
||||
}*/
|
||||
/* var array = myClasses();
|
||||
if(Meteor.Device.isPhone()) mobileWork();
|
||||
Session.set("myClasses", array);
|
||||
calendarEvents(array);
|
||||
$("#fullcalendar").fullCalendar("removeEvents");
|
||||
$("#fullcalendar").fullCalendar("addEventSource", Session.get("calendarEvents"))
|
||||
return array;
|
||||
}
|
||||
$("#fullcalendar").fullCalendar("addEventSource", Session.get("calendarEvents"))*/
|
||||
return Session.get("myClasses");
|
||||
|
||||
});
|
||||
|
||||
Template.registerHelper('myWork', () => {
|
||||
return Session.get("myWork");
|
||||
});
|
||||
|
||||
getClasses = function() {
|
||||
var array = [];
|
||||
var myClasses = Session.get("user").classes;
|
||||
var classDisp = Session.get("classDisp");
|
||||
for(var i = 0; i < myClasses.length; i++) {
|
||||
var classObj = {};
|
||||
if(myClasses[i] === Meteor.userId()) {
|
||||
classObj.name = "Personal";
|
||||
classObj.box = " owned";
|
||||
classObj.mine = false; // Actual value is reversed.
|
||||
classObj.subscribers = 1;
|
||||
classObj.admin = Meteor.userId();
|
||||
classObj._id = Meteor.userId();
|
||||
} else {
|
||||
classObj = classes.findOne({_id: myClasses[i]});
|
||||
if(classObj === undefined) return;
|
||||
var isAdmin = classObj.admin === Meteor.userId();
|
||||
classObj.box = (isAdmin) ? " owned" : "";
|
||||
classObj.mine = (isAdmin) ? false : true; // Actual value is reversed
|
||||
classObj.subscribers = classObj.subscribers.length;
|
||||
classObj.teachershort = (classObj.teacher === undefined) ? "" : classObj.teacher.split(" ").slice(1).reduce(function(a,b) { return a+ " " + b;});
|
||||
}
|
||||
|
||||
classObj.selected = ((classDisp.indexOf(myClasses[i]) !== -1)) ? Session.get("user").preferences.theme.modeHighlight : "rgba(0,0,0,0)"; // Filter selected.
|
||||
array.push(classObj);
|
||||
}
|
||||
Session.set("myClasses", array);
|
||||
}
|
||||
|
||||
updateWork = function(id, fields, type) {
|
||||
if(type === "remove" && Session.get("myWork").filter(function(work) { // Removed work and exists in user data.
|
||||
return work._id === id;
|
||||
}).length !== 0) {
|
||||
Session.set("myWork", Session.get("myWork").filter(function(work) {
|
||||
return work._id !== id;
|
||||
}));
|
||||
return;
|
||||
}
|
||||
|
||||
var classDisp = Session.get("classDisp");
|
||||
var sideFilter = Session.get("typeFilter"); // Get sidebar type filter.
|
||||
var hideTime = Session.get("user").preferences.timeHide;
|
||||
var workObj;
|
||||
|
||||
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.classid = workObj.class;
|
||||
workObj.realDate = workObj.dueDate;
|
||||
workObj.dueDate = moment(workObj.dueDate).calendar(null, {
|
||||
sameDay: '[Today]',
|
||||
nextDay: '[Tomorrow]',
|
||||
nextWeek: 'dddd',
|
||||
lastDay: '[Yesterday]',
|
||||
lastWeek: '[Last] dddd',
|
||||
sameElse: 'MMMM Do'
|
||||
});
|
||||
|
||||
if (workObj.dueDate === "Today") { // Font weight based on date proximity.
|
||||
workObj.cardDate = "600";
|
||||
} else if (workObj.dueDate === "Tomorrow") {
|
||||
workObj.cardDate = "400";
|
||||
}
|
||||
|
||||
workObj.typeColor = workColors[workObj.type];
|
||||
workObj.confirmationLength = workObj.confirmations.length; // Counts the number of confirmations and reports for a particular work.
|
||||
workObj.reportLength = workObj.reports.length;
|
||||
|
||||
workObj.creatorname = Meteor.users.findOne({
|
||||
_id: workObj.creator
|
||||
}).profile.name;
|
||||
|
||||
workObj.hide = false;
|
||||
|
||||
//Filters
|
||||
var notInClassFilter = classDisp.length !== 0 && !_.contains(classDisp, workObj.classid);
|
||||
var pastHideDate = hideTime !== 0 && (moment().subtract(hideTime, 'days'))._d > (moment(workObj.realDate))._d;
|
||||
var markedDone = Session.get("user").preferences.done && !Meteor.Device.isPhone() && _.contains(workObj.done, Meteor.userId());
|
||||
var reported = (workObj.reportLength / (workObj.reportLength + workObj.confirmationLength)) > 0.7; // Over 70% are reports
|
||||
|
||||
if(notInClassFilter || pastHideDate || markedDone) workObj.hide = true;
|
||||
|
||||
var normalColor = Session.get("user").preferences.theme.text;
|
||||
// Ratio color handling
|
||||
/*var conf = workObj.confirmations.length;
|
||||
var repo = workObj.reports.length;
|
||||
var ratio = conf / repo;
|
||||
|
||||
if (Math.abs(conf - repo)) {
|
||||
if ((conf + repo) <= 1) {
|
||||
thisWork[j].doneRatio = normalColor;
|
||||
} else {
|
||||
thisWork[j].doneRatio = "#F9F906";
|
||||
}
|
||||
} else if (ratio >= 2) {
|
||||
thisWork[j].doneRatio = "#33DD33";
|
||||
} else if (ratio <= 0.9) {
|
||||
thisWork[j].doneRatio = "#FF1A1A";
|
||||
}*/
|
||||
|
||||
workObj.doneRatio = normalColor;
|
||||
|
||||
var myWork;
|
||||
if(type === "added") {
|
||||
myWork = Session.get("myWork");
|
||||
} else if(type === "changed") {
|
||||
myWork = Session.get("myWork").filter(function(work) {
|
||||
return work._id !== id;
|
||||
});
|
||||
}
|
||||
myWork.push(workObj);
|
||||
Session.set("myWork", myWork.sort(function(a,b) {
|
||||
return Date.parse(a.realDate) - Date.parse(b.realDate);
|
||||
}));
|
||||
|
||||
calendarEvents();
|
||||
$("#fullcalendar").fullCalendar("removeEvents");
|
||||
$("#fullcalendar").fullCalendar("addEventSource", Session.get("calendarEvents"));
|
||||
}
|
||||
|
||||
Template.registerHelper('pref', (val) => { // Obtains all user preferences.
|
||||
try {
|
||||
if(val === "school") return Session.get("user").school;
|
||||
@ -215,7 +380,9 @@ Template.main.helpers({
|
||||
return " - " + Session.get("user").school;
|
||||
},
|
||||
avatar() { // Returns avatar.
|
||||
try {
|
||||
return Meteor.user().services.google.picture;
|
||||
} catch(err) {}
|
||||
},
|
||||
username() { // Returns user name.
|
||||
return Session.get("user").name;
|
||||
@ -681,11 +848,11 @@ Template.main.events({
|
||||
},
|
||||
'click .cWorkBottom .fa-thumbs-up' (event) {
|
||||
serverData = [event.target.parentNode.parentNode.parentNode.parentNode.getAttribute("workid"), "confirmations"]
|
||||
sendData("toggleWork")
|
||||
sendData("toggleWork");
|
||||
},
|
||||
'click .cWorkBottom .fa-exclamation-triangle' (event) {
|
||||
serverData = [event.target.parentNode.parentNode.parentNode.parentNode.getAttribute("workid"), "reports"]
|
||||
sendData("toggleWork")
|
||||
sendData("toggleWork");
|
||||
},
|
||||
'click #signout' () {
|
||||
$(".noScroll").velocity("fadeOut", 50);
|
||||
@ -694,6 +861,15 @@ Template.main.events({
|
||||
}
|
||||
});
|
||||
|
||||
Template.classesMode.helpers({
|
||||
thisClassWork() {
|
||||
var id = this._id;
|
||||
return Session.get("myWork").filter(function(work) {
|
||||
return work.classid === id;
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
// Other Functions
|
||||
|
||||
toggleOptionMenu = function(toggle, menu) {
|
||||
@ -992,7 +1168,7 @@ myClasses = function() {
|
||||
});
|
||||
if(found === undefined) return;
|
||||
found.subscribers = found.subscribers.length;
|
||||
if(found.teacher !== undefined) found.teachershort = found.teacher.split(" ").slice(1).reduce(function(a,b) { return a+ " " + b;});
|
||||
found.teachershort = (found.teacher === undefined) ? "" : found.teacher.split(" ").slice(1).reduce(function(a,b) { return a+ " " + b;});
|
||||
found.mine = true;
|
||||
if (found.admin === Meteor.userId()) { // If user owns this class.
|
||||
found.box = " owned";
|
||||
@ -1090,17 +1266,12 @@ myClasses = function() {
|
||||
return array;
|
||||
}
|
||||
|
||||
function calendarEvents(array) {
|
||||
function calendarEvents() {
|
||||
var events = [];
|
||||
var userClasses = array;
|
||||
if(userClasses === undefined) return;
|
||||
for (var i = 0; i < userClasses.length; i++) {
|
||||
var works = userClasses[i].thisClassWork;
|
||||
for (var j = 0; j < works.length; j++) {
|
||||
var work = works[j];
|
||||
var currClass = classes.findOne({
|
||||
_id: work.class
|
||||
});
|
||||
var myWork = Session.get("myWork");
|
||||
for(var i = 0; i < myWork.length; i++) {
|
||||
var work = myWork[i];
|
||||
var currClass = classes.findOne({ _id: work.classid});
|
||||
var inRole = false;
|
||||
|
||||
if (work.class === Meteor.userId() ||
|
||||
@ -1109,6 +1280,7 @@ function calendarEvents(array) {
|
||||
currClass.moderators.indexOf(Meteor.userId()) !== -1 ||
|
||||
currClass.banned.indexOf(Meteor.userId()) !== -1
|
||||
) inRole = true;
|
||||
|
||||
events.push({
|
||||
id: work._id,
|
||||
start: work.realDate.toISOString().slice(0, 10),
|
||||
@ -1119,7 +1291,6 @@ function calendarEvents(array) {
|
||||
className: work.type + " workevent " + work.class
|
||||
});
|
||||
}
|
||||
}
|
||||
Session.set("calendarEvents", events);
|
||||
}
|
||||
|
||||
|
||||
@ -373,7 +373,7 @@ Template.joinClass.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) {
|
||||
if(array[i].teacher !== undefined) array[i].teachershort = array[i].teacher.split(" ").slice(1).reduce(function(a, b) {
|
||||
return a + " " + b;
|
||||
});
|
||||
}
|
||||
@ -486,10 +486,11 @@ Template.joinClass.events({
|
||||
Meteor.call("joinPrivateClass", input.value, function(error, result) {
|
||||
if (result) {
|
||||
sAlert.success("Joined!", {
|
||||
effect: 'genie',
|
||||
effect: 'stackslide',
|
||||
position: 'bottom-right',
|
||||
timeout: 1500
|
||||
});
|
||||
$("#privateCode").velocity("fadeOut",100);
|
||||
} else {
|
||||
sAlert.error("Invalid code!", {
|
||||
effect: 'stackslide',
|
||||
@ -497,7 +498,9 @@ Template.joinClass.events({
|
||||
timeout: 1500
|
||||
});
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@ -754,11 +754,9 @@ Meteor.methods({
|
||||
var current = Meteor.user().profile;
|
||||
var index = current.classes.indexOf(change);
|
||||
if (index >= 0) {
|
||||
console.log("hi");
|
||||
if (classes.findOne({
|
||||
_id: change
|
||||
}).admin != Meteor.userId()) {
|
||||
console.log("f");
|
||||
current.classes.splice(index, 1);
|
||||
Meteor.users.update({
|
||||
_id: Meteor.userId()
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user