Class Dojo Plus

Useful hacks to the already excellent Class Dojo

Tính đến 10-02-2015. Xem phiên bản mới nhất.

// ==UserScript==
// @name         Class Dojo Plus
// @namespace    https://greasyfork.org/en/scripts/7873-class-dojo-plus
// @version      2015.02.10.003
// @description  Useful hacks to the already excellent Class Dojo 
// @author       Ryan Meyers
// @match        http://teach.classdojo.com/*
// @match		 https://teach.classdojo.com/*
// @grant        none
// ==/UserScript==
/*!
 * Class Dojo Plus
 * https://github.com/
 *
 * Allows for class arrangements (saved per computer), hotkeys for students/behaviors,
 * quick points via mouse wheel, and more!
 *
 *
 * Copyright 2015, Ryan Meyers
 * Dual licensed under the MIT or GPL Version 2 licenses.
 *
 */

/*!
  * Bowser - a browser detector
  * https://github.com/ded/bowser
  * MIT License | (c) Dustin Diaz 2014
  */
!function(e,t){typeof module!="undefined"&&module.exports?module.exports.browser=t():typeof define=="function"&&define.amd?define(t):this[e]=t()}("bowser",function(){function t(t){function n(e){var n=t.match(e);return n&&n.length>1&&n[1]||""}var r=n(/(ipod|iphone|ipad)/i).toLowerCase(),i=/like android/i.test(t),s=!i&&/android/i.test(t),o=n(/version\/(\d+(\.\d+)?)/i),u=/tablet/i.test(t),a=!u&&/[^-]mobi/i.test(t),f;/opera|opr/i.test(t)?f={name:"Opera",opera:e,version:o||n(/(?:opera|opr)[\s\/](\d+(\.\d+)?)/i)}:/windows phone/i.test(t)?f={name:"Windows Phone",windowsphone:e,msie:e,version:n(/iemobile\/(\d+(\.\d+)?)/i)}:/msie|trident/i.test(t)?f={name:"Internet Explorer",msie:e,version:n(/(?:msie |rv:)(\d+(\.\d+)?)/i)}:/chrome|crios|crmo/i.test(t)?f={name:"Chrome",chrome:e,version:n(/(?:chrome|crios|crmo)\/(\d+(\.\d+)?)/i)}:r?(f={name:r=="iphone"?"iPhone":r=="ipad"?"iPad":"iPod"},o&&(f.version=o)):/sailfish/i.test(t)?f={name:"Sailfish",sailfish:e,version:n(/sailfish\s?browser\/(\d+(\.\d+)?)/i)}:/seamonkey\//i.test(t)?f={name:"SeaMonkey",seamonkey:e,version:n(/seamonkey\/(\d+(\.\d+)?)/i)}:/firefox|iceweasel/i.test(t)?(f={name:"Firefox",firefox:e,version:n(/(?:firefox|iceweasel)[ \/](\d+(\.\d+)?)/i)},/\((mobile|tablet);[^\)]*rv:[\d\.]+\)/i.test(t)&&(f.firefoxos=e)):/silk/i.test(t)?f={name:"Amazon Silk",silk:e,version:n(/silk\/(\d+(\.\d+)?)/i)}:s?f={name:"Android",version:o}:/phantom/i.test(t)?f={name:"PhantomJS",phantom:e,version:n(/phantomjs\/(\d+(\.\d+)?)/i)}:/blackberry|\bbb\d+/i.test(t)||/rim\stablet/i.test(t)?f={name:"BlackBerry",blackberry:e,version:o||n(/blackberry[\d]+\/(\d+(\.\d+)?)/i)}:/(web|hpw)os/i.test(t)?(f={name:"WebOS",webos:e,version:o||n(/w(?:eb)?osbrowser\/(\d+(\.\d+)?)/i)},/touchpad\//i.test(t)&&(f.touchpad=e)):/bada/i.test(t)?f={name:"Bada",bada:e,version:n(/dolfin\/(\d+(\.\d+)?)/i)}:/tizen/i.test(t)?f={name:"Tizen",tizen:e,version:n(/(?:tizen\s?)?browser\/(\d+(\.\d+)?)/i)||o}:/safari/i.test(t)?f={name:"Safari",safari:e,version:o}:f={},/(apple)?webkit/i.test(t)?(f.name=f.name||"Webkit",f.webkit=e,!f.version&&o&&(f.version=o)):!f.opera&&/gecko\//i.test(t)&&(f.name=f.name||"Gecko",f.gecko=e,f.version=f.version||n(/gecko\/(\d+(\.\d+)?)/i)),s||f.silk?f.android=e:r&&(f[r]=e,f.ios=e);var l="";r?(l=n(/os (\d+([_\s]\d+)*) like mac os x/i),l=l.replace(/[_\s]/g,".")):s?l=n(/android[ \/-](\d+(\.\d+)*)/i):f.windowsphone?l=n(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i):f.webos?l=n(/(?:web|hpw)os\/(\d+(\.\d+)*)/i):f.blackberry?l=n(/rim\stablet\sos\s(\d+(\.\d+)*)/i):f.bada?l=n(/bada\/(\d+(\.\d+)*)/i):f.tizen&&(l=n(/tizen[\/\s](\d+(\.\d+)*)/i)),l&&(f.osversion=l);var c=l.split(".")[0];if(u||r=="ipad"||s&&(c==3||c==4&&!a)||f.silk)f.tablet=e;else if(a||r=="iphone"||r=="ipod"||s||f.blackberry||f.webos||f.bada)f.mobile=e;return f.msie&&f.version>=10||f.chrome&&f.version>=20||f.firefox&&f.version>=20||f.safari&&f.version>=6||f.opera&&f.version>=10||f.ios&&f.osversion&&f.osversion.split(".")[0]>=6||f.blackberry&&f.version>=10.1?f.a=e:f.msie&&f.version<10||f.chrome&&f.version<20||f.firefox&&f.version<20||f.safari&&f.version<6||f.opera&&f.version<10||f.ios&&f.osversion&&f.osversion.split(".")[0]<6?f.c=e:f.x=e,f}var e=!0,n=t(typeof navigator!="undefined"?navigator.userAgent:"");return n._detect=t,n})

if (bowser.chrome) {
	console.log("Using Chrome");
   	// XHook - v1.3.0 - https://github.com/jpillora/xhook
	// Jaime Pillora <[email protected]> - MIT Copyright 2014
	(function(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z=[].indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(b in this&&this[b]===a)return b;return-1};r=a.document,d="before",c="after",l="readyState",k="addEventListener",j="removeEventListener",g="dispatchEvent",o="XMLHttpRequest",h="FormData",m=["load","loadend","loadstart"],e=["progress","abort","error","timeout"],u=parseInt((/msie (\d+)/.exec(navigator.userAgent.toLowerCase())||[])[1]),isNaN(u)&&(u=parseInt((/trident\/.*; rv:(\d+)/.exec(navigator.userAgent.toLowerCase())||[])[1])),(y=Array.prototype).indexOf||(y.indexOf=function(a){var b,c,d,e;for(b=d=0,e=this.length;e>d;b=++d)if(c=this[b],c===a)return b;return-1}),w=function(a,b){return Array.prototype.slice.call(a,b)},q=function(a){return"returnValue"===a||"totalSize"===a||"position"===a},t=function(a,b){var c,d;for(c in a)if(d=a[c],!q(c))try{b[c]=a[c]}catch(e){}return b},v=function(a,b,c){var d,e,f,h;for(e=function(a){return function(d){var e,f,h;e={};for(f in d)q(f)||(h=d[f],e[f]=h===b?c:h);return c[g](a,e)}},f=0,h=a.length;h>f;f++)d=a[f],b["on"+d]=e(d)},s=function(a){var b;if(null!=r.createEventObject)return b=r.createEventObject(),b.type=a,b;try{return new Event(a)}catch(c){return{type:a}}},f=function(a){var c,d,e;return d={},e=function(a){return d[a]||[]},c={},c[k]=function(a,c,f){d[a]=e(a),d[a].indexOf(c)>=0||(f=f===b?d[a].length:f,d[a].splice(f,0,c))},c[j]=function(a,c){var f;return a===b?void(d={}):(c===b&&(d[a]=[]),f=e(a).indexOf(c),void(-1!==f&&e(a).splice(f,1)))},c[g]=function(){var d,f,g,h,i,j,k,l;for(d=w(arguments),f=d.shift(),a||(d[0]=t(d[0],s(f))),h=c["on"+f],h&&h.apply(b,d),l=e(f).concat(e("*")),g=j=0,k=l.length;k>j;g=++j)i=l[g],i.apply(b,d)},a&&(c.listeners=function(a){return w(e(a))},c.on=c[k],c.off=c[j],c.fire=c[g],c.once=function(a,b){var d;return d=function(){return c.off(a,d),b.apply(null,arguments)},c.on(a,d)},c.destroy=function(){return d={}}),c},x=f(!0),x.EventEmitter=f,x[d]=function(a,b){if(a.length<1||a.length>2)throw"invalid hook";return x[k](d,a,b)},x[c]=function(a,b){if(a.length<2||a.length>3)throw"invalid hook";return x[k](c,a,b)},x.enable=function(){a[o]=n},x.disable=function(){a[o]=x[o]},p=x.headers=function(a,b){var c,d,e,f,g,h,i,j,k;switch(null==b&&(b={}),typeof a){case"object":d=[];for(e in a)g=a[e],f=e.toLowerCase(),d.push(""+f+":	"+g);return d.join("\n");case"string":for(d=a.split("\n"),i=0,j=d.length;j>i;i++)c=d[i],/([^:]+):\s*(.+)/.test(c)&&(f=null!=(k=RegExp.$1)?k.toLowerCase():void 0,h=RegExp.$2,null==b[f]&&(b[f]=h));return b}},i=a[h],i&&(x[h]=i,a[h]=function(a){var b;this.fd=a?new i(a):new i,this.form=a,b=[],Object.defineProperty(this,"entries",{get:function(){var c;return c=a?w(a.querySelectorAll("input,select")).filter(function(a){var b;return"checkbox"!==(b=a.type)&&"radio"!==b||a.checked}).map(function(a){return[a.name,"file"===a.type?a.files:a.value]}):[],c.concat(b)}}),this.append=function(a){return function(){var c;return c=w(arguments),b.push(c),a.fd.append.apply(a.fd,c)}}(this)}),x[o]=a[o],n=a[o]=function(){var b,i,j,n,q,r,s,w,y,A,B,C,D,E,F,G,H;return b=-1,H=new x[o],A={},D=null,r=void 0,E=void 0,B=void 0,y=function(){var a,c,d,e;if(B.status=D||H.status,D===b&&10>u||(B.statusText=H.statusText),D!==b){e=p(H.getAllResponseHeaders());for(a in e)d=e[a],B.headers[a]||(c=a.toLowerCase(),B.headers[c]=d)}},w=function(){"responseText"in H&&(B.text=H.responseText),"responseXML"in H&&(B.xml=H.responseXML),"response"in H&&(B.data=H.response)},G=function(){q.status=B.status,q.statusText=B.statusText},F=function(){"text"in B&&(q.responseText=B.text),"xml"in B&&(q.responseXML=B.xml),"data"in B&&(q.response=B.data)},n=function(a){for(;a>i&&4>i;)q[l]=++i,1===i&&q[g]("loadstart",{}),2===i&&G(),4===i&&(G(),F()),q[g]("readystatechange",{}),4===i&&setTimeout(j,0)},j=function(){r||q[g]("load",{}),q[g]("loadend",{}),r&&(q[l]=0)},i=0,C=function(a){var b,d;return 4!==a?void n(a):(b=x.listeners(c),d=function(){var a;return b.length?(a=b.shift(),2===a.length?(a(A,B),d()):3===a.length&&A.async?a(A,B,d):d()):n(4)},void d())},q=A.xhr=f(),H.onreadystatechange=function(){try{2===H[l]&&y()}catch(a){}4===H[l]&&(E=!1,y(),w()),C(H[l])},s=function(){r=!0},q[k]("error",s),q[k]("timeout",s),q[k]("abort",s),q[k]("progress",function(){3>i?C(3):q[g]("readystatechange",{})}),v(e,H,q),("withCredentials"in H||x.addWithCredentials)&&(q.withCredentials=!1),q.status=0,q.open=function(a,b,c,d,e){i=0,r=!1,E=!1,A.headers={},A.headerNames={},A.status=0,B={},B.headers={},A.method=a,A.url=b,A.async=c!==!1,A.user=d,A.pass=e,C(1)},q.send=function(b){var c,e,f,g,i,j,k,l;for(l=["type","timeout","withCredentials"],j=0,k=l.length;k>j;j++)e=l[j],f="type"===e?"responseType":e,f in q&&(A[e]=q[f]);A.body=b,i=function(){var b,c,d,g,i,j;for(E=!0,H.open(A.method,A.url,A.async,A.user,A.pass),i=["type","timeout","withCredentials"],d=0,g=i.length;g>d;d++)e=i[d],f="type"===e?"responseType":e,e in A&&(H[f]=A[e]);j=A.headers;for(b in j)c=j[b],H.setRequestHeader(b,c);a[h]&&A.body instanceof a[h]&&(A.body=A.body.fd),H.send(A.body)},c=x.listeners(d),(g=function(){var a,b;return c.length?(a=function(a){return"object"!=typeof a||"number"!=typeof a.status&&"number"!=typeof B.status?void g():(t(a,B),z.call(a,"data")<0&&(a.data=a.response||a.text),void C(4))},a.head=function(a){return t(a,B),C(2)},a.progress=function(a){return t(a,B),C(3)},b=c.shift(),1===b.length?a(b(A)):2===b.length&&A.async?b(A,a):a()):i()})()},q.abort=function(){D=b,E?H.abort():q[g]("abort",{})},q.setRequestHeader=function(a,b){var c,d;c=null!=a?a.toLowerCase():void 0,d=A.headerNames[c]=A.headerNames[c]||a,A.headers[d]&&(b=A.headers[d]+", "+b),A.headers[d]=b},q.getResponseHeader=function(a){var b;return b=null!=a?a.toLowerCase():void 0,B.headers[b]},q.getAllResponseHeaders=function(){return p(B.headers)},H.overrideMimeType&&(q.overrideMimeType=function(){return H.overrideMimeType.apply(H,arguments)}),H.upload&&(q.upload=A.upload=f(),v(e.concat(m),H.upload,q.upload)),q},"function"==typeof this.define&&this.define.amd?define("xhook",[],function(){return x}):(this.exports||this).xhook=x}).call(this,window);

   	/*
	   	xhook.before(function(request) {

	        //  if(request.url.match(/^.*api\/award.*$/))
	        //     console.trace();
	        // 	true;// request.body = request.body.replace(/-2/g,'0'); 
	        // if(request.body) request.body = request.body.replace(/poitns/g,'points');
	    });
	*/

    xhook.after(function(request, response) {
       
       evalAjax(request.url, request.method, response.text);


        if (!request.url.match(/^.*(time|api\/clientLog).*$/)) {
            console.group("AJAX Event: %s", decodeURIComponent(request.url));

            console.log(request);

            console.log(request.method === "POST" || request.method === "PUT" ? response.text : response.text !== "" ? JSON.parse(response.text) : "No response");
            console.groupEnd();

        }
    
    });


}
else if(bowser.firefox)
{
	console.log("Using Firefox");
	
	(function() {
	    var XHR = XMLHttpRequest.prototype;
	    // Remember references to original methods
	    var open = XHR.open;
	    var send = XHR.send;
	    

	    // Overwrite native methods
	    // Collect data: 
	    XHR.open = function(method, url) {
	        this._method = method;
	        this._url = url;
	        return open.apply(this, arguments);
	    };

	    // Implement "ajaxSuccess" functionality
	    XHR.send = function(postData) {
	        this.addEventListener('load', function() {
	            
	            	evalAjax(this._url, this._method, this.responseText);
	                  
	        });
	        return send.apply(this, arguments);
	    };
	})();


}
var names = [];
var draggables = [];
var draggablesSelected = [];
var dragging = false;
var behaviors_visible = false;
var clickPositive = false;
var clickNegative = false;
var numStudents = 12999;
var navShowing = true;
var checkForBehaviors;
var checkForSelected;
var numSelected = 0;
var checkForPopup;
var oldZ = 0;
var entry;
var options = [];
var isPositive = false;
var isNegative = false;

function evalAjax(u, m, r){

	 if (u.match(/^https:\/\/teach\.classdojo\.com\/api\/dojoClass\/.+\/student\?.+$/)) {
            var jsonData = JSON.parse(r);
            numStudents = jsonData['_items'].length
        } else if (u.match(/^https:\/\/teach\.classdojo\.com\/api\/dojoClass\?withPending.+$/)) {
            var jsonData = JSON.parse(r);
            numClasses = jsonData['_items'].length;
            for (i = 0; i < numClasses; i++) {
            	var t = true;
            }
        } else if (u.match(/^https:\/\/teach\.classdojo\.com\/api\/dojoClass\/.+\/behavior\?.+$/)) {
            	var t = true;
        } else if (u.match(/^https:\/\/classdojo\.pubnub\.com\/subscribe\/.+$/)) {
            var jsonData = JSON.parse(r);

            if (jsonData[0].length > 0) {
                console.log("Greater than Zero!");
            }
        }

}

function dojoStudent(first, last, id) {
    this.firstName = first;
    this.lastName = last;
    this._id = id;
    this.name = function() {
        return this.firstName + " " + this.lastName;
    };

}

function dojoClass(id, title, studentCount) {
    this._id = id;
    this.name = title;
    this.studentCount = studentCount;

}

function coord(x, y) {
    this.x = x;
    this.y = y;
    this.left = function() {
        return this.x;
    };
    this.top = function() {
        return this.y;
    };
}

function RGBcolor(r, g, b) {
    this.r = r;
    this.g = g;
    this.b = b;
    this.rgb = function() {
        return "rgb(" + this.r + "," + this.g + "," + this.b + ")";
    }
    this.rgba = function(a) {
        return "rgba(" + this.r + "," + this.g + "," + this.b + "," + a + ")";
    }
}

function option(c, s, k, v) {
    this._class = c;
    this._student = s;
    this.k = k;
    this.v = v;

}

/*
 * API calls:
 *
 * Get all students' information for a given class (using class-id)
 * 	[GET] https://teach.classdojo.com/api/dojoClass/{class-id}/student
 *
 * Get individual student's information for a given class (using class-id & student-id)
 *  [GET] https://teach.classdojo.com/api/dojoClass/{class-id}/student/{student-id}
 *
 * Get class information (using class-id)
 *  [GET] https://teach.classdojo.com/api/dojoClass/{class-id}
 *
 * Get all classes' information
 *  [GET] https://teach.classdojo.com/api/dojoClass
 *
 * Get all awards given
 *  [GET] https://teach.classdojo.com/api/award?classId={class-id}
 *
 * Get all awards given within a date range  * Add 6 to hours
 * 			dateObj = new Date(year, month[, day[, hour[, minutes[, seconds[, milliseconds]]]]]);
 * 			dateObj.toJSON()
 *
 *  [GET] https://teach.classdojo.com/api/award/?from={json-start-date}&to={json-end-date}&classId={class-id}
 *
 * Get all students in school
 *  [GET] https://teach.classdojo.com/api/dojoStudent/
 *
 * Get behaviors for a class (using class-id)
 *  [GET] https://teach.classdojo.com/api/dojoClass/{class-id}/behavior
 *
 *
 */




keyCodeToChar = {
    8: "Backspace",
    9: "Tab",
    13: "Enter",
    16: "Shift",
    17: "Ctrl",
    18: "Alt",
    19: "Pause/Break",
    20: "Caps Lock",
    27: "Esc",
    32: "Space",
    33: "Page Up",
    34: "Page Down",
    35: "End",
    36: "Home",
    37: "Left",
    38: "Up",
    39: "Right",
    40: "Down",
    45: "Insert",
    46: "Delete",
    48: "0",
    49: "1",
    50: "2",
    51: "3",
    52: "4",
    53: "5",
    54: "6",
    55: "7",
    56: "8",
    57: "9",
    65: "A",
    66: "B",
    67: "C",
    68: "D",
    69: "E",
    70: "F",
    71: "G",
    72: "H",
    73: "I",
    74: "J",
    75: "K",
    76: "L",
    77: "M",
    78: "N",
    79: "O",
    80: "P",
    81: "Q",
    82: "R",
    83: "S",
    84: "T",
    85: "U",
    86: "V",
    87: "W",
    88: "X",
    89: "Y",
    90: "Z",
    91: "Windows",
    93: "Right Click",
    96: "Numpad 0",
    97: "Numpad 1",
    98: "Numpad 2",
    99: "Numpad 3",
    100: "Numpad 4",
    101: "Numpad 5",
    102: "Numpad 6",
    103: "Numpad 7",
    104: "Numpad 8",
    105: "Numpad 9",
    106: "Numpad *",
    107: "Numpad +",
    109: "Numpad -",
    110: "Numpad .",
    111: "Numpad /",
    112: "F1",
    113: "F2",
    114: "F3",
    115: "F4",
    116: "F5",
    117: "F6",
    118: "F7",
    119: "F8",
    120: "F9",
    121: "F10",
    122: "F11",
    123: "F12",
    144: "Num Lock",
    145: "Scroll Lock",
    182: "My Computer",
    183: "My Calculator",
    186: ";",
    187: "=",
    188: ",",
    189: "-",
    190: ".",
    191: "/",
    192: "`",
    219: "[",
    220: "\\",
    221: "]",
    222: "'"
};


function addGlobalStyle(css) {
    var head, style;
    head = document.getElementsByTagName('head')[0];
    if (!head) {
        return;
    }
    style = document.createElement('style');
    style.type = 'text/css';
    style.innerHTML = css;
    head.appendChild(style);
}

var text = document.getElementsByClassName("t");
var toV = '';

var observer = new MutationObserver(function(mutations) {

    mutations.forEach(function(mutation) {

        entry = {
            //  mutation: mutation,

            el: mutation.target.parentElement,
            value: mutation.target.textContent,
            oldValue: mutation.oldValue,
            type: mutation.type
        };
        // console.log("Recording mutation:", entry);



    });
    console.log(toV);
    console.log(parseInt(entry.value));
    if (parseInt(entry.value) !== toV) {
        var thisBubble = entry.el;
        toV = isNaN(parseInt(entry.value)) ? 0 : parseInt(entry.value) * 1;
        if (toV >= 10) {
            oldZ = thisBubble.parentNode.parentNode.parentNode.style.zIndex;
            thisBubble.parentNode.parentNode.parentNode.style.zIndex = "999999";
            TweenMax.to(thisBubble, 1, {
                scale: 8,
                yoyo: true,
                repeat: 1,
                rotationX: "+=720deg",
                onComplete: function() {
                    thisBubble.parentNode.parentNode.parentNode.style.zIndex = oldZ;
                }
            });
            TweenMax.to(thisBubble, 1, {
                backgroundColor: "rgb(170,0,255)"
            });

            //  thisBubble.style.backgroundColor = "rgb(170,0,255)"; 
            thisBubble.style.color = "white";
            thisBubble.parentNode.parentNode.style.border = "rgba(170,0,255,0.5) solid 4px";
        } else if (toV >= 5) {
            thisBubble.style.backgroundColor = "rgb(0,170,255)";
            thisBubble.style.color = "white";
            thisBubble.parentNode.parentNode.style.border = "rgba(0,170,255,0.5) solid 4px";
        } else if (toV >= 0) {
            thisBubble.style.backgroundColor = "rgb(0,218,60)";
            thisBubble.style.color = "white";
            thisBubble.parentNode.parentNode.style.border = "rgba(0,218,60,0.5) solid 4px";
        } else if (toV > -5) {
            thisBubble.style.backgroundColor = "rgb(244,243,40)";
            thisBubble.style.color = "black";
            thisBubble.parentNode.parentNode.style.border = "rgba(244,243,40,0.5) solid 4px";
        } else if (toV > -10) {
            thisBubble.style.backgroundColor = "rgb(253,134,3)";
            thisBubble.style.color = "black";
            thisBubble.parentNode.parentNode.style.border = "rgba(253,134,3,0.5) solid 4px";
        } else {
            thisBubble.style.backgroundColor = "rgb(223,21,26)";
            thisBubble.style.color = "black";
            thisBubble.parentNode.parentNode.style.border = "rgba(223,21,26,0.5) solid 4px";
        }
        //     entry.el.innerHTML = toV;

        console.log(toV);

    }

});


function mouseWheelHandler(e) {
    var e = window.event || e; // old IE support

    e.preventDefault();
    e.stopPropagation;

    var delta = Math.max(-1, Math.min(1, (e.wheelDelta || -e.detail)));
    if (delta > 0) {
        clickPositive = true;
    } else {
        clickNegative = true;
    }
    this.click();
}

addGlobalStyle(' .hotKey {opacity: 0.05;} .hotKey:hover {opacity: 1.0;} .positive-behaviors-list, .negative-behaviors-list { display: visible; } .leaderboardStudentTile:hover {background-color: rgba(20,210,40,0.2);}  .leaderboard-student-tile .bubble .student-number.zero {display:block; top:-16px; right:-16px;} span.student-number.negative::first-letter {font-size:0px;}');







var script = document.createElement("script");
script.setAttribute("src", "https://cdnjs.cloudflare.com/ajax/libs/gsap/1.15.0/TweenMax.min.js");

script.addEventListener('load', function() {
    var script2 = document.createElement("script");
    script2.setAttribute("src", "https://cdnjs.cloudflare.com/ajax/libs/gsap/1.15.0/utils/Draggable.min.js");
    script2.addEventListener('load', function() {

        var checkExist = setInterval(function() {
            if ($('.leaderboard-student-tile').length === numStudents) {

                clearInterval(checkExist);




                var li = document.createElement("a");
                li.className = 'help-tab';
                li.id = 'hide_stuff';
                li.innerHTML = '<span class="glyphicon glyphicon-eye-close"></span>Hide Extras';
                var t = document.getElementsByClassName("help-container").item(0);

                t.appendChild(li);
                li.addEventListener('click', function() {
                    $('div.navbar.navbar-static-top.mojette-navbar').toggle();
                    $('.help-tab[target=_blank]').toggle();
                    // $('div.help-container').toggle();
                    if (navShowing === true) {
                        document.getElementById('hide_stuff').innerHTML = '<span class="glyphicon glyphicon-eye-open"></span>';
                        navShowing = false;
                    } else {
                        document.getElementById('hide_stuff').innerHTML = '<span class="glyphicon glyphicon-eye-close"></span>Hide Extras';
                        navShowing = true;
                    }

                });


                $(".leaderboard-student-tile").wrap('<div class="leaderboardStudentTile" style="display:inline-block; position:absolute; border-radius:5px;"></div>');

                // $('.first').hisResText();
                //  $('.last').hisResText();

                var tiles = document.getElementsByClassName("leaderboard-student-tile");
                // var tiles = document.getElementsByClassName("leaderboardStudentTile");
                for (i = 0; i < tiles.length; i++) {
                    names[i] = tiles[i].children[1].textContent;

                    var thisBubble = tiles[i].children[3].children[0];

                    toVv = isNaN(parseInt(thisBubble.textContent)) ? 0 : parseInt(thisBubble.textContent) * 1;
                    if (toVv >= 10) {
                        thisBubble.style.backgroundColor = "rgb(170,0,255)";
                        thisBubble.style.color = "white";
                        thisBubble.parentNode.parentNode.style.border = "rgba(170,0,255,0.5) solid 4px";
                    } else if (toVv >= 5) {
                        thisBubble.style.backgroundColor = "rgb(0,170,255)";
                        thisBubble.style.color = "white";
                        thisBubble.parentNode.parentNode.style.border = "rgba(0,170,255,0.5) solid 4px";
                    } else if (toVv >= 0) {
                        thisBubble.style.backgroundColor = "rgb(0,218,60)";
                        thisBubble.style.color = "white";
                        thisBubble.parentNode.parentNode.style.border = "rgba(0,218,60,0.5) solid 4px";
                    } else if (toVv > -5) {
                        thisBubble.style.backgroundColor = "rgb(244,243,40)";
                        thisBubble.style.color = "black";
                        thisBubble.parentNode.parentNode.style.border = "rgba(244,243,40,0.5) solid 4px";
                    } else if (toVv > -10) {
                        thisBubble.style.backgroundColor = "rgb(253,134,3)";
                        thisBubble.style.color = "black";
                        thisBubble.parentNode.parentNode.style.border = "rgba(253,134,3,0.5) solid 4px";
                    } else {
                        thisBubble.style.backgroundColor = "rgb(223,21,26)";
                        thisBubble.style.color = "black";
                        thisBubble.parentNode.parentNode.style.border = "rgba(223,21,26,0.5) solid 4px";
                    }

                    observer.observe(thisBubble, {
                        characterData: true,
                        characterDataOldValue: true,
                        subtree: true
                    });

                    //     names[i] = tiles[i].children[0][1].textContent;   
                }
                for (i = 0; i < tiles.length; i++) {


                    var span = document.createElement("div");
                    if (i <= 11) {
                        span.innerHTML = "F" + (i + 1) + "";

                    } else if (i === 12) {
                        span.innerHTML = "PS";
                    } else if (i === 13) {
                        span.innerHTML = "SL";
                    } else if (i === 14) {
                        span.innerHTML = "PB";
                    }

                    span.style.bottom = "15px";
                    span.style.right = "15px";
                    span.style.position = "absolute";
                    span.style.border = "2px solid #333";
                    span.style.borderRadius = "5px";

                    span.style.background = "#ffe";
                    span.style.fontFamily = "monospace";
                    span.style.textAlign = "center";
                    span.style.lineHeight = "2.5";
                    span.style.height = "30px";
                    span.style.width = "30px";
                    span.style.fontSize = "80%";
                    span.className = "hotKey";

                    span.addEventListener('load', function() {



                    });
                    tiles[i].parentNode.appendChild(span);



                    //  tiles[i].style.position="absolute";

                    //   draggables[i] = Draggable.create(tiles[i], {type:"top,left", force3D:false, trigger:tiles[i].children[4],
                    draggables[i] = Draggable.create(tiles[i].parentNode, {
                        type: "top,left",
                        force3D: false,
                        //trigger:tiles[i].parentNode.children[1],
                        onDragEnd: function(e) {
                            e.preventDefault();
                            e.stopPropagation();
                            $('body').css('background-image', '');

                            var name = this.target.children[0].children[1].textContent;

                            var vX = name + "X";
                            var vY = name + "Y";
                            //   var rect = getOffsetRect(this.target);
                            //  var rect2 = document.getBoundingClientRect();


                            localStorage.setItem(vX, this.endX);
                            // localStorage.setItem(vX,  this.target.style.left);

                            localStorage.setItem(vY, this.endY);
                            // localStorage.setItem(vY,  this.target.style.top);


                        },
                        onClick: function(e) {
                            e.preventDefault();
                            e.stopPropagation;
                            //   this.target.children[0].click();
                            return false;



                        },
                        onDragStart: function(e) {
                            $('body').css('background-image', 'url(//upload.wikimedia.org/wikipedia/commons/7/7c/Lightblue_empty_grid.svg)');
                        }
                    });


                }
                //  console.log(tiles);


                for (i = 0; i < tiles.length; i++) {

                    tiles[i].addEventListener("mousewheel", mouseWheelHandler, false);
                }


                for (i = 0; i < names.length; i++) {
                    var vX = names[i] + "X";
                    var vY = names[i] + "Y";
                    if (localStorage.getItem(vX) !== null && localStorage.getItem(vY) !== null) {
                        //   TweenMax.to(tiles[i],5,{left:localStorage.getItem(vX), top:localStorage.getItem(vY)});
                        TweenMax.to(tiles[i].parentNode, 5, {
                            left: localStorage.getItem(vX),
                            top: localStorage.getItem(vY)
                        });
                        // console.log("values");
                    } else {
                        TweenMax.to(tiles[i].parentNode, 5, {
                            left: i * 20,
                            top: i * 20
                        });
                    }
                }

                /*  $('.leaderboard-student-tile').bind('contextmenu', function (e) {
                 
                 e.preventDefault();
                 });*/



                $(document).keyup(function(e) {
                    if (!$('input[type=text]').length) {


                        if ($('.behavior-tile').length) {
                            var tiles = document.getElementsByClassName("behavior-tile");
                            if (e.which >= 49 && e.which <= 57) {
                                tiles.item(e.which - 49).click();
                                e.preventDefault();

                            } else if (e.which === 48) {
                                tiles.item(9).click();
                                e.preventDefault();

                            }

                        } else if ($('.leaderboard-student-tile').length) {
                            var tiles = document.getElementsByClassName("leaderboard-student-tile");

                            if (e.which >= 112 && e.which <= 123) {
                                tiles.item(e.which - 112).click();
                                e.preventDefault();

                            } else if (e.which === 44) {
                                tiles.item(12).click();
                                e.preventDefault();
                            } else if (e.which === 145) {
                                tiles.item(13).click();
                                e.preventDefault();
                            } else if (e.which === 19) {
                                tiles.item(14).click();
                                e.preventDefault();
                            } else if (e.which === 65) {
                                document.getElementById('award_multiple_trigger').click();
                                var checkExist2 = setInterval(function() {
                                    if ($('#select_all').length) {
                                        clearInterval(checkExist2);
                                        document.getElementById('select_all').click();

                                        var checkExist3 = setInterval(function() {

                                            if ($('#give-multiple-awards-button').is(":disabled")) {
                                                return false;
                                            } else {
                                                clearInterval(checkExist3);
                                                document.getElementById('give-multiple-awards-button').click();
                                            }

                                        }, 200);
                                    }
                                }, 200);


                            }

                        }


                    }

                });

                $(document).keydown(function(e) {
                    if (!$('input[type=text]').length)
                        e.preventDefault();

                });

                checkForBehaviors = setInterval(function() {
                    if ($('.behavior-tile').length) {
                        if (!behaviorsVisible) {
                            if (clickPositive) {
                                document.getElementsByClassName('positive-behaviors-list').item(0).getElementsByClassName('behavior-tile').item(1).click();
                                clickPositive = false;
                            } else if (clickNegative) {
                                document.getElementsByClassName('negative-behaviors-list').item(0).getElementsByClassName('behavior-tile').item(4).click();
                                clickNegative = false;
                            } else {
                                $('.behavior-tile').css('width', '10%');
                                $('.behavior-tile h4').css('font-size', '80%');
                                $('.positive-behaviors-list').show();
                                $('.positive-behaviors-list').prev().hide();
                                $('.negative-behaviors-list').show();
                            }
                        }
                        behaviorsVisible = true;
                        //clearInterval(checkforBehaviors);
                    } else {
                        behaviorsVisible = false;
                    }
                }, 200);

                checkForPopup = setInterval(function() {
                    if ($('.award-notification-view').length) {
                        if (!behaviorsVisible) {
                            if (isPositive) {
                                document.getElementsByClassName('positive-behaviors-list').item(0).getElementsByClassName('behavior-tile').item(1).click();
                                clickPositive = false;
                            } else if (isNegative) {
                                document.getElementsByClassName('negative-behaviors-list').item(0).getElementsByClassName('behavior-tile').item(4).click();
                                clickNegative = false;
                            } else {
                                $('.behavior-tile').css('width', '10%');
                                $('.behavior-tile h4').css('font-size', '80%');
                                $('.positive-behaviors-list').show();
                                $('.positive-behaviors-list').prev().hide();
                                $('.negative-behaviors-list').show();
                            }
                        }
                        behaviorsVisible = true;
                        //clearInterval(checkforBehaviors);
                    } else {
                        behaviorsVisible = false;
                    }
                }, 200);


                checkForSelected = setInterval(function() {
                    if ($('.leaderboard-student-tile.selected').length) {
                        if ($('.leaderboard-student-tile.selected').length !== numSelected) {
                            if (numSelected === 0) {
                                for (i = 0; i < draggables.length; i++) {

                                    draggables[i][0].disable();
                                }
                            }
                            numSelected = $('.leaderboard-student-tile.selected').length;

                            var selectedTiles = document.getElementsByClassName('selected');

                            for (i = 0; i < draggablesSelected.length; i++) {
                                draggablesSelected[i][0].kill();
                            }


                            for (i = 0; i < numSelected; i++) {
                                draggablesSelected[i] = Draggable.create(selectedTiles[i].parentNode, {
                                    type: "top,left",
                                    force3D: false,
                                    trigger: $('.leaderboardStudentTile').has('.leaderboard-student-tile.selected'),
                                    onDragEnd: function(e) {
                                        e.preventDefault();
                                        e.stopPropagation();
                                        $('body').css('background-image', '');

                                        var name = this.target.children[0].children[1].textContent;

                                        var vX = name + "X";
                                        var vY = name + "Y";
                                        //   var rect = getOffsetRect(this.target);
                                        //  var rect2 = document.getBoundingClientRect();


                                        localStorage.setItem(vX, this.endX);
                                        // localStorage.setItem(vX,  this.target.style.left);

                                        localStorage.setItem(vY, this.endY);
                                        // localStorage.setItem(vY,  this.target.style.top);


                                    },
                                    onClick: function(e) {
                                        e.preventDefault();
                                        e.stopPropagation;
                                        //   this.target.children[0].click();
                                        return false;



                                    },
                                    onDragStart: function(e) {
                                        $('body').css('background-image', 'url(http://upload.wikimedia.org/wikipedia/commons/7/7c/Lightblue_empty_grid.svg)');
                                    }
                                });
                            }




                        } else {
                            return false;
                        }

                    } else {
                        if (numSelected !== 0) {
                            for (i = 0; i < draggables.length; i++) {
                                draggables[i][0].enable();
                            }
                            for (i = 0; i < draggablesSelected.length; i++) {
                                draggablesSelected[i][0].kill();
                            }
                        }
                        numSelected = 0;

                    }


                }, 200);


            }
        }, 1000);




    }, false);
    document.body.appendChild(script2);
}, false);
document.body.appendChild(script);