Merge commit

This commit is contained in:
Kenneth Jao 2016-10-09 23:00:40 -04:00
commit dc69f67f85
8 changed files with 149 additions and 119 deletions

View File

@ -6,22 +6,22 @@
meteor-base@1.0.4 # Packages every Meteor app needs to have meteor-base@1.0.4 # Packages every Meteor app needs to have
mobile-experience@1.0.4 # Packages for a great mobile UX mobile-experience@1.0.4 # Packages for a great mobile UX
mongo@1.1.12 # The database Meteor supports right now mongo@1.1.12_1 # The database Meteor supports right now
blaze-html-templates@1.0.4 # Compile .html files into Meteor Blaze views blaze-html-templates@1.0.4 # Compile .html files into Meteor Blaze views
reactive-var@1.0.10 # Reactive variable for tracker reactive-var@1.0.10 # Reactive variable for tracker
jquery # Helpful client-side library jquery@1.11.9 # Helpful client-side library
tracker@1.1.0 # Meteor's client-side reactive programming library tracker@1.1.0 # Meteor's client-side reactive programming library
standard-minifier-css@1.2.0 # CSS minifier run for production mode standard-minifier-css@1.2.0_1 # CSS minifier run for production mode
standard-minifier-js@1.2.0 # JS minifier run for production mode standard-minifier-js@1.2.0_1 # JS minifier run for production mode
es5-shim@4.6.14 # ECMAScript 5 compatibility for older browsers. es5-shim@4.6.14_1 # ECMAScript 5 compatibility for older browsers.
ecmascript@0.5.8 # Enable ECMAScript2015+ syntax in app code ecmascript@0.5.8_1 # Enable ECMAScript2015+ syntax in app code
fortawesome:fontawesome fortawesome:fontawesome
session@1.1.6 session@1.1.6
proyk:meteor-cookies proyk:meteor-cookies
aldeed:simple-schema aldeed:simple-schema
accounts-google accounts-google@1.0.10
accounts-ui@1.1.9 accounts-ui@1.1.9
iron:router iron:router
ongoworks:security ongoworks:security
@ -31,9 +31,8 @@ rzymek:fullcalendar
momentjs:moment momentjs:moment
eternicode:bootstrap-datepicker eternicode:bootstrap-datepicker
shell-server@0.2.1 shell-server@0.2.1
http@1.2.9 http@1.2.9_1
underscore underscore@1.0.9
houston:admin
ahref:dragula ahref:dragula
harrison:papa-parse harrison:papa-parse
pfafman:filesaver pfafman:filesaver
@ -41,3 +40,7 @@ flemay:less-autoprefixer
natestrauser:select2 natestrauser:select2
juliancwirko:s-alert juliancwirko:s-alert
juliancwirko:s-alert-stackslide juliancwirko:s-alert-stackslide
aldeed:collection2
dburles:collection-helpers
twbs:bootstrap
yogiben:admin

View File

@ -1 +1 @@
METEOR@1.4.1.1 METEOR@1.4.1.2

View File

