vendor: 9,509 bytes, lines 1-283
1/* 2* * Leaflet Gesture Handling ** 3* * Version 1.1.8 4*/ 5import LanguageContent from "./language-content.js"; 6 7L.Map.mergeOptions({ 8 gestureHandlingOptions: { 9 text: {}, 10 duration: 1000 11 } 12}); 13 14var draggingMap = false; 15 16export var GestureHandling = L.Handler.extend({ 17 addHooks: function() { 18 this._handleTouch = this._handleTouch.bind(this); 19 20 this._setupPluginOptions(); 21 this._setLanguageContent(); 22 this._disableInteractions(); 23 24 //Uses native event listeners instead of L.DomEvent due to issues with Android touch events 25 //turning into pointer events 26 this._map._container.addEventListener("touchstart", this._handleTouch); 27 this._map._container.addEventListener("touchmove", this._handleTouch); 28 this._map._container.addEventListener("touchend", this._handleTouch); 29 this._map._container.addEventListener("touchcancel", this._handleTouch); 30 this._map._container.addEventListener("click", this._handleTouch); 31 32 L.DomEvent.on( 33 this._map._container, 34 "wheel", 35 this._handleScroll, 36 this 37 ); 38 L.DomEvent.on(this._map, "mouseover", this._handleMouseOver, this); 39 L.DomEvent.on(this._map, "mouseout", this._handleMouseOut, this); 40 41 // Listen to these events so will not disable dragging if the user moves the mouse out the boundary of the map container whilst actively dragging the map. 42 L.DomEvent.on(this._map, "movestart", this._handleDragging, this); 43 L.DomEvent.on(this._map, "move", this._handleDragging, this); 44 L.DomEvent.on(this._map, "moveend", this._handleDragging, this); 45 }, 46 47 removeHooks: function() { 48 this._enableInteractions(); 49 50 this._map._container.removeEventListener( 51 "touchstart", 52 this._handleTouch 53 ); 54 this._map._container.removeEventListener( 55 "touchmove", 56 this._handleTouch 57 ); 58 this._map._container.removeEventListener("touchend", this._handleTouch); 59 this._map._container.removeEventListener( 60 "touchcancel", 61 this._handleTouch 62 ); 63 this._map._container.removeEventListener("click", this._handleTouch); 64 65 L.DomEvent.off( 66 this._map._container, 67 "wheel", 68 this._handleScroll, 69 this 70 ); 71 L.DomEvent.off(this._map, "mouseover", this._handleMouseOver, this); 72 L.DomEvent.off(this._map, "mouseout", this._handleMouseOut, this); 73 74 L.DomEvent.off(this._map, "movestart", this._handleDragging, this); 75 L.DomEvent.off(this._map, "move", this._handleDragging, this); 76 L.DomEvent.off(this._map, "moveend", this._handleDragging, this); 77 }, 78 79 _handleDragging: function(e) { 80 if (e.type == "movestart" || e.type == "move") { 81 draggingMap = true; 82 } else if (e.type == "moveend") { 83 draggingMap = false; 84 } 85 }, 86 87 _disableInteractions: function() { 88 this._map.dragging.disable(); 89 this._map.scrollWheelZoom.disable(); 90 if (this._map.tap) { 91 this._map.tap.disable(); 92 } 93 }, 94 95 _enableInteractions: function() { 96 this._map.dragging.enable(); 97 this._map.scrollWheelZoom.enable(); 98 if (this._map.tap) { 99 this._map.tap.enable(); 100 } 101 }, 102 103 _setupPluginOptions: function() { 104 //For backwards compatibility, merge gestureHandlingText into the new options object 105 if (this._map.options.gestureHandlingText) { 106 this._map.options.gestureHandlingOptions.text = this._map.options.gestureHandlingText; 107 } 108 }, 109 110 _setLanguageContent: function() { 111 var languageContent; 112 //If user has supplied custom language, use that 113 if ( 114 this._map.options.gestureHandlingOptions && 115 this._map.options.gestureHandlingOptions.text && 116 this._map.options.gestureHandlingOptions.text.touch && 117 this._map.options.gestureHandlingOptions.text.scroll && 118 this._map.options.gestureHandlingOptions.text.scrollMac 119 ) { 120 languageContent = this._map.options.gestureHandlingOptions.text; 121 } else { 122 //Otherwise auto set it from the language files 123 124 //Determine their language e.g fr or en-US 125 var lang = this._getUserLanguage(); 126 127 //If we couldn't find it default to en 128 if (!lang) { 129 lang = "en"; 130 } 131 132 //Lookup the appropriate language content 133 if (LanguageContent[lang]) { 134 languageContent = LanguageContent[lang]; 135 } 136 137 //If no result, try searching by the first part only. e.g en-US just use en. 138 if (!languageContent && lang.indexOf("-") !== -1) { 139 lang = lang.split("-")[0]; 140 languageContent = LanguageContent[lang]; 141 } 142 143 if (!languageContent) { 144 // If still nothing, default to English 145 // console.log("No lang found for", lang); 146 lang = "en"; 147 languageContent = LanguageContent[lang]; 148 } 149 } 150 151 //TEST 152 // languageContent = LanguageContent["bg"]; 153 154 //Check if they're on a mac for display of command instead of ctrl 155 var mac = false; 156 if (navigator.platform.toUpperCase().indexOf("MAC") >= 0) { 157 mac = true; 158 } 159 160 var scrollContent = languageContent.scroll; 161 if (mac) { 162 scrollContent = languageContent.scrollMac; 163 } 164 165 this._map._container.setAttribute( 166 "data-gesture-handling-touch-content", 167 languageContent.touch 168 ); 169 this._map._container.setAttribute( 170 "data-gesture-handling-scroll-content", 171 scrollContent 172 ); 173 }, 174 175 _getUserLanguage: function() { 176 var lang = navigator.languages 177 ? navigator.languages[0] 178 : navigator.language || navigator.userLanguage; 179 return lang; 180 }, 181 182 _handleTouch: function(e) { 183 //Disregard touch events on the minimap if present 184 var ignoreList = [ 185 "leaflet-control-minimap", 186 "leaflet-interactive", 187 "leaflet-popup-content", 188 "leaflet-popup-content-wrapper", 189 "leaflet-popup-close-button", 190 "leaflet-control-zoom-in", 191 "leaflet-control-zoom-out" 192 ]; 193 194 var ignoreElement = false; 195 for (var i = 0; i < ignoreList.length; i++) { 196 if (L.DomUtil.hasClass(e.target, ignoreList[i])) { 197 ignoreElement = true; 198 } 199 } 200 201 if (ignoreElement) { 202 if ( 203 L.DomUtil.hasClass(e.target, "leaflet-interactive") && 204 e.type === "touchmove" && 205 e.touches.length === 1 206 ) { 207 L.DomUtil.addClass(this._map._container, 208 "leaflet-gesture-handling-touch-warning" 209 ); 210 this._disableInteractions(); 211 } else { 212 L.DomUtil.removeClass(this._map._container, 213 "leaflet-gesture-handling-touch-warning" 214 ); 215 } 216 return; 217 } 218 // screenLog(e.type+' '+e.touches.length); 219 if (e.type !== "touchmove" && e.type !== "touchstart") { 220 L.DomUtil.removeClass(this._map._container, 221 "leaflet-gesture-handling-touch-warning" 222 ); 223 return; 224 } 225 if (e.touches.length === 1) { 226 L.DomUtil.addClass(this._map._container, 227 "leaflet-gesture-handling-touch-warning" 228 ); 229 this._disableInteractions(); 230 } else { 231 e.preventDefault(); 232 this._enableInteractions(); 233 L.DomUtil.removeClass(this._map._container, 234 "leaflet-gesture-handling-touch-warning" 235 ); 236 } 237 }, 238 239 _isScrolling: false, 240 241 _handleScroll: function(e) { 242 if (e.metaKey || e.ctrlKey) { 243 e.preventDefault(); 244 L.DomUtil.removeClass(this._map._container, 245 "leaflet-gesture-handling-scroll-warning" 246 ); 247 this._map.scrollWheelZoom.enable(); 248 } else { 249 L.DomUtil.addClass(this._map._container, 250 "leaflet-gesture-handling-scroll-warning" 251 ); 252 this._map.scrollWheelZoom.disable(); 253 254 clearTimeout(this._isScrolling); 255 256 // Set a timeout to run after scrolling ends 257 this._isScrolling = setTimeout(function() { 258 // Run the callback 259 var warnings = document.getElementsByClassName( 260 "leaflet-gesture-handling-scroll-warning" 261 ); 262 for (var i = 0; i < warnings.length; i++) { 263 L.DomUtil.removeClass(warnings[i], 264 "leaflet-gesture-handling-scroll-warning" 265 ); 266 } 267 }, this._map.options.gestureHandlingOptions.duration); 268 } 269 }, 270 271 _handleMouseOver: function(e) { 272 this._enableInteractions(); 273 }, 274 275 _handleMouseOut: function(e) { 276 if (!draggingMap) { 277 this._disableInteractions(); 278 } 279 } 280 281}); 282L.Map.addInitHook("addHandler", "gestureHandling", GestureHandling); 283
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.