diff --git a/Customizations/JSON/LayoutConfig.ts b/Customizations/JSON/LayoutConfig.ts index 89421e1..64cfc84 100644 --- a/Customizations/JSON/LayoutConfig.ts +++ b/Customizations/JSON/LayoutConfig.ts @@ -9,6 +9,7 @@ import {Utils} from "../../Utils"; export default class LayoutConfig { public readonly id: string; public readonly maintainer: string; + public readonly credits?: string; public readonly changesetmessage?: string; public readonly version: string; public readonly language: string[]; @@ -48,6 +49,7 @@ export default class LayoutConfig { this.id = json.id; context = (context ?? "") + "." + this.id; this.maintainer = json.maintainer; + this.credits = json.credits; this.changesetmessage = json.changesetmessage; this.version = json.version; this.language = []; diff --git a/Customizations/JSON/LayoutConfigJson.ts b/Customizations/JSON/LayoutConfigJson.ts index 65f4150..0b63c72 100644 --- a/Customizations/JSON/LayoutConfigJson.ts +++ b/Customizations/JSON/LayoutConfigJson.ts @@ -24,6 +24,12 @@ export interface LayoutConfigJson { * 'cyclestreets' which become 'cyclestreets.html' */ id: string; + + /** + * Who helped to create this theme and should be attributed? + */ + credits?: string; + /** * Who does maintian this preset? */ diff --git a/InitUiElements.ts b/InitUiElements.ts index a1365e1..911d0c7 100644 --- a/InitUiElements.ts +++ b/InitUiElements.ts @@ -297,7 +297,7 @@ export class InitUiElements { copyrightNotice, new MapControlButton(Svg.osm_copyright_svg()), copyrightNotice.isShown - ).SetClass("p-0.5 md:hidden") + ).SetClass("p-0.5") new Combine([copyrightButton, checkbox]) .AttachTo("bottom-left"); diff --git a/README.md b/README.md index a4b29c9..a0d1dcd 100644 --- a/README.md +++ b/README.md @@ -142,49 +142,9 @@ Whenever a change is made -even adding a single tag- the change is uploaded into Note that changesets are closed automatically after one hour of inactivity, so we don't have to worry about closing them. -### Query parameters +# Documentation -By adding extra query parameters, more options are available to influence: - -**test**: If true, 'dryrun' mode is activated. The app will behave as normal, except that changes to OSM will be printed onto the console instead of actually uploaded to osm.org (default value: _false_) - -**layout**: The layout to load into MapComplete (default value: _bookcases_) - -**userlayout**: undefined (default value: _false_) - -**layer-control-toggle**: Wether or not the layer control is shown (default value: _false_) - -**tab**: The tab that is shown in the welcome-message. 0 = the explanation of the theme,1 = OSM-credits, 2 = sharescreen, 3 = more themes, 4 = about mapcomplete (user must be logged in and have >200 changesets) (default value: _0_) - -**z**: The initial/current zoom level (default value: _1_) - -**lat**: The initial/current latitude (default value: _0_) - -**lon**: The initial/current longitude of the app (default value: _0_) - -**fs-userbadge**: Disables/Enables the userbadge (and thus disables login capabilities) (default value: _true_) - -**fs-search**: Disables/Enables the search bar (default value: _true_) - -**fs-layers**: Disables/Enables the layer control (default value: _true_) - -**fs-add-new**: Disables/Enables the 'add new feature'-popup. (A theme without presets might not have it in the first place) (default value: _true_) - -**fs-welcome-message**: undefined (default value: _true_) - -**fs-iframe**: Disables/Enables the iframe-popup (default value: _false_) - -**fs-more-quests**: Disables/Enables the 'More Quests'-tab in the welcome message (default value: _true_) - -**fs-share-screen**: Disables/Enables the 'Share-screen'-tab in the welcome message (default value: _true_) - -**fs-geolocation**: Disables/Enables the geolocation button (default value: _true_) - -**oauth_token**: Used to complete the login (default value: _undefined_) - -**background**: The id of the background layer to start with (default value: _undefined_) - -**layer-bookcases**: Wehter or not layer bookcases is shown (default value: _true_) index.ts:104:8 +All documentation can be found in [here](Docs/) # Privacy @@ -195,12 +155,16 @@ Geolocation is available on mobile only throught hte device's GPS location (so n TODO: erase cookies of third party websites and API's -# Attributions +# Attribution Data from OpenStreetMap Background layer selection: curated by https://github.com/osmlab/editor-layer-index +Icons are attributed in various 'license_info.json'-files and can be found in the app. + + + https://commons.wikimedia.org/wiki/File:Camera_font_awesome.svg Camera Icon, Dave Gandy, CC-BY-SA 3.0 @@ -212,11 +176,5 @@ Bicycle logo, Scott de Jonge Park icon via http://www.onlinewebfonts.com/icon/425974, CC BY 3.0 (@sterankofrank) -Forest icon via https://www.onlinewebfonts.com/icon/498112, CC BY - Shower icon (used in 'bike_cleaning.svg'): -https://commons.wikimedia.org/wiki/File:Shower_symbol.svg - -Bench icons from StreetComplete: https://github.com/westnordost/StreetComplete/tree/v25.0-beta1/res/graphics/quest%20icons, GPLv3.0 - -Urinal icon: https://thenounproject.com/term/urinal/1307984/ \ No newline at end of file +https://commons.wikimedia.org/wiki/File:Shower_symbol.svg \ No newline at end of file diff --git a/UI/BigComponents/AttributionPanel.ts b/UI/BigComponents/AttributionPanel.ts index e909323..9767e35 100644 --- a/UI/BigComponents/AttributionPanel.ts +++ b/UI/BigComponents/AttributionPanel.ts @@ -21,7 +21,9 @@ export default class AttributionPanel extends Combine { constructor(layoutToUse: UIEventSource) { super([ Translations.t.general.attribution.attributionContent, - Translations.t.general.attribution.themeBy.Subs({author: layoutToUse.data.maintainer}), + + ((layoutToUse.data.maintainer ?? "") == "") ? "" : Translations.t.general.attribution.themeBy.Subs({author: layoutToUse.data.maintainer}), + layoutToUse.data.credits , "
", new Attribution(undefined, undefined, State.state.layoutToUse, undefined), "
", @@ -50,7 +52,7 @@ export default class AttributionPanel extends Combine { new Combine([ new FixedUiElement(license.authors.join("; ")).SetClass("font-bold"), new Combine([license.license, license.sources.length > 0 ? " - " : "", - ...license.sources.map(link => `${new URL(link).hostname} `)]).SetClass("block") + ...license.sources.map(link => `${new URL(link).hostname} `)]).SetClass("block") ]).SetClass("flex flex-col") ]).SetClass("flex") } diff --git a/assets/weblogo1000.png b/assets/weblogo1000.png deleted file mode 100644 index 13b18c4..0000000 Binary files a/assets/weblogo1000.png and /dev/null differ diff --git a/scripts/generateLicenseInfo.ts b/scripts/generateLicenseInfo.ts index 7f1ff34..aaeb565 100644 --- a/scripts/generateLicenseInfo.ts +++ b/scripts/generateLicenseInfo.ts @@ -28,7 +28,6 @@ function readDirRecSync(path): string[] { function generateLicenseInfos(paths: string[]): SmallLicense[] { const licenses = [] for (const path of paths) { - console.log("Reading info from " + path) const parsed = JSON.parse(readFileSync(path, "UTF-8")) if (Array.isArray(parsed)) { const l: SmallLicense[] = parsed @@ -166,7 +165,7 @@ writeFileSync("./assets/generated/license_info.json", JSON.stringify(licenseInfo const artwork = contents.filter(pth => pth.match(/(.svg|.png|.jpg)$/i) != null) const missingLicenses = missingLicenseInfos(licenseInfos, artwork) -console.log(`There are ${missingLicenses.length} licenses missing.`) +console.log(`There are ${missingLicenses.length} licenses missing.`, missingLicenses) // shuffle(missingLicenses) @@ -178,6 +177,10 @@ process.on('SIGINT', function() { let i = 1; for (const missingLicens of missingLicenses) { console.log(i + " / " + missingLicenses.length) - createLicenseInfoFor(missingLicens) i++; + if(i < missingLicenses.length - 5){ + // continue + } + createLicenseInfoFor(missingLicens) + } \ No newline at end of file