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