| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 | /*!* Ext JS Library 4.0* Copyright(c) 2006-2011 Sencha Inc.* licensing@sencha.com* http://www.sencha.com/license*/// From code originally written by David Davis (http://www.sencha.com/blog/html5-video-canvas-and-ext-js/)/* -NOTICE- * For HTML5 video to work, your server must * send the right content type, for more info see: * http://developer.mozilla.org/En/HTML/Element/Video */Ext.define('Ext.ux.desktop.Video', {    extend: 'Ext.panel.Panel',    alias: 'widget.video',    layout: 'fit',    autoplay: false,    controls: true,    bodyStyle: 'background-color:#000;color:#fff',    html: '',    initComponent: function () {        this.callParent();    },    afterRender: function () {        var fallback;        if (this.fallbackHTML) {            fallback = this.fallbackHTML;        } else {            fallback = "Your browser does not support HTML5 Video. ";            if (Ext.isChrome) {                fallback += 'Upgrade Chrome.';            } else if (Ext.isGecko) {                fallback += 'Upgrade to Firefox 3.5 or newer.';            } else {                var chrome = '<a href="http://www.google.com/chrome">Chrome</a>';                fallback += 'Please try <a href="http://www.mozilla.com">Firefox</a>';                if (Ext.isIE) {                    fallback += ', ' + chrome +                        ' or <a href="http://www.apple.com/safari/">Safari</a>.';                } else {                    fallback += ' or ' + chrome + '.';                }            }        }        // match the video size to the panel dimensions        var size = this.getSize();        var cfg = Ext.copyTo({            tag   : 'video',            width : size.width,            height: size.height        },        this, 'poster,start,loopstart,loopend,playcount,autobuffer,loop');        // just having the params exist enables them        if (this.autoplay) {            cfg.autoplay = 1;        }        if (this.controls) {            cfg.controls = 1;        }        // handle multiple sources        if (Ext.isArray(this.src)) {            cfg.children = [];            for (var i = 0, len = this.src.length; i < len; i++) {                if (!Ext.isObject(this.src[i])) {                    Ext.Error.raise('The src list passed to "video" must be an array of objects');                }                cfg.children.push(                    Ext.applyIf({tag: 'source'}, this.src[i])                );            }            cfg.children.push({                html: fallback            });        } else {            cfg.src  = this.src;            cfg.html = fallback;        }        this.video = this.body.createChild(cfg);        var el = this.video.dom;        this.supported = (el && el.tagName.toLowerCase() == 'video');    },    afterComponentLayout : function() {        var me = this;        me.callParent(arguments);        if (me.video) {            me.video.setSize(me.body.getSize());        }    },    onDestroy: function () {        var video = this.video;        if (video) {            var videoDom = video.dom;            if (videoDom && videoDom.pause) {                videoDom.pause();            }            video.remove();            this.video = null;        }        this.callParent();    }});
 |