@ -1,16 +1,19 @@
accounts-base@1.2.11 accounts-base@1.2.11
accounts-google@1.0.10 accounts-google@1.0.10
accounts-oauth@1.1.13 accounts-oauth@1.1.13
accounts-password@1.3.0
accounts-ui@1.1.9 accounts-ui@1.1.9
accounts-ui-unstyled@1.1.12 accounts-ui-unstyled@1.1.12
ahref:dragula@3.5.4 ahref:dragula@3.5.4
alanning:roles@1.2.15 alanning:roles@1.2.15
aldeed:autoform@5.5.1
aldeed:collection2@2.5.0
aldeed:simple-schema@1.5.3 aldeed:simple-schema@1.5.3
aldeed:tabular@1.4.2
aldeed:template-extension@4.0.0
allow-deny@1.0.5 allow-deny@1.0.5
autoupdate@1.3.11 autoupdate@1.3.11
babel-compiler@6.9.1 babel-compiler@6.9.1_1
babel-runtime@0.1.11 babel-runtime@0.1.11_1
base64@1.0.9 base64@1.0.9
binary-heap@1.0.9 binary-heap@1.0.9
blaze@2.1.9 blaze@2.1.9
@ -24,7 +27,7 @@ check@1.2.3
coffeescript@1.2.4_1 coffeescript@1.2.4_1
cosmos:browserify@0.9.4 cosmos:browserify@0.9.4
dandv:caret-position@2.1.1 dandv:caret-position@2.1.1
dburles:mongo-collection-instances@0.3.5 dburles:collection-helpers@1.0.4
ddp@1.2.5 ddp@1.2.5
ddp-client@1.3.1 ddp-client@1.3.1
ddp-common@1.2.6 ddp-common@1.2.6
@ -32,11 +35,11 @@ ddp-rate-limiter@1.0.5
ddp-server@1.3.10 ddp-server@1.3.10
deps@1.0.12 deps@1.0.12
diff-sequence@1.0.6 diff-sequence@1.0.6
ecmascript@0.5.8 ecmascript@0.5.8_1
ecmascript-runtime@0.3.14 ecmascript-runtime@0.3.14_1
ejson@1.0.12 ejson@1.0.12
email@1.1.17 email@1.0.16
es5-shim@4.6.14 es5-shim@4.6.14_1
eternicode:bootstrap-datepicker@1.6.0_3 eternicode:bootstrap-datepicker@1.6.0_3
fastclick@1.0.12 fastclick@1.0.12
flemay:less-autoprefixer@1.2.0 flemay:less-autoprefixer@1.2.0
@ -45,10 +48,9 @@ geojson-utils@1.0.9
google@1.1.14 google@1.1.14
harrison:papa-parse@1.1.1 harrison:papa-parse@1.1.1
hot-code-push@1.0.4 hot-code-push@1.0.4
houston:admin@2.0.7
html-tools@1.0.11 html-tools@1.0.11
htmljs@1.0.11 htmljs@1.0.11
http@1.2.9 http@1.2.9_1
id-map@1.0.8 id-map@1.0.8
iron:controller@1.0.12 iron:controller@1.0.12
iron:core@1.0.11 iron:core@1.0.11
@ -61,28 +63,29 @@ iron:url@1.0.11
jquery@1.11.9 jquery@1.11.9
juliancwirko:s-alert@3.2.0 juliancwirko:s-alert@3.2.0
juliancwirko:s-alert-stackslide@3.1.3 juliancwirko:s-alert-stackslide@3.1.3
lai:collection-extensions@0.2.1_1
launch-screen@1.0.12 launch-screen@1.0.12
less@2.7.5 less@2.7.5
livedata@1.0.18 livedata@1.0.18
localstorage@1.0.11 localstorage@1.0.11
logging@1.1.15 logging@1.1.15_1
mdg:validation-error@0.5.1 mdg:validation-error@0.5.1
meteor@1.2.17 meteor@1.2.17_1
meteor-base@1.0.4 meteor-base@1.0.4
meteorhacks:meteorx@1.4.1
meteorhacks:unblock@1.1.0
mfactory:admin-lte@0.0.2
minifier-css@1.2.14 minifier-css@1.2.14
minifier-js@1.2.14 minifier-js@1.2.14_1
minimongo@1.0.17 minimongo@1.0.17
mizzao:autocomplete@0.5.1 mizzao:autocomplete@0.5.1
mobile-experience@1.0.4 mobile-experience@1.0.4
mobile-status-bar@1.0.12 mobile-status-bar@1.0.12
modules@0.7.6 modules@0.7.6_1
modules-runtime@0.7.6 modules-runtime@0.7.6_1
momentjs:moment@2.15.1 momentjs:moment@2.15.1
mongo@1.1.12 mongo@1.1.12_1
mongo-id@1.0.5 mongo-id@1.0.5
natestrauser:select2@4.0.3 natestrauser:select2@4.0.3
npm-bcrypt@0.9.1
npm-mongo@1.5.49 npm-mongo@1.5.49
oauth@1.1.11 oauth@1.1.11
oauth2@1.1.10 oauth2@1.1.10
@ -92,31 +95,33 @@ ordered-dict@1.0.8
pfafman:filesaver@1.3.2 pfafman:filesaver@1.3.2
promise@0.8.7 promise@0.8.7
proyk:meteor-cookies@0.0.1 proyk:meteor-cookies@0.0.1
raix:handlebar-helpers@0.2.5
random@1.0.10 random@1.0.10
rate-limit@1.0.5 rate-limit@1.0.5
reactive-dict@1.1.8 reactive-dict@1.1.8
reactive-var@1.0.10 reactive-var@1.0.10
reload@1.1.10 reload@1.1.10
retry@1.0.8 retry@1.0.8
reywood:publish-composite@1.4.2
routepolicy@1.0.11 routepolicy@1.0.11
rzymek:fullcalendar@2.7.2 rzymek:fullcalendar@2.7.2
service-configuration@1.0.10 service-configuration@1.0.10
session@1.1.6 session@1.1.6
sha@1.0.8
shell-server@0.2.1 shell-server@0.2.1
spacebars@1.0.13 spacebars@1.0.13
spacebars-compiler@1.0.13 spacebars-compiler@1.0.13
srp@1.0.9
standard-minifier-css@1.2.1 standard-minifier-css@1.2.1
standard-minifier-js@1.2.0 standard-minifier-js@1.2.0_1
templating@1.2.15 templating@1.2.15
templating-compiler@1.2.15 templating-compiler@1.2.15
templating-runtime@1.2.15 templating-runtime@1.2.15
templating-tools@1.0.5 templating-tools@1.0.5
tmeasday:paginated-subscription@0.2.4
tracker@1.1.0 tracker@1.1.0
twbs:bootstrap@3.3.6
ui@1.0.12 ui@1.0.12
underscore@1.0.9 underscore@1.0.9
url@1.0.10 url@1.0.10
webapp@1.3.11 webapp@1.3.11_1
webapp-hashing@1.0.9 webapp-hashing@1.0.9
yogiben:admin@1.2.8
zimme:active-route@2.3.2

