( function ( ) { var widgetName = 'map' ; UM . registerWidget ( widgetName , { tpl : "<style type=\"text/css\">" + ".edui-dialog-map .edui-map-content{width:530px; height: 350px;margin: 10px auto;}" + ".edui-dialog-map .edui-map-content table{width: 100%}" + ".edui-dialog-map .edui-map-content table td{vertical-align: middle;}" + ".edui-dialog-map .edui-map-button { border: 1px solid #ccc; float: left; cursor: default; height: 23px; width: 70px; cursor: pointer; margin: 0; font-size: 12px; line-height: 24px; text-align: center; }" + ".edui-dialog-map .edui-map-button:hover {background:#eee;}" + ".edui-dialog-map .edui-map-city,.edui-dialog-map .edui-map-address{height:21px;background: #FFF;border:1px solid #d7d7d7; line-height: 21px;}" + ".edui-dialog-map .edui-map-city{width:90px}" + ".edui-dialog-map .edui-map-address{width:150px}" + ".edui-dialog-map .edui-map-dynamic-label span{vertical-align:middle;margin: 3px 0px 3px 3px;}" + ".edui-dialog-map .edui-map-dynamic-label input{vertical-align:middle;margin: 3px;}" + "</style>" + "<div class=\"edui-map-content\">" + "<table>" + "<tr>" + "<td><%=lang_city%>:</td>" + "<td><input class=\"edui-map-city\" type=\"text\" value=\"<%=city.value%>\"/></td>" + "<td><%=lang_address%>:</td>" + "<td><input class=\"edui-map-address\" type=\"text\" value=\"\" /></td>" + "<td><a class=\"edui-map-button\"><%=lang_search%></a></td>" + "<td><label class=\"edui-map-dynamic-label\"><input class=\"edui-map-dynamic\" type=\"checkbox\" name=\"edui-map-dynamic\" /><span><%=lang_dynamicmap%></span></label></td>" + "</tr>" + "</table>" + "<div style=\"width:100%;height:340px;margin:5px auto;border:1px solid gray\" class=\"edui-map-container\"></div>" + "</div>" + "<script class=\"edui-tpl-container\" type=\"text/plain\">" + "<!DOCTYPE html>" + "<html>" + "<head>" + "<title></title>" + "</head>" + "<body>" + "<scr_ipt>" + "window.onload = function(){" + "var scripts = document.scripts || document.getElementsByTagName(\"script\")," + "src = [];" + "for( var i = 1, len = scripts.length; i<len; i++ ) {" + "src.push( scripts[i].src );" + "}" + "parent.UM.getEditor(<<id>>).getWidgetData(\'map\').requestMapApi( src );" + "};" + "function mapReadyStateChange ( state ) { " + " if ( state === 'complete' || state === 'loaded' ) {" + " document.close(); " + " } }" + "</scr_ipt>" + "<scr_ipt onreadystatechange='mapReadyStateChange(this.readyState);' onload='mapReadyStateChange(\"loaded\");' src=\"http://api.map.baidu.com/api?v=2.0&ak=6b6c1a67eaa7db1ca6d6da28e590e343&services=true\"></scr_ipt>" + "</body>" + "</html>" + "</script>" , initContent : function ( editor , $widget ) { var me = this , lang = editor . getLang ( widgetName ) , theme_url = editor . options . themePath + editor . options . theme ; if ( me . inited ) { me . preventDefault ( ) ; return false ; } me . inited = true ; me . lang = lang ; me . editor = editor ; me . root ( ) . html ( $ . parseTmpl ( me . tpl , $ . extend ( { } , lang [ 'static' ] , { 'theme_url' : theme_url } ) ) ) ; me . initRequestApi ( ) ; } , /**
         * 初始化请求API
         */ initRequestApi : function ( ) { var $ifr = null ; if ( window . BMap && window . BMap . Map ) { this . initBaiduMap ( ) ; } else { $ifr = $ ( '<iframe style="display: none;"></iframe>' ) ; $ifr . appendTo ( this . root ( ) ) ; $ifr = $ifr [ 0 ] . contentWindow . document ; $ifr . open ( ) ; $ifr . write ( this . root ( ) . find ( ".edui-tpl-container" ) . html ( ) . replace ( /scr_ipt/g , 'script' ) . replace ( '<<id>>' , "'" + this . editor . id + "'" ) ) ; } } , requestMapApi : function ( src ) { var me = this ; if ( src . length ) { var _src = src [ 0 ] ; src = src . slice ( 1 ) ; if ( _src ) { $ . getScript ( _src , function ( ) { me . requestMapApi ( src ) ; } ) ; } else { me . requestMapApi ( src ) ; } } else { me . initBaiduMap ( ) ; } } , initBaiduMap : function ( ) { var $root = this . root ( ) , map = new BMap . Map ( $root . find ( ".edui-map-container" ) [ 0 ] ) , me = this , marker , point , imgcss , img = $ ( me . editor . selection . getRange ( ) . getClosedNode ( ) ) ; map . enableInertialDragging ( ) ; map . enableScrollWheelZoom ( ) ; map . enableContinuousZoom ( ) ; if ( img . length && /api[.]map[.]baidu[.]com/ig . test ( img . attr ( "src" ) ) ) { var url = img . attr ( "src" ) , centerPos = me . getPars ( url , "center" ) . split ( "," ) , markerPos = me . getPars ( url , "markers" ) . split ( "," ) ; point = new BMap . Point ( Number ( centerPos [ 0 ] ) , Number ( centerPos [ 1 ] ) ) ; marker = new BMap . Marker ( new BMap . Point ( Number ( markerPos [ 0 ] ) , Number ( markerPos [ 1 ] ) ) ) ; map . addControl ( new BMap . NavigationControl ( ) ) ; map . centerAndZoom ( point , Number ( me . getPars ( url , "zoom" ) ) ) ; imgcss = img . attr ( 'style' ) ; } else { point = new BMap . Point ( 116.404 , 39.915 ) ; marker = new BMap . Marker ( point ) ; map . addControl ( new BMap . NavigationControl ( ) ) ; map . centerAndZoom ( point , 10 ) ; } marker . enableDragging ( ) ; map . addOverlay ( marker ) ; me . map = map ; me . marker = marker ; me . imgcss = imgcss ; } , doSearch : function ( ) { var me = this , city = me . root ( ) . find ( '.edui-map-city' ) . val ( ) , address = me . root ( ) . find ( '.edui-map-address' ) . val ( ) ; if ( ! city ) { alert ( me . lang . cityMsg ) ; return ; } var search = new BMap . LocalSearch ( city , { onSearchComplete : function ( results ) { if ( results && results . getNumPois ( ) ) { var points = [ ] ; for ( var i = 0 ; i < results . getCurrentNumPois ( ) ; i ++ ) { points . push ( results . getPoi ( i ) . point ) ; } if ( points . length > 1 ) { me . map . setViewport ( points ) ; } else { me . map . centerAndZoom ( points [ 0 ] , 13 ) ; } point = me . map . getCenter ( ) ; me . marker . setPoint ( point ) ; } else { alert ( me . lang . errorMsg ) ; } } } ) ; search . search ( address || city ) ; } , getPars : function ( str , par ) { var reg = new RegExp ( par + "=((\\d+|[.,])*)" , "g" ) ; return reg . exec ( str ) [ 1 ] ; } , reset : function ( ) { this . map && this . map . reset ( ) ; } , initEvent : function ( ) { var me = this , $root = me . root ( ) ; $root . find ( '.edui-map-address' ) . on ( 'keydown' , function ( evt ) { evt = evt || event ; if ( evt . keyCode == 13 ) { me . doSearch ( ) ; return false ; } } ) ; $root . find ( ".edui-map-button" ) . on ( 'click' , function ( evt ) { me . doSearch ( ) ; } ) ; $root . find ( ".edui-map-address" ) . focus ( ) ; $root . on ( "mousewheel DOMMouseScroll" , function ( e ) { return false ; } ) ; } , width : 580 , height : 408 , buttons : { ok : { exec : function ( editor ) { var widget = editor . getWidgetData ( widgetName ) , center = widget . map . getCenter ( ) , zoom = widget . map . getZoom ( ) , size = widget . map . getSize ( ) , point = widget . marker . P ; if ( widget . root ( ) . find ( ".edui-map-dynamic" ) [ 0 ] . checked ) { var URL = editor . getOpt ( 'UMEDITOR_HOME_URL' ) , url = [ URL + ( /\/$/ . test ( URL ) ? '' : '/' ) + "dialogs/map/map.html" + '#center=' + center . lng + ',' + center . lat , '&zoom=' + zoom , '&width=' + size . width , '&height=' + size . height , '&markers=' + point . lng + ',' + point . lat ] . join ( '' ) ; editor . execCommand ( 'inserthtml' , '<iframe class="ueditor_baidumap" src="' + url + '" frameborder="0" width="' + ( size . width + 4 ) + '" height="' + ( size . height + 4 ) + '"></iframe>' ) ; } else { url = "http://api.map.baidu.com/staticimage?center=" + center . lng + ',' + center . lat + "&zoom=" + zoom + "&width=" + size . width + '&height=' + size . height + "&markers=" + point . lng + ',' + point . lat ; editor . execCommand ( 'inserthtml' , '<img width="' + size . width + '"height="' + size . height + '" src="' + url + '"' + ( widget . imgcss ? ' style="' + widget . imgcss + '"' : '' ) + '/>' , true ) ; } widget . reset ( ) ; } } , cancel : { exec : function ( editor ) { editor . getWidgetData ( widgetName ) . reset ( ) ; } } } } ) ; } ) ( ) ;