PageRenderTime 29ms CodeModel.GetById 9ms app.highlight 15ms RepoModel.GetById 1ms app.codeStats 0ms

/source/Plug-in/kind/plugins/map/map.js

http://prosporous.googlecode.com/
JavaScript | 137 lines | 121 code | 2 blank | 14 comment | 10 complexity | 7a525ea163ef754c42fe24dc6b215eb4 MD5 | raw file
  1/*******************************************************************************
  2* KindEditor - WYSIWYG HTML Editor for Internet
  3* Copyright (C) 2006-2011 kindsoft.net
  4*
  5* @author Roddy <luolonghao@gmail.com>
  6* @site http://www.kindsoft.net/
  7* @licence http://www.kindsoft.net/license.php
  8*******************************************************************************/
  9
 10// Google Maps: http://code.google.com/apis/maps/index.html
 11
 12KindEditor.plugin('map', function(K) {
 13	var self = this, name = 'map', lang = self.lang(name + '.');
 14	self.clickToolbar(name, function() {
 15		var html = ['<div style="padding:10px 20px;">',
 16			'<div class="ke-dialog-row">',
 17			lang.address + ' <input id="kindeditor_plugin_map_address" name="address" class="ke-input-text" value="" style="width:200px;" /> ',
 18			'<span class="ke-button-common ke-button-outer">',
 19			'<input type="button" name="searchBtn" class="ke-button-common ke-button" value="' + lang.search + '" />',
 20			'</span>',
 21			'</div>',
 22			'<div class="ke-map" style="width:558px;height:360px;"></div>',
 23			'</div>'].join('');
 24		var dialog = self.createDialog({
 25			name : name,
 26			width : 600,
 27			title : self.lang(name),
 28			body : html,
 29			yesBtn : {
 30				name : self.lang('yes'),
 31				click : function(e) {
 32					var geocoder = win.geocoder,
 33						map = win.map,
 34						center = map.getCenter().lat() + ',' + map.getCenter().lng(),
 35						zoom = map.getZoom(),
 36						maptype = map.getMapTypeId(),
 37						url = 'http://maps.googleapis.com/maps/api/staticmap';
 38						url += '?center=' + encodeURIComponent(center);
 39						url += '&zoom=' + encodeURIComponent(zoom);
 40						url += '&size=558x360';
 41						url += '&maptype=' + encodeURIComponent(maptype);
 42						url += '&markers=' + encodeURIComponent(center);
 43						url += '&language=' + self.langType;
 44						url += '&sensor=false';
 45					self.exec('insertimage', url).hideDialog().focus();
 46				}
 47			},
 48			beforeRemove : function() {
 49				searchBtn.remove();
 50				if (doc) {
 51					doc.write('');
 52				}
 53				iframe.remove();
 54			}
 55		});
 56		var div = dialog.div,
 57			addressBox = K('[name="address"]', div),
 58			searchBtn = K('[name="searchBtn"]', div),
 59			win, doc;
 60		var iframeHtml = ['<!doctype html><html><head>',
 61			'<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />',
 62			'<style>',
 63			'	html { height: 100% }',
 64			'	body { height: 100%; margin: 0; padding: 0; background-color: #FFF }',
 65			'	#map_canvas { height: 100% }',
 66			'</style>',
 67			'<script src="http://maps.googleapis.com/maps/api/js?sensor=false&language=' + self.langType + '"></script>',
 68			'<script>',
 69			'var map, geocoder;',
 70			'function initialize() {',
 71			'	var latlng = new google.maps.LatLng(31.230393, 121.473704);',
 72			'	var options = {',
 73			'		zoom: 11,',
 74			'		center: latlng,',
 75			'		disableDefaultUI: true,',
 76			'		panControl: true,',
 77			'		zoomControl: true,',
 78			'		mapTypeControl: true,',
 79			'		scaleControl: true,',
 80			'		streetViewControl: false,',
 81			'		overviewMapControl: true,',
 82			'		mapTypeId: google.maps.MapTypeId.ROADMAP',
 83			'	};',
 84			'	map = new google.maps.Map(document.getElementById("map_canvas"), options);',
 85			'	geocoder = new google.maps.Geocoder();',
 86			'	geocoder.geocode({latLng: latlng}, function(results, status) {',
 87			'		if (status == google.maps.GeocoderStatus.OK) {',
 88			'			if (results[3]) {',
 89			'				parent.document.getElementById("kindeditor_plugin_map_address").value = results[3].formatted_address;',
 90			'			}',
 91			'		}',
 92			'	});',
 93			'}',
 94			'function search(address) {',
 95			'	if (!map) return;',
 96			'	geocoder.geocode({address : address}, function(results, status) {',
 97			'		if (status == google.maps.GeocoderStatus.OK) {',
 98			'			map.setZoom(11);',
 99			'			map.setCenter(results[0].geometry.location);',
100			'			var marker = new google.maps.Marker({',
101			'				map: map,',
102			'				position: results[0].geometry.location',
103			'			});',
104			'		} else {',
105			'			alert("Invalid address: " + address);',
106			'		}',
107			'	});',
108			'}',
109			'</script>',
110			'</head>',
111			'<body onload="initialize();">',
112			'<div id="map_canvas" style="width:100%; height:100%"></div>',
113			'</body></html>'].join('\n');
114		// TODO??doc.write(iframeHtml)???????IE6?????????????src??
115		var iframe = K('<iframe class="ke-textarea" frameborder="0" src="' + self.pluginsPath + 'map/map.html" style="width:558px;height:360px;"></iframe>');
116		function ready() {
117			win = iframe[0].contentWindow;
118			doc = K.iframeDoc(iframe);
119			//doc.open();
120			//doc.write(iframeHtml);
121			//doc.close();
122		}
123		iframe.bind('load', function() {
124			iframe.unbind('load');
125			if (K.IE) {
126				ready();
127			} else {
128				setTimeout(ready, 0);
129			}
130		});
131		K('.ke-map', div).replaceWith(iframe);
132		// search map
133		searchBtn.click(function() {
134			win.search(addressBox.val());
135		});
136	});
137});