View File

@ -13,6 +13,8 @@ Calendar mode organizes work by due date rather than by class. Pressing on a dat
Class mode allows you to organize work by the class it belongs to. Class mode allows you to organize work by the class it belongs to.
##### Work ##### Work
Every piece of work has a confirmed:reported ratio. This is the ratio of the number of people who confirm the presence of the work to the number of people who believe that this is a false report. The creator of a work can edit fields after creation by clicking on details needed to be changed. Lastly, by marking a work as done, it is hidden from view. To disable this, go to preferences. Every piece of work has a confirmed:reported ratio. This is the ratio of the number of people who confirm the presence of the work to the number of people who believe that this is a false report. The creator of a work can edit fields after creation by clicking on details needed to be changed. Lastly, by marking a work as done, it is hidden from view. To disable this, go to preferences.
##### Filters
In the left sidebar, you find options for filtering. These include filtering by class or type of assignment.
### Profile Page ### Profile Page
On this page, it is possible to edit profile details as well as create, join, and leave classes. On this page, it is possible to edit profile details as well as create, join, and leave classes.
#### Creating a class #### Creating a class

View File

@ -4,6 +4,7 @@ import {
} from 'meteor/templating'; } from 'meteor/templating';
import './main.html'; import './main.html';
import './main.css';
var load = true; var load = true;
var calWorkOpen = null; var calWorkOpen = null;
@ -188,7 +189,9 @@ 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].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].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 conf = thisWork[j].confirmations.length;
var repo = thisWork[j].reports.length; var repo = thisWork[j].reports.length;
var ratio = conf / repo; var ratio = conf / repo;
@ -228,8 +231,7 @@ Template.registerHelper('commentLength', () => { // Returns characters left for
}); });
function startDragula() { function startDragula() {
dragula([document.querySelector('#classesMode'), document.querySelector('#nonexistant')], dragula([document.querySelector('#classesMode'), document.querySelector('#nonexistant')], {
{
moves: function(el, container, handle) { moves: function(el, container, handle) {
// return handle.classList.contains("classInfo") || handle.classList.contains("mainClassName"); // return handle.classList.contains("classInfo") || handle.classList.contains("mainClassName");
return _.intersection(["classInfo", "mainClassName", "mainClassHour", "mainClassTeacher"], handle.classList).length > 0; return _.intersection(["classInfo", "mainClassName", "mainClassHour", "mainClassTeacher"], handle.classList).length > 0;
@ -242,7 +244,6 @@ function startDragula() {
var classid = els[i].getElementsByClassName("creWork")[0].getAttribute("classid"); var classid = els[i].getElementsByClassName("creWork")[0].getAttribute("classid");
final.push(classid); final.push(classid);
} }
Meteor.call("reorderClasses", final);
}); });
} }
@ -608,6 +609,7 @@ Template.main.events({
var dom = event.target; var dom = event.target;
while (event.target.className !== "workCard") event.target = event.target.parentNode; while (event.target.className !== "workCard") event.target = event.target.parentNode;
var workid = event.target.getAttribute("workid"); var workid = event.target.getAttribute("workid");
var thisWork = work.findOne({ var thisWork = work.findOne({
_id: workid _id: workid
}); });
@ -720,11 +722,15 @@ Template.main.events({
var works = userClasses[i].thisClassWork; var works = userClasses[i].thisClassWork;
for (var j = 0; j < works.length; j++) { for (var j = 0; j < works.length; j++) {
var work = works[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.description == defaultWork.description) work.description = "";
if (work.dueDate == defaultWork.dueDate) continue; if (work.dueDate == defaultWork.dueDate) continue;
if (work.name == defaultWork.name) work.name = ""; if (work.name == defaultWork.name) work.name = "";
if (workclass === undefined) workclass = {name: "Personal"}; if (workclass === undefined) workclass = {
name: "Personal"
};
events.push([ events.push([
workclass.name + ": " + work.name, workclass.name + ": " + work.name,
work.realDate.toLocaleDateString(), work.realDate.toLocaleDateString(),
@ -735,8 +741,13 @@ Template.main.events({
} }
var JSONevents = JSON.stringify(events); var JSONevents = JSON.stringify(events);
var CSVevents = Papa.unparse({fields: ["Subject", "Start Date", "Description", "All Day Event"], data: JSONevents}); var CSVevents = Papa.unparse({
var eventBlob = new Blob([CSVevents], {type: "data:text/csv;charset=utf-8"}); 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"); saveAs(eventBlob, "hourglass.csv");
}, },
'keydown input' (event) { // Enter to close input. 'keydown input' (event) { // Enter to close input.
@ -1005,13 +1016,17 @@ function toDate(date) { // Turns formatted date back to Date constructor.
} }
function formReadable(input, val) { // Makes work information readable by users. function formReadable(input, val) { // Makes work information readable by users.
if(input)
switch (val) { switch (val) {
case "typeColor": return input.typeColor = workColors[input.type]; case "typeColor":
case "name": return input.name; return input.typeColor = workColors[input.type];
case "dueDate": return getReadableDate(input.dueDate); case "name":
case "description": return input.description; return input.name;
case "type": return input.type[0].toUpperCase() + input.type.slice(1); case "dueDate":
return getReadableDate(input.dueDate);
case "description":
return input.description;
case "type":
return input.type[0].toUpperCase() + input.type.slice(1);
case "comments": case "comments":
var comments = input.comments; var comments = input.comments;
var resort = []; var resort = [];

View File

@ -426,7 +426,7 @@ Template.profile.events({
serverData = [user._id, classid]; serverData = [user._id, classid];
confirm = "changeAdmin"; confirm = "changeAdmin";
Session.set("confirmText", "Are you really sure?"); Session.set("confirmText", "Are you really sure?");
openDivFade(document.getElementsByClassName("overlay")[0]) openDivFade(document.getElementsByClassName("overlay")[0]);
document.getElementById("createdClasses").style.marginRight = "-40%"; document.getElementById("createdClasses").style.marginRight = "-40%";
}, },
// OVERLAY BUTTONS // OVERLAY BUTTONS

View File

@ -1,3 +1,13 @@
AdminConfig = {
name: 'Hourglass',
collections: {
schools: {},
classes: {},
work: {},
requests: {}
}
};
themeColors = { themeColors = {
"light": { "light": {
"background": "White.jpg", "background": "White.jpg",

View File

@ -6,9 +6,6 @@ import {
Mongo Mongo
} from 'meteor/mongo'; } from 'meteor/mongo';
Houston.add_collection(Meteor.users);
Houston.add_collection(Houston._admins);
// Defines who the admins are - not added // Defines who the admins are - not added
var superadmins = [ var superadmins = [
"ybq987@gmail.com", "ybq987@gmail.com",
@ -28,9 +25,7 @@ for (var i = 0; i < superadmins.length; i++) {
}); });
if (superadmin !== undefined && !(Roles.userIsInRole(superadmin._id, 'superadmin'))) { if (superadmin !== undefined && !(Roles.userIsInRole(superadmin._id, 'superadmin'))) {
Roles.addUsersToRoles(superadmin._id, 'superadmin'); Roles.addUsersToRoles(superadmin._id, 'superadmin');
Houston._admins.insert({ Roles.addUsersToRoles(superadmin._id, 'admin');
user_id: superadmin._id
});
} }
} }
@ -528,11 +523,11 @@ Meteor.methods({
var prof = Meteor.user().profile; var prof = Meteor.user().profile;
var found = classes.findOne({ var found = classes.findOne({
_id: change, _id: change,
status: true
}); });
if (Meteor.user() !== null && if (Meteor.user() !== null &&
found !== null && found !== null &&
pass === found.code && pass === found.code &&
(found.status || found.admin === Meteor.userId()) &&
!_.contains(prof.classes, change)) { !_.contains(prof.classes, change)) {
var foundsubs = found.subscribers; var foundsubs = found.subscribers;
classes.update({ classes.update({