Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/content/js/learner_subject.js
diff options
context:
space:
mode:
Diffstat (limited to 'content/js/learner_subject.js')
-rwxr-xr-xcontent/js/learner_subject.js216
1 files changed, 216 insertions, 0 deletions
diff --git a/content/js/learner_subject.js b/content/js/learner_subject.js
new file mode 100755
index 0000000..443355a
--- /dev/null
+++ b/content/js/learner_subject.js
@@ -0,0 +1,216 @@
+$(document).ready(
+ function(){
+ var k = Karma(assetList);
+
+ k.ready(function() {
+
+ logos;
+
+ activities;
+
+ k.ready(function(){
+
+ //game logic
+
+ function draw(){
+ var canvas = document.getElementById('ladder');
+ if (canvas.getContext){
+ var ctx = canvas.getContext('2d');
+ var cells = 6;
+ var rows = 2 + (activities.length / cells);
+ var maxx = 1200;
+ var cellsize = 64;
+ var sz = cellsize;
+ var maxy = rows * 1.5 * cellsize;
+ if (maxy < 673){
+ maxy = 673;;
+ };
+ canvas.setAttribute('width', maxx);
+ canvas.setAttribute('height', maxy);
+ var x = 0;
+ var y = 0;
+ var odd = 1;
+ var xstart = 1.7 * cellsize;
+ var ystart = maxy - cellsize;
+ var row = 0;
+ var cell = 0;
+ var id = -1;
+ var ix = 0;
+ var idm = 0;
+ var activity = 0;
+ var flag = 0;
+ var acts = new Array();
+ var idx = 0
+ var il = ""
+ var xy;
+ var pth;
+ var count = 0;
+
+ $("canvas").click(function($e) {
+ // find out which act in acts was clicked
+ x = $e.pageX
+ y = $e.pageY
+ $.each(acts, function() {
+ xy = this;
+ // directory structure: content/subject/milestone/activity
+ // for learners, we want the red milestone
+ if( xy[5] == 'red'){
+ pth = xy[4]+'/index.html';
+ window.location = pth;
+ };
+ });
+ });
+ // ladder
+ ctx.font = "14pt Arial";
+ ctx.textAlign = "center";
+ x = xstart;
+ y = ystart;
+ ctx.beginPath();
+ sz = cellsize;
+ drawarrow(x,y,sz);
+ offset=0;
+ delta = 1;
+ for(row=0;row<rows;row++){
+ if (activity == activities.length) {
+ break;
+ };
+ if (offset == 0){
+ x = xstart;
+ } else {
+ x = xstart+offset-sz*3/2;
+ };
+ for(cell=0;cell<cells;cell++){
+ xsave = x;
+ if (activity < activities.length){
+ ctx.fillStyle = 'yellow';
+ ctx.fillRect(x,y,sz*3/2, sz/4);
+ drawlogo(x,y,activity);
+ activity = activity + 1;
+ x = x + 3/2*sz;
+ if (delta > 0) {
+ if (cell+1 < cells) {
+ ctx.fillstyle='yellow';
+ ctx.fillRect(x,y,sz,sz/4);
+ x = xsave + sz*5/2;
+ } else {
+ x = xsave + sz*3/2;
+ };
+ } else {
+ if (cell > 0) {
+ ctx.fillStyle = 'yellow';
+ ctx.fillRect(x,y,sz,sz/4);
+ };
+ if (cell+1<cells){
+ x = xsave - sz*5/2;
+ } else {
+ x = xsave-sz*3/2;
+ };
+ };
+ };
+ };
+ if ((row + 1 < rows) &&
+ (activity < activities.length)) {
+ if (row % 2 == 0) {
+ ctx.beginPath();
+ ctx.moveTo(x,y);
+ ctx.arc(x, y-cellsize, cellsize, Math.PI/2, 0, 1);
+ ctx.arc(x, y-cellsize, 1.25*cellsize, 0, Math.PI*3/2, 1);
+ ctx.arc(x, y-cellsize, cellsize, Math.PI*3/2, 0, 0);
+ ctx.arc(x, y-cellsize, 1.25*cellsize, 0, Math.PI/2, 0);
+ ctx.closePath();
+ ctx.fillStyle='yellow'
+ ctx.fill()
+ } else {
+ x = xstart;
+ ctx.beginPath();
+ ctx.moveTo(x,y);
+ ctx.arc(x, y-cellsize, cellsize, Math.PI/2, Math.PI, 0);
+ ctx.arc(x, y-cellsize, 1.25*cellsize, Math.PI, Math.PI*3/2, 0);
+ ctx.arc(x, y-cellsize, cellsize, Math.PI*3/2, Math.PI, 1);
+ ctx.arc(x, y-cellsize, 1.25*cellsize, Math.PI, Math.PI/2, 1);
+ ctx.closePath();
+ ctx.fillStyle='yellow'
+ ctx.fill()
+ }
+ }
+ y = y - 2.25 * cellsize;
+ offset = x - xstart;
+ delta = -delta;
+ }
+ }
+
+ function drawarrow(x,y,sz) {
+ ctx.fillStyle = 'black'
+ ctx.fillRect(x-sz*4/5,y+sz/8,sz/2,sz/8);
+ ctx.moveTo(x-sz/2,y);
+ ctx.lineTo(x-sz/5,y+sz/8);
+ ctx.moveTo(x-sz/2,y+sz/2);
+ ctx.lineTo(x-sz/5,y+sz/8);
+ ctx.stroke();
+ };
+
+ function drawmilestone(activity){
+ var capcolor;
+ x = activity[1];
+ y = activity[2];
+ capcolor = activity[5];
+ ctx.fillStyle = 'chartreuse';
+ ctx.fillRect(x,y-cellsize,cellsize,cellsize);
+ ctx.fillStyle = 'black'
+ ctx.fillText(ix, x + (cellsize * 0.3), y-(cellsize * 0.4), cellsize);
+ ctx.beginPath();
+ ctx.moveTo(x, y-cellsize);
+ ctx.arc(x+0.5*cellsize,y-cellsize,0.5*cellsize,Math.PI,0,0);
+ ctx.closePath();
+ ctx.fillStyle = capcolor;
+ ctx.fill();
+ ctx.fillStyle = 'yellow';
+ };
+
+ function drawlogo(x, y, activity) {
+ var il, ty, ls, cc;
+ id = 0; /* we always have a milestone here */
+ ix = activities[activity][1];
+ if ((activities[activity].length) > 1){
+ il = activities[activity][2];
+ } else {
+ il = "";
+ };
+ if ((activities[activity].length) > 2){
+ ty = activities[activity][3];
+ }else{
+ ty = "";
+ };
+ if ((activities[activity].length) > 3){
+ ls = activities[activity][4];
+ }else{
+ ls = "";
+ };
+ if ((activities[activity].length) > 4){
+ cc = activities[activity][5];
+ }else{
+ cc = 'cyan';
+ };
+ idx = idx + 1;
+ acts[idx] = [il, x, y, ty, ls, cc];
+ if (id < 2){
+ drawmilestone(acts[idx]);
+ } else {
+ // draw logo
+ alert('draw logo - should not happen');
+ ctx.drawImage(k.image[logos[id-1]].media, x, y - cellsize);
+ if (ix > 0) {
+ ctx.textAlign = 'center'
+ ctx.fillStyle = 'black'
+ ctx.fillText(ix, x + cellsize/2, y+cellsize/4, cellsize);
+ };
+ };
+ }
+ }
+
+ draw();
+
+ });
+ });
+
+});