]>
Commit | Line | Data |
---|---|---|
6527f429 DM |
1 | /*!\r |
2 | * Ext JS Library\r | |
3 | * Copyright(c) 2006-2015 Sencha Inc.\r | |
4 | * licensing@sencha.com\r | |
5 | * http://www.sencha.com/license\r | |
6 | */\r | |
7 | \r | |
8 | /**\r | |
9 | * From code originally written by David Davis\r | |
10 | * <http://www.sencha.com/blog/html5-video-canvas-and-ext-js>\r | |
11 | *\r | |
12 | * For HTML5 video to work, your server must\r | |
13 | * send the right content type, for more info see:\r | |
14 | * <http://developer.mozilla.org/En/HTML/Element/Video>\r | |
15 | */\r | |
16 | Ext.define('Ext.ux.desktop.Video', {\r | |
17 | extend: 'Ext.panel.Panel',\r | |
18 | \r | |
19 | alias: 'widget.video',\r | |
20 | layout: 'fit',\r | |
21 | autoplay: false,\r | |
22 | controls: true,\r | |
23 | bodyStyle: 'background-color:#000;color:#fff',\r | |
24 | html: '',\r | |
25 | tpl: [\r | |
26 | '<video id="{id}-video" autoPlay="{autoplay}" controls="{controls}" poster="{poster}" start="{start}" loopstart="{loopstart}" loopend="{loopend}" autobuffer="{autobuffer}" loop="{loop}" style="width:100%;height:100%">',\r | |
27 | '<tpl for="src">',\r | |
28 | '<source src="{src}" type="{type}"/>',\r | |
29 | '</tpl>',\r | |
30 | '{html}',\r | |
31 | '</video>'\r | |
32 | ],\r | |
33 | \r | |
34 | initComponent: function () {\r | |
35 | \r | |
36 | var me = this,\r | |
37 | fallback,\r | |
38 | size,\r | |
39 | cfg,\r | |
40 | el;\r | |
41 | \r | |
42 | if (me.fallbackHTML) {\r | |
43 | fallback = me.fallbackHTML;\r | |
44 | } else {\r | |
45 | fallback = "Your browser does not support HTML5 Video. ";\r | |
46 | \r | |
47 | if (Ext.isChrome) {\r | |
48 | fallback += 'Upgrade Chrome.';\r | |
49 | } else if (Ext.isGecko) {\r | |
50 | fallback += 'Upgrade to Firefox 3.5 or newer.';\r | |
51 | } else {\r | |
52 | var chrome = '<a href="http://www.google.com/chrome">Chrome</a>';\r | |
53 | fallback += 'Please try <a href="http://www.mozilla.com">Firefox</a>';\r | |
54 | \r | |
55 | if (Ext.isIE) {\r | |
56 | fallback += ', ' + chrome +\r | |
57 | ' or <a href="http://www.apple.com/safari/">Safari</a>.';\r | |
58 | } else {\r | |
59 | fallback += ' or ' + chrome + '.';\r | |
60 | }\r | |
61 | }\r | |
62 | }\r | |
63 | me.fallbackHTML = fallback;\r | |
64 | \r | |
65 | cfg = me.data = Ext.copyTo({\r | |
66 | tag : 'video',\r | |
67 | html: fallback\r | |
68 | },\r | |
69 | me, 'id,poster,start,loopstart,loopend,playcount,autobuffer,loop');\r | |
70 | \r | |
71 | // just having the params exist enables them\r | |
72 | if (me.autoplay) {\r | |
73 | cfg.autoplay = 1;\r | |
74 | }\r | |
75 | if (me.controls) {\r | |
76 | cfg.controls = 1;\r | |
77 | }\r | |
78 | \r | |
79 | // handle multiple sources\r | |
80 | if (Ext.isArray(me.src)) {\r | |
81 | cfg.src = me.src;\r | |
82 | } else {\r | |
83 | cfg.src = [ {src: me.src} ];\r | |
84 | }\r | |
85 | me.callParent();\r | |
86 | },\r | |
87 | \r | |
88 | afterRender: function() {\r | |
89 | var me = this;\r | |
90 | me.callParent();\r | |
91 | me.video = me.body.getById(me.id + '-video');\r | |
92 | el = me.video.dom;\r | |
93 | me.supported = (el && el.tagName.toLowerCase() == 'video');\r | |
94 | if (me.supported) {\r | |
95 | me.video.on('error', me.onVideoError, me);\r | |
96 | }\r | |
97 | },\r | |
98 | \r | |
99 | getFallback: function() {\r | |
100 | return '<h1 style="background-color:#ff4f4f;padding: 10px;">' + this.fallbackHTML + '</h1>';\r | |
101 | },\r | |
102 | \r | |
103 | onVideoError: function() {\r | |
104 | var me = this;\r | |
105 | \r | |
106 | me.video.remove();\r | |
107 | me.supported = false;\r | |
108 | me.body.createChild(me.getFallback());\r | |
109 | },\r | |
110 | \r | |
111 | onDestroy: function () {\r | |
112 | var me = this;\r | |
113 | \r | |
114 | var video = me.video;\r | |
115 | if (me.supported && video) {\r | |
116 | var videoDom = video.dom;\r | |
117 | if (videoDom && videoDom.pause) {\r | |
118 | videoDom.pause();\r | |
119 | }\r | |
120 | video.remove();\r | |
121 | me.video = null;\r | |
122 | }\r | |
123 | \r | |
124 | me.callParent();\r | |
125 | }\r | |
126 | }); |