diff --git a/src/core/static/admin/admin.css b/src/core/static/admin/admin.css new file mode 100644 index 0000000..5a9cd07 --- /dev/null +++ b/src/core/static/admin/admin.css @@ -0,0 +1,31 @@ +#header { + height: 50px; + background: #10284e; + color: #fff; +} + +#branding h1{ + color: #fff; +} + +a:link, +a:visited{ + color: #10284e; +} + +div.breadcrumbs { + background: #30caa0; + color: #10284e; +} +div.breadcrumbs a{ + color: #111; +} + +.module h2, .module caption, .inline-group h2 { + background: #30caa0; +} + +.button, input[type=submit], input[type=button], .submit-row input, a.button { + background: #10284e; + color: #fff; +} \ No newline at end of file diff --git a/src/core/static/admin/styles.css b/src/core/static/admin/styles.css new file mode 100644 index 0000000..e69de29 diff --git a/src/core/static/mainapp/css/styles.css b/src/core/static/mainapp/css/styles.css index 10260ca..d23cbb4 100644 --- a/src/core/static/mainapp/css/styles.css +++ b/src/core/static/mainapp/css/styles.css @@ -27,3 +27,5 @@ } + + diff --git a/src/core/static/mainapp/icons/favicon.ico b/src/core/static/mainapp/icons/favicon.ico new file mode 100644 index 0000000..38941e9 Binary files /dev/null and b/src/core/static/mainapp/icons/favicon.ico differ diff --git a/src/core/static/whiteboard/css/style.css b/src/core/static/whiteboard/css/style.css new file mode 100644 index 0000000..5913939 --- /dev/null +++ b/src/core/static/whiteboard/css/style.css @@ -0,0 +1,218 @@ +* { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; } +html { + height: 100%; +} +body { + font-family: "Segoe UI Web Light", "Segoe UI Light", "Segoe UI Web Regular", "Segoe UI", "HelveticaNeue-Light", "Helvetica Neue Light", "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif; + font-size: 1.2rem; + margin: 1em; + color: #fff; + background: url(../images/grid-pattern.png) left top repeat, + -webkit-radial-gradient(50% 15%, #2c98dd, #1a5f96) no-repeat; + background: url(../images/grid-pattern.png) left top repeat, + -moz-radial-gradient(50% 15%, #2c98dd, #1a5f96) no-repeat; + background: url(../images/grid-pattern.png) left top repeat, + -ms-radial-gradient(50% 15%, #2c98dd, #1a5f96) no-repeat; + background: url(../images/grid-pattern.png) left top repeat, + -o-radial-gradient(50% 15%, #2c98dd, #1a5f96) no-repeat; + background: url(../images/grid-pattern.png) left top repeat, + radial-gradient(circle farthest-side at 50% 15%, #2c98dd, #1a5f96) no-repeat; + background-color: #1a5f96; +} +body.alt { + background: url(../images/grid-pattern.png) left top repeat, + -webkit-radial-gradient(50% 15%, #1c802e, #012e13) no-repeat; + background: url(../images/grid-pattern.png) left top repeat, + -moz-radial-gradient(50% 15%, #1c802e, #012e13) no-repeat; + background: url(../images/grid-pattern.png) left top repeat, + -ms-radial-gradient(50% 15%, #1c802e, #012e13) no-repeat; + background: url(../images/grid-pattern.png) left top repeat, + -o-radial-gradient(50% 15%, #1c802e, #012e13) no-repeat; + background: url(../images/grid-pattern.png) left top repeat, + radial-gradient(circle farthest-side at 50% 15%, #1c802e, #012e13) no-repeat; + background-color: #012e13; +} +body.alt2 { + background: url(../images/grid-pattern.png) left top repeat, + -webkit-radial-gradient(50% 15%, #ababab, #505050) no-repeat; + background: url(../images/grid-pattern.png) left top repeat, + -moz-radial-gradient(50% 15%, #ababab, #505050) no-repeat; + background: url(../images/grid-pattern.png) left top repeat, + -ms-radial-gradient(50% 15%, #ababab, #505050) no-repeat; + background: url(../images/grid-pattern.png) left top repeat, + -o-radial-gradient(50% 15%, #ababab, #505050) no-repeat; + background: url(../images/grid-pattern.png) left top repeat, + radial-gradient(circle farthest-side at 50% 15%, #ababab, #505050) no-repeat; + background-color: #505050; +} +header { + margin-bottom: 1em; +} +h1, h2, h3 { + margin: 0; + font-weight: normal; +} +h1 { + font-size: 3.375rem; + text-transform: lowercase; + text-shadow: 1px 1px 3px rgba(0, 0, 0, 0.8); +} +h2 { + font-size: 1rem; + text-transform: uppercase; + line-height: 1.6rem; + text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.8); +} +a { + color: #fff; + text-decoration: underline; +} +footer { + font-size: .75em; + color: silver; + position: absolute; + bottom: 1em; + right: 1em; +} +#drawCanvas { + -ms-touch-action: none; + position: absolute; + top: 0; + left: 0; +} +#drawCanvas:hover, #drawCanvas:active { + cursor: url('data:image/x-icon;base64,AAACAAEAICAAAAEAAQCoEAAAFgAAACgAAAAgAAAAQAAAAAEAIAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGgYDGhoGA70aBgO9GgYDNwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABoGAxoaBgO9fnl5/4yHh/8aBgO9GgYDNwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaBgMaGgYDvX55ef9XTEr/v7+//62oqP8aBgO9GgYDNwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGgYDGhoGA71+eXn/V0xK/7+/v/9pXlz/6enp/8jEw/8aBgO9GgYDNwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABoGAxoaBgO9fnl5/6urq/+/v7//aV5c/+np6f+rpKL//////87Jyf8aBgO9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaBgMaGgYDvX55ef+rq6v/v7+//9XV1f/p6en/q6Si//////+vqKf/6Obl/xoGA70AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGgYDGhoGA71+eXn/q6ur/7+/v//V1dX/6enp//j4+P//////r6in/+jm5f97b27/GgYDvQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABoGAxoaBgO9fnl5/6urq/+/v7//1dXV/+np6f/4+Pj////////////o5uX/e29u/87Jyf8aBgO9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaBgMaGgYDvX55ef+rq6v/v7+//9XV1f/p6en/+Pj4/////////////////3tvbv/Oycn/6Obl/xoGA70AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGgYDGhoGA71+eXn/q6ur/7+/v//V1dX/6enp//j4+P////////////////97b27/zsnJ///////o5uX/GgYDvQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABoGAxoaBgO9fnl5/6urq/+/v7//1dXV/+np6f/4+Pj/////////////////e29u/87Jyf//////6Obl/xoGA70aBgM3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaBgMaGgYDvX55ef+rq6v/v7+//9XV1f/p6en/+Pj4/////////////////3tvbv/Oycn//////+jm5f8aBgO9GgYDNwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGgYDGhoGA71+eXn/q6ur/7+/v//V1dX/6enp//j4+P////////////////97b27/zsnJ///////o5uX/GgYDvRoGAzcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABoGAxoaBgO9fnl5/1dMSv+/v7//1dXV/+np6f/4+Pj/////////////////e29u/87Jyf//////6Obl/xoGA70aBgM3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaBgMaGgYDvX55ef+rq6v/v7+//2leXP/p6en/+Pj4/////////////////3tvbv/Oycn//////+jm5f8aBgO9GgYDNwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGgYDGhoGA71+eXn/q6ur/7+/v//V1dX/6enp/6ukov////////////////97b27/zsnJ///////o5uX/GgYDvRoGAzcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABoGAxoaBgO9fnl5/6urq/+/v7//1dXV/+np6f/4+Pj//////6+op//o5uX/VUZE/87Jyf//////6Obl/xoGA70aBgM3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaBgMaGgYDvX55ef+rq6v/v7+//9XV1f/p6en/+Pj4////////////6Obl/1VGRP9VRkT/zsnJ/+jm5f8aBgO9GgYDNwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGgYDGhoGA71+eXn/q6ur/7+/v//V1dX/6enp//j4+P////////////////9VRkT/GgYDNxoGAzcaBgM3GgYDvRoGAzcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABoGAxoaBgO9fnl5/6urq/+/v7//1dXV/+np6f/4+Pj/////////////////VUZE/xoGAzcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaBgMaGgYDvX55ef+rq6v/v7+//9XV1f/p6en/+Pj4/////////////////1VGRP8aBgM3AAAAAAAA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'), + pointer; +} +#colorSwatch { + position: absolute; + bottom: 20px; + right: 20px; +} + + +input[type=radio] { + margin: 0; + display: none; + width: 0; +} +input[type=radio]:checked + label::after { + content: '\2712'; + position: absolute; + left: 8px; +} + +label { + display: inline-block; + width: 48px; height: 48px; + position: relative; + padding-right: 5px; + border-radius: 50%; + text-shadow: 1px 1px 2px #000; + color: #fff; + font-size: 32px; + line-height: 46px; +} +label[for=color01] {background: gold;} +label[for=color02] {background: darkorange;} +label[for=color03] {background: navy;} +label[for=color04] {background: yellowgreen;} +label[for=color05] {background: firebrick;} +label[for=color06] {background: powderblue;} + +footer { + margin-top: 1.5em; +} + +/* Occupancy Animation */ + +.anim { + transform: scale(1.5); +} +header div { + float: left; +} +.bubble { + -webkit-transition: all .5s; + transition: all .5s; +} +.bubble { + position: absolute; + top: 20px; + right: 15px; + min-width: 48px; + height: 48px; + padding: .3em; + display: inline-block; + border-radius: 8px; + line-height: .9em; + color: #fff; + text-align: center; + background: #0142a3; +} +.bubble span { + display: block; + margin: 5px auto; + font-size: 10px; +} +.bubble #occupancy { + font-size: 32px; +} +.github { + display: none; +} + +@media all and (orientation: landscape) { + canvas { + display: inline-block; + margin-right: 10px; + } + #colorSwatch { + display: inline-block; + width: 50px; + top: 120px; + right: 20px; + } + .alt2 #colorSwatch { + top: 30px; + } + .bubble { + top: 0; + position: relative; + min-width: 60px; + height: 60px; + padding: .4em; + margin: 5px 10px 20px 30px; + display: inline-block; + border-radius: 8px; + line-height: 1.05em; + color: #fff; + text-align: center; + background: #0142a3; + } + .bubble:after { + content: ""; + position: absolute; + bottom: -15px; + right: 28px; + border: 0; + border-left-width: 20px; + border-bottom-width: 15px; + border-style: solid; + border-color: transparent #0142a3; + display: block; + width: 0; + } + .bubble span { + display: block; + margin: 5px auto; + font-size: 12px; + } + .bubble #occupancy { + font-size: 40px; + text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.8); + } + .github { + display: block; + } +} \ No newline at end of file diff --git a/src/core/static/whiteboard/images/grid-pattern.png b/src/core/static/whiteboard/images/grid-pattern.png new file mode 100644 index 0000000..1f036c6 Binary files /dev/null and b/src/core/static/whiteboard/images/grid-pattern.png differ diff --git a/src/core/static/whiteboard/js/app.js b/src/core/static/whiteboard/js/app.js new file mode 100644 index 0000000..9b169c3 --- /dev/null +++ b/src/core/static/whiteboard/js/app.js @@ -0,0 +1,124 @@ +(function() { + /* Canvas */ + + var canvas = document.getElementById('drawCanvas'); + var ctx = canvas.getContext('2d'); + var color = document.querySelector(':checked').getAttribute('data-color'); + + canvas.width = Math.min(document.documentElement.clientWidth, window.innerWidth || 300); + canvas.height = Math.min(document.documentElement.clientHeight, window.innerHeight || 300); + + ctx.strokeStyle = color; + ctx.lineWidth = '3'; + ctx.lineCap = ctx.lineJoin = 'round'; + + /* Mouse and touch events */ + + document.getElementById('colorSwatch').addEventListener('click', function() { + color = document.querySelector(':checked').getAttribute('data-color'); + }, false); + + var isTouchSupported = 'ontouchstart' in window; + var isPointerSupported = navigator.pointerEnabled; + var isMSPointerSupported = navigator.msPointerEnabled; + + var downEvent = isTouchSupported ? 'touchstart' : (isPointerSupported ? 'pointerdown' : (isMSPointerSupported ? 'MSPointerDown' : 'mousedown')); + var moveEvent = isTouchSupported ? 'touchmove' : (isPointerSupported ? 'pointermove' : (isMSPointerSupported ? 'MSPointerMove' : 'mousemove')); + var upEvent = isTouchSupported ? 'touchend' : (isPointerSupported ? 'pointerup' : (isMSPointerSupported ? 'MSPointerUp' : 'mouseup')); + + canvas.addEventListener(downEvent, startDraw, false); + canvas.addEventListener(moveEvent, draw, false); + canvas.addEventListener(upEvent, endDraw, false); + + /* PubNub */ + + var channel = 'draw'; + + var pubnub = PUBNUB.init({ + publish_key : 'pub-c-150fdb3a-1221-4a4d-844a-2d200e3ec2fc', + subscribe_key : 'sub-c-cb3013e6-32e5-11eb-9713-12bae088af96', + leave_on_unload : true, + ssl : document.location.protocol === "https:" + }); + + pubnub.subscribe({ + channel: channel, + callback: drawFromStream, + presence: function(m){ + if(m.occupancy > 1){ + document.getElementById('unit').textContent = 'Students Online'; + } + document.getElementById('occupancy').textContent = m.occupancy; + var p = document.getElementById('occupancy').parentNode; + p.classList.add('anim'); + p.addEventListener('transitionend', function(){p.classList.remove('anim');}, false); + } + }); + + function publish(data) { + pubnub.publish({ + channel: channel, + message: data + }); + } + + /* Draw on canvas */ + + function drawOnCanvas(color, plots) { + ctx.strokeStyle = color; + ctx.beginPath(); + ctx.moveTo(plots[0].x, plots[0].y); + + for(var i=1; i1&&(document.getElementById("unit").textContent="doodlers"),document.getElementById("occupancy").textContent=e.occupancy;var t=document.getElementById("occupancy").parentNode;t.classList.add("anim"),t.addEventListener("transitionend",function(){t.classList.remove("anim")},!1)}}),drawHistory&&v.history({channel:p,count:50,callback:function(e){v.each(e[0],n)}});var y=!1,b=[]}(); diff --git a/src/core/templates/admin/base_site.html b/src/core/templates/admin/base_site.html new file mode 100644 index 0000000..a3f3bbc --- /dev/null +++ b/src/core/templates/admin/base_site.html @@ -0,0 +1,17 @@ +{% extends 'admin/base.html' %} +{% load static %} + +{% block branding %} +

