web beautify filter

This commit is contained in:
Yaman Qalieh 2016-10-03 23:13:05 -04:00
parent 196976cc9f
commit be716d982a

View File

@ -44,19 +44,19 @@ var ref = {
};
// Reactive variables.
Session.set("user",{}); // Stores user preferences.
Session.set("user", {}); // Stores user preferences.
Session.set("calendarClasses", []); // Stores calendar classes.
Session.set("sidebar", null); // Status of sidebar.
Session.set("requests",false); // Status of requests.
Session.set("requests", false); // Status of requests.
Session.set("newWork", null); // If user creating new work.
Session.set("currentWorkId",null); // Stores current work Id.
Session.set("currentWorkId", null); // Stores current work Id.
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("typeFilter", []); // Stores type filters for classes.
Session.set("typeFilterHover",null); // Stores current hovered type filter.
Session.set("typeFilterHover", null); // Stores current hovered type filter.
Session.set("classDispHover", null); // Stores current hovered class filter.
Session.set("refetchEvents", null); // Stores whether to get calendar events again.
Session.set("commentRestrict", ""); // Stores text for comment character restriction.
@ -76,14 +76,14 @@ Template.profile.rendered = function() {
};
Template.registerHelper('userProfile', () => {
if(Meteor.user() === undefined || Meteor.user() === null) return;
if (Meteor.user() === undefined || Meteor.user() === null) return;
Session.set("user", Meteor.user().profile);
return;
});
Template.registerHelper('screen', (multiplier, fraction) => {
if(typeof multiplier !== "string") return screen.width.toString() + "px";
if(typeof fraction !== "string") return (screen.width * parseFloat(multiplier)).toString() + "px";
if (typeof multiplier !== "string") return screen.width.toString() + "px";
if (typeof fraction !== "string") return (screen.width * parseFloat(multiplier)).toString() + "px";
return ((screen.width) * parseFloat(multiplier) / parseFloat(fraction)).toString() + "px";
});
@ -106,8 +106,8 @@ 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.
Session.set("noclass",true); // Makes sure to display nothing.
if (Session.get("user").classes.length === 0) { // Null checking.
Session.set("noclass", true); // Makes sure to display nothing.
return [];
} else {
var array = [];
@ -168,7 +168,7 @@ Template.registerHelper('myClasses', () => { // Gets all classes and respective
thisWork[j] = "no";
}
if(thisWork[j] !== "no" && Session.get("user").preferences.hideReport && (thisWork[j].confirmations.length/thisWork[j].reports.length) <= 0.9) {
if (thisWork[j] !== "no" && Session.get("user").preferences.hideReport && (thisWork[j].confirmations.length / thisWork[j].reports.length) <= 0.9) {
thisWork[j] = "no";
}
@ -197,13 +197,15 @@ Template.registerHelper('myClasses', () => { // Gets all classes and respective
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].creator = Meteor.users.findOne({_id: thisWork[j].creator}).profile.name;
thisWork[j].creator = Meteor.users.findOne({
_id: thisWork[j].creator
}).profile.name;
var conf = thisWork[j].confirmations.length;
var repo = thisWork[j].reports.length;
var ratio = conf / repo;
var normalColor = Session.get("user").preferences.theme["text"];
if (Math.abs(conf - repo)) {
if ((conf+repo) <= 1) {
if ((conf + repo) <= 1) {
thisWork[j].doneRatio = normalColor;
} else {
thisWork[j].doneRatio = "#F9F906";
@ -227,7 +229,7 @@ Template.registerHelper('myClasses', () => { // Gets all classes and respective
Template.registerHelper('pref', (val) => { // Obtains all user preferences.
var preferences = Session.get("user").preferences;
if(val === 'timeHide' || val === 'done' || val == 'hideReport') {
if (val === 'timeHide' || val === 'done' || val == 'hideReport') {
var invert = _.invert(ref);
return invert[preferences[val]];
}
@ -239,17 +241,16 @@ Template.registerHelper('commentLength', () => { // Returns characters left for
});
function startDragula() {
dragula([document.querySelector('#classesMode'), document.querySelector('#nonexistant')],
{
moves: function(el, container, handle) {
// return handle.classList.contains("classInfo") || handle.classList.contains("mainClassName");
return _.intersection(["classInfo", "mainClassName", "mainClassHour", "mainClassTeacher"], handle.classList).length > 0;
}
})
dragula([document.querySelector('#classesMode'), document.querySelector('#nonexistant')], {
moves: function(el, container, handle) {
// return handle.classList.contains("classInfo") || handle.classList.contains("mainClassName");
return _.intersection(["classInfo", "mainClassName", "mainClassHour", "mainClassTeacher"], handle.classList).length > 0;
}
})
.on('out', function(el) {
var els = document.getElementsByClassName("classWrapper");
var final = [];
for(var i = 0; i < els.length; i++) {
for (var i = 0; i < els.length; i++) {
var classid = els[i].getElementsByClassName("creWork")[0].getAttribute("classid");
final.push(classid);
}
@ -262,7 +263,7 @@ Template.main.helpers({
themeName() {
var vals = _.values(themeColors);
var curtheme = Session.get("user").preferences.theme;
for(var i = 0; i < vals.length; i++) {
for (var i = 0; i < vals.length; i++) {
if (_.isEqual(vals[i], curtheme)) {
var name = _.keys(themeColors)[i];
return name.charAt(0).toUpperCase() + name.slice(1);
@ -271,13 +272,13 @@ Template.main.helpers({
return "Custom";
},
schoolName() { // Finds the name of the user's school.
if(Session.get("user").school === undefined || Session.get("user").school === null) return;
if (Session.get("user").school === undefined || Session.get("user").school === null) return;
return " - " + Session.get("user").school;
},
iconColor(icon) { // Sidebar status color
if (Session.equals("sidebar",icon + "Container")) {
if (Session.equals("sidebar", icon + "Container")) {
return Session.get("user").preferences.theme.statusIcons;
} else if (Session.equals("sidebar","both")) {
} else if (Session.equals("sidebar", "both")) {
return Session.get("user").preferences.theme.statusIcons;
} else {
return;
@ -290,12 +291,12 @@ Template.main.helpers({
return Session.get("user").name;
},
defaultMode() { //Loads the default display mode for user.
if(load) Session.set("mode",Session.get("user").preferences.mode);
if (load) Session.set("mode", Session.get("user").preferences.mode);
load = false;
return;
},
bgSrc() { // Returns background.
return "Backgrounds/"+ Session.get("user").preferences.theme.background;
return "Backgrounds/" + Session.get("user").preferences.theme.background;
},
menuStatus() { // Status of of menu sidebar.
if (Session.equals("sidebar", "menuContainer")) {
@ -320,11 +321,11 @@ Template.main.helpers({
return openValues.requests;
},
modeStatus(status) { // Color status of display modes.
if (!Session.equals("mode",status)) return;
if (!Session.equals("mode", status)) return;
return Session.get("user").preferences.theme.modeHighlight;
},
currMode(name) { // Status of display mode.
return Session.equals("mode",name);
return Session.equals("mode", name);
},
calendarOptions() { // Settings for the calendar, including work displaying.
return {
@ -383,10 +384,10 @@ Template.main.helpers({
Session.set("currentWorkId", event.id);
openDivFade(document.getElementsByClassName("overlay")[0]);
},
eventMouseover: function (event, jsEvent, view) {
eventMouseover: function(event, jsEvent, view) {
this.style.boxShadow = "inset 0 0 0 99999px rgba(255,255,255,0.2)";
},
eventMouseout: function (event, jsEvent, view) {
eventMouseout: function(event, jsEvent, view) {
this.style.boxShadow = "";
},
dayClick: function(date, jsEvent, view) { // On-click for each day.
@ -414,28 +415,30 @@ Template.main.helpers({
highlight() { // Calendar highlight/scale option.
var hoverHighlight = Session.get("classDispHover");
var typeHighlight = Session.get("typeFilterHover");
if(Session.equals("mode","classes")) {
$(".workCard").toggleClass("scaled",false);
if (Session.equals("mode", "classes")) {
$(".workCard").toggleClass("scaled", false);
try {
$(".workCard[classid=\'"+hoverHighlight+"\']").toggleClass("scaled",true);
$(".workCard[type=\'"+typeHighlight+"\']").toggleClass("scaled",true);
} catch(err) {}
$(".workCard[classid=\'" + hoverHighlight + "\']").toggleClass("scaled", true);
$(".workCard[type=\'" + typeHighlight + "\']").toggleClass("scaled", true);
} catch (err) {}
} else {
$(".workevent").toggleClass("scaled",false);
$(".workevent").toggleClass("scaled", false);
try {
$("."+hoverHighlight).toggleClass("scaled",true);
$("."+typeHighlight).toggleClass("scaled",true);
} catch(err) {}
$("." + hoverHighlight).toggleClass("scaled", true);
$("." + typeHighlight).toggleClass("scaled", true);
} catch (err) {}
}
return;
},
work(value) { // Returns the specified work value.
if (Session.equals("currentWorkId", null)) return;
if (Session.get("newWork")) {
return defaultWork[value];
return defaultWork[value];
} else {
var thisWork = work.findOne({_id: Session.get("currentWorkId")});
return formReadable(thisWork,value);
var thisWork = work.findOne({
_id: Session.get("currentWorkId")
});
return formReadable(thisWork, value);
}
},
newWork() { // If user is creating a new work.
@ -444,8 +447,8 @@ Template.main.helpers({
types() {
var types = Object.keys(workColors);
var array = [];
for(var i = 0; i < types.length; i++) {
array.push({
for (var i = 0; i < types.length; i++) {
array.push({
"type": types[i],
"typeName": types[i][0].toUpperCase() + types[i].slice(1),
"selected": _.contains(Session.get("typeFilter"), types[i])
@ -538,8 +541,8 @@ Template.main.events({
}
}
if(!document.getElementById("userDropdown").contains(event.target)) closeDivFade(document.getElementById("userDropdown"));
if(!document.getElementById("requests").contains(event.target)) Session.set("requests",false);
if (!document.getElementById("userDropdown").contains(event.target)) closeDivFade(document.getElementById("userDropdown"));
if (!document.getElementById("requests").contains(event.target)) Session.set("requests", false);
},
// MAIN MENU BUTTONS
'click .fa-bars' () { // Click menu button.
@ -567,7 +570,7 @@ Template.main.events({
}
},
'click #requests .fa-question' () {
Session.set("requests",!Session.get("requests"));
Session.set("requests", !Session.get("requests"));
},
'click .classes' () { // Click classes mode button.
if (Session.equals("mode", "classes")) return;
@ -600,11 +603,11 @@ Template.main.events({
attr = event.target.getAttribute("classid");
}
Session.set("newWork", true);
Session.set("currentWorkId",attr);
Session.set("currentWorkId", attr);
openDivFade(document.getElementsByClassName("overlay")[0]);
},
'click #dropdown' (event) {
if(document.getElementById("userDropdown").style.display === "block") return;
if (document.getElementById("userDropdown").style.display === "block") return;
setTimeout(function() {
openDivFade(document.getElementById("userDropdown"));
}, 300);
@ -615,7 +618,7 @@ Template.main.events({
workid = event.target.getAttribute("workid");
Session.set("newWork", false);
Session.set("currentWorkId",workid);
Session.set("currentWorkId", workid);
var thisWork = work.findOne({
_id: workid
});
@ -635,7 +638,7 @@ Template.main.events({
},
'click #requestSubmit' () {
var area = document.getElementById("requestArea");
if(area.value === "") return;
if (area.value === "") return;
var array = {};
array.content = area.value;
array.info = {
@ -643,13 +646,13 @@ Template.main.events({
"userInfo": Meteor.user(),
"userClasses": Session.get("calendarClasses")
};
Meteor.call("createRequest", array, function(err,result) {
Meteor.call("createRequest", array, function(err, result) {
area.value = "Request sent!";
setTimeout(function(){
setTimeout(function() {
document.getElementById("requests").style.marginBottom = "-15.5vw";
area.value = "";
Session.set("commentRestrict",null);
},750);
Session.set("commentRestrict", null);
}, 750);
});
},
// HANDLING INPUT CHANGING
@ -710,8 +713,8 @@ Template.main.events({
if (restrict !== null) {
input.maxLength = restrict;
input.className += " restrict";
Session.set("commentRestrict",restrict-input.value.length.toString() + " characters left");
var text = document.getElementById(Session.get("modifying")+"restrict");
Session.set("commentRestrict", restrict - input.value.length.toString() + " characters left");
var text = document.getElementById(Session.get("modifying") + "restrict");
text.style.display = "initial";
text.style.color = "#7E7E7E";
}
@ -725,10 +728,10 @@ Template.main.events({
_id: thisWork["class"]
});
if (!(Meteor.userId() === thisWork.creator ||
Roles.userIsInRole(Meteor.userId(), ['superadmin', 'admin']) ||
currClass.moderators.indexOf(Meteor.userId()) !== -1 ||
currClass.banned.indexOf(Meteor.userId()) !== -1
)) return;
Roles.userIsInRole(Meteor.userId(), ['superadmin', 'admin']) ||
currClass.moderators.indexOf(Meteor.userId()) !== -1 ||
currClass.banned.indexOf(Meteor.userId()) !== -1
)) return;
}
var op = event.target;
@ -772,7 +775,7 @@ Template.main.events({
},
'click #workComment' (event) {
var restrict = event.target.maxLength;
Session.set("commentRestrict",restrict-event.target.value.length.toString() + " characters left");
Session.set("commentRestrict", restrict - event.target.value.length.toString() + " characters left");
var text = document.getElementById("commentrestrict");
text.style.display = "initial";
text.style.color = "#7E7E7E";
@ -785,11 +788,15 @@ Template.main.events({
var works = userClasses[i].thisClassWork;
for (var j = 0; j < works.length; j++) {
var work = works[j];
var workclass = classes.findOne({_id: work.class});
var workclass = classes.findOne({
_id: work.class
});
if (work.description == defaultWork.description) work.description = "";
if (work.dueDate == defaultWork.dueDate) continue;
if (work.name == defaultWork.name) work.name = "";
if (workclass === undefined) workclass = {name: "Personal"};
if (workclass === undefined) workclass = {
name: "Personal"
};
events.push([
workclass.name + ": " + work.name,
work.realDate.toLocaleDateString(),
@ -800,8 +807,13 @@ Template.main.events({
}
var JSONevents = JSON.stringify(events);
var CSVevents = Papa.unparse({fields: ["Subject", "Start Date", "Description", "All Day Event"], data: JSONevents});
var eventBlob = new Blob([CSVevents], {type: "data:text/csv;charset=utf-8"});
var CSVevents = Papa.unparse({
fields: ["Subject", "Start Date", "Description", "All Day Event"],
data: JSONevents
});
var eventBlob = new Blob([CSVevents], {
type: "data:text/csv;charset=utf-8"
});
saveAs(eventBlob, "hourglass.csv");
},
'keydown input' (event) { // Enter to close input.
@ -816,12 +828,12 @@ Template.main.events({
var restrict = event.target.maxLength;
var chars = restrict - event.target.value.length;
var text;
if(event.target.id === "workComment") {
if (event.target.id === "workComment") {
text = document.getElementById("commentrestrict");
} else if(event.target.id === "requestArea") {
} else if (event.target.id === "requestArea") {
text = document.getElementById("requestrestrict");
} else {
text = document.getElementById(Session.get("modifying")+"restrict");
text = document.getElementById(Session.get("modifying") + "restrict");
}
text.style.color = "#7E7E7E";
if (chars === restrict) { // Don't display if nothing in comment.
@ -891,7 +903,7 @@ Template.main.events({
var date = calWorkDate.split("-");
date = new Date(date[0], parseInt(date[1]) - 1, date[2], 11, 59, 59);
Session.set("newWork", true);
Session.get("currentWorkId",classid);
Session.get("currentWorkId", classid);
openDivFade(document.getElementsByClassName("overlay")[0]);
} else { // Normal clicking turns on filter.
var array = Session.get("classDisp");
@ -946,14 +958,14 @@ Template.main.events({
}
while (div.getAttribute("type") === null) div = div.parentNode;
var type = div.getAttribute("type");
Session.set("typeFilterHover", type);
Session.set("typeFilterHover", type);
},
'mouseleave .sideFilter' (event) {
if (event.target.className !== "sideFilter") {
var div = event.target.parentNode;
if (div.contains(event.target)) return;
}
Session.set("typeFilterHover", null);
Session.set("typeFilterHover", null);
}
});
@ -986,10 +998,10 @@ function closeInput(modifyingInput) { // Close a changeable input and change it
color = "#BEBEBE";
}
span.style.color = color;
Session.set("commentRestrict","");
Session.set("commentRestrict", "");
try {
input.parentNode.removeChild(input);
document.getElementById(modifyingInput+"restrict").style.display = "none";
document.getElementById(modifyingInput + "restrict").style.display = "none";
} catch (err) {}
if (input.value === "") { // If input has nothing.
span.childNodes[0].nodeValue = "Click here to edit...";
@ -1069,12 +1081,17 @@ function toDate(date) { // Turns formatted date back to Date constructor.
}
function formReadable(input, val) { // Makes work information readable by users.
switch(val) {
case "typeColor": return input.typeColor = workColors[input.type];
case "name": return input.name;
case "dueDate": return getReadableDate(input.dueDate);
case "description": return input.description;
case "type": return input.type[0].toUpperCase() + input.type.slice(1);
switch (val) {
case "typeColor":
return input.typeColor = workColors[input.type];
case "name":
return input.name;
case "dueDate":
return getReadableDate(input.dueDate);
case "description":
return input.description;
case "type":
return input.type[0].toUpperCase() + input.type.slice(1);
case "comments":
var comments = input.comments;
var resort = [];
@ -1086,7 +1103,7 @@ function formReadable(input, val) { // Makes work information readable by users.
"date": null,
"user": null,
"avatar": null,
"email":null
"email": null
};
var user = Meteor.users.findOne({
_id: comments[k].user
@ -1113,19 +1130,19 @@ function formReadable(input, val) { // Makes work information readable by users.
return input.done;
case "doneCol":
if (Session.get("newWork")) return "";
if (!_.contains(input.done,Meteor.userId())) return "";
if (!_.contains(input.done, Meteor.userId())) return "";
return "#27A127";
case "doneText":
if (Session.get("newWork")) return "";
if (!_.contains(input.done,Meteor.userId())) return "Mark done";
if (!_.contains(input.done, Meteor.userId())) return "Mark done";
return "Done!";
case "userConfirm":
if(!_.contains(input.confirmations, Meteor.userId())) return "";
if (!_.contains(input.confirmations, Meteor.userId())) return "";
return "#27A127";
case "confirmations":
return input.confirmations.length;
case "userReport":
if(!_.contains(input.reports, Meteor.userId())) return "";
if (!_.contains(input.reports, Meteor.userId())) return "";
return "#FF1A1A";
case "reports":
return input.reports.length;