Source: managers/vimeo-manager.js

/*
    https://developer.vimeo.com/api/authentication
    https://developer.vimeo.com/api/reference/showcases#get_showcase
    https://developer.vimeo.com/player/sdk
*/
/**
 * @module managers/vimeo-manager
 * @description This module manages Vimeo hosted content
 * {@link https://developer.vimeo.com/api/guides/start}
 * @requires vimeo
 */
define([
    "vimeo"      
], 

function (Vimeo) {

    // ---------------------------------------------------------------
    //
    // VIMEO
    //
    // ---------------------------------------------------------------

    var VimeoManager = function () {
        console.log(" * <vimeo>");        

        window.tEvent.eventStr.EVENT_VIMEO_INIT = "EVENT_VIMEO_INIT";

        // services
        this.oServices = -1;

        // model loaded
        this.isReady = false;

        // config
        this.projectConfig = -1;

        window.Vimeo = Vimeo;

        this.def = {
            STATUS_OK    : "ok",
            STATUS_ERROR : "error"
        };

        this.ui = {
        };
        

        this.init();
    };

    VimeoManager.prototype = {    
       
        // ______________________________________________________________
        //                                                           init
        /**
            * init
            * @description Initializes class
            * @fires assignListeners()
            * @memberOf module:managers/vimeo-manager
            * @instance
        */
        init: function() { 
            this.assignListeners();            
        },


        // ______________________________________________________________
        //                                                assignListeners
        /** 
        * assignListeners
        * @description Assigns listeners to events used in this class.
        * @listens  EVENT_MODEL_READY
        * @memberOf module:managers/vimeo-manager
        * @instance
        */
        assignListeners: function() {           
            var self = this;

            if (typeof window.oModel === "undefined" || window.oModel.jConfig === -1){
                window.tEvent.addListener("EVENT_MODEL_READY", function(evt, data)
                {
                    // clean up for new page
                    self.onJsonLoaded(); 
                });                
            } else {
                self.onJsonLoaded(); 
            }
        },
      

        // --------------------------------------------------------------
        // HELPERS
        // --------------------------------------------------------------
        
        // ______________________________________________________________
        //                                                   getReturnObj
        /**
            * getReturnObj
            * @description Returns generic return object
            * @returns {Object}
            * @example
            * {
            *    "status": "ok",
            *    "data": -1
            * }
            * @memberOf module:managers/vimeo-manager
            * @instance
        */ 
        getReturnObj: function() {
            return({
                status: this.def.STATUS_OK,
                data: -1
            });
        },


        // ______________________________________________________________
        //                                                        isReady
        /**
            * readyCheck
            * @description Checks if module is ready 
            * @fires EVENT_VIMEO_INIT            
            * @memberOf module:managers/vimeo-manager
            * @instance
        */ 
        readyCheck: function() { 

            if (this.projectConfig !== -1){
                this.isReady = true;                
                window.tEvent.fire(window.tEvent.eventStr.EVENT_VIMEO_INIT);
            }

        },


        // ______________________________________________________________
        //                                              getShowcaseVideos
        /**
            * getShowcaseVideos
            * @description Gets Vimeo showcase videos
            * @param {Function} callback - Callback function
            * @param {Object} options - Options when loading showcase
            * @param {String} showcaseId 
            * @fires oServices.vimeoService()           
            * @memberOf module:managers/vimeo-manager
            * @instance
        */ 
        getShowcaseVideos: function(callback, options, showcaseId) { 

            var self = this;
            var config = this.projectConfig.services.vimeo;
            var wsUrl = config.urls.getShowcaseVideos;            

            // use existing showcaseID if one is not submitted
            if (typeof showcaseId === "undefined"){
               showcaseId = config.showcases.showcase1; 
            }
            wsUrl = wsUrl.replace("[[SHOWCASE_ID]]", showcaseId);

            // process options
            if (typeof options !== "undefined"){
                wsUrl += "?";
                for (var key in options) {
                    wsUrl += key + "=" + options[key] + "&";
                }
            }

            var serviceConfig = {
                wsUrl      : wsUrl,
                base64Code : window.btoa(config.clientId + ":" + config.clientSecret)
            };

            // call service
            this.oServices.vimeoService(serviceConfig, callback);

        },


        // ______________________________________________________________
        //                                                      initVideo
        // https://developer.vimeo.com/player/sdk
        /**
            * initVideo
            * @description Initializes video
            * {@link https://developer.vimeo.com/player/sdk}
            * @param {String} videoId - ID of video to load
            * @param {String} containerId - Container ID where the video will be assigned
            * @param {Object} options - Options when loading video
            * @returns {VimeoInstance}     
            * @memberOf module:managers/vimeo-manager
            * @instance
        */ 
        initVideo: function(videoId, containerId, options) { 

            var videoConfig = {
                id: videoId
            };

            // process options
            if (typeof options !== "undefined"){                
                for (var key in options) {
                    videoConfig[key] = options[key];
                }
            }

            return( new Vimeo(containerId, videoConfig) );
        },


        // ______________________________________________________________
        //                                              getVideoIdFromUrl
        /**
            * getVideoIdFromUrl
            * @description Parse url and return video ID
            * @param {String} link - URL link of video
            * @returns {String} Video ID     
            * @memberOf module:managers/vimeo-manager
            * @instance
        */ 
        getVideoIdFromUrl: function(link) {
            link = link.split("/");
            return( link[link.length-1] );
        },


        // --------------------------------------------------------------
        // EVENTS
        // --------------------------------------------------------------

        // ______________________________________________________________
        //                                                   onJsonLoaded
        /**
            * onJsonLoaded
            * @description Assing private methods 
            * @fires readyCheck()  
            * @memberOf module:managers/vimeo-manager
            * @instance
        */
        onJsonLoaded: function() {               
            this.projectConfig = window.oModel.jConfig;
            this.oServices = window.oModel.oServices;
            this.readyCheck();
        }


    };
        
    return (VimeoManager);        
   
});