forked from MapComplete/MapComplete
		
	Adding a 'showAllQuestions'-flag'
This commit is contained in:
		
							parent
							
								
									fa5ed7c690
								
							
						
					
					
						commit
						e555a19d30
					
				
					 7 changed files with 75 additions and 25 deletions
				
			
		|  | @ -22,6 +22,18 @@ export default class AllKnownLayers { | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |          | ||||||
|  |         for(const layout of known_layers.themes){ | ||||||
|  |             for (const layer of layout.layers) { | ||||||
|  |                 if(typeof layer === "string"){ | ||||||
|  |                     continue; | ||||||
|  |                 } | ||||||
|  |                 const parsed = new LayerConfig(layer, "shared_layer_in_theme") | ||||||
|  |                 sharedLayers.set(layer.id, parsed); | ||||||
|  |                 sharedLayers[layer.id] = parsed; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |          | ||||||
|         return sharedLayers; |         return sharedLayers; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -25,7 +25,7 @@ export default class LayoutConfig { | ||||||
|     public readonly widenFactor: number; |     public readonly widenFactor: number; | ||||||
|     public readonly roamingRenderings: TagRenderingConfig[]; |     public readonly roamingRenderings: TagRenderingConfig[]; | ||||||
|     public readonly defaultBackgroundId?: string; |     public readonly defaultBackgroundId?: string; | ||||||
|     public readonly layers: LayerConfig[]; |     public layers: LayerConfig[]; | ||||||
|     public readonly clustering?: { |     public readonly clustering?: { | ||||||
|         maxZoom: number, |         maxZoom: number, | ||||||
|         minNeededElements: number |         minNeededElements: number | ||||||
|  | @ -41,6 +41,8 @@ export default class LayoutConfig { | ||||||
|     public readonly enableSearch: boolean; |     public readonly enableSearch: boolean; | ||||||
|     public readonly enableGeolocation: boolean; |     public readonly enableGeolocation: boolean; | ||||||
|     public readonly enableBackgroundLayerSelection: boolean; |     public readonly enableBackgroundLayerSelection: boolean; | ||||||
|  |     public readonly enableShowAllQuestions: boolean; | ||||||
|  | 
 | ||||||
|     public readonly customCss?: string; |     public readonly customCss?: string; | ||||||
|     /* |     /* | ||||||
|     How long is the cache valid, in seconds? |     How long is the cache valid, in seconds? | ||||||
|  | @ -94,10 +96,10 @@ export default class LayoutConfig { | ||||||
|         this.layers = json.layers.map((layer, i) => { |         this.layers = json.layers.map((layer, i) => { | ||||||
|             if (typeof layer === "string") { |             if (typeof layer === "string") { | ||||||
|                 if (AllKnownLayers.sharedLayersJson[layer] !== undefined) { |                 if (AllKnownLayers.sharedLayersJson[layer] !== undefined) { | ||||||
|                     if(json.overrideAll !== undefined){ |                     if (json.overrideAll !== undefined) { | ||||||
|                         let lyr = JSON.parse(JSON.stringify( AllKnownLayers.sharedLayersJson[layer])); |                         let lyr = JSON.parse(JSON.stringify(AllKnownLayers.sharedLayersJson[layer])); | ||||||
|                         return new LayerConfig(Utils.Merge(json.overrideAll, lyr),`${this.id}+overrideAll.layers[${i}]`, official); |                         return new LayerConfig(Utils.Merge(json.overrideAll, lyr), `${this.id}+overrideAll.layers[${i}]`, official); | ||||||
|                     }else{ |                     } else { | ||||||
|                         return AllKnownLayers.sharedLayers[layer] |                         return AllKnownLayers.sharedLayers[layer] | ||||||
|                     } |                     } | ||||||
|                 } else { |                 } else { | ||||||
|  | @ -114,17 +116,17 @@ export default class LayoutConfig { | ||||||
|                 } |                 } | ||||||
|                 // @ts-ignore
 |                 // @ts-ignore
 | ||||||
|                 layer = Utils.Merge(layer.override, JSON.parse(JSON.stringify(shared))); // We make a deep copy of the shared layer, in order to protect it from changes
 |                 layer = Utils.Merge(layer.override, JSON.parse(JSON.stringify(shared))); // We make a deep copy of the shared layer, in order to protect it from changes
 | ||||||
|                | 
 | ||||||
|            | 
 | ||||||
|             } |             } | ||||||
|             if(json.overrideAll !== undefined){ |             if (json.overrideAll !== undefined) { | ||||||
|                 layer = Utils.Merge(json.overrideAll, layer); |                 layer = Utils.Merge(json.overrideAll, layer); | ||||||
|             } |             } | ||||||
|        | 
 | ||||||
|             // @ts-ignore
 |             // @ts-ignore
 | ||||||
|             return new LayerConfig(layer, `${this.id}.layers[${i}]`, official) |             return new LayerConfig(layer, `${this.id}.layers[${i}]`, official) | ||||||
|         }); |         }); | ||||||
|          | 
 | ||||||
|         // ALl the layers are constructed, let them share tags in now!
 |         // ALl the layers are constructed, let them share tags in now!
 | ||||||
|         const roaming: { r, source: LayerConfig }[] = [] |         const roaming: { r, source: LayerConfig }[] = [] | ||||||
|         for (const layer of this.layers) { |         for (const layer of this.layers) { | ||||||
|  | @ -181,6 +183,7 @@ export default class LayoutConfig { | ||||||
|         this.enableGeolocation = json.enableGeolocation ?? true; |         this.enableGeolocation = json.enableGeolocation ?? true; | ||||||
|         this.enableAddNewPoints = json.enableAddNewPoints ?? true; |         this.enableAddNewPoints = json.enableAddNewPoints ?? true; | ||||||
|         this.enableBackgroundLayerSelection = json.enableBackgroundLayerSelection ?? true; |         this.enableBackgroundLayerSelection = json.enableBackgroundLayerSelection ?? true; | ||||||
|  |         this.enableShowAllQuestions = json.enableShowAllQuestions ?? false; | ||||||
|         this.customCss = json.customCss; |         this.customCss = json.customCss; | ||||||
|         this.cacheTimeout = json.cacheTimout ?? (60 * 24 * 60 * 60) |         this.cacheTimeout = json.cacheTimout ?? (60 * 24 * 60 * 60) | ||||||
|     } |     } | ||||||
|  | @ -210,8 +213,8 @@ export default class LayoutConfig { | ||||||
|         icons.add(this.socialImage) |         icons.add(this.socialImage) | ||||||
|         return icons |         return icons | ||||||
|     } |     } | ||||||
|      | 
 | ||||||
|     public LayerIndex() : Map<string, LayerConfig>{ |     public LayerIndex(): Map<string, LayerConfig> { | ||||||
|         const index = new Map<string, LayerConfig>(); |         const index = new Map<string, LayerConfig>(); | ||||||
|         for (const layer of this.layers) { |         for (const layer of this.layers) { | ||||||
|             index.set(layer.id, layer) |             index.set(layer.id, layer) | ||||||
|  | @ -236,7 +239,7 @@ export default class LayoutConfig { | ||||||
|         let path = new URL(originalURL).href |         let path = new URL(originalURL).href | ||||||
|         path = path.substring(0, path.lastIndexOf("/")) |         path = path.substring(0, path.lastIndexOf("/")) | ||||||
|         for (const image of allImages) { |         for (const image of allImages) { | ||||||
|             if(image == "" || image == undefined){ |             if (image == "" || image == undefined) { | ||||||
|                 continue |                 continue | ||||||
|             } |             } | ||||||
|             if (image.startsWith("http://") || image.startsWith("https://")) { |             if (image.startsWith("http://") || image.startsWith("https://")) { | ||||||
|  | @ -260,8 +263,8 @@ export default class LayoutConfig { | ||||||
|             return this; |             return this; | ||||||
|         } |         } | ||||||
|         rewriting.forEach((value, key) => { |         rewriting.forEach((value, key) => { | ||||||
|             console.log("Rewriting",key, "==>", value) |             console.log("Rewriting", key, "==>", value) | ||||||
|              | 
 | ||||||
|             originalJson = originalJson.replace(new RegExp(key, "g"), value) |             originalJson = originalJson.replace(new RegExp(key, "g"), value) | ||||||
|         }) |         }) | ||||||
|         return new LayoutConfig(JSON.parse(originalJson), false, "Layout rewriting") |         return new LayoutConfig(JSON.parse(originalJson), false, "Layout rewriting") | ||||||
|  |  | ||||||
|  | @ -205,4 +205,5 @@ export interface LayoutConfigJson { | ||||||
|     enableAddNewPoints?: boolean; |     enableAddNewPoints?: boolean; | ||||||
|     enableGeolocation?: boolean; |     enableGeolocation?: boolean; | ||||||
|     enableBackgroundLayerSelection?: boolean; |     enableBackgroundLayerSelection?: boolean; | ||||||
|  |     enableShowAllQuestions?: boolean; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -39,6 +39,9 @@ import {LayoutConfigJson} from "./Customizations/JSON/LayoutConfigJson"; | ||||||
| import AttributionPanel from "./UI/BigComponents/AttributionPanel"; | import AttributionPanel from "./UI/BigComponents/AttributionPanel"; | ||||||
| import ContributorCount from "./Logic/ContributorCount"; | import ContributorCount from "./Logic/ContributorCount"; | ||||||
| import FeatureSource from "./Logic/FeatureSource/FeatureSource"; | import FeatureSource from "./Logic/FeatureSource/FeatureSource"; | ||||||
|  | import {AllKnownLayouts} from "./Customizations/AllKnownLayouts"; | ||||||
|  | import AllKnownLayers from "./Customizations/AllKnownLayers"; | ||||||
|  | import LayerConfig from "./Customizations/JSON/LayerConfig"; | ||||||
| 
 | 
 | ||||||
| export class InitUiElements { | export class InitUiElements { | ||||||
| 
 | 
 | ||||||
|  | @ -82,23 +85,44 @@ export class InitUiElements { | ||||||
|         function updateFavs() { |         function updateFavs() { | ||||||
|             // This is purely for the personal theme to load the layers there
 |             // This is purely for the personal theme to load the layers there
 | ||||||
|             const favs = State.state.favouriteLayers.data ?? []; |             const favs = State.state.favouriteLayers.data ?? []; | ||||||
|  |              | ||||||
|  |             const neededLayers = new Set<LayerConfig>(); | ||||||
| 
 | 
 | ||||||
| 
 |             console.log("Favourites are: ", favs) | ||||||
|             layoutToUse.layers.splice(0, layoutToUse.layers.length); |             layoutToUse.layers.splice(0, layoutToUse.layers.length); | ||||||
|  |             let somethingChanged = false; | ||||||
|             for (const fav of favs) { |             for (const fav of favs) { | ||||||
|  |                  | ||||||
|  |                 if(AllKnownLayers.sharedLayers.has(fav)){ | ||||||
|  |                     const layer = AllKnownLayers.sharedLayers.get(fav) | ||||||
|  |                     if(!neededLayers.has(layer)){ | ||||||
|  |                         neededLayers.add(layer) | ||||||
|  |                         somethingChanged = true; | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  | 
 | ||||||
|  |                  | ||||||
|                 for (const layouts of State.state.installedThemes.data) { |                 for (const layouts of State.state.installedThemes.data) { | ||||||
|                     for (const layer of layouts.layout.layers) { |                     for (const layer of layouts.layout.layers) { | ||||||
|                         if (typeof layer === "string") { |                         if (typeof layer === "string") { | ||||||
|                             continue; |                             continue; | ||||||
|                         } |                         } | ||||||
|                         if (layer.id === fav) { |                         if (layer.id === fav) { | ||||||
|                             layoutToUse.layers.push(layer); |                             if(!neededLayers.has(layer)){ | ||||||
|  |                                 neededLayers.add(layer) | ||||||
|  |                                 somethingChanged = true; | ||||||
|  |                             } | ||||||
|                         } |                         } | ||||||
|                     } |                     } | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|             State.state.layoutToUse.ping(); |             if(somethingChanged){ | ||||||
|             State.state.layerUpdater?.ForceRefresh(); |                 console.log("layoutToUse.layers:", layoutToUse.layers) | ||||||
|  |                 State.state.layoutToUse.data.layers = Array.from(neededLayers); | ||||||
|  |                 State.state.layoutToUse.ping(); | ||||||
|  |                 State.state.layerUpdater?.ForceRefresh(); | ||||||
|  |             } | ||||||
|  |              | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -2,7 +2,7 @@ import { Utils } from "../Utils"; | ||||||
| 
 | 
 | ||||||
| export default class Constants { | export default class Constants { | ||||||
|      |      | ||||||
|     public static vNumber = "0.7.2d"; |     public static vNumber = "0.7.2e"; | ||||||
| 
 | 
 | ||||||
|     // The user journey states thresholds when a new feature gets unlocked
 |     // The user journey states thresholds when a new feature gets unlocked
 | ||||||
|     public static userJourney = { |     public static userJourney = { | ||||||
|  |  | ||||||
							
								
								
									
										3
									
								
								State.ts
									
										
									
									
									
								
							
							
						
						
									
										3
									
								
								State.ts
									
										
									
									
									
								
							|  | @ -97,6 +97,7 @@ export default class State { | ||||||
|     public readonly featureSwitchGeolocation: UIEventSource<boolean>; |     public readonly featureSwitchGeolocation: UIEventSource<boolean>; | ||||||
|     public readonly featureSwitchIsTesting: UIEventSource<boolean>; |     public readonly featureSwitchIsTesting: UIEventSource<boolean>; | ||||||
|     public readonly featureSwitchIsDebugging: UIEventSource<boolean>; |     public readonly featureSwitchIsDebugging: UIEventSource<boolean>; | ||||||
|  |     public readonly featureSwitchShowAllQuestions: UIEventSource<boolean>; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
|  | @ -197,6 +198,8 @@ export default class State { | ||||||
|                 "Disables/Enables the 'Share-screen'-tab in the welcome message"); |                 "Disables/Enables the 'Share-screen'-tab in the welcome message"); | ||||||
|             this.featureSwitchGeolocation = featSw("fs-geolocation", (layoutToUse) => layoutToUse?.enableGeolocation ?? true, |             this.featureSwitchGeolocation = featSw("fs-geolocation", (layoutToUse) => layoutToUse?.enableGeolocation ?? true, | ||||||
|                 "Disables/Enables the geolocation button"); |                 "Disables/Enables the geolocation button"); | ||||||
|  |             this.featureSwitchShowAllQuestions = featSw("fs-all-questions", (layoutToUse) => layoutToUse?.enableShowAllQuestions ?? false, | ||||||
|  |                 "Always show all questions"); | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|             this.featureSwitchIsTesting = QueryParameters.GetQueryParameter("test", "false", |             this.featureSwitchIsTesting = QueryParameters.GetQueryParameter("test", "false", | ||||||
|  |  | ||||||
|  | @ -3,6 +3,8 @@ import {UIEventSource} from "../../Logic/UIEventSource"; | ||||||
| import TagRenderingConfig from "../../Customizations/JSON/TagRenderingConfig"; | import TagRenderingConfig from "../../Customizations/JSON/TagRenderingConfig"; | ||||||
| import TagRenderingQuestion from "./TagRenderingQuestion"; | import TagRenderingQuestion from "./TagRenderingQuestion"; | ||||||
| import Translations from "../i18n/Translations"; | import Translations from "../i18n/Translations"; | ||||||
|  | import State from "../../State"; | ||||||
|  | import Combine from "../Base/Combine"; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| /** | /** | ||||||
|  | @ -47,6 +49,7 @@ export default class QuestionBox extends UIElement { | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     InnerRender(): string { |     InnerRender(): string { | ||||||
|  |         const allQuestions : UIElement[] = [] | ||||||
|         for (let i = 0; i < this._tagRenderingQuestions.length; i++) { |         for (let i = 0; i < this._tagRenderingQuestions.length; i++) { | ||||||
|             let tagRendering = this._tagRenderings[i]; |             let tagRendering = this._tagRenderings[i]; | ||||||
| 
 | 
 | ||||||
|  | @ -57,15 +60,19 @@ export default class QuestionBox extends UIElement { | ||||||
|             if (this._skippedQuestions.data.indexOf(i) >= 0) { |             if (this._skippedQuestions.data.indexOf(i) >= 0) { | ||||||
|                 continue; |                 continue; | ||||||
|             } |             } | ||||||
|             // this value is NOT known
 |             // this value is NOT known - we show the questions for it
 | ||||||
|             return this._tagRenderingQuestions[i].Render(); |             if(State.state.featureSwitchShowAllQuestions.data || allQuestions.length == 0){ | ||||||
|  |                 allQuestions.push(this._tagRenderingQuestions[i]) | ||||||
|  |             } | ||||||
|  |          | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         if (this._skippedQuestions.data.length > 0) { |         if(this._skippedQuestions.data.length > 0){ | ||||||
|             return this._skippedQuestionsButton.Render(); |             allQuestions.push(this._skippedQuestionsButton) | ||||||
|         } |         } | ||||||
|  |          | ||||||
| 
 | 
 | ||||||
|         return ""; |         return new Combine(allQuestions).Render(); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| } | } | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue