src/js/init.js
author hamidouk
Mon, 19 Dec 2011 15:25:22 +0100
branchpopcorn-port
changeset 481 a46cfeee6d77
parent 461 a9c5eeca190c
child 500 a784e70993b3
permissions -rw-r--r--
using jquery ui draggable changes the state of an element from absolute to relative positioning, which breaks the way our seek button expands itself, so we need to force absolute positioning, quite uglily, using jquery.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
123
58bb8ccea9a8 added a file for the init routines.
hamidouk
parents:
diff changeset
     1
/* init.js - initialization and configuration of Popcorn and the widgets
58bb8ccea9a8 added a file for the init routines.
hamidouk
parents:
diff changeset
     2
exemple json configuration:
141
becd5f52fa24 this commit fixes an elusive integration bug where the object would get called
hamidouk
parents: 136
diff changeset
     3
 
123
58bb8ccea9a8 added a file for the init routines.
hamidouk
parents:
diff changeset
     4
 */
58bb8ccea9a8 added a file for the init routines.
hamidouk
parents:
diff changeset
     5
453
8568e47379a2 added autoconfiguration of the media source for rtmp streams.
hamidouk
parents: 430
diff changeset
     6
IriSP.setupDataLoader = function() {
8568e47379a2 added autoconfiguration of the media source for rtmp streams.
hamidouk
parents: 430
diff changeset
     7
  /* we set it up separately because we need to
8568e47379a2 added autoconfiguration of the media source for rtmp streams.
hamidouk
parents: 430
diff changeset
     8
     get data at the very beginning, for instance when
8568e47379a2 added autoconfiguration of the media source for rtmp streams.
hamidouk
parents: 430
diff changeset
     9
     setting up the video */
8568e47379a2 added autoconfiguration of the media source for rtmp streams.
hamidouk
parents: 430
diff changeset
    10
  IriSP.__dataloader = new IriSP.DataLoader();
8568e47379a2 added autoconfiguration of the media source for rtmp streams.
hamidouk
parents: 430
diff changeset
    11
};
8568e47379a2 added autoconfiguration of the media source for rtmp streams.
hamidouk
parents: 430
diff changeset
    12
158
1813e6e4f0d6 made a small change to the way popcorn is integrated into the page.
hamidouk
parents: 141
diff changeset
    13
