preview.js 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. (function () {
  2. 'use strict';
  3. var map = new L.Map('map', {
  4. zoomControl: false,
  5. center: [48, -3],
  6. zoom: 5
  7. });
  8. // save the options object while creating tilelayers to cleanly access it later.
  9. var origTileLayerInit = L.TileLayer.prototype.initialize;
  10. L.TileLayer.include({
  11. initialize: function (url, options) {
  12. this._options = options;
  13. origTileLayerInit.apply(this, arguments);
  14. }
  15. });
  16. var origProviderInit = L.TileLayer.Provider.prototype.initialize;
  17. L.TileLayer.Provider.include({
  18. initialize: function (arg) {
  19. this._providerName = arg;
  20. origProviderInit.apply(this, arguments);
  21. }
  22. });
  23. var isOverlay = function (providerName) {
  24. var overlayPatterns = [
  25. '^(OpenWeatherMap|OpenSeaMap)',
  26. 'OpenMapSurfer.AdminBounds',
  27. 'Stamen.Toner(Hybrid|Lines|Labels)',
  28. 'Acetate.(foreground|labels|roads)',
  29. ];
  30. return providerName.match('(' + overlayPatterns.join('|') + ')') !== null;
  31. };
  32. var isIgnored = function (providerName) {
  33. var ignorePattern = /^(MapBox|OpenSeaMap)/;
  34. return providerName.match(ignorePattern) !== null;
  35. };
  36. var escapeHtml = function (string) {
  37. return string
  38. .replace(/&/g, '&')
  39. .replace(/</g, '&lt;')
  40. .replace(/>/g, '&gt;')
  41. .replace(/"/g, '&quot;')
  42. .replace(/'/g, '&#039;');
  43. };
  44. // collect all layers available in the provider definition
  45. var baseLayers = {};
  46. var overlays = {};
  47. var addLayer = function (name) {
  48. if (isOverlay(name)) {
  49. overlays[name] = L.tileLayer.provider(name);
  50. } else {
  51. baseLayers[name] = L.tileLayer.provider(name);
  52. }
  53. };
  54. for (var provider in L.TileLayer.Provider.providers) {
  55. if (isIgnored(provider)) {
  56. continue;
  57. }
  58. if (L.TileLayer.Provider.providers[provider].variants) {
  59. for (var variant in L.TileLayer.Provider.providers[provider].variants) {
  60. addLayer(provider + '.' + variant);
  61. }
  62. } else {
  63. addLayer(provider);
  64. }
  65. }
  66. L.control.layers.minimap(baseLayers, overlays, {
  67. collapsed: false
  68. }).addTo(map);
  69. baseLayers['OpenStreetMap.Mapnik'].addTo(map);
  70. // Add the TileLayer source code control to the map
  71. map.addControl(new (L.Control.extend({
  72. options: {
  73. position: 'topleft'
  74. },
  75. onAdd: function (map) {
  76. var container = L.DomUtil.get('info');
  77. L.DomEvent.disableClickPropagation(container);
  78. L.DomUtil.create('h4', null, container).innerHTML = 'Provider names for <code>leaflet-providers.js</code>';
  79. var providerNames = L.DomUtil.create('code', 'provider-names', container);
  80. L.DomUtil.create('h4', '', container).innerHTML = 'Plain JavaScript:';
  81. var pre = L.DomUtil.create('pre', null, container);
  82. var code = L.DomUtil.create('code', 'javascript', pre);
  83. var update = function (event) {
  84. code.innerHTML = '';
  85. var names = [];
  86. // loop over the layers in the map and add the JS
  87. for (var key in map._layers) {
  88. var layer = map._layers[key];
  89. names.push(layer._providerName);
  90. var layerName = layer._providerName.replace('.', '_');
  91. // do not add the layer currently being removed
  92. if (event && event.type === 'layerremove' && layer === event.layer) {
  93. continue;
  94. }
  95. var tileLayerCode = 'var ' + layerName + ' = L.tileLayer(\'' + layer._url + '\', {\n';
  96. var options = layer._options;
  97. var first = true;
  98. for (var option in options) {
  99. if (first) {
  100. first = false;
  101. } else {
  102. tileLayerCode += ',\n';
  103. }
  104. tileLayerCode += '\t' + option + ': ';
  105. if (typeof options[option] === 'string') {
  106. //jshint quotmark:double
  107. tileLayerCode += "'" + escapeHtml(options[option]) + "'";
  108. //jshint quotmark:single
  109. } else {
  110. tileLayerCode += options[option];
  111. }
  112. }
  113. tileLayerCode += '\n});\n';
  114. code.innerHTML += tileLayerCode;
  115. providerNames.innerHTML = names.join(', ');
  116. }
  117. /* global hljs:true */
  118. hljs.highlightBlock(code);
  119. };
  120. map.on({
  121. 'layeradd': update,
  122. 'layerremove': update
  123. });
  124. update();
  125. return container;
  126. }
  127. }))());
  128. })();