baidumap.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  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. // Baidu Maps: http://dev.baidu.com/wiki/map/index.php?title=%E9%A6%96%E9%A1%B5
  10. KindEditor.plugin('baidumap', function (K) {
  11. var self = this, name = 'baidumap', lang = self.lang(name + '.');
  12. var mapWidth = K.undef(self.mapWidth, Math.min(document.body.clientWidth - 42, 558));
  13. var mapHeight = K.undef(self.mapHeight, 360);
  14. var getParam = function (name, url) {
  15. url = url || location.href;
  16. return url.match(new RegExp('[?&]' + name + '=([^?&]+)', 'i')) ? decodeURIComponent(RegExp.$1) : '';
  17. };
  18. self.clickToolbar(name, function () {
  19. if(!self.options.baiduMapKey){
  20. alert("请在配置中配置百度地图API密钥");
  21. return false;
  22. }
  23. var img = self.plugin.getSelectedImage();
  24. var src = img && img[0] ? $(img[0]).attr("src") : '';
  25. var center = getParam("center", src) || self.options.baiduMapCenter || '';
  26. var markers = getParam("markers", src);
  27. var html = ['<div class="ke-dialog-content-inner" style="padding-top: 0">',
  28. '<div class="ke-dialog-row ke-clearfix">',
  29. '<div class="ke-header">' + lang.address,
  30. '<input id="kindeditor_plugin_map_address" name="address" class="ke-input-text" value="" style="width:200px;" /> ',
  31. '<span>',
  32. '<input type="button" name="searchBtn" class="ke-button-common ke-button" value="' + lang.search + '" style="line-height:22px;padding:0 10px;" />',
  33. '</span>',
  34. '<input type="checkbox" id="keInsertDynamicMap" name="insertDynamicMap" class="checkbox" value="1" style="display:inline-block;" /> <label for="keInsertDynamicMap">' + lang.insertDynamicMap + '</label>',
  35. '</div>',
  36. '</div>',
  37. '<div class="ke-map" style="width:' + mapWidth + 'px;height:' + mapHeight + 'px;"></div>',
  38. '</div>'].join('');
  39. var dialog = self.createDialog({
  40. name: name,
  41. width: mapWidth + 42,
  42. title: self.lang(name),
  43. body: html,
  44. yesBtn: {
  45. name: self.lang('yes'),
  46. click: function (e) {
  47. var map = win.map;
  48. var centerObj = map.getCenter();
  49. var overlays = map.getOverlays();
  50. var markerArr = [];
  51. var point;
  52. if (overlays) {
  53. overlays.forEach(function (item) {
  54. if (item.point && item.isVisible() && !item.Fb) {
  55. point = item.point.lng + ',' + item.point.lat;
  56. if (markerArr.indexOf(point) < 0) {
  57. markerArr.push(point);
  58. }
  59. }
  60. });
  61. }
  62. var markers = markerArr.join("|");
  63. var center = centerObj.lng + ',' + centerObj.lat;
  64. var zoom = map.getZoom();
  65. var url = [checkbox[0].checked ? self.pluginsPath + 'baidumap/index.html' : 'https://api.map.baidu.com/staticimage',
  66. '?center=' + encodeURIComponent(center),
  67. '&zoom=' + encodeURIComponent(zoom),
  68. '&width=' + mapWidth,
  69. '&height=' + mapHeight,
  70. '&markers=' + encodeURIComponent(markers),
  71. '&markerStyles=' + encodeURIComponent('l,A')].join('');
  72. if (checkbox[0].checked) {
  73. self.insertHtml('<iframe src="' + url + '" frameborder="0" style="width:' + (mapWidth + 2) + 'px;height:' + (mapHeight + 2) + 'px;"></iframe>');
  74. } else {
  75. self.exec('insertimage', url);
  76. }
  77. self.hideDialog().focus();
  78. }
  79. },
  80. beforeRemove: function () {
  81. searchBtn.remove();
  82. if (doc) {
  83. doc.write('');
  84. }
  85. iframe.remove();
  86. }
  87. });
  88. var div = dialog.div,
  89. addressBox = K('[name="address"]', div),
  90. searchBtn = K('[name="searchBtn"]', div),
  91. checkbox = K('[name="insertDynamicMap"]', dialog.div),
  92. win, doc;
  93. var iframe = K('<iframe class="ke-textarea" frameborder="0" src="' + self.pluginsPath + 'baidumap/map.html?center=' + center + '&markers=' + markers + '&key=' + (self.options.baiduMapKey || "") + '" style="width:' + mapWidth + 'px;height:' + mapHeight + 'px;"></iframe>');
  94. function ready() {
  95. win = iframe[0].contentWindow;
  96. doc = K.iframeDoc(iframe);
  97. }
  98. iframe.bind('load', function () {
  99. iframe.unbind('load');
  100. if (K.IE) {
  101. ready();
  102. } else {
  103. setTimeout(ready, 0);
  104. }
  105. });
  106. K('.ke-map', div).replaceWith(iframe);
  107. searchBtn.click(function () {
  108. win.search(addressBox.val());
  109. });
  110. });
  111. });