fck_media_inc.js
上传用户:saigedz
上传日期:2019-10-14
资源大小:997k
文件大小:7k
源码类别:

中间件编程

开发平台:

HTML/CSS

  1. /*
  2.  * Media Plugin for FCKeditor 2.5 SVN
  3.  * Copyright (C) 2007 Riceball LEE (riceballl@hotmail.com)
  4.  *
  5.  * == BEGIN LICENSE ==
  6.  *
  7.  * Licensed under the terms of any of the following licenses at your
  8.  * choice:
  9.  *
  10.  *  - GNU General Public License Version 2 or later (the "GPL")
  11.  *    http://www.gnu.org/licenses/gpl.html
  12.  *
  13.  *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
  14.  *    http://www.gnu.org/licenses/lgpl.html
  15.  *
  16.  *  - Mozilla Public License Version 1.1 or later (the "MPL")
  17.  *    http://www.mozilla.org/MPL/MPL-1.1.html
  18.  *
  19.  * == END LICENSE ==
  20.  *
  21.  * Scripts related to the Media dialog window (see fck_media.html).
  22.  */
  23. var
  24.   cWindowMediaPlayer = 0
  25.   , cRealMediaPlayer = 1
  26.   , cQuickTimePlayer = 2
  27.   , cFlashPlayer = 3
  28.   , cShockwavePlayer = 4
  29.   , cDefaultMediaPlayer = cWindowMediaPlayer
  30.   ;
  31. var cFckMediaElementName = 'fckmedia'; //embed | object | fckmedia
  32. var cMediaTypeAttrName = 'mediatype';  //lowerCase only!!
  33. var cWMp6Compatible = false;
  34. //const cDefaultMediaPlayer = 0; //!!!DO NOT Use the constant! the IE do not support const!
  35. var
  36.     cMediaPlayerTypes = ['application/x-mplayer2', 'audio/x-pn-realaudio-plugin', 'video/quicktime', 'application/x-shockwave-flash', 'application/x-director']
  37.   , cMediaPlayerClassId = [cWMp6Compatible? 'clsid:05589FA1-C356-11CE-BF01-00AA0055595A' : 'clsid:6BF52A52-394A-11D3-B153-00C04F79FAA6', 'clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA'
  38.         , 'clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B', 'clsid:D27CDB6E-AE6D-11cf-96B8-444553540000'
  39.         , 'clsid:166B1BCA-3F9C-11CF-8075-444553540000'
  40.     ]
  41.   , cMediaPlayerCodebase = ['http://microsoft.com/windows/mediaplayer/en/download/', 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab'
  42.         , 'http://www.apple.com/quicktime/download/', 'http://www.macromedia.com/go/getflashplayer', 'http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab'
  43.     ]
  44.   ;
  45. var
  46.   cFCKMediaObjectAttrs = {width:1, height:1, align:1, id:1, name:1, 'class':1, className:1, style:1, title:1}; //the 'class' is keyword in IE!!
  47.   //there are not object params in it.
  48.   cFCKMediaSkipParams = {pluginspage:1, type:1}; 
  49. var
  50.   oWindowMediaPlayer = {id: cWindowMediaPlayer, type: cMediaPlayerTypes[cWindowMediaPlayer], ClsId: cMediaPlayerClassId[cWindowMediaPlayer], Codebase: cMediaPlayerCodebase[cWindowMediaPlayer]
  51.     , Params: {autostart:true, enabled:true, enablecontextmenu:true, fullscreen:false, invokeurls:true, mute:false
  52.         , stretchtofit:false, windowlessvideo:false, balance:'', baseurl:'', captioningid:'', currentmarker:''
  53.         , currentposition:'', defaultframe:'', playcount:'', rate:'', uimode:'', volume:''
  54.       }
  55.   };
  56.   oRealMediaPlayer = {id: cRealMediaPlayer, type: cMediaPlayerTypes[cRealMediaPlayer], ClsId: cMediaPlayerClassId[cRealMediaPlayer], Codebase: cMediaPlayerCodebase[cRealMediaPlayer]
  57.     , Params: {autostart:true, loop:false, autogotourl:true, center:false, imagestatus:true, maintainaspect:false
  58.         , nojava:false, prefetch:true, shuffle:false, console:'', controls:'', numloop:'', scriptcallbacks:''
  59.       }
  60.   };
  61.   oQuickTimePlayer = {id: cQuickTimePlayer, type: cMediaPlayerTypes[cQuickTimePlayer], ClsId: cMediaPlayerClassId[cQuickTimePlayer], Codebase: cMediaPlayerCodebase[cQuickTimePlayer]
  62.     , Params: {autoplay:true, loop:false, cache:false, controller:true, correction:['none', 'full'], enablejavascript:false
  63.         , kioskmode:false, autohref:false, playeveryframe:false, targetcache:false, scale:'', starttime:'', endtime:'', target:'', qtsrcchokespeed:''
  64.         , volume:'', qtsrc:''
  65.       }
  66.   };
  67.   oFlashPlayer = {id: cFlashPlayer, type: cMediaPlayerTypes[cFlashPlayer], ClsId: cMediaPlayerClassId[cFlashPlayer], Codebase: cMediaPlayerCodebase[cFlashPlayer]
  68.     , Params: {play:true, loop:false, menu:true, swliveconnect:true, quality:'', scale:'', salign:'', wmode:'', base:''
  69.         , flashvars:''
  70.       }
  71.   };
  72.   oShockwavePlayer = {id: cShockwavePlayer, type: cMediaPlayerTypes[cShockwavePlayer], ClsId: cMediaPlayerClassId[cShockwavePlayer], Codebase: cMediaPlayerCodebase[cShockwavePlayer]
  73.     , Params: {autostart:true, sound:true, progress:false, swliveconnect:false, swvolume:'', swstretchstyle:'', swstretchhalign:'', swstretchvalign:''
  74.       }
  75.   };
  76. var
  77.   oFCKMediaPlayers = [oWindowMediaPlayer, oRealMediaPlayer, oQuickTimePlayer, oFlashPlayer, oShockwavePlayer];
  78. String.prototype.trim = function() {
  79. return this.replace(/^s+|s+$/g,"");
  80. }
  81. String.prototype.ltrim = function() {
  82. return this.replace(/^s+/,"");
  83. }
  84. String.prototype.rtrim = function() {
  85. return this.replace(/s+$/,"");
  86. }
  87. function debugListMember(o) {
  88.   var s = 'n';
  89.   if (typeof(o) == 'object') 
  90.     s +=o.toSource();
  91.   else
  92.     s+= o;
  93.   return s;
  94. }
  95. function GetMediaPlayerTypeId(aMediaType) {
  96.   for (i = 0; i < cMediaPlayerTypes.length; i++ )
  97.     if (aMediaType.toLowerCase() == cMediaPlayerTypes[i]) return i;
  98.   return cDefaultMediaPlayer;
  99. }
  100. function isInt(aStr) {
  101.   var i = parseInt(aStr);
  102.   if (isNaN(i)) return false;
  103.   i = i.toString();
  104.   return (i == aStr);
  105. }
  106. function DequotedStr(aStr) {
  107.   aStr = aStr.trim();
  108.   //aStr.replace(/^(['"])(.*?)(1)$/g, '$2');
  109.   if (aStr.length > 2) {
  110.     if (aStr.charAt(0) == '"' && aStr.charAt(aStr.length-1) == '"' )
  111.       aStr = aStr.substring(1,aStr.length-1);
  112.     else if (aStrcharAt(0) == ''' && aStr.charAt(aStr.length-1) == ''' )
  113.       aStr = aStr.substring(1,aStr.length-1);
  114.   }
  115.   //alert(aStr+ ': dd:'+aStr.charAt(0)+ aStr.charAt(aStr.length-1));
  116.   return aStr;
  117. }
  118. function WrapObjectToMedia(html, aMediaElementName) {
  119.   //check media first
  120.   function _ConvertMedia( m, params )
  121.   {
  122.     //split params to array
  123.     m = params;
  124.     var params  = params.match(/[s]*(.+?)=['"](.*?)['"][s]*/gi);
  125.     var vObjectAttrs = '';
  126.     var Result = '';
  127.     var vParamName, vParamValue;
  128.     var vIsMedia = false;
  129.     for (var i = 0; i < params.length; i++) {
  130.       vPos = params[i].indexOf('=');
  131.       vParamName = params[i].substring(0, vPos).trim();
  132.       vParamName = vParamName.toLowerCase();
  133.       vParamValue = params[i].substring(vPos+1);
  134.       vParamValue = DequotedStr(vParamValue);
  135.       if (vParamName == cMediaTypeAttrName) {
  136.         //alert(vParamName+':'+vParamValue);
  137.         if (isInt(vParamValue)) {
  138.           vIsMedia = true;
  139.           vObjectAttrs += ' '+ cMediaTypeAttrName + '="' + vParamValue + '"';
  140.           vObjectAttrs += ' classid="' +  oFCKMediaPlayers[vParamValue].ClsId + '"';
  141.           vObjectAttrs += ' codebase="' +  oFCKMediaPlayers[vParamValue].Codebase + '"';
  142.         }else {
  143.           break;
  144.         }
  145.       } else if (cFCKMediaObjectAttrs[vParamName]) {
  146.         vObjectAttrs += ' ' + vParamName + '="' + vParamValue + '"';
  147.       } else if (!cFCKMediaSkipParams[vParamName]) {
  148.         Result += '<param name="' + vParamName + '" value="' + vParamValue + '"/>';
  149.       }
  150.     } //for
  151.     //wrap the <object> tag to <embed>
  152.     if (vIsMedia) {
  153.       Result = '<embed' + m + '></embed>';
  154.       //alert(Result);
  155.       return Result;
  156.     }
  157.   }
  158.   if (aMediaElementName == '') aMediaElementName = cFckMediaElementName;
  159.   var regexMedia = new RegExp( '<'+aMediaElementName+'(.+?)></'+aMediaElementName+'>', 'gi' );
  160.   //var regexMedia = /<fckMedias+(.+?)></fckMedia>/gi;
  161.   //alert('b:'+html);
  162.   return html.replace( regexMedia, _ConvertMedia ) ;
  163. }