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 ImageCarouselWithUploadConstructor from "../../UI/Image/ImageCarouselWithUpload"; | ||||
| import {ImageCarouselConstructor} from "../../UI/Image/ImageCarousel"; | ||||
| import {State} from "../../State"; | ||||
| import State from "../../State"; | ||||
| 
 | ||||
| export class FromJSON { | ||||
| 
 | ||||
|  |  | |||
|  | @ -2,7 +2,7 @@ import {LayerDefinition} from "./LayerDefinition"; | |||
| import {UIElement} from "../UI/UIElement"; | ||||
| import Translations from "../UI/i18n/Translations"; | ||||
| 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). | ||||
|  |  | |||
|  | @ -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 {RegexTag, Tag} from "../../Logic/Tags"; | ||||
| import {RegexTag} from "../../Logic/Tags"; | ||||
| import {TagRenderingOptions} from "../TagRenderingOptions"; | ||||
| import {FixedUiElement} from "../../UI/Base/FixedUiElement"; | ||||
| 
 | ||||
| 
 | ||||
| export class OsmLink extends TagRenderingOptions { | ||||
| 
 | ||||
|    | ||||
| 
 | ||||
|     static options = { | ||||
|         freeform: { | ||||
|             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 {ShareScreen} from "./UI/ShareScreen"; | ||||
| 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 {UIElement} from "./UI/UIElement"; | ||||
| import {MoreScreen} from "./UI/MoreScreen"; | ||||
| import {FilteredLayer} from "./Logic/FilteredLayer"; | ||||
| import {FeatureInfoBox} from "./UI/FeatureInfoBox"; | ||||
| import {Basemap} from "./Logic/Leaflet/Basemap"; | ||||
| import {State} from "./State"; | ||||
| import State from "./State"; | ||||
| import {WelcomeMessage} from "./UI/WelcomeMessage"; | ||||
| import {Img} from "./UI/Img"; | ||||
| import {DropDown} from "./UI/Input/DropDown"; | ||||
|  |  | |||
|  | @ -6,7 +6,7 @@ import {GeoOperations} from "./GeoOperations"; | |||
| import {UIElement} from "../UI/UIElement"; | ||||
| import {LayerDefinition} from "../Customizations/LayerDefinition"; | ||||
| 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 | ||||
|  | @ -301,7 +301,6 @@ export class FilteredLayer { | |||
|                 eventSource.addCallback(updateStyle); | ||||
| 
 | ||||
|                 function openPopup(e) { | ||||
|                     State.state.selectedElement.data?.feature.updateStyle(); | ||||
|                     State.state.selectedElement.setData({feature: feature}); | ||||
|                     updateStyle() | ||||
|                     if (feature.geometry.type === "Point") { | ||||
|  |  | |||
|  | @ -3,7 +3,7 @@ import {UIEventSource} from "./UIEventSource"; | |||
| import {FilteredLayer} from "./FilteredLayer"; | ||||
| import {Bounds} from "./Bounds"; | ||||
| import {Overpass} from "./Osm/Overpass"; | ||||
| import {State} from "../State"; | ||||
| import State from "../State"; | ||||
| import {LayerDefinition} from "../Customizations/LayerDefinition"; | ||||
| 
 | ||||
| export class LayerUpdater { | ||||
|  |  | |||
|  | @ -1,7 +1,7 @@ | |||
| import L from "leaflet"; | ||||
| import * as L from "leaflet"; | ||||
| import {UIEventSource} from "../UIEventSource"; | ||||
| import {UIElement} from "../../UI/UIElement"; | ||||
| import {State} from "../../State"; | ||||
| import State from "../../State"; | ||||
| import {Utils} from "../../Utils"; | ||||
| import {Basemap} from "./Basemap"; | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,6 +1,6 @@ | |||
| import L from "leaflet"; | ||||
| import * as L from "leaflet"; | ||||
| 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. | ||||
|  |  | |||
							
								
								
									
										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 {And, Tag, TagsFilter} from "../Tags"; | ||||
| import {State} from "../../State"; | ||||
| import State from "../../State"; | ||||
| import {Utils} from "../../Utils"; | ||||
| 
 | ||||
| export class Changes { | ||||
|  |  | |||
|  | @ -2,7 +2,7 @@ import {OsmConnection, UserDetails} from "./OsmConnection"; | |||
| import {UIEventSource} from "../UIEventSource"; | ||||
| import {ElementStorage} from "../ElementStorage"; | ||||
| import {Layout} from "../../Customizations/Layout"; | ||||
| import {State} from "../../State"; | ||||
| import State from "../../State"; | ||||
| import Locale from "../../UI/i18n/Locale"; | ||||
| 
 | ||||
| export class ChangesetHandler { | ||||
|  |  | |||
|  | @ -1,6 +1,6 @@ | |||
| import {Basemap} from "../Leaflet/Basemap"; | ||||
| import $ from "jquery" | ||||
| import {State} from "../../State"; | ||||
| import State from "../../State"; | ||||
| export class Geocoding { | ||||
| 
 | ||||
|     private static readonly host = "https://nominatim.openstreetmap.org/search?"; | ||||
|  |  | |||
|  | @ -4,7 +4,7 @@ | |||
| import {UIEventSource} from "../UIEventSource"; | ||||
| import {ImageUploadFlow} from "../../UI/ImageUploadFlow"; | ||||
| import {SlideShow} from "../../UI/SlideShow"; | ||||
| import {State} from "../../State"; | ||||
| import State from "../../State"; | ||||
| import {Tag} from "../Tags"; | ||||
| 
 | ||||
| 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 | ||||
|  */ | ||||
| 
 | ||||
| export class State { | ||||
| export default class State { | ||||
| 
 | ||||
|     // The singleton of the global state
 | ||||
|     public static state: State; | ||||
|  |  | |||
|  | @ -1,7 +1,7 @@ | |||
| import {UIElement} from "./UIElement"; | ||||
| import {DropDown} from "./Input/DropDown"; | ||||
| import Translations from "./i18n/Translations"; | ||||
| import {State} from "../State"; | ||||
| import State from "../State"; | ||||
| import {UIEventSource} from "../Logic/UIEventSource"; | ||||
| 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,13 +1,11 @@ | |||
| import {UIElement} from "../UIElement"; | ||||
| 
 | ||||
| export class VerticalCombine extends UIElement { | ||||
|     private _elements: UIElement[]; | ||||
|     private _className: string; | ||||
|     private readonly _elements: UIElement[]; | ||||
| 
 | ||||
|     constructor(elements: UIElement[], className: string = undefined) { | ||||
|     constructor(elements: UIElement[]) { | ||||
|         super(undefined); | ||||
|         this._elements = elements; | ||||
|         this._className = className; | ||||
|     } | ||||
| 
 | ||||
|     InnerRender(): string { | ||||
|  | @ -17,12 +15,6 @@ export class VerticalCombine extends UIElement { | |||
|                 html += "<div>" + element.Render() + "</div>"; | ||||
|             } | ||||
|         } | ||||
|         if(html === ""){ | ||||
|             return ""; | ||||
|         } | ||||
|         if (this._className === undefined) { | ||||
|         return html; | ||||
|     } | ||||
|         return "<div class='"+this._className+"'>" + html + "</div>"; | ||||
|     } | ||||
| } | ||||
|  | @ -1,6 +1,6 @@ | |||
| import {UIElement} from "./UIElement"; | ||||
| import Translations from "./i18n/Translations"; | ||||
| import {State} from "../State"; | ||||
| import State from "../State"; | ||||
| 
 | ||||
| export class CenterMessageBox extends UIElement { | ||||
| 
 | ||||
|  |  | |||
|  | @ -11,7 +11,7 @@ import AllLayersPanel from "./AllLayersPanel"; | |||
| import SharePanel from "./SharePanel"; | ||||
| import {LayoutConfigJson} from "../../Customizations/JSON/LayoutConfigJson"; | ||||
| import {SubtleButton} from "../Base/SubtleButton"; | ||||
| import {State} from "../../State"; | ||||
| import State from "../../State"; | ||||
| import {FixedUiElement} from "../Base/FixedUiElement"; | ||||
| import SavePanel from "./SavePanel"; | ||||
| import {LocalStorageSource} from "../../Logic/Web/LocalStorageSource"; | ||||
|  |  | |||
|  | @ -44,7 +44,9 @@ export class GenerateEmpty { | |||
|             widenFactor: 0.05, | ||||
|             socialImage: "", | ||||
|              | ||||
|             layers: [] | ||||
|             layers: [ | ||||
|                 GenerateEmpty.createEmptyLayer() | ||||
|             ] | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|  |  | |||
|  | @ -8,8 +8,8 @@ import Combine from "../Base/Combine"; | |||
| import {TextField} from "../Input/TextField"; | ||||
| import {InputElement} from "../Input/InputElement"; | ||||
| import MultiLingualTextFields from "../Input/MultiLingualTextFields"; | ||||
| import {CheckBox} from "../Input/CheckBox"; | ||||
| import {AndOrTagInput} from "../Input/AndOrTagInput"; | ||||
| import CheckBox from "../Input/CheckBox"; | ||||
| import AndOrTagInput from "../Input/AndOrTagInput"; | ||||
| import TagRenderingPanel from "./TagRenderingPanel"; | ||||
| import {DropDown} from "../Input/DropDown"; | ||||
| import {TagRenderingConfigJson} from "../../Customizations/JSON/TagRenderingConfigJson"; | ||||
|  | @ -17,7 +17,7 @@ import {MultiInput} from "../Input/MultiInput"; | |||
| import {LayerConfigJson} from "../../Customizations/JSON/LayerConfigJson"; | ||||
| import PresetInputPanel from "./PresetInputPanel"; | ||||
| import {UserDetails} from "../../Logic/Osm/OsmConnection"; | ||||
| import {State} from "../../State"; | ||||
| import State from "../../State"; | ||||
| import {FixedUiElement} from "../Base/FixedUiElement"; | ||||
| import ValidatedTextField from "../Input/ValidatedTextField"; | ||||
| 
 | ||||
|  |  | |||
|  | @ -4,7 +4,7 @@ import {UIEventSource} from "../../Logic/UIEventSource"; | |||
| import {UIElement} from "../UIElement"; | ||||
| import SettingsTable from "./SettingsTable"; | ||||
| import SingleSetting from "./SingleSetting"; | ||||
| import {AndOrTagInput} from "../Input/AndOrTagInput"; | ||||
| import AndOrTagInput from "../Input/AndOrTagInput"; | ||||
| import MultiLingualTextFields from "../Input/MultiLingualTextFields"; | ||||
| import {DropDown} from "../Input/DropDown"; | ||||
| 
 | ||||
|  |  | |||
|  | @ -6,14 +6,14 @@ import SettingsTable from "./SettingsTable"; | |||
| import {TextField} from "../Input/TextField"; | ||||
| import Combine from "../Base/Combine"; | ||||
| import MultiLingualTextFields from "../Input/MultiLingualTextFields"; | ||||
| import {AndOrTagInput} from "../Input/AndOrTagInput"; | ||||
| import AndOrTagInput from "../Input/AndOrTagInput"; | ||||
| import {MultiTagInput} from "../Input/MultiTagInput"; | ||||
| import {MultiInput} from "../Input/MultiInput"; | ||||
| import MappingInput from "./MappingInput"; | ||||
| import {AndOrTagConfigJson} from "../../Customizations/JSON/TagConfigJson"; | ||||
| import {TagRenderingConfigJson} from "../../Customizations/JSON/TagRenderingConfigJson"; | ||||
| import {UserDetails} from "../../Logic/Osm/OsmConnection"; | ||||
| import {State} from "../../State"; | ||||
| import State from "../../State"; | ||||
| import {VariableUiElement} from "../Base/VariableUIElement"; | ||||
| import {FromJSON} from "../../Customizations/JSON/FromJSON"; | ||||
| import ValidatedTextField from "../Input/ValidatedTextField"; | ||||
|  | @ -50,7 +50,8 @@ export default class TagRenderingPanel extends InputElement<TagRenderingConfigJs | |||
|             (this.options.disableQuestions ?? false) || | ||||
|             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; | ||||
| 
 | ||||
|         const value = new UIEventSource<TagRenderingConfigJson>({}); | ||||
|  |  | |||
|  | @ -7,7 +7,7 @@ import {TagDependantUIElement, TagDependantUIElementConstructor} from "../Custom | |||
| import Translations from "./i18n/Translations"; | ||||
| import {Changes} from "../Logic/Osm/Changes"; | ||||
| import {FixedUiElement} from "./Base/FixedUiElement"; | ||||
| import {State} from "../State"; | ||||
| import State from "../State"; | ||||
| import {TagRenderingOptions} from "../Customizations/TagRenderingOptions"; | ||||
| import {UIEventSource} from "../Logic/UIEventSource"; | ||||
| import Combine from "./Base/Combine"; | ||||
|  | @ -133,7 +133,8 @@ export class FeatureInfoBox extends UIElement { | |||
|         } | ||||
| 
 | ||||
|         const infoboxcontents = new Combine( | ||||
|             [new VerticalCombine(info, "infobox-information "), questionElement ?? ""]); | ||||
|             [new VerticalCombine(info).SetClass("infobox-information") | ||||
|                 , questionElement ?? ""]); | ||||
| 
 | ||||
|         return new Combine([ | ||||
|             this._title, | ||||
|  |  | |||
|  | @ -1,6 +1,6 @@ | |||
| import {UIElement} from "./UIElement"; | ||||
| import Translations from "./i18n/Translations"; | ||||
| import {State} from "../State"; | ||||
| import State from "../State"; | ||||
| import Combine from "./Base/Combine"; | ||||
| 
 | ||||
| /** | ||||
|  |  | |||
|  | @ -1,9 +1,9 @@ | |||
| import {UIElement} from "../UIElement"; | ||||
| import {UIEventSource} from "../../Logic/UIEventSource"; | ||||
| import Translations from "../i18n/Translations"; | ||||
| import {CheckBox} from "../Input/CheckBox"; | ||||
| import CheckBox from "../Input/CheckBox"; | ||||
| import Combine from "../Base/Combine"; | ||||
| import {State} from "../../State"; | ||||
| import State from "../../State"; | ||||
| import {Tag} from "../../Logic/Tags"; | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -6,7 +6,7 @@ import { | |||
| import {ImageCarousel} from "./ImageCarousel"; | ||||
| import {ImageUploadFlow} from "../ImageUploadFlow"; | ||||
| import {OsmImageUploadHandler} from "../../Logic/Osm/OsmImageUploadHandler"; | ||||
| import {State} from "../../State"; | ||||
| import State from "../../State"; | ||||
| import Translation from "../i18n/Translation"; | ||||
| 
 | ||||
| export default class ImageCarouselWithUploadConstructor implements TagDependantUIElementConstructor{ | ||||
|  |  | |||
|  | @ -3,7 +3,7 @@ import $ from "jquery" | |||
| import {DropDown} from "./Input/DropDown"; | ||||
| import Translations from "./i18n/Translations"; | ||||
| import Combine from "./Base/Combine"; | ||||
| import {State} from "../State"; | ||||
| import State from "../State"; | ||||
| import {UIEventSource} from "../Logic/UIEventSource"; | ||||
| import {Imgur} from "../Logic/Web/Imgur"; | ||||
| import {FixedUiElement} from "./Base/FixedUiElement"; | ||||
|  |  | |||
|  | @ -3,7 +3,7 @@ import {UIEventSource} from "../../Logic/UIEventSource"; | |||
| import {UIElement} from "../UIElement"; | ||||
| import Combine from "../Base/Combine"; | ||||
| import {SubtleButton} from "../Base/SubtleButton"; | ||||
| import {CheckBox} from "./CheckBox"; | ||||
| import CheckBox from "./CheckBox"; | ||||
| import {AndOrTagConfigJson} from "../../Customizations/JSON/TagConfigJson"; | ||||
| 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 _subAndOrs: AndOrTagInput[] = []; | ||||
|  |  | |||
|  | @ -2,7 +2,7 @@ import {UIElement} from "../UIElement"; | |||
| import Translations from "../../UI/i18n/Translations"; | ||||
| import {UIEventSource} from "../../Logic/UIEventSource"; | ||||
| 
 | ||||
| export class CheckBox extends UIElement{ | ||||
| export default class CheckBox extends UIElement{ | ||||
|     public readonly isEnabled: UIEventSource<boolean>; | ||||
|     private readonly _showEnabled:  UIElement; | ||||
|     private readonly _showDisabled: UIElement; | ||||
|  |  | |||
|  | @ -6,7 +6,7 @@ import {UIElement} from "../UIElement"; | |||
| /** | ||||
|  * Supports multi-input | ||||
|  */ | ||||
| export class CheckBoxes extends InputElement<number[]> { | ||||
| export default class CheckBoxes extends InputElement<number[]> { | ||||
|     IsSelected: UIEventSource<boolean> = new UIEventSource<boolean>(false); | ||||
| 
 | ||||
|     private readonly value: UIEventSource<number[]>; | ||||
|  |  | |||
|  | @ -1,27 +1,24 @@ | |||
| import {InputElement} from "./InputElement"; | ||||
| import {UIEventSource} from "../../Logic/UIEventSource"; | ||||
| import {Utils} from "../../Utils"; | ||||
| /** | ||||
|  * This is the base-table which is selectable by hovering over it. | ||||
|  * 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 { | ||||
|     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[]> { | ||||
| export default class OpeningHoursPicker extends InputElement<OpeningHour> { | ||||
|     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(); | ||||
|         this.source = source ?? new UIEventSource<OpeningHour[]>([]); | ||||
|         this.source = source ?? new UIEventSource<OpeningHour>(undefined); | ||||
|         this.IsSelected = new UIEventSource<boolean>(false); | ||||
|         this.SetStyle("width:100%;height:100%;display:block;") | ||||
|     } | ||||
| 
 | ||||
|     InnerRender(): string { | ||||
|  | @ -31,24 +28,17 @@ export default class OpeningHours extends InputElement<OpeningHour[]> { | |||
|             if (hs.length == 1) { | ||||
|                 hs = "0" + hs; | ||||
|             } | ||||
|             for (let m = 0; m < 60; m += 60) { | ||||
|                 let min = "" + m; | ||||
|                 const style = "width:0.5em;font-size:small;"; | ||||
|                 if (m === 0) { | ||||
|                     min = "00"; | ||||
|                 } | ||||
|                 rows += `<tr><td class="oh-left-col" rowspan="4" style="${style}">${hs}:${min}</td>` + | ||||
|             rows += `<tr><td rowspan="2" class="oh-left-col oh-timecell-full">${hs}:00</td>` + | ||||
|                 Utils.Times('<td class="oh-timecell oh-timecell-full"></td>', 7) + | ||||
|                 '</tr><tr>' + | ||||
|                     Utils.Times('<td class="oh-timecell"></td>', 7) + | ||||
|                     '</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><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>`; | ||||
|     } | ||||
| 
 | ||||
|  | @ -68,14 +58,9 @@ export default class OpeningHours extends InputElement<OpeningHour[]> { | |||
|         } | ||||
| 
 | ||||
|         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) { | ||||
|             mouseIsDown = true; | ||||
|             selectionStart = [i, j]; | ||||
|  | @ -92,9 +77,6 @@ export default class OpeningHours extends InputElement<OpeningHour[]> { | |||
|             const dEnd = Math.max(selectionStart[1], selectionEnd[1]); | ||||
|             const timeStart = Math.min(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 = { | ||||
|                 weekdayStart: dStart, | ||||
|                 weekdayEnd: dEnd, | ||||
|  | @ -103,8 +85,7 @@ export default class OpeningHours extends InputElement<OpeningHour[]> { | |||
|                 endHour: h(timeEnd + 1), | ||||
|                 endMinutes: m(timeEnd + 1) | ||||
|             } | ||||
|             self.source.data.push(oh); | ||||
|             self.source.ping(); | ||||
|             self.source.setData(oh); | ||||
|         } | ||||
| 
 | ||||
|         table.onmouseup = () => { | ||||
|  | @ -134,7 +115,7 @@ export default class OpeningHours extends InputElement<OpeningHour[]> { | |||
|                 for (let j = 0; j < row.cells.length; j++) { | ||||
|                     let cell = row.cells[j] | ||||
|                     let offset = 0; | ||||
|                     if (i % 4 == 1) { | ||||
|                     if (i % 2 == 1) { | ||||
|                         if (j == 0) { | ||||
|                             continue; | ||||
|                         } | ||||
|  | @ -157,7 +138,7 @@ export default class OpeningHours extends InputElement<OpeningHour[]> { | |||
|             for (let j = 0; j < row.cells.length; j++) { | ||||
|                 let cell = row.cells[j] | ||||
|                 let offset = 0; | ||||
|                 if (i % 4 == 1) { | ||||
|                 if (i % 2 == 1) { | ||||
|                     if (j == 0) { | ||||
|                         continue; | ||||
|                     } | ||||
|  | @ -168,10 +149,12 @@ export default class OpeningHours extends InputElement<OpeningHour[]> { | |||
|                 cell.onmousedown = (ev) => { | ||||
|                     ev.preventDefault(); | ||||
|                     startSelection(i, j + offset, cell) | ||||
|                     selectAllBetween(i, j + offset); | ||||
|                 } | ||||
|                 cell.ontouchstart = (ev) => { | ||||
|                     ev.preventDefault(); | ||||
|                     startSelection(i, j + offset, cell) | ||||
|                     startSelection(i, j + offset, cell); | ||||
|                     selectAllBetween(i, j + offset); | ||||
|                 } | ||||
|                 cell.onmouseenter = () => { | ||||
|                     if (mouseIsDown) { | ||||
|  | @ -180,16 +163,39 @@ export default class OpeningHours extends InputElement<OpeningHour[]> { | |||
|                     } | ||||
|                 } | ||||
| 
 | ||||
|                 cell.ontouchmove = (ev) => { | ||||
| 
 | ||||
|                 cell.ontouchmove = (ev: TouchEvent) => { | ||||
| 
 | ||||
|                     ev.preventDefault(); | ||||
|                     selectionEnd = [i, j + offset]; | ||||
|                     selectAllBetween(i, j + offset) | ||||
|                     for (const k in ev.targetTouches) { | ||||
|                         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) => { | ||||
|                     ev.preventDefault(); | ||||
|                     selectionEnd = [i, j + offset]; | ||||
|                     selectAllBetween(i, j + offset) | ||||
|                     for (const k in ev.targetTouches) { | ||||
|                         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; | ||||
|     } | ||||
| 
 | ||||
|     GetValue(): UIEventSource<OpeningHour[]> { | ||||
|     GetValue(): UIEventSource<OpeningHour> { | ||||
|         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 expl = ValidatedTextField.tpList; | ||||
|         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) | ||||
|     } | ||||
|  |  | |||
|  | @ -1,7 +1,7 @@ | |||
| import {UIElement} from "./UIElement"; | ||||
| import {CheckBox} from "./Input/CheckBox"; | ||||
| import CheckBox from "./Input/CheckBox"; | ||||
| import Combine from "./Base/Combine"; | ||||
| import {State} from "../State"; | ||||
| import State from "../State"; | ||||
| import Translations from "./i18n/Translations"; | ||||
| import {FixedUiElement} from "./Base/FixedUiElement"; | ||||
| import {VariableUiElement} from "./Base/VariableUIElement"; | ||||
|  |  | |||
|  | @ -4,7 +4,7 @@ import Translations from "./i18n/Translations"; | |||
| import {AllKnownLayouts} from "../Customizations/AllKnownLayouts"; | ||||
| import Combine from "./Base/Combine"; | ||||
| import {SubtleButton} from "./Base/SubtleButton"; | ||||
| import {State} from "../State"; | ||||
| import State from "../State"; | ||||
| import {VariableUiElement} from "./Base/VariableUIElement"; | ||||
| import {PersonalLayout} from "../Logic/PersonalLayout"; | ||||
| 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 {Geocoding} from "../Logic/Osm/Geocoding"; | ||||
| import Translations from "./i18n/Translations"; | ||||
| import {State} from "../State"; | ||||
| import State from "../State"; | ||||
| 
 | ||||
| import {UIEventSource} from "../Logic/UIEventSource"; | ||||
| 
 | ||||
|  |  | |||
|  | @ -3,10 +3,10 @@ import Translations from "./i18n/Translations"; | |||
| import {FixedUiElement} from "./Base/FixedUiElement"; | ||||
| import Combine from "./Base/Combine"; | ||||
| import {VariableUiElement} from "./Base/VariableUIElement"; | ||||
| import {CheckBox} from "./Input/CheckBox"; | ||||
| import CheckBox from "./Input/CheckBox"; | ||||
| import {VerticalCombine} from "./Base/VerticalCombine"; | ||||
| import {Img} from "./Img"; | ||||
| import {State} from "../State"; | ||||
| import State from "../State"; | ||||
| import {Basemap} from "../Logic/Leaflet/Basemap"; | ||||
| import {FilteredLayer} from "../Logic/FilteredLayer"; | ||||
| import {Utils} from "../Utils"; | ||||
|  |  | |||
|  | @ -5,7 +5,7 @@ import Translations from "./i18n/Translations"; | |||
| import Combine from "./Base/Combine"; | ||||
| import {SubtleButton} from "./Base/SubtleButton"; | ||||
| import Locale from "./i18n/Locale"; | ||||
| import {State} from "../State"; | ||||
| import State from "../State"; | ||||
| 
 | ||||
| import {UIEventSource} from "../Logic/UIEventSource"; | ||||
| import {Utils} from "../Utils"; | ||||
|  |  | |||
|  | @ -2,14 +2,12 @@ import {UIEventSource} from "../Logic/UIEventSource"; | |||
| import {And, Tag, TagsFilter, TagUtils} from "../Logic/Tags"; | ||||
| import Translations from "../UI/i18n/Translations"; | ||||
| import Locale from "../UI/i18n/Locale"; | ||||
| import {State} from "../State"; | ||||
| import Translation from "../UI/i18n/Translation"; | ||||
| import Combine from "../UI/Base/Combine"; | ||||
| import {TagDependantUIElement} from "../Customizations/UIElementConstructor"; | ||||
| import {UIElement} from "./UIElement"; | ||||
| import {VariableUiElement} from "./Base/VariableUIElement"; | ||||
| import InputElementMap from "./Input/InputElementMap"; | ||||
| import {CheckBoxes} from "./Input/Checkboxes"; | ||||
| import {InputElement} from "./Input/InputElement"; | ||||
| import {SaveButton} from "./SaveButton"; | ||||
| import {RadioButton} from "./Input/RadioButton"; | ||||
|  | @ -17,6 +15,8 @@ import {FixedInputElement} from "./Input/FixedInputElement"; | |||
| import {TagRenderingOptions} from "../Customizations/TagRenderingOptions"; | ||||
| import {FixedUiElement} from "./Base/FixedUiElement"; | ||||
| import ValidatedTextField from "./Input/ValidatedTextField"; | ||||
| import CheckBoxes from "./Input/Checkboxes"; | ||||
| import State from "../State"; | ||||
| 
 | ||||
| export class TagRendering extends UIElement implements TagDependantUIElement { | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,10 +1,10 @@ | |||
| import {UIElement} from "./UIElement"; | ||||
| import L from "leaflet"; | ||||
| import * as L from "leaflet"; | ||||
| import {FixedUiElement} from "./Base/FixedUiElement"; | ||||
| import {VariableUiElement} from "./Base/VariableUIElement"; | ||||
| import Translations from "./i18n/Translations"; | ||||
| import {UserDetails} from "../Logic/Osm/OsmConnection"; | ||||
| import {State} from "../State"; | ||||
| import State from "../State"; | ||||
| import {UIEventSource} from "../Logic/UIEventSource"; | ||||
| import {InitUiElements} from "../InitUiElements"; | ||||
| import Combine from "./Base/Combine"; | ||||
|  |  | |||
|  | @ -1,6 +1,6 @@ | |||
| import {UIElement} from "./UIElement"; | ||||
| import Locale from "../UI/i18n/Locale"; | ||||
| import {State} from "../State"; | ||||
| import State from "../State"; | ||||
| import Translations from "./i18n/Translations"; | ||||
| import Combine from "./Base/Combine"; | ||||
| import {InitUiElements} from "../InitUiElements"; | ||||
|  |  | |||
							
								
								
									
										71
									
								
								Utils.ts
									
										
									
									
									
								
							
							
						
						
									
										71
									
								
								Utils.ts
									
										
									
									
									
								
							|  | @ -1,4 +1,6 @@ | |||
| import {UIElement} from "./UI/UIElement"; | ||||
| import * as $ from "jquery" | ||||
| import {FixedUiElement} from "./UI/Base/FixedUiElement"; | ||||
| 
 | ||||
| export class Utils { | ||||
| 
 | ||||
|  | @ -123,4 +125,73 @@ export class Utils { | |||
|         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", | ||||
|   "iconSize": "40,40,bottom", | ||||
|   "overpassTags": "amenity=drinking_water", | ||||
|   "overpassTags": { | ||||
|     "and": [ | ||||
|       "amenity=drinking_water", | ||||
|       "access!=permissive", | ||||
|       "access!=private" | ||||
|     ] | ||||
|   }, | ||||
|   "minzoom": 13, | ||||
|   "wayHandling": 1, | ||||
|   "presets": [ | ||||
|  |  | |||
|  | @ -1,9 +1,15 @@ | |||
| 
 | ||||
| .oh-table { | ||||
|     width: 15em; | ||||
|     border-collapse: collapse; | ||||
|     width: 100%; | ||||
|     height: 100%; | ||||
| } | ||||
| 
 | ||||
| .oh-table th { | ||||
|     font-weight: bold; | ||||
|     font-size: medium; | ||||
|     background-color: #ddd; | ||||
| } | ||||
| 
 | ||||
| .oh-table td { | ||||
|     vertical-align: top; | ||||
|  | @ -15,6 +21,8 @@ | |||
| 
 | ||||
| .oh-timecell { | ||||
|     background-color: white; | ||||
|     border-left: 1px solid #eee; | ||||
|     border-right: 1px solid #eee; | ||||
| } | ||||
| 
 | ||||
| .oh-timecell-selected { | ||||
|  | @ -38,6 +46,12 @@ | |||
| } | ||||
| 
 | ||||
| .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", | ||||
|       "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": { | ||||
|       "version": "2.0.3", | ||||
|       "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.3.tgz", | ||||
|  | @ -1096,6 +1108,26 @@ | |||
|         "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": { | ||||
|       "version": "1.0.2", | ||||
|       "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", | ||||
|  | @ -1202,6 +1234,12 @@ | |||
|       "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=", | ||||
|       "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": { | ||||
|       "version": "0.3.2", | ||||
|       "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", | ||||
|       "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": { | ||||
|       "version": "3.0.0", | ||||
|       "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", | ||||
|       "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": { | ||||
|       "version": "4.2.0", | ||||
|       "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", | ||||
|  | @ -2482,6 +2547,15 @@ | |||
|         "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": { | ||||
|       "version": "1.14.1", | ||||
|       "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", | ||||
|  | @ -2500,6 +2574,16 @@ | |||
|         "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": { | ||||
|       "version": "0.1.20", | ||||
|       "resolved": "https://registry.npmjs.org/deasync/-/deasync-0.1.20.tgz", | ||||
|  | @ -2757,6 +2841,15 @@ | |||
|         "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": { | ||||
|       "version": "2.2.2", | ||||
|       "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", | ||||
|       "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": { | ||||
|       "version": "2.0.6", | ||||
|       "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", | ||||
|  | @ -3554,6 +3653,12 @@ | |||
|         "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": { | ||||
|       "version": "1.0.0", | ||||
|       "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", | ||||
|       "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": { | ||||
|       "version": "0.4.24", | ||||
|       "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", | ||||
|  | @ -3715,6 +3825,15 @@ | |||
|         "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": { | ||||
|       "version": "1.0.1", | ||||
|       "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", | ||||
|       "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": { | ||||
|       "version": "2.0.0", | ||||
|       "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", | ||||
|       "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": { | ||||
|       "version": "1.0.2", | ||||
|       "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", | ||||
|       "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": { | ||||
|       "version": "1.7.1", | ||||
|       "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.7.1.tgz", | ||||
|  | @ -4330,6 +4466,30 @@ | |||
|         "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": { | ||||
|       "version": "2.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", | ||||
|  | @ -4372,6 +4532,11 @@ | |||
|         "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": { | ||||
|       "version": "1.4.0", | ||||
|       "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" | ||||
|       } | ||||
|     }, | ||||
|     "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": { | ||||
|       "version": "2.7.3", | ||||
|       "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", | ||||
|       "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": { | ||||
|       "version": "1.0.0", | ||||
|       "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", | ||||
|       "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": { | ||||
|       "version": "1.0.4", | ||||
|       "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", | ||||
|       "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": { | ||||
|       "version": "3.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", | ||||
|  | @ -4965,6 +5176,15 @@ | |||
|         "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": { | ||||
|       "version": "5.5.0", | ||||
|       "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", | ||||
|       "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": { | ||||
|       "version": "1.1.0", | ||||
|       "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", | ||||
|       "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": { | ||||
|       "version": "2.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", | ||||
|  | @ -6011,6 +6269,48 @@ | |||
|       "integrity": "sha1-cMa6+IQux9FUD5gf0Oau1Mgb1UU=", | ||||
|       "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": { | ||||
|       "version": "2.3.7", | ||||
|       "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", | ||||
|  | @ -6035,6 +6335,16 @@ | |||
|         "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": { | ||||
|       "version": "0.4.4", | ||||
|       "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", | ||||
|       "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": { | ||||
|       "version": "2.88.2", | ||||
|       "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", | ||||
|  | @ -6245,6 +6564,14 @@ | |||
|       "integrity": "sha1-1lBezbMEplldom+ktDMHMGd1lF0=", | ||||
|       "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": { | ||||
|       "version": "2.7.1", | ||||
|       "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", | ||||
|       "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": { | ||||
|       "version": "0.2.10", | ||||
|       "resolved": "https://registry.npmjs.org/split/-/split-0.2.10.tgz", | ||||
|  | @ -6898,6 +7257,24 @@ | |||
|         "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": { | ||||
|       "version": "2.0.1", | ||||
|       "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": { | ||||
|       "version": "5.5.0", | ||||
|       "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", | ||||
|  | @ -7100,6 +7482,18 @@ | |||
|         "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": { | ||||
|       "version": "9.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.0.0.tgz", | ||||
|  | @ -7113,6 +7507,165 @@ | |||
|         "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": { | ||||
|       "version": "0.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", | ||||
|  | @ -7646,6 +8199,60 @@ | |||
|       "integrity": "sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw==", | ||||
|       "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": { | ||||
|       "version": "0.17.3", | ||||
|       "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", | ||||
|       "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": { | ||||
|       "version": "1.0.4", | ||||
|       "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": { | ||||
|       "version": "1.2.3", | ||||
|       "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", | ||||
|  |  | |||
|  | @ -28,11 +28,13 @@ | |||
|     "@types/leaflet-providers": "^1.2.0", | ||||
|     "codegrid-js": "git://github.com/hlaw/codegrid-js.git", | ||||
|     "email-validator": "^2.0.4", | ||||
|     "i18next-client": "^1.11.4", | ||||
|     "jquery": "latest", | ||||
|     "leaflet": "^1.7.1", | ||||
|     "leaflet-providers": "^1.10.2", | ||||
|     "libphonenumber": "0.0.10", | ||||
|     "libphonenumber-js": "^1.7.55", | ||||
|     "opening_hours": "^3.5.0", | ||||
|     "osm-auth": "^1.0.2", | ||||
|     "osmtogeojson": "^3.0.0-beta.4", | ||||
|     "parcel": "^1.12.4", | ||||
|  | @ -50,6 +52,7 @@ | |||
|     "promise-svg2img": "^0.2.0", | ||||
|     "read-file": "^0.2.0", | ||||
|     "ts-node": "^9.0.0", | ||||
|     "ts-node-dev": "^1.0.0-pre.63", | ||||
|     "typescript": "^3.9.7", | ||||
|     "write-file": "^1.0.0" | ||||
|   } | ||||
|  |  | |||
|  | @ -1,10 +1,6 @@ | |||
| import {OsmConnection} from "./Logic/Osm/OsmConnection"; | ||||
| import {VerticalCombine} from "./UI/Base/VerticalCombine"; | ||||
| import Combine from "./UI/Base/Combine"; | ||||
| import {SubtleButton} from "./UI/Base/SubtleButton"; | ||||
| 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 {FixedUiElement} from "./UI/Base/FixedUiElement"; | ||||
| import {UIElement} from "./UI/UIElement"; | ||||
|  | @ -29,9 +25,7 @@ function createTable(preferences: any) { | |||
|         let value: UIElement = new FixedUiElement(pref.data); | ||||
|         if (connection.userDetails.data.csCount > 500 && | ||||
|             (key.startsWith("mapcomplete") || connection.userDetails.data.csCount > 2500)) { | ||||
|             value = new TextField<string>({ | ||||
|                 toString: (str) => str, | ||||
|                 fromString: (str) => str, | ||||
|             value = new TextField({ | ||||
|                 value: pref | ||||
|             }); | ||||
|         } | ||||
|  |  | |||
|  | @ -6,6 +6,7 @@ | |||
|     <link href="css/slideshow.css" rel="stylesheet"/> | ||||
|     <link href="css/tabbedComponent.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> | ||||
|         .tag-input-row { | ||||
|             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 OpeningHoursPicker from "./UI/Input/OpeningHoursPicker"; | ||||
| 
 | ||||
| 
 | ||||
| let oh = new OpeningHours(); | ||||
| oh.AttachTo('maindiv'); | ||||
| let oh = new OpeningHoursPicker(); | ||||
| oh.SetStyle("height:100vh;display:block;").AttachTo('maindiv'); | ||||
| 
 | ||||
| oh.GetValue().addCallback(data => console.log(data)) | ||||
| 
 | ||||
| new VariableUiElement(oh.GetValue().map(ohs => { | ||||
|     return ohs.map((oh: OpeningHour) => oh.weekdayStart + " " + oh.startHour + ":" + oh.startMinutes + " --> " + | ||||
|         oh.weekdayEnd + " " + oh.endHour + ":" + oh.endMinutes).join(",") | ||||
| new VariableUiElement(oh.GetValue().map(oh => { | ||||
|     if(oh === undefined){ | ||||
|         return "<no value selected>"; | ||||
|     } | ||||
|     return oh.weekdayStart + " " + oh.startHour + ":" + oh.startMinutes + " --> " + | ||||
|         oh.weekdayEnd + " " + oh.endHour + ":" + oh.endMinutes | ||||
| })).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