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