2016-08-12 12:28:55 -04:00
import {
Template
} from 'meteor/templating' ;
2016-08-09 01:33:14 -04:00
import './main.html' ;
2016-08-27 01:08:33 -04:00
var load = true ;
2016-08-09 01:33:14 -04:00
var openValues = {
2016-08-12 12:28:55 -04:00
"menu" : "-25%" ,
"options" : "-20%"
2016-08-09 01:33:14 -04:00
} ;
2016-08-29 00:24:01 -04:00
//Sets colors for different assignment statuses
2016-08-12 23:10:27 -04:00
var workColors = {
2016-08-18 23:59:38 -04:00
"normal" : "#2E4F74" ,
"quiz" : "#409333" ,
2016-08-13 23:46:32 -04:00
"test" : "#AD3C44" ,
"project" : "#E6E619" ,
"other" : "#852E6D"
2016-08-12 12:28:55 -04:00
} ;
2016-08-12 12:50:37 -04:00
2016-08-29 00:24:01 -04:00
// Sets defaults for new users
2016-08-22 23:44:48 -04:00
var defaults = {
"theme" : "light" ,
2016-08-27 00:54:12 -04:00
"mode" : "classes" ,
2016-08-28 20:09:16 -04:00
"timeHide" : 1 ,
"done" : true
2016-08-27 00:54:12 -04:00
} ;
2016-08-29 00:24:01 -04:00
//Creates variables for due dates
2016-08-27 00:54:12 -04:00
var ref = {
2016-08-27 18:53:47 -04:00
"1 Day" : 1 ,
"2 Days" : 2 ,
"1 Week" : 7 ,
"1 Month" : 30 ,
2016-08-28 20:09:16 -04:00
"Never" : 0 ,
2016-08-28 18:41:35 -04:00
"Yes" : true ,
"No" : false
2016-08-28 20:09:16 -04:00
} ;
2016-08-28 18:41:35 -04:00
2016-08-20 23:37:04 -04:00
// Reactive variables.
2016-08-29 21:02:02 -04:00
Session . set ( "calendarclasses" , null ) ; //
2016-08-12 12:28:55 -04:00
Session . set ( "sidebar" , null ) ;
2016-08-12 23:10:27 -04:00
Session . set ( "newWork" , null ) ;
Session . set ( "currentWork" , null ) ;
2016-08-13 20:22:54 -04:00
Session . set ( "currentReadableWork" , null ) ;
2016-08-12 23:10:27 -04:00
Session . set ( "modifying" , null ) ;
2016-08-17 22:33:01 -04:00
Session . set ( "noclass" , null ) ;
2016-08-26 01:02:28 -04:00
Session . set ( "calCreWork" , null ) ;
2016-08-20 15:58:31 -04:00
Session . set ( "calWorkDate" , null ) ;
2016-08-25 23:31:34 -04:00
Session . set ( "classDisp" , [ ] ) ;
Session . set ( "classDispHover" , null ) ;
2016-08-27 21:38:42 -04:00
Session . set ( "commentRestrict" , null ) ;
2016-08-09 01:33:14 -04:00
2016-08-29 21:02:02 -04:00
Template . registerHelper ( 'divColor' , ( div ) => { // Reactive color changing based on preferences. Colors stored in themeColors.
2016-08-29 20:39:36 -04:00
return themeColors [ Meteor . user ( ) . profile . preferences . theme ] [ div ] ;
2016-08-22 23:44:48 -04:00
} ) ;
2016-08-28 23:25:43 -04:00
Template . registerHelper ( 'textColor' , ( ) => { // Reactive color for text.
2016-08-29 20:39:36 -04:00
document . getElementsByTagName ( "body" ) [ 0 ] . style . color = themeColors [ Meteor . user ( ) . profile . preferences . theme ] . text ;
2016-08-28 23:25:43 -04:00
return ;
2016-08-12 12:28:55 -04:00
} ) ;
2016-08-09 17:07:11 -04:00
2016-08-28 23:25:43 -04:00
Template . registerHelper ( 'overlayDim' , ( part ) => { // Gets size of the overlay container.
2016-08-27 18:53:47 -04:00
var dim = [ window . innerWidth * 0.25 , window . innerHeight * 0.2 ] ;
2016-08-12 12:28:55 -04:00
var width = "width:" + dim [ 0 ] . toString ( ) + "px;" ;
var height = "height:" + dim [ 1 ] . toString ( ) + "px;" ;
var margin = "margin-left:" + ( - dim [ 0 ] / 2 ) . toString ( ) + "px;" ;
2016-08-29 20:39:36 -04:00
var bg = "background-color:" + themeColors [ Meteor . user ( ) . profile . preferences . theme ] . header + ";" ;
2016-08-12 12:28:55 -04:00
return width + height + margin + bg ;
} ) ;
2016-08-10 21:56:12 -04:00
2016-08-29 21:02:02 -04:00
Template . registerHelper ( 'myClasses' , ( ) => {
2016-08-18 23:59:38 -04:00
if ( Meteor . user ( ) . profile . classes === undefined || Meteor . user ( ) . profile . classes . length === 0 ) {
2016-08-18 17:35:40 -04:00
Session . set ( "noclass" , true ) ;
2016-08-18 23:59:38 -04:00
return [ ] ;
2016-08-14 07:52:27 -04:00
} else {
2016-08-18 23:59:38 -04:00
var array = [ ] ;
var courses = Meteor . user ( ) . profile . classes ;
2016-08-26 01:02:28 -04:00
var classDisp = Session . get ( "classDisp" ) ;
2016-08-28 20:09:16 -04:00
var hide = Meteor . user ( ) . profile . preferences . timeHide ;
2016-08-18 23:59:38 -04:00
for ( var i = 0 ; i < courses . length ; i ++ ) {
found = classes . findOne ( { _id : courses [ i ] } ) ;
2016-08-27 18:53:47 -04:00
found . subscribers = found . subscribers . length ;
2016-08-21 22:50:23 -04:00
found . mine = true ;
2016-08-23 22:09:07 -04:00
if ( found . admin === Meteor . userId ( ) ) {
found . box = " owned" ;
found . mine = false ;
}
2016-08-26 01:02:28 -04:00
if ( classDisp . indexOf ( courses [ i ] ) !== - 1 ) found . selected = true ;
2016-08-18 23:59:38 -04:00
array . push ( found ) ;
2016-08-13 18:58:54 -04:00
2016-08-18 23:59:38 -04:00
var thisWork = work . find ( { class : courses [ i ] } ) . fetch ( ) ;
2016-08-26 01:02:28 -04:00
if ( classDisp . length !== 0 && classDisp . indexOf ( found . _id ) === - 1 ) {
array [ i ] . thisClassWork = [ ] ;
continue ;
}
2016-08-27 00:54:12 -04:00
for ( var j = 0 ; j < thisWork . length ; j ++ ) {
2016-08-26 23:50:46 -04:00
if ( hide !== 0 ) {
2016-08-27 00:54:12 -04:00
var due = ( moment ( thisWork [ j ] . dueDate ) ) [ "_d" ] ;
var today = ( moment ( ) . subtract ( hide , 'days' ) ) [ "_d" ] ;
if ( today > due ) {
thisWork [ j ] = "no" ;
j = 0 ;
2016-08-26 23:50:46 -04:00
}
}
2016-08-28 20:09:16 -04:00
if ( thisWork [ j ] !== "no" && Meteor . user ( ) . profile . preferences . done ) {
2016-08-28 18:41:35 -04:00
if ( thisWork [ j ] . done . indexOf ( Meteor . userId ( ) ) !== - 1 ) {
thisWork [ j ] = "no" ;
j = 0 ;
}
2016-08-27 01:11:37 -04:00
}
2016-08-27 00:54:12 -04:00
}
while ( thisWork . indexOf ( "no" ) !== - 1 ) thisWork . splice ( thisWork . indexOf ( "no" ) , 1 ) ;
2016-08-29 21:02:02 -04:00
for ( var j = 0 ; j < thisWork . length ; j ++ ) {
2016-08-18 23:59:38 -04:00
thisWork [ j ] . dueDate = moment ( thisWork [ j ] . dueDate ) . calendar ( null , {
2016-08-18 18:11:45 -04:00
sameDay : '[Today]' ,
nextDay : '[Tomorrow]' ,
nextWeek : 'dddd' ,
lastDay : '[Yesterday]' ,
lastWeek : '[Last] dddd' ,
sameElse : 'MMMM Do'
} ) ;
2016-08-28 18:41:35 -04:00
2016-08-27 18:53:47 -04:00
if ( thisWork [ j ] . dueDate === "Today" ) {
thisWork [ j ] . cardDate = "600" ;
} else if ( thisWork [ j ] . dueDate === "Tomorrow" ) {
thisWork [ j ] . cardDate = "400" ;
}
2016-08-18 23:59:38 -04:00
thisWork [ j ] . typeColor = workColors [ thisWork [ j ] . type ] ;
2016-08-28 18:41:35 -04:00
2016-08-25 23:31:34 -04:00
var hoverHighlight = Session . get ( "classDispHover" ) ;
if ( hoverHighlight !== null && hoverHighlight === found . _id ) {
thisWork [ j ] . scale = "-ms-transform: scale(1.12)-webkit-transform: scale(1.12);transform: scale(1.12)" ;
} else {
thisWork [ j ] . scale = "" ;
}
2016-08-18 23:59:38 -04:00
}
array [ i ] . thisClassWork = thisWork ;
}
2016-08-17 22:33:01 -04:00
Session . set ( "noclass" , false ) ;
2016-08-18 20:27:18 -04:00
Session . set ( "calendarclasses" , Meteor . user ( ) . profile . classes ) ;
2016-08-18 23:59:38 -04:00
return array ;
}
2016-08-14 07:52:27 -04:00
} ) ;
2016-08-12 18:32:37 -04:00
2016-08-28 14:36:26 -04:00
Template . registerHelper ( 'pref' , ( val ) => {
if ( Object . keys ( Meteor . user ( ) . profile . preferences ) . length !== Object . keys ( defaults ) . length ) {
var array = Meteor . user ( ) . profile ;
array . preferences = defaults ;
2016-08-29 21:02:02 -04:00
serverData = array ;
2016-08-28 14:36:26 -04:00
sendData ( "editProfile" ) ;
2016-08-28 18:41:35 -04:00
if ( val === 'timeHide' || val === 'done' ) return defaults [ val ] ;
2016-08-28 14:36:26 -04:00
return defaults [ val ] . charAt ( 0 ) . toUpperCase ( ) + defaults [ val ] . slice ( 1 ) ;
} else {
var preferences = Meteor . user ( ) . profile . preferences ;
2016-08-28 20:09:16 -04:00
if ( val === 'timeHide' || val === 'done' ) {
var invert = _ . invert ( ref ) ;
return invert [ preferences [ val ] ] ;
}
2016-08-28 14:36:26 -04:00
return preferences [ val ] . charAt ( 0 ) . toUpperCase ( ) + preferences [ val ] . slice ( 1 ) ;
}
} ) ;
2016-08-09 01:33:14 -04:00
Template . main . helpers ( {
2016-08-29 00:24:01 -04:00
schoolName ( ) { // Finds the name of the user's school
2016-08-12 12:28:55 -04:00
return " - " + Meteor . user ( ) . profile . school ;
} ,
2016-08-29 00:24:01 -04:00
iconColor ( icon ) { //Sets the color of the user's icon
2016-08-12 12:28:55 -04:00
if ( Session . get ( "sidebar" ) === icon + "Container" ) {
2016-08-29 20:39:36 -04:00
return themeColors [ Meteor . user ( ) . profile . preferences . theme ] . statusIcons ;
2016-08-12 12:28:55 -04:00
} else if ( Session . get ( "sidebar" ) === "both" ) {
2016-08-29 20:39:36 -04:00
return themeColors [ Meteor . user ( ) . profile . preferences . theme ] . statusIcons ;
2016-08-12 12:28:55 -04:00
} else {
return ;
}
} ,
2016-08-29 00:24:01 -04:00
defaultMode ( ) { //Loads the defaults for a new/uncustomized user
2016-08-27 01:08:33 -04:00
if ( load ) {
Session . set ( "mode" , Meteor . user ( ) . profile . preferences . mode ) ;
2016-08-29 21:02:02 -04:00
load = false ;
2016-08-27 01:08:33 -04:00
}
2016-08-23 00:11:57 -04:00
return ;
} ,
2016-08-29 00:24:01 -04:00
bgSrc ( ) { // Adjusts for different, larger screen sizes
2016-08-12 12:28:55 -04:00
var dim = [ window . innerWidth , window . innerHeight ] ;
2016-08-29 20:39:36 -04:00
var pic = "Backgrounds/" + themeColors [ Meteor . user ( ) . profile . preferences . theme ] . background ;
2016-08-12 12:28:55 -04:00
return pic ;
} ,
2016-08-29 00:24:01 -04:00
menuStatus ( ) {
2016-08-12 12:28:55 -04:00
if ( Session . get ( "sidebar" ) === "menuContainer" ) {
return "0%" ;
} else if ( Session . get ( "sidebar" ) === "both" ) {
return "0%" ;
} else {
return openValues . menu ;
}
} ,
optionsStatus ( ) {
if ( Session . get ( "sidebar" ) === "optionsContainer" ) {
return "0%" ;
} else if ( Session . get ( "sidebar" ) === "both" ) {
return "0%" ;
} else {
return openValues . options ;
}
} ,
modeStatus ( status ) {
if ( status === Session . get ( "mode" ) ) {
2016-08-29 20:39:36 -04:00
return themeColors [ Meteor . user ( ) . profile . preferences . theme ] . highlightText ;
2016-08-12 12:28:55 -04:00
} else {
return ;
}
} ,
currMode ( name ) {
2016-08-23 00:11:57 -04:00
var mode = Session . get ( "mode" ) ;
if ( name === mode ) {
2016-08-12 12:28:55 -04:00
return true ;
} else {
return false ;
}
} ,
2016-08-29 00:24:01 -04:00
calendarOptions ( ) { // Sets up and modifies the calendar code
2016-08-12 12:28:55 -04:00
return {
2016-08-18 23:59:38 -04:00
id : "fullcalendar" ,
2016-08-15 20:55:21 -04:00
height : window . innerHeight * 0.8 ,
2016-08-12 12:28:55 -04:00
buttonText : {
today : 'Today' ,
month : 'Month' ,
week : 'Week' ,
day : 'Day'
2016-08-18 20:27:18 -04:00
} ,
2016-08-18 23:59:38 -04:00
events : function ( start , end , timezone , callback ) {
var events = [ ] ;
var cursor = work . find ( { class : { $in : Session . get ( "calendarclasses" ) } } ) ;
2016-08-26 01:02:28 -04:00
var classDisp = Session . get ( "classDisp" ) ;
2016-08-28 20:09:16 -04:00
var hide = Meteor . user ( ) . profile . preferences . timeHide ;
2016-08-18 23:59:38 -04:00
cursor . forEach ( function ( current ) {
2016-08-26 01:02:28 -04:00
var disp = true ;
if ( classDisp . length !== 0 && classDisp . indexOf ( current . class ) === - 1 ) disp = false ;
2016-08-27 00:54:12 -04:00
if ( hide !== 0 ) {
var due = ( moment ( current . dueDate ) ) [ "_d" ] ;
var today = ( moment ( ) . subtract ( hide , 'days' ) ) [ "_d" ] ;
if ( today > due ) {
disp = false ;
2016-08-29 21:02:02 -04:00
}
2016-08-27 00:54:12 -04:00
}
2016-08-28 21:34:24 -04:00
if ( Meteor . user ( ) . profile . preferences . done && current . done . indexOf ( Meteor . userId ( ) ) !== - 1 ) disp = false ;
2016-08-27 00:54:12 -04:00
2016-08-19 22:04:32 -04:00
var inRole = false ;
2016-08-27 18:53:47 -04:00
var currClass = classes . findOne ( { _id : current . class } )
2016-08-29 21:02:02 -04:00
if ( Meteor . userId ( ) === current . creator ||
2016-08-19 22:04:32 -04:00
Roles . userIsInRole ( Meteor . userId ( ) , [ 'superadmin' , 'admin' ] ) ||
2016-08-27 18:53:47 -04:00
currClass . moderators . indexOf ( Meteor . userId ( ) ) !== - 1 ||
currClass . banned . indexOf ( Meteor . userId ( ) ) !== - 1
2016-08-19 22:04:32 -04:00
) inRole = true ;
2016-08-27 18:53:47 -04:00
2016-08-18 23:59:38 -04:00
backgroundColor = workColors [ current . type ] ;
title = current . name ;
duedate = current . dueDate . toISOString ( ) . slice ( 0 , 10 ) ;
2016-08-27 18:53:47 -04:00
2016-08-26 01:02:28 -04:00
if ( disp ) {
events . push ( {
id : current . _id ,
start : duedate ,
title : title ,
backgroundColor : backgroundColor ,
borderColor : "#444" ,
startEditable : inRole ,
className : "workevent " + current . class ,
} ) ;
}
2016-08-18 23:59:38 -04:00
} ) ;
callback ( events ) ;
} ,
2016-08-18 20:27:18 -04:00
eventDrop : function ( event , delta , revertFunc ) {
var current = work . findOne ( { _id : event . id } ) ;
var date = event . start . format ( ) . split ( "-" ) ;
current . dueDate = new Date ( date [ 0 ] , parseInt ( date [ 1 ] ) - 1 , date [ 2 ] , 11 , 59 , 59 ) ;
2016-08-29 21:02:02 -04:00
serverData = current ;
2016-08-18 20:27:18 -04:00
sendData ( "editWork" ) ;
2016-08-18 23:59:38 -04:00
} ,
eventClick : function ( event , jsEvent , view ) {
2016-08-28 21:34:24 -04:00
Session . set ( "newWork" , false ) ;
2016-08-18 23:59:38 -04:00
var thisWork = work . findOne ( { _id : event . id } )
Session . set ( "currentWork" , thisWork ) ;
var thisReadWork = formReadable ( thisWork ) ;
Session . set ( "currentReadableWork" , thisReadWork ) ;
openDivFade ( document . getElementsByClassName ( "overlay" ) [ 0 ] ) ;
2016-08-20 15:58:31 -04:00
} ,
dayClick : function ( date , jsEvent , view ) {
2016-08-29 23:32:14 -04:00
if ( jsEvent . target . className . includes ( "fc-past" ) ) return ;
2016-08-20 15:58:31 -04:00
Session . set ( "calCreWork" , true ) ;
Session . set ( "calWorkDate" , date . format ( ) ) ;
2016-08-29 21:02:02 -04:00
Session . set ( "sidebar" , "menuContainer" ) ;
2016-08-19 22:04:32 -04:00
}
2016-08-12 12:28:55 -04:00
} ;
} ,
2016-08-29 00:24:01 -04:00
calCenter ( ) { // Centers the calendar
2016-08-12 12:28:55 -04:00
var width = window . innerWidth * 0.85 ;
2016-08-23 00:11:57 -04:00
return "width:" + width . toString ( ) + "px;margin-left:" + ( 0.5 * window . innerWidth - 0.5 * width ) . toString ( ) + "px;" ;
} ,
2016-08-29 00:24:01 -04:00
calColor ( ) { // Sets the color of the calendar according to theme
2016-08-29 20:39:36 -04:00
return "color:" + themeColors [ Meteor . user ( ) . profile . preferences . theme ] . calendar ;
2016-08-12 12:28:55 -04:00
} ,
2016-08-29 00:24:01 -04:00
calbg ( ) { //Sets size of the calendar
2016-08-12 12:28:55 -04:00
var width = window . innerWidth * 0.865 ;
var height = window . innerHeight * 0.76 ;
return "width:" + width . toString ( ) + "px;height:" + height . toString ( ) + "px;margin-left:" + ( 0.5 * window . innerWidth - 0.5 * width ) . toString ( ) + "px;margin-top:" + ( 0.47 * window . innerHeight - 0.5 * height ) . toString ( ) + "px" ;
2016-08-12 23:10:27 -04:00
} ,
2016-08-20 15:58:31 -04:00
calCreWork ( ) {
if ( Session . get ( "calCreWork" ) ) {
2016-08-20 23:37:04 -04:00
var div = document . getElementById ( "calCreWork" ) ;
div . style . setProperty ( "display" , "inline-block" , "important" ) ;
div . style . setProperty ( "opacity" , "0" , "important" ) ;
setTimeout ( function ( ) {
div . style . setProperty ( "opacity" , "1" , "important" ) ;
} , 100 ) ;
return ;
2016-08-20 15:58:31 -04:00
} else {
2016-08-20 23:37:04 -04:00
try {
closeDivFade ( document . getElementById ( "calCreWork" ) ) ;
} catch ( err ) { }
return ;
2016-08-20 15:58:31 -04:00
}
} ,
2016-08-29 00:24:01 -04:00
highlight ( ) { // Lets someone highlight a section of the calendar
2016-08-25 23:31:34 -04:00
var hoverHighlight = Session . get ( "classDispHover" ) ;
var works = document . getElementsByClassName ( "workevent" ) ;
2016-08-27 18:53:47 -04:00
var work = $ ( '.workevent' ) ;
if ( hoverHighlight === null ) {
work . css ( '-webkit-transform' , '' ) ;
work . css ( '-ms-transform' , '' ) ;
work . css ( 'transform' , '' ) ;
return ;
}
2016-08-25 23:31:34 -04:00
for ( var i = 0 ; i < works . length ; i ++ ) {
var id = works [ i ] . className ;
var index = id . indexOf ( "workevent" ) ;
id = id . substring ( index + 10 , index + 27 ) ;
if ( id === hoverHighlight ) {
works [ i ] . style . webkitTransform = 'scale(1.12)' ;
works [ i ] . style . msTransform = 'scale(1.12)' ;
works [ i ] . style . transform = 'scale(1.12)' ;
} else {
2016-08-27 18:53:47 -04:00
works [ i ] . style . webkitTransform = '' ;
works [ i ] . style . msTransform = '' ;
works [ i ] . style . transform = '' ;
2016-08-25 23:31:34 -04:00
}
}
return ;
} ,
2016-08-29 00:24:01 -04:00
workCenter ( ) { // Dimensions the work center
2016-08-15 20:55:21 -04:00
var w = window . innerWidth * 0.3 ;
2016-08-12 23:10:27 -04:00
var h = window . innerHeight * 0.7 ;
2016-08-15 20:55:21 -04:00
return "width:" + w . toString ( ) + "px;height:" + h . toString ( ) + "px;margin-left:" + - 0.5 * w . toString ( ) + "px;margin-top:" + - 0.5 * h . toString ( ) + "px" ;
2016-08-12 23:10:27 -04:00
} ,
2016-08-27 21:38:42 -04:00
commentDim ( ) {
var work = Session . get ( "currentWork" ) ;
2016-08-28 18:41:35 -04:00
if ( Session . get ( "newWork" ) === null || work === null ) return ;
if ( Session . get ( "newWork" ) || work . comments . length <= 3 ) return ;
2016-08-27 21:38:42 -04:00
return 0.23 * window . innerHeight . toString ( ) + "px" ;
} ,
2016-08-12 23:10:27 -04:00
work ( value ) {
2016-08-17 23:39:51 -04:00
if ( Session . get ( "currentWork" ) === null ) return ;
2016-08-18 23:59:38 -04:00
return Session . get ( "currentReadableWork" ) [ value ] ;
2016-08-12 23:10:27 -04:00
} ,
workType ( ) {
2016-08-17 23:39:51 -04:00
if ( Session . get ( "currentWork" ) === null ) return ;
2016-08-20 15:58:31 -04:00
if ( Session . get ( "currentWork" ) . type === undefined ) return ;
2016-08-18 23:59:38 -04:00
type = Session . get ( "currentWork" ) . type ;
if ( type . includes ( "edit" ) ) {
return ;
} else {
return workColors [ type ] ;
}
2016-08-12 23:10:27 -04:00
} ,
2016-08-27 21:38:42 -04:00
commentLength ( ) {
return Session . get ( "commentRestrict" ) ;
} ,
2016-08-12 23:10:27 -04:00
newWork ( ) {
2016-08-18 23:59:38 -04:00
return Session . get ( "newWork" ) ;
2016-08-13 18:58:54 -04:00
} ,
inRole ( ) {
2016-08-18 23:59:38 -04:00
if ( Session . get ( "newWork" ) ) {
return true ;
} else {
2016-08-27 18:53:47 -04:00
var currClass = classes . findOne ( { _id : Session . get ( "currentWork" ) [ "class" ] } )
2016-08-18 23:59:38 -04:00
if ( Meteor . userId ( ) === Session . get ( "currentWork" ) . creator ||
Roles . userIsInRole ( Meteor . userId ( ) , [ 'superadmin' , 'admin' ] ) ||
2016-08-27 18:53:47 -04:00
currClass . moderators . indexOf ( Meteor . userId ( ) ) !== - 1 ||
currClass . banned . indexOf ( Meteor . userId ( ) ) !== - 1
2016-08-18 23:59:38 -04:00
) return true ;
}
2016-08-12 12:28:55 -04:00
}
2016-08-09 01:33:14 -04:00
} ) ;
Template . main . events ( {
2016-08-12 12:28:55 -04:00
'click .fa-bars' ( ) {
var side = Session . get ( "sidebar" ) ;
if ( side === "menuContainer" ) {
Session . set ( "sidebar" , null ) ;
} else if ( side === "optionsContainer" ) {
Session . set ( "sidebar" , "both" ) ;
} else if ( side === "both" ) {
Session . set ( "sidebar" , "optionsContainer" ) ;
} else {
Session . set ( "sidebar" , "menuContainer" ) ;
}
} ,
'click .fa-cog' ( ) {
var side = Session . get ( "sidebar" ) ;
if ( side === "optionsContainer" ) {
Session . set ( "sidebar" , null ) ;
} else if ( side === "menuContainer" ) {
Session . set ( "sidebar" , "both" ) ;
} else if ( side === "both" ) {
Session . set ( "sidebar" , "menuContainer" ) ;
} else {
Session . set ( "sidebar" , "optionsContainer" ) ;
}
} ,
'click .classes' ( ) {
if ( Session . get ( "mode" ) === "classes" ) return ;
var modeHolder = document . getElementById ( "mainBody" ) ;
closeDivFade ( modeHolder ) ;
setTimeout ( function ( ) {
Session . set ( "mode" , "classes" ) ;
openDivFade ( modeHolder ) ;
} , 300 ) ;
2016-08-29 23:32:14 -04:00
Session . set ( "sidebar" , null ) ;
2016-08-12 12:28:55 -04:00
} ,
2016-08-29 00:24:01 -04:00
'click .calendar' ( ) { // Applies on a click of the calendar. First checks if the mode is currently the calendar, and then sets it to that if it isn't.
2016-08-12 12:28:55 -04:00
if ( Session . get ( "mode" ) === "calendar" ) return ;
var modeHolder = document . getElementById ( "mainBody" ) ;
closeDivFade ( modeHolder ) ;
setTimeout ( function ( ) {
Session . set ( "mode" , "calendar" ) ;
openDivFade ( modeHolder ) ;
} , 300 ) ;
2016-08-29 23:32:14 -04:00
Session . set ( "sidebar" , null ) ;
2016-08-12 12:28:55 -04:00
} ,
'click' ( event ) {
var e = event . target . className ;
2016-08-12 23:10:27 -04:00
var sessval = Session . get ( "modifying" ) ;
2016-08-28 14:45:35 -04:00
if ( event . target . id !== sessval &&
event . target . id !== sessval + "a" &&
! Session . equals ( "modifying" , null ) &&
! event . target . parentNode . className . includes ( "workOptions" ) &&
! event . target . parentNode . className . includes ( "prefOptions" ) ) {
closeInput ( sessval ) ;
}
2016-08-28 18:41:35 -04:00
2016-08-12 12:28:55 -04:00
if ( e !== Session . get ( "sidebar" ) &&
2016-08-20 15:58:31 -04:00
! e . includes ( "fa-cog" ) &&
! e . includes ( "fa-bars" ) &&
! document . getElementById ( "menuContainer" ) . contains ( event . target ) &&
2016-08-29 23:32:14 -04:00
! document . getElementById ( "optionsContainer" ) . contains ( event . target ) &&
! ( event . target . className . includes ( "fc-day" ) && ! event . target . className . includes ( "fc-past" ) ) ) {
2016-08-20 15:58:31 -04:00
if ( Session . get ( "calCreWork" ) ) {
Session . set ( "calCreWork" , false ) ;
}
Session . set ( "sidebar" , null ) ;
2016-08-12 12:28:55 -04:00
}
2016-08-18 20:27:18 -04:00
2016-08-12 23:10:27 -04:00
if ( e === "overlay" ) {
2016-08-18 20:27:18 -04:00
closeDivFade ( document . getElementsByClassName ( "overlay" ) [ 0 ] ) ;
if ( ! Session . get ( "newWork" ) ) {
if ( getHomeworkFormData ( ) === null ) return ;
2016-08-29 21:02:02 -04:00
serverData = Session . get ( "currentWork" ) ;
2016-08-18 20:27:18 -04:00
sendData ( "editWork" ) ;
2016-08-28 13:12:41 -04:00
document . getElementById ( "workComment" ) . value = "" ;
2016-08-18 20:27:18 -04:00
}
Session . set ( "newWork" , null ) ;
2016-08-28 23:25:43 -04:00
Session . set ( "currentWork" , null ) ;
Session . set ( "currentReadableWork" , null ) ;
2016-08-29 21:02:02 -04:00
$ ( '.req' ) . css ( "color" , "" ) ;
2016-08-27 21:38:42 -04:00
Session . set ( "commentRestrict" , null ) ;
2016-08-28 20:09:16 -04:00
2016-08-12 23:10:27 -04:00
}
if ( ! event . target . className . includes ( "radio" ) &&
2016-08-18 17:35:40 -04:00
! event . target . parentNode . className . includes ( "workOptions" ) &&
2016-08-22 23:44:48 -04:00
! event . target . parentNode . className . includes ( "prefOptions" ) &&
2016-08-18 17:35:40 -04:00
event . target . readOnly !== true ) {
2016-08-23 00:11:57 -04:00
if ( Session . equals ( "sidebar" , "optionsContainer" ) || Session . equals ( "sidebar" , "both" ) ) {
2016-08-22 23:44:48 -04:00
var radio = "prefOptions" ;
} else {
var radio = "workOptions" ;
}
for ( var i = 0 ; i < document . getElementsByClassName ( radio ) . length ; i ++ ) {
2016-08-12 23:10:27 -04:00
try {
2016-08-22 23:44:48 -04:00
closeDivFade ( document . getElementsByClassName ( radio ) [ i ] ) ;
2016-08-12 23:10:27 -04:00
} catch ( err ) { }
}
}
} ,
'click .creWork' ( event ) {
2016-08-18 20:27:18 -04:00
if ( event . target . className !== "creWork" ) {
var attr = event . target . parentNode . getAttribute ( "classid" ) ;
} else {
var attr = event . target . getAttribute ( "classid" ) ;
}
2016-08-12 23:10:27 -04:00
Session . set ( "newWork" , true ) ;
2016-08-13 20:22:54 -04:00
Session . set ( "currentReadableWork" ,
2016-08-18 20:27:18 -04:00
{
name : "Name | Click here to edit..." ,
class : attr ,
dueDate : "Click here to edit..." ,
description : "Click here to edit..." ,
type : "Click here to edit..."
} ) ;
Session . set ( "currentWork" , { class : attr } ) ;
2016-08-13 19:24:10 -04:00
openDivFade ( document . getElementsByClassName ( "overlay" ) [ 0 ] ) ;
2016-08-12 23:10:27 -04:00
} ,
'click .change' ( event ) {
2016-08-22 23:44:48 -04:00
if ( ! Session . get ( "newWork" ) && ! document . getElementById ( "optionsContainer" ) . contains ( event . target ) ) {
2016-08-27 18:53:47 -04:00
var currClass = classes . findOne ( { _id : Session . get ( "currentWork" ) [ "class" ] } ) ;
2016-08-18 18:47:03 -04:00
if ( ! ( Meteor . userId ( ) === Session . get ( "currentWork" ) . creator ||
Roles . userIsInRole ( Meteor . userId ( ) , [ 'superadmin' , 'admin' ] ) ||
2016-08-27 18:53:47 -04:00
currClass . moderators . indexOf ( Meteor . userId ( ) ) !== - 1 ||
currClass . banned . indexOf ( Meteor . userId ( ) ) !== - 1
2016-08-29 21:02:02 -04:00
) ) return ;
2016-08-18 18:47:03 -04:00
}
2016-08-18 23:59:38 -04:00
var ele = event . target ;
2016-08-12 23:10:27 -04:00
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" ) ;
2016-08-15 20:55:21 -04:00
var typ = ele . getAttribute ( "type" ) ;
2016-08-13 18:58:54 -04:00
if ( typ === "textarea" ) {
input = document . createElement ( "textarea" ) ;
input . style . height = 3 * dim . height . toString ( ) + "px" ;
input . rows = "4" ;
} else if ( typ !== null ) {
2016-08-18 23:59:38 -04:00
input . type = typ ;
input . style . height = 0.9 * dim . height . toString ( ) + "px" ;
2016-08-12 23:10:27 -04:00
} else {
2016-08-18 23:59:38 -04:00
input . typ = "text" ;
input . style . height = 0.9 * dim . height . toString ( ) + "px" ;
2016-08-12 23:10:27 -04:00
}
2016-08-22 16:52:04 -04:00
if ( event . target . id !== "workDate" ) input . value = ele . childNodes [ 0 ] . nodeValue ;
2016-08-12 23:10:27 -04:00
input . className = "changeInput" ;
2016-08-14 07:52:27 -04:00
2016-08-12 23:10:27 -04:00
input . style . width = "70%" ;
input . style . padding = "0.1%" ;
input . id = ele . id + "a" ;
input . setAttribute ( "opc" , ele . getAttribute ( "opc" ) ) ;
ele . parentNode . appendChild ( input ) ;
if ( ele . getAttribute ( "re" ) == "readonly" ) {
input . readOnly = true ;
input . className += " op" ;
input . style . cursor = "pointer" ;
} else {
input . select ( ) ;
}
2016-08-13 23:46:32 -04:00
if ( ele . id === "workDate" ) {
2016-08-18 23:59:38 -04:00
input . className += " form-control" ;
2016-08-13 23:46:32 -04:00
}
2016-08-12 23:10:27 -04:00
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 ) ;
}
} ,
2016-08-13 18:58:54 -04:00
'click .radio' ( event ) {
2016-08-27 18:53:47 -04:00
if ( ! Session . get ( "newWork" ) && ! document . getElementById ( "optionsContainer" ) . contains ( event . target ) ) {
var currClass = classes . findOne ( { _id : Session . get ( "currentWork" ) [ "class" ] } ) ;
if ( ! ( Meteor . userId ( ) === Session . get ( "currentWork" ) . creator ||
Roles . userIsInRole ( Meteor . userId ( ) , [ 'superadmin' , 'admin' ] ) ||
currClass . moderators . indexOf ( Meteor . userId ( ) ) !== - 1 ||
currClass . banned . indexOf ( Meteor . userId ( ) ) !== - 1
2016-08-29 21:02:02 -04:00
) ) return ;
2016-08-27 18:53:47 -04:00
}
2016-08-13 18:58:54 -04:00
var op = event . target ;
2016-08-23 00:11:57 -04:00
if ( Session . equals ( "sidebar" , "optionsContainer" ) || Session . equals ( "sidebar" , "both" ) ) {
2016-08-22 23:44:48 -04:00
var radio = "prefOptions" ;
} else {
var radio = "workOptions" ;
}
2016-08-13 18:58:54 -04:00
try {
2016-08-22 23:44:48 -04:00
for ( var i = 0 ; i < document . getElementsByClassName ( radio ) . length ; i ++ ) {
var curr = document . getElementsByClassName ( radio ) [ i ] ;
2016-08-28 14:45:35 -04:00
if ( curr . childNodes [ 1 ] !== op . parentNode . parentNode . childNodes [ 3 ] . childNodes [ 1 ] ) {
2016-08-22 23:44:48 -04:00
closeDivFade ( document . getElementsByClassName ( radio ) [ i ] ) ;
2016-08-13 18:58:54 -04:00
}
}
} catch ( err ) { }
2016-08-28 14:45:35 -04:00
openDivFade ( op . parentNode . parentNode . childNodes [ 3 ] ) ;
2016-08-13 18:58:54 -04:00
} ,
2016-08-28 13:12:41 -04:00
'click .workOptionText' ( event ) {
2016-08-13 18:58:54 -04:00
var sessval = Session . get ( "modifying" ) ;
var p = event . target ;
2016-08-28 14:45:35 -04:00
var input = p . parentNode . parentNode . childNodes [ 1 ] . childNodes [ 5 ] ;
2016-08-22 23:44:48 -04:00
input . value = p . childNodes [ 0 ] . nodeValue ;
try {
closeInput ( sessval ) ;
} catch ( err ) { }
closeDivFade ( p . parentNode ) ;
input . focus ( ) ;
} ,
2016-08-28 13:12:41 -04:00
'click .prefOptionText' ( event ) {
2016-08-22 23:44:48 -04:00
var sessval = Session . get ( "modifying" ) ;
var p = event . target ;
2016-08-28 14:45:35 -04:00
var input = p . parentNode . parentNode . childNodes [ 1 ] . childNodes [ 5 ] ;
2016-08-13 18:58:54 -04:00
input . value = p . childNodes [ 0 ] . nodeValue ;
try {
closeInput ( sessval ) ;
} catch ( err ) { }
closeDivFade ( p . parentNode ) ;
input . focus ( ) ;
} ,
2016-08-12 23:10:27 -04:00
'keydown' ( event ) {
var sessval = Session . get ( "modifying" ) ;
2016-08-13 18:58:54 -04:00
if ( event . keyCode == 13 && sessval != "workDesc" ) {
2016-08-12 23:10:27 -04:00
try {
closeInput ( sessval ) ;
} catch ( err ) { }
}
if ( sessval !== null && event . keyCode !== 13 ) {
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" ) ;
}
}
}
} ,
2016-08-22 16:52:04 -04:00
'click #commentSubmit' ( event ) {
workId = Session . get ( "currentWork" ) . _id ;
2016-08-27 19:29:51 -04:00
var input = document . getElementById ( 'workComment' ) ;
comment = input . value ;
input . value = "" ;
2016-08-22 16:52:04 -04:00
if ( comment !== "" ) {
document . getElementById ( 'workComment' ) . value = "" ;
2016-08-27 21:38:42 -04:00
Meteor . call ( 'addComment' , [ comment , workId ] , function ( err , result ) {
var thisWork = work . findOne ( { _id : workId } ) ;
Session . set ( "currentWork" , thisWork ) ;
var thisReadWork = formReadable ( thisWork ) ;
Session . set ( "currentReadableWork" , thisReadWork ) ;
} ) ;
2016-08-22 16:52:04 -04:00
}
2016-08-27 21:38:42 -04:00
2016-08-22 16:52:04 -04:00
} ,
2016-08-29 00:24:01 -04:00
'click #workSubmit' ( ) { // Apples on the work submit button. If the current value, then terminate. Otherwise, create a new work or edit the current piece of work
2016-08-18 23:59:38 -04:00
if ( getHomeworkFormData ( ) === null ) return ;
2016-08-29 21:02:02 -04:00
serverData = Session . get ( "currentWork" ) ;
2016-08-18 23:59:38 -04:00
if ( Session . get ( "newWork" ) ) {
sendData ( "createWork" ) ;
} else {
sendData ( "editWork" ) ;
}
Session . set ( "newWork" , null ) ;
2016-08-13 18:58:54 -04:00
closeDivFade ( document . getElementsByClassName ( "overlay" ) [ 0 ] ) ;
} ,
2016-08-18 23:59:38 -04:00
'focus .op' ( event ) {
2016-08-13 18:58:54 -04:00
event . target . click ( ) ;
} ,
2016-08-13 19:24:10 -04:00
'click .workCard' ( event ) {
2016-08-18 23:59:38 -04:00
var dom = event . target ;
while ( event . target . className !== "workCard" ) event . target = event . target . parentNode ;
workid = event . target . getAttribute ( "workid" ) ;
2016-08-27 18:53:47 -04:00
2016-08-18 23:59:38 -04:00
Session . set ( "newWork" , false ) ;
var thisWork = work . findOne ( { _id : workid } ) ;
Session . set ( "currentWork" , thisWork ) ;
var thisReadWork = formReadable ( thisWork ) ;
Session . set ( "currentReadableWork" , thisReadWork ) ;
2016-08-27 18:53:47 -04:00
if ( ! Session . get ( "newWork" ) && ! document . getElementById ( "optionsContainer" ) . contains ( event . target ) ) {
var currClass = classes . findOne ( { _id : Session . get ( "currentWork" ) [ "class" ] } ) ;
if ( ! ( Meteor . userId ( ) === Session . get ( "currentWork" ) . creator ||
Roles . userIsInRole ( Meteor . userId ( ) , [ 'superadmin' , 'admin' ] ) ||
currClass . moderators . indexOf ( Meteor . userId ( ) ) !== - 1 ||
currClass . banned . indexOf ( Meteor . userId ( ) ) !== - 1 ) ) {
var inputs = $ ( '#editWork .change' ) . css ( "cursor" , "default" ) ;
2016-08-29 21:02:02 -04:00
} ;
2016-08-27 18:53:47 -04:00
}
2016-08-18 23:59:38 -04:00
openDivFade ( document . getElementsByClassName ( "overlay" ) [ 0 ] ) ;
2016-08-13 23:46:32 -04:00
} ,
'focus #workDatea' ( ) {
2016-08-18 23:59:38 -04:00
$ ( '#workDatea' ) . datepicker ( {
format : 'DD, MM d, yyyy' ,
2016-08-20 21:29:11 -04:00
startDate : 'd' ,
2016-08-18 17:35:40 -04:00
todayHighlight : true ,
2016-08-20 21:29:11 -04:00
todayBtn : true ,
2016-08-18 17:35:40 -04:00
autoclose : true
2016-08-18 23:59:38 -04:00
} ) ;
2016-08-20 15:58:31 -04:00
} ,
'click .sideClass' ( event ) {
2016-08-22 23:44:48 -04:00
var div = event . target ;
2016-08-20 15:58:31 -04:00
while ( div . getAttribute ( "classid" ) === null ) div = div . parentNode ;
var classid = div . getAttribute ( "classid" ) ;
2016-08-26 01:02:28 -04:00
if ( Session . get ( "calCreWork" ) ) {
Session . set ( "calCreWork" , null ) ;
Session . set ( "sidebar" , null ) ;
2016-08-25 23:31:34 -04:00
2016-08-26 01:02:28 -04:00
var date = Session . get ( "calWorkDate" ) . split ( "-" ) ;
var date = new Date ( date [ 0 ] , parseInt ( date [ 1 ] ) - 1 , date [ 2 ] , 11 , 59 , 59 ) ;
Session . set ( "newWork" , true ) ;
Session . set ( "currentReadableWork" ,
{
name : "Name | Click here to edit..." ,
class : classid ,
dueDate : getReadableDate ( date ) ,
description : "Click here to edit..." ,
type : "Click here to edit..."
} ) ;
Session . set ( "currentWork" , { class : classid , dueDate : date } ) ;
openDivFade ( document . getElementsByClassName ( "overlay" ) [ 0 ] ) ;
} else {
2016-08-25 23:31:34 -04:00
var array = Session . get ( "classDisp" ) ;
2016-08-26 01:02:28 -04:00
if ( array . indexOf ( classid ) !== - 1 ) {
array . splice ( array . indexOf ( classid ) , 1 ) ;
} else {
array . push ( classid ) ;
2016-08-29 21:02:02 -04:00
}
2016-08-25 23:31:34 -04:00
Session . set ( "classDisp" , array ) ;
2016-08-26 01:02:28 -04:00
$ ( "#fullcalendar" ) . fullCalendar ( 'refetchEvents' ) ;
2016-08-25 23:31:34 -04:00
}
} ,
'mouseover .sideClass' ( event ) {
if ( event . target . className !== "sideClass" ) {
var div = event . target . parentNode ;
} else {
2016-08-29 21:02:02 -04:00
var div = event . target ;
2016-08-25 23:31:34 -04:00
}
while ( div . getAttribute ( "classid" ) === null ) div = div . parentNode ;
var classid = div . getAttribute ( "classid" ) ;
Session . set ( "classDispHover" , classid ) ;
} ,
'mouseleave .sideClass' ( event ) {
if ( event . target . className !== "sideClass" ) {
var div = event . target . parentNode ;
if ( div . contains ( event . target ) ) return ;
}
Session . set ( "classDispHover" , null ) ;
2016-08-27 21:38:42 -04:00
} ,
'keydown #workComment' ( event ) {
var chars = event . target . value . length ;
document . getElementById ( "commentRestrict" ) . style . color = "#CCC" ;
if ( chars === 200 ) {
document . getElementById ( "commentRestrict" ) . style . color = "#FF1A1A" ;
}
2016-08-28 18:41:35 -04:00
Session . set ( "commentRestrict" , "Characters left: " + ( 200 - chars ) . toString ( ) ) ;
} ,
'click #markDone' ( ) {
2016-08-29 21:02:02 -04:00
serverData = [ Session . get ( "currentWork" ) . _id , "done" ]
2016-08-28 18:41:35 -04:00
sendData ( "toggleWork" ) ;
} ,
'click #markConfirm' ( ) {
2016-08-29 21:02:02 -04:00
serverData = [ Session . get ( "currentWork" ) . _id , "confirmations" ]
2016-08-28 18:41:35 -04:00
sendData ( "toggleWork" ) ;
} ,
'click #markReport' ( ) {
2016-08-29 21:02:02 -04:00
serverData = [ Session . get ( "currentWork" ) . _id , "reports" ]
2016-08-28 18:41:35 -04:00
sendData ( "toggleWork" ) ;
2016-08-13 19:24:10 -04:00
}
2016-08-09 01:33:14 -04:00
} ) ;
function openDivFade ( div ) {
2016-08-12 12:28:55 -04:00
div . style . display = "block" ;
div . style . opacity = "0" ;
setTimeout ( function ( ) {
div . style . opacity = "1" ;
} , 100 ) ;
2016-08-09 01:33:14 -04:00
}
function closeDivFade ( div ) {
2016-08-12 12:28:55 -04:00
div . style . opacity = "0" ;
setTimeout ( function ( ) {
div . style . display = "none" ;
} , 100 ) ;
2016-08-09 01:33:14 -04:00
}
2016-08-12 23:10:27 -04:00
function sendData ( funcName ) {
2016-08-29 21:02:02 -04:00
Meteor . call ( funcName , serverData , function ( err , result ) {
2016-08-20 15:58:31 -04:00
if ( ( funcName === "editWork" || funcName === "createWork" ) && Session . get ( "mode" ) === "calendar" ) {
$ ( "#fullcalendar" ) . fullCalendar ( 'refetchEvents' ) ;
2016-08-28 18:41:35 -04:00
} else if ( funcName === "toggleWork" ) {
var workId = Session . get ( "currentWork" ) . _id ;
var thisWork = work . findOne ( { _id : workId } ) ;
Session . set ( "currentWork" , thisWork ) ;
var thisReadWork = formReadable ( thisWork ) ;
Session . set ( "currentReadableWork" , thisReadWork ) ;
} else if ( funcName === "editProfile" ) {
$ ( "#fullcalendar" ) . fullCalendar ( 'refetchEvents' ) ;
}
2016-08-29 21:02:02 -04:00
} ) ;
2016-08-12 12:28:55 -04:00
}
2016-08-12 23:10:27 -04:00
function closeInput ( sessval ) {
var input = document . getElementById ( sessval + "a" ) ;
var span = document . getElementById ( sessval ) ;
2016-08-23 00:11:57 -04:00
if ( Session . equals ( "sidebar" , "optionsContainer" ) || Session . equals ( "sidebar" , "both" ) ) {
2016-08-22 23:44:48 -04:00
var color = "#000" ;
} else {
var color = "#8C8C8C" ;
}
span . style . color = color ;
2016-08-12 23:10:27 -04:00
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 ;
}
2016-08-22 23:44:48 -04:00
span . style . display = "initial" ;
2016-08-12 23:10:27 -04:00
Session . set ( "modifying" , null ) ;
2016-08-23 00:11:57 -04:00
if ( Session . equals ( "sidebar" , "optionsContainer" ) || Session . equals ( "sidebar" , "both" ) ) {
2016-08-29 21:02:02 -04:00
serverData = getPreferencesData ( ) ;
2016-08-23 00:11:57 -04:00
sendData ( "editProfile" ) ;
} else if ( ! Session . get ( "newWork" ) ) {
2016-08-18 23:59:38 -04:00
if ( getHomeworkFormData ( ) === null ) return ;
2016-08-29 21:02:02 -04:00
serverData = Session . get ( "currentWork" ) ;
2016-08-18 23:59:38 -04:00
sendData ( "editWork" ) ;
2016-08-28 23:25:43 -04:00
}
2016-08-12 23:10:27 -04:00
}
function getHomeworkFormData ( ) {
2016-08-18 23:59:38 -04:00
var inputs = document . getElementsByClassName ( "req" ) ;
var stop ;
for ( var i = 0 ; i < inputs . length ; i ++ ) {
var value = inputs [ i ] . childNodes [ 0 ] . nodeValue ;
if ( value . includes ( "Click here to edit" ) ) {
inputs [ i ] . childNodes [ 0 ] . nodeValue = "Missing field" ;
inputs [ i ] . style . color = "#FF1A1A" ;
stop = true ;
}
}
if ( stop ) return null ;
var data = Session . get ( "currentWork" ) ;
data . name = document . getElementById ( "workName" ) . childNodes [ 0 ] . nodeValue ;
data . dueDate = toDate ( document . getElementById ( "workDate" ) . childNodes [ 0 ] . nodeValue ) ;
data . description = document . getElementById ( "workDesc" ) . childNodes [ 0 ] . nodeValue ;
data . type = document . getElementById ( "workType" ) . childNodes [ 0 ] . nodeValue . toLowerCase ( ) ;
Session . set ( "currentWork" , data ) ;
var readableData = formReadable ( data ) ;
Session . set ( "currentReadableWork" , readableData ) ;
2016-08-13 17:33:12 -04:00
}
2016-08-13 18:58:54 -04:00
2016-08-22 23:44:48 -04:00
function getPreferencesData ( ) {
var profile = Meteor . user ( ) . profile ;
var options = {
"theme" : document . getElementById ( "prefTheme" ) . childNodes [ 0 ] . nodeValue . toLowerCase ( ) ,
2016-08-27 00:54:12 -04:00
"mode" : document . getElementById ( "prefMode" ) . childNodes [ 0 ] . nodeValue . toLowerCase ( ) ,
2016-08-28 20:09:16 -04:00
"timeHide" : ref [ document . getElementById ( "prefHide" ) . childNodes [ 0 ] . nodeValue ] ,
"done" : ref [ document . getElementById ( "prefDone" ) . childNodes [ 0 ] . nodeValue ]
2016-08-22 23:44:48 -04:00
} ;
profile . preferences = options ;
return profile ;
}
2016-08-13 23:46:32 -04:00
var days = [ "Sunday" , "Monday" , "Tuesday" , "Wednesday" , "Thursday" , "Friday" , "Saturday" ] ;
var months = [ "January" , "February" , "March" , "April" , "May" , "June" , "July" , "August" , "September" , "October" , "November" , "December" ] ;
2016-08-13 18:58:54 -04:00
function getReadableDate ( date ) {
2016-08-18 23:59:38 -04:00
return days [ date . getDay ( ) ] + ", " + months [ date . getMonth ( ) ] + " " + date . getDate ( ) + ", " + date . getFullYear ( ) ;
2016-08-13 20:22:54 -04:00
}
2016-08-29 00:24:01 -04:00
function toDate ( date ) { //Formats the date into the format needed for niceness
2016-08-18 23:59:38 -04:00
date = date . substring ( date . search ( "," ) + 2 , date . length ) ;
month = months . indexOf ( date . substring ( 0 , date . search ( " " ) ) ) ;
day = date . substring ( date . search ( " " ) + 1 , date . search ( "," ) ) ;
year = date . substring ( date . search ( "," ) + 2 , date . length ) ;
return new Date ( year , month , day , 11 , 59 , 59 ) ;
2016-08-13 23:46:32 -04:00
}
2016-08-13 20:22:54 -04:00
function formReadable ( input ) {
2016-08-18 23:59:38 -04:00
input . dueDate = getReadableDate ( input . dueDate ) ;
input . type = input . type [ 0 ] . toUpperCase ( ) + input . type . slice ( 1 ) ;
2016-08-28 18:41:35 -04:00
2016-08-28 23:25:43 -04:00
if ( ! Session . get ( "newWork" ) ) {
if ( input . done . indexOf ( Meteor . userId ( ) ) !== - 1 ) {
input . doneCol = "#27A127" ;
input . doneText = "Done!" ;
} else {
input . doneCol = "" ;
input . doneText = "Mark done" ;
}
2016-08-28 18:41:35 -04:00
2016-08-28 23:25:43 -04:00
for ( var i = 0 ; i < input . done . length ; i ++ ) {
input . done [ i ] = { "user" : Meteor . users . findOne ( { _id : input . done [ i ] } ) . profile . name } ;
}
2016-08-28 18:55:10 -04:00
2016-08-28 23:25:43 -04:00
if ( input . confirmations . indexOf ( Meteor . userId ( ) ) !== - 1 ) {
input . userConfirm = "#27A127" ;
} else {
input . userConfirm = "" ;
}
2016-08-28 18:41:35 -04:00
2016-08-28 23:25:43 -04:00
if ( input . reports . indexOf ( Meteor . userId ( ) ) !== - 1 ) {
input . userReport = "#FF1A1A" ;
} else {
input . userReport = "" ;
}
2016-08-28 18:41:35 -04:00
2016-08-28 23:25:43 -04:00
input . confirmations = input . confirmations . length ;
input . reports = input . reports . length ;
2016-08-28 18:41:35 -04:00
2016-08-28 23:25:43 -04:00
var comments = input . comments ;
var resort = [ ] ;
if ( ! Session . get ( "newWork" ) ) {
for ( var k = 0 ; k < comments . length ; k ++ ) {
var re = comments . length - k - 1 ;
resort [ re ] = { "comment" : comments [ k ] . comment , "date" : null , "user" : null } ;
resort [ re ] . user = Meteor . users . findOne ( { _id : comments [ k ] . user } ) . profile . name ;
resort [ re ] . date = moment ( comments [ k ] . date ) . fromNow ( ) ;
}
input . comments = resort ;
2016-08-28 13:12:41 -04:00
}
2016-08-27 19:29:51 -04:00
}
2016-08-18 23:59:38 -04:00
return input ;
2016-08-14 07:52:27 -04:00
}