forked from MapComplete/MapComplete
		
	Small fixes to OH visualization
This commit is contained in:
		
							parent
							
								
									4db1997ed6
								
							
						
					
					
						commit
						c9478c100a
					
				
					 5 changed files with 55 additions and 13 deletions
				
			
		|  | @ -27,7 +27,11 @@ export default class OpeningHoursVisualization extends UIElement { | ||||||
| 
 | 
 | ||||||
|         const values = [[], [], [], [], [], [], []]; |         const values = [[], [], [], [], [], [], []]; | ||||||
| 
 | 
 | ||||||
|         const iterator = oh.getIterator(from); |        const start  = new Date(from); | ||||||
|  |         // We go one day more into the past, in order to force rendering of holidays in the start of the period
 | ||||||
|  |         start.setDate(from.getDate() - 1); | ||||||
|  |          | ||||||
|  |         const iterator = oh.getIterator(start); | ||||||
| 
 | 
 | ||||||
|         let prevValue = undefined; |         let prevValue = undefined; | ||||||
|         while (iterator.advance(to)) { |         while (iterator.advance(to)) { | ||||||
|  | @ -51,6 +55,10 @@ export default class OpeningHoursVisualization extends UIElement { | ||||||
|                 // simply closed, nothing special here
 |                 // simply closed, nothing special here
 | ||||||
|                 continue; |                 continue; | ||||||
|             } |             } | ||||||
|  |              | ||||||
|  |             if(value.startDate < from){ | ||||||
|  |                 continue; | ||||||
|  |             } | ||||||
|             // Get day: sunday is 0, monday is 1. We move everything so that monday == 0
 |             // Get day: sunday is 0, monday is 1. We move everything so that monday == 0
 | ||||||
|             values[(value.startDate.getDay() + 6) % 7].push(value); |             values[(value.startDate.getDay() + 6) % 7].push(value); | ||||||
|         } |         } | ||||||
|  | @ -233,11 +241,13 @@ export default class OpeningHoursVisualization extends UIElement { | ||||||
| 
 | 
 | ||||||
|             let innerContent: string[] = []; |             let innerContent: string[] = []; | ||||||
| 
 | 
 | ||||||
|  |             // Add the lines
 | ||||||
|             for (const changeMoment of changeHours) { |             for (const changeMoment of changeHours) { | ||||||
|                 const offset = 100 * (changeMoment - earliestOpen) / availableArea; |                 const offset = 100 * (changeMoment - earliestOpen) / availableArea; | ||||||
|                 innerContent.push(new FixedUiElement("").SetStyle(`left:${offset}%;`).SetClass("ohviz-line").Render()) |                 innerContent.push(new FixedUiElement("").SetStyle(`left:${offset}%;`).SetClass("ohviz-line").Render()) | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|  |             // Add the actual ranges
 | ||||||
|             for (const range of dayRanges) { |             for (const range of dayRanges) { | ||||||
|                 if (!range.isOpen && !range.isSpecial) { |                 if (!range.isOpen && !range.isSpecial) { | ||||||
|                     innerContent.push( |                     innerContent.push( | ||||||
|  | @ -256,6 +266,7 @@ export default class OpeningHoursVisualization extends UIElement { | ||||||
|                     new FixedUiElement(range.comment).SetStyle(`left:${startPercentage}%; width:${width}%`).SetClass("ohviz-range").Render()) |                     new FixedUiElement(range.comment).SetStyle(`left:${startPercentage}%; width:${width}%`).SetClass("ohviz-range").Render()) | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|  |             // Add line for 'now'
 | ||||||
|             if (now >= 0 && now <= 100) { |             if (now >= 0 && now <= 100) { | ||||||
|                 innerContent.push(new FixedUiElement("").SetStyle(`left:${now}%;`).SetClass("ohviz-now").Render()) |                 innerContent.push(new FixedUiElement("").SetStyle(`left:${now}%;`).SetClass("ohviz-now").Render()) | ||||||
|             } |             } | ||||||
|  |  | ||||||
|  | @ -4,13 +4,26 @@ import {UIEventSource} from "../Logic/UIEventSource"; | ||||||
| 
 | 
 | ||||||
| export default class SpecialVisualizations { | export default class SpecialVisualizations { | ||||||
| 
 | 
 | ||||||
|     public static specialVisualizations: { funcName: string, constr: ((tagSource: UIEventSource<any>, argument: string) => UIElement) }[] = |     public static specialVisualizations: { | ||||||
|  |         funcName: string, | ||||||
|  |         constr: ((tagSource: UIEventSource<any>, argument: string[]) => UIElement), | ||||||
|  |         docs: string, | ||||||
|  |         args: {name: string, defaultValue: string, doc: string}[] | ||||||
|  |     }[] = | ||||||
| 
 | 
 | ||||||
|         [{ |         [{ | ||||||
|             funcName: "opening_hours_table", |             funcName: "opening_hours_table", | ||||||
|             constr: (tagSource: UIEventSource<any>, keyname) => { |             docs: "Creates an opening-hours table. Usage: {opening_hours_table(opening_hours)} to create a table of the tag 'opening_hours'.", | ||||||
|  |             args:[{name:"key", defaultValue: "opening_hours", doc: "The tag from which the table is constructed"}], | ||||||
|  |             constr: (tagSource: UIEventSource<any>, args) => { | ||||||
|  |                 let keyname = args[0]; | ||||||
|  |                 if (keyname === undefined || keyname === "") { | ||||||
|  |                     keyname = keyname ?? "opening_hours" | ||||||
|  |                 } | ||||||
|                 return new OpeningHoursVisualization(tagSource, keyname) |                 return new OpeningHoursVisualization(tagSource, keyname) | ||||||
|             } |             } | ||||||
|         }] |         }, | ||||||
|  | 
 | ||||||
|  |         ] | ||||||
| 
 | 
 | ||||||
| } | } | ||||||
|  | @ -518,7 +518,7 @@ export class TagRendering extends UIElement implements TagDependantUIElement { | ||||||
|         const knownSpecials : {funcName: string, constr: ((arg: string) => UIElement)}[]= SpecialVisualizations.specialVisualizations.map( |         const knownSpecials : {funcName: string, constr: ((arg: string) => UIElement)}[]= SpecialVisualizations.specialVisualizations.map( | ||||||
|             special => ({ |             special => ({ | ||||||
|                 funcName: special.funcName, |                 funcName: special.funcName, | ||||||
|                 constr: arg => special.constr(this.currentTags, arg) |                 constr: arg => special.constr(this.currentTags, arg.split(",")) | ||||||
|             }) |             }) | ||||||
|         ) |         ) | ||||||
|          |          | ||||||
|  |  | ||||||
|  | @ -141,8 +141,8 @@ | ||||||
|             45deg, |             45deg, | ||||||
|             rgba(255, 255, 255, 0), |             rgba(255, 255, 255, 0), | ||||||
|             rgba(255, 255, 255, 0) 10px, |             rgba(255, 255, 255, 0) 10px, | ||||||
|             rgba(216, 235, 255, 0.5) 10px, |             rgba(102, 207, 255, 0.5) 10px, | ||||||
|             rgba(216, 235, 255, 0.5) 20px |             rgba(102, 207, 255, 0.5) 20px | ||||||
|     ); |     ); | ||||||
|     position: absolute; |     position: absolute; | ||||||
|     left: 0; |     left: 0; | ||||||
|  | @ -153,8 +153,29 @@ | ||||||
|     color: black; |     color: black; | ||||||
|     font-weight: bold; |     font-weight: bold; | ||||||
|     text-align: center; |     text-align: center; | ||||||
|  |     border-radius: 1em; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | .ohviz-today .ohviz-day-off { | ||||||
|  |     display: block; | ||||||
|  |     background: repeating-linear-gradient( | ||||||
|  |             45deg, | ||||||
|  |             rgba(255, 255, 255, 0), | ||||||
|  |             rgba(255, 255, 255, 0) 10px, | ||||||
|  |             rgb(153, 231, 255) 10px, | ||||||
|  |             #99e7ff 20px | ||||||
|  |     ); | ||||||
|  |     position: absolute; | ||||||
|  |     left: 0; | ||||||
|  |     top: 0; | ||||||
|  |     height: 100%; | ||||||
|  |     width: 100%; | ||||||
|  |     box-sizing: border-box; | ||||||
|  |     color: black; | ||||||
|  |     font-weight: bold; | ||||||
|  |     text-align: center; | ||||||
|  |     border-radius: 1em; | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| .ohviz-now { | .ohviz-now { | ||||||
|     position: absolute; |     position: absolute; | ||||||
|  |  | ||||||
							
								
								
									
										9
									
								
								test.ts
									
										
									
									
									
								
							
							
						
						
									
										9
									
								
								test.ts
									
										
									
									
									
								
							|  | @ -2,14 +2,11 @@ | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| import {UIEventSource} from "./Logic/UIEventSource"; | import {UIEventSource} from "./Logic/UIEventSource"; | ||||||
| import OpeningHoursInput from "./UI/Input/OpeningHours/OpeningHoursInput"; | import OpeningHoursVisualization from "./UI/OhVisualization"; | ||||||
| 
 | 
 | ||||||
| const oh = "Sep 1-Feb 28 Mo-Th 08:00-12:00, 13:30-17:30; Mar 1-Aug 31 Mo-Fr 07:00-12:00, 13:30-17:30; PH off" | const oh = "Tu-Fr 09:00-17:00 'as usual'; mo off 'yyy'; su off 'xxx'" | ||||||
| 
 | 
 | ||||||
| const source = new UIEventSource<string>("") | new OpeningHoursVisualization(new UIEventSource<any>({opening_hours:oh}), 'opening_hours').AttachTo('maindiv') | ||||||
| new OpeningHoursInput(source).AttachTo('maindiv') |  | ||||||
| console.log("SEtting ",oh) |  | ||||||
| source.setData(oh) |  | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /*/ | /*/ | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue