forked from MapComplete/MapComplete
		
	Halfway removing the fullscreenmessage
This commit is contained in:
		
							parent
							
								
									81f0a21076
								
							
						
					
					
						commit
						e1a4c75391
					
				
					 9 changed files with 88 additions and 92 deletions
				
			
		|  | @ -85,8 +85,8 @@ export default class AllTranslationAssets { | |||
|       fsIncludeCurrentLocation: new Translation( {"en":"Include current location","es":"Incluir localización actual","ca":"Incloure localització actual","nl":"Start op de huidige locatie","fr":"Inclure l'emplacement actuel","de":"Aktuelle Position einbeziehen"} ), | ||||
| }, | ||||
|     morescreen: {      intro: new Translation( {"en":"<h3>More thematic maps?</h3>Do you enjoy collecting geodata? <br/>There are more themes available.","ca":"<h3>Més peticions</h3>T'agrada captar dades? <br/>Hi ha més capes disponibles.","es":"<h3>Más peticiones</h3>Te gusta captar datos? <br/>Hay más capas disponibles.","fr":"<h3>Plus de thèmes </h3>Vous aimez collecter des données? <br/>Il y a plus de thèmes disponibles.","nl":"<h3>Meer thematische kaarten</h3>Vind je het leuk om geodata te verzamelen? <br/> Hier vind je meer kaartthemas.","gl":"<h3>Máis tarefas</h3>Góstache captar datos? <br/>Hai máis capas dispoñíbeis.","de":"<h3>Weitere Quests</h3>Sammeln Sie gerne Geodaten? <br/>Es sind weitere Themen verfügbar."} ), | ||||
|       requestATheme: new Translation( {"en":"If you want a custom-built quest, request it <a href='https://github.com/pietervdvn/MapComplete/issues' target='_blank'>here</a>","ca":"Si vols que et fem una petició pròpia , demana-la <a href='https://github.com/pietervdvn/MapComplete/issues' target='_blank'>aquí</a>","es":"Si quieres que te hagamos una petición propia , pídela <a href='https://github.com/pietervdvn/MapComplete/issues' target='_blank'>aquí</a>","nl":"Wil je een eigen kaartthema, vraag dit <a href='https://github.com/pietervdvn/MapComplete/issues' target='_blank'>hier aan</a>","fr":"Si vous voulez une autre carte thématique, demande-la <a href='https://github.com/pietervdvn/MapComplete/issues' target='_blank'>ici</a>","gl":"Se queres que che fagamos unha tarefa propia , pídea <a href='https://github.com/pietervdvn/MapComplete/issues' target='_blank'>aquí</a>","de":"Wenn Sie einen speziell angefertigte Quest wünschen, können Sie diesen <a href='https://github.com/pietervdvn/MapComplete/issues' target='_blank'>hier</a> anfragen"} ), | ||||
|       streetcomplete: new Translation( {"en":"Another, similar application is <a href='https://play.google.com/store/apps/details?id=de.westnordost.streetcomplete' target='_blank'>StreetComplete</a>","ca":"Una altra aplicació similar és <a href='https://play.google.com/store/apps/details?id=de.westnordost.streetcomplete' target='_blank'>StreetComplete</a>","es":"Otra aplicación similar es <a href='https://play.google.com/store/apps/details?id=de.westnordost.streetcomplete' target='_blank'>StreetComplete</a>","fr":"Une autre application similaire est <a href='https://play.google.com/store/apps/details?id=de.westnordost.streetcomplete' target='_blank'>StreetComplete</a>","nl":"Een andere, gelijkaardige Android-applicatie is <a href='https://play.google.com/store/apps/details?id=de.westnordost.streetcomplete' target='_blank'>StreetComplete</a>","gl":"Outra aplicación semellante é <a href='https://play.google.com/store/apps/details?id=de.westnordost.streetcomplete' target='_blank'>StreetComplete</a>","de":"Eine andere, ähnliche Anwendung ist <a href='https://play.google.com/store/apps/details?id=de.westnordost.streetcomplete' target='_blank'>StreetComplete</a>"} ), | ||||
|       requestATheme: new Translation( {"en":"If you want a custom-built quest, request it <a href='https://github.com/pietervdvn/MapComplete/issues' class='underline hover:text-blue-800' target='_blank'>here</a>.","ca":"Si vols que et fem una petició pròpia , demana-la <a href='https://github.com/pietervdvn/MapComplete/issues' class='underline hover:text-blue-800' target='_blank'>aquí</a>.","es":"Si quieres que te hagamos una petición propia , pídela <a href='https://github.com/pietervdvn/MapComplete/issues' class='underline hover:text-blue-800' target='_blank'>aquí</a>.","nl":"Wil je een eigen kaartthema, vraag dit <a href='https://github.com/pietervdvn/MapComplete/issues' class='underline hover:text-blue-800' target='_blank'>hier aan</a>.","fr":"Si vous voulez une autre carte thématique, demande-la <a href='https://github.com/pietervdvn/MapComplete/issues' class='underline hover:text-blue-800' target='_blank'>ici</a>.","gl":"Se queres que che fagamos unha tarefa propia , pídea <a href='https://github.com/pietervdvn/MapComplete/issues' class='underline hover:text-blue-800' target='_blank'>aquí</a>.","de":"Wenn Sie einen speziell angefertigte Quest wünschen, können Sie diesen <a href='https://github.com/pietervdvn/MapComplete/issues' class='underline hover:text-blue-800' target='_blank'>hier</a> anfragen."} ), | ||||
|       streetcomplete: new Translation( {"en":"Another, similar application is <a href='https://play.google.com/store/apps/details?id=de.westnordost.streetcomplete' class='underline hover:text-blue-800' class='underline hover:text-blue-800' target='_blank'>StreetComplete</a>..","ca":"Una altra aplicació similar és <a href='https://play.google.com/store/apps/details?id=de.westnordost.streetcomplete' class='underline hover:text-blue-800' target='_blank'>StreetComplete</a>.","es":"Otra aplicación similar es <a href='https://play.google.com/store/apps/details?id=de.westnordost.streetcomplete' class='underline hover:text-blue-800' target='_blank'>StreetComplete</a>.","fr":"Une autre application similaire est <a href='https://play.google.com/store/apps/details?id=de.westnordost.streetcomplete' class='underline hover:text-blue-800' target='_blank'>StreetComplete</a>.","nl":"Een andere, gelijkaardige Android-applicatie is <a href='https://play.google.com/store/apps/details?id=de.westnordost.streetcomplete' class='underline hover:text-blue-800' target='_blank'>StreetComplete</a>.","gl":"Outra aplicación semellante é <a href='https://play.google.com/store/apps/details?id=de.westnordost.streetcomplete' class='underline hover:text-blue-800' target='_blank'>StreetComplete</a>.","de":"Eine andere, ähnliche Anwendung ist <a href='https://play.google.com/store/apps/details?id=de.westnordost.streetcomplete' class='underline hover:text-blue-800' target='_blank'>StreetComplete</a>."} ), | ||||
|       createYourOwnTheme: new Translation( {"en":"Create your own MapComplete theme from scratch","ca":"Crea la teva pròpia petició completa de MapComplete des de zero.","es":"Crea tu propia petición completa de MapComplete desde cero.","nl":"Maak je eigen MapComplete-kaart","fr":"Créez votre propre MapComplete carte","gl":"Crea o teu propio tema completo do MapComplete dende cero.","de":"Erstellen Sie Ihr eigenes MapComplete-Thema von Grund auf neu"} ), | ||||
| }, | ||||
|     readYourMessages: new Translation( {"en":"Please, read all your OpenStreetMap-messages before adding a new point.","ca":"Llegeix tots els teus missatges d'OpenStreetMap abans d'afegir nous punts.","es":"Lee todos tus mensajes de OpenStreetMap antes de añadir nuevos puntos.","nl":"Gelieve eerst je berichten op OpenStreetMap te lezen alvorens nieuwe punten toe te voegen.","fr":"Merci de lire tous vos messages sur OpenStreetMap avant d'ajouter un nouveau point.","gl":"Le todos a túas mensaxes do OpenStreetMap antes de engadir novos puntos.","de":"Bitte lesen Sie alle Ihre OpenStreetMap-Nachrichten, bevor Sie einen neuen Punkt hinzufügen"} ), | ||||
|  |  | |||
|  | @ -227,7 +227,7 @@ export class InitUiElements { | |||
|                     .onClick(() => {/*Catch the click*/ | ||||
|                     })]), | ||||
|             help | ||||
|             , true | ||||
|             , isOpened | ||||
|         ).AttachTo("messagesbox"); | ||||
|         const openedTime = new Date().getTime(); | ||||
|         State.state.locationControl.addCallback(() => { | ||||
|  | @ -249,20 +249,21 @@ export class InitUiElements { | |||
|     private static InitLayerSelection() { | ||||
|         InitUiElements.OnlyIf(State.state.featureSwitchLayers, () => { | ||||
| 
 | ||||
|             const layerControlPanel = new LayerControlPanel(() => State.state.layerControlIsOpened.setData(false)) | ||||
|                 .SetStyle("display:block;padding:0.75em;border-radius:1em;"); | ||||
|             const closeButton = Svg.close_svg().SetClass("layer-selection-toggle").SetStyle("  background: var(--subtle-detail-color);") | ||||
|             const layerControlPanel = new LayerControlPanel( | ||||
|                 () => State.state.layerControlIsOpened.setData(false)) | ||||
|                 .SetClass("block p-1 rounded-full"); | ||||
|             const closeButton = Svg.close_svg() | ||||
|                 .SetClass("layer-selection-toggle") | ||||
|                 .SetStyle("  background: var(--subtle-detail-color);") | ||||
|             const checkbox = new CheckBox( | ||||
|                 new Combine([ | ||||
|                     closeButton, | ||||
|                     layerControlPanel]).SetStyle("display:flex;flex-direction:row;") | ||||
|                     .SetClass("hidden-on-mobile") | ||||
|                     layerControlPanel]) | ||||
|                     .SetClass("flex flex-row") | ||||
|                 , | ||||
|                 Svg.layers_svg().SetClass("layer-selection-toggle"), | ||||
|                 State.state.layerControlIsOpened | ||||
|             ); | ||||
| 
 | ||||
|             checkbox.AttachTo("layer-selection"); | ||||
|             ).AttachTo("layer-selection"); | ||||
| 
 | ||||
| 
 | ||||
|             State.state.locationControl | ||||
|  |  | |||
							
								
								
									
										2
									
								
								Svg.ts
									
										
									
									
									
								
							
							
						
						
									
										2
									
								
								Svg.ts
									
										
									
									
									
								
							|  | @ -255,7 +255,7 @@ export default class Svg { | |||
|     public static ring_ui() { return new FixedUiElement(Svg.ring_img);} | ||||
| 
 | ||||
|     public static search = " <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\"> <g id=\"search\"> <path id=\"magnifying-glass\" d=\"M1.63 9.474L4.006 7.1l.17-.1a3.45 3.45 0 0 1-.644-2.01A3.478 3.478 0 1 1 7.01 8.47 3.43 3.43 0 0 1 5 7.822l-.098.17-2.375 2.373c-.19.188-.543.142-.79-.105s-.293-.6-.104-.79zm5.378-2.27A2.21 2.21 0 1 0 4.8 4.994 2.21 2.21 0 0 0 7.01 7.21z\"/> </g> </svg>" | ||||
|     public static search_img = Img.AsImageElement(Svg.search, 'rounded-3xl') | ||||
|     public static search_img = Img.AsImageElement(Svg.search) | ||||
|     public static search_svg() { return new FixedUiElement(Svg.search);} | ||||
|     public static search_ui() { return new FixedUiElement(Svg.search_img);} | ||||
| 
 | ||||
|  |  | |||
|  | @ -28,5 +28,4 @@ export default class LazyElement extends UIElement { | |||
|         return this._content.InnerRender(); | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
| } | ||||
|  | @ -9,33 +9,62 @@ import Ornament from "./Ornament"; | |||
|  */ | ||||
| export default class ScrollableFullScreen extends UIElement { | ||||
|     private _component: UIElement; | ||||
| 
 | ||||
|     private elementsToRestore: Set<HTMLElement> = new Set<HTMLElement>(); | ||||
| 
 | ||||
|     constructor(title: UIElement, content: UIElement, onClose: (() => void)) { | ||||
|         super(); | ||||
|         this.dumbMode = false; | ||||
|         const returnToTheMap = Svg.back_svg().onClick(() => { | ||||
|             onClose(); | ||||
|         })  .SetClass("block sm:hidden mb-2 bg-blue-50 rounded-full w-12 h-12 p-1.5") | ||||
|             console.log("Clicked back!"); | ||||
|             this.RestoreLeaflet(); | ||||
|             if (onClose() !== undefined) { | ||||
|                 console.error("WARNING: onClose is not defined") | ||||
|                 onClose(); | ||||
|             } | ||||
|         }).SetClass("block sm:hidden mb-2 bg-blue-50 rounded-full w-12 h-12 p-1.5") | ||||
| 
 | ||||
|         title.SetClass("block w-full") | ||||
|         const ornament = new Combine([new Ornament().SetStyle("height:5em;")]) | ||||
|             .SetClass("block sm:hidden h-5") | ||||
| 
 | ||||
|          | ||||
|        this._component = new Combine([ | ||||
| 
 | ||||
|         this._component = | ||||
|             new Combine([ | ||||
|             new Combine([ | ||||
|             new Combine([returnToTheMap, title]) | ||||
|                 .AddClass("border-b-2 border-black shadow sm:shadow-none z-50 bg-white p-2 pb-0 sm:p-0 flex overflow-x-hidden flex-shrink-0 max-h-20vh"), | ||||
|                 .AddClass("border-b-2 border-black shadow sm:shadow-none bg-white p-2 pb-0 sm:p-0 flex overflow-x-hidden flex-shrink-0 max-h-20vh"), | ||||
|             new Combine(["<span>", content, "</span>", ornament]) | ||||
|                 .SetClass("block p-2 sm:pt-4 w-full max-h-screen landscape:max-h-screen overflow-y-auto overflow-x-hidden"), | ||||
|                 .SetClass("block p-2 sm:pt-4 w-full h-screen landscape:h-screen  sm:h-full sm:w-full overflow-y-auto overflow-x-hidden"), | ||||
|             // We add an ornament which takes around 5em. This is in order to make sure the Web UI doesn't hide
 | ||||
|         ]).SetClass("block flex flex-col fixed max-h-screen sm:max-h-65vh sm:relative top-0 left-0 right-0"); | ||||
|         ]).SetClass("block flex flex-col  relative bg-white") | ||||
|         ]).SetClass("fixed top-0 left-0 right-0 h-screen w-screen sm:max-h-65vh sm:w-auto"); | ||||
| 
 | ||||
|     } | ||||
|      | ||||
| 
 | ||||
|     InnerRender(): string { | ||||
|         return this._component.Render(); | ||||
|     } | ||||
|      | ||||
|     protected InnerUpdate(htmlElement: HTMLElement) { | ||||
| 
 | ||||
|         do { | ||||
|             // A leaflet workaround: in order for fullscreen to work, we need to get the parent element which does a transform3d and remove/read the transform
 | ||||
|             if (htmlElement.style.transform !== "") { | ||||
|                 this.elementsToRestore.add(htmlElement); | ||||
|                 htmlElement.classList.add("no-transform") | ||||
|             } | ||||
|             htmlElement = htmlElement.parentElement; | ||||
|         } while (htmlElement != null) | ||||
| 
 | ||||
|         super.InnerUpdate(htmlElement); | ||||
|     } | ||||
| 
 | ||||
|     private RestoreLeaflet() { | ||||
|         this.elementsToRestore.forEach( | ||||
|             el => el.classList.remove("no-transform") | ||||
|         ); | ||||
| 
 | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
| } | ||||
|  | @ -31,9 +31,7 @@ export default class LayerControlPanel extends UIElement { | |||
| 
 | ||||
|         const title = Translations.t.general.layerSelection.title.SetClass("text-2xl break-words font-bold p-2") | ||||
| 
 | ||||
|         this._panel = new ScrollableFullScreen(title, layerControlPanel, () => { | ||||
|             onClose | ||||
|         }); | ||||
|         this._panel = new ScrollableFullScreen(title, layerControlPanel, onClose); | ||||
|     } | ||||
| 
 | ||||
|     InnerRender(): string { | ||||
|  |  | |||
|  | @ -1,56 +1,4 @@ | |||
| 
 | ||||
| <<<<<<< HEAD | ||||
| .featureinfobox { | ||||
|     display: flex; | ||||
|     flex-direction: column; | ||||
| } | ||||
| 
 | ||||
| .featureinfobox-icons img { | ||||
|     max-height: 1.5em; | ||||
|     width: 1.5em; | ||||
| } | ||||
| 
 | ||||
| .featureinfobox-icons { | ||||
|     margin-left: auto; | ||||
| } | ||||
| 
 | ||||
| .featureinfobox-icons span { | ||||
|     display: inline-block; | ||||
|     padding-right: 0.1em; | ||||
| } | ||||
| 
 | ||||
| .featureinfobox-titlebar { | ||||
|     border-bottom: 2px solid var(--foreground-color); | ||||
|     box-shadow: 0 10px 10px -10px var(--shadow-color); | ||||
|     display: flex; | ||||
|     justify-content: space-between; | ||||
|     width: 100%; | ||||
|     overflow-x: hidden; | ||||
| } | ||||
| 
 | ||||
| .featureinfobox-titlebar-title { | ||||
|     font-size: large; | ||||
|     font-weight: bold; | ||||
|     display: flex; | ||||
|     justify-content: space-between; | ||||
|     flex-grow: 2; | ||||
|     word-break: break-all; | ||||
| } | ||||
| 
 | ||||
| .featureinfobox-back-to-the-map { | ||||
|     padding: 0.5em; | ||||
|     border-radius: 999em; | ||||
|     margin-right: 0.4em; | ||||
|     width: 2em; | ||||
|     height: 2em; | ||||
|     background: var(--subtle-detail-color); | ||||
|     flex-shrink: 0; | ||||
| } | ||||
| ======= | ||||
| >>>>>>> master | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| @media only screen and (max-height: 600px) and (min-width: 600px) { | ||||
|     /* landscape mode: the first tagrendering of the infobox gets a special treatment and is placed on the right*/ | ||||
|     .landscape\:max-h-screen { | ||||
|  | @ -127,7 +75,7 @@ | |||
|     border-radius: 0.5em; | ||||
|     display: block; | ||||
|     width: 100%; | ||||
|     margin: 5px 0; | ||||
|     margin: 5px; | ||||
|     box-sizing: border-box; | ||||
|     padding: 0.5em; | ||||
| } | ||||
|  |  | |||
							
								
								
									
										47
									
								
								index.css
									
										
									
									
									
								
							
							
						
						
									
										47
									
								
								index.css
									
										
									
									
									
								
							|  | @ -3,18 +3,44 @@ | |||
| @tailwind utilities; | ||||
| 
 | ||||
| @layer utilities { | ||||
|   @variants responsive { | ||||
|     .max-h-65vh { | ||||
|       max-height: 65vh; | ||||
|     @variants responsive { | ||||
|         .max-h-65vh { | ||||
|             max-height: 65vh; | ||||
|         } | ||||
| 
 | ||||
|         .max-h-20vh { | ||||
|             max-height: 20vh; | ||||
|         } | ||||
|          | ||||
|         .z-above-map{ | ||||
|             z-index: 10000 | ||||
|         } | ||||
|          | ||||
|         .z-above-map-higher { | ||||
|             z-index: 10100 | ||||
|         } | ||||
|          | ||||
|         .z-above-map-high { | ||||
|             z-index: 10200 !important; | ||||
|         } | ||||
|          | ||||
|         .z-above-map-highest{ | ||||
|             z-index: 50000 | ||||
|         } | ||||
| 
 | ||||
|     } | ||||
|        | ||||
|       .max-h-20vh { | ||||
|           max-height: 20vh; | ||||
|       } | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| @media only screen and (max-width: 640px), only screen and (max-height: 640px) { | ||||
|     .no-transform { | ||||
|         /*This is a workaround to let popup contents escape the popup on mobile*/ | ||||
|         transform: none !important; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| :root { | ||||
|     --subtle-detail-color: #e5f5ff; | ||||
|     --subtle-detail-color-contrast: black; | ||||
|  | @ -53,9 +79,6 @@ a { | |||
| } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| #topleft-tools svg { | ||||
|     fill: var(--foreground-color) !important; | ||||
|     stroke: var(--foreground-color) !important; | ||||
|  | @ -109,8 +132,6 @@ a { | |||
| } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| #layer-selection { | ||||
|     z-index: 9000; | ||||
|     background-color: var(--background-color); | ||||
|  |  | |||
|  | @ -48,7 +48,7 @@ | |||
|     <div id="messagesboxmobile"></div> | ||||
| </div> | ||||
| 
 | ||||
| <div id="topleft-tools"> | ||||
| <div id="topleft-tools" class="z-index-above-map"> | ||||
|     <div id="userbadge-and-search" class="p-3"> | ||||
|         <div id="userbadge" class="shadow rounded-3xl overflow-hidden"></div> | ||||
|         <div id="searchbox" class="shadow rounded-3xl overflow-hidden"></div> | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue