forked from MapComplete/MapComplete
		
	Cleanup of empty classes, partial use of default export
This commit is contained in:
		
							parent
							
								
									cc75f5c4fd
								
							
						
					
					
						commit
						9970c4b8bb
					
				
					 55 changed files with 939 additions and 206 deletions
				
			
		|  | @ -24,7 +24,7 @@ import * as information_boards from "../../assets/layers/information_board/infor | ||||||
| import {Utils} from "../../Utils"; | import {Utils} from "../../Utils"; | ||||||
| import ImageCarouselWithUploadConstructor from "../../UI/Image/ImageCarouselWithUpload"; | import ImageCarouselWithUploadConstructor from "../../UI/Image/ImageCarouselWithUpload"; | ||||||
| import {ImageCarouselConstructor} from "../../UI/Image/ImageCarousel"; | import {ImageCarouselConstructor} from "../../UI/Image/ImageCarousel"; | ||||||
| import {State} from "../../State"; | import State from "../../State"; | ||||||
| 
 | 
 | ||||||
| export class FromJSON { | export class FromJSON { | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -2,7 +2,7 @@ import {LayerDefinition} from "./LayerDefinition"; | ||||||
| import {UIElement} from "../UI/UIElement"; | import {UIElement} from "../UI/UIElement"; | ||||||
| import Translations from "../UI/i18n/Translations"; | import Translations from "../UI/i18n/Translations"; | ||||||
| import Combine from "../UI/Base/Combine"; | import Combine from "../UI/Base/Combine"; | ||||||
| import {State} from "../State"; | import State from "../State"; | ||||||
| 
 | 
 | ||||||
| /** | /** | ||||||
|  * A layout is a collection of settings of the global view (thus: welcome text, title, selection of layers). |  * A layout is a collection of settings of the global view (thus: welcome text, title, selection of layers). | ||||||
|  |  | ||||||
|  | @ -1,14 +0,0 @@ | ||||||
| import {TagRenderingOptions} from "../TagRenderingOptions"; |  | ||||||
| import Translation from "../../UI/i18n/Translation"; |  | ||||||
| 
 |  | ||||||
| export default class FixedText extends TagRenderingOptions { |  | ||||||
|     constructor(category: string | Translation) { |  | ||||||
|         super({ |  | ||||||
|             mappings: [ |  | ||||||
|                 { |  | ||||||
|                     k: null, txt: category |  | ||||||
|                 } |  | ||||||
|             ] |  | ||||||
|         }) |  | ||||||
|     } |  | ||||||
| } |  | ||||||
|  | @ -1,19 +0,0 @@ | ||||||
| import {RegexTag, Tag} from "../../Logic/Tags"; |  | ||||||
| import Translations from "../../UI/i18n/Translations"; |  | ||||||
| import {TagRenderingOptions} from "../TagRenderingOptions"; |  | ||||||
| import Translation from "../../UI/i18n/Translation"; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| export class NameInline extends TagRenderingOptions{ |  | ||||||
|      |  | ||||||
|     constructor(category: string | Translation ) { |  | ||||||
|         super({ |  | ||||||
|             mappings: [ |  | ||||||
|                 {k: new Tag("noname", "yes"), txt: Translations.t.general.noNameCategory.Subs({category: category})}, |  | ||||||
|                 {k: new RegexTag("name", /.+/), txt: "{name}"}, |  | ||||||
|                 {k:new Tag("name",""), txt: category} |  | ||||||
|             ] |  | ||||||
|         }); |  | ||||||
|     } |  | ||||||
|      |  | ||||||
| } |  | ||||||
|  | @ -1,13 +1,10 @@ | ||||||
| import {Img} from "../../UI/Img"; | import {Img} from "../../UI/Img"; | ||||||
| import {RegexTag, Tag} from "../../Logic/Tags"; | import {RegexTag} from "../../Logic/Tags"; | ||||||
| import {TagRenderingOptions} from "../TagRenderingOptions"; | import {TagRenderingOptions} from "../TagRenderingOptions"; | ||||||
| import {FixedUiElement} from "../../UI/Base/FixedUiElement"; |  | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| export class OsmLink extends TagRenderingOptions { | export class OsmLink extends TagRenderingOptions { | ||||||
| 
 | 
 | ||||||
|    |  | ||||||
| 
 |  | ||||||
|     static options = { |     static options = { | ||||||
|         freeform: { |         freeform: { | ||||||
|             key: "id", |             key: "id", | ||||||
|  |  | ||||||
|  | @ -1,3 +0,0 @@ | ||||||
| export default class SharedLayers { |  | ||||||
|      |  | ||||||
| } |  | ||||||
|  | @ -2,14 +2,14 @@ import Translations from "./UI/i18n/Translations"; | ||||||
| import {TabbedComponent} from "./UI/Base/TabbedComponent"; | import {TabbedComponent} from "./UI/Base/TabbedComponent"; | ||||||
| import {ShareScreen} from "./UI/ShareScreen"; | import {ShareScreen} from "./UI/ShareScreen"; | ||||||
| import {FixedUiElement} from "./UI/Base/FixedUiElement"; | import {FixedUiElement} from "./UI/Base/FixedUiElement"; | ||||||
| import {CheckBox} from "./UI/Input/CheckBox"; | import CheckBox from "./UI/Input/CheckBox"; | ||||||
| import Combine from "./UI/Base/Combine"; | import Combine from "./UI/Base/Combine"; | ||||||
| import {UIElement} from "./UI/UIElement"; | import {UIElement} from "./UI/UIElement"; | ||||||
| import {MoreScreen} from "./UI/MoreScreen"; | import {MoreScreen} from "./UI/MoreScreen"; | ||||||
| import {FilteredLayer} from "./Logic/FilteredLayer"; | import {FilteredLayer} from "./Logic/FilteredLayer"; | ||||||
| import {FeatureInfoBox} from "./UI/FeatureInfoBox"; | import {FeatureInfoBox} from "./UI/FeatureInfoBox"; | ||||||
| import {Basemap} from "./Logic/Leaflet/Basemap"; | import {Basemap} from "./Logic/Leaflet/Basemap"; | ||||||
| import {State} from "./State"; | import State from "./State"; | ||||||
| import {WelcomeMessage} from "./UI/WelcomeMessage"; | import {WelcomeMessage} from "./UI/WelcomeMessage"; | ||||||
| import {Img} from "./UI/Img"; | import {Img} from "./UI/Img"; | ||||||
| import {DropDown} from "./UI/Input/DropDown"; | import {DropDown} from "./UI/Input/DropDown"; | ||||||
|  |  | ||||||
|  | @ -6,7 +6,7 @@ import {GeoOperations} from "./GeoOperations"; | ||||||
| import {UIElement} from "../UI/UIElement"; | import {UIElement} from "../UI/UIElement"; | ||||||
| import {LayerDefinition} from "../Customizations/LayerDefinition"; | import {LayerDefinition} from "../Customizations/LayerDefinition"; | ||||||
| import codegrid from "codegrid-js"; | import codegrid from "codegrid-js"; | ||||||
| import {State} from "../State"; | import State from "../State"; | ||||||
| 
 | 
 | ||||||
| /*** | /*** | ||||||
|  * A filtered layer is a layer which offers a 'set-data' function |  * A filtered layer is a layer which offers a 'set-data' function | ||||||
|  | @ -301,7 +301,6 @@ export class FilteredLayer { | ||||||
|                 eventSource.addCallback(updateStyle); |                 eventSource.addCallback(updateStyle); | ||||||
| 
 | 
 | ||||||
|                 function openPopup(e) { |                 function openPopup(e) { | ||||||
|                     State.state.selectedElement.data?.feature.updateStyle(); |  | ||||||
|                     State.state.selectedElement.setData({feature: feature}); |                     State.state.selectedElement.setData({feature: feature}); | ||||||
|                     updateStyle() |                     updateStyle() | ||||||
|                     if (feature.geometry.type === "Point") { |                     if (feature.geometry.type === "Point") { | ||||||
|  |  | ||||||
|  | @ -3,7 +3,7 @@ import {UIEventSource} from "./UIEventSource"; | ||||||
| import {FilteredLayer} from "./FilteredLayer"; | import {FilteredLayer} from "./FilteredLayer"; | ||||||
| import {Bounds} from "./Bounds"; | import {Bounds} from "./Bounds"; | ||||||
| import {Overpass} from "./Osm/Overpass"; | import {Overpass} from "./Osm/Overpass"; | ||||||
| import {State} from "../State"; | import State from "../State"; | ||||||
| import {LayerDefinition} from "../Customizations/LayerDefinition"; | import {LayerDefinition} from "../Customizations/LayerDefinition"; | ||||||
| 
 | 
 | ||||||
| export class LayerUpdater { | export class LayerUpdater { | ||||||
|  |  | ||||||
|  | @ -1,7 +1,7 @@ | ||||||
| import L from "leaflet"; | import * as L from "leaflet"; | ||||||
| import {UIEventSource} from "../UIEventSource"; | import {UIEventSource} from "../UIEventSource"; | ||||||
| import {UIElement} from "../../UI/UIElement"; | import {UIElement} from "../../UI/UIElement"; | ||||||
| import {State} from "../../State"; | import State from "../../State"; | ||||||
| import {Utils} from "../../Utils"; | import {Utils} from "../../Utils"; | ||||||
| import {Basemap} from "./Basemap"; | import {Basemap} from "./Basemap"; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1,6 +1,6 @@ | ||||||
| import L from "leaflet"; | import * as L from "leaflet"; | ||||||
| import {UIElement} from "../../UI/UIElement"; | import {UIElement} from "../../UI/UIElement"; | ||||||
| import {State} from "../../State"; | import State from "../../State"; | ||||||
| 
 | 
 | ||||||
| /** | /** | ||||||
|  * The stray-click-hanlders adds a marker to the map if no feature was clicked. |  * The stray-click-hanlders adds a marker to the map if no feature was clicked. | ||||||
|  |  | ||||||
							
								
								
									
										9
									
								
								Logic/OpeningHours.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								Logic/OpeningHours.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,9 @@ | ||||||
|  | export interface OpeningHour { | ||||||
|  |     weekdayStart: number, // 0 is monday, 1 is tuesday, ...
 | ||||||
|  |     weekdayEnd: number, | ||||||
|  |     startHour: number, | ||||||
|  |     startMinutes: number, | ||||||
|  |     endHour: number, | ||||||
|  |     endMinutes: number | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | @ -4,7 +4,7 @@ | ||||||
|  */ |  */ | ||||||
| import {OsmNode, OsmObject} from "./OsmObject"; | import {OsmNode, OsmObject} from "./OsmObject"; | ||||||
| import {And, Tag, TagsFilter} from "../Tags"; | import {And, Tag, TagsFilter} from "../Tags"; | ||||||
| import {State} from "../../State"; | import State from "../../State"; | ||||||
| import {Utils} from "../../Utils"; | import {Utils} from "../../Utils"; | ||||||
| 
 | 
 | ||||||
| export class Changes { | export class Changes { | ||||||
|  |  | ||||||
|  | @ -2,7 +2,7 @@ import {OsmConnection, UserDetails} from "./OsmConnection"; | ||||||
| import {UIEventSource} from "../UIEventSource"; | import {UIEventSource} from "../UIEventSource"; | ||||||
| import {ElementStorage} from "../ElementStorage"; | import {ElementStorage} from "../ElementStorage"; | ||||||
| import {Layout} from "../../Customizations/Layout"; | import {Layout} from "../../Customizations/Layout"; | ||||||
| import {State} from "../../State"; | import State from "../../State"; | ||||||
| import Locale from "../../UI/i18n/Locale"; | import Locale from "../../UI/i18n/Locale"; | ||||||
| 
 | 
 | ||||||
| export class ChangesetHandler { | export class ChangesetHandler { | ||||||
|  |  | ||||||
|  | @ -1,6 +1,6 @@ | ||||||
| import {Basemap} from "../Leaflet/Basemap"; | import {Basemap} from "../Leaflet/Basemap"; | ||||||
| import $ from "jquery" | import $ from "jquery" | ||||||
| import {State} from "../../State"; | import State from "../../State"; | ||||||
| export class Geocoding { | export class Geocoding { | ||||||
| 
 | 
 | ||||||
|     private static readonly host = "https://nominatim.openstreetmap.org/search?"; |     private static readonly host = "https://nominatim.openstreetmap.org/search?"; | ||||||
|  |  | ||||||
|  | @ -4,7 +4,7 @@ | ||||||
| import {UIEventSource} from "../UIEventSource"; | import {UIEventSource} from "../UIEventSource"; | ||||||
| import {ImageUploadFlow} from "../../UI/ImageUploadFlow"; | import {ImageUploadFlow} from "../../UI/ImageUploadFlow"; | ||||||
| import {SlideShow} from "../../UI/SlideShow"; | import {SlideShow} from "../../UI/SlideShow"; | ||||||
| import {State} from "../../State"; | import State from "../../State"; | ||||||
| import {Tag} from "../Tags"; | import {Tag} from "../Tags"; | ||||||
| 
 | 
 | ||||||
| export class OsmImageUploadHandler { | export class OsmImageUploadHandler { | ||||||
|  |  | ||||||
							
								
								
									
										2
									
								
								State.ts
									
										
									
									
									
								
							
							
						
						
									
										2
									
								
								State.ts
									
										
									
									
									
								
							|  | @ -18,7 +18,7 @@ import {BaseLayer} from "./Logic/BaseLayer"; | ||||||
|  * Contains the global state: a bunch of UI-event sources |  * Contains the global state: a bunch of UI-event sources | ||||||
|  */ |  */ | ||||||
| 
 | 
 | ||||||
| export class State { | export default class State { | ||||||
| 
 | 
 | ||||||
|     // The singleton of the global state
 |     // The singleton of the global state
 | ||||||
|     public static state: State; |     public static state: State; | ||||||
|  |  | ||||||
|  | @ -1,7 +1,7 @@ | ||||||
| import {UIElement} from "./UIElement"; | import {UIElement} from "./UIElement"; | ||||||
| import {DropDown} from "./Input/DropDown"; | import {DropDown} from "./Input/DropDown"; | ||||||
| import Translations from "./i18n/Translations"; | import Translations from "./i18n/Translations"; | ||||||
| import {State} from "../State"; | import State from "../State"; | ||||||
| import {UIEventSource} from "../Logic/UIEventSource"; | import {UIEventSource} from "../Logic/UIEventSource"; | ||||||
| import {BaseLayer} from "../Logic/BaseLayer"; | import {BaseLayer} from "../Logic/BaseLayer"; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1,20 +0,0 @@ | ||||||
| import {UIElement} from "../UIElement"; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| export class Image extends UIElement{ |  | ||||||
|     private src: string; |  | ||||||
|     private style: string = ""; |  | ||||||
|     constructor(src: string, style: string = "") { |  | ||||||
|         super(undefined); |  | ||||||
|         this.style = style; |  | ||||||
|         this.src = src; |  | ||||||
|     } |  | ||||||
|      |  | ||||||
|     InnerRender(): string { |  | ||||||
|         if(this.src === undefined){ |  | ||||||
|             return ""; |  | ||||||
|         } |  | ||||||
|         return `<img src='${this.src}' style='${this.style}'>`; |  | ||||||
|     } |  | ||||||
|      |  | ||||||
| } |  | ||||||
|  | @ -1,28 +1,20 @@ | ||||||
| import {UIElement} from "../UIElement"; | import {UIElement} from "../UIElement"; | ||||||
| 
 | 
 | ||||||
| export class VerticalCombine extends UIElement { | export class VerticalCombine extends UIElement { | ||||||
|     private _elements: UIElement[]; |     private readonly _elements: UIElement[]; | ||||||
|     private _className: string; |  | ||||||
| 
 | 
 | ||||||
|     constructor(elements: UIElement[], className: string = undefined) { |     constructor(elements: UIElement[]) { | ||||||
|         super(undefined); |         super(undefined); | ||||||
|         this._elements = elements; |         this._elements = elements; | ||||||
|         this._className = className; |  | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     InnerRender(): string { |     InnerRender(): string { | ||||||
|         let html = ""; |         let html = ""; | ||||||
|         for (const element of this._elements) { |         for (const element of this._elements) { | ||||||
|             if (element!== undefined && !element.IsEmpty()) { |             if (element !== undefined && !element.IsEmpty()) { | ||||||
|                 html += "<div>" + element.Render() + "</div>"; |                 html += "<div>" + element.Render() + "</div>"; | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|         if(html === ""){ |         return html; | ||||||
|             return ""; |  | ||||||
|         } |  | ||||||
|         if (this._className === undefined) { |  | ||||||
|             return html; |  | ||||||
|         } |  | ||||||
|         return "<div class='"+this._className+"'>" + html + "</div>"; |  | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | @ -1,6 +1,6 @@ | ||||||
| import {UIElement} from "./UIElement"; | import {UIElement} from "./UIElement"; | ||||||
| import Translations from "./i18n/Translations"; | import Translations from "./i18n/Translations"; | ||||||
| import {State} from "../State"; | import State from "../State"; | ||||||
| 
 | 
 | ||||||
| export class CenterMessageBox extends UIElement { | export class CenterMessageBox extends UIElement { | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -11,7 +11,7 @@ import AllLayersPanel from "./AllLayersPanel"; | ||||||
| import SharePanel from "./SharePanel"; | import SharePanel from "./SharePanel"; | ||||||
| import {LayoutConfigJson} from "../../Customizations/JSON/LayoutConfigJson"; | import {LayoutConfigJson} from "../../Customizations/JSON/LayoutConfigJson"; | ||||||
| import {SubtleButton} from "../Base/SubtleButton"; | import {SubtleButton} from "../Base/SubtleButton"; | ||||||
| import {State} from "../../State"; | import State from "../../State"; | ||||||
| import {FixedUiElement} from "../Base/FixedUiElement"; | import {FixedUiElement} from "../Base/FixedUiElement"; | ||||||
| import SavePanel from "./SavePanel"; | import SavePanel from "./SavePanel"; | ||||||
| import {LocalStorageSource} from "../../Logic/Web/LocalStorageSource"; | import {LocalStorageSource} from "../../Logic/Web/LocalStorageSource"; | ||||||
|  |  | ||||||
|  | @ -44,7 +44,9 @@ export class GenerateEmpty { | ||||||
|             widenFactor: 0.05, |             widenFactor: 0.05, | ||||||
|             socialImage: "", |             socialImage: "", | ||||||
|              |              | ||||||
|             layers: [] |             layers: [ | ||||||
|  |                 GenerateEmpty.createEmptyLayer() | ||||||
|  |             ] | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -8,8 +8,8 @@ import Combine from "../Base/Combine"; | ||||||
| import {TextField} from "../Input/TextField"; | import {TextField} from "../Input/TextField"; | ||||||
| import {InputElement} from "../Input/InputElement"; | import {InputElement} from "../Input/InputElement"; | ||||||
| import MultiLingualTextFields from "../Input/MultiLingualTextFields"; | import MultiLingualTextFields from "../Input/MultiLingualTextFields"; | ||||||
| import {CheckBox} from "../Input/CheckBox"; | import CheckBox from "../Input/CheckBox"; | ||||||
| import {AndOrTagInput} from "../Input/AndOrTagInput"; | import AndOrTagInput from "../Input/AndOrTagInput"; | ||||||
| import TagRenderingPanel from "./TagRenderingPanel"; | import TagRenderingPanel from "./TagRenderingPanel"; | ||||||
| import {DropDown} from "../Input/DropDown"; | import {DropDown} from "../Input/DropDown"; | ||||||
| import {TagRenderingConfigJson} from "../../Customizations/JSON/TagRenderingConfigJson"; | import {TagRenderingConfigJson} from "../../Customizations/JSON/TagRenderingConfigJson"; | ||||||
|  | @ -17,7 +17,7 @@ import {MultiInput} from "../Input/MultiInput"; | ||||||
| import {LayerConfigJson} from "../../Customizations/JSON/LayerConfigJson"; | import {LayerConfigJson} from "../../Customizations/JSON/LayerConfigJson"; | ||||||
| import PresetInputPanel from "./PresetInputPanel"; | import PresetInputPanel from "./PresetInputPanel"; | ||||||
| import {UserDetails} from "../../Logic/Osm/OsmConnection"; | import {UserDetails} from "../../Logic/Osm/OsmConnection"; | ||||||
| import {State} from "../../State"; | import State from "../../State"; | ||||||
| import {FixedUiElement} from "../Base/FixedUiElement"; | import {FixedUiElement} from "../Base/FixedUiElement"; | ||||||
| import ValidatedTextField from "../Input/ValidatedTextField"; | import ValidatedTextField from "../Input/ValidatedTextField"; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -4,7 +4,7 @@ import {UIEventSource} from "../../Logic/UIEventSource"; | ||||||
| import {UIElement} from "../UIElement"; | import {UIElement} from "../UIElement"; | ||||||
| import SettingsTable from "./SettingsTable"; | import SettingsTable from "./SettingsTable"; | ||||||
| import SingleSetting from "./SingleSetting"; | import SingleSetting from "./SingleSetting"; | ||||||
| import {AndOrTagInput} from "../Input/AndOrTagInput"; | import AndOrTagInput from "../Input/AndOrTagInput"; | ||||||
| import MultiLingualTextFields from "../Input/MultiLingualTextFields"; | import MultiLingualTextFields from "../Input/MultiLingualTextFields"; | ||||||
| import {DropDown} from "../Input/DropDown"; | import {DropDown} from "../Input/DropDown"; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -6,14 +6,14 @@ import SettingsTable from "./SettingsTable"; | ||||||
| import {TextField} from "../Input/TextField"; | import {TextField} from "../Input/TextField"; | ||||||
| import Combine from "../Base/Combine"; | import Combine from "../Base/Combine"; | ||||||
| import MultiLingualTextFields from "../Input/MultiLingualTextFields"; | import MultiLingualTextFields from "../Input/MultiLingualTextFields"; | ||||||
| import {AndOrTagInput} from "../Input/AndOrTagInput"; | import AndOrTagInput from "../Input/AndOrTagInput"; | ||||||
| import {MultiTagInput} from "../Input/MultiTagInput"; | import {MultiTagInput} from "../Input/MultiTagInput"; | ||||||
| import {MultiInput} from "../Input/MultiInput"; | import {MultiInput} from "../Input/MultiInput"; | ||||||
| import MappingInput from "./MappingInput"; | import MappingInput from "./MappingInput"; | ||||||
| import {AndOrTagConfigJson} from "../../Customizations/JSON/TagConfigJson"; | import {AndOrTagConfigJson} from "../../Customizations/JSON/TagConfigJson"; | ||||||
| import {TagRenderingConfigJson} from "../../Customizations/JSON/TagRenderingConfigJson"; | import {TagRenderingConfigJson} from "../../Customizations/JSON/TagRenderingConfigJson"; | ||||||
| import {UserDetails} from "../../Logic/Osm/OsmConnection"; | import {UserDetails} from "../../Logic/Osm/OsmConnection"; | ||||||
| import {State} from "../../State"; | import State from "../../State"; | ||||||
| import {VariableUiElement} from "../Base/VariableUIElement"; | import {VariableUiElement} from "../Base/VariableUIElement"; | ||||||
| import {FromJSON} from "../../Customizations/JSON/FromJSON"; | import {FromJSON} from "../../Customizations/JSON/FromJSON"; | ||||||
| import ValidatedTextField from "../Input/ValidatedTextField"; | import ValidatedTextField from "../Input/ValidatedTextField"; | ||||||
|  | @ -50,7 +50,8 @@ export default class TagRenderingPanel extends InputElement<TagRenderingConfigJs | ||||||
|             (this.options.disableQuestions ?? false) || |             (this.options.disableQuestions ?? false) || | ||||||
|             questionsNotUnlocked;  |             questionsNotUnlocked;  | ||||||
| 
 | 
 | ||||||
|         this.intro = new Combine(["<h3>", options?.title ?? "TagRendering", "</h3>", options?.description ?? ""]) |         this.intro = new Combine(["<h3>", options?.title ?? "TagRendering", "</h3>",  | ||||||
|  |             options?.description ?? "A tagrendering converts OSM-tags into a value on screen. Fill out the field 'render' with the text that should appear. Note that `{key}` will be replaced with the corresponding `value`, if present.<br/>For specific known tags (e.g. if `foo=bar`, make a mapping).  "]) | ||||||
|         this.IsImage = options?.isImage ?? false; |         this.IsImage = options?.isImage ?? false; | ||||||
| 
 | 
 | ||||||
|         const value = new UIEventSource<TagRenderingConfigJson>({}); |         const value = new UIEventSource<TagRenderingConfigJson>({}); | ||||||
|  |  | ||||||
|  | @ -7,7 +7,7 @@ import {TagDependantUIElement, TagDependantUIElementConstructor} from "../Custom | ||||||
| import Translations from "./i18n/Translations"; | import Translations from "./i18n/Translations"; | ||||||
| import {Changes} from "../Logic/Osm/Changes"; | import {Changes} from "../Logic/Osm/Changes"; | ||||||
| import {FixedUiElement} from "./Base/FixedUiElement"; | import {FixedUiElement} from "./Base/FixedUiElement"; | ||||||
| import {State} from "../State"; | import State from "../State"; | ||||||
| import {TagRenderingOptions} from "../Customizations/TagRenderingOptions"; | import {TagRenderingOptions} from "../Customizations/TagRenderingOptions"; | ||||||
| import {UIEventSource} from "../Logic/UIEventSource"; | import {UIEventSource} from "../Logic/UIEventSource"; | ||||||
| import Combine from "./Base/Combine"; | import Combine from "./Base/Combine"; | ||||||
|  | @ -133,7 +133,8 @@ export class FeatureInfoBox extends UIElement { | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         const infoboxcontents = new Combine( |         const infoboxcontents = new Combine( | ||||||
|             [new VerticalCombine(info, "infobox-information "), questionElement ?? ""]); |             [new VerticalCombine(info).SetClass("infobox-information") | ||||||
|  |                 , questionElement ?? ""]); | ||||||
| 
 | 
 | ||||||
|         return new Combine([ |         return new Combine([ | ||||||
|             this._title, |             this._title, | ||||||
|  |  | ||||||
|  | @ -1,6 +1,6 @@ | ||||||
| import {UIElement} from "./UIElement"; | import {UIElement} from "./UIElement"; | ||||||
| import Translations from "./i18n/Translations"; | import Translations from "./i18n/Translations"; | ||||||
| import {State} from "../State"; | import State from "../State"; | ||||||
| import Combine from "./Base/Combine"; | import Combine from "./Base/Combine"; | ||||||
| 
 | 
 | ||||||
| /** | /** | ||||||
|  |  | ||||||
|  | @ -1,9 +1,9 @@ | ||||||
| import {UIElement} from "../UIElement"; | import {UIElement} from "../UIElement"; | ||||||
| import {UIEventSource} from "../../Logic/UIEventSource"; | import {UIEventSource} from "../../Logic/UIEventSource"; | ||||||
| import Translations from "../i18n/Translations"; | import Translations from "../i18n/Translations"; | ||||||
| import {CheckBox} from "../Input/CheckBox"; | import CheckBox from "../Input/CheckBox"; | ||||||
| import Combine from "../Base/Combine"; | import Combine from "../Base/Combine"; | ||||||
| import {State} from "../../State"; | import State from "../../State"; | ||||||
| import {Tag} from "../../Logic/Tags"; | import {Tag} from "../../Logic/Tags"; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -6,7 +6,7 @@ import { | ||||||
| import {ImageCarousel} from "./ImageCarousel"; | import {ImageCarousel} from "./ImageCarousel"; | ||||||
| import {ImageUploadFlow} from "../ImageUploadFlow"; | import {ImageUploadFlow} from "../ImageUploadFlow"; | ||||||
| import {OsmImageUploadHandler} from "../../Logic/Osm/OsmImageUploadHandler"; | import {OsmImageUploadHandler} from "../../Logic/Osm/OsmImageUploadHandler"; | ||||||
| import {State} from "../../State"; | import State from "../../State"; | ||||||
| import Translation from "../i18n/Translation"; | import Translation from "../i18n/Translation"; | ||||||
| 
 | 
 | ||||||
| export default class ImageCarouselWithUploadConstructor implements TagDependantUIElementConstructor{ | export default class ImageCarouselWithUploadConstructor implements TagDependantUIElementConstructor{ | ||||||
|  |  | ||||||
|  | @ -3,7 +3,7 @@ import $ from "jquery" | ||||||
| import {DropDown} from "./Input/DropDown"; | import {DropDown} from "./Input/DropDown"; | ||||||
| import Translations from "./i18n/Translations"; | import Translations from "./i18n/Translations"; | ||||||
| import Combine from "./Base/Combine"; | import Combine from "./Base/Combine"; | ||||||
| import {State} from "../State"; | import State from "../State"; | ||||||
| import {UIEventSource} from "../Logic/UIEventSource"; | import {UIEventSource} from "../Logic/UIEventSource"; | ||||||
| import {Imgur} from "../Logic/Web/Imgur"; | import {Imgur} from "../Logic/Web/Imgur"; | ||||||
| import {FixedUiElement} from "./Base/FixedUiElement"; | import {FixedUiElement} from "./Base/FixedUiElement"; | ||||||
|  |  | ||||||
|  | @ -3,7 +3,7 @@ import {UIEventSource} from "../../Logic/UIEventSource"; | ||||||
| import {UIElement} from "../UIElement"; | import {UIElement} from "../UIElement"; | ||||||
| import Combine from "../Base/Combine"; | import Combine from "../Base/Combine"; | ||||||
| import {SubtleButton} from "../Base/SubtleButton"; | import {SubtleButton} from "../Base/SubtleButton"; | ||||||
| import {CheckBox} from "./CheckBox"; | import CheckBox from "./CheckBox"; | ||||||
| import {AndOrTagConfigJson} from "../../Customizations/JSON/TagConfigJson"; | import {AndOrTagConfigJson} from "../../Customizations/JSON/TagConfigJson"; | ||||||
| import {MultiTagInput} from "./MultiTagInput"; | import {MultiTagInput} from "./MultiTagInput"; | ||||||
| 
 | 
 | ||||||
|  | @ -13,7 +13,7 @@ class AndOrConfig implements AndOrTagConfigJson { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| export class AndOrTagInput extends InputElement<AndOrTagConfigJson> { | export default class AndOrTagInput extends InputElement<AndOrTagConfigJson> { | ||||||
| 
 | 
 | ||||||
|     private readonly _rawTags = new MultiTagInput(); |     private readonly _rawTags = new MultiTagInput(); | ||||||
|     private readonly _subAndOrs: AndOrTagInput[] = []; |     private readonly _subAndOrs: AndOrTagInput[] = []; | ||||||
|  |  | ||||||
|  | @ -2,7 +2,7 @@ import {UIElement} from "../UIElement"; | ||||||
| import Translations from "../../UI/i18n/Translations"; | import Translations from "../../UI/i18n/Translations"; | ||||||
| import {UIEventSource} from "../../Logic/UIEventSource"; | import {UIEventSource} from "../../Logic/UIEventSource"; | ||||||
| 
 | 
 | ||||||
| export class CheckBox extends UIElement{ | export default class CheckBox extends UIElement{ | ||||||
|     public readonly isEnabled: UIEventSource<boolean>; |     public readonly isEnabled: UIEventSource<boolean>; | ||||||
|     private readonly _showEnabled:  UIElement; |     private readonly _showEnabled:  UIElement; | ||||||
|     private readonly _showDisabled: UIElement; |     private readonly _showDisabled: UIElement; | ||||||
|  |  | ||||||
|  | @ -6,7 +6,7 @@ import {UIElement} from "../UIElement"; | ||||||
| /** | /** | ||||||
|  * Supports multi-input |  * Supports multi-input | ||||||
|  */ |  */ | ||||||
| export class CheckBoxes extends InputElement<number[]> { | export default class CheckBoxes extends InputElement<number[]> { | ||||||
|     IsSelected: UIEventSource<boolean> = new UIEventSource<boolean>(false); |     IsSelected: UIEventSource<boolean> = new UIEventSource<boolean>(false); | ||||||
| 
 | 
 | ||||||
|     private readonly value: UIEventSource<number[]>; |     private readonly value: UIEventSource<number[]>; | ||||||
|  |  | ||||||
|  | @ -1,27 +1,24 @@ | ||||||
| import {InputElement} from "./InputElement"; | /** | ||||||
| import {UIEventSource} from "../../Logic/UIEventSource"; |  * This is the base-table which is selectable by hovering over it. | ||||||
| import {Utils} from "../../Utils"; |  * It will genarate the currently selected opening hour. | ||||||
|  |  */ | ||||||
|  | import {UIEventSource} from "../../../Logic/UIEventSource"; | ||||||
|  | import {Utils} from "../../../Utils"; | ||||||
|  | import {OpeningHour} from "../../../Logic/OpeningHours"; | ||||||
|  | import {InputElement} from "../InputElement"; | ||||||
| 
 | 
 | ||||||
| export interface OpeningHour { | export default class OpeningHoursPicker extends InputElement<OpeningHour> { | ||||||
|     weekdayStart: number, // 0 is monday, 1 is tuesday, ...
 |  | ||||||
|     weekdayEnd: number, |  | ||||||
|     startHour: number, |  | ||||||
|     startMinutes: number, |  | ||||||
|     endHour: number, |  | ||||||
|     endMinutes: number |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| export default class OpeningHours extends InputElement<OpeningHour[]> { |  | ||||||
|     public readonly IsSelected: UIEventSource<boolean>; |     public readonly IsSelected: UIEventSource<boolean>; | ||||||
| 
 | 
 | ||||||
|     public static readonly days = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]; |     public static readonly days = ["Maan", "Din", "Woe", "Don", "Vrij", "Zat", "Zon"]; | ||||||
| 
 | 
 | ||||||
|     private readonly source: UIEventSource<OpeningHour[]>; |     private readonly source: UIEventSource<OpeningHour>; | ||||||
| 
 | 
 | ||||||
|     constructor(source: UIEventSource<OpeningHour[]> = undefined) { |     constructor(source: UIEventSource<OpeningHour> = undefined) { | ||||||
|         super(); |         super(); | ||||||
|         this.source = source ?? new UIEventSource<OpeningHour[]>([]); |         this.source = source ?? new UIEventSource<OpeningHour>(undefined); | ||||||
|         this.IsSelected = new UIEventSource<boolean>(false); |         this.IsSelected = new UIEventSource<boolean>(false); | ||||||
|  |         this.SetStyle("width:100%;height:100%;display:block;") | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     InnerRender(): string { |     InnerRender(): string { | ||||||
|  | @ -31,24 +28,17 @@ export default class OpeningHours extends InputElement<OpeningHour[]> { | ||||||
|             if (hs.length == 1) { |             if (hs.length == 1) { | ||||||
|                 hs = "0" + hs; |                 hs = "0" + hs; | ||||||
|             } |             } | ||||||
|             for (let m = 0; m < 60; m += 60) { |             rows += `<tr><td rowspan="2" class="oh-left-col oh-timecell-full">${hs}:00</td>` + | ||||||
|                 let min = "" + m; |                 Utils.Times('<td class="oh-timecell oh-timecell-full"></td>', 7) + | ||||||
|                 const style = "width:0.5em;font-size:small;"; |                 '</tr><tr>' + | ||||||
|                 if (m === 0) { |                 // Utils.Times('<td class="oh-timecell"></td>', 7) +
 | ||||||
|                     min = "00"; |                 // '</tr><tr>' +
 | ||||||
|                 } |                 Utils.Times('<td class="oh-timecell oh-timecell-half"></td>', 7) + | ||||||
|                 rows += `<tr><td class="oh-left-col" rowspan="4" style="${style}">${hs}:${min}</td>` + |                 //  '</tr><tr>' +
 | ||||||
|                     Utils.Times('<td class="oh-timecell oh-timecell-full"></td>', 7) + |                 //  Utils.Times('<td class="oh-timecell"></td>', 7) +
 | ||||||
|                     '</tr><tr>' + |                 '</tr>'; | ||||||
|                     Utils.Times('<td class="oh-timecell"></td>', 7) + |  | ||||||
|                     '</tr><tr>' + |  | ||||||
|                     Utils.Times('<td class="oh-timecell oh-timecell-half"></td>', 7) + |  | ||||||
|                     '</tr><tr>' + |  | ||||||
|                     Utils.Times('<td class="oh-timecell"></td>', 7) + |  | ||||||
|                     '</tr>'; |  | ||||||
|             } |  | ||||||
|         } |         } | ||||||
|         let days = OpeningHours.days.join("</th><th>"); |         let days = OpeningHoursPicker.days.join("</th><th>"); | ||||||
|         return `<table id="oh-table-${this.id}" class="oh-table"><tr><th></th><th>${days}</tr>${rows}</table>`; |         return `<table id="oh-table-${this.id}" class="oh-table"><tr><th></th><th>${days}</tr>${rows}</table>`; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | @ -68,14 +58,9 @@ export default class OpeningHours extends InputElement<OpeningHour[]> { | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         function m(timeSegment: number) { |         function m(timeSegment: number) { | ||||||
|             return (timeSegment % 4) * 15; |             return (timeSegment % 2) * 30; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         function hhmm(timeSegment: number) { |  | ||||||
|             return h(timeSegment) + ":" + m(timeSegment) |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|         function startSelection(i: number, j: number, cell: HTMLElement) { |         function startSelection(i: number, j: number, cell: HTMLElement) { | ||||||
|             mouseIsDown = true; |             mouseIsDown = true; | ||||||
|             selectionStart = [i, j]; |             selectionStart = [i, j]; | ||||||
|  | @ -92,9 +77,6 @@ export default class OpeningHours extends InputElement<OpeningHour[]> { | ||||||
|             const dEnd = Math.max(selectionStart[1], selectionEnd[1]); |             const dEnd = Math.max(selectionStart[1], selectionEnd[1]); | ||||||
|             const timeStart = Math.min(selectionStart[0], selectionEnd[0]) - 1; |             const timeStart = Math.min(selectionStart[0], selectionEnd[0]) - 1; | ||||||
|             const timeEnd = Math.max(selectionStart[0], selectionEnd[0]) - 1; |             const timeEnd = Math.max(selectionStart[0], selectionEnd[0]) - 1; | ||||||
|             console.log("Selected from day", OpeningHours.days[dStart], "at", |  | ||||||
|                 hhmm(timeStart), "till", OpeningHours.days[dEnd], "at", hhmm(timeEnd + 1) |  | ||||||
|             ) |  | ||||||
|             const oh: OpeningHour = { |             const oh: OpeningHour = { | ||||||
|                 weekdayStart: dStart, |                 weekdayStart: dStart, | ||||||
|                 weekdayEnd: dEnd, |                 weekdayEnd: dEnd, | ||||||
|  | @ -103,8 +85,7 @@ export default class OpeningHours extends InputElement<OpeningHour[]> { | ||||||
|                 endHour: h(timeEnd + 1), |                 endHour: h(timeEnd + 1), | ||||||
|                 endMinutes: m(timeEnd + 1) |                 endMinutes: m(timeEnd + 1) | ||||||
|             } |             } | ||||||
|             self.source.data.push(oh); |             self.source.setData(oh); | ||||||
|             self.source.ping(); |  | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         table.onmouseup = () => { |         table.onmouseup = () => { | ||||||
|  | @ -134,7 +115,7 @@ export default class OpeningHours extends InputElement<OpeningHour[]> { | ||||||
|                 for (let j = 0; j < row.cells.length; j++) { |                 for (let j = 0; j < row.cells.length; j++) { | ||||||
|                     let cell = row.cells[j] |                     let cell = row.cells[j] | ||||||
|                     let offset = 0; |                     let offset = 0; | ||||||
|                     if (i % 4 == 1) { |                     if (i % 2 == 1) { | ||||||
|                         if (j == 0) { |                         if (j == 0) { | ||||||
|                             continue; |                             continue; | ||||||
|                         } |                         } | ||||||
|  | @ -157,7 +138,7 @@ export default class OpeningHours extends InputElement<OpeningHour[]> { | ||||||
|             for (let j = 0; j < row.cells.length; j++) { |             for (let j = 0; j < row.cells.length; j++) { | ||||||
|                 let cell = row.cells[j] |                 let cell = row.cells[j] | ||||||
|                 let offset = 0; |                 let offset = 0; | ||||||
|                 if (i % 4 == 1) { |                 if (i % 2 == 1) { | ||||||
|                     if (j == 0) { |                     if (j == 0) { | ||||||
|                         continue; |                         continue; | ||||||
|                     } |                     } | ||||||
|  | @ -168,10 +149,12 @@ export default class OpeningHours extends InputElement<OpeningHour[]> { | ||||||
|                 cell.onmousedown = (ev) => { |                 cell.onmousedown = (ev) => { | ||||||
|                     ev.preventDefault(); |                     ev.preventDefault(); | ||||||
|                     startSelection(i, j + offset, cell) |                     startSelection(i, j + offset, cell) | ||||||
|  |                     selectAllBetween(i, j + offset); | ||||||
|                 } |                 } | ||||||
|                 cell.ontouchstart = (ev) => { |                 cell.ontouchstart = (ev) => { | ||||||
|                     ev.preventDefault(); |                     ev.preventDefault(); | ||||||
|                     startSelection(i, j + offset, cell) |                     startSelection(i, j + offset, cell); | ||||||
|  |                     selectAllBetween(i, j + offset); | ||||||
|                 } |                 } | ||||||
|                 cell.onmouseenter = () => { |                 cell.onmouseenter = () => { | ||||||
|                     if (mouseIsDown) { |                     if (mouseIsDown) { | ||||||
|  | @ -180,16 +163,39 @@ export default class OpeningHours extends InputElement<OpeningHour[]> { | ||||||
|                     } |                     } | ||||||
|                 } |                 } | ||||||
| 
 | 
 | ||||||
|                 cell.ontouchmove = (ev) => { | 
 | ||||||
|  |                 cell.ontouchmove = (ev: TouchEvent) => { | ||||||
|  | 
 | ||||||
|                     ev.preventDefault(); |                     ev.preventDefault(); | ||||||
|                     selectionEnd = [i, j + offset]; |                     for (const k in ev.targetTouches) { | ||||||
|                     selectAllBetween(i, j + offset) |                         const touch = ev.targetTouches[k]; | ||||||
|  |                         const elUnderTouch = document.elementFromPoint( | ||||||
|  |                             touch.screenX, | ||||||
|  |                             touch.screenY | ||||||
|  |                         ); | ||||||
|  |                         // @ts-ignore
 | ||||||
|  |                         const f = elUnderTouch.onmouseenter; | ||||||
|  |                         if (f) { | ||||||
|  |                             f(); | ||||||
|  |                         } | ||||||
|  |                     } | ||||||
|  | 
 | ||||||
|                 } |                 } | ||||||
| 
 | 
 | ||||||
|                 cell.ontouchend = (ev) => { |                 cell.ontouchend = (ev) => { | ||||||
|                     ev.preventDefault(); |                     ev.preventDefault(); | ||||||
|                     selectionEnd = [i, j + offset]; |                     for (const k in ev.targetTouches) { | ||||||
|                     selectAllBetween(i, j + offset) |                         const touch = ev.targetTouches[k]; | ||||||
|  |                         const elUnderTouch = document.elementFromPoint( | ||||||
|  |                             touch.pageX, | ||||||
|  |                             touch.pageY | ||||||
|  |                         ); | ||||||
|  |                         // @ts-ignore
 | ||||||
|  |                         const f = elUnderTouch.onmouseup; | ||||||
|  |                         if (f) { | ||||||
|  |                             f(); | ||||||
|  |                         } | ||||||
|  |                     } | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|  | @ -198,11 +204,11 @@ export default class OpeningHours extends InputElement<OpeningHour[]> { | ||||||
| 
 | 
 | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     IsValid(t: OpeningHour[]): boolean { |     IsValid(t: OpeningHour): boolean { | ||||||
|         return true; |         return true; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     GetValue(): UIEventSource<OpeningHour[]> { |     GetValue(): UIEventSource<OpeningHour> { | ||||||
|         return this.source; |         return this.source; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
							
								
								
									
										19
									
								
								UI/Input/OpeningHours/OpeningHoursRange.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								UI/Input/OpeningHours/OpeningHoursRange.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,19 @@ | ||||||
|  | import {UIElement} from "../../UIElement"; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * A single opening hours range, shown on top of the OH-picker table | ||||||
|  |  */ | ||||||
|  | export default class OpeningHoursRange extends UIElement{ | ||||||
|  |     private _parentCell: HTMLElement; | ||||||
|  |     constructor(parentCell : HTMLElement) { | ||||||
|  |         super(); | ||||||
|  |         this._parentCell = parentCell; | ||||||
|  | 
 | ||||||
|  |          | ||||||
|  |     } | ||||||
|  |     InnerRender(): string { | ||||||
|  |         this.SetStyle(`display:block;position:absolute;top:0;left:0;width:100%;background:blue;height:${this._parentCell.offsetHeight*2}px`) | ||||||
|  |         return "Hi"; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | @ -156,7 +156,7 @@ export default class ValidatedTextField { | ||||||
|         const values: { value: string, shown: string }[] = []; |         const values: { value: string, shown: string }[] = []; | ||||||
|         const expl = ValidatedTextField.tpList; |         const expl = ValidatedTextField.tpList; | ||||||
|         for (const key in expl) { |         for (const key in expl) { | ||||||
|             values.push({value: key, shown: `${key} - ${expl[key]}`}) |             values.push({value: key, shown: `${expl[key].name} - ${expl[key].explanation}`}) | ||||||
|         } |         } | ||||||
|         return new DropDown<string>("", values) |         return new DropDown<string>("", values) | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | @ -1,7 +1,7 @@ | ||||||
| import {UIElement} from "./UIElement"; | import {UIElement} from "./UIElement"; | ||||||
| import {CheckBox} from "./Input/CheckBox"; | import CheckBox from "./Input/CheckBox"; | ||||||
| import Combine from "./Base/Combine"; | import Combine from "./Base/Combine"; | ||||||
| import {State} from "../State"; | import State from "../State"; | ||||||
| import Translations from "./i18n/Translations"; | import Translations from "./i18n/Translations"; | ||||||
| import {FixedUiElement} from "./Base/FixedUiElement"; | import {FixedUiElement} from "./Base/FixedUiElement"; | ||||||
| import {VariableUiElement} from "./Base/VariableUIElement"; | import {VariableUiElement} from "./Base/VariableUIElement"; | ||||||
|  |  | ||||||
|  | @ -4,7 +4,7 @@ import Translations from "./i18n/Translations"; | ||||||
| import {AllKnownLayouts} from "../Customizations/AllKnownLayouts"; | import {AllKnownLayouts} from "../Customizations/AllKnownLayouts"; | ||||||
| import Combine from "./Base/Combine"; | import Combine from "./Base/Combine"; | ||||||
| import {SubtleButton} from "./Base/SubtleButton"; | import {SubtleButton} from "./Base/SubtleButton"; | ||||||
| import {State} from "../State"; | import State from "../State"; | ||||||
| import {VariableUiElement} from "./Base/VariableUIElement"; | import {VariableUiElement} from "./Base/VariableUIElement"; | ||||||
| import {PersonalLayout} from "../Logic/PersonalLayout"; | import {PersonalLayout} from "../Logic/PersonalLayout"; | ||||||
| import {Layout} from "../Customizations/Layout"; | import {Layout} from "../Customizations/Layout"; | ||||||
|  |  | ||||||
							
								
								
									
										38
									
								
								UI/OhVisualization.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								UI/OhVisualization.ts
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,38 @@ | ||||||
|  | import {UIElement} from "./UIElement"; | ||||||
|  | import {UIEventSource} from "../Logic/UIEventSource"; | ||||||
|  | import * as opening_hours from "opening_hours"; | ||||||
|  | 
 | ||||||
|  | export default class OhVisualization extends UIElement { | ||||||
|  | 
 | ||||||
|  |     constructor(openingHours: UIEventSource<any>) { | ||||||
|  |         super(openingHours); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     InnerRender(): string { | ||||||
|  | 
 | ||||||
|  |         const oh = new opening_hours(this._source.data, {}); | ||||||
|  | 
 | ||||||
|  |        let nominatim_example =  [{ | ||||||
|  |             "place_id": 79276782, | ||||||
|  |             "licence": "Data © OpenStreetMap contributors, ODbL 1.0. https://osm.org/copyright", | ||||||
|  |             "osm_type": "way", | ||||||
|  |             "osm_id": 4575088, | ||||||
|  |             "boundingbox": ["52.5519288", "52.5541724", "-1.8278941", "-1.8238916"], | ||||||
|  |             "lat": "52.553624", | ||||||
|  |             "lon": "-1.8256057", | ||||||
|  |             "display_name": "Pilkington Avenue, Sutton Coldfield, Birmingham, West Midlands Combined Authority, England, B72, United Kingdom", | ||||||
|  |             "place_rank": 26, | ||||||
|  |             "category": "highway", | ||||||
|  |             "type": "residential", | ||||||
|  |             "importance": 0.4, | ||||||
|  |             "geojson": { | ||||||
|  |                 "type": "LineString", | ||||||
|  |                 "coordinates": [[-1.8278941, 52.55417], [-1.8277256, 52.5541716], [-1.8276423, 52.5541724], [-1.8267652, 52.5539852], [-1.8261462, 52.5538445], [-1.8258137, 52.5537286], [-1.8256057, 52.553624], [-1.8254024, 52.5534973], [-1.8252343, 52.5533435], [-1.8245486, 52.5526243], [-1.8238916, 52.5519288]] | ||||||
|  |             } | ||||||
|  |         }] | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         return ""; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | @ -6,7 +6,7 @@ import {FixedUiElement} from "./Base/FixedUiElement"; | ||||||
| import {TextField} from "./Input/TextField"; | import {TextField} from "./Input/TextField"; | ||||||
| import {Geocoding} from "../Logic/Osm/Geocoding"; | import {Geocoding} from "../Logic/Osm/Geocoding"; | ||||||
| import Translations from "./i18n/Translations"; | import Translations from "./i18n/Translations"; | ||||||
| import {State} from "../State"; | import State from "../State"; | ||||||
| 
 | 
 | ||||||
| import {UIEventSource} from "../Logic/UIEventSource"; | import {UIEventSource} from "../Logic/UIEventSource"; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -3,10 +3,10 @@ import Translations from "./i18n/Translations"; | ||||||
| import {FixedUiElement} from "./Base/FixedUiElement"; | import {FixedUiElement} from "./Base/FixedUiElement"; | ||||||
| import Combine from "./Base/Combine"; | import Combine from "./Base/Combine"; | ||||||
| import {VariableUiElement} from "./Base/VariableUIElement"; | import {VariableUiElement} from "./Base/VariableUIElement"; | ||||||
| import {CheckBox} from "./Input/CheckBox"; | import CheckBox from "./Input/CheckBox"; | ||||||
| import {VerticalCombine} from "./Base/VerticalCombine"; | import {VerticalCombine} from "./Base/VerticalCombine"; | ||||||
| import {Img} from "./Img"; | import {Img} from "./Img"; | ||||||
| import {State} from "../State"; | import State from "../State"; | ||||||
| import {Basemap} from "../Logic/Leaflet/Basemap"; | import {Basemap} from "../Logic/Leaflet/Basemap"; | ||||||
| import {FilteredLayer} from "../Logic/FilteredLayer"; | import {FilteredLayer} from "../Logic/FilteredLayer"; | ||||||
| import {Utils} from "../Utils"; | import {Utils} from "../Utils"; | ||||||
|  |  | ||||||
|  | @ -5,7 +5,7 @@ import Translations from "./i18n/Translations"; | ||||||
| import Combine from "./Base/Combine"; | import Combine from "./Base/Combine"; | ||||||
| import {SubtleButton} from "./Base/SubtleButton"; | import {SubtleButton} from "./Base/SubtleButton"; | ||||||
| import Locale from "./i18n/Locale"; | import Locale from "./i18n/Locale"; | ||||||
| import {State} from "../State"; | import State from "../State"; | ||||||
| 
 | 
 | ||||||
| import {UIEventSource} from "../Logic/UIEventSource"; | import {UIEventSource} from "../Logic/UIEventSource"; | ||||||
| import {Utils} from "../Utils"; | import {Utils} from "../Utils"; | ||||||
|  |  | ||||||
|  | @ -2,14 +2,12 @@ import {UIEventSource} from "../Logic/UIEventSource"; | ||||||
| import {And, Tag, TagsFilter, TagUtils} from "../Logic/Tags"; | import {And, Tag, TagsFilter, TagUtils} from "../Logic/Tags"; | ||||||
| import Translations from "../UI/i18n/Translations"; | import Translations from "../UI/i18n/Translations"; | ||||||
| import Locale from "../UI/i18n/Locale"; | import Locale from "../UI/i18n/Locale"; | ||||||
| import {State} from "../State"; |  | ||||||
| import Translation from "../UI/i18n/Translation"; | import Translation from "../UI/i18n/Translation"; | ||||||
| import Combine from "../UI/Base/Combine"; | import Combine from "../UI/Base/Combine"; | ||||||
| import {TagDependantUIElement} from "../Customizations/UIElementConstructor"; | import {TagDependantUIElement} from "../Customizations/UIElementConstructor"; | ||||||
| import {UIElement} from "./UIElement"; | import {UIElement} from "./UIElement"; | ||||||
| import {VariableUiElement} from "./Base/VariableUIElement"; | import {VariableUiElement} from "./Base/VariableUIElement"; | ||||||
| import InputElementMap from "./Input/InputElementMap"; | import InputElementMap from "./Input/InputElementMap"; | ||||||
| import {CheckBoxes} from "./Input/Checkboxes"; |  | ||||||
| import {InputElement} from "./Input/InputElement"; | import {InputElement} from "./Input/InputElement"; | ||||||
| import {SaveButton} from "./SaveButton"; | import {SaveButton} from "./SaveButton"; | ||||||
| import {RadioButton} from "./Input/RadioButton"; | import {RadioButton} from "./Input/RadioButton"; | ||||||
|  | @ -17,6 +15,8 @@ import {FixedInputElement} from "./Input/FixedInputElement"; | ||||||
| import {TagRenderingOptions} from "../Customizations/TagRenderingOptions"; | import {TagRenderingOptions} from "../Customizations/TagRenderingOptions"; | ||||||
| import {FixedUiElement} from "./Base/FixedUiElement"; | import {FixedUiElement} from "./Base/FixedUiElement"; | ||||||
| import ValidatedTextField from "./Input/ValidatedTextField"; | import ValidatedTextField from "./Input/ValidatedTextField"; | ||||||
|  | import CheckBoxes from "./Input/Checkboxes"; | ||||||
|  | import State from "../State"; | ||||||
| 
 | 
 | ||||||
| export class TagRendering extends UIElement implements TagDependantUIElement { | export class TagRendering extends UIElement implements TagDependantUIElement { | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1,10 +1,10 @@ | ||||||
| import {UIElement} from "./UIElement"; | import {UIElement} from "./UIElement"; | ||||||
| import L from "leaflet"; | import * as L from "leaflet"; | ||||||
| import {FixedUiElement} from "./Base/FixedUiElement"; | import {FixedUiElement} from "./Base/FixedUiElement"; | ||||||
| import {VariableUiElement} from "./Base/VariableUIElement"; | import {VariableUiElement} from "./Base/VariableUIElement"; | ||||||
| import Translations from "./i18n/Translations"; | import Translations from "./i18n/Translations"; | ||||||
| import {UserDetails} from "../Logic/Osm/OsmConnection"; | import {UserDetails} from "../Logic/Osm/OsmConnection"; | ||||||
| import {State} from "../State"; | import State from "../State"; | ||||||
| import {UIEventSource} from "../Logic/UIEventSource"; | import {UIEventSource} from "../Logic/UIEventSource"; | ||||||
| import {InitUiElements} from "../InitUiElements"; | import {InitUiElements} from "../InitUiElements"; | ||||||
| import Combine from "./Base/Combine"; | import Combine from "./Base/Combine"; | ||||||
|  |  | ||||||
|  | @ -1,6 +1,6 @@ | ||||||
| import {UIElement} from "./UIElement"; | import {UIElement} from "./UIElement"; | ||||||
| import Locale from "../UI/i18n/Locale"; | import Locale from "../UI/i18n/Locale"; | ||||||
| import {State} from "../State"; | import State from "../State"; | ||||||
| import Translations from "./i18n/Translations"; | import Translations from "./i18n/Translations"; | ||||||
| import Combine from "./Base/Combine"; | import Combine from "./Base/Combine"; | ||||||
| import {InitUiElements} from "../InitUiElements"; | import {InitUiElements} from "../InitUiElements"; | ||||||
|  |  | ||||||
							
								
								
									
										91
									
								
								Utils.ts
									
										
									
									
									
								
							
							
						
						
									
										91
									
								
								Utils.ts
									
										
									
									
									
								
							|  | @ -1,4 +1,6 @@ | ||||||
| import {UIElement} from "./UI/UIElement"; | import {UIElement} from "./UI/UIElement"; | ||||||
|  | import * as $ from "jquery" | ||||||
|  | import {FixedUiElement} from "./UI/Base/FixedUiElement"; | ||||||
| 
 | 
 | ||||||
| export class Utils { | export class Utils { | ||||||
| 
 | 
 | ||||||
|  | @ -88,14 +90,14 @@ export class Utils { | ||||||
|         } |         } | ||||||
|         const newArr = []; |         const newArr = []; | ||||||
|         for (const string of arr) { |         for (const string of arr) { | ||||||
|             if(newArr.indexOf(string) < 0){ |             if (newArr.indexOf(string) < 0) { | ||||||
|                 newArr.push(string); |                 newArr.push(string); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|         return newArr; |         return newArr; | ||||||
|     } |     } | ||||||
|      | 
 | ||||||
|     public static MergeTags(a :any, b: any){ |     public static MergeTags(a: any, b: any) { | ||||||
|         const t = {}; |         const t = {}; | ||||||
|         for (const k in a) { |         for (const k in a) { | ||||||
|             t[k] = a[k]; |             t[k] = a[k]; | ||||||
|  | @ -105,22 +107,91 @@ export class Utils { | ||||||
|         } |         } | ||||||
|         return t; |         return t; | ||||||
|     } |     } | ||||||
|      | 
 | ||||||
|     public static SplitFirst(a: string, sep: string):string[]{ |     public static SplitFirst(a: string, sep: string): string[] { | ||||||
|         const index = a.indexOf(sep); |         const index = a.indexOf(sep); | ||||||
|         if(index < 0){ |         if (index < 0) { | ||||||
|             return [a]; |             return [a]; | ||||||
|         } |         } | ||||||
|         return [a.substr(0, index), a.substr(index+sep.length)]; |         return [a.substr(0, index), a.substr(index + sep.length)]; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public static isRetina() : boolean{ |     public static isRetina(): boolean { | ||||||
|         if(UIElement.runningFromConsole){ |         if (UIElement.runningFromConsole) { | ||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
|         // The cause for this line of code: https://github.com/pietervdvn/MapComplete/issues/115
 |         // The cause for this line of code: https://github.com/pietervdvn/MapComplete/issues/115
 | ||||||
|         // See https://stackoverflow.com/questions/19689715/what-is-the-best-way-to-detect-retina-support-on-a-device-using-javascript
 |         // See https://stackoverflow.com/questions/19689715/what-is-the-best-way-to-detect-retina-support-on-a-device-using-javascript
 | ||||||
|         return ((window.matchMedia && (window.matchMedia('only screen and (min-resolution: 192dpi), only screen and (min-resolution: 2dppx), only screen and (min-resolution: 75.6dpcm)').matches || window.matchMedia('only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (-o-min-device-pixel-ratio: 2/1), only screen and (min--moz-device-pixel-ratio: 2), only screen and (min-device-pixel-ratio: 2)').matches)) || (window.devicePixelRatio && window.devicePixelRatio >= 2)); |         return ((window.matchMedia && (window.matchMedia('only screen and (min-resolution: 192dpi), only screen and (min-resolution: 2dppx), only screen and (min-resolution: 75.6dpcm)').matches || window.matchMedia('only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (-o-min-device-pixel-ratio: 2/1), only screen and (min--moz-device-pixel-ratio: 2), only screen and (min-device-pixel-ratio: 2)').matches)) || (window.devicePixelRatio && window.devicePixelRatio >= 2)); | ||||||
|     } |     } | ||||||
|      | 
 | ||||||
|  |     // Date will be undefined on failure
 | ||||||
|  |     public static changesetDate(id: number, action: ((isFound: Date) => void)): void { | ||||||
|  |         $.getJSON("https://www.openstreetmap.org/api/0.6/changeset/" + id, | ||||||
|  |             function (data) { | ||||||
|  |                 console.log(data) | ||||||
|  |                 action(new Date(data.elements[0].created_at)); | ||||||
|  |             }) | ||||||
|  |             .fail(() => { | ||||||
|  |                 action(undefined); | ||||||
|  |             }); | ||||||
|  | 
 | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public static generateStats(action:(stats:string) => void) { | ||||||
|  |         // Binary searches the latest changeset
 | ||||||
|  |         function search(lowerBound: number, | ||||||
|  |                         upperBound: number, | ||||||
|  |                         onCsFound: ((id: number, lastDate: Date) => void), | ||||||
|  |                         depth = 0) { | ||||||
|  |             if (depth > 30) { | ||||||
|  |                 return; | ||||||
|  |             } | ||||||
|  |             const tested = Math.floor((lowerBound + upperBound) / 2); | ||||||
|  |             console.log("Testing", tested) | ||||||
|  |             Utils.changesetDate(tested, (createdAtDate: Date) => { | ||||||
|  |                 new FixedUiElement(`Searching, value between ${lowerBound} and ${upperBound}. Queries till now: ${depth}`).AttachTo('maindiv') | ||||||
|  |                 if (lowerBound + 1 >= upperBound) { | ||||||
|  |                     onCsFound(lowerBound, createdAtDate); | ||||||
|  |                     return; | ||||||
|  |                 } | ||||||
|  |                 if (createdAtDate !== undefined) { | ||||||
|  |                     search(tested, upperBound, onCsFound, depth + 1) | ||||||
|  |                 } else { | ||||||
|  |                     search(lowerBound, tested, onCsFound, depth + 1); | ||||||
|  |                 } | ||||||
|  |             }) | ||||||
|  | 
 | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         search(91000000, 100000000, (last, lastDate: Date) => { | ||||||
|  |                 const link = "http://osm.org/changeset/" + last; | ||||||
|  | 
 | ||||||
|  |                 const delta = 100000; | ||||||
|  | 
 | ||||||
|  |                 Utils.changesetDate(last - delta, (prevDate) => { | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |                     const diff = (lastDate.getTime() - prevDate.getTime()) / 1000; | ||||||
|  | 
 | ||||||
|  |                     // Diff: seconds needed/delta changesets
 | ||||||
|  |                     const secsPerCS = diff / delta; | ||||||
|  | 
 | ||||||
|  |                     const stillNeeded = 1000000 - (last % 1000000); | ||||||
|  |                     const timeNeededSeconds = Math.floor(secsPerCS * stillNeeded); | ||||||
|  | 
 | ||||||
|  |                     const secNeeded = timeNeededSeconds % 60; | ||||||
|  |                     const minNeeded = Math.floor(timeNeededSeconds / 60) % 60; | ||||||
|  |                     const hourNeeded = Math.floor(timeNeededSeconds / (60 * 60)) % 24; | ||||||
|  |                     const daysNeeded = Math.floor(timeNeededSeconds / (24 * 60 * 60)); | ||||||
|  | 
 | ||||||
|  |                     const result = `Last changeset: <a href='${link}'>${link}</a><br/>We needed ${(Math.floor(diff / 60))} minutes for the last ${delta} changesets.<br/>
 | ||||||
|  | This is around ${secsPerCS} seconds/changeset.<br/> The next million (still ${stillNeeded} away) will be broken in around ${daysNeeded} days ${hourNeeded}:${minNeeded}:${secNeeded}` | ||||||
|  |                     action(result); | ||||||
|  |                 }) | ||||||
|  | 
 | ||||||
|  |             } | ||||||
|  |         ); | ||||||
|  |     } | ||||||
| } | } | ||||||
|  |  | ||||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							|  | @ -18,7 +18,13 @@ | ||||||
|   }, |   }, | ||||||
|   "icon": "./assets/layers/drinking_water/drinking_water.svg", |   "icon": "./assets/layers/drinking_water/drinking_water.svg", | ||||||
|   "iconSize": "40,40,bottom", |   "iconSize": "40,40,bottom", | ||||||
|   "overpassTags": "amenity=drinking_water", |   "overpassTags": { | ||||||
|  |     "and": [ | ||||||
|  |       "amenity=drinking_water", | ||||||
|  |       "access!=permissive", | ||||||
|  |       "access!=private" | ||||||
|  |     ] | ||||||
|  |   }, | ||||||
|   "minzoom": 13, |   "minzoom": 13, | ||||||
|   "wayHandling": 1, |   "wayHandling": 1, | ||||||
|   "presets": [ |   "presets": [ | ||||||
|  |  | ||||||
|  | @ -1,9 +1,15 @@ | ||||||
| 
 | 
 | ||||||
| .oh-table { | .oh-table { | ||||||
|     width: 15em; |  | ||||||
|     border-collapse: collapse; |     border-collapse: collapse; | ||||||
|  |     width: 100%; | ||||||
|  |     height: 100%; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | .oh-table th { | ||||||
|  |     font-weight: bold; | ||||||
|  |     font-size: medium; | ||||||
|  |     background-color: #ddd; | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| .oh-table td { | .oh-table td { | ||||||
|     vertical-align: top; |     vertical-align: top; | ||||||
|  | @ -15,6 +21,8 @@ | ||||||
| 
 | 
 | ||||||
| .oh-timecell { | .oh-timecell { | ||||||
|     background-color: white; |     background-color: white; | ||||||
|  |     border-left: 1px solid #eee; | ||||||
|  |     border-right: 1px solid #eee; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| .oh-timecell-selected { | .oh-timecell-selected { | ||||||
|  | @ -38,6 +46,12 @@ | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| .oh-left-col { | .oh-left-col { | ||||||
|     /*border-top: 1px solid #aaa;*/ |     border-top: 1px solid #aaa; | ||||||
|  |     width: 0.5em; | ||||||
|  |     font-size: large; | ||||||
|  |     margin: 0; | ||||||
|  |     padding: 0; | ||||||
|  |     padding-right: 0.2em; | ||||||
|  |     background: #ddd; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
							
								
								
									
										622
									
								
								package-lock.json
									
										
									
										generated
									
									
									
								
							
							
						
						
									
										622
									
								
								package-lock.json
									
										
									
										generated
									
									
									
								
							|  | @ -1040,6 +1040,18 @@ | ||||||
|       "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", |       "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", | ||||||
|       "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==" |       "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==" | ||||||
|     }, |     }, | ||||||
|  |     "@types/strip-bom": { | ||||||
|  |       "version": "3.0.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/@types/strip-bom/-/strip-bom-3.0.0.tgz", | ||||||
|  |       "integrity": "sha1-FKjsOVbC6B7bdSB5CuzyHCkK69I=", | ||||||
|  |       "dev": true | ||||||
|  |     }, | ||||||
|  |     "@types/strip-json-comments": { | ||||||
|  |       "version": "0.0.30", | ||||||
|  |       "resolved": "https://registry.npmjs.org/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz", | ||||||
|  |       "integrity": "sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ==", | ||||||
|  |       "dev": true | ||||||
|  |     }, | ||||||
|     "abab": { |     "abab": { | ||||||
|       "version": "2.0.3", |       "version": "2.0.3", | ||||||
|       "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.3.tgz", |       "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.3.tgz", | ||||||
|  | @ -1096,6 +1108,26 @@ | ||||||
|         "uri-js": "^4.2.2" |         "uri-js": "^4.2.2" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "align-text": { | ||||||
|  |       "version": "0.1.4", | ||||||
|  |       "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", | ||||||
|  |       "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", | ||||||
|  |       "requires": { | ||||||
|  |         "kind-of": "^3.0.2", | ||||||
|  |         "longest": "^1.0.1", | ||||||
|  |         "repeat-string": "^1.5.2" | ||||||
|  |       }, | ||||||
|  |       "dependencies": { | ||||||
|  |         "kind-of": { | ||||||
|  |           "version": "3.2.2", | ||||||
|  |           "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", | ||||||
|  |           "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", | ||||||
|  |           "requires": { | ||||||
|  |             "is-buffer": "^1.1.5" | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "alphanum-sort": { |     "alphanum-sort": { | ||||||
|       "version": "1.0.2", |       "version": "1.0.2", | ||||||
|       "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", |       "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", | ||||||
|  | @ -1202,6 +1234,12 @@ | ||||||
|       "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=", |       "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=", | ||||||
|       "dev": true |       "dev": true | ||||||
|     }, |     }, | ||||||
|  |     "array-find-index": { | ||||||
|  |       "version": "1.0.2", | ||||||
|  |       "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", | ||||||
|  |       "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", | ||||||
|  |       "dev": true | ||||||
|  |     }, | ||||||
|     "array-unique": { |     "array-unique": { | ||||||
|       "version": "0.3.2", |       "version": "0.3.2", | ||||||
|       "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", |       "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", | ||||||
|  | @ -1712,6 +1750,24 @@ | ||||||
|       "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", |       "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", | ||||||
|       "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" |       "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" | ||||||
|     }, |     }, | ||||||
|  |     "camelcase-keys": { | ||||||
|  |       "version": "2.1.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", | ||||||
|  |       "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", | ||||||
|  |       "dev": true, | ||||||
|  |       "requires": { | ||||||
|  |         "camelcase": "^2.0.0", | ||||||
|  |         "map-obj": "^1.0.0" | ||||||
|  |       }, | ||||||
|  |       "dependencies": { | ||||||
|  |         "camelcase": { | ||||||
|  |           "version": "2.1.1", | ||||||
|  |           "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", | ||||||
|  |           "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", | ||||||
|  |           "dev": true | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "caniuse-api": { |     "caniuse-api": { | ||||||
|       "version": "3.0.0", |       "version": "3.0.0", | ||||||
|       "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", |       "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", | ||||||
|  | @ -1856,6 +1912,15 @@ | ||||||
|       "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", |       "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", | ||||||
|       "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" |       "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" | ||||||
|     }, |     }, | ||||||
|  |     "center-align": { | ||||||
|  |       "version": "0.1.3", | ||||||
|  |       "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", | ||||||
|  |       "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", | ||||||
|  |       "requires": { | ||||||
|  |         "align-text": "^0.1.3", | ||||||
|  |         "lazy-cache": "^1.0.3" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "chai": { |     "chai": { | ||||||
|       "version": "4.2.0", |       "version": "4.2.0", | ||||||
|       "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", |       "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", | ||||||
|  | @ -2482,6 +2547,15 @@ | ||||||
|         "cssom": "0.3.x" |         "cssom": "0.3.x" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "currently-unhandled": { | ||||||
|  |       "version": "0.4.1", | ||||||
|  |       "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", | ||||||
|  |       "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", | ||||||
|  |       "dev": true, | ||||||
|  |       "requires": { | ||||||
|  |         "array-find-index": "^1.0.1" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "dashdash": { |     "dashdash": { | ||||||
|       "version": "1.14.1", |       "version": "1.14.1", | ||||||
|       "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", |       "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", | ||||||
|  | @ -2500,6 +2574,16 @@ | ||||||
|         "whatwg-url": "^7.0.0" |         "whatwg-url": "^7.0.0" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "dateformat": { | ||||||
|  |       "version": "1.0.12", | ||||||
|  |       "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", | ||||||
|  |       "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=", | ||||||
|  |       "dev": true, | ||||||
|  |       "requires": { | ||||||
|  |         "get-stdin": "^4.0.1", | ||||||
|  |         "meow": "^3.3.0" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "deasync": { |     "deasync": { | ||||||
|       "version": "0.1.20", |       "version": "0.1.20", | ||||||
|       "resolved": "https://registry.npmjs.org/deasync/-/deasync-0.1.20.tgz", |       "resolved": "https://registry.npmjs.org/deasync/-/deasync-0.1.20.tgz", | ||||||
|  | @ -2757,6 +2841,15 @@ | ||||||
|         "readable-stream": "^2.0.2" |         "readable-stream": "^2.0.2" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "dynamic-dedupe": { | ||||||
|  |       "version": "0.3.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/dynamic-dedupe/-/dynamic-dedupe-0.3.0.tgz", | ||||||
|  |       "integrity": "sha1-BuRMIj9eTpTXjvnbI6ZRXOL5YqE=", | ||||||
|  |       "dev": true, | ||||||
|  |       "requires": { | ||||||
|  |         "xtend": "^4.0.0" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "earcut": { |     "earcut": { | ||||||
|       "version": "2.2.2", |       "version": "2.2.2", | ||||||
|       "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.2.tgz", |       "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.2.tgz", | ||||||
|  | @ -3352,6 +3445,12 @@ | ||||||
|       "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", |       "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", | ||||||
|       "integrity": "sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw=" |       "integrity": "sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw=" | ||||||
|     }, |     }, | ||||||
|  |     "get-stdin": { | ||||||
|  |       "version": "4.0.1", | ||||||
|  |       "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", | ||||||
|  |       "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", | ||||||
|  |       "dev": true | ||||||
|  |     }, | ||||||
|     "get-value": { |     "get-value": { | ||||||
|       "version": "2.0.6", |       "version": "2.0.6", | ||||||
|       "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", |       "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", | ||||||
|  | @ -3554,6 +3653,12 @@ | ||||||
|         "minimalistic-crypto-utils": "^1.0.1" |         "minimalistic-crypto-utils": "^1.0.1" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "hosted-git-info": { | ||||||
|  |       "version": "2.8.8", | ||||||
|  |       "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", | ||||||
|  |       "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", | ||||||
|  |       "dev": true | ||||||
|  |     }, | ||||||
|     "hsl-regex": { |     "hsl-regex": { | ||||||
|       "version": "1.0.0", |       "version": "1.0.0", | ||||||
|       "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", |       "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", | ||||||
|  | @ -3670,6 +3775,11 @@ | ||||||
|       "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", |       "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", | ||||||
|       "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" |       "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" | ||||||
|     }, |     }, | ||||||
|  |     "i18next-client": { | ||||||
|  |       "version": "1.11.4", | ||||||
|  |       "resolved": "https://registry.npmjs.org/i18next-client/-/i18next-client-1.11.4.tgz", | ||||||
|  |       "integrity": "sha1-BILrG2Q+z3qEBPe1kuujKOXwmuc=" | ||||||
|  |     }, | ||||||
|     "iconv-lite": { |     "iconv-lite": { | ||||||
|       "version": "0.4.24", |       "version": "0.4.24", | ||||||
|       "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", |       "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", | ||||||
|  | @ -3715,6 +3825,15 @@ | ||||||
|         "simplicial-complex": "^1.0.0" |         "simplicial-complex": "^1.0.0" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "indent-string": { | ||||||
|  |       "version": "2.1.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", | ||||||
|  |       "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", | ||||||
|  |       "dev": true, | ||||||
|  |       "requires": { | ||||||
|  |         "repeating": "^2.0.0" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "indexes-of": { |     "indexes-of": { | ||||||
|       "version": "1.0.1", |       "version": "1.0.1", | ||||||
|       "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", |       "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", | ||||||
|  | @ -3868,6 +3987,12 @@ | ||||||
|       "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", |       "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", | ||||||
|       "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" |       "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" | ||||||
|     }, |     }, | ||||||
|  |     "is-finite": { | ||||||
|  |       "version": "1.1.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", | ||||||
|  |       "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", | ||||||
|  |       "dev": true | ||||||
|  |     }, | ||||||
|     "is-fullwidth-code-point": { |     "is-fullwidth-code-point": { | ||||||
|       "version": "2.0.0", |       "version": "2.0.0", | ||||||
|       "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", |       "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", | ||||||
|  | @ -3986,6 +4111,12 @@ | ||||||
|       "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", |       "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", | ||||||
|       "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==" |       "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==" | ||||||
|     }, |     }, | ||||||
|  |     "is-utf8": { | ||||||
|  |       "version": "0.2.1", | ||||||
|  |       "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", | ||||||
|  |       "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", | ||||||
|  |       "dev": true | ||||||
|  |     }, | ||||||
|     "is-windows": { |     "is-windows": { | ||||||
|       "version": "1.0.2", |       "version": "1.0.2", | ||||||
|       "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", |       "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", | ||||||
|  | @ -4192,6 +4323,11 @@ | ||||||
|       "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", |       "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", | ||||||
|       "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" |       "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" | ||||||
|     }, |     }, | ||||||
|  |     "lazy-cache": { | ||||||
|  |       "version": "1.0.4", | ||||||
|  |       "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", | ||||||
|  |       "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" | ||||||
|  |     }, | ||||||
|     "leaflet": { |     "leaflet": { | ||||||
|       "version": "1.7.1", |       "version": "1.7.1", | ||||||
|       "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.7.1.tgz", |       "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.7.1.tgz", | ||||||
|  | @ -4330,6 +4466,30 @@ | ||||||
|         "xml2js": "^0.4.17" |         "xml2js": "^0.4.17" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "load-json-file": { | ||||||
|  |       "version": "1.1.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", | ||||||
|  |       "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", | ||||||
|  |       "dev": true, | ||||||
|  |       "requires": { | ||||||
|  |         "graceful-fs": "^4.1.2", | ||||||
|  |         "parse-json": "^2.2.0", | ||||||
|  |         "pify": "^2.0.0", | ||||||
|  |         "pinkie-promise": "^2.0.0", | ||||||
|  |         "strip-bom": "^2.0.0" | ||||||
|  |       }, | ||||||
|  |       "dependencies": { | ||||||
|  |         "parse-json": { | ||||||
|  |           "version": "2.2.0", | ||||||
|  |           "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", | ||||||
|  |           "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", | ||||||
|  |           "dev": true, | ||||||
|  |           "requires": { | ||||||
|  |             "error-ex": "^1.2.0" | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "locate-path": { |     "locate-path": { | ||||||
|       "version": "2.0.0", |       "version": "2.0.0", | ||||||
|       "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", |       "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", | ||||||
|  | @ -4372,6 +4532,11 @@ | ||||||
|         "chalk": "^2.0.1" |         "chalk": "^2.0.1" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "longest": { | ||||||
|  |       "version": "1.0.1", | ||||||
|  |       "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", | ||||||
|  |       "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" | ||||||
|  |     }, | ||||||
|     "loose-envify": { |     "loose-envify": { | ||||||
|       "version": "1.4.0", |       "version": "1.4.0", | ||||||
|       "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", |       "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", | ||||||
|  | @ -4380,6 +4545,16 @@ | ||||||
|         "js-tokens": "^3.0.0 || ^4.0.0" |         "js-tokens": "^3.0.0 || ^4.0.0" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "loud-rejection": { | ||||||
|  |       "version": "1.6.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", | ||||||
|  |       "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", | ||||||
|  |       "dev": true, | ||||||
|  |       "requires": { | ||||||
|  |         "currently-unhandled": "^0.4.1", | ||||||
|  |         "signal-exit": "^3.0.0" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "lru-cache": { |     "lru-cache": { | ||||||
|       "version": "2.7.3", |       "version": "2.7.3", | ||||||
|       "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", |       "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", | ||||||
|  | @ -4404,6 +4579,12 @@ | ||||||
|       "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", |       "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", | ||||||
|       "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" |       "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" | ||||||
|     }, |     }, | ||||||
|  |     "map-obj": { | ||||||
|  |       "version": "1.0.1", | ||||||
|  |       "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", | ||||||
|  |       "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", | ||||||
|  |       "dev": true | ||||||
|  |     }, | ||||||
|     "map-visit": { |     "map-visit": { | ||||||
|       "version": "1.0.0", |       "version": "1.0.0", | ||||||
|       "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", |       "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", | ||||||
|  | @ -4433,6 +4614,24 @@ | ||||||
|       "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", |       "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", | ||||||
|       "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" |       "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" | ||||||
|     }, |     }, | ||||||
|  |     "meow": { | ||||||
|  |       "version": "3.7.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", | ||||||
|  |       "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", | ||||||
|  |       "dev": true, | ||||||
|  |       "requires": { | ||||||
|  |         "camelcase-keys": "^2.0.0", | ||||||
|  |         "decamelize": "^1.1.2", | ||||||
|  |         "loud-rejection": "^1.0.0", | ||||||
|  |         "map-obj": "^1.0.1", | ||||||
|  |         "minimist": "^1.1.3", | ||||||
|  |         "normalize-package-data": "^2.3.4", | ||||||
|  |         "object-assign": "^4.0.1", | ||||||
|  |         "read-pkg-up": "^1.0.1", | ||||||
|  |         "redent": "^1.0.0", | ||||||
|  |         "trim-newlines": "^1.0.0" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "merge-source-map": { |     "merge-source-map": { | ||||||
|       "version": "1.0.4", |       "version": "1.0.4", | ||||||
|       "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz", |       "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz", | ||||||
|  | @ -4754,6 +4953,18 @@ | ||||||
|       "resolved": "https://registry.npmjs.org/normalize-html-whitespace/-/normalize-html-whitespace-1.0.0.tgz", |       "resolved": "https://registry.npmjs.org/normalize-html-whitespace/-/normalize-html-whitespace-1.0.0.tgz", | ||||||
|       "integrity": "sha512-9ui7CGtOOlehQu0t/OhhlmDyc71mKVlv+4vF+me4iZLPrNtRL2xoquEdfZxasC/bdQi/Hr3iTrpyRKIG+ocabA==" |       "integrity": "sha512-9ui7CGtOOlehQu0t/OhhlmDyc71mKVlv+4vF+me4iZLPrNtRL2xoquEdfZxasC/bdQi/Hr3iTrpyRKIG+ocabA==" | ||||||
|     }, |     }, | ||||||
|  |     "normalize-package-data": { | ||||||
|  |       "version": "2.5.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", | ||||||
|  |       "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", | ||||||
|  |       "dev": true, | ||||||
|  |       "requires": { | ||||||
|  |         "hosted-git-info": "^2.1.4", | ||||||
|  |         "resolve": "^1.10.0", | ||||||
|  |         "semver": "2 || 3 || 4 || 5", | ||||||
|  |         "validate-npm-package-license": "^3.0.1" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "normalize-path": { |     "normalize-path": { | ||||||
|       "version": "3.0.0", |       "version": "3.0.0", | ||||||
|       "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", |       "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", | ||||||
|  | @ -4965,6 +5176,15 @@ | ||||||
|         "mimic-fn": "^1.0.0" |         "mimic-fn": "^1.0.0" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "opening_hours": { | ||||||
|  |       "version": "3.5.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/opening_hours/-/opening_hours-3.5.0.tgz", | ||||||
|  |       "integrity": "sha1-1mpjKceRiNyEVEOT/HMsx7gm5y4=", | ||||||
|  |       "requires": { | ||||||
|  |         "suncalc": "^1.8.0", | ||||||
|  |         "uglify-js": "^2.7.5" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "opn": { |     "opn": { | ||||||
|       "version": "5.5.0", |       "version": "5.5.0", | ||||||
|       "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", |       "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", | ||||||
|  | @ -5362,6 +5582,17 @@ | ||||||
|       "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", |       "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", | ||||||
|       "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" |       "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" | ||||||
|     }, |     }, | ||||||
|  |     "path-type": { | ||||||
|  |       "version": "1.1.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", | ||||||
|  |       "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", | ||||||
|  |       "dev": true, | ||||||
|  |       "requires": { | ||||||
|  |         "graceful-fs": "^4.1.2", | ||||||
|  |         "pify": "^2.0.0", | ||||||
|  |         "pinkie-promise": "^2.0.0" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "pathval": { |     "pathval": { | ||||||
|       "version": "1.1.0", |       "version": "1.1.0", | ||||||
|       "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", |       "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", | ||||||
|  | @ -5399,6 +5630,33 @@ | ||||||
|       "resolved": "https://registry.npmjs.org/physical-cpu-count/-/physical-cpu-count-2.0.0.tgz", |       "resolved": "https://registry.npmjs.org/physical-cpu-count/-/physical-cpu-count-2.0.0.tgz", | ||||||
|       "integrity": "sha1-GN4vl+S/epVRrXURlCtUlverpmA=" |       "integrity": "sha1-GN4vl+S/epVRrXURlCtUlverpmA=" | ||||||
|     }, |     }, | ||||||
|  |     "picomatch": { | ||||||
|  |       "version": "2.2.2", | ||||||
|  |       "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", | ||||||
|  |       "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", | ||||||
|  |       "dev": true | ||||||
|  |     }, | ||||||
|  |     "pify": { | ||||||
|  |       "version": "2.3.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", | ||||||
|  |       "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", | ||||||
|  |       "dev": true | ||||||
|  |     }, | ||||||
|  |     "pinkie": { | ||||||
|  |       "version": "2.0.4", | ||||||
|  |       "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", | ||||||
|  |       "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", | ||||||
|  |       "dev": true | ||||||
|  |     }, | ||||||
|  |     "pinkie-promise": { | ||||||
|  |       "version": "2.0.1", | ||||||
|  |       "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", | ||||||
|  |       "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", | ||||||
|  |       "dev": true, | ||||||
|  |       "requires": { | ||||||
|  |         "pinkie": "^2.0.0" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "pkg-up": { |     "pkg-up": { | ||||||
|       "version": "2.0.0", |       "version": "2.0.0", | ||||||
|       "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", |       "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", | ||||||
|  | @ -6011,6 +6269,48 @@ | ||||||
|       "integrity": "sha1-cMa6+IQux9FUD5gf0Oau1Mgb1UU=", |       "integrity": "sha1-cMa6+IQux9FUD5gf0Oau1Mgb1UU=", | ||||||
|       "dev": true |       "dev": true | ||||||
|     }, |     }, | ||||||
|  |     "read-pkg": { | ||||||
|  |       "version": "1.1.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", | ||||||
|  |       "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", | ||||||
|  |       "dev": true, | ||||||
|  |       "requires": { | ||||||
|  |         "load-json-file": "^1.0.0", | ||||||
|  |         "normalize-package-data": "^2.3.2", | ||||||
|  |         "path-type": "^1.0.0" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     "read-pkg-up": { | ||||||
|  |       "version": "1.0.1", | ||||||
|  |       "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", | ||||||
|  |       "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", | ||||||
|  |       "dev": true, | ||||||
|  |       "requires": { | ||||||
|  |         "find-up": "^1.0.0", | ||||||
|  |         "read-pkg": "^1.0.0" | ||||||
|  |       }, | ||||||
|  |       "dependencies": { | ||||||
|  |         "find-up": { | ||||||
|  |           "version": "1.1.2", | ||||||
|  |           "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", | ||||||
|  |           "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", | ||||||
|  |           "dev": true, | ||||||
|  |           "requires": { | ||||||
|  |             "path-exists": "^2.0.0", | ||||||
|  |             "pinkie-promise": "^2.0.0" | ||||||
|  |           } | ||||||
|  |         }, | ||||||
|  |         "path-exists": { | ||||||
|  |           "version": "2.1.0", | ||||||
|  |           "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", | ||||||
|  |           "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", | ||||||
|  |           "dev": true, | ||||||
|  |           "requires": { | ||||||
|  |             "pinkie-promise": "^2.0.0" | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "readable-stream": { |     "readable-stream": { | ||||||
|       "version": "2.3.7", |       "version": "2.3.7", | ||||||
|       "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", |       "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", | ||||||
|  | @ -6035,6 +6335,16 @@ | ||||||
|         "readable-stream": "^2.0.2" |         "readable-stream": "^2.0.2" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "redent": { | ||||||
|  |       "version": "1.0.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", | ||||||
|  |       "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", | ||||||
|  |       "dev": true, | ||||||
|  |       "requires": { | ||||||
|  |         "indent-string": "^2.1.0", | ||||||
|  |         "strip-indent": "^1.0.1" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "redeyed": { |     "redeyed": { | ||||||
|       "version": "0.4.4", |       "version": "0.4.4", | ||||||
|       "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-0.4.4.tgz", |       "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-0.4.4.tgz", | ||||||
|  | @ -6134,6 +6444,15 @@ | ||||||
|       "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", |       "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", | ||||||
|       "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" |       "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" | ||||||
|     }, |     }, | ||||||
|  |     "repeating": { | ||||||
|  |       "version": "2.0.1", | ||||||
|  |       "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", | ||||||
|  |       "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", | ||||||
|  |       "dev": true, | ||||||
|  |       "requires": { | ||||||
|  |         "is-finite": "^1.0.0" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "request": { |     "request": { | ||||||
|       "version": "2.88.2", |       "version": "2.88.2", | ||||||
|       "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", |       "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", | ||||||
|  | @ -6245,6 +6564,14 @@ | ||||||
|       "integrity": "sha1-1lBezbMEplldom+ktDMHMGd1lF0=", |       "integrity": "sha1-1lBezbMEplldom+ktDMHMGd1lF0=", | ||||||
|       "dev": true |       "dev": true | ||||||
|     }, |     }, | ||||||
|  |     "right-align": { | ||||||
|  |       "version": "0.1.3", | ||||||
|  |       "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", | ||||||
|  |       "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", | ||||||
|  |       "requires": { | ||||||
|  |         "align-text": "^0.1.1" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "rimraf": { |     "rimraf": { | ||||||
|       "version": "2.7.1", |       "version": "2.7.1", | ||||||
|       "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", |       "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", | ||||||
|  | @ -6668,6 +6995,38 @@ | ||||||
|       "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", |       "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", | ||||||
|       "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" |       "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" | ||||||
|     }, |     }, | ||||||
|  |     "spdx-correct": { | ||||||
|  |       "version": "3.1.1", | ||||||
|  |       "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", | ||||||
|  |       "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", | ||||||
|  |       "dev": true, | ||||||
|  |       "requires": { | ||||||
|  |         "spdx-expression-parse": "^3.0.0", | ||||||
|  |         "spdx-license-ids": "^3.0.0" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     "spdx-exceptions": { | ||||||
|  |       "version": "2.3.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", | ||||||
|  |       "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", | ||||||
|  |       "dev": true | ||||||
|  |     }, | ||||||
|  |     "spdx-expression-parse": { | ||||||
|  |       "version": "3.0.1", | ||||||
|  |       "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", | ||||||
|  |       "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", | ||||||
|  |       "dev": true, | ||||||
|  |       "requires": { | ||||||
|  |         "spdx-exceptions": "^2.1.0", | ||||||
|  |         "spdx-license-ids": "^3.0.0" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     "spdx-license-ids": { | ||||||
|  |       "version": "3.0.6", | ||||||
|  |       "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.6.tgz", | ||||||
|  |       "integrity": "sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw==", | ||||||
|  |       "dev": true | ||||||
|  |     }, | ||||||
|     "split": { |     "split": { | ||||||
|       "version": "0.2.10", |       "version": "0.2.10", | ||||||
|       "resolved": "https://registry.npmjs.org/split/-/split-0.2.10.tgz", |       "resolved": "https://registry.npmjs.org/split/-/split-0.2.10.tgz", | ||||||
|  | @ -6898,6 +7257,24 @@ | ||||||
|         "ansi-regex": "^3.0.0" |         "ansi-regex": "^3.0.0" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "strip-bom": { | ||||||
|  |       "version": "2.0.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", | ||||||
|  |       "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", | ||||||
|  |       "dev": true, | ||||||
|  |       "requires": { | ||||||
|  |         "is-utf8": "^0.2.0" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     "strip-indent": { | ||||||
|  |       "version": "1.0.1", | ||||||
|  |       "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", | ||||||
|  |       "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", | ||||||
|  |       "dev": true, | ||||||
|  |       "requires": { | ||||||
|  |         "get-stdin": "^4.0.1" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "strip-json-comments": { |     "strip-json-comments": { | ||||||
|       "version": "2.0.1", |       "version": "2.0.1", | ||||||
|       "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", |       "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", | ||||||
|  | @ -6926,6 +7303,11 @@ | ||||||
|         } |         } | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "suncalc": { | ||||||
|  |       "version": "1.8.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/suncalc/-/suncalc-1.8.0.tgz", | ||||||
|  |       "integrity": "sha1-HZiYEJVjB4dQ9JlKlZ5lTYdqy/U=" | ||||||
|  |     }, | ||||||
|     "supports-color": { |     "supports-color": { | ||||||
|       "version": "5.5.0", |       "version": "5.5.0", | ||||||
|       "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", |       "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", | ||||||
|  | @ -7100,6 +7482,18 @@ | ||||||
|         "punycode": "^2.1.0" |         "punycode": "^2.1.0" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "tree-kill": { | ||||||
|  |       "version": "1.2.2", | ||||||
|  |       "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", | ||||||
|  |       "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", | ||||||
|  |       "dev": true | ||||||
|  |     }, | ||||||
|  |     "trim-newlines": { | ||||||
|  |       "version": "1.0.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", | ||||||
|  |       "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", | ||||||
|  |       "dev": true | ||||||
|  |     }, | ||||||
|     "ts-node": { |     "ts-node": { | ||||||
|       "version": "9.0.0", |       "version": "9.0.0", | ||||||
|       "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.0.0.tgz", |       "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.0.0.tgz", | ||||||
|  | @ -7113,6 +7507,165 @@ | ||||||
|         "yn": "3.1.1" |         "yn": "3.1.1" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "ts-node-dev": { | ||||||
|  |       "version": "1.0.0-pre.63", | ||||||
|  |       "resolved": "https://registry.npmjs.org/ts-node-dev/-/ts-node-dev-1.0.0-pre.63.tgz", | ||||||
|  |       "integrity": "sha512-KURricXsXtiB4R+NCgiKgE01wyTe/GlXTdAPIhliDhF3kCn00kzyepAc1H8kbUJCmz0oYQq/GQ6CMtiWovs9qg==", | ||||||
|  |       "dev": true, | ||||||
|  |       "requires": { | ||||||
|  |         "chokidar": "^3.4.0", | ||||||
|  |         "dateformat": "~1.0.4-1.2.3", | ||||||
|  |         "dynamic-dedupe": "^0.3.0", | ||||||
|  |         "minimist": "^1.2.5", | ||||||
|  |         "mkdirp": "^1.0.4", | ||||||
|  |         "resolve": "^1.0.0", | ||||||
|  |         "rimraf": "^2.6.1", | ||||||
|  |         "source-map-support": "^0.5.12", | ||||||
|  |         "tree-kill": "^1.2.2", | ||||||
|  |         "ts-node": "^8.10.2", | ||||||
|  |         "tsconfig": "^7.0.0" | ||||||
|  |       }, | ||||||
|  |       "dependencies": { | ||||||
|  |         "anymatch": { | ||||||
|  |           "version": "3.1.1", | ||||||
|  |           "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", | ||||||
|  |           "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", | ||||||
|  |           "dev": true, | ||||||
|  |           "requires": { | ||||||
|  |             "normalize-path": "^3.0.0", | ||||||
|  |             "picomatch": "^2.0.4" | ||||||
|  |           } | ||||||
|  |         }, | ||||||
|  |         "binary-extensions": { | ||||||
|  |           "version": "2.1.0", | ||||||
|  |           "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", | ||||||
|  |           "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", | ||||||
|  |           "dev": true | ||||||
|  |         }, | ||||||
|  |         "braces": { | ||||||
|  |           "version": "3.0.2", | ||||||
|  |           "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", | ||||||
|  |           "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", | ||||||
|  |           "dev": true, | ||||||
|  |           "requires": { | ||||||
|  |             "fill-range": "^7.0.1" | ||||||
|  |           } | ||||||
|  |         }, | ||||||
|  |         "chokidar": { | ||||||
|  |           "version": "3.4.2", | ||||||
|  |           "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.2.tgz", | ||||||
|  |           "integrity": "sha512-IZHaDeBeI+sZJRX7lGcXsdzgvZqKv6sECqsbErJA4mHWfpRrD8B97kSFN4cQz6nGBGiuFia1MKR4d6c1o8Cv7A==", | ||||||
|  |           "dev": true, | ||||||
|  |           "requires": { | ||||||
|  |             "anymatch": "~3.1.1", | ||||||
|  |             "braces": "~3.0.2", | ||||||
|  |             "fsevents": "~2.1.2", | ||||||
|  |             "glob-parent": "~5.1.0", | ||||||
|  |             "is-binary-path": "~2.1.0", | ||||||
|  |             "is-glob": "~4.0.1", | ||||||
|  |             "normalize-path": "~3.0.0", | ||||||
|  |             "readdirp": "~3.4.0" | ||||||
|  |           } | ||||||
|  |         }, | ||||||
|  |         "fill-range": { | ||||||
|  |           "version": "7.0.1", | ||||||
|  |           "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", | ||||||
|  |           "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", | ||||||
|  |           "dev": true, | ||||||
|  |           "requires": { | ||||||
|  |             "to-regex-range": "^5.0.1" | ||||||
|  |           } | ||||||
|  |         }, | ||||||
|  |         "fsevents": { | ||||||
|  |           "version": "2.1.3", | ||||||
|  |           "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", | ||||||
|  |           "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", | ||||||
|  |           "dev": true, | ||||||
|  |           "optional": true | ||||||
|  |         }, | ||||||
|  |         "glob-parent": { | ||||||
|  |           "version": "5.1.1", | ||||||
|  |           "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", | ||||||
|  |           "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", | ||||||
|  |           "dev": true, | ||||||
|  |           "requires": { | ||||||
|  |             "is-glob": "^4.0.1" | ||||||
|  |           } | ||||||
|  |         }, | ||||||
|  |         "is-binary-path": { | ||||||
|  |           "version": "2.1.0", | ||||||
|  |           "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", | ||||||
|  |           "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", | ||||||
|  |           "dev": true, | ||||||
|  |           "requires": { | ||||||
|  |             "binary-extensions": "^2.0.0" | ||||||
|  |           } | ||||||
|  |         }, | ||||||
|  |         "is-number": { | ||||||
|  |           "version": "7.0.0", | ||||||
|  |           "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", | ||||||
|  |           "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", | ||||||
|  |           "dev": true | ||||||
|  |         }, | ||||||
|  |         "mkdirp": { | ||||||
|  |           "version": "1.0.4", | ||||||
|  |           "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", | ||||||
|  |           "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", | ||||||
|  |           "dev": true | ||||||
|  |         }, | ||||||
|  |         "readdirp": { | ||||||
|  |           "version": "3.4.0", | ||||||
|  |           "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz", | ||||||
|  |           "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==", | ||||||
|  |           "dev": true, | ||||||
|  |           "requires": { | ||||||
|  |             "picomatch": "^2.2.1" | ||||||
|  |           } | ||||||
|  |         }, | ||||||
|  |         "to-regex-range": { | ||||||
|  |           "version": "5.0.1", | ||||||
|  |           "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", | ||||||
|  |           "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", | ||||||
|  |           "dev": true, | ||||||
|  |           "requires": { | ||||||
|  |             "is-number": "^7.0.0" | ||||||
|  |           } | ||||||
|  |         }, | ||||||
|  |         "ts-node": { | ||||||
|  |           "version": "8.10.2", | ||||||
|  |           "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.10.2.tgz", | ||||||
|  |           "integrity": "sha512-ISJJGgkIpDdBhWVu3jufsWpK3Rzo7bdiIXJjQc0ynKxVOVcg2oIrf2H2cejminGrptVc6q6/uynAHNCuWGbpVA==", | ||||||
|  |           "dev": true, | ||||||
|  |           "requires": { | ||||||
|  |             "arg": "^4.1.0", | ||||||
|  |             "diff": "^4.0.1", | ||||||
|  |             "make-error": "^1.1.1", | ||||||
|  |             "source-map-support": "^0.5.17", | ||||||
|  |             "yn": "3.1.1" | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     "tsconfig": { | ||||||
|  |       "version": "7.0.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/tsconfig/-/tsconfig-7.0.0.tgz", | ||||||
|  |       "integrity": "sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw==", | ||||||
|  |       "dev": true, | ||||||
|  |       "requires": { | ||||||
|  |         "@types/strip-bom": "^3.0.0", | ||||||
|  |         "@types/strip-json-comments": "0.0.30", | ||||||
|  |         "strip-bom": "^3.0.0", | ||||||
|  |         "strip-json-comments": "^2.0.0" | ||||||
|  |       }, | ||||||
|  |       "dependencies": { | ||||||
|  |         "strip-bom": { | ||||||
|  |           "version": "3.0.0", | ||||||
|  |           "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", | ||||||
|  |           "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", | ||||||
|  |           "dev": true | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "tty-browserify": { |     "tty-browserify": { | ||||||
|       "version": "0.0.0", |       "version": "0.0.0", | ||||||
|       "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", |       "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", | ||||||
|  | @ -7646,6 +8199,60 @@ | ||||||
|       "integrity": "sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw==", |       "integrity": "sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw==", | ||||||
|       "dev": true |       "dev": true | ||||||
|     }, |     }, | ||||||
|  |     "uglify-js": { | ||||||
|  |       "version": "2.8.29", | ||||||
|  |       "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", | ||||||
|  |       "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", | ||||||
|  |       "requires": { | ||||||
|  |         "source-map": "~0.5.1", | ||||||
|  |         "uglify-to-browserify": "~1.0.0", | ||||||
|  |         "yargs": "~3.10.0" | ||||||
|  |       }, | ||||||
|  |       "dependencies": { | ||||||
|  |         "camelcase": { | ||||||
|  |           "version": "1.2.1", | ||||||
|  |           "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", | ||||||
|  |           "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=" | ||||||
|  |         }, | ||||||
|  |         "cliui": { | ||||||
|  |           "version": "2.1.0", | ||||||
|  |           "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", | ||||||
|  |           "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", | ||||||
|  |           "requires": { | ||||||
|  |             "center-align": "^0.1.1", | ||||||
|  |             "right-align": "^0.1.1", | ||||||
|  |             "wordwrap": "0.0.2" | ||||||
|  |           } | ||||||
|  |         }, | ||||||
|  |         "source-map": { | ||||||
|  |           "version": "0.5.7", | ||||||
|  |           "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", | ||||||
|  |           "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" | ||||||
|  |         }, | ||||||
|  |         "wordwrap": { | ||||||
|  |           "version": "0.0.2", | ||||||
|  |           "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", | ||||||
|  |           "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=" | ||||||
|  |         }, | ||||||
|  |         "yargs": { | ||||||
|  |           "version": "3.10.0", | ||||||
|  |           "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", | ||||||
|  |           "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", | ||||||
|  |           "requires": { | ||||||
|  |             "camelcase": "^1.0.2", | ||||||
|  |             "cliui": "^2.1.0", | ||||||
|  |             "decamelize": "^1.0.0", | ||||||
|  |             "window-size": "0.1.0" | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     "uglify-to-browserify": { | ||||||
|  |       "version": "1.0.2", | ||||||
|  |       "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", | ||||||
|  |       "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", | ||||||
|  |       "optional": true | ||||||
|  |     }, | ||||||
|     "uncss": { |     "uncss": { | ||||||
|       "version": "0.17.3", |       "version": "0.17.3", | ||||||
|       "resolved": "https://registry.npmjs.org/uncss/-/uncss-0.17.3.tgz", |       "resolved": "https://registry.npmjs.org/uncss/-/uncss-0.17.3.tgz", | ||||||
|  | @ -7849,6 +8456,16 @@ | ||||||
|       "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz", |       "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz", | ||||||
|       "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==" |       "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==" | ||||||
|     }, |     }, | ||||||
|  |     "validate-npm-package-license": { | ||||||
|  |       "version": "3.0.4", | ||||||
|  |       "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", | ||||||
|  |       "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", | ||||||
|  |       "dev": true, | ||||||
|  |       "requires": { | ||||||
|  |         "spdx-correct": "^3.0.0", | ||||||
|  |         "spdx-expression-parse": "^3.0.0" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     "vendors": { |     "vendors": { | ||||||
|       "version": "1.0.4", |       "version": "1.0.4", | ||||||
|       "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", |       "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", | ||||||
|  | @ -7981,6 +8598,11 @@ | ||||||
|         } |         } | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     "window-size": { | ||||||
|  |       "version": "0.1.0", | ||||||
|  |       "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", | ||||||
|  |       "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=" | ||||||
|  |     }, | ||||||
|     "word-wrap": { |     "word-wrap": { | ||||||
|       "version": "1.2.3", |       "version": "1.2.3", | ||||||
|       "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", |       "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", | ||||||
|  |  | ||||||
|  | @ -28,11 +28,13 @@ | ||||||
|     "@types/leaflet-providers": "^1.2.0", |     "@types/leaflet-providers": "^1.2.0", | ||||||
|     "codegrid-js": "git://github.com/hlaw/codegrid-js.git", |     "codegrid-js": "git://github.com/hlaw/codegrid-js.git", | ||||||
|     "email-validator": "^2.0.4", |     "email-validator": "^2.0.4", | ||||||
|  |     "i18next-client": "^1.11.4", | ||||||
|     "jquery": "latest", |     "jquery": "latest", | ||||||
|     "leaflet": "^1.7.1", |     "leaflet": "^1.7.1", | ||||||
|     "leaflet-providers": "^1.10.2", |     "leaflet-providers": "^1.10.2", | ||||||
|     "libphonenumber": "0.0.10", |     "libphonenumber": "0.0.10", | ||||||
|     "libphonenumber-js": "^1.7.55", |     "libphonenumber-js": "^1.7.55", | ||||||
|  |     "opening_hours": "^3.5.0", | ||||||
|     "osm-auth": "^1.0.2", |     "osm-auth": "^1.0.2", | ||||||
|     "osmtogeojson": "^3.0.0-beta.4", |     "osmtogeojson": "^3.0.0-beta.4", | ||||||
|     "parcel": "^1.12.4", |     "parcel": "^1.12.4", | ||||||
|  | @ -50,6 +52,7 @@ | ||||||
|     "promise-svg2img": "^0.2.0", |     "promise-svg2img": "^0.2.0", | ||||||
|     "read-file": "^0.2.0", |     "read-file": "^0.2.0", | ||||||
|     "ts-node": "^9.0.0", |     "ts-node": "^9.0.0", | ||||||
|  |     "ts-node-dev": "^1.0.0-pre.63", | ||||||
|     "typescript": "^3.9.7", |     "typescript": "^3.9.7", | ||||||
|     "write-file": "^1.0.0" |     "write-file": "^1.0.0" | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  | @ -1,10 +1,6 @@ | ||||||
| import {OsmConnection} from "./Logic/Osm/OsmConnection"; | import {OsmConnection} from "./Logic/Osm/OsmConnection"; | ||||||
| import {VerticalCombine} from "./UI/Base/VerticalCombine"; |  | ||||||
| import Combine from "./UI/Base/Combine"; | import Combine from "./UI/Base/Combine"; | ||||||
| import {SubtleButton} from "./UI/Base/SubtleButton"; |  | ||||||
| import {Button} from "./UI/Base/Button"; | import {Button} from "./UI/Base/Button"; | ||||||
| import {VariableUiElement} from "./UI/Base/VariableUIElement"; |  | ||||||
| import {All} from "./Customizations/Layouts/All"; |  | ||||||
| import {TextField} from "./UI/Input/TextField"; | import {TextField} from "./UI/Input/TextField"; | ||||||
| import {FixedUiElement} from "./UI/Base/FixedUiElement"; | import {FixedUiElement} from "./UI/Base/FixedUiElement"; | ||||||
| import {UIElement} from "./UI/UIElement"; | import {UIElement} from "./UI/UIElement"; | ||||||
|  | @ -29,9 +25,7 @@ function createTable(preferences: any) { | ||||||
|         let value: UIElement = new FixedUiElement(pref.data); |         let value: UIElement = new FixedUiElement(pref.data); | ||||||
|         if (connection.userDetails.data.csCount > 500 && |         if (connection.userDetails.data.csCount > 500 && | ||||||
|             (key.startsWith("mapcomplete") || connection.userDetails.data.csCount > 2500)) { |             (key.startsWith("mapcomplete") || connection.userDetails.data.csCount > 2500)) { | ||||||
|             value = new TextField<string>({ |             value = new TextField({ | ||||||
|                 toString: (str) => str, |  | ||||||
|                 fromString: (str) => str, |  | ||||||
|                 value: pref |                 value: pref | ||||||
|             }); |             }); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  | @ -6,6 +6,7 @@ | ||||||
|     <link href="css/slideshow.css" rel="stylesheet"/> |     <link href="css/slideshow.css" rel="stylesheet"/> | ||||||
|     <link href="css/tabbedComponent.css" rel="stylesheet"/> |     <link href="css/tabbedComponent.css" rel="stylesheet"/> | ||||||
|     <link href="css/openinghourstable.css" rel="stylesheet"/> |     <link href="css/openinghourstable.css" rel="stylesheet"/> | ||||||
|  |     <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no"> | ||||||
|     <style> |     <style> | ||||||
|         .tag-input-row { |         .tag-input-row { | ||||||
|             display: block ruby; |             display: block ruby; | ||||||
|  |  | ||||||
							
								
								
									
										28
									
								
								test.ts
									
										
									
									
									
								
							
							
						
						
									
										28
									
								
								test.ts
									
										
									
									
									
								
							|  | @ -1,13 +1,27 @@ | ||||||
| import OpeningHours, {OpeningHour} from "./UI/Input/OpeningHours"; | /* | ||||||
| import {VariableUiElement} from "./UI/Base/VariableUIElement"; | import {VariableUiElement} from "./UI/Base/VariableUIElement"; | ||||||
|  | import OpeningHoursPicker from "./UI/Input/OpeningHoursPicker"; | ||||||
| 
 | 
 | ||||||
| 
 | let oh = new OpeningHoursPicker(); | ||||||
| let oh = new OpeningHours(); | oh.SetStyle("height:100vh;display:block;").AttachTo('maindiv'); | ||||||
| oh.AttachTo('maindiv'); |  | ||||||
| 
 | 
 | ||||||
| oh.GetValue().addCallback(data => console.log(data)) | oh.GetValue().addCallback(data => console.log(data)) | ||||||
| 
 | 
 | ||||||
| new VariableUiElement(oh.GetValue().map(ohs => { | new VariableUiElement(oh.GetValue().map(oh => { | ||||||
|     return ohs.map((oh: OpeningHour) => oh.weekdayStart + " " + oh.startHour + ":" + oh.startMinutes + " --> " + |     if(oh === undefined){ | ||||||
|         oh.weekdayEnd + " " + oh.endHour + ":" + oh.endMinutes).join(",") |         return "<no value selected>"; | ||||||
|  |     } | ||||||
|  |     return oh.weekdayStart + " " + oh.startHour + ":" + oh.startMinutes + " --> " + | ||||||
|  |         oh.weekdayEnd + " " + oh.endHour + ":" + oh.endMinutes | ||||||
| })).AttachTo("extradiv"); | })).AttachTo("extradiv"); | ||||||
|  | 
 | ||||||
|  |  /*/ | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | import {Utils} from "./Utils"; | ||||||
|  | import {FixedUiElement} from "./UI/Base/FixedUiElement"; | ||||||
|  | 
 | ||||||
|  | Utils.generateStats((stats) => { | ||||||
|  |     new FixedUiElement(stats).AttachTo('maindiv') | ||||||
|  | }) | ||||||
|  | //*/
 | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue