123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- /*******************************************************************************
- * KindEditor - WYSIWYG HTML Editor for Internet
- * Copyright (C) 2006-2011 kindsoft.net
- *
- * @author Roddy <luolonghao@gmail.com>
- * @site http://www.kindsoft.net/
- * @licence http://www.kindsoft.net/license.php
- *******************************************************************************/
- // Google Maps: http://code.google.com/apis/maps/index.html
- KindEditor.plugin('map', function(K) {
- var self = this, name = 'map', lang = self.lang(name + '.');
- self.clickToolbar(name, function() {
- var html = ['<div style="padding:10px 20px;">',
- '<div class="ke-dialog-row">',
- lang.address + ' <input id="kindeditor_plugin_map_address" name="address" class="ke-input-text" value="" style="width:200px;" /> ',
- '<span class="ke-button-common ke-button-outer">',
- '<input type="button" name="searchBtn" class="ke-button-common ke-button" value="' + lang.search + '" />',
- '</span>',
- '</div>',
- '<div class="ke-map" style="width:558px;height:360px;"></div>',
- '</div>'].join('');
- var dialog = self.createDialog({
- name : name,
- width : 600,
- title : self.lang(name),
- body : html,
- yesBtn : {
- name : self.lang('yes'),
- click : function(e) {
- var geocoder = win.geocoder,
- map = win.map,
- center = map.getCenter().lat() + ',' + map.getCenter().lng(),
- zoom = map.getZoom(),
- maptype = map.getMapTypeId(),
- url = 'http://maps.googleapis.com/maps/api/staticmap';
- url += '?center=' + encodeURIComponent(center);
- url += '&zoom=' + encodeURIComponent(zoom);
- url += '&size=558x360';
- url += '&maptype=' + encodeURIComponent(maptype);
- url += '&markers=' + encodeURIComponent(center);
- url += '&language=' + self.langType;
- url += '&sensor=false';
- self.exec('insertimage', url).hideDialog().focus();
- }
- },
- beforeRemove : function() {
- searchBtn.remove();
- if (doc) {
- doc.write('');
- }
- iframe.remove();
- }
- });
- var div = dialog.div,
- addressBox = K('[name="address"]', div),
- searchBtn = K('[name="searchBtn"]', div),
- win, doc;
- var iframeHtml = ['<!doctype html><html><head>',
- '<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />',
- '<style>',
- ' html { height: 100% }',
- ' body { height: 100%; margin: 0; padding: 0; background-color: #FFF }',
- ' #map_canvas { height: 100% }',
- '</style>',
- '<script src="http://maps.googleapis.com/maps/api/js?sensor=false&language=' + self.langType + '"></script>',
- '<script>',
- 'var map, geocoder;',
- 'function initialize() {',
- ' var latlng = new google.maps.LatLng(31.230393, 121.473704);',
- ' var options = {',
- ' zoom: 11,',
- ' center: latlng,',
- ' disableDefaultUI: true,',
- ' panControl: true,',
- ' zoomControl: true,',
- ' mapTypeControl: true,',
- ' scaleControl: true,',
- ' streetViewControl: false,',
- ' overviewMapControl: true,',
- ' mapTypeId: google.maps.MapTypeId.ROADMAP',
- ' };',
- ' map = new google.maps.Map(document.getElementById("map_canvas"), options);',
- ' geocoder = new google.maps.Geocoder();',
- ' geocoder.geocode({latLng: latlng}, function(results, status) {',
- ' if (status == google.maps.GeocoderStatus.OK) {',
- ' if (results[3]) {',
- ' parent.document.getElementById("kindeditor_plugin_map_address").value = results[3].formatted_address;',
- ' }',
- ' }',
- ' });',
- '}',
- 'function search(address) {',
- ' if (!map) return;',
- ' geocoder.geocode({address : address}, function(results, status) {',
- ' if (status == google.maps.GeocoderStatus.OK) {',
- ' map.setZoom(11);',
- ' map.setCenter(results[0].geometry.location);',
- ' var marker = new google.maps.Marker({',
- ' map: map,',
- ' position: results[0].geometry.location',
- ' });',
- ' } else {',
- ' alert("Invalid address: " + address);',
- ' }',
- ' });',
- '}',
- '</script>',
- '</head>',
- '<body onload="initialize();">',
- '<div id="map_canvas" style="width:100%; height:100%"></div>',
- '</body></html>'].join('\n');
- // TODO:用doc.write(iframeHtml)方式加载时,在IE6上第一次加载报错,暂时使用src方式
- var iframe = K('<iframe class="ke-textarea" frameborder="0" src="' + self.pluginsPath + 'map/map.html" style="width:558px;height:360px;"></iframe>');
- function ready() {
- win = iframe[0].contentWindow;
- doc = K.iframeDoc(iframe);
- //doc.open();
- //doc.write(iframeHtml);
- //doc.close();
- }
- iframe.bind('load', function() {
- iframe.unbind('load');
- if (K.IE) {
- ready();
- } else {
- setTimeout(ready, 0);
- }
- });
- K('.ke-map', div).replaceWith(iframe);
- // search map
- searchBtn.click(function() {
- win.search(addressBox.val());
- });
- });
- });
|