uxmedia.js.svn-base
来自「一个使用ssh+ext的例子。 希望对开发这个应用的人带来好处。仔细研究里面的」· SVN-BASE 代码 · 共 733 行 · 第 1/2 页
SVN-BASE
733 行
/*
* @class Ext.ux.Media,
* Ext.ux.MediaComponent (xtype: media),
* Ext.ux.MediaPanel (xtype: mediapanel)
* Ext.ux.MediaWindow
*
* Version: RC1
* Author: Doug Hendricks. doug[always-At]theactivegroup.com
* Copyright 2007-2008, Active Group, Inc. All rights reserved.
*
************************************************************************************
* This file is distributed on an AS IS BASIS WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE.
************************************************************************************
License: ux.Media classes are licensed under the terms of
the Open Source LGPL 3.0 license. Commercial use is permitted to the extent
that the code/component(s) do NOT become part of another Open Source or Commercially
licensed development library or toolkit without explicit permission.
Donations are welcomed: http://donate.theactivegroup.com
License details: http://www.gnu.org/licenses/lgpl.html
Notes: the <embed> tag is NOT used(or necessary) in this implementation
Version: Rc1
Adds inline media rendering within markup: <div><script>document.write(String(new Ext.ux.Media(mediaCfg)));</script></div>
New extensible classes :
ux.Media
ux.MediaComponent
ux.MediaPanel
Solves the Firefox reinitialization problem for Ext.Components with embedded <OBJECT> tags
when the upstream DOM is reflowed.
See Mozilla https://bugzilla.mozilla.org/show_bug.cgi?id=262354
Version: .31 Fixes to canned WMV config.
Version: .3 New class Heirarchy. Adds renderMedia(mediaCfg) method for refreshing
a mediaPanels body with a new/current mediaCfg.
Version: .2 Adds JW FLV Player Support and enhances mediaClass defaults mechanism.
Version: .11 Modified width/height defaults since CSS does not seem to
honor height/width rules
Version: .1 initial release
mediaCfg: {Object}
{ mediaType : mediaClass defined by ux.Media.mediaTypes[mediaClass]
,url : Url resource to load when rendered
,requiredVersion : may specify a specific player/plugin version (for use with inline plugin updates where implemented)
,loop : (true/false) (@macro enabled)
,scripting : (true/false) (@macro enabled)
,start : (true/false) (@macro enabled)
,volume : (number) audio volume level (@macro enabled)
,height : (defaults 100%) (@macro enabled)
,width : (defaults 100%) (@macro enabled)
,autoSize : (true/false) If true the rendered <object> consumes 100% height/width of its
containing Element. Actual container height/width are available to macro substitution
engine.
,controls : optional: show plugins control menu (true/false) (@macro enabled)
,unsupportedText: (String,DomHelper cfg) Text to render if plugin is not installed/available.
,listeners : {"mouseover": function() {}, .... } DOM listeners to set each time the Media is rendered.
,params : { } members/values unique to Plugin provider
}
*/
(function(){
/*
* Base Media Class
*/
var ux = Ext.ux.Media = function(config){
Ext.apply(this,config||{});
this.toString = this.mediaMarkup;
this.initMedia();
};
ux.mediaTypes =
{
"PDF" : Ext.apply({
tag :'object'
,cls : 'x-media x-media-pdf'
,type : "application/pdf"
,style :{position:'absolute',top:'0px',left:'0px','z-index':11002}
,data : "@url"
,autoSize:true
,params : { src : "@url" }
},Ext.isIE?{classid :"CLSID:CA8A9780-280D-11CF-A24D-444553540000"}:false)
,"WMV" : Ext.apply(
{tag :'object'
,cls : 'x-media x-media-wmv'
,type :'video/x-ms-wmv'
,data : "@url"
,params : {
src : "@url"
,url : "@url"
,autostart : "@start"
,showcontrols : "@controls"
}
},Ext.isIE?{classid :"CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6"}:false)
,"SWF" : Ext.apply({
tag :'object'
,cls : 'x-media x-media-swf'
,type : 'application/x-shockwave-flash'
,data : "@url"
,scripting: 'sameDomain'
,loop : true
,start : false
,unsupportedText : {cn:['The Adobe Flash Player{0}is required.',{tag:'br'},{tag:'a',cn:'The free download is available here.',href:'http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash',target:'_flash'}]}
,params : {
movie : "@url"
,menu : "@controls"
,play : "@start"
,quality : "high"
,allowscriptaccess : "@scripting"
,bgcolor : "#FFFFFF"
,wmode : "opaque"
,loop : "@loop"
}
},Ext.isIE?{classid :"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
,codebase:"http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"
}:false)
,"JWP" : Ext.apply({
tag :'object'
,cls : 'x-media x-media-swf x-media-flv'
,type : 'application/x-shockwave-flash'
,data : "@url"
,loop : false
,start : false
,params : {
movie : "@url"
,flashVars : {
autostart:'@start'
,repeat :'@loop'
,height :'@height'
,width :'@width'
,id : '@id'
}
}
},Ext.isIE?{classid :"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"}:false)
,"MOV" : Ext.apply({
tag :'object'
,cls : 'x-media x-media-mov'
,type : "video/quicktime"
,data : "@url"
,params : {
src : "@url"
,autoplay : "@start"
,controller : "@controls"
,enablejavascript : "@scripting"
}
},Ext.isIE?
{ classid :'clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B'
,codebase :'http://www.apple.com/qtactivex/qtplugin.cab'
,type : 'application/x-oleobject'
,params : { src : "@url"
,controller :'@controls'
,autostart :'@start'
}
}:false)
,"REAL" : Ext.apply({
tag :'object'
,cls : 'x-media x-media-real'
,type : "audio/x-pn-realaudio"
,data : "@url"
,standby : "Loading Real Media Player components..."
,params : {
src : "@url"
,autostart : "@start"
,controller : "@controls"
,controlls : "@controls"
,loop : "@loop"
,console : "TES"
}
},Ext.isIE?{classid :"clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA"}:false)
,"SVG" : {
tag : 'object'
,cls : 'x-media x-media-img x-media-svg'
,type : "image/svg+xml"
,data : "@url"
}
,"GIF" : {
tag : 'img'
,cls : 'x-media x-media-img x-media-gif'
,src : "@url"
}
,"JPEG" : {
tag : 'img'
,cls : 'x-media x-media-img x-media-jpeg'
,src : "@url"
}
,"JP2" :{
tag : 'object'
,cls : 'x-media x-media-img x-media-jp2'
,type : "image/jpeg2000-image"
,data : "@url"
}
,"PNG" : {
tag : 'img'
,cls : 'x-media x-media-img x-media-png'
,src : "@url"
}
,"HTM" : {
tag : 'iframe'
,cls : 'x-media x-media-html'
,frameBorder : 0
,style : {overflow:'auto'}
,src : "@url"
}
,"TXT" : {
tag : 'object'
,cls : 'x-media x-media-text'
,type : "text/plain"
,style : {overflow:'auto'}
,data : "@url"
}
,"SILVER" : {
tag : 'object'
,cls : 'x-media x-media-silverlight'
,type :"application/x-silverlight"
,data : "@url"
}
,"OFFICE" : {
tag : 'object'
,cls : 'x-media x-media-office'
,type :"application/x-msoffice"
,data : "@url"
}
,"XML" : { //outright dangerous on IE !
tag : 'iframe'
,cls : 'x-media x-media-xml'
,style : {overflow:'auto'}
,src : "@url"
}
,"QTMIDI" : Ext.apply({
tag : 'object'
,cls : 'x-media x-media-audio x-media-midi'
,type : "audio/midi"
,style : {overflow:'auto'}
,data : "@url"
,params : {autostart :'@start'}
},Ext.isIE?
{ classid :'clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B'
,codebase :'http://www.apple.com/qtactivex/qtplugin.cab'
,type : 'application/x-oleobject'
,params : { src : "@url"
,controller :'@controls'
,autostart :'@start'
,enablejavascript : "@scripting"
}
}
:false)
,"QTMP3" : Ext.apply({
tag : 'object'
,cls : 'x-media x-media-audio x-media-mpeg'
,type : "audio/mpeg"
,data : '@url'
,params : {autostart :'@start'}
},Ext.isIE?
{ classid :'clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B'
,codebase :'http://www.apple.com/qtactivex/qtplugin.cab'
,type : 'application/x-oleobject'
,params : { src : "@url"
,controller :'@controls'
,autostart :'@start'
,enablejavascript : "@scripting"
}
}
:false)
,"QTWAV" : Ext.apply({
tag : 'object'
,cls : 'x-media x-media-audio x-media-wav'
,type : "audio/wav"
,data : '@url'
,params : {autostart :'@start'}
},Ext.isIE?
{ classid :'clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B'
,codebase :'http://www.apple.com/qtactivex/qtplugin.cab'
,type : 'application/x-oleobject'
,params : { src : "@url"
,controller :'@controls'
,autostart :'@start'
,enablejavascript : "@scripting"
}
}
:false)
};
Ext.apply(ux.prototype , {
mediaObject : null,
mediaCfg : null,
mediaVersion : null,
requiredVersion : null,
unsupportedText : null,
/* Component Plugins Interface
extends the Component instance with ux.Media.* interfaces
*/
init : function(component){
if(component && this.getEl == undefined){
Ext.applyIf(component,this);
}
},
initMedia : function(){ },
onBeforeMedia : function(mediaCfg, ct, domPosition ){
var m = mediaCfg || this.mediaCfg, mt;
if( m && (mt = this.getMediaType(m.mediaType)) ){
m.autoSize = (m.autoSize == undefined? mt.autoSize===true:m.autoSize===true);
//Calculate parent container size for macros (if available)
if(m.autoSize && (ct = Ext.isReady?Ext.get(ct||this.lastCt):null)){
m.height = ct.getHeight(true) || this.assert(m.height,'100%');
m.width = ct.getWidth(true) || this.assert(m.width ,'100%');
}
}
},
onAfterMedia : function(){
//Reattach any DOM Listeners after rendering.
var L = this.mediaCfg?this.mediaCfg.listeners:null;
if(L && this.mediaObject){ this.mediaObject.on(L); }
},
getMediaType: function(type){
return ux.mediaTypes[type];
},
assert : function(v,def){
v= typeof v == 'function'?v.call(v.scope||null):v;
return Ext.value(v ,def);
},
mediaMarkup : function(mediaCfg, width, height, ct){
mediaCfg = mediaCfg ||this.mediaCfg;
if(!mediaCfg){return '';}
var m= Ext.apply({url:false,autoSize:false}, mediaCfg); //make a copy
m.url = this.assert(m.url,false);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?