IriSP.configurePopcorn = function (layoutManager, options) {
123
58bb8ccea9a8 added a file for the init routines.
hamidouk
parents:
diff changeset
    14
    var pop;
287
5c7495102bd7 added a spacer div to simplify some graphic animations.
hamidouk
parents: 216
diff changeset
    15
    var ret = layoutManager.createDiv(); 
5c7495102bd7 added a spacer div to simplify some graphic animations.
hamidouk
parents: 216
diff changeset
    16
    var containerDiv = ret[0];
123
58bb8ccea9a8 added a file for the init routines.
hamidouk
parents:
diff changeset
    17
    
127
3ce493c93d6c added tests for init.js.
hamidouk
parents: 123
diff changeset
    18
    switch(options.type) {
123
58bb8ccea9a8 added a file for the init routines.
hamidouk
parents:
diff changeset
    19
      /*
58bb8ccea9a8 added a file for the init routines.
hamidouk
parents:
diff changeset
    20
        todo : dynamically create the div/video tag which
58bb8ccea9a8 added a file for the init routines.
hamidouk
parents:
diff changeset
    21
        will contain the video.
58bb8ccea9a8 added a file for the init routines.
hamidouk
parents:
diff changeset
    22
      */
58bb8ccea9a8 added a file for the init routines.
hamidouk
parents:
diff changeset
    23
      case "html5":
158
1813e6e4f0d6 made a small change to the way popcorn is integrated into the page.
hamidouk
parents: 141
diff changeset
    24
           var tmpId = Popcorn.guid("video"); 
1813e6e4f0d6 made a small change to the way popcorn is integrated into the page.
hamidouk
parents: 141
diff changeset
    25
           IriSP.jQuery("#" + containerDiv).append("<video src='" + options.file + "' id='" + tmpId + "'></video>");
402
6148fb647f46 html5 video can now set the height and width of the video.
hamidouk
parents: 315
diff changeset
    26
6148fb647f46 html5 video can now set the height and width of the video.
hamidouk
parents: 315
diff changeset
    27
           if (options.hasOwnProperty("width"))
6148fb647f46 html5 video can now set the height and width of the video.
hamidouk
parents: 315
diff changeset
    28
             IriSP.jQuery("#" + containerDiv).css("width", options.width);
6148fb647f46 html5 video can now set the height and width of the video.
hamidouk
parents: 315
diff changeset
    29
           
6148fb647f46 html5 video can now set the height and width of the video.
hamidouk
parents: 315
diff changeset
    30
           if (options.hasOwnProperty("height"))
6148fb647f46 html5 video can now set the height and width of the video.
hamidouk
parents: 315
diff changeset
    31
             IriSP.jQuery("#" + containerDiv).css("height", options.height);
6148fb647f46 html5 video can now set the height and width of the video.
hamidouk
parents: 315
diff changeset
    32
216
d1e891627286 added and activated the mediafragment plugin?
hamidouk
parents: 204
diff changeset
    33
           pop = Popcorn("#" + tmpId).mediafragment({start : 0});
123
58bb8ccea9a8 added a file for the init routines.
hamidouk
parents:
diff changeset
    34
        break;
127
3ce493c93d6c added tests for init.js.
hamidouk
parents: 123
diff changeset
    35
        
3ce493c93d6c added tests for init.js.
hamidouk
parents: 123
diff changeset
    36
      case "jwplayer":
3ce493c93d6c added tests for init.js.
hamidouk
parents: 123
diff changeset
    37
          var opts = IriSP.jQuery.extend({}, options);
3ce493c93d6c added tests for init.js.
hamidouk
parents: 123
diff changeset
    38
          delete opts.container;
453
8568e47379a2 added autoconfiguration of the media source for rtmp streams.
hamidouk
parents: 430
diff changeset
    39
456
7fcdb501effd added a switch to choose different options if using rtmp or not.
hamidouk
parents: 453
diff changeset
    40
          if (options.provider === "rtmp") {
7fcdb501effd added a switch to choose different options if using rtmp or not.
hamidouk
parents: 453
diff changeset
    41
            /* exit if we can't access the metadata */
7fcdb501effd added a switch to choose different options if using rtmp or not.
hamidouk
parents: 453
diff changeset
    42
            if (typeof(IriSP.__jsonMetadata) === "undefined") {
7fcdb501effd added a switch to choose different options if using rtmp or not.
hamidouk
parents: 453
diff changeset
    43
                break;
7fcdb501effd added a switch to choose different options if using rtmp or not.
hamidouk
parents: 453
diff changeset
    44
            };
453
8568e47379a2 added autoconfiguration of the media source for rtmp streams.
hamidouk
parents: 430
diff changeset
    45
8568e47379a2 added autoconfiguration of the media source for rtmp streams.
hamidouk
parents: 430
diff changeset
    46
456
7fcdb501effd added a switch to choose different options if using rtmp or not.
hamidouk
parents: 453
diff changeset
    47
            // the json format is totally illogical
7fcdb501effd added a switch to choose different options if using rtmp or not.
hamidouk
parents: 453
diff changeset
    48
            opts.streamer = IriSP.__jsonMetadata["medias"][0]["meta"]["item"]["value"];
7fcdb501effd added a switch to choose different options if using rtmp or not.
hamidouk
parents: 453
diff changeset
    49
            var source = IriSP.__jsonMetadata["medias"][0]["href"];
453
8568e47379a2 added autoconfiguration of the media source for rtmp streams.
hamidouk
parents: 430
diff changeset
    50
456
7fcdb501effd added a switch to choose different options if using rtmp or not.
hamidouk
parents: 453
diff changeset
    51
            // the source if a full url but jwplayer wants an url relative to the
7fcdb501effd added a switch to choose different options if using rtmp or not.
hamidouk
parents: 453
diff changeset
    52
            // streamer url, so we've got to remove the common part.
7fcdb501effd added a switch to choose different options if using rtmp or not.
hamidouk
parents: 453
diff changeset
    53
            opts.file = source.slice(opts.streamer.length);
7fcdb501effd added a switch to choose different options if using rtmp or not.
hamidouk
parents: 453
diff changeset
    54
          } else {
7fcdb501effd added a switch to choose different options if using rtmp or not.
hamidouk
parents: 453
diff changeset
    55
            /* other providers type, video for instance -
7fcdb501effd added a switch to choose different options if using rtmp or not.
hamidouk
parents: 453
diff changeset
    56
               pass everything as is */
7fcdb501effd added a switch to choose different options if using rtmp or not.
hamidouk
parents: 453
diff changeset
    57
          }
7fcdb501effd added a switch to choose different options if using rtmp or not.
hamidouk
parents: 453
diff changeset
    58
430
c0b529ae20d2 don't overwrite popcorn when using our jwplayer wrapper.
hamidouk
parents: 422
diff changeset
    59
          pop = IriSP.PopcornReplacement.jwplayer("#" + containerDiv, opts);
127
3ce493c93d6c added tests for init.js.
hamidouk
parents: 123
diff changeset
    60
        break;
198
8ffb1b7a9c6b activated youtube support.
hamidouk
parents: 175
diff changeset
    61
      
8ffb1b7a9c6b activated youtube support.
hamidouk
parents: 175
diff changeset
    62
      case "youtube":
8ffb1b7a9c6b activated youtube support.
hamidouk
parents: 175
diff changeset
    63
          var opts = IriSP.jQuery.extend({}, options);
8ffb1b7a9c6b activated youtube support.
hamidouk
parents: 175
diff changeset
    64
          delete opts.container;
8ffb1b7a9c6b activated youtube support.
hamidouk
parents: 175
diff changeset
    65
          opts.controls = 0;
8ffb1b7a9c6b activated youtube support.
hamidouk
parents: 175
diff changeset
    66
          opts.autostart = false;
204
a5e807f33a67 fixed a margin in youtube player div.
hamidouk
parents: 198
diff changeset
    67
          templ = "width: {{width}}px; height: {{height}}px;";
198
8ffb1b7a9c6b activated youtube support.
hamidouk
parents: 175
diff changeset
    68
          var str = Mustache.to_html(templ, {width: opts.width, height: opts.height});    
8ffb1b7a9c6b activated youtube support.
hamidouk
parents: 175
diff changeset
    69
          // Popcorn.youtube wants us to specify the size of the player in the style attribute of its container div.
8ffb1b7a9c6b activated youtube support.
hamidouk
parents: 175
diff changeset
    70
          IriSP.jQuery("#" + containerDiv).attr("style", str);
8ffb1b7a9c6b activated youtube support.
hamidouk
parents: 175
diff changeset
    71
          
216
d1e891627286 added and activated the mediafragment plugin?
hamidouk
parents: 204
diff changeset
    72
          pop = Popcorn.youtube("#" + containerDiv, opts.video, opts).mediafragment({start : 0});
198
8ffb1b7a9c6b activated youtube support.
hamidouk
parents: 175
diff changeset
    73
        break;
127
3ce493c93d6c added tests for init.js.
hamidouk
parents: 123
diff changeset
    74
        
3ce493c93d6c added tests for init.js.
hamidouk
parents: 123
diff changeset
    75
      default:
3ce493c93d6c added tests for init.js.
hamidouk
parents: 123
diff changeset
    76
        pop = undefined;
123
58bb8ccea9a8 added a file for the init routines.
hamidouk
parents:
diff changeset
    77
    };
58bb8ccea9a8 added a file for the init routines.
hamidouk
parents:
diff changeset
    78
    
127
3ce493c93d6c added tests for init.js.
hamidouk
parents: 123
diff changeset
    79
    return pop;
123
58bb8ccea9a8 added a file for the init routines.
hamidouk
parents:
diff changeset
    80
};
58bb8ccea9a8 added a file for the init routines.
hamidouk
parents:
diff changeset
    81
