forked from MapComplete/MapComplete
		
	Add a download button, improve share functionality for custom themes
This commit is contained in:
		
							parent
							
								
									303ccfa322
								
							
						
					
					
						commit
						6ad64e3f70
					
				
					 10 changed files with 64 additions and 40 deletions
				
			
		|  | @ -14,6 +14,8 @@ import BaseLayer from "../../Models/BaseLayer"; | |||
| import FilteredLayer from "../../Models/FilteredLayer"; | ||||
| import {InputElement} from "../Input/InputElement"; | ||||
| import CheckBoxes, {CheckBox} from "../Input/Checkboxes"; | ||||
| import {SubtleButton} from "../Base/SubtleButton"; | ||||
| import LZString from "lz-string"; | ||||
| 
 | ||||
| export default class ShareScreen extends Combine { | ||||
| 
 | ||||
|  | @ -24,14 +26,6 @@ export default class ShareScreen extends Combine { | |||
|         const optionCheckboxes: InputElement<boolean>[] = [] | ||||
|         const optionParts: (UIEventSource<string>)[] = []; | ||||
| 
 | ||||
|         function check() { | ||||
|             return Svg.checkmark_svg().SetStyle("width: 1.5em; display:inline-block;"); | ||||
|         } | ||||
| 
 | ||||
|         function nocheck() { | ||||
|             return Svg.no_checkmark_svg().SetStyle("width: 1.5em; display: inline-block;"); | ||||
|         } | ||||
| 
 | ||||
|         const includeLocation = new CheckBox(tr.fsIncludeCurrentLocation, true) | ||||
|         optionCheckboxes.push(includeLocation); | ||||
| 
 | ||||
|  | @ -49,6 +43,7 @@ export default class ShareScreen extends Combine { | |||
|             } else { | ||||
|                 return null; | ||||
|             } | ||||
|             | ||||
|         }, [currentLocation])); | ||||
| 
 | ||||
| 
 | ||||
|  | @ -119,6 +114,9 @@ export default class ShareScreen extends Combine { | |||
| 
 | ||||
|         } | ||||
| 
 | ||||
|         if(layout.definitionRaw !== undefined){ | ||||
|             optionParts.push(new UIEventSource("userlayout="+(layout.definedAtUrl ?? layout.id))) | ||||
|         } | ||||
| 
 | ||||
|         const options = new Combine(optionCheckboxes).SetClass("flex flex-col") | ||||
|         const url = (currentLocation ?? new UIEventSource(undefined)).map(() => { | ||||
|  | @ -126,13 +124,21 @@ export default class ShareScreen extends Combine { | |||
|             const host = window.location.host; | ||||
|             let path = window.location.pathname; | ||||
|             path = path.substr(0, path.lastIndexOf("/")); | ||||
|             let literalText = `https://${host}${path}/${layout.id.toLowerCase()}` | ||||
|             let id = layout.id.toLowerCase() | ||||
|             if(layout.definitionRaw !== undefined){ | ||||
|                 id="theme.html" | ||||
|             } | ||||
|             let literalText = `https://${host}${path}/${id}` | ||||
| 
 | ||||
|             let hash = "" | ||||
|             if(layout.definedAtUrl === undefined && layout.definitionRaw !== undefined){ | ||||
|                hash = "#"+ LZString.compressToBase64( Utils.MinifyJSON(layout.definitionRaw)) | ||||
|             } | ||||
|             const parts = Utils.NoEmpty(Utils.NoNull(optionParts.map((eventSource) => eventSource.data))); | ||||
|             if (parts.length === 0) { | ||||
|                 return literalText; | ||||
|                 return literalText + hash; | ||||
|             } | ||||
|             return literalText + "?" + parts.join("&"); | ||||
|             return literalText + "?" + parts.join("&") + hash; | ||||
|         }, optionParts); | ||||
| 
 | ||||
| 
 | ||||
|  | @ -184,13 +190,27 @@ export default class ShareScreen extends Combine { | |||
| 
 | ||||
|         }); | ||||
| 
 | ||||
|          | ||||
|         let downloadThemeConfig: BaseUIElement = undefined; | ||||
|         if(layout.definitionRaw !== undefined){ | ||||
|             downloadThemeConfig = new SubtleButton(Svg.download_svg(), new Combine([ | ||||
|                 tr.downloadCustomTheme, | ||||
|                 tr.downloadCustomThemeHelp.SetClass("subtle") | ||||
|             ]).onClick(() => { | ||||
|                 Utils.offerContentsAsDownloadableFile(layout.definitionRaw, layout.id+".mapcomplete-theme-definition.json", { | ||||
|                     mimetype:"application/json" | ||||
|                 }) | ||||
|             }) | ||||
|                 .SetClass("flex flex-col")) | ||||
|         } | ||||
| 
 | ||||
|         super([ | ||||
|             tr.intro.Clone(), | ||||
|             tr.intro, | ||||
|             link, | ||||
|             new VariableUiElement(linkStatus), | ||||
|             tr.addToHomeScreen.Clone(), | ||||
|             tr.embedIntro.Clone(), | ||||
|             downloadThemeConfig, | ||||
|             tr.addToHomeScreen, | ||||
|             tr.embedIntro, | ||||
|             options, | ||||
|             iframeCode, | ||||
|         ]) | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue