client/annotviz/app/js/stageview.js
author rougeronj
Wed, 21 Jan 2015 12:14:16 +0100
changeset 102 cc7b06bfd574
parent 101 7e902dc550c5
child 104 685c5ebc59d0
permissions -rw-r--r--
update to circle representation
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
101
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
     1
/**
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
     2
* scripts/stageview.js
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
     3
*
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
     4
* This is the starting point for your application.
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
     5
* Take a look at http://browserify.org/ for more info
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
     6
*/
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
     7
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
     8
/* global document: false */
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
     9
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    10
'use strict';
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    11
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    12
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    13
var PIXI = require('pixi');
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    14
var _ = require('lodash');
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    15
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    16
var defaultConfig = {
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    17
    externalRefresh: false,
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    18
    logger: undefined,
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    19
    sceneWidth: 1920,
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    20
    sceneHeight: 1080,
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    21
    framerate: 25,
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    22
    sceneBgColor: 0xFFFFFF,
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    23
    canvasContainer: 'canvasContainer',
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    24
    timeContainer: 'timeStarted'
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    25
};
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    26
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    27
function StageView(options) {
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    28
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    29
    var _this = this;
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    30
    var opts = _(options).defaults(defaultConfig).value();
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    31
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    32
    var externalRefresh = opts.externalRefresh;
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    33
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    34
    this.logger = opts.logger;
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    35
    this.framerate = opts.framerate;
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    36
    var sceneBgColor = opts.sceneBgColor;
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    37
    var sceneWidth = opts.sceneWidth;
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    38
    var sceneHeight = opts.sceneHeight;
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    39
    var canvasContainer = opts.canvasContainer;
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    40
    var timeContainer = opts.timeContainer;
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    41
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    42
    //create an new instance of a pixi stage
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    43
    this.stage = new PIXI.Stage(sceneBgColor);
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    44
    //create a renderer instance.
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    45
    var renderer = PIXI.autoDetectRenderer(sceneWidth, sceneHeight);
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    46
    var components = []; 
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    47
    	
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    48
    this.init = function() {
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    49
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    50
        if(typeof(canvasContainer) === 'string') {
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    51
            canvasContainer = document.getElementById(canvasContainer);
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    52
        }
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    53
        if(typeof(timeContainer) === 'string') {
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    54
            timeContainer = document.getElementById(timeContainer);
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    55
        }
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    56
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    57
        canvasContainer.appendChild(renderer.view);
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    58
        
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    59
        components.forEach(function(c){
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    60
    		c.init();
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    61
    	});
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    62
    };
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    63
    
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    64
    this.registerComponent = function(component) {
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    65
    	components.push(component);
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    66
    	this.stage.addChild(component.container);
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    67
    };
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    68
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    69
    this.refresh = function() {
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    70
    	components.forEach(function(c){
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    71
    		c.refresh();
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    72
    	});
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    73
        renderer.render(this.stage);
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    74
    };
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    75
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    76
    // Init page and intervals
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    77
    var refreshInterval;
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    78
    var refreshTimeInterval;
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    79
    var startTs;
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    80
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    81
    this.updateTime = function(){
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    82
        var nbSec = (Date.now() - startTs) / 1000;
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    83
        var hours = Math.floor( nbSec / 3600 ) % 24;
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    84
        var minutes = Math.floor( nbSec / 60 ) % 60;
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    85
        var seconds = Math.floor(nbSec % 60);
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    86
        var timeStr = (hours < 10 ? '0' + hours : hours) + ':' + (minutes < 10 ? '0' + minutes : minutes) + ':' + (seconds  < 10 ? '0' + seconds : seconds);
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    87
        timeContainer.innerHTML = timeStr;
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    88
    };
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    89
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    90
    this.start = function() {
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    91
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    92
        startTs = Date.now();
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    93
        if(!externalRefresh) {
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    94
            refreshInterval = setInterval(function() {_this.refresh();}, 1000/this.framerate);
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    95
        }
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    96
        refreshTimeInterval = setInterval(function() {_this.updateTime();}, 1000);
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    97
        
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    98
        components.forEach(function(c){
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
    99
    		c.start();
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
   100
    	});
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
   101
    };
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
   102
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
   103
    this.stop = function() {
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
   104
        if(!externalRefresh) {
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
   105
            clearInterval(refreshInterval);
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
   106
        }
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
   107
        clearInterval(refreshTimeInterval);
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
   108
        
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
   109
        components.forEach(function(c){
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
   110
    		c.stop();
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
   111
    	});
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
   112
    };
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
   113
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
   114
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
   115
    this.log = function(m) {
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
   116
        if(this.logger) {
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
   117
            this.logger.log(m);
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
   118
        }
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
   119
    };
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
   120
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
   121
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
   122
    return this;
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
   123
}
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
   124
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
   125
module.exports = {
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
   126
    StageView: StageView
7e902dc550c5 add stageView and annotstimeline
rougeronj
parents:
diff changeset
   127
};