158
1813e6e4f0d6 made a small change to the way popcorn is integrated into the page.
hamidouk
parents: 141
diff changeset
    82
IriSP.configureWidgets = function (popcornInstance, layoutManager, guiOptions) {
453
8568e47379a2 added autoconfiguration of the media source for rtmp streams.
hamidouk
parents: 430
diff changeset
    83
 
8568e47379a2 added autoconfiguration of the media source for rtmp streams.
hamidouk
parents: 430
diff changeset
    84
  var serialFactory = new IriSP.SerializerFactory(IriSP.__dataloader);
127
3ce493c93d6c added tests for init.js.
hamidouk
parents: 123
diff changeset
    85
  var params = {width: guiOptions.width, height: guiOptions.height};
158
1813e6e4f0d6 made a small change to the way popcorn is integrated into the page.
hamidouk
parents: 141
diff changeset
    86
127
3ce493c93d6c added tests for init.js.
hamidouk
parents: 123
diff changeset
    87
  var ret_widgets = [];
141
becd5f52fa24 this commit fixes an elusive integration bug where the object would get called
hamidouk
parents: 136
diff changeset
    88
  var index;
127
3ce493c93d6c added tests for init.js.
hamidouk
parents: 123
diff changeset
    89
  
141
becd5f52fa24 this commit fixes an elusive integration bug where the object would get called
hamidouk
parents: 136
diff changeset
    90
  for (index = 0; index < guiOptions.widgets.length; index++) {    
171
158f0193ec54 added support for dependency widgets (i.e : a widget can now depend on another,
hamidouk
parents: 158
diff changeset
    91
    var widgetConfig = guiOptions.widgets[index];
158f0193ec54 added support for dependency widgets (i.e : a widget can now depend on another,
hamidouk
parents: 158
diff changeset
    92
    var widget = IriSP.instantiateWidget(popcornInstance, serialFactory, layoutManager, widgetConfig);
127
3ce493c93d6c added tests for init.js.
hamidouk
parents: 123
diff changeset
    93
    ret_widgets.push(widget);
141
becd5f52fa24 this commit fixes an elusive integration bug where the object would get called
hamidouk
parents: 136
diff changeset
    94
   
127
3ce493c93d6c added tests for init.js.
hamidouk
parents: 123
diff changeset
    95
  };
141
becd5f52fa24 this commit fixes an elusive integration bug where the object would get called
hamidouk
parents: 136
diff changeset
    96
127
3ce493c93d6c added tests for init.js.
hamidouk
parents: 123
diff changeset
    97
  return ret_widgets;
171
158f0193ec54 added support for dependency widgets (i.e : a widget can now depend on another,
hamidouk
parents: 158
diff changeset
    98
};
158f0193ec54 added support for dependency widgets (i.e : a widget can now depend on another,
hamidouk
parents: 158
diff changeset
    99
461
a9c5eeca190c added modules and tbe tests to test them.
hamidouk
parents: 456
diff changeset
   100
IriSP.configureModules = function (popcornInstance, modulesList) {
a9c5eeca190c added modules and tbe tests to test them.
hamidouk
parents: 456
diff changeset
   101
 
a9c5eeca190c added modules and tbe tests to test them.
hamidouk
parents: 456
diff changeset
   102
  var serialFactory = new IriSP.SerializerFactory(IriSP.__dataloader);
a9c5eeca190c added modules and tbe tests to test them.
hamidouk
parents: 456
diff changeset
   103
  var ret_modules = [];
a9c5eeca190c added modules and tbe tests to test them.
hamidouk
parents: 456
diff changeset
   104
  var index;
a9c5eeca190c added modules and tbe tests to test them.
hamidouk
parents: 456
diff changeset
   105
  
a9c5eeca190c added modules and tbe tests to test them.
hamidouk
parents: 456
diff changeset
   106
  for (index = 0; index < modulesList.length; index++) {    
a9c5eeca190c added modules and tbe tests to test them.
hamidouk
parents: 456
diff changeset
   107
    var moduleConfig = modulesList[index];
a9c5eeca190c added modules and tbe tests to test them.
hamidouk
parents: 456
diff changeset
   108
    
a9c5eeca190c added modules and tbe tests to test them.
hamidouk
parents: 456
diff changeset
   109
    var serializer = serialFactory.getSerializer(moduleConfig.metadata);
a9c5eeca190c added modules and tbe tests to test them.
hamidouk
parents: 456
diff changeset
   110
    var module = new IriSP[moduleConfig.type](popcornInstance, moduleConfig, serializer);    
a9c5eeca190c added modules and tbe tests to test them.
hamidouk
parents: 456
diff changeset
   111
    ret_modules.push(module);
a9c5eeca190c added modules and tbe tests to test them.
hamidouk
parents: 456
diff changeset
   112
  };
a9c5eeca190c added modules and tbe tests to test them.
hamidouk
parents: 456
diff changeset
   113
a9c5eeca190c added modules and tbe tests to test them.
hamidouk
parents: 456
diff changeset
   114
  return ret_modules;
a9c5eeca190c added modules and tbe tests to test them.
hamidouk
parents: 456
diff changeset
   115
};
a9c5eeca190c added modules and tbe tests to test them.
hamidouk
parents: 456
diff changeset
   116
171
158f0193ec54 added support for dependency widgets (i.e : a widget can now depend on another,
hamidouk
parents: 158
diff changeset
   117
IriSP.instantiateWidget = function(popcornInstance, serialFactory, layoutManager, widgetConfig) {
287
5c7495102bd7 added a spacer div to simplify some graphic animations.
hamidouk
parents: 216
diff changeset
   118
    /* create div returns us a container for the widget and a spacer */
315
4466bf448426 updated layout and init to give more meaningful names to the widgets divs.
hamidouk
parents: 287
diff changeset
   119
    var ret = layoutManager.createDiv(widgetConfig.type);        
287
5c7495102bd7 added a spacer div to simplify some graphic animations.
hamidouk
parents: 216
diff changeset
   120
    var container = ret[0];
5c7495102bd7 added a spacer div to simplify some graphic animations.
hamidouk
parents: 216
diff changeset
   121
    var spacer = ret[1];
5c7495102bd7 added a spacer div to simplify some graphic animations.
hamidouk
parents: 216
diff changeset
   122
175
b0cb7132accb variable rename.
hamidouk
parents: 171
diff changeset
   123
    var arr = IriSP.jQuery.extend({}, widgetConfig);
171
158f0193ec54 added support for dependency widgets (i.e : a widget can now depend on another,
hamidouk
parents: 158
diff changeset
   124
    arr.container = container;
287
5c7495102bd7 added a spacer div to simplify some graphic animations.
hamidouk
parents: 216
diff changeset
   125
    arr.spacer = spacer;
175
b0cb7132accb variable rename.
hamidouk
parents: 171
diff changeset
   126
    
171
158f0193ec54 added support for dependency widgets (i.e : a widget can now depend on another,
hamidouk
parents: 158
diff changeset
   127
    var serializer = serialFactory.getSerializer(widgetConfig.metadata);    
175
b0cb7132accb variable rename.
hamidouk
parents: 171
diff changeset
   128
    
b0cb7132accb variable rename.
hamidouk
parents: 171
diff changeset
   129
    if (typeof serializer == "undefined")   
b0cb7132accb variable rename.
hamidouk
parents: 171
diff changeset
   130
      debugger;
b0cb7132accb variable rename.
hamidouk
parents: 171
diff changeset
   131
    
171
158f0193ec54 added support for dependency widgets (i.e : a widget can now depend on another,
hamidouk
parents: 158
diff changeset
   132
    // instantiate the object passed as a string
158f0193ec54 added support for dependency widgets (i.e : a widget can now depend on another,
hamidouk
parents: 158
diff changeset
   133
    var widget = new IriSP[widgetConfig.type](popcornInstance, arr, serializer);    
158f0193ec54 added support for dependency widgets (i.e : a widget can now depend on another,
hamidouk
parents: 158
diff changeset
   134
    
158f0193ec54 added support for dependency widgets (i.e : a widget can now depend on another,
hamidouk
parents: 158
diff changeset
   135
    if (widgetConfig.hasOwnProperty("requires")) {
158f0193ec54 added support for dependency widgets (i.e : a widget can now depend on another,
hamidouk
parents: 158
diff changeset
   136
      // also create the widgets this one depends on.
158f0193ec54 added support for dependency widgets (i.e : a widget can now depend on another,
hamidouk
parents: 158
diff changeset
   137
      // the dependency widget is available in the parent widget context as
158f0193ec54 added support for dependency widgets (i.e : a widget can now depend on another,
hamidouk
parents: 158
diff changeset
   138
      // this.WidgetName (for instance, this.TipWidget);
158f0193ec54 added support for dependency widgets (i.e : a widget can now depend on another,
hamidouk
parents: 158
diff changeset
   139
      
175
b0cb7132accb variable rename.
hamidouk
parents: 171
diff changeset
   140
      var i = 0;
b0cb7132accb variable rename.
hamidouk
parents: 171
diff changeset
   141
      for(i = 0; i < widgetConfig.requires.length; i++) {
b0cb7132accb variable rename.
hamidouk
parents: 171
diff changeset
   142
        var widgetName = widgetConfig.requires[i]["type"];
b0cb7132accb variable rename.
hamidouk
parents: 171
diff changeset
   143
        widget[widgetName] = IriSP.instantiateWidget(popcornInstance, serialFactory, layoutManager, widgetConfig.requires[i]);
171
158f0193ec54 added support for dependency widgets (i.e : a widget can now depend on another,
hamidouk
parents: 158
diff changeset
   144
      }
175
b0cb7132accb variable rename.
hamidouk
parents: 171
diff changeset
   145
    }       
b0cb7132accb variable rename.
hamidouk
parents: 171
diff changeset
   146
     
171
158f0193ec54 added support for dependency widgets (i.e : a widget can now depend on another,
hamidouk
parents: 158
diff changeset
   147
    serializer.sync(IriSP.wrap(widget, function() { this.draw(); }));
158f0193ec54 added support for dependency widgets (i.e : a widget can now depend on another,
hamidouk
parents: 158
diff changeset
   148
    return widget;
287
5c7495102bd7 added a spacer div to simplify some graphic animations.
hamidouk
parents: 216
diff changeset
   149
};