]> git.proxmox.com Git - extjs.git/blame - extjs/packages/ux/classic/src/desktop/Video.js
add extjs 6.0.1 sources
[extjs.git] / extjs / packages / ux / classic / src / desktop / Video.js
CommitLineData
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
16Ext.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});