- /**
- * @module Player
- */
-
-
- /**
- * I am the Interface module.
- *
- * I am the central place which inititalizes and coordinates all other interface-related modules.
- *
- * When this module is loaded, it loads also:
- * * {{#crossLink "Titlebar"}}Titlebar{{/crossLink}}
- * * {{#crossLink "Sidebar"}}Sidebar{{/crossLink}}
- * * {{#crossLink "ViewOverview"}}ViewOverview{{/crossLink}}
- * * {{#crossLink "ViewVideo"}}ViewVideo{{/crossLink}} (when there is a hypervideo present)
- * * {{#crossLink "ViewResources"}}ViewResources{{/crossLink}}
- *
- * @class Interface
- * @static
- */
-
-
- FrameTrail.defineModule('Interface', function(){
-
-
- FrameTrail.initModule('Titlebar');
- FrameTrail.initModule('Sidebar');
-
- FrameTrail.initModule('ViewOverview');
-
- if (FrameTrail.module('RouteNavigation').hypervideoID) {
- FrameTrail.initModule('ViewVideo');
- }
-
- FrameTrail.initModule('ViewResources');
-
- var mainContainer = $('<div id="MainContainer"></div>');
-
-
-
-
-
- /**
- * I call the create method of all my sub-modules, and set the window resize event listener.
- *
- * @method create
- * @param {Function} callback
- */
- function create(callback) {
-
- FrameTrail.module('InterfaceModal').showStatusMessage('Loading Interface ...');
-
- // Check if window is in iFrame
- var iFrame;
- try {
- iFrame = (window.self !== window.top);
- } catch (e) {
- iFrame = true;
- }
- FrameTrail.changeState('embed', iFrame);
-
- FrameTrail.module('Titlebar').create();
- FrameTrail.module('Sidebar').create();
-
-
- $('body').append(mainContainer);
-
-
- FrameTrail.module('ViewOverview').create();
-
- if (FrameTrail.module('RouteNavigation').hypervideoID) {
- FrameTrail.module('ViewVideo').create();
- }
-
- FrameTrail.module('ViewResources').create();
-
- initWindowResizeHandler();
-
- callback.call();
-
-
- };
-
-
- /**
- * I set the event listener for the resize event of the window.
- *
- * This event triggers a change of the global state "viewSize", so all modules can react to this event.
- *
- * Also, after the .create() method of all interface modules has been called, I trigger once the resize event, to propagate a valid state "viewSize" throughout the app.
- *
- * @method initWindowResizeHandler
- */
- function initWindowResizeHandler() {
-
- var _window = $(window),
- resizeTimeout = false;
-
- _window.resize(function(){
-
- var width = _window.width(),
- height = _window.height();
-
- $('#MainContainer').height( height - FrameTrail.module('Titlebar').height );
- FrameTrail.changeState('viewSize', [width, height]);
-
- if ( resizeTimeout !== false ) {
- clearTimeout(resizeTimeout);
- }
-
- resizeTimeout = setTimeout(function() {
- FrameTrail.changeState('viewSizeChanged');
- }, 200);
-
- });
-
-
- _window.resize();
-
-
-
- };
-
-
- /**
- * When the global state "sidebarOpen" changes, I react to it.
- *
- * Most importantly, I assure that the <div id="MainContainer"> is resized __before__ the {{#crossLink "ViewVideo/toggleSidebarOpen:method"}}ViewVideo.toggleSidebarOpen{{/crossLink}} is called.
- *
- * @method toggleSidebarOpen
- * @param {Boolean} opened
- */
- function toggleSidebarOpen(opened) {
-
- if (opened) {
- mainContainer.addClass('sidebarOpen');
- } else {
- mainContainer.removeClass('sidebarOpen');
- }
-
- var ViewVideo = FrameTrail.module('ViewVideo');
-
- if (ViewVideo) {
- ViewVideo.toggleSidebarOpen(opened);
- }
-
-
- };
-
-
- /**
- * I react to a change in the global state "editMode"
- * @method toggleEditMode
- * @param {String} editMode
- * @param {String} oldEditMode
- */
- function toggleEditMode(editMode, oldEditMode){
-
- if (editMode) {
-
- mainContainer.addClass('editActive');
-
- } else {
-
- mainContainer.removeClass('editActive');
-
- }
-
- };
-
-
-
-
-
- return {
-
- create: create,
-
- onChange: {
- sidebarOpen: toggleSidebarOpen,
- editMode: toggleEditMode
- }
-
- };
-
- });
-