+ + Open Classroom +

+{% endblock %} + + +{% block extrastyle %} + + + + +{% endblock %} \ No newline at end of file diff --git a/src/core/templates/landing_page.html b/src/core/templates/landing_page.html index 2c835ba..ae0e5e9 100644 --- a/src/core/templates/landing_page.html +++ b/src/core/templates/landing_page.html @@ -14,7 +14,7 @@ - + diff --git a/src/core/templates/partials/_head.html b/src/core/templates/partials/_head.html index 2b6b466..d6da419 100644 --- a/src/core/templates/partials/_head.html +++ b/src/core/templates/partials/_head.html @@ -19,6 +19,7 @@ + diff --git a/src/core/templates/partials/_sidebar.html b/src/core/templates/partials/_sidebar.html index fabfc67..0d96863 100644 --- a/src/core/templates/partials/_sidebar.html +++ b/src/core/templates/partials/_sidebar.html @@ -4,7 +4,7 @@ diff --git a/src/whiteboard/templates/whiteboard/liveboard.html b/src/whiteboard/templates/whiteboard/liveboard.html new file mode 100644 index 0000000..fadb177 --- /dev/null +++ b/src/whiteboard/templates/whiteboard/liveboard.html @@ -0,0 +1,53 @@ +{% load static %} + + + + + + + CoDoodler + + + + + + + +
+
+

Open Board

+

Live Openboard

+
+
+ 0 + Students Online +
+
+ +
+ Canvas is not supported on this browser! + +
+ + + + + + +
+
+ + + + + + + + + + + + diff --git a/src/whiteboard/urls.py b/src/whiteboard/urls.py index 50bcfde..78a1ce5 100644 --- a/src/whiteboard/urls.py +++ b/src/whiteboard/urls.py @@ -5,4 +5,5 @@ app_name = 'whiteboard' urlpatterns = [ path('', views.whiteboard, name='whiteboard'), + path('liveboard/', views.liveboard, name='liveboard'), ] \ No newline at end of file diff --git a/src/whiteboard/views.py b/src/whiteboard/views.py index 39e5015..e0c5abb 100644 --- a/src/whiteboard/views.py +++ b/src/whiteboard/views.py @@ -5,3 +5,8 @@ from django.contrib.auth.decorators import login_required def whiteboard(request): context = {} return render(request, 'whiteboard/whiteboard.html', context) + +@login_required +def liveboard(request): + context = {} + return render(request, 'whiteboard/liveboard.html', context)