diff --git a/plugins/add-kml.user.js b/plugins/add-kml.user.js index 1ba8191e..8d46cf4a 100644 --- a/plugins/add-kml.user.js +++ b/plugins/add-kml.user.js @@ -26,6 +26,59 @@ window.plugin.overlayKML.loadExternals = function() { @@INCLUDERAW:external/leaflet.filelayer.js@@ try { console.log('done loading leaflet.filelayer JS'); } catch(e) {} + if (window.requestFile !== undefined) { + try { console.log('Loading android webview extensions for leaflet.filelayer JS now'); } catch(e) {} + var FileLoaderMixin = { + parse: function (fileContent, fileName) { + // Check file extension + var ext = fileName.split('.').pop(), + parser = this._parsers[ext]; + if (!parser) { + window.alert("Unsupported file type " + file.type + '(' + ext + ')'); + return; + } + this.fire('data:loading', {filename: fileName, format: ext}); + var layer = parser.call(this, fileContent, ext); + this.fire('data:loaded', {layer: layer, filename: fileName, format: ext}); + } + }; + FileLoader.include(FileLoaderMixin); + + var FileLayerLoadMixin = { + getLoader: function () { + return this.loader; + }, + _initContainer: function () { + // Create a button, and bind click on hidden file input + var zoomName = 'leaflet-control-filelayer leaflet-control-zoom', + barName = 'leaflet-bar', + partName = barName + '-part', + container = L.DomUtil.create('div', zoomName + ' ' + barName); + var link = L.DomUtil.create('a', zoomName + '-in ' + partName, container); + link.innerHTML = L.Control.FileLayerLoad.LABEL; + link.href = '#'; + link.title = L.Control.FileLayerLoad.TITLE; + + var stop = L.DomEvent.stopPropagation; + L.DomEvent + .on(link, 'click', stop) + .on(link, 'mousedown', stop) + .on(link, 'dblclick', stop) + .on(link, 'click', L.DomEvent.preventDefault) + .on(link, 'click', function (e) { + window.requestFile(function(filename, content) { + _fileLayerLoad.getLoader().parse(content, filename); + }); + e.preventDefault(); + }); + return container; + } + }; + L.Control.FileLayerLoad.include(FileLayerLoadMixin); + + try { console.log('done loading android webview extensions for leaflet.filelayer JS'); } catch(e) {} + } + try { console.log('Loading KML JS now'); } catch(e) {} @@INCLUDERAW:external/KML.js@@ try { console.log('done loading KML JS'); } catch(e) {} @@ -37,6 +90,8 @@ window.plugin.overlayKML.loadExternals = function() { window.plugin.overlayKML.load(); } +var _fileLayerLoad = null; + window.plugin.overlayKML.load = function() { // Provide popup window allow user to select KML to overlay @@ -50,13 +105,14 @@ window.plugin.overlayKML.load = function() { }); L.Control.FileLayerLoad.LABEL = 'Open'; - L.Control.fileLayerLoad({ + _fileLayerLoad = L.Control.fileLayerLoad({ fitBounds: true, layerOptions: { pointToLayer: function (data, latlng) { return L.marker(latlng, {icon: KMLIcon}); }}, - }).addTo(map); + }); + _fileLayerLoad.addTo(map); } var setup = function() { @@ -66,3 +122,4 @@ var setup = function() { // PLUGIN END ////////////////////////////////////////////////////////// @@PLUGINEND@@ +