(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(); } } } }); })();