2016-08-11 03:10:32 -04:00

393 lines
12 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { Template } from 'meteor/templating';
Session.set("profInputOpen",null);
Session.set("profClassTab","manClass");
Session.set("modifying",null);
Session.set("radioDiv",null);
Session.set("notsearching",true);
Session.set("confirm",null);
Session.set("serverData",null);
Session.set("autocompleteDivs", null);
Session.set("confirmText",null);
var themeColors = {
"light": {
"header":"#EBEBEB",
"sidebar":"#65839A",
"statusIcons":"#33ADFF",
"highlightText":"#FF1A1A",
"cards":"#FEFEFE"
},
"dark": {
}
};
Template.profile.helpers({
classsettings: function() {
return {
position: "bottom",
limit: 10,
rules: [{
token: '',
collection: classes,
field: "name",
template: Template.classDisplay,
filter: {status: true}
}]
};
},
schoolcomplete() {
return {
position: "bottom",
limit: 6,
rules: [{
token: '',
collection: schools,
field: 'name',
matchAll: true,
template: Template.schoollist
}]
};
},
teachercomplete() {
return {
position: "bottom",
limit: 1,
rules: [{
token: '',
collection: classes,
field: 'teacher',
template: Template.teacherlist
}]
};
},
mainCenter() {
var width = window.innerWidth * 1600/1920 + 10;
return "width:"+width.toString()+"px;margin-left:"+-.5*width.toString()+"px";
},
mainHeight() {
return window.innerHeight.toString()+"px";
},
banner() {
var width = window.innerWidth * 1600/1920;
var height = width * 615/1600;
if(Meteor.user().profile.banner !== undefined) {
var banner = Meteor.user().profile.banner;
} else {
var banner = "defaultcover.jpg";
}
return "width:"+width.toString()+"px;height:"+height.toString()+"px;background-image:url(\'"+banner+"\');background-size:"+width.toString()+"px "+height.toString()+"px";
},
avatar() {
var dim = window.innerWidth * 1600/1920 * .16;
if(Meteor.user().profile.avatar !== undefined) {
var pic = Meteor.users().profile.avatar;
} else {
var pic = "defaultAvatars/"+(Math.floor(Math.random() * (10 - 1)) + 1).toString()+".png";
}
return "background-image:url("+pic+");background-size:"+dim.toString()+"px "+dim.toString()+"px";
},
avatarDim() {
var dim = window.innerWidth * 1600/1920 * .16;
return "height:"+dim.toString()+"px;width:"+dim.toString()+"px;top:"+.43*window.innerHeight.toString()+"px";
},
username() {
return Meteor.user().profile.name;
},
motd() {
if(Meteor.user().profile.description !== undefined) {
return Meteor.user().profile.description;
} else {
return "Say something about yourself!";
}
},
school() {
if(Meteor.user().profile.school !== undefined) {
return Meteor.user().profile.school;
} else {
return "Click here to edit...";
}
},
grade() {
if(Meteor.user().profile.grade !== undefined) {
return Meteor.user().profile.grade;
} else {
return "Click here to edit...";
}
},
classes() {
return classes.find( { status: { $eq: true }, privacy: { $eq: false }}, {sort: { subscribers: -1 }}, {limit: 20}).fetch();
},
profClassHeight() {
return .6*window.innerHeight.toString()+"px";
},
classHolderHeight() {
return .26*window.innerHeight.toString()+"px";
},
profClassTabColor(status) {
        if(status === Session.get("profClassTab")) {
            return themeColors[Cookie.get("theme")].highlightText;
        } else {
            return;
        }
    },
profClassTab(tab) {
if(tab === Session.get("profClassTab")) {
return true;
} else {
return false;
}
},
notsearching() {
return Session.get("notsearching");
},
autocompleteClasses() {
return Session.get("autocompleteDivs");
},
myclasses() {
return Meteor.user().profile.classes;
},
confirmText() {
return Session.get("confirmText");
}
})
Template.profile.events({
'click #profile input' (event) {
var opened = Session.get("profradioDiv");
if(opened !== null && opened !== event.target.getAttribute("op")) {
closeDivFade(document.getElementsByClassName("creInputSel")[opened].parentNode.childNodes[4]);
}d
},
'click .profInputSel' (event) {
Session.set("profradioDiv", event.target.getAttribute("op"));
openDivFade(event.target.parentNode.childNodes[4]);
},
'click profOptions p' (event) {
var p = event.target;
p.parentNode.parentNode.childNodes[1].value = p.childNodes[0].nodeValue;
closeDivFade(p.parentNode);
Session.set("radioDiv",null);
},
'click .change' (event) {
var ele = event.target;
var sessval = Session.get("modifying");
if(ele.id !== sessval && sessval != null) closeInput(sessval);
Session.set("modifying", ele.id);
var dim = ele.getBoundingClientRect();
ele.style.display = "none";
var input = document.createElement("input");
if(ele.getAttribute("type") !== null) {
input.type = ele.getAttribute("type");
} else {
input.type = "text";
}
input.value = ele.childNodes[0].nodeValue;
input.className = "changeInput";
input.style.height = .9*dim.height.toString()+"px";
input.style.width = "70%";
input.style.padding = "0.1%";
input.id = ele.id+"a";
ele.parentNode.appendChild(input);
if(ele.getAttribute("re") == "readonly") {
input.readOnly = true;
input.style.cursor = "pointer";
} else {
input.select();
}
input.focus();
if(ele.getAttribute("restrict") !== null) {
var span = document.createElement("span");
span.id = "restrict";
var num = parseInt(ele.getAttribute("restrict"))-input.value.length;
if(num <= 0) {
span.style.setProperty("color","#FF1A1A","important");
num = 0;
}
span.appendChild(document.createTextNode(num.toString()+" characters left"));
ele.parentNode.appendChild(span);
}
},
'click' (event) {
var sessval = Session.get("modifying");
if(event.target.id !== sessval &&
event.target.id !== sessval+"a" &&
!Session.equals("modifying",null) &&
!event.target.parentNode.className.includes("profOptions")) {
closeInput(sessval);
}
if(!event.target.className.includes("radio") &&
!Session.equals("radioDiv",null) &&
!event.target.parentNode.className.includes("profOptions")) {
closeDivFade(document.getElementsByClassName("profOptions")[Session.get("radioDiv")]);
}
},
'keydown' (event) {
var sessval = Session.get("modifying");
if(event.keyCode == 13) {
try {
closeInput(sessval);
} catch(err) {}
}
var restrict = document.getElementById(sessval).getAttribute("restrict");
if(restrict !== null) {
var num = parseInt(restrict)-event.target.value.length;
var restext = document.getElementById("restrict");
if(num === 1) {
restext.childNodes[0].nodeValue = num.toString()+" character left";
restext.style.setProperty("color","#999","important");
} else if(num <= 0) {
var input = document.getElementById(sessval+"a");
input.value = input.value.substring(0,parseInt(restrict));
restext.childNodes[0].nodeValue = "0 characters left";
restext.style.setProperty("color","#FF1A1A","important");
} else {
restext.childNodes[0].nodeValue = num.toString()+" characters left";
restext.style.setProperty("color","#999","important");
}
}
},
'click .radio' (event) {
Session.set("radioDiv", event.target.getAttribute("op"));
openDivFade(event.target.parentNode.parentNode.childNodes[3]);
},
'click .profOptions p' (event) {
var sessval = Session.get("modifying");
var p = event.target;
var input = p.parentNode.parentNode.childNodes[1].childNodes[5];
input.value = p.childNodes[0].nodeValue;
closeInput(sessval);
closeDivFade(p.parentNode);
input.focus();
Session.set("radioDiv",null)
},
'click .addClass' () {
        var functionHolder = document.getElementById("profClassInfoHolder")
        closeDivFade(functionHolder);
        setTimeout(function() {
            Session.set("profClassTab","addClass");
            openDivFade(functionHolder);
        },300);
    },
    'click .manageClass' () {
        var functionHolder = document.getElementById("profClassInfoHolder")
        closeDivFade(functionHolder);
        setTimeout(function() {
            Session.set("profClassTab","manClass");
            openDivFade(functionHolder);
        },300);
    },
    'click .createClass' () {
        var functionHolder = document.getElementById("profClassInfoHolder")
        closeDivFade(functionHolder);
        setTimeout(function() {
            Session.set("profClassTab","creClass");
            openDivFade(functionHolder);
        },300);
    },
'click .fa-search' () {
Session.set("searching",true);
},
'click .fa-times-thin' () {
Session.set("searching",false);
},
'keydown #profClassSearch' (event) {
if(event.target.value === "") {
Session.set("notsearching",true);
} else {
Session.set("notsearching",false);
}
divs = [];
try {
var items = document.getElementsByClassName("-autocomplete-container")[0].childNodes[3].childNodes;
for(var i = 2; i < items.length; i+=3) {
var item = items[i].childNodes[3];
divs.push({
name: item.childNodes[1].childNodes[0].nodeValue,
teacher: item.childNodes[3].childNodes[0].nodeValue,
hour: item.childNodes[5].childNodes[0].nodeValue,
subscribers: item.childNodes[7].childNodes[0].nodeValue,
_id:item.getAttribute("classid")
});
Session.set("autocompleteDivs", divs);
}
} catch(err) {}
},
'click .classBox' (event) {
if(event.target.getAttribute("classid") === null) return;
openDivFade(document.getElementsByClassName("overlay")[0]);
setTimeout(function() {
document.getElementsByClassName("overlay")[0].style.opacity = "1";
}, 200);
Session.set("serverData",[event.target.getAttribute("classid"),""]);
Session.set("confirm","joinClass");
Session.set("confirmText","Join class?");
},
'click .fa-check-circle-o' () {
sendData(Session.get("confirm"));
closeDivFade(document.getElementsByClassName("overlay")[0]);
Session.set("serverData",null);
Session.set("confirm",null);
},
'click .fa-times-circle-o' () {
closeDivFade(document.getElementsByClassName("overlay")[0]);
closeDivFade(document.getElementById("functionHolder"));
Session.set("serverData",null);
Session.set("confirm",null);
},
'click #save' () {
openDivFade(document.getElementsByClassName("overlay")[0]);
setTimeout(function() {
document.getElementsByClassName("overlay")[0].style.opacity = "1";
}, 200);
getProfileData();
Session.set("serverData",getProfileData());
Session.set("confirm","editProfile");
Session.set("confirmText", "Save new profile settings?");
}
})
function openDivFade(div) {
div.style.display = "block";
div.style.opacity = "0";
setTimeout(function() {
div.style.opacity = "1";
}, 100);
}
function closeDivFade(div) {
div.style.opacity = "0";
setTimeout(function() {
div.style.display = "none";
}, 100);
}
function closeInput(sessval) {
var input = document.getElementById(sessval+"a");
var span = document.getElementById(sessval);
input.parentNode.removeChild(input);
try{
var restrict = document.getElementById("restrict");
restrict.parentNode.removeChild(restrict)
} catch(err) {}
if(input.value == "") {
span.childNodes[0].nodeValue = "Click here to edit...";
} else {
span.childNodes[0].nodeValue = input.value;
}
span.style.display = "initial";
Session.set("modifying",null);
}
function sendData(funcName) {
Meteor.call(funcName,Session.get("serverData"));
}
function getProfileData() {
var desc = document.getElementById("motd").childNodes[0].nodeValue;
var school = document.getElementById("school").childNodes[0].nodeValue;
var grade = document.getElementById("grade").childNodes[0].nodeValue;
}