( function ( ) { var domUtils = UM . dom . domUtils ; var widgetName = 'video' ; UM . registerWidget ( widgetName , { tpl : "<link rel=\"stylesheet\" type=\"text/css\" href=\"<%=video_url%>video.css\" />" + "<div class=\"edui-video-wrapper\">" + "<div id=\"eduiVideoTab\">" + "<div id=\"eduiVideoTabHeads\" class=\"edui-video-tabhead\">" + "<span tabSrc=\"video\" class=\"edui-video-focus\"><%=lang_tab_insertV%></span>" + "</div>" + "<div id=\"eduiVideoTabBodys\" class=\"edui-video-tabbody\">" + "<div id=\"eduiVideoPanel\" class=\"edui-video-panel\">" + "<table><tr><td><label for=\"eduiVideoUrl\" class=\"edui-video-url\"><%=lang_video_url%></label></td><td><input id=\"eduiVideoUrl\" type=\"text\"></td></tr></table>" + "<div id=\"eduiVideoPreview\"></div>" + "<div id=\"eduiVideoInfo\">" + "<fieldset>" + "<legend><%=lang_video_size%></legend>" + "<table>" + "<tr><td><label for=\"eduiVideoWidth\"><%=lang_videoW%></label></td><td><input class=\"edui-video-txt\" id=\"eduiVideoWidth\" type=\"text\"/></td></tr>" + "<tr><td><label for=\"eduiVideoHeight\"><%=lang_videoH%></label></td><td><input class=\"edui-video-txt\" id=\"eduiVideoHeight\" type=\"text\"/></td></tr>" + "</table>" + "</fieldset>" + "<fieldset>" + "<legend><%=lang_alignment%></legend>" + "<div id=\"eduiVideoFloat\"></div>" + "</fieldset>" + "</div>" + "</div>" + "</div>" + "</div>" + "</div>" , initContent : function ( editor , $widget ) { var me = this , lang = editor . getLang ( widgetName ) , video_url = UMEDITOR_CONFIG . UMEDITOR_HOME_URL + 'dialogs/video/' ; me . lang = lang ; me . editor = editor ; me . $widget = $widget ; me . root ( ) . html ( $ . parseTmpl ( me . tpl , $ . extend ( { video_url : video_url } , lang [ 'static' ] ) ) ) ; me . initController ( lang ) ; } , initEvent : function ( ) { var me = this , url = $ ( "#eduiVideoUrl" , me . $widget ) [ 0 ] ; if ( 'oninput' in url ) { url . oninput = function ( ) { me . createPreviewVideo ( this . value ) ; } ; } else { url . onpropertychange = function ( ) { me . createPreviewVideo ( this . value ) ; } ; } } , initController : function ( lang ) { var me = this , img = me . editor . selection . getRange ( ) . getClosedNode ( ) , url ; me . createAlignButton ( [ "eduiVideoFloat" ] ) ; if ( img && img . className == "edui-faked-video" ) { $ ( "#eduiVideoUrl" , me . $widget ) [ 0 ] . value = url = img . getAttribute ( "_url" ) ; $ ( "#eduiVideoWidth" , me . $widget ) [ 0 ] . value = img . width ; $ ( "#eduiVideoHeight" , me . $widget ) [ 0 ] . value = img . height ; var align = domUtils . getComputedStyle ( img , "float" ) , parentAlign = domUtils . getComputedStyle ( img . parentNode , "text-align" ) ; me . updateAlignButton ( parentAlign === "center" ? "center" : align ) ; } me . createPreviewVideo ( url ) ; } , /**
         * 根据url生成视频预览
         */ createPreviewVideo : function ( url ) { if ( ! url ) return ; var me = this , lang = me . lang , conUrl = me . convert_url ( url ) ; if ( ! me . endWith ( conUrl , [ ".swf" , ".flv" , ".wmv" ] ) ) { $ ( "#eduiVideoPreview" , me . $widget ) . html ( lang . urlError ) ; return ; } $ ( "#eduiVideoPreview" , me . $widget ) [ 0 ] . innerHTML = '<embed type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"' + ' src="' + url + '"' + ' width="' + 420 + '"' + ' height="' + 280 + '"' + ' wmode="transparent" play="true" loop="false" menu="false" allowscriptaccess="never" allowfullscreen="true" ></embed>' ; } , /**
         * 将单个视频信息插入编辑器中
         */ insertSingle : function ( ) { var me = this , width = $ ( "#eduiVideoWidth" , me . $widget ) [ 0 ] , height = $ ( "#eduiVideoHeight" , me . $widget ) [ 0 ] , url = $ ( '#eduiVideoUrl' , me . $widget ) [ 0 ] . value , align = this . findFocus ( "eduiVideoFloat" , "name" ) ; if ( ! url ) return false ; if ( ! me . checkNum ( [ width , height ] ) ) return false ; this . editor . execCommand ( 'insertvideo' , { url : me . convert_url ( url ) , width : width . value , height : height . value , align : align } ) ; } , /**
         * URL转换
         */ convert_url : function ( url ) { if ( ! url ) return '' ; var matches = url . match ( /youtu.be\/(\w+)$/ ) || url . match ( /youtube\.com\/watch\?v=(\w+)/ ) || url . match ( /youtube.com\/v\/(\w+)/ ) , youku = url . match ( /youku\.com\/v_show\/id_(\w+)/ ) , youkuPlay = /player\.youku\.com/ig . test ( url ) ; if ( youkuPlay ) { url = url . replace ( /\?f=.*/ , "" ) ; } else if ( matches ) { url = "https://www.youtube.com/v/" + matches [ 1 ] + "?version=3&feature=player_embedded" ; } else if ( youku ) { url = "http://player.youku.com/player.php/sid/" + youku [ 1 ] + "/v.swf" ; } else { url = url . replace ( /http:\/\/www\.tudou\.com\/programs\/view\/([\w\-]+)\/?/i , "http://www.tudou.com/v/$1" ) . replace ( /http:\/\/www\.youtube\.com\/watch\?v=([\w\-]+)/i , "http://www.youtube.com/v/$1" ) . replace ( /http:\/\/v\.youku\.com\/v_show\/id_([\w\-=]+)\.html/i , "http://player.youku.com/player.php/sid/$1" ) . replace ( /http:\/\/www\.56\.com\/u\d+\/v_([\w\-]+)\.html/i , "http://player.56.com/v_$1.swf" ) . replace ( /http:\/\/www.56.com\/w\d+\/play_album\-aid\-\d+_vid\-([^.]+)\.html/i , "http://player.56.com/v_$1.swf" ) . replace ( /http:\/\/v\.ku6\.com\/.+\/([^.]+)\.html/i , "http://player.ku6.com/refer/$1/v.swf" ) . replace ( /\?f=.*/ , "" ) ; } return url ; } , /**
         * 检测传入的所有input框中输入的长宽是否是正数
         */ checkNum : function checkNum ( nodes ) { var me = this ; for ( var i = 0 , ci ; ci = nodes [ i ++ ] ; ) { var value = ci . value ; if ( ! me . isNumber ( value ) && value ) { alert ( me . lang . numError ) ; ci . value = "" ; ci . focus ( ) ; return false ; } } return true ; } , param value isNumber : function ( value ) { return /(0|^[1-9]\d*$)/ . test ( value ) ; } , updateAlignButton : function ( align ) { var aligns = $ ( "#eduiVideoFloat" , this . $widget ) [ 0 ] . children ; for ( var i = 0 , ci ; ci = aligns [ i ++ ] ; ) { if ( ci . getAttribute ( "name" ) == align ) { if ( ci . className != "edui-video-focus" ) { ci . className = "edui-video-focus" ; } } else { if ( ci . className == "edui-video-focus" ) { ci . className = "" ; } } } } , param ids createAlignButton : function ( ids ) { var lang = this . lang , vidoe_home = UMEDITOR_CONFIG . UMEDITOR_HOME_URL + 'dialogs/video/' ; for ( var i = 0 , ci ; ci = ids [ i ++ ] ; ) { var floatContainer = $ ( "#" + ci , this . $widget ) [ 0 ] , nameMaps = { "none" : lang [ 'default' ] , "left" : lang . floatLeft , "right" : lang . floatRight } ; for ( var j in nameMaps ) { var div = document . createElement ( "div" ) ; div . setAttribute ( "name" , j ) ; if ( j == "none" ) div . className = "edui-video-focus" ; div . style . cssText = "background:url(" + vidoe_home + "images/" + j + "_focus.jpg);" ; div . setAttribute ( "title" , nameMaps [ j ] ) ; floatContainer . appendChild ( div ) ; } this . switchSelect ( ci ) ; } } , /**
         * 选择切换
         */ switchSelect : function ( selectParentId ) { var selects = $ ( "#" + selectParentId , this . $widget ) [ 0 ] . children ; for ( var i = 0 , ci ; ci = selects [ i ++ ] ; ) { $ ( ci ) . on ( "click" , function ( ) { for ( var j = 0 , cj ; cj = selects [ j ++ ] ; ) { cj . className = "" ; cj . removeAttribute && cj . removeAttribute ( "class" ) ; } this . className = "edui-video-focus" ; } ) ; } } , param id param returnProperty findFocus : function ( id , returnProperty ) { var tabs = $ ( "#" + id , this . $widget ) [ 0 ] . children , property ; for ( var i = 0 , ci ; ci = tabs [ i ++ ] ; ) { if ( ci . className == "edui-video-focus" ) { property = ci . getAttribute ( returnProperty ) ; break ; } } return property ; } , /**
         * 末尾字符检测
         */ endWith : function ( str , endStrArr ) { for ( var i = 0 , len = endStrArr . length ; i < len ; i ++ ) { var tmp = endStrArr [ i ] ; if ( str . length - tmp . length < 0 ) return false ; if ( str . substring ( str . length - tmp . length ) == tmp ) { return true ; } } return false ; } , width : 610 , height : 498 , buttons : { ok : { exec : function ( editor , $w ) { $ ( "#eduiVideoPreview" , $w ) . html ( "" ) ; editor . getWidgetData ( widgetName ) . insertSingle ( ) ; } } , cancel : { exec : function ( ) { $ ( "#eduiVideoPreview" ) . html ( "" ) ; } } } } ) ; } ) ( ) ;