You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
263 lines
10 KiB
263 lines
10 KiB
(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();
|
|
}
|
|
}
|
|
}
|
|
});
|
|
|
|
})();
|
|
|
|
|