diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..fb3ce20 Binary files /dev/null and b/.DS_Store differ diff --git a/.tx/add-files.sh b/.tx/add-files.sh deleted file mode 100755 index 29718be..0000000 --- a/.tx/add-files.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/sh -for FILEPATH in $(find . -type f -name '*.en_US.md'); do - # ./_example/directory/01-filename.en_US.md => _example/directory/01-filename.en_US.md - FILEPATH=$(echo $FILEPATH | sed 's/^\.\///') - - # _example/directory/01-filename.en_US.md => example_filename - RESOURCE_SLUG=$(echo $FILEPATH | sed 's/\/[0-9]\+-/\//g' | sed 's/^_//' | sed 's/\/.\+\//\//g'| sed 's/\.en_US\.md$//'| tr '/' '_') - - # _example/01-filename.en_US.md => example/01-filename..md - FILE_FILTER=$(echo $FILEPATH | sed 's/\.en_US\.md$/..md/') - - tx add \ - --organization maproulette \ - --project mr-docs \ - --resource "$RESOURCE_SLUG" \ - --file-filter "$FILE_FILTER" \ - --type GITHUBMARKDOWN \ - $FILEPATH -done - diff --git a/.tx/config b/.tx/config deleted file mode 100755 index 4c01e96..0000000 --- a/.tx/config +++ /dev/null @@ -1,411 +0,0 @@ -[main] -host = https://www.transifex.com - -[o:maproulette:p:mr-docs:r:documentation_bulk-editing-challenges] -file_filter = _documentation/new-topics/bulk-editing-challenges..md -source_file = _documentation/new-topics/bulk-editing-challenges.en_US.md -type = GITHUBMARKDOWN -minimum_perc = 0 -replace_edited_strings = false -keep_translations = false - -[o:maproulette:p:mr-docs:r:documentation_challenge-comments] -file_filter = _documentation/new-topics/challenge-comments..md -source_file = _documentation/new-topics/challenge-comments.en_US.md -type = GITHUBMARKDOWN -minimum_perc = 0 -replace_edited_strings = false -keep_translations = false - -[o:maproulette:p:mr-docs:r:documentation_challenge-flagging] -file_filter = _documentation/new-topics/challenge-flagging..md -source_file = _documentation/new-topics/challenge-flagging.en_US.md -type = GITHUBMARKDOWN -minimum_perc = 0 -replace_edited_strings = false -keep_translations = false - -[o:maproulette:p:mr-docs:r:documentation_challenge-instructions-templating] -file_filter = _documentation/creating-challenges/09-challenge-instructions-templating..md -source_file = _documentation/creating-challenges/09-challenge-instructions-templating.en_US.md -type = GITHUBMARKDOWN -minimum_perc = 0 -replace_edited_strings = false -keep_translations = false - -[o:maproulette:p:mr-docs:r:documentation_challenge-visibility-and-discovery] -file_filter = _documentation/creating-challenges/04-challenge-visibility-and-discovery..md -source_file = _documentation/creating-challenges/04-challenge-visibility-and-discovery.en_US.md -type = GITHUBMARKDOWN -minimum_perc = 0 -replace_edited_strings = false -keep_translations = false - -[o:maproulette:p:mr-docs:r:documentation_comment-short-codes] -file_filter = _documentation/advanced/06-comment-short-codes..md -source_file = _documentation/advanced/06-comment-short-codes.en_US.md -type = GITHUBMARKDOWN -minimum_perc = 0 -replace_edited_strings = false -keep_translations = false - -[o:maproulette:p:mr-docs:r:documentation_creating-a-challenge] -file_filter = _documentation/creating-challenges/01-creating-a-challenge..md -source_file = _documentation/creating-challenges/01-creating-a-challenge.en_US.md -type = GITHUBMARKDOWN -minimum_perc = 0 -replace_edited_strings = false -keep_translations = false - -[o:maproulette:p:mr-docs:r:documentation_creating-cooperative-challenges] -file_filter = _documentation/creating-challenges/07-creating-cooperative-challenges..md -source_file = _documentation/creating-challenges/07-creating-cooperative-challenges.en_US.md -type = GITHUBMARKDOWN -minimum_perc = 0 -replace_edited_strings = false -keep_translations = false - -[o:maproulette:p:mr-docs:r:documentation_defining-task-sourced-date] -file_filter = _documentation/creating-challenges/10-defining-task-sourced-date..md -source_file = _documentation/creating-challenges/10-defining-task-sourced-date.en_US.md -type = GITHUBMARKDOWN -minimum_perc = 0 -replace_edited_strings = false -keep_translations = false - -[o:maproulette:p:mr-docs:r:documentation_discovering-challenges] -file_filter = _documentation/basics/01-discovering-challenges..md -source_file = _documentation/basics/01-discovering-challenges.en_US.md -type = GITHUBMARKDOWN -minimum_perc = 0 -replace_edited_strings = false -keep_translations = false - -[o:maproulette:p:mr-docs:r:documentation_editing-virtual-challenges] -file_filter = _documentation/advanced/01-editing-virtual-challenges..md -source_file = _documentation/advanced/01-editing-virtual-challenges.en_US.md -type = GITHUBMARKDOWN -minimum_perc = 0 -replace_edited_strings = false -keep_translations = false - -[o:maproulette:p:mr-docs:r:documentation_exporting-challenge-data] -file_filter = _documentation/creating-challenges/17-exporting-challenge-data..md -source_file = _documentation/creating-challenges/17-exporting-challenge-data.en_US.md -type = GITHUBMARKDOWN -minimum_perc = 0 -replace_edited_strings = false -keep_translations = false - -[o:maproulette:p:mr-docs:r:documentation_filtering-the-task-list-by-properties] -file_filter = _documentation/creating-challenges/11-filtering-the-task-list-by-properties..md -source_file = _documentation/creating-challenges/11-filtering-the-task-list-by-properties.en_US.md -type = GITHUBMARKDOWN -minimum_perc = 0 -replace_edited_strings = false -keep_translations = false - -[o:maproulette:p:mr-docs:r:documentation_following] -file_filter = _documentation/teams/02-following..md -source_file = _documentation/teams/02-following.en_US.md -type = GITHUBMARKDOWN -minimum_perc = 0 -replace_edited_strings = false -keep_translations = false - -[o:maproulette:p:mr-docs:r:documentation_gists-for-remote-geojson] -file_filter = _documentation/creating-challenges/03-gists-for-remote-geojson..md -source_file = _documentation/creating-challenges/03-gists-for-remote-geojson.en_US.md -type = GITHUBMARKDOWN -minimum_perc = 0 -replace_edited_strings = false -keep_translations = false - -[o:maproulette:p:mr-docs:r:documentation_line-by-line-geojson] -file_filter = _documentation/creating-challenges/15-line-by-line-geojson..md -source_file = _documentation/creating-challenges/15-line-by-line-geojson.en_US.md -type = GITHUBMARKDOWN -minimum_perc = 0 -replace_edited_strings = false -keep_translations = false - -[o:maproulette:p:mr-docs:r:documentation_map-layer-management] -file_filter = _documentation/server-admin/map-layer-management..md -source_file = _documentation/server-admin/map-layer-management.en_US.md -type = GITHUBMARKDOWN -minimum_perc = 0 -replace_edited_strings = false -keep_translations = false - -[o:maproulette:p:mr-docs:r:documentation_markdown] -file_filter = _documentation/basics/04-markdown..md -source_file = _documentation/basics/04-markdown.en_US.md -type = GITHUBMARKDOWN -minimum_perc = 0 -replace_edited_strings = false -keep_translations = false - -[o:maproulette:p:mr-docs:r:documentation_mustache-tag-replacement] -file_filter = _documentation/creating-challenges/08-mustache-tag-replacement..md -source_file = _documentation/creating-challenges/08-mustache-tag-replacement.en_US.md -type = GITHUBMARKDOWN -minimum_perc = 0 -replace_edited_strings = false -keep_translations = false - -[o:maproulette:p:mr-docs:r:documentation_notifications-and-email] -file_filter = _documentation/basics/03-notifications-and-email..md -source_file = _documentation/basics/03-notifications-and-email.en_US.md -type = GITHUBMARKDOWN -minimum_perc = 0 -replace_edited_strings = false -keep_translations = false - -[o:maproulette:p:mr-docs:r:documentation_point-scoring] -file_filter = _documentation/basics/06-point-scoring..md -source_file = _documentation/basics/06-point-scoring.en_US.md -type = GITHUBMARKDOWN -minimum_perc = 0 -replace_edited_strings = false -keep_translations = false - -[o:maproulette:p:mr-docs:r:documentation_projects-and-project-managers] -file_filter = _documentation/teams/03-projects-and-project-managers..md -source_file = _documentation/teams/03-projects-and-project-managers.en_US.md -type = GITHUBMARKDOWN -minimum_perc = 0 -replace_edited_strings = false -keep_translations = false - -[o:maproulette:p:mr-docs:r:documentation_rapid-editor] -file_filter = _documentation/new-topics/rapid-editor..md -source_file = _documentation/new-topics/rapid-editor.en_US.md -type = GITHUBMARKDOWN -minimum_perc = 0 -replace_edited_strings = false -keep_translations = false - -[o:maproulette:p:mr-docs:r:documentation_rebuilding-challenge-tasks] -file_filter = _documentation/creating-challenges/14-rebuilding-challenge-tasks..md -source_file = _documentation/creating-challenges/14-rebuilding-challenge-tasks.en_US.md -type = GITHUBMARKDOWN -minimum_perc = 0 -replace_edited_strings = false -keep_translations = false - -[o:maproulette:p:mr-docs:r:documentation_reporting-a-challenge] -file_filter = _documentation/basics/07-reporting-a-challenge..md -source_file = _documentation/basics/07-reporting-a-challenge.en_US.md -type = GITHUBMARKDOWN -minimum_perc = 0 -replace_edited_strings = false -keep_translations = false - -[o:maproulette:p:mr-docs:r:documentation_reviewing] -file_filter = _documentation/teams/05-reviewing..md -source_file = _documentation/teams/05-reviewing.en_US.md -type = GITHUBMARKDOWN -minimum_perc = 0 -replace_edited_strings = false -keep_translations = false - -[o:maproulette:p:mr-docs:r:documentation_searchbox-short-commands] -file_filter = _documentation/advanced/07-searchbox-short-commands..md -source_file = _documentation/advanced/07-searchbox-short-commands.en_US.md -type = GITHUBMARKDOWN -minimum_perc = 0 -replace_edited_strings = false -keep_translations = false - -[o:maproulette:p:mr-docs:r:documentation_setting-basemap-for-challenge] -file_filter = _documentation/creating-challenges/05-setting-basemap-for-challenge..md -source_file = _documentation/creating-challenges/05-setting-basemap-for-challenge.en_US.md -type = GITHUBMARKDOWN -minimum_perc = 0 -replace_edited_strings = false -keep_translations = false - -[o:maproulette:p:mr-docs:r:documentation_setting-external-task-identifiers] -file_filter = _documentation/creating-challenges/12-setting-external-task-identifiers..md -source_file = _documentation/creating-challenges/12-setting-external-task-identifiers.en_US.md -type = GITHUBMARKDOWN -minimum_perc = 0 -replace_edited_strings = false -keep_translations = false - -[o:maproulette:p:mr-docs:r:documentation_setting-your-default-osm-editor] -file_filter = _documentation/basics/02-setting-your-default-osm-editor..md -source_file = _documentation/basics/02-setting-your-default-osm-editor.en_US.md -type = GITHUBMARKDOWN -minimum_perc = 0 -replace_edited_strings = false -keep_translations = false - -[o:maproulette:p:mr-docs:r:documentation_setting-your-map-base-layer] -file_filter = _documentation/basics/05-setting-your-map-base-layer..md -source_file = _documentation/basics/05-setting-your-map-base-layer.en_US.md -type = GITHUBMARKDOWN -minimum_perc = 0 -replace_edited_strings = false -keep_translations = false - -[o:maproulette:p:mr-docs:r:documentation_solving-multiple-tasks-together] -file_filter = _documentation/advanced/05-solving-multiple-tasks-together..md -source_file = _documentation/advanced/05-solving-multiple-tasks-together.en_US.md -type = GITHUBMARKDOWN -minimum_perc = 0 -replace_edited_strings = false -keep_translations = false - -[o:maproulette:p:mr-docs:r:documentation_styling-task-features] -file_filter = _documentation/creating-challenges/06-styling-task-features..md -source_file = _documentation/creating-challenges/06-styling-task-features.en_US.md -type = GITHUBMARKDOWN -minimum_perc = 0 -replace_edited_strings = false -keep_translations = false - -[o:maproulette:p:mr-docs:r:documentation_system-notice-management] -file_filter = _documentation/server-admin/system-notice-management..md -source_file = _documentation/server-admin/system-notice-management.en_US.md -type = GITHUBMARKDOWN -minimum_perc = 0 -replace_edited_strings = false -keep_translations = false - -[o:maproulette:p:mr-docs:r:documentation_tag-fix-challenges] -file_filter = _documentation/basics/08-tag-fix-challenges..md -source_file = _documentation/basics/08-tag-fix-challenges.en_US.md -type = GITHUBMARKDOWN -minimum_perc = 0 -replace_edited_strings = false -keep_translations = false - -[o:maproulette:p:mr-docs:r:documentation_task-attachments] -file_filter = _documentation/creating-challenges/16-task-attachments..md -source_file = _documentation/creating-challenges/16-task-attachments.en_US.md -type = GITHUBMARKDOWN -minimum_perc = 0 -replace_edited_strings = false -keep_translations = false - -[o:maproulette:p:mr-docs:r:documentation_task-priority-rules] -file_filter = _documentation/creating-challenges/13-task-priority-rules..md -source_file = _documentation/creating-challenges/13-task-priority-rules.en_US.md -type = GITHUBMARKDOWN -minimum_perc = 0 -replace_edited_strings = false -keep_translations = false - -[o:maproulette:p:mr-docs:r:documentation_teams] -file_filter = _documentation/teams/01-teams..md -source_file = _documentation/teams/01-teams.en_US.md -type = GITHUBMARKDOWN -minimum_perc = 0 -replace_edited_strings = false -keep_translations = false - -[o:maproulette:p:mr-docs:r:documentation_translate-docs] -file_filter = _documentation/new-topics/translate-docs..md -source_file = _documentation/new-topics/translate-docs.en_US.md -type = GITHUBMARKDOWN -minimum_perc = 0 -replace_edited_strings = false -keep_translations = false - -[o:maproulette:p:mr-docs:r:documentation_using-keyboard-shortcuts] -file_filter = _documentation/advanced/02-using-keyboard-shortcuts..md -source_file = _documentation/advanced/02-using-keyboard-shortcuts.en_US.md -type = GITHUBMARKDOWN -minimum_perc = 0 -replace_edited_strings = false -keep_translations = false - -[o:maproulette:p:mr-docs:r:documentation_using-layouts] -file_filter = _documentation/advanced/03-using-layouts..md -source_file = _documentation/advanced/03-using-layouts.en_US.md -type = GITHUBMARKDOWN -minimum_perc = 0 -replace_edited_strings = false -keep_translations = false - -[o:maproulette:p:mr-docs:r:documentation_using-mapillary-images] -file_filter = _documentation/advanced/04-using-mapillary-images..md -source_file = _documentation/advanced/04-using-mapillary-images.en_US.md -type = GITHUBMARKDOWN -minimum_perc = 0 -replace_edited_strings = false -keep_translations = false - -[o:maproulette:p:mr-docs:r:documentation_using-maproulette-tags] -file_filter = _documentation/teams/06-using-maproulette-tags..md -source_file = _documentation/teams/06-using-maproulette-tags.en_US.md -type = GITHUBMARKDOWN -minimum_perc = 0 -replace_edited_strings = false -keep_translations = false - -[o:maproulette:p:mr-docs:r:documentation_using-overpass-to-create-challenges] -file_filter = _documentation/creating-challenges/02-using-overpass-to-create-challenges..md -source_file = _documentation/creating-challenges/02-using-overpass-to-create-challenges.en_US.md -type = GITHUBMARKDOWN -minimum_perc = 0 -replace_edited_strings = false -keep_translations = false - -[o:maproulette:p:mr-docs:r:documentation_virtual-projects] -file_filter = _documentation/teams/04-virtual-projects..md -source_file = _documentation/teams/04-virtual-projects.en_US.md -type = GITHUBMARKDOWN -minimum_perc = 0 -replace_edited_strings = false -keep_translations = false - -[o:maproulette:p:mr-docs:r:documentation_your-dashboard] -file_filter = _documentation/new-topics/your-dashboard..md -source_file = _documentation/new-topics/your-dashboard.en_US.md -type = GITHUBMARKDOWN -minimum_perc = 0 -replace_edited_strings = false -keep_translations = false - -[o:maproulette:p:mr-docs:r:index] -file_filter = index..md -source_file = index.en_US.md -type = GITHUBMARKDOWN -minimum_perc = 0 -replace_edited_strings = false -keep_translations = false - -[o:maproulette:p:mr-docs:r:screencasts_connect-2020-5-min-lightning-talk] -file_filter = _screencasts/03-connect-2020-5-min-lightning-talk..md -source_file = _screencasts/03-connect-2020-5-min-lightning-talk.en_US.md -type = GITHUBMARKDOWN -minimum_perc = 0 -replace_edited_strings = false -keep_translations = false - -[o:maproulette:p:mr-docs:r:screencasts_create-a-challenge-with-geojson-data] -file_filter = _screencasts/00-create-a-challenge-with-geojson-data..md -source_file = _screencasts/00-create-a-challenge-with-geojson-data.en_US.md -type = GITHUBMARKDOWN -minimum_perc = 0 -replace_edited_strings = false -keep_translations = false - -[o:maproulette:p:mr-docs:r:screencasts_create-a-challenge-with-overpass] -file_filter = _screencasts/01-create-a-challenge-with-overpass..md -source_file = _screencasts/01-create-a-challenge-with-overpass.en_US.md -type = GITHUBMARKDOWN -minimum_perc = 0 -replace_edited_strings = false -keep_translations = false - -[o:maproulette:p:mr-docs:r:screencasts_maproulette-workshop-at-state-of-the-map-africa-november-2021-1] -file_filter = _screencasts/04-maproulette-workshop-at-state-of-the-map-africa-november-2021-1..md -source_file = _screencasts/04-maproulette-workshop-at-state-of-the-map-africa-november-2021-1.en_US.md -type = GITHUBMARKDOWN -minimum_perc = 0 -replace_edited_strings = false -keep_translations = false - diff --git a/404.html b/404.html index 4514269..2b8a442 100644 --- a/404.html +++ b/404.html @@ -5,31 +5,33 @@

404

The requested page could not be found

+

Browse the documentation

diff --git a/README.md b/README.md index 4f57f13..e79b883 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,6 @@ Documentation site for MapRoulette.org If you would like to contribute to this documentation, thank you! * If you want to fix a typo, update something that's out-of-date, or add a page or section on a new topic, please feel free to open a PR. Though if you want to add a new page or make large changes to existing content, you should probably open an issue first to gather feedback on your proposed changes. -* If you'd like to help translate existing documentation into other languages, have a look at our [guide on how to contribute translations](https://learn.maproulette.org/en-US/documentation/translate-docs/). * If you have a video or article we should link to, feel free to open an issue and we will look at the best way to include it. ## Technical Details diff --git a/SCREENSHOTS-TODO.md b/SCREENSHOTS-TODO.md new file mode 100644 index 0000000..7c3717d --- /dev/null +++ b/SCREENSHOTS-TODO.md @@ -0,0 +1,46 @@ +# Screenshots to re-shoot + +The prose in `_documentation/` has been brought in line with the current +MapRoulette frontend, but **no images were replaced**. Screenshots of UI that no +longer exists were removed from the pages rather than left in place, since a +picture of a screen the reader can't find is worse than no picture. Everything +removed is listed here so it can be re-shot and dropped back in; the files +themselves are all still in `media/`. + +Pages marked _legacy_ carry a callout saying the feature isn't in the current +frontend. Those keep their old screenshots deliberately — they illustrate how +the feature used to work — and should only change if the feature returns. + +| Page | Removed | What a replacement should show | +|:-----|:--------|:-------------------------------| +| `getting-started/02-discovering-challenges` | `sorting-1`…`sorting-8` | The Explore Challenges filter bar: location search, Sort by, Work on, Difficulty, Global, Clear filters, and the three view-mode buttons. Plus the grid-with-map result view. | +| `advanced/02-markdown` | `markdown_preview.jpg` | Markdown source beside its rendered output, using only CommonMark features (the old shot used a GFM table, which no longer renders). | +| `user-settings/02-setting-your-map-base-layer` | `66154078-…`, `setting-default-baselayer2` | The **Map style** control open on a task map, showing the five bundled base layers. | +| `challenges/08-reporting-a-challenge` | `screen-shot-2021-03-02-…` ×2 | The challenge header's **Comments** button, and the "by _username_" link through to the owner's OSM profile. | +| `mapping/03-solving-multiple-tasks-together` | `66520790-…`, `66521253-…`, `66521347-…`, `66521469-…` | The **Work on multiple tasks** panel with a few tasks selected, and the bundled task list on the Task tab. | +| `challenges/01-creating-a-challenge` | `create-challenge-1`…`create-challenge-4` | The challenge form (project picker, basic info, challenge image, task data, code-of-conduct agreement), and the challenge page after tasks finish building. | +| `tasks/03-setting-external-task-identifiers` | `setting_external_id_field` | Nothing — the setting has no UI. Leave imageless. | +| `challenges/10-exporting-challenge-data` | `export_challenge_data` | **Export CSV** on a project's actions menu under Manage → Projects. | +| `tasks/07-bulk-editing-challenges` | `bulk-edit-1`…`bulk-edit-4` | Task rows selected in a challenge's task table with the bulk actions toolbar showing, and one of its confirmation dialogs. | +| `challenges/07-challenge-comments` | `challenge-comments-2` | The **Comments** button in the challenge header and the Challenge Comments dialog, with **Show task comments** checked. | +| `challenges/09-challenge-flagging` | `challenge-flagging-1`…`challenge-flagging-5` | The **Challenge actions** menu with **Report Challenge**, the report dialog, the **Challenge Reported** state afterwards, and the Super Admin → Challenge Reports queue. | +| `mapping/02-rapid-editor` | `rapid-editor-1` | The built-in iD editor open in the task screen, with its Re-Center / Select Tasks / Focus / Close editor bar. | +| `getting-started/01-your-dashboard` | `dashboard-1`…`dashboard-7` | The three-column dashboard: Saved Challenges, profile and level, Contributions + Locked Tasks + Teams. Plus the Mapper Level System dialog. | +| `projects/01-projects-and-project-managers` | `projects-project-managers-1`, `-2` | Manage → Projects, and a project's page with its challenge list and Project Playbook. | +| `not-implemented/02-reviewing` | `reviewing-1`…`reviewing-6` | Nothing to re-shoot while reviewing is unavailable, beyond the Reviews Received / Reviews Performed blocks on a profile. | +| `tasks/02-using-maproulette-tags` | `mr-tags-1`…`mr-tags-13` (kept `bad-imagery`, `mr-tags-10`, `mr-tags-11`) | The **Edit task tags** dialog with "Popular in this challenge" chips, and the **Tags (Optional)** field in the completion dialog. | +| `mapping/01-using-layouts` _(legacy)_ | `all_the_widgets`, `edit_layout_control`, `export_layout`, `import_layout`, `laying_out_workspace.gif`, `layout_dropdown` | The page is now about the task screen's two resizable panels and its four tabs. Needs one shot of that. | + +## Pages that could use a screenshot but never had one + +- `advanced/01-using-keyboard-shortcuts` — the **Keyboard Shortcuts** dialog (?). +- `user-settings/03-notifications-and-email` — the Notifications page with its filters, saved views and thread pane. +- `getting-started/04-point-scoring` — the Mapper Level System dialog. +- `tasks/01-task-priority-rules` — the prioritization editor with its tier tabs, match counts and preview map. +- `teams/01-teams` — the Teams page with a pending invitation, and a team's page with its members and challenge images. + +## Elsewhere + +- `index.md` (the landing page) still uses `welcome-index.png`, which + shows the previous interface. Replace with a shot of the current Explore + Challenges page. diff --git a/_config.yaml b/_config.yaml index 8ce0b59..c38079d 100644 --- a/_config.yaml +++ b/_config.yaml @@ -11,26 +11,31 @@ collections: output: true -# list of enabled (translated) locales -locales: - - en-US - # - de-DE - # - es - # - fr-FR - # - nl - # - pt-PT - # - ru - -# specifies the order of sections in the sidebar. each entry should match the -# name of a directory in _docs + +# Order of the sidebar sections. Each entry must match a directory name under +# _documentation/. sections: - - new-topics - - basics - - advanced - - creating-challenges + - getting-started + - migrating + - mapping + - user-settings + - projects + - challenges + - tasks - teams + - advanced - server-admin - + +# Pages offered in the search box before anything has been typed. Listed by +# slug; the title and section label are looked up from the page itself, so they +# stay correct if a page is retitled or moved. +recommended_pages: + - discovering-challenges + - your-dashboard + - creating-a-challenge + - using-keyboard-shortcuts + - teams + defaults: - scope: { path: "" } # empty string matches all files in the project values: @@ -40,4 +45,5 @@ exclude: - CODE_OF_CONDUCT.md - LICENSE.md - README.md + - SCREENSHOTS-TODO.md - mise.toml diff --git a/_data/language_names.json b/_data/language_names.json deleted file mode 100644 index 28a4af7..0000000 --- a/_data/language_names.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "af": "Afrikaans", - "cs-CZ": "Čeština", - "de": "Deutsch", - "en-US": "English (U.S.)", - "es": "Español", - "fa-IR": "فارسی", - "fr": "Français", - "it": "Italiano", - "ja": "日本語", - "ko": "한국어", - "nl": "Nederlands", - "pl": "Polski", - "pt-BR": "Português Brasileiro", - "pt-PT": "Português Portugal", - "ru-RU": "Русский", - "sr": "Српски", - "tr": "Türkçe", - "uk": "Українська", - "vi": "tiếng Việt", - "zh-TW": "國語", -} diff --git a/_data/sections.json b/_data/sections.json new file mode 100644 index 0000000..48c1e74 --- /dev/null +++ b/_data/sections.json @@ -0,0 +1,12 @@ +{ + "getting-started": "Getting Started", + "migrating": "Migrating from MR3", + "mapping": "Mapping Tasks", + "user-settings": "User Settings", + "projects": "Projects", + "challenges": "Challenges", + "tasks": "Tasks", + "teams": "Teams", + "advanced": "Advanced", + "server-admin": "Server Admin" +} diff --git a/_data/translations/en-US.json b/_data/translations/en-US.json deleted file mode 100644 index d6b238f..0000000 --- a/_data/translations/en-US.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "section.basics": "Basics", - "section.advanced": "Advanced Topics", - "section.new-topics": "New Topics/Features", - "section.creating-challenges": "Creating and Managing Challenges", - "section.teams": "Working as a Team", - "section.server-admin": "Server Admin", -} diff --git a/_documentation/advanced/01-editing-virtual-challenges.en_US.md b/_documentation/advanced/01-editing-virtual-challenges.en_US.md deleted file mode 100644 index 75a2f34..0000000 --- a/_documentation/advanced/01-editing-virtual-challenges.en_US.md +++ /dev/null @@ -1,31 +0,0 @@ ---- -title: Virtual Challenges ---- - -The core of MapRoulette's fuctionality revolves around the concept of a ‘Roulette’ wheel. The wheel spins and you get a random task! What is nice about this is that you get to improve the map all over the world, and see what the map looks like in faraway places. - -But what if you want to focus on improving one specific area? MapRoulette makes this possible too, with Virtual Challenges. - -A Virtual Challenge is a Challenge that consists of a custom group of Tasks in a small area. You can create a Virtual Challenge quickly and easily yourself, based on the Tasks that are already in MapRoulette. Here’s how you go about this. - -First navigate the map to show the area you are interested in by. If you zoom in far enough, you will see individual tasks appear on the map. - -![](/media/virtual-challenges.png) - -You can apply filters to further narrow down the amount of Tasks. For example, you could add a filter to only work on Easy tasks. - -Once you’re satisfied, you select the ‘Lasso’ button on the right side of the map, and draw a circle around the area of tasks you want to have in your virtual challenge. Then, MapRoulette will ask you to give you new Virtual Challenge a name. - -
- Image 1 - Image 2 -
- -Then, MapRoulette will ask you to give you new Virtual Challenge a name. - -![](/media/virtual-challenges6.png) - -After you set the name, you will be taken to the first random task in you Virtual Challenge. At the top of the Challenge List, you will find a link you can share with others to work on the Tasks together! - -![](/media/virtual-challenges4.png) - diff --git a/_documentation/advanced/01-using-keyboard-shortcuts.md b/_documentation/advanced/01-using-keyboard-shortcuts.md new file mode 100644 index 0000000..dc82593 --- /dev/null +++ b/_documentation/advanced/01-using-keyboard-shortcuts.md @@ -0,0 +1,46 @@ +--- +title: Using Keyboard Shortcuts +--- + +A number of keyboard shortcuts are available while you're working on a task. +The current list is always available in the app itself: press ? on +the task screen to open the **Keyboard Shortcuts** dialog, which shows only the +shortcuts that apply to what you're doing right now, grouped by category. + +At the time of writing, the following shortcuts are available. + +### Task actions + +| Key | Action | +| :------------------------------------------- | :------------------------------ | +| Ctrl/ + F | Mark as Fixed [^1] | +| Ctrl/ + P | Mark as False Positive / Not an Issue [^1] | + +### Map + +| Key | Action | +| :-------------- | :---------------------------------------------------- | +| H | Show or hide all task markers | +| F | Show only the tasks you're working on [^2] | +| Esc | Cancel drawing [^3] | + +### Multi-task + +| Key | Action | +| :----------------- | :------------------------------------------------ | +| D | Start drawing to add tasks to your selection | +| Delete | Leave multi-task mode and work on the primary task only [^2] | + +### Anywhere in MapRoulette + +| Key | Action | +| :------------------------------------------- | :------------------------------ | +| Ctrl/ + K | Open the search box | +| ? | Show the keyboard shortcuts dialog (task screen) | + +[^1]: Only available once you have locked the task, and not while the challenge is paused or a dialog is open. +[^2]: Only available while you have more than one task selected. +[^3]: Only available while you are drawing. + +Shortcuts are ignored while you're typing in a text box, so you can write a +comment containing an `f` or a `?` without triggering anything. diff --git a/_documentation/advanced/02-markdown.md b/_documentation/advanced/02-markdown.md new file mode 100644 index 0000000..4df532d --- /dev/null +++ b/_documentation/advanced/02-markdown.md @@ -0,0 +1,40 @@ +--- +title: Styling Text with Markdown +--- + +MapRoulette supports Markdown for marking up or styling text. Markdown can be +used in most places where long-form text can be entered, such as task comments, +challenge comments, challenge descriptions and challenge instructions. + +## What's supported + +MapRoulette renders [CommonMark](https://commonmark.org/), with one +MapRoulette-specific addition: **a single newline is rendered as a line +break**, so text looks the way it did in the box you typed it into rather than +being reflowed into one paragraph. If you want two lines to run together, +remove the line break in your source text. + +That covers the everyday things: + +- headings (`# Heading`) +- **bold** (`**bold**`) and _italic_ (`_italic_`) +- links (`[text](https://example.com)`) — bare URLs in descriptions and + instructions are turned into links automatically +- bulleted and numbered lists +- `inline code` and fenced code blocks +- block quotes +- images + +## What isn't + +- **Raw HTML.** Unlike GitHub-flavored Markdown, MapRoulette does not render + HTML embedded in Markdown; it is dropped. +- **GitHub extensions.** Tables, strikethrough, task list checkboxes and + footnotes are GFM additions rather than CommonMark, and are not rendered. If + you have older challenge text that relies on a Markdown table, it will appear + as literal pipes and dashes — reach for a list instead. + +## Mentions + +Writing `@username` in a comment links to that user and notifies them. See +[Short-codes in Comments](/documentation/comment-short-codes/). diff --git a/_documentation/advanced/02-using-keyboard-shortcuts.en_US.md b/_documentation/advanced/02-using-keyboard-shortcuts.en_US.md deleted file mode 100644 index 459cc05..0000000 --- a/_documentation/advanced/02-using-keyboard-shortcuts.en_US.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -title: Using Keyboard Shortcuts ---- - -A number of keyboard shortcuts are available when completing tasks. The latest shortcuts can always be seen for the current step by expanding the More Options box in the sidebar and then clicking View Keyboard Shortcuts. - -At the time of writing, the following shortcuts are available: - -| Key | Action | -| :-- | :------------------------------------------------------ | -| + | Zoom in map | -| - | Zoom out map | -| 0 | Fit map to task features | -| s | Toggle task features layer | -| o | Toggle OSM data layer (takes a moment to load) | -| e | Edit in Id | -| r | Edit in JOSM | -| t | Edit in new JOSM layer | -| y | Edit just task features in JOSM | -| v | Edit in Level0 | -| a | Edit in RapiD | -| q | Not an issue | -| w | Skip | -| f | I fixed it [^1] | -| d | Too difficult / couldn't see [^1] | -| x | Already fixed [^1] | -| ESC | Cancel editing [^1] | -| h | Previous Task [^2] | -| l | Next Task [^2] | - -[^1]: shortcut is only available after editing has been initiated -[^2]: shortcut is only available if task has an existing status or is being reviewed by challenge owner - -### Confirmation Step - -- The comment box will now automatically receive focus so you can immediately begin typing your comment -- `Shift` + `Enter` submits confirmation - - diff --git a/_documentation/advanced/03-comment-short-codes.md b/_documentation/advanced/03-comment-short-codes.md new file mode 100644 index 0000000..25001f2 --- /dev/null +++ b/_documentation/advanced/03-comment-short-codes.md @@ -0,0 +1,66 @@ +--- +title: Short-codes in Comments +--- + +## Mention other users + +To "mention" a user, type `@` followed by their username, e.g. `@username`. As +you type, MapRoulette offers matching users to pick from, and inserts the name +for you. The mention is rendered as a link, and the mentioned user receives an +in-app notification that they've been mentioned in a comment. + +**Examples:** + +Mention user "abc": `Hello @abc` + +Mention user "example_user": `Hello @example_user` + +A username containing spaces or punctuation can't be matched that way, so wrap +it in brackets instead: `Hello [@example user]` + +**Behavior:** + +By default, the mentioned user will receive an in-app notification informing +them that they've been mentioned in a comment. Depending on their notification +settings, they may also receive an email notification, or the notification may +be ignored completely. + +## Reference OSM elements and map viewports + +Short-codes are surrounded by brackets (`[` and `]`). They work in comments and +in challenge instructions alike. + +### Reference an OpenStreetMap element (node, way, or relation) + +To reference a node, way, or relation, use `n`, `w`, or `r` followed by an +optional space or slash, followed by the OSM id. `node`, `way`, or `relation` +can also be fully spelled out. + +Reference node 123456789: `[n123456789]` (or, equivalently, `[n 123456789]` or +`[n/123456789]`) + +Reference way 24681012: `[w24681012]` + +Multiple elements can be combined in a single short-code by separating them +with commas: `[n123456789, w24681012]` + +Each is rendered as a link to the element on OpenStreetMap. + +### Reference a map viewport + +To reference a specific location, use `v` followed by an optional space or +slash, followed by slash-separated zoom, latitude, and longitude: +`[v17/37.11777/126.99754]`. A complete OSM map URL can be used instead, e.g. +`[https://www.openstreetmap.org/#map=17/37.11777/126.99754]`. + +These are rendered as links to OpenStreetMap at the referenced location and +zoom. + +> Ordinary Markdown links are left alone: `[the wiki](https://wiki.osm.org)` is +> still a link, not a short-code. So is bracketed prose that doesn't match one +> of the forms above. + +> Earlier versions of MapRoulette could load a referenced element straight into +> JOSM, or zoom a running JOSM to a referenced viewport, for readers who had it +> configured as their editor. References now always open OpenStreetMap. +{: .legacy} diff --git a/_documentation/advanced/03-using-layouts.en_US.md b/_documentation/advanced/03-using-layouts.en_US.md deleted file mode 100644 index 12d618f..0000000 --- a/_documentation/advanced/03-using-layouts.en_US.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: Using Layouts ---- - -### Widget Workspaces and Dashboards - -Various dashboards and workspaces in MapRoulette -- including the task-completion workspace where mappers complete tasks -- make use of individual **widgets** that can be mixed, matched, added, removed, resized, and reordered to create custom workspace and dashboard layouts. Each widget is represented by a box on the screen that offers specific functionality. Widget layouts can be customized, saved, and named -- with easy switching between them -- and can even be exported and imported to allowing sharing of useful or favorite layouts with others. - -![](/media/all_the_widgets.png) - -_These are all individual widgets. Some are titled while some, such as the Task Map, are not._ - -It's hard to create a one-size-fits-all workspace, both in terms of optimizing for screen-size (some users are on 13-inch laptops while others are using 27-inch HiDPI desktop displays or even dual displays) and mapper experience -- expert mappers may wish to see more data and access more advanced functionality that a beginner would find intimidating or even overwhelming. Customizable layouts solve these problems by allowing each mapper to tailor their workspace to their needs, situation, and personal preferences, and even to create multiple layouts for different scenarios (e.g. a laptop layout and a desktop layout). - -MapRoulette tends to default to simple layouts suitable for beginners that are comfortable to work with on a 15-inch laptop screen, but still usable on a 13-inch laptop screen. - -### Customizing a Layout - -Layouts are easy to customize by clicking the "Edit Layout" button. - -![](/media/edit_layout_control.png){:width="500"} - - -Once clicked, you'll enter a special mode that allows you to move widgets around, add new widgets to the workspace from the "Add Widget" menu at the top, remove widgets using the red "Delete Widget" control on the top-right of most widgets, and resize widgets by dragging the resize-control found on the bottom-right of each widget. You also can rename your layout to give it a more descriptive name. When you're finished, click the "Done" button at the top-right of the workspace. - -> Note that some widgets may be required for proper operation of the workspace/dashboard and will not have a Delete control. For example, the Completion widget containing the various task-completion controls is required on the task-completion workspace and does not offer a Delete control - -![](/media/laying_out_workspace.gif) - -### Adding, Deleting, and Switching between Layouts - -Beneath the "Edit Layout" button you'll find a dropdown menu that contains additional controls, including options for adding a new layout, switching to a different layout you've previously created, or even deleting the current layout (careful, as this cannot be undone). - - -![](/media/layout_dropdown.png) - -### Exporting and Importing Layouts - -The Layout dropdown menu (shown above) also contains options for exporting and importing layouts. Exporting allows you to download the layout configuration, which can then later be imported by you or someone else should you choose to send it to them. This can be especially useful for teams or at mapping parties. When you choose to export a layout, you'll be given an option to choose a new name in case something more generic would be more appropriate. The name you provide will be used to initially name the layout when it is later imported. Click the "Download" button when you're ready. - -![](/media/export_layout.png) - -Importing works the opposite way: simply click to choose a layout file to upload. - -![](/media/import_layout.png) - diff --git a/_documentation/advanced/04-using-mapillary-images.en_US.md b/_documentation/advanced/04-using-mapillary-images.en_US.md deleted file mode 100644 index 197d9b9..0000000 --- a/_documentation/advanced/04-using-mapillary-images.en_US.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: Using Mapillary Images ---- - -The Mapillary integration shows Mapillary image locations relevant to the task location, and we use the native Mapillary viewer widgets, so you can zoom in and easily skip to the next or previous images in a Mapillary sequence. - -![](/media/mapillary-integration.png) - diff --git a/_documentation/advanced/04-using-mapillary-images.es.md b/_documentation/advanced/04-using-mapillary-images.es.md deleted file mode 100644 index 2222f06..0000000 --- a/_documentation/advanced/04-using-mapillary-images.es.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: Using Mapillary Images ---- - -La integración con Mapillary muestra ubicaciones de imágenes relevantes a la zona de la tarea, y dado a que usamos los controles nativos del visor de Mapillary, puede hacer acercamientos y saltar a la imagen anterior o siguiente de una secuencia con facilidad. - -![](/media/mapillary-integration.png) - diff --git a/_documentation/advanced/04-using-mapillary-images.ru.md b/_documentation/advanced/04-using-mapillary-images.ru.md deleted file mode 100644 index d2a2ffd..0000000 --- a/_documentation/advanced/04-using-mapillary-images.ru.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: Using Mapillary Images ---- - -Интеграция с Mapillary позволет отображать геометки изображений Mapillary, соответствующие местоположению задачи, и мы используем собственные виджеты просмотра Mapillary, поэтому вы можете увеличивать масштаб и легко переходить к следующему или предыдущему изображению Mapillary в последовательности. - -![](/media/mapillary-integration.png) - diff --git a/_documentation/advanced/05-solving-multiple-tasks-together.en_US.md b/_documentation/advanced/05-solving-multiple-tasks-together.en_US.md deleted file mode 100644 index 7a8b941..0000000 --- a/_documentation/advanced/05-solving-multiple-tasks-together.en_US.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: Solving Multiple Tasks Together ---- - -Many MapRoulette Challenges have Tasks that are geographically so close together that it is more efficient to solve multiple close Tasks together as if it were one Task. MapRoulette offers a workflow for this since version 3.4.2. - -To use the Multiple Tasks workflow, you need to add the **Multi-Task Work** Widget to your Task screen. To do this, click _Edit Layout_ in the right top corner of your Task screen, and use the _Add Widget_ dropdown menu to add add it to your Layout. - -![multiple tasks widget](/media/66520790-5ec0b080-ead9-11e9-8f87-3eac0de6ec1d.png){:width="300"} - - -You may want to [create a separate Layout](/en-US/documentation/using-layouts/) just for Multi-Task work to further optimize your mapping workflow. Here's an example where you see the Multi-Task Widget and the regular Map Widget side by side. Such a Layout allows you to see the Task you've been assigned, while at the same time having visibility on other Tasks that are close together: - -![screenshot of an example multi task layout](/media/66521253-5321b980-eada-11e9-9170-168e4ed4e5f9.png) - -The Multi-Task window lets you select multiple tasks either using the Task list or by clicking the markers on the minimap. Here we have a few tasks that are close together selected: - -![screenshot of multi-task widget with some tasks selected](/media/66521347-7fd5d100-eada-11e9-9157-5ce931a67976.png){:width="600"} - - -The Task Completion section will now offer two options, either _Complete Together_ or _Cancel Selection_. If you click _Complete Together_, the Task map will show all the task features that you selected in the Multi-Task Widget, the separate Tasks are now bundled into one Task. - -![Screenshot of Task screen showing bundled tasks](/media/66521469-bf042200-eada-11e9-878b-a7211fa4ae71.png) - -Solving this Bundled Task works the same as solving a single Task. If you change your mind, the Multi-Task Widget offers the option to Unbundle the Tasks. - diff --git a/_documentation/advanced/06-comment-short-codes.en_US.md b/_documentation/advanced/06-comment-short-codes.en_US.md deleted file mode 100644 index 3d5ae2c..0000000 --- a/_documentation/advanced/06-comment-short-codes.en_US.md +++ /dev/null @@ -1,64 +0,0 @@ ---- -title: Short-codes in Comments ---- - -MapRoulette offers a "short-code" mechanism in Task comments for providing enhanced references to things like OpenStreetMap nodes/ways/relations and zoom/lat/lon map viewports. Short-codes are always surrounded by brackets (`[` and `]`). - -The following short-codes are currently supported: - -## Reference an OpenStreetMap element (node, way, or relation) -- or multiple elements together - -To reference a node, way, or relation, use `n`, `w`, or `r` followed by an optional space or slash, followed by the OSM id. - -> Note: `node`, `way`, or `relation` can also be fully spelled out, if preferred - -**Examples:** - -Reference node 12345689: `[n123456789]` (or, equivalently, `[n 123456789]` or `[n/123456789]`) - -Reference way 24681012: `[w24681012]` (or, equivalently, `[w 24681012]` or `[w/24681012]`) - -Multiple elements can be combined in a single short-code by separating them with commas: -`[n123456789, w24681012]` - -**Behavior:** - -OSM Element short-codes will be displayed as browser links to an Overpass Turbo page that will render the referenced element(s). However, if the reader has configured JOSM as their current MapRoulette editor, then clicking on the link will instead load the referenced elements into JOSM. - -## Reference a map viewport - -To reference a map viewport of a specific location, use `v` followed by an optional space or slash, followed by slash-separated zoom, latitude, and longitude. - -> Note: `viewport` can also be fully spelled out, if preferred - -**Examples:** - -Reference location 37.11777, 126.99754 at zoom 17: `[v17/37.11777/126.99754]` (or, equivalently, `[v 17/37.11777/126.99754]` or `[v/17/37.11777/126.99754]`) - -For convenience, a complete OSM map url can also be used instead, e.g. `[https://www.openstreetmap.org/#map=17/37.11777/126.99754]` -- notice that it is *not* started with a `v` in that case - - -**Behavior:** - - -Viewport short-codes will be displayed as links to OpenStreetMap for the referenced location at the specified zoom. However, if the reader has configured JOSM as their current MapRoulette editor, then clicking on the link will instead zoom JOSM to the referenced viewport. - - -## Mention other users - -To "mention" a user, use `@` followed by their username, e.g. `[@username]`. For simple usernames that don't contain any spaces or punctuation, a simplified `@username` (ommitting the square brackets) can also be used. The user will receive an in-app notification that they've been mentioned in a comment, unless they've chosen to disable those notifications. - -**Examples:** - -Mention user "abc" (no spaces or punctuation): `Hello [@abc]` or `Hello @abc` - -Mention user "example user" (with spaces): `Hello [@example user]` - -Mention user "example.user" (with punctuation): `Hello [@example.user]` - - -**Behavior:** - -By default, the mentioned user will receive an in-app notification informing them that they've been mentioned in a comment. Depending on how the user has customized their notification settings, however, they may also receive an email notification (either immediately or rolled up into a daily digest of notifications) or the notification may be ignored completely. - - diff --git a/_documentation/advanced/07-searchbox-short-commands.en_US.md b/_documentation/advanced/07-searchbox-short-commands.en_US.md deleted file mode 100644 index 521bcc1..0000000 --- a/_documentation/advanced/07-searchbox-short-commands.en_US.md +++ /dev/null @@ -1,60 +0,0 @@ ---- -title: Searchbox Short-Commands ---- - -When searching for challenges, the search box supports short-commands that can be used to execute alternative searches or alter search behavior. For example, the map can be instantly relocated to a bounding box or centerpoint (perhaps copied and pasted from another source) -- or to a named geographic region -- rather than having to manually pan and zoom to the target area. - -## List of Supported Commands: -`m/` Move the map to either a WSEN bounding box or a lon,lat centerpoint - -`n/` Perform [nominatim](https://nominatim.openstreetmap.org/) search of geographic name and move map to resulting bounds - -`p/` Search by project name - - -## Details and Examples -`m/` Move the map to either a bounding box (west, south, east, north) or a centerpoint (lon, lat) - -> Note: if you wish to also filter challenge results geographically, be sure to change your Location filter to "Intersecting Map Bounds" or "Within Map Bounds" as desired - -### Examples: - -Move map to WSEN bounding box -``` -m/-10.9313964,34.2526761,-0.1977539,40.9467136 -``` - -Move map to lon,lat centerpoint -``` -m/2.17,41.34 -``` ---- - -`n/` Perform [nominatim](https://nominatim.openstreetmap.org/) search of geographic name and move map to resulting bounds - -> Note: if you wish to also filter challenge results geographically, be sure to change your Location filter to "Intersecting Map Bounds" or "Within Map Bounds" as desired - -### Examples: -Move map to California -``` -n/california -``` - -Move map to Moscow -``` -n/moscow -``` ---- -`p/` performs a case-insensitive search by project name, presenting challenges that are in a project matching (or partially matching) the searched name - -### Examples: -Show challenges in the mvexel project -``` -p/mvexel -``` - -Show challenges in projects with "TIGER" in their name -``` -p/tiger -``` - diff --git a/_documentation/basics/01-discovering-challenges.en_US.md b/_documentation/basics/01-discovering-challenges.en_US.md deleted file mode 100644 index 049843b..0000000 --- a/_documentation/basics/01-discovering-challenges.en_US.md +++ /dev/null @@ -1,66 +0,0 @@ ---- -title: Discovering Interesting Tasks and Challenges ---- - -How do you find things that you are interested in fixing? MapRoulette offers a number of ways that we'll talk about on this page. -![](/media/sorting-8.png) - -# Sorting - -The Challenge list has a default 'Smart' sorting strategy that puts Featured and Popular Challenges at the top of the list. Featured Challenges are interesting Challenges that are hand-picked by the OSM community, and Popular Challenges are the ones that have seen the most activity recently. You can use the dropdown menu at the top of the Challenge list to sort the list by other criteria. - -![](/media/sorting-1.png){:width="500"} - - -# Filtering - -MapRoulette offers powerful filters to help you uncover Challenges you may be interested in. There are five types of filters at the moment: Topic, Difficulty, Custom Categorization Keywords, Text, and Location. - -You can combine these filters as you wish. - -## By Topic - -The creator of a Challenge will assign a Topic to it from a pre-defined list. For example, a Challenge that looks at fixing coastlines will have the topic 'Water', and a Challenge that looks at fixing the tagging of Burger King restaurants will fall under 'Points / Areas of Interest'. You can select one of these Topics to quickly narrow down the list to only show the relevant Challenges. - -![](/media/sorting-2.png){:width="500"} - - -## By Difficulty - -When someone creates a Challenge, they decide if this is an Easy, Medium, or Expert level Challenge. Tasks in an Easy Challenge should be fixable by mappers with little experience. Working on Expert level Challenges requires advanced mapping skills and intimate familiarity with OSM tagging practices. - -![](/media/sorting-3.png){:width="500"} - - -## By Custom Categorization Keywords - - When a challenge is created, the challenge owner has the opportunity to create categorization keywords. This filter allows users to create custom keyword filters that can be used to filter for challenges with matching categorization keywords. - -![](/media/sorting-4.png){:width="500"} - - -The categorization keywords being sorted through are declared here in the challenge creation form. - -![](/media/sorting-7.png){:width="500"} - - -## By Text or Id - -You can type any text you want into the text search box at the top to narrow down the list by any phrase you want. The filter will look at text in the titles and descriptions when searching by Challenge or Project, and will search for a task by its Id when searching for a task. - -![](/media/sorting-5.png){:width="500"} - - -## By Location - -MapRoulette Challenges cover the entire world. But if you only want to filter for challenges in a particular location, you can use the location to filter for tasks based on a country, state, city, road, or various other landmarks related to the challenges you are wanting to find. - -![](/media/sorting-6.png){:width="500"} - - -If you allow browser geolocation, you can also use 'Near Me' to focus on Challenges that cover your current location. - -> The location filters use the Challenges' bounding boxes to match location. It is not guaranteed that all Challenges in the results list will actually have Tasks within the map extent. - -See also [Virtual Challenges](/en-US/documentation/editing-virtual-challenges/) for a different way to work on all Tasks within a small geographical area. - diff --git a/_documentation/basics/02-setting-your-default-osm-editor.en_US.md b/_documentation/basics/02-setting-your-default-osm-editor.en_US.md deleted file mode 100644 index 95e19d8..0000000 --- a/_documentation/basics/02-setting-your-default-osm-editor.en_US.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: Setting your default OSM Editor ---- - -When you click _Edit_ in a Task, you are sent to an OSM Editor to edit OSM and resolve the task. Everyone has their own preference of OSM Editor, and you can set this preference in your [User Settings](https://maproulette.org/user/profile). - -![](/media/setting-default-editor.png) - -The available options are: - -- Edit in iD (web editor) -- Edit in JOSM -- Edit in new JOSM layer -- Edit just features in JOSM -- Edit in Level0 -- Edit in RapiD - -Notice that for JOSM, you have three different options. You can load the data within the Task bounding box in the currently active data layer, or in a new data layer every time. Alternatively, you can load only the relevant OSM features, instead of all data in the bounding box. - -Note that you don't have to 'save' changes in your user settings, they are applied immediately when you make a change to any of them. - -Because many mappers use different editors based on the task at hand, MapRoulette also lets you set your preferred editor quickly in the Task screen: - -![](/media/editors-1.png){:width="600"} - - -And finally, regardless of your selected editor, you can always use a [keyboard shortcut](/en-US/documentation/using-keyboard-shortcuts/) to open a specific editor during task completion. - diff --git a/_documentation/basics/03-notifications-and-email.en_US.md b/_documentation/basics/03-notifications-and-email.en_US.md deleted file mode 100644 index f8e8923..0000000 --- a/_documentation/basics/03-notifications-and-email.en_US.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: Notifications and Email ---- - -You can now get notified of events in MapRoulette that may be important to you. The notifications will show up in the new Inbox that you can find in the user dropdown menu. If you have new notifications, there will be a red dot: - -![](/media/notificationsandemail.png){:width="500"} - - -Currently, MapRoulette will notify you about the following things: - -- **System messages** — important MapRoulette system events, like planned downtime. These will be very infrequent. -- **Mentions** — Be notified when someone mentions you in a comment. -- **Accepted** — Be notified when one of your tasks was reviewed and accepted. -- **Rejected** — Be notified when one of your tasks was reviewed and the reviewer asked you to revise the work. -- **Revised** — Be notified when one of your tasks was reviewed and accepted, but the reviewer made some OSM edits. - -You can set individual notification preferences for each of these in your User Settings. There are four notification levels: - -1. **Ignore** — no notification whatsoever -2. **Receive but do not email** — you will see the notification in your MapRoulette Inbox, but no emails are sent -3. **Receive and email immediately** — you will see the notification in your MapRoulette Inbox, and an email will be sent to the address in your User Profile as the event happens -4. **Receive and email daily** — you will see the notification in your MapRoulette Inbox, and the notification will be added to a daily email digest that will be sent to the address in your User Profile - -Right now, MapRoulette does not require email validation, so please make sure that the email address you enter is valid and yours. - diff --git a/_documentation/basics/04-markdown.en_US.md b/_documentation/basics/04-markdown.en_US.md deleted file mode 100644 index 9a4e6bf..0000000 --- a/_documentation/basics/04-markdown.en_US.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: Styling Text with Markdown ---- - -MapRoulette supports a variant of Markdown for marking up or styling text. Markdown can be used in most places where long-form text can be entered, such as task comments, challenge descriptions, challenge instructions, etc. - -The variant supported by MapRoulette is inspired by [Github-flavor Markdown](https://help.github.com/en/github/writing-on-github/basic-writing-and-formatting-syntax) (often abbreviated as GFM). Most -- though not all -- GFM is supported by MapRoulette. One notable exception: whereas GFM allows some raw HTML, MapRoulette does not. - -Below is screenshot showing some commonly used bits of Markdown on the left, with a preview on the right of how that Markdown will appear to users: - -![](/media/markdown_preview.jpg) - diff --git a/_documentation/basics/05-setting-your-map-base-layer.en_US.md b/_documentation/basics/05-setting-your-map-base-layer.en_US.md deleted file mode 100644 index b2d5498..0000000 --- a/_documentation/basics/05-setting-your-map-base-layer.en_US.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: Setting your Map Base Layer ---- - -Depending on the type of Task and the geographical area you are working on, you may want to use a different base layer for the Task map. You can quickly switch between the available layers right in the Map Widget: - -![](/media/66154078-4863b200-e60c-11e9-964c-880c362fe122.png){:width="800"} - - -You can set your default choice for your preferred map base layer in your User Settings: - -![](/media/setting-default-baselayer.png) - -The list of layers is retrieved from the Editor Layer Index, so the options should always be the same as those available from within JOSM and iD. - -## Challenge Default - -The creator of the Challenge you work on may set an appropriate base layer for the map, which will be selected by default when you start working on that Challenge. You can still override this in the Map Widget. - -## Custom base layers - -_Advanced_ - -If you have a custom TMS tile layer source you want to use, you can select 'Custom' from the list in your User Settings, and add the layer using the same URL pattern used [in QGIS](https://docs.qgis.org/3.22/en/docs/user_manual/managing_data_source/opening_data.html#using-xyz-tile-services) and [Leaflet](https://leafletjs.com/reference.html#tilelayer), for example: - -`https://tiles.somewhere.com/blabla/{z}/{x}/{y}.png` - -![](/media/setting-default-baselayer2.png){:width="600"} - - diff --git a/_documentation/basics/06-point-scoring.de_DE.md b/_documentation/basics/06-point-scoring.de_DE.md deleted file mode 100644 index 2825aa8..0000000 --- a/_documentation/basics/06-point-scoring.de_DE.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Earning Points and the Leaderboard ---- - -Für jede abgeschlossene Aufgabe werden wie folgt Punkte vergeben: - -| Aufgaben Status | vergebene Punkte | -| ----------------- | :------------: | -| Fixed | 5 | -| Not an Issue | 3 | -| Already Fixed | 3 | -| Too Hard | 1 | -| Skipped | 0 | - diff --git a/_documentation/basics/06-point-scoring.en_US.md b/_documentation/basics/06-point-scoring.en_US.md deleted file mode 100644 index 85cb59c..0000000 --- a/_documentation/basics/06-point-scoring.en_US.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Earning Points and the Leaderboard ---- - -Points are awarded for each task that is completed as follows: - -| Completion Status | Points Awarded | -| ----------------- | :------------: | -| Fixed | 5 | -| Not an Issue | 3 | -| Already Fixed | 3 | -| Too Hard | 1 | -| Skipped | 0 | - diff --git a/_documentation/basics/07-reporting-a-challenge.en_US.md b/_documentation/basics/07-reporting-a-challenge.en_US.md deleted file mode 100644 index 22892a2..0000000 --- a/_documentation/basics/07-reporting-a-challenge.en_US.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: Reporting A Challenge ---- - -From time to time, a Challenge is created in MapRoulette that is poorly designed. The instructions may be unclear or even tell mappers to 'fix' the map in a way that goes against OSM best practices and conventions. Bad Challenges have no place in MapRoulette and we want you to be confident that we will deal with them if we need to. - -This page describes the steps you can take to resolve an issue with a MapRoulette Challenge. This process is a lot like the process you would follow when you notice a questionable edit in OSM made outside of MapRoulette. - -### 1. Contact the Challenge owner - -The first step is to contact the owner of the Challenge and explain the issue you encountered to them. Most of the time, you can have a constructive dialog with the owner and resolve the issue with them. Remember to assume good intent on the part of the Challenge owner and be respectful in your language. - -To contact the owner, go to any task in the Challenge and click on the three dot menu next to the Challenge name. - -![](/media/screen-shot-2021-03-02-at-2.26.20-pm.png) - -In the dropdown menu, select 'Contact Challenge Owner'. MapRoulette will then look up the OSM user who created the Challenge, and the link changes to 'Message \[user] through OSM': - -![](/media/screen-shot-2021-03-02-at-2.26.28-pm.png) - -Clicking on that item will take you to OSM's native messaging interface, where you can send the Challenge owner a message. The discussion will flow through the OSM messaging system from there on. - -If you can't come to an agreement on how to proceed, the next step is to get in touch with us. - -### 2. Comment on the Challenge - -You can raise awareness of a concern or item for a specific challenge using [Challenge Comments](/en-US/documentation/challenge-comments). This feature not only helps create dialogue with the Challenge owner but all interested mappers wanting to assist. - -### 3. Challenge Flagging - -If reaching out to the challenge owner is proving unsuccessful, and there is continued concern of a challenge's integrity, please use the [Challenge Flagging](/en-US/documentation/challenge-flagging) feature. - -### 4. Contact us via email - -If the Challenge owner does not respond in a reasonable time, or you can't come to an agreement on how to proceed, please get in touch with us by sending an email to maproulette@maproulette.org. Please include a link to the offending Challenge in your message, along with a short summary of the issue you encountered and what you have done to try and resolve it. We will then work directly with you and the Challenge owner (if we can reach them) to work it out. - -We hope that with this, we have defined a clear and unambiguous process to deal with Challenges that lead to bad edits in OSM. Thanks for helping to keep MapRoulette a great place to find interesting tasks to help improve OSM! - diff --git a/_documentation/basics/08-tag-fix-challenges.en_US.md b/_documentation/basics/08-tag-fix-challenges.en_US.md deleted file mode 100644 index 685c901..0000000 --- a/_documentation/basics/08-tag-fix-challenges.en_US.md +++ /dev/null @@ -1,33 +0,0 @@ ---- -title: Tag Fix Challenges ---- - -[Learn about creating tag fix challenges](/en-US/documentation/creating-cooperative-challenges/#creating-tag-fix-challenges) - -MapRoulette serves you quick tasks that make it easy for you anyone to find something meaningful to map. The way that worked until now required loading the data related to the Task into JOSM or iD, fixing it there, and returning to MapRoulette to say you fixed it, and then move on. - -Now, we’re introducing a new type of Task: the **Tag Fix**. In a Tag Fix Task, MapRoulette will present the suggested fix to you, and all you need to do is click Yes to agree with the fix, and the change will be applied to OSM directly. - -Let’s look at an example. Consider this aerial image of a Wendy’s restaurant: - -![](/media/tagfix.png){:width="500"} - - -You can see from the aerial imagery that this restaurant has a `drive_through`: you can see cars snaking around the structure on a dedicated lane. - -However, this restaurant does not have `drive_through=yes` in OSM. A simple fix that MapRoulette Tag Fixes are ideally suited for. - -As an example, I created a [Tag Fix Challenge](https://maproulette.org/browse/challenges/9411) to add the `drive_through=yes` tag to Wendy’s restaurants that have drive-through lanes but are not tagged as such in OSM yet. When you go to the Challenge and get your first Task, you will see a screen much like this one: - -![](/media/tagfix2.png) - -*I changed the layout for my MapRoulette Task screen to see the most relevant information. [You can do this too]().* - -At the top is the suggested change to OSM tags. By default you only see what will be changed. In this case there is a blue ➕ indicating that a new tag is proposed. You have the option to see all tags as well. - -The Completion options are different. You can click YES to accept the tag change, which will then be applied to OSM. If you click NO, nothing happens and you will be given a new task. - -I invite you to try it out and leave feedback here or email at [maproulette@maproulette.org](mailto:maproulette@maproulette.org). Thanks and happy mapping! - -For this to work, MapRoulette needs additional permissions from your OSM account, to modify the map on your behalf. You may need to log out and log back in if you have trouble. - diff --git a/_documentation/challenges/01-creating-a-challenge.md b/_documentation/challenges/01-creating-a-challenge.md new file mode 100644 index 0000000..d6241b9 --- /dev/null +++ b/_documentation/challenges/01-creating-a-challenge.md @@ -0,0 +1,140 @@ +--- +title: Creating a Challenge +--- + +Creating a challenge starts with a good challenge idea. Good challenges have +tasks that: + +- Are easy to solve (typically less than one minute) +- Do not require local knowledge +- Involve only one or two OSM objects + +Let's work through an example. We will ask mappers to review `motorway_junction` +nodes in the United States that have `name` tags. This is uncommon in the U.S. +Often mappers will add a name tag that has the destination information on it, so +the information renders on the map. + +This [Overpass query](https://overpass-turbo.eu/?Q=area%5Bname%3D%22United%20States%20of%20America%22%5D-%3E.a%3B%0Anode%5B%22highway%22%3D%22motorway_junction%22%5D%5B%22name%22%5D(area.a)%3B%0Aout%20meta%3B%0A&C=40.66202;-111.87756;12) +selects all these nodes. + +``` +area[name="United States of America"]->.a; node["highway"="motorway_junction"]["name"](area.a); out meta; +``` + +## Getting to the form + +Challenges live inside projects, so you need a project first. Open the user +menu and choose **Manage**, then **Projects**. If you don't have one yet, +**Create Project** makes one; otherwise open the project that should hold your +new challenge and choose **Create challenge**. + +You can also go straight to **Manage → Challenges → Create New Challenge** and +pick the project from the form's project picker. + +## Filling in the form + +The challenge form is a single page, in four sections. + +### Project + +Which project the challenge belongs to. You can only pick projects you manage. +(This is only asked when creating; to move an existing challenge later, use +**Move challenge** in its actions menu.) + +### Basic information + +- **Name** — a descriptive name. I used *Review named motorway junctions in + USA*. A good title describes what the challenge is about in a few words. At + least 3 characters. +- **Description** — some text describing in more words what the challenge is + about. This field supports [Markdown](/documentation/markdown/) and + appears on the challenge page when mappers browse for interesting challenges. + I used *Motorway junction nodes are not commonly tagged with name. This + challenge asks mappers to review those nodes, removing the name where it's not + applicable.* +- **Instructions** — perhaps the most important text. Here you tell mappers + exactly what task you want them to perform. Be specific and use links (this + field supports Markdown as well) to the OSM wiki or other external sources + where needed. This text is shown beside the map of the task location. +- **Difficulty** — **Easy**, **Normal** or **Expert**. Leave this at Normal + unless your tasks are particularly easy or hard. + +Description and Instructions are both required. + +### Task data + +Choose one of three sources for the challenge's tasks: + +- **I want to provide an Overpass query** — Overpass QL that generates the + tasks. See [Using Overpass to create + Challenges](/documentation/using-overpass-to-create-challenges/) for + important details and common pitfalls; in particular, don't use Overpass + Turbo-specific syntax such as `{% raw %}{{geocodeArea:...}}{% endraw %}`, and test your query in + Overpass Turbo first. +- **I want to upload a GeoJSON file** — a GeoJSON file from your computer. + Standard GeoJSON and [line-by-line + GeoJSON](/documentation/line-by-line-geojson/) are both supported. +- **I have a URL to the GeoJSON data** — a URL pointing directly at the raw + GeoJSON file, not at a page linking to it. See [Hosting Remote GeoJSON with + Gists](/documentation/gists-for-remote-geojson/). + +You can also record the [date the data was +sourced](/documentation/defining-task-sourced-date/) here. + +Make sure that your query or file only returns the features that you want +mappers to review, and ideally the number of objects should be no more than a +couple of thousand. + +> The data source is fixed once the challenge is created. Editing a challenge +> shows the source read-only; to regenerate tasks from updated data, use +> [Rebuild Tasks](/documentation/rebuilding-challenge-tasks/). + +### Challenge image + +An optional image shown on this challenge's card. The images available to you +are the ones your [teams](/documentation/teams/) have had approved: any +team member can request an image from the team's page, and a super admin +reviews it before it can be used here. + +### Basemap + +Optionally force a base layer for this challenge's maps, overriding whatever +each mapper has chosen for themselves — useful when the tasks can only be +judged against particular imagery. See [Setting The Basemap Layer For Your +Challenge](/documentation/setting-basemap-for-challenge/). + +### Task settings + +- **OSM/External Id Property** — the feature property holding each task's + identifier. Leave it blank to let MapRoulette detect it. See [Setting + External Task Identifiers](/documentation/setting-external-task-identifiers/). +- **Preferred MR Tags (task completion)** — the tags the challenge suggests to + mappers, with an option to accept only those tags. See [Using MapRoulette + Tags](/documentation/using-maproulette-tags/). + +### Automated Edits code of conduct + +Before creating a challenge you must confirm that you have read and understand +OpenStreetMap's [Automated Edits code of +conduct](https://wiki.openstreetmap.org/wiki/Automated_Edits_code_of_conduct). +Make sure that your Challenge is designed to encourage careful human attention +to each task, in that spirit. + +## After you submit + +**Create Challenge** saves the challenge and starts building its tasks. If you +used an Overpass query, MapRoulette runs it in the background; depending on how +heavy the query is, this can take a few seconds to a couple of minutes. The +challenge page shows **Tasks Building…** with an elapsed timer and refreshes +itself as it progresses, then shows your tasks on a map with a task table and +challenge statistics. + +From there you can: + +- **Start challenge** to try it out yourself +- **Configure prioritization** to decide which tasks get served first — see + [Prioritizing Tasks](/documentation/task-priority-rules/) +- Use **Make discoverable** in the challenge's actions menu when you're ready + for it to appear in search results — a challenge is discoverable only when + both it and its project are. See [Challenge Visibility and + Discovery](/documentation/challenge-visibility-and-discovery/) diff --git a/_documentation/creating-challenges/02-using-overpass-to-create-challenges.en_US.md b/_documentation/challenges/02-using-overpass-to-create-challenges.md similarity index 88% rename from _documentation/creating-challenges/02-using-overpass-to-create-challenges.en_US.md rename to _documentation/challenges/02-using-overpass-to-create-challenges.md index fdca721..c95eb52 100644 --- a/_documentation/creating-challenges/02-using-overpass-to-create-challenges.en_US.md +++ b/_documentation/challenges/02-using-overpass-to-create-challenges.md @@ -19,10 +19,13 @@ out meta; Explaining the full syntax of Overpass QL (the language this query is written in) is outside the scope of this article. Please look at the [language reference](https://wiki.openstreetmap.org/wiki/Overpass_API/Overpass_QL), [examples](https://wiki.openstreetmap.org/wiki/Overpass_API/Overpass_API_by_Example) and other Overpass related pages on the OSM wiki. OSM user Binette also has some [MapRoulette specific query examples](https://wiki.openstreetmap.org/wiki/User:Binnette/OverpassQueries) on their user page. You can plug this query right into MapRoulette when you create a Challenge: +paste it into **Overpass QL** in the challenge form's **Task data** section, +after choosing *I want to provide an Overpass query*. ![](/media/87983753-1f76b580-ca96-11ea-89d0-c6373a54031e.png) -After completing the Challenge wizard, your Tasks will reflect the result of the Overpass Query: +Once you submit the form, MapRoulette runs the query in the background and your +Tasks reflect its result: ![](/media/87983923-606eca00-ca96-11ea-8ba4-c06bdf0ff1df.png) @@ -60,6 +63,13 @@ way["highway"="path"](40.76,-111.90,40.81,-111.85); out geom; ``` +### The query can't be edited later + +A challenge's Overpass query is set when the challenge is created and is shown +read-only when you edit the challenge afterwards. To change what the query +returns, use [Rebuild Tasks](/documentation/rebuilding-challenge-tasks/), +which re-runs it against current data. + ### Timeouts Complex queries or queries that span a large area can take a long time to complete. MapRoulette uses a default query timeout of 180 seconds (3 minutes). This should be enough for most scenarios. If you really need MapRoulette to tell Overpass to wait longer, you can use [Overpass's native `[timeout]` setting](https://wiki.openstreetmap.org/wiki/Overpass_API/Overpass_QL#timeout:) to override this. diff --git a/_documentation/creating-challenges/03-gists-for-remote-geojson.en_US.md b/_documentation/challenges/03-gists-for-remote-geojson.md similarity index 86% rename from _documentation/creating-challenges/03-gists-for-remote-geojson.en_US.md rename to _documentation/challenges/03-gists-for-remote-geojson.md index 04d4df3..e8b514d 100644 --- a/_documentation/creating-challenges/03-gists-for-remote-geojson.en_US.md +++ b/_documentation/challenges/03-gists-for-remote-geojson.md @@ -15,5 +15,5 @@ to: ``` https://gist.githubusercontent.com/youruser/abcd123/raw/yourTasks.json ``` -* Github caches the latest version of your gist, so you may need to wait 5-10 mins after editing your gist before the cache is updated and the latest raw content is served. If you're planning to [rebuild your challenge tasks](/en-US/documentation/rebuilding-challenge-tasks/) from updated data, make sure the latest version is being served before asking MapRoulette to rebuild your challenge. +* Github caches the latest version of your gist, so you may need to wait 5-10 mins after editing your gist before the cache is updated and the latest raw content is served. If you're planning to [rebuild your challenge tasks](/documentation/rebuilding-challenge-tasks/) from updated data, make sure the latest version is being served before asking MapRoulette to rebuild your challenge. diff --git a/_documentation/creating-challenges/15-line-by-line-geojson.en_US.md b/_documentation/challenges/04-line-by-line-geojson.md similarity index 100% rename from _documentation/creating-challenges/15-line-by-line-geojson.en_US.md rename to _documentation/challenges/04-line-by-line-geojson.md diff --git a/_documentation/creating-challenges/04-challenge-visibility-and-discovery.en_US.md b/_documentation/challenges/05-challenge-visibility-and-discovery.md similarity index 67% rename from _documentation/creating-challenges/04-challenge-visibility-and-discovery.en_US.md rename to _documentation/challenges/05-challenge-visibility-and-discovery.md index f915b79..0f7eb7e 100644 --- a/_documentation/creating-challenges/04-challenge-visibility-and-discovery.en_US.md +++ b/_documentation/challenges/05-challenge-visibility-and-discovery.md @@ -13,5 +13,13 @@ Visibility only affects discoverability: mappers can still access a challenge di | No | Yes | No | | No | No | No | -> Note: virtual projects do not affect visibility of their contained challenges. Only a challenge's standard parent project is considered when determining discoverability +Both switches live in the actions menus: **Make discoverable** / **Make not +discoverable** on a challenge, and **Enable project** / **Disable project** on +a project. Challenges that are not discoverable are labelled **Not +discoverable** wherever they're listed for their managers, so it's easy to see +at a glance which of your challenges the public can find. + +Archiving is a separate thing: an archived challenge is hidden from your own +active lists rather than made undiscoverable, and can be unarchived at any +time. diff --git a/_documentation/creating-challenges/14-rebuilding-challenge-tasks.en_US.md b/_documentation/challenges/06-rebuilding-challenge-tasks.md similarity index 61% rename from _documentation/creating-challenges/14-rebuilding-challenge-tasks.en_US.md rename to _documentation/challenges/06-rebuilding-challenge-tasks.md index a3bd240..796111e 100644 --- a/_documentation/creating-challenges/14-rebuilding-challenge-tasks.en_US.md +++ b/_documentation/challenges/06-rebuilding-challenge-tasks.md @@ -6,7 +6,7 @@ As a challenge owner, you may wish to occasionally rebuild the tasks in your cha **In order for your challenge to rebuild successfully, each task feature must contain a supported id field with a unique id (within the challenge) so that existing tasks can be matched up with updated feature data. If tasks aren't matched up properly they will likely be duplicated.** -You can either explicitly [specify an id property](/en-US/documentation/setting-external-task-identifiers) on your challenge, or rely on a supported field/property that will be automatically detected. Automatically supported id fields are: `id`, `@id`, `osmid`, `osm_id`, and `name` (checked in that order). If your features contain one of those automatically-supported fields and you do *not* wish to use it (or the order of detection would pick up the wrong field first), then you must explicitly [specify](/en-US/documentation/setting-external-task-identifiers) on the challenge which field/property is to be used. +You can either explicitly [specify an id property](/documentation/setting-external-task-identifiers) on your challenge, or rely on a supported field/property that will be automatically detected. Automatically supported id fields are: `id`, `@id`, `osmid`, `osm_id`, and `name` (checked in that order). If your features contain one of those automatically-supported fields and you do *not* wish to use it (or the order of detection would pick up the wrong field first), then you must explicitly [specify](/documentation/setting-external-task-identifiers) on the challenge which field/property is to be used. Challenge tasks generated from Overpass queries automatically contain ids (including exported GeoJSON files from Overpass Turbo), so nothing more is required. But for challenges with tasks generated from other local or remote GeoJSON data, you will need to ensure these ids are included if you wish your challenge to rebuild successfully. Id fields can be on the features themselves (preferable) or the feature properties. @@ -41,9 +41,28 @@ For example, the following feature representing a museum contains both a field n For example, if an updated GeoJSON file contained new opening hours for the museum above, the feature in the updated GeoJSON file should contain an id property with the value of `relation/1553447` so that it will be successfully matched with the existing task for the museum and not result in a duplicated task. +## Starting a rebuild + +**Rebuild tasks** is in a challenge's actions menu — on **Manage → +Challenges**, on the challenge list of its project, and on the challenge's own +management page. + +What the rebuild does depends on how the challenge gets its task data: it +re-runs an Overpass query, re-downloads a remote GeoJSON URL, or — for a +challenge built from an uploaded file — asks you for a new GeoJSON file to +upload. The dialog says which of the three applies before you proceed. + +You can also record the [date the data was +sourced](/documentation/defining-task-sourced-date/) as part of the +rebuild. + +While the rebuild runs, the challenge page shows **Tasks Updating…** with an +elapsed timer and refreshes itself as it progresses. + ## Optionally removing incomplete tasks first -When you initiate a Rebuild, you will be presented with a dialog that offers some details about the process along with an option (off by default) to first remove incomplete tasks. This can be useful if your GeoJSON represents the full list of features that still need to be addressed, and you wish to clear out old incomplete tasks that are no longer needed (perhaps they were attended to outside of MapRoulette). +The rebuild dialog offers some details about the process along with an option +(off by default) to first remove incomplete tasks. This can be useful if your GeoJSON represents the full list of features that still need to be addressed, and you wish to clear out old incomplete tasks that are no longer needed (perhaps they were attended to outside of MapRoulette). If you check this option, then incomplete tasks (either untouched or skipped) will first be deleted from the challenge and then recreated as needed based from the latest source data. Tasks in other statuses will not be removed. diff --git a/_documentation/challenges/07-challenge-comments.md b/_documentation/challenges/07-challenge-comments.md new file mode 100644 index 0000000..c32443d --- /dev/null +++ b/_documentation/challenges/07-challenge-comments.md @@ -0,0 +1,34 @@ +--- +title: Challenge Comments +--- + +**Challenge Comments** give mappers a way to reach challenge owners about +issues or observations that apply to the whole challenge rather than to one +task — a chance to get clarity from the owner, or suggest a change, without +having to [report the +challenge](/documentation/challenge-flagging/). + +To read or post one, open a challenge page — like [this +one](https://maproulette.org/browse/challenges/40609) — and select +**Comments** in the challenge header. The button shows how many comments the +challenge already has, and opens the **Challenge Comments** dialog. + +## Submitting a comment + +Type your comment and choose **Send**. Comments support +[Markdown](/documentation/markdown/) and show a character counter as you +type. + +Messages you submit here automatically notify the challenge owner, so there's +no need to tag them. Other mappers still need to be +[mentioned](/documentation/comment-short-codes/#mention-other-users) by +name if you want them to be notified. + +You need to be signed in to comment. Comments from the challenge's owner are +marked with an **Owner** badge. + +## Task-specific comments + +Check **Show task comments** to fold the challenge's task comments into the +same feed. Those entries are labelled **Re: Task _n_** so you can tell them +apart from comments about the challenge as a whole. diff --git a/_documentation/challenges/08-reporting-a-challenge.md b/_documentation/challenges/08-reporting-a-challenge.md new file mode 100644 index 0000000..c133a65 --- /dev/null +++ b/_documentation/challenges/08-reporting-a-challenge.md @@ -0,0 +1,53 @@ +--- +title: Reporting A Challenge +--- + +From time to time, a Challenge is created in MapRoulette that is poorly +designed. The instructions may be unclear or even tell mappers to 'fix' the map +in a way that goes against OSM best practices and conventions. Bad Challenges +have no place in MapRoulette and we want you to be confident that we will deal +with them if we need to. + +This page describes the steps you can take to resolve an issue with a +MapRoulette Challenge. This process is a lot like the process you would follow +when you notice a questionable edit in OSM made outside of MapRoulette. + +### 1. Comment on the Challenge + +Start on the challenge page and open **Comments**. Anything you post there +notifies the challenge owner automatically, and is visible to other mappers +working the same challenge, so it is both the quickest way to reach the owner +and the most useful place for the conversation to happen. See +[Challenge Comments](/documentation/challenge-comments/). + +Remember to assume good intent on the part of the Challenge owner and be +respectful in your language. Most of the time you can have a constructive +dialog with the owner and resolve the issue between you. + +### 2. Contact the Challenge owner directly + +The challenge page shows **by _username_** beneath the challenge name, linking +to that mapper's OpenStreetMap profile. From there you can send them a message +through OSM's own messaging system if the discussion is better held privately. + +### 3. Report the Challenge + +If reaching out to the challenge owner is proving unsuccessful, and there is +continued concern about a challenge's integrity, use the **Report Challenge** +action. That sends the report to the MapRoulette administrators for review. See +[Filing a Challenge Report](/documentation/challenge-flagging/) for what you'll +be asked for and what happens next. + +### 4. Contact us via email + +If the Challenge owner does not respond in a reasonable time, or you can't come +to an agreement on how to proceed, please get in touch with us by sending an +email to maproulette@maproulette.org. Please include a link to the offending +Challenge in your message, along with a short summary of the issue you +encountered and what you have done to try and resolve it. We will then work +directly with you and the Challenge owner (if we can reach them) to work it +out. + +We hope that with this, we have defined a clear and unambiguous process to deal +with Challenges that lead to bad edits in OSM. Thanks for helping to keep +MapRoulette a great place to find interesting tasks to help improve OSM! diff --git a/_documentation/challenges/09-challenge-flagging.md b/_documentation/challenges/09-challenge-flagging.md new file mode 100644 index 0000000..b4e379b --- /dev/null +++ b/_documentation/challenges/09-challenge-flagging.md @@ -0,0 +1,77 @@ +--- +title: Filing a Challenge Report +--- + +Reporting a challenge lets mappers escalate a challenge that did not meet +quality standards, when talking to its owner hasn't resolved things. The report +goes to the MapRoulette administrators, who decide what to do about it. + +> Reporting is one of a set of features for reaching out to challenge owners, +> and it is rarely the first one to reach for. Please review the recommended +> order of steps in [Reporting A +> Challenge](/documentation/reporting-a-challenge/) first. + +## Filing a report + +Open the challenge page and select the **Challenge actions** menu (the ⋮ +button beside the challenge title), then **Report Challenge**. You need to be +signed in. + +The report dialog asks for: + +- **Email (optional)** — so the administrators can reach you about the report. + It is prefilled with the address in your own settings, and is only ever + shown to administrators +- **A description of the issue** — between 100 and 1000 characters, so explain + in detail what your issue is with this challenge, linking to specific OSM + changesets where you can. The field supports + [Markdown](/documentation/markdown/), with **Write** and **Preview** tabs and + a character counter +- Confirmation that **you have attempted to contact the Challenge creator** + +Choose **Submit Report**. Submitting the report: + +1. files the report with the MapRoulette administrators for review; and +2. posts a comment on the challenge, naming you as the reporter, so the owner + and other mappers know the concern was raised and can join the discussion. + +Reporting a challenge does **not** disable it immediately, and it does not +archive or hide it. Any follow-up discussion happens in the [challenge +comments](/documentation/challenge-comments/). + +## After reporting + +While your report is awaiting review, the actions menu shows **Challenge +Reported** with a red flag instead of **Report Challenge**, and the item is +disabled — there is nothing more for you to do until an administrator has +looked at it. You can report the same challenge again once your earlier report +has been dealt with. + +You only ever see your own reports. Other mappers' reports on the same +challenge are not shown to you. + +## What administrators do with it + +Reports land in a review queue under **Super Admin → Challenge Reports**, where +an administrator reads the report, can jump straight to the challenge or its +management page, and closes the report out as either: + +- **Actioned** — the concern was valid and something was done about it, such as + archiving the challenge or asking the owner to change it +- **Dismissed** — no change was warranted + +Either decision can carry a short note recording what was decided. See [Super +Admin](/documentation/super-admin/) for the administrator's side of the queue. + +> Reports used to be filed as public issues in a GitHub repository, and the +> challenge actions menu offered a **View reported issue on GitHub** link +> afterwards. Reports are now held in MapRoulette itself, which keeps the +> reporter's email address private and puts the triage in the hands of the +> administrators of the installation you are using. The [blog post that +> introduced the +> feature](https://blog.maproulette.org/2023/01/23/introducing-our-flag-report-a-challenge-feature/) +> describes that original GitHub-based version. +{: .legacy} + +We hope the report feature helps maintain and improve the overall quality of +challenges on MapRoulette by giving our users the ability to regulate them. diff --git a/_documentation/challenges/10-exporting-challenge-data.md b/_documentation/challenges/10-exporting-challenge-data.md new file mode 100644 index 0000000..eed2dcc --- /dev/null +++ b/_documentation/challenges/10-exporting-challenge-data.md @@ -0,0 +1,35 @@ +--- +title: Exporting Challenge Data +--- + +MapRoulette lets managers download task data, either for a single challenge or +for a whole project. + +## Exporting one challenge + +Open the challenge's management page and choose **Export** above the task +table. You can pick: + +- **Format** — CSV, one row per task, or GeoJSON, carrying the task geometries + and their properties +- **Timestamp timezone** — the offset that timestamp columns are rendered in. + It starts on your own browser's timezone; leave it on UTC±00:00 for GMT + +The filters currently applied to the task table — status, priority and any +[property filter](/documentation/filtering-the-task-list-by-properties/) — +are applied to the export as well, so what you see in the table is what you +get in the file. + +> Very large challenges export the first 10,000 matching tasks. + +## Exporting a whole project + +Go to **Manage → Projects** (from the user menu), find the project, and choose +**Export CSV** from its actions menu — it's also on the project's own +management page. The export covers the tasks of every challenge in that +project, and downloads as `project--tasks.csv`. + +Among other things the export carries each task's +[MR Tags](/documentation/using-maproulette-tags/), which is what makes +asking mappers for tags worthwhile in the first place. + diff --git a/_documentation/challenges/11-filtering-the-task-list-by-properties.md b/_documentation/challenges/11-filtering-the-task-list-by-properties.md new file mode 100644 index 0000000..edeee1e --- /dev/null +++ b/_documentation/challenges/11-filtering-the-task-list-by-properties.md @@ -0,0 +1,54 @@ +--- +title: 'Challenge Managers: filtering tasks by properties' +--- + +When analyzing your challenges as a manager, it can be useful to filter tasks by +property values (such as OSM tags) rather than only by status and priority. + +Open the **Filter by property** control above the task table on a challenge's +management page. It opens the same AND/OR rule builder used by [task +prioritization](/documentation/task-priority-rules/). + +## Building a rule + +Each rule is a property name, a value type (text or number), a comparison +operator, and a value to compare against. For example, to find motorways you +would enter the `highway` property, leave the type as Text, choose the `equals` +operator, and enter `motorway` as the value. + +The operators on offer depend on the value type: + +| Value type | Operators | +|:-----------|:----------| +| Text | `equals`, `does not equal`, `contains`, `exists`, `is missing` | +| Number | `equals`, `does not equal`, `greater than`, `less than` | + +Tick **Comma-separated values** on a rule to match one property against +several values at once — `highway` `equals` `motorway, trunk` matches either — +rather than building an OR group by hand. + +> Note: it's important to choose the correct value type for the properties +> you're filtering against. If you have numeric data represented as strings in +> your GeoJSON (e.g. `population: "500"`), choosing Number will still compare +> numerically. + +Press **Apply** to filter the table and the map down to matching tasks. The +control is highlighted while a filter is active. **Clear** removes it, as does +the **Clear** control that resets all of the table's filters and sorting. + +## Combining rules + +To filter against several properties at once, add more rules to the group and +choose whether the group ANDs or ORs them together. With AND, every rule in the +group must match for a task to be included; with OR, any one of them is enough. + +A group holds as many rules as you need — you are not limited to two at a time — +and **Add group** nests a sub-group with its own AND/OR setting when you need +something more involved, such as "this property AND either of those two". + +For example, to find motorways with at least 6 lanes, add a Text rule with +`highway` `equals` `motorway` and a Number rule with `lanes` `greater than` `5`, +and leave the group set to AND. + +> Task properties live on the server, so the filter is evaluated there. Very +> large challenges are filtered to the first 10,000 matching tasks. diff --git a/_documentation/challenges/12-challenge-instructions-templating.md b/_documentation/challenges/12-challenge-instructions-templating.md new file mode 100644 index 0000000..1d54263 --- /dev/null +++ b/_documentation/challenges/12-challenge-instructions-templating.md @@ -0,0 +1,74 @@ +--- +title: Templating in Challenge Instructions +--- + +MapRoulette supports [mustache-tag +replacement](/documentation/mustache-tag-replacement/) in Challenge +Instructions, as well as special short codes that can be used to embed basic +form fields, make data easily copyable to the user's clipboard, etc. + +## Basic Form Fields + +It may occasionally be useful to allow mappers to provide to challenge managers +some additional information as they work through tasks. MapRoulette supports +special short codes that offer the ability to embed very basic form fields in +Challenge Instructions, which mappers can optionally complete for each task. +Responses are included in CSV and GeoJSON +[exports](/documentation/exporting-challenge-data/) of the challenge. + +![](/media/basic_template.gif){:width="500"} + +To add form fields, simply use one or more of the short codes documented below +in your Challenge Instructions. The short codes will be replaced with inline +form fields. + +Responses are saved against the task when the mapper completes it, so a mapper +who returns to a task they have already answered sees their previous answers. +The name you assign to each form field is used as the column name in the +exported CSV or the property name in the exported GeoJSON. + +> Note: form fields used to be represented by three curly braces instead of as +> short codes using square brackets. That older notation is still supported for +> backwards compatibility with existing challenges, but is considered deprecated +> and should no longer be used. + +### Checkbox field: + +``` +[checkbox "Your checkbox label" name="myCheckbox"] +``` + +This will create a checkbox field named myCheckbox + +The label can also include basic markdown, including mustache tags referencing +task properties + +### Select (multiple-choice) field: + +``` +[select "Your select label" name="myDropdown" values="foo,bar,baz"] +``` + +Creates a select field named myDropdown with three choices (foo or bar or baz) + +The label can also include basic markdown, including mustache tags referencing +task properties + +## Other Useful Short Codes + +``` +[copyable "some useful text"] +``` + +Causes a clipboard button to be rendered immediately after the specified text +that, when clicked, will copy the text to the user's clipboard. The text can +also include mustache tags referencing task properties, which will be +substituted, but **cannot** include markdown. + +## Short codes and Markdown + +Short codes are recognised only when the bracketed text matches one of the forms +above and is not immediately followed by `(`, so ordinary Markdown links — +`[the wiki](https://wiki.osm.org)` — and bracketed prose are left alone. Text +that looks like a short code but isn't one of the supported forms is shown +exactly as written. diff --git a/_documentation/creating-challenges/01-creating-a-challenge.en_US.md b/_documentation/creating-challenges/01-creating-a-challenge.en_US.md deleted file mode 100644 index f95f5e6..0000000 --- a/_documentation/creating-challenges/01-creating-a-challenge.en_US.md +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: Creating a Challenge ---- - -Creating a challenge starts with a good challenge idea. Good challenges have tasks that: - -- Are easy to solve (typically less than one minute) -- Do not require local knowledge -- Involve only one or two OSM objects - -Here's an [example challenge](https://maproulette.org/mr3/browse/challenges/3253) that meets that criteria. We will ask mappers to review `motorway_junction` nodes in the United States that have name `tags`. This is uncommon in the U.S. Often mappers will add a name tag that has the destination information on it, so the information renders on the map: - - -![](/media/create-challenge-1.png) - -This [Overpass query](https://overpass-turbo.eu/?Q=area%5Bname%3D%22United%20States%20of%20America%22%5D-%3E.a%3B%0Anode%5B%22highway%22%3D%22motorway_junction%22%5D%5B%22name%22%5D(area.a)%3B%0Aout%20meta%3B%0A&C=40.66202;-111.87756;12) selects all these nodes. - -``` -area[name="United States of America"]->.a; node["highway"="motorway_junction"]["name"](area.a); out meta; -``` - -With that query in hand, I can go to MapRoulette and click ‘Create’ at the top. This takes you to your MapRoulette Projects page. By default you will only have one Project. Click on its name to select it as the home for your new Challenge. At the top of the Project page, you will find the ‘Add Challenge’ link, click that to start the wizard to add a new Challenge. - -![](/media/create-challenge-2.png) - -The Wizard has 4 pages, but only the first two require your full attention - -On the first page you enter the title, description and instruction for your challenge, as well as some metadata that will be used to help others find it and identify edits made by mappers using the Challenge: - -- **Visible** Whether the Challenge will be listed. If no, you can still share the Challenge URL and it will work. -- **Name** A descriptive name for the challenge. I used Review named motorway junctions in USA. A good title describes what the challenge is about is a few words. -- **Description** Some text to describe in more words what the challenge is about. This field supports markdown and appears in the expanded challenge information when mappers browse for interesting challenges: - - -![](/media/create-challenge-3.png) - -I used Motorway junction nodes are not commonly tagged with name. This challenge asks mappers to review those nodes, removing the name where it’s not applicable. - -- **Blurb** Feel free to skip this. An even shorter description of what the challenge is about. I used Review named motorway junction nodes -- **Instruction** This is perhaps the most important text. Here you tell mappers exactly what the task is you want them to perform. Be specific and use links (this field supports markdown as well) to the OSM wiki or other external sources where needed. This text is shown next to the map of the task location. I used This `motorway_junction` node has a `name` tag. This is uncommon, [see the OSM wiki](https://wiki.openstreetmap.org/wiki/Tag:highway=motorway_junction#Name_and_number) for details. If this name tag does not represent a ‘name of the junction or interchange’, the name tag should be removed. If you’re not sure, you can skip the task.. Note how I use markdown features to make the instructions easy to read and comprehensive. -- **Changeset Description** This field will be used to pre-fill the changeset description in the editor ( A URL linking to the challenge description and task is automatically added to the changeset comment, but only when the challenge is discoverable ). I used reviewing named motorway junctions. A `#maproulette` hashtag will be added unless you change that default setting below. -- **Changeset Source** This field will be used to pre-fill the changeset source field in the editor. If your task involves using any external data, you should list it here. I used maproulette;overpass. -- **Difficulty** You can leave this at ‘Normal’ unless your tasks are particularly easy or hard. We may change this system in the near future. -- **Category** This helps the user find challenges they are interested in. There is a dropdown menu on the main Challenge list that lets users narrow down the list by category. For this challenge I used Roads / Pedestrian / Cycleways. -- **Keywords** These also help users find interesting challenges. They are used in the free text search field. I used `junction`, `name`, `motorway` and `exit`. - -When all this is filled out, you can proceed to screen 2, where you supply the source data for the tasks. This can be a GeoJSON file or URL, or an Overpass query. If you use an Overpass query, make sure you don’t use any Overpass Turbo specific language such as `geocodeArea:...`. Test your query in Overpass Turbo first. - -The final two screens let you add rules to prioritize certain tasks over others based on OSM tags, and let you define some view related settings for your challenge. The defaults are sensible but please do review them and tweak as needed. Make sure that the query only returns the nodes or ways that you want mappers to review, and ideally the number of objects returned should be no more than a couple thousand. - -When you click ‘Finish’, MapRoulette will query Overpass in the background and populate your challenge. Depending on how heavy the Overpass query is, this can take a few seconds to a couple of minutes. When it finishes, you will see a map with your tasks, a complete list of tasks and some more challenge information. - - -![](/media/create-challenge-4.png) - -You can now click **Start** on the top to go directly to your challenge and try it out! - diff --git a/_documentation/creating-challenges/04-challenge-visibility-and-discovery.ru.md b/_documentation/creating-challenges/04-challenge-visibility-and-discovery.ru.md deleted file mode 100644 index 34da3e0..0000000 --- a/_documentation/creating-challenges/04-challenge-visibility-and-discovery.ru.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -title: Challenge Visibility and Discovery ---- - -Задачи доступны для публичного обнаружения (например, в результатах поиска) только в том случае, если и для задачи *и* для связанного с ней исходного проекта включен видимый режим. Если для первого или для второго видимый режим не включён, задача не будет отображаться и не появится в результатах поиска. - -Видимость влияет только на возможность обнаружения: картографы по-прежнему могут получить прямой доступ к задаче, если у них есть общедоступный URL-адрес этой задачи. Это позволяет делиться задачами, которые иначе невозможно обнаружить. - -| Настройка видимости проекта | Настройка видимости задачи | Можно ли найти задачу? | -|:------------------------|:--------------------------|:---------------------------| -| Да | Да | Да | -| Да | Нет | Нет | -| Нет | Да | Нет | -| Нет | Нет | Нет | - -> Примечание: виртуальные проекты не влияют на видимость содержащихся в них задач. При определении возможности обнаружения задачи учитывается только стандартный исходный проект, с которым связана задача. - diff --git a/_documentation/creating-challenges/05-setting-basemap-for-challenge.en_US.md b/_documentation/creating-challenges/05-setting-basemap-for-challenge.en_US.md deleted file mode 100644 index 513e001..0000000 --- a/_documentation/creating-challenges/05-setting-basemap-for-challenge.en_US.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Setting The Basemap Layer For Your Challenge ---- - -One of the customizations you can apply to your own Challenges is a custom basemap layer. This basemap layer will override whatever basemap MapRoulette users have defined as their default. This is useful in those cases where you know that a certain basemap is needed to successfully complete the tasks in your Challenge. - -All the default global basemap layers from OSM's [editor layer index](https://github.com/osmlab/editor-layer-index), the same ones that you would find in the iD editor, are available as presets. You can also add your own custom XYZ layer using the common pattern: - -`https://some.imagerylayer.com/tile/{z}/{x}/{y}` - diff --git a/_documentation/creating-challenges/06-styling-task-features.en_US.md b/_documentation/creating-challenges/06-styling-task-features.en_US.md deleted file mode 100644 index be21d6a..0000000 --- a/_documentation/creating-challenges/06-styling-task-features.en_US.md +++ /dev/null @@ -1,76 +0,0 @@ ---- -title: Styling Task Features ---- - -MapRoulette offers two different approaches to styling tasks: - -1. A subset of the [simplestyle](https://github.com/mapbox/simplestyle-spec/blob/master/1.1.0/README.md) specification can be used to customize the appearance of features within a Task by including special feature properties in your task's GeoJSON - -2. Styling rules can be setup in your challenge that style task features based on the values of task properties, such as OSM tags - -## Styling tasks directly with GeoJSON properties - -To style tasks via GeoJSON, simply include the simplestyle properties directly on your feature. This provides you with complete flexibility in determining which tasks are to be styled, and how. - -The following simplestyle properties can be used on task features: - -| Property | Description | Supported Geometries -|:-----------------|:--------------------------------|:----------------------------------- -| stroke | Outline color | LineStrings, Polygons -| stroke-width | Thickness of outline | LineStrings, Polygons -| stroke-opacity | Translucency of outline | LineStrings, Polygons -| fill | Fill color (inside the outline) | Polygons -| fill-opacity | Translucency of the fill | Polygons -| marker-color | Map marker color | Points -| marker-size | Map marker size | Points - -Some notes and caveats: -* colors need to be expressed as [web hex colors](https://en.wikipedia.org/wiki/Web_colors) or (slightly riskier) [common web color names](https://en.wikipedia.org/wiki/Web_colors#X11_color_names) -* opacities need to be decimal numbers between 0.0 (transparent) and 1.0 (opaque) -* marker-size must be one of `small`, `medium`, or `large` (medium is the normal size) -* fill colors can obscure OSM labels, so be careful about high fill-opacity values -* use of colors used by OSM or MapRoulette to convey special meaning could confuse your mappers - - -### Example - -The following set of properties results in a Way being rendered with a purple stroke (outline) and 50%-opaque fuschia fill, as shown below: - - -```json -"properties": { - "@id": "way/258145134", - "amenity": "community_centre", - "building": "yes", - "stroke": "#800080", - "fill": "#FF00FF", - "fill-opacity": "0.5" -} -``` - -![](/media/simplestyled_way.png){:width="500"} - - -## Customizing task styling during challenge setup - -On the "Configure property-based behavior" step when creating/editing a challenge, you can choose to customize task property styles. - -![](/media/configure_custom_styles.png){:width="544"} - - -You'll be presented with the ability to specify one or more task styles that should be applied when a property filter/search matches on a task. In the screenshot below, roads with more than 2 lanes are being setup to be rendered as thick purple lines. You can setup multiple filters with their own styles to capture various scenarios. - -![](/media/custom_task_styling.png){:width="1024"} - - -Note that if a task matches multiple filters -- or if the task also contains simplestyle GeoJSON properties (see above) -- all of the matching styles will be merged and applied. - -When working on a challenge that has custom styles applied, it may be useful to add the new Feature Style Legend widget to your workspace to serve as a basic reminder of what the custom styles indicate. - -![](/media/style_legend.png){:width="500"} - - -## Video - -HOT has produced [a video](https://youtu.be/gj8MRgiIV-I?t=849) that goes into styling features in MapRoulette. Check it out! - diff --git a/_documentation/creating-challenges/07-creating-cooperative-challenges.en_US.md b/_documentation/creating-challenges/07-creating-cooperative-challenges.en_US.md deleted file mode 100644 index e08784a..0000000 --- a/_documentation/creating-challenges/07-creating-cooperative-challenges.en_US.md +++ /dev/null @@ -1,194 +0,0 @@ ---- -title: Cooperative Challenges ---- - -Cooperative Challenges allow in-progress (uncommitted) mapping work to be packaged with tasks so that mappers don't have to do all the work themselves from scratch. When a mapper chooses to edit the task in MapRoulette, the in-progress work will automatically be loaded into the mapper's editor so that they can verify and complete the work as needed. - -> Note: JOSM is currently the only supported editor for Cooperative Challenges, but integration with additional editors is under way - -Aside from the initial editing work being automatically loaded into the mapper's editor, the mapping workflow for Cooperative tasks is otherwise identical to normal tasks: the mapper still chooses to Edit the task, they still perform the editing work in their editor, they still upload and commit their work to OSM through their editor, and they still mark the task as Finished or another appropriate status in MapRoulette when complete. - -### Creating Cooperative Challenges - -#### With the `mr-cli` utility (recommended) - -The simplest way to create cooperative challenges is with the [mr-cli](https://www.npmjs.com/package/@maproulette/mr-cli) command-line utility, which can generate challenges from saved JOSM (.osm) or OSM Change (.osc) files. See the tool's documentation for details and examples of use. - -#### With GeoJSON - -Cooperative challenges can also be created by including additional data with each task in the GeoJSON, including an [OSMChange (.osc)](https://wiki.openstreetmap.org/wiki/OsmChange) file that represents the in-progress work that is to be loaded into the mapper's editor for the task. The additional data should be included in a `cooperativeWork` object associated with each task's `FeatureCollection` in the challenge's [line-by-line GeoJSON](/en-US/documentation/line-by-line-geojson/) file. - -> :warning: Only [line-by-line GeoJSON](/en-US/documentation/line-by-line-geojson/) is supported for cooperative challenges. If you use a traditional GeoJSON format, your cooperativeWork section will simply be ignored and you will end up with normal tasks instead of cooperative tasks - -The structure of the `cooperativeWork` object is designed to be flexible to support various options, formats, and encodings in the future, but at the moment only a very specific combination of values is supported. - -The following example demonstrates the structure, shown here over multiple lines for readability. - -```javascript -{ - "type": "FeatureCollection", - "features": [ ... ], // omitted for readability - "cooperativeWork": { // special `cooperativeWork` property - "meta": { - "version": 2, // must be format version `2` - "type": 2 // `2` for change file type - }, - "file": { // represents the change file with in-progress work - "type": "xml", // only `xml` is currently supported - "format": "osc", // only `osc` is currently supported - "encoding": "base64", // only `base64` is currently supported - "content": "..." // the base64-encoded osc file - } - } -} -``` - -> Note: the file contents must be Base64-encoded using the Base 64 Alphabet as specified in table 1 of [RFC 4648](https://www.ietf.org/rfc/rfc4648.txt) (sometimes referred to as "basic" Base64 encoding) - -The `features` for each task are used for all the usual things by MapRoulette (rendering the task on maps, geographical indexing, task prioritization, searching for tasks by feature properties, etc.) but are _not_ incorporated into editing -- only the osc file is sent to the editor. - -### Creating [Tag Fix Challenges](/en-US/documentation/tag-fix-challenges) - -If your changes consist purely of tag fixes, an alternative _Tag Fix_ (formerly quick fix) style cooperative challenge can be created instead. MapRoulette will present the proposed tag changes to mappers during task completion and allow them to approve or reject the changes within MapRoulette, as well as modify the tags if needed. Approved changes are submitted directly to OSM by MapRoulette itself, removing the need for external editors. - -#### With the `mr-cli` utility (recommended) - -As with standard cooperative challenges, the easiest way to create a Tag Fix challenge is with the [mr-cli](https://www.npmjs.com/package/@maproulette/mr-cli) command-line utility. See the tool's documentation for details and examples of use. - -See also [this post on the MapRoulette blog](https://blog.maproulette.org/2022/11/07/tutorial-tagging-parkingsurface-efficiently-with-a-maproulette-tag-fix-challenge/) for a complete example of how to make a tag-fix challenge using the `mr-cli` tool. - -#### With GeoJSON - -To aid with backwards compatibility, the GeoJSON structure of Tag Fix tasks is extremely similar to that of the old quick fix tasks, with only a few minor changes to the data envelope being required. - -```javascript -{ - "type": "FeatureCollection", - "features": [ ... ], // omitted for readability - "cooperativeWork": { // special `cooperativeWork` property - "meta": { - "version": 2, // must be format version `2` - "type": 1 // `1` for tag fix type - }, - "operations": [ // Operations section (see below) - ... - ] - } -} -``` - -#### Supported GeoJSON Operations - -A Tag Fix consists of one _independent_ (or parent) operation which includes one or more embedded _dependent_ (or child) operations. - -> Note: For ease of backward compatibility, the Tag Fix operations are taken from a subset of the old quick fix operations and work (and are structured) identically - -#### Independent Operations - -> Note: Any OSM ids referenced in an operation must be of the form of `elementType/numericId`, e.g. `node/123456789` - -**modifyElement** - -Updates an existing OSM element with a series of dependent operations on tags that will be applied in the order they appear. `data` should consist of an `id` and `operations` array with dependent operations to be performed. - -Example: - -```javascript -{ - "operationType": "modifyElement", - "data": { - "id": "way/12345678", - "operations": [{ - "operation": "setTags", - "data": { - "building": "yes", - } - }] - } -} -``` - -#### Dependent Operations - -**setTags** - -Sets the value of one or more tags on the enclosing OSM element. This operation will add the tag if it does not yet exist on the element, or update the value of an existing tag if it does exist. `data` should be an object with tag names as keys. - -> Unlike an OSM changeset, which often requires a complete snapshot of the element data to be provided, a tag fix is intended to capture only the actual changes required to complete the task - -Example: - -```javascript -{ - "operation": "setTags", - "data": { - "name": "Walgreens", - "amenity": "pharmacy" - } -} -``` - -**unsetTags** - -Removes one or more tags from the enclosing OSM element. This operation will -delete the tag from the OSM element if it exists, or silently do nothing if it -does not. `data` should be an array of tag names to remove. - -Example: - -```javascript -{ - "operation": "unsetTags", - "data": ["sometag", "anothertag"] -} -``` - -### See also - -* [Adding Microsoft Building Footprints To OSM With MapRoulette: Why And How](https://www.openstreetmap.org/user/mvexel/diary/399229) walks you through an example of creating a Cooperative Challenge - -### Full example - -This is a full example of a valid GeoJSON that uses `setTags` for two features. - -```javascript -{ - "type": "FeatureCollection", - "features": [ - { - "type": "Feature", - "properties": { - "id": "point/123", - "otherkeys": "othervalues" - }, - "geometry": { - "type": "Point", - "coordinates": [13.4050, 52.5200] - } - } - ], - "cooperativeWork": { - "meta": { - "version": 2, - "type": 1 - }, - "operations": [ - { - "operationType": "modifyElement", - "data": { - "id": "point/123", // same id as `feature[0].properties.id` above - "operations": [ - { - "operation": "setTags", - "data": { - "nice": "place" - } - } - ] - } - } - ] - } -} -``` - diff --git a/_documentation/creating-challenges/08-mustache-tag-replacement.en_US.md b/_documentation/creating-challenges/08-mustache-tag-replacement.en_US.md deleted file mode 100644 index 3502897..0000000 --- a/_documentation/creating-challenges/08-mustache-tag-replacement.en_US.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: Mustache Tag Replacement ---- - -MapRoulette makes it easy to embed the value of task feature properties (or workspace properties) in allowed places, such as challenge instructions or the Custom URLs widget, using Mustache template syntax. - -{% raw %} - -To reference a property, surround its name with double curly braces or "mustaches" (`{{` and `}}`). Any task feature property can be referenced in a mustache tag by the property name, e.g. `{{highway}}` to display the value of the `highway` property. If the property doesn't exist on the task, then the mustache tag will be replaced with empty text. - -> Note: when working with Markdown content (such as challenge instructions), the mustache tags get replaced *before* the final content is interpreted as Markdown. That means, for example, that feature property values will be interpreted as Markdown, allowing things like URLs to be converted into clickable links. If you instead wish to see the raw property value, you can surround the whole mustache tag (including the curly braces of the "mustache" itself) with single backticks - -## Workspace Properties -Some workspaces, notably Task Completion, make additional properties available for substitution that are specific to the workspace state rather than the task itself. These "workspace" properties always begin with a hash (`#`), e.g. `#mapZoom`, to avoid confusion with task feature properties. Workspace properties are always case-sensitive. The following workspace properties may be available (as with task feature properties, mustache tags referencing missing workspace properties will be replaced with empty text): - -`{{#mapBBox}}`: a WSEN comma-separated bounding box of the current map bounds - -`{{#mapWest}}`: the longitude of the west side of the current map bounds - -`{{#mapSouth}}`: the latitude of the south side of the current map bounds - -`{{#mapEast}}`: the longitude of the east side of the current map bounds - -`{{#mapNorth}}`: the latitude of the north side of the current map bounds - -`{{#mapZoom}}`: the current zoom of the map - -`{{#mapLat}}`: The latitude of the map’s current centerpoint - -`{{#mapLon}}`: The longitude of the map’s current centerpoint - -`{{#osmType}}`: The type (node/way/relation) of the current task feature if it can be determined - -`{{#osmId}}`: The numerical OSM id of the current task feature if it can be determined - -`{{#mrTaskId}}`: the internal MapRoulette id of the current task (not the OSM id) - -{% endraw %} diff --git a/_documentation/creating-challenges/09-challenge-instructions-templating.en_US.md b/_documentation/creating-challenges/09-challenge-instructions-templating.en_US.md deleted file mode 100644 index 7953304..0000000 --- a/_documentation/creating-challenges/09-challenge-instructions-templating.en_US.md +++ /dev/null @@ -1,47 +0,0 @@ ---- -title: Templating in Challenge Instructions ---- - -MapRoulette supports [mustache-tag replacement](/en-US/documentation/mustache-tag-replacement/) in Challenge Instructions, as well as special short codes that can be used to embed basic form fields, make data easily copyable to the user's clipboard, etc. - -## Basic Form Fields - -It may occasionally be useful to allow mappers to provide to challenge managers some additional information as they work through tasks. MapRoulette supports special short codes that offer the ability to embed very basic form fields in Challenge Instructions, which mappers can optionally complete for each task. Responses are included in CSV and GeoJSON [exports](/en-US/documentation/exporting-challenge-data/) of the challenge. - -![](/media/basic_template.gif){:width="500"} - - -To add form fields, simply use one or more of the short codes documented below in your Challenge Instructions. The short-codes will be replaced with inline form fields. - -> Note: form fields used to be represented by three curly braces instead of as short codes using square brackets. That older notation is still supported for backwards compatibility with existing challenges, but is considered deprecated and should no longer be used - -Form responses for each task will be automatically included in CSV and GeoJSON exports of challenge tasks from challenge management. The name you assign to each form field will be used as the column name in the exported CSV or property name in the exported GeoJSON. - -### Checkbox field: - -``` -[checkbox "Your checkbox label" name="myCheckbox"] -``` - -This will create a checkbox field named myCheckbox - -The label can also include basic markdown, including mustache tags referencing task or workspace properties - -### Select (multiple-choice) field: - -``` -[select "Your select label" name="myDropdown" values="foo,bar,baz"] -``` - -Creates a select field named myDropdown with three choices (foo or bar or baz) plus an empty choice - -The label can also include basic markdown, including mustache tags referencing task or workspace properties - -## Other Useful Short Codes - -``` -[copyable "some useful text"] -``` - -Causes a clipboard button to be rendered immediately after the specified text that, when clicked, will copy the text to the user's clipboard. The text can also include mustache tags referencing task or workspace properties, which will be substituted, but **cannot** include markdown. - diff --git a/_documentation/creating-challenges/09-challenge-instructions-templating.ru.md b/_documentation/creating-challenges/09-challenge-instructions-templating.ru.md deleted file mode 100644 index 711630b..0000000 --- a/_documentation/creating-challenges/09-challenge-instructions-templating.ru.md +++ /dev/null @@ -1,47 +0,0 @@ ---- -title: Templating in Challenge Instructions ---- - -MapRoulette поддерживает [замену mustache-тегов](/documentation/mustache-tag-replacement/) в Инструкциях к Задаче, а также специальные короткие коды, используемые для встраивания основных полей формы, упрощения копирования данных в буфер обмена пользователя и т. д. - -## Основные поля формы - -Иногда может быть полезно разрешить картографам предоставлять менеджерам задачи некоторую дополнительную информацию во время работы над заданиями. MapRoulette поддерживает специальные короткие коды, которые позволяют встраивать самые простые поля формы в Инструкции по выполнению задач, которые картографы могут при желании заполнять для каждой задачи. Ответы включаются в CSV и GeoJSON [экспорт](/documentation/exporting-challenge-data/) задачи. - -![](/media/basic_template.gif){:width="500"} - - -Чтобы добавить поля формы, просто используйте один или несколько коротких кодов, описанных ниже в Инструкциях к задаче. Короткие коды будут заменены встраевыми полями формы. - -> Примечание. Раньше поля формы обозначались тремя фигурными скобками, а не короткими кодами с использованием квадратных скобок. Эта старая нотация по-прежнему поддерживается для обратной совместимости с существующими задачами, но считается устаревшей и больше не должна использоваться. - -Ответы форм для каждого задания будут автоматически добавляться в экспортируемый CSV и GeoJSON, содержащий задания к задаче из управления задачей. Имя, которое вы назначаете каждому полю формы, будет использоваться в качестве имени столбца в экспортированном CSV-файле или имени свойства в экспортированном GeoJSON. - -### Тестовое поле: - -``` -[checkbox "Your checkbox label" name="myCheckbox"] -``` - -Это создаст тестовое поле с именем myCheckbox. - -Метка также может включать маркдаун, включая mustache-тэги, ссылающиеся на свойства задания или рабочей области. - -### Применение поля (множественного выбора): - -``` -[select "Your select label" name="myDropdown" values="foo,bar,baz"] -``` - -Создает поле выбора с именем myDropdown с тремя вариантами выбора (foo, bar или baz) и вариантом пустого выбора. - -Метка также может включать маркдаун, включая mustahce-теги, ссылающиеся на свойства задания или рабочей области. - -## Другие полезные короткие коды - -``` -[copyable "some useful text"] -``` - -Вызывает отображение кнопки буфера обмена сразу за указанным текстом, которая при нажатии копирует текст в буфер обмена пользователя. Текст также может включать mustahce-теги, ссылающиеся на свойства задания или рабочей области, которые будут заменены, но **не может** включать в себя маркдаун. - diff --git a/_documentation/creating-challenges/10-defining-task-sourced-date.en_US.md b/_documentation/creating-challenges/10-defining-task-sourced-date.en_US.md deleted file mode 100644 index 16ebd93..0000000 --- a/_documentation/creating-challenges/10-defining-task-sourced-date.en_US.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Defining A Sourced Date For Your Tasks ---- - -When you create Tasks from a GeoJSON source, MapRoulette asks you to define a date on which the tasks are sourced. This allows you to let mappers know the vintage of the original source data that the task was created from. - -![](/media/task-sourced-date.png) - -When you create Tasks from a GeoJSON source, MapRoulette asks you to define a date on which the tasks are sourced. This allows you to let mappers know the vintage of the original source data that the task was created from. - diff --git a/_documentation/creating-challenges/10-defining-task-sourced-date.ru.md b/_documentation/creating-challenges/10-defining-task-sourced-date.ru.md deleted file mode 100644 index 42c7a91..0000000 --- a/_documentation/creating-challenges/10-defining-task-sourced-date.ru.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Defining A Sourced Date For Your Tasks ---- - -Если вы создаете Задания на основании GeoJSON, MapRoulette попросит вас указать дату создания заданий. Это позволяит вам сообщить картографам версию исходных данных, на основе которых было создано задание. - -![](/media/task-sourced-date.png) - -Если вы создаете Задания на основании GeoJSON, MapRoulette попросит вас указать дату создания заданий. Это позволяит вам сообщить картографам версию исходных данных, на основе которых было создано задание. - diff --git a/_documentation/creating-challenges/11-filtering-the-task-list-by-properties.en_US.md b/_documentation/creating-challenges/11-filtering-the-task-list-by-properties.en_US.md deleted file mode 100644 index e3fb273..0000000 --- a/_documentation/creating-challenges/11-filtering-the-task-list-by-properties.en_US.md +++ /dev/null @@ -1,33 +0,0 @@ ---- -title: 'Challenge Managers: filtering tasks by properties' ---- - -When analyzing your challenges as a manager, it can sometimes be useful to filter tasks by property values (such as OSM tags). It has been possible since v3.4.4 of MapRoulette to filter tasks by the value of a single task property, but v3.5.3 brings the ability to create compound filtering rules that can AND and OR together multiple properties to achieve fine-grained filtering. - -When managing a challenge, you can get started by clicking the "Filter by Property" control on the tasks table. You'll be asked to select the data type of the property: text, number, or a special "compound rule" if you wish to do a compound search involving multiple properties. - -If you chose text or number, you'll then be asked to choose the property name, a comparison operator, and a value to compare against. - -> Note: To help with choosing a property name, MapRoulette offers a dropdown of all property names it discovered on tasks in the challenge. It does **not** restrict the offered properties based on the data type you chose. - -For example, if you were looking for motorways, you might choose the `highway` property, the `equals` operator, and then enter `motorway` for the value. - -The comparison operators on offer depend on the data type you choose. Text properties can use textual operators like `equals` and `contains` while numeric properties can use operators like `=` and `>` or `<` for comparison. - -> Note: it's important to choose the correct data types for the properties you're filtering against. However, if you have numeric data represented as strings in your GeoJSON (e.g. `population: "500"`), MapRoulette will attempt to perform numeric comparisons if you choose a Number type for the property despite it technically being a string/text. - -If you wish to filter against multiple properties simultaneously, choose "compound rule" for the type. This will present you with boxes for two properties along with an option to AND or OR them together. If you choose AND then _both_ property comparisons must match on a task for the task to be included in your filter results. If you choose OR then the task will be included if _either_ of the property comparisons match. - -> As of v3.5.7, MapRoulette offers an option for including multiple, comma-separated filter values for a single property so that compound rules can be avoided for the common case of matching any one of multiple values. These values will be OR'ed together. - -For example, if you wanted motorways with at least 6 lanes, you would choose "compound rule", set the first rule to Text with `highway` `equals` `motorway`, set the second rule to Number with `lanes` `>` `5`, and choose to AND them together. - -If you wish to filter against more than 2 properties, then you'll need to nest multiple compound rules. - -As of v3.5.5, you no longer need to setup a compound rule if you simply wish to compare a property against multiple values (e.g. `highway` `equals` `motorway` or `trunk`). You can click the "Add Value" control to add multiple values to include in the comparison. - -The screenshow below shows the setup of a compound search for tasks with a `name` property of `TransCanada Highway` and the `highway` property set to either `motorway` or `trunk`. - - -![compound property rule](/media/compound_property_rule.png) - diff --git a/_documentation/creating-challenges/13-task-priority-rules.en_US.md b/_documentation/creating-challenges/13-task-priority-rules.en_US.md deleted file mode 100644 index 1989ef3..0000000 --- a/_documentation/creating-challenges/13-task-priority-rules.en_US.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: Prioritizing Tasks ---- - -Tasks within a challenge can be prioritized by challenge managers as high, medium, or low priority. Available higher priority tasks will generally be served to mappers ahead of lower priority tasks. (See below for details about how rules are applied.) - -Tasks are prioritized using priority rules that match against either task feature properties (such as OSM tags) or their geographic location. The rules are setup during challenge creation, and can be updated by editing the challenge. Updated rules are immediately reapplied when the edited challenge is saved, but it can take several minutes for that reprioritization process to finish on the server. - -In addition, MapRoulette offers an editable "default" priority that will be applied to *any task that does not explicitly match any priority rule group*. That is, tasks that match neither the configured high, medium, nor low priority rule groups will receive the default priority. If no priority rules are setup, then all tasks will receive the default priority. - -Each property-based priority rule is setup with a data type, the name of the property to check, a comparison operator, and a desired property value. For example, a rule setup using `string` `building` `equals` `yes` would match tasks with a `building` tag set to `yes`. The available comparison operators will change depending on the type. For example, an `integer` type will have numeric operators like `>` and `<` whereas a `string` type will have textual operators like `equals` and `contains`. - -It is important that the data type on the rule is set correctly for the type of data found on the property. - -| Choose | For | -|:----------|:---------------------------------------| -| String | Text | -| Integer | Whole numbers | -| Double | Decimal numbers | -| Long | Really big whole numbers (> 4 billion) | - -Multiple rules can be setup as a group for a given priority. Those rules are then either ANDed together (*all* rules in the group must positively match a task's properties for the task to be considered a match) or ORed together (*any* rule in the group must positively match a task's properties for the task to be considered a match). Furthermore, rules can be nested for greater granularity by choosing the "nested rule" type for a rule. - -> Note that if a task matches multiple priority groups, it will be assigned the *highest* matching priority. For example, if it matches both the high-priority and medium-priority rules, it will be assigned high priority - -#### Matching Multiple Tag Values with a Single Rule -If you want to match a single tag against multiple possible values (such as `highway` equal to either `trunk` or `primary`), one option is to setup a separate rule for each value and then OR them together. But MapRoulette offers a shortcut whereby you can include multiple values separated by commas (e.g. `string` `highway` `equals` `trunk,primary`). When using "positive" operators like `equals` or `contains`, the comma-separated values will be OR'd together; when using "negative" operators like `doesn't equal` or `doesn't contain` they will be AND'd together (if you require different behavior, then you'll need to fall back to manually setting up separate rules for each value). - -#### Location Rules -MapRoulette also supports location rules, whereby a task can be prioritized based on whether it falls inside or outside of a bounding box/rectangle. Simply choose `location rule` for the type, either `inside` or `outside`, and then either provide the bounding box explicitly as West,South,East,North or else click the Map button and draw the desired rectangle. - -#### How Rules Are Applied -In general, higher priority tasks will be served to mappers ahead of lower priority tasks. So, until there are no high priority tasks left, mappers working on this challenge will only be served high priority tasks. Then, until there are no normal priority tasks left, mappers will only be served normal priority tasks. Finally, mappers will be served the low priority tasks, until the Challenge's tasks are exhausted. - -Please note that tasks that are marked "Too Hard" with higher priority will still be served before any lower priority tasks. The underlying assumption is that a more experienced mapper will still be able to resolve a task that is marked by someone else as "Too Hard". We are [revisiting this assumption and considering implementing a feature](https://github.com/osmlab/maproulette3/issues/217) that lets the Challenge author set the number of times a task that is marked "Too Hard" is recycled. - diff --git a/_documentation/creating-challenges/17-exporting-challenge-data.en_US.md b/_documentation/creating-challenges/17-exporting-challenge-data.en_US.md deleted file mode 100644 index c155574..0000000 --- a/_documentation/creating-challenges/17-exporting-challenge-data.en_US.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: Exporting Challenge Data ---- - -MapRoulette allows challenge managers to export their challenge data in either CSV format (suitable for spreadsheet applications) or as GeoJSON. - -To export your data from the Challenge Management screen, simply click the cog wheel icon at the top-right of the tasks table and choose one of the Export options from the menu. By default, all timestamps in the export are represented in UTC, but that can be customized on a per-export basis by selecting your desired timezone from the Export menu prior to choosing an export option. - - -![](/media/export_challenge_data.png){:width="800"} - - diff --git a/_documentation/getting-started/01-your-dashboard.md b/_documentation/getting-started/01-your-dashboard.md new file mode 100644 index 0000000..0c936d4 --- /dev/null +++ b/_documentation/getting-started/01-your-dashboard.md @@ -0,0 +1,50 @@ +--- +title: Your Dashboard +--- + +Once you sign in, **Dashboard** in the top navigation gives you a single screen +with the challenges you've saved, your mapping progress, and what you've been +working on recently. It is laid out as three columns on a wide screen, and +stacks into one column on smaller ones. + +## Saved Challenges + +Challenges you've saved (the bookmark control on a challenge page) are listed +here along with how many tasks each one still has remaining. Each entry has +controls to **Browse challenge**, **Manage challenge** if you're one of its +managers, and **Unsave challenge**. + +If the list is empty, save a challenge from +[Explore Challenges](/documentation/discovering-challenges/) to have +somewhere to pick up from next time. + +## Your profile and level + +The middle column shows your mapper level, your point total, and how far you +are through the current level. Selecting it opens the **Mapper Level System** +dialog, which explains how levelling works and lists the level milestones and +the score each one requires. See +[Earning Points and Levelling Up](/documentation/point-scoring/) for the +formula and the point value of each task status. + +The column also badges your account as **Verified** or a **Guest**, depending +on whether you're signed in with your OpenStreetMap account. + +## Contributions + +Your recent task contributions form a timeline: one entry per day, and within +each day the challenges you worked on with a count for each status you set. +Tasks you have open right now appear as **In Progress**. + +Beneath that, **Locked Tasks** lists any tasks currently locked to you, +including the number of tasks when the lock covers a bundle. MapRoulette allows +one locked task (or one bundle) at a time, so if you start a task while another +is still locked, you'll be asked whether to release the old lock first. You can +jump straight to a locked task from here to finish or unlock it. + +## Teams + +The last block lists the teams you belong to — selecting one opens its page — +and has a **+** control for starting a new one. Any pending team invitations +show here too, with **Accept** and **Decline**. See +[Managing Teams](/documentation/teams/). diff --git a/_documentation/getting-started/02-discovering-challenges.md b/_documentation/getting-started/02-discovering-challenges.md new file mode 100644 index 0000000..a7f13fd --- /dev/null +++ b/_documentation/getting-started/02-discovering-challenges.md @@ -0,0 +1,93 @@ +--- +title: Discovering Interesting Tasks and Challenges +--- + +How do you find things that you are interested in fixing? MapRoulette offers a +number of ways that we'll talk about on this page. + +**Explore Challenges** is the front page of MapRoulette and the main place to +browse. It has a filter bar across the top and, below it, your results. + +# Choosing how results are displayed + +The control at the right end of the filter bar switches between three views: + +- **Grid with map view** — challenge cards beside a map of the challenges in + view. This is the default, and the only view where the map extent narrows the + results (see *By location* below). +- **Grid view** — challenge cards only, with no map. +- **List view** — a table with a column each for name, author, organisation, + percent mapped, percent validated, contributors, priority, difficulty, + status, location, last updated and due date. Challenges an admin has marked + **Featured** are badged **URGENT** in the priority column. + +# Sorting + +Use **Sort by** to order results by **Name** (the default), **Newest**, +**Oldest**, **Popular** or **Difficulty**. "Popular" ranks the challenges that +have seen the most activity recently. + +# Filtering + +The filter bar offers four filters plus a global switch. You can combine them +as you wish, and your selections are remembered the next time you visit. + +## By topic + +The creator of a Challenge assigns a topic to it from a pre-defined list. Use +**Work on** to narrow the list to one of them: + +- Anything +- Roads / Pedestrian / Cycleways +- Water +- Points / Areas of Interest +- Buildings +- Land Use / Administrative Boundaries +- Transit + +For example, a Challenge that looks at fixing coastlines will have the topic +'Water', and a Challenge that looks at fixing the tagging of Burger King +restaurants will fall under 'Points / Areas of Interest'. + +## By difficulty + +When someone creates a Challenge, they decide if this is an **Easy**, +**Normal** or **Expert** level Challenge. Tasks in an Easy Challenge should be +fixable by mappers with little experience. Working on Expert level Challenges +requires advanced mapping skills and intimate familiarity with OSM tagging +practices. Leave the filter on **Any** to see all of them. + +## By location + +MapRoulette Challenges cover the entire world. To concentrate on one place, +type into the location box and pick a result — it searches +[Nominatim](https://nominatim.openstreetmap.org/), so countries, states, +cities, roads and many other named features all work. The place boundary is +drawn on the map and results are restricted to challenges that overlap it. + +In the grid-with-map view, panning and zooming the map narrows the results +further, so the location filter and the map extent combine. In the other two +views the map extent is ignored. + +> The location filters match against the Challenges' bounding boxes. It is not +> guaranteed that every Challenge in the results actually has Tasks inside the +> area you picked. + +Turning on **Global** searches every challenge regardless of the map extent or +the selected place, which is useful for finding challenges that span very large +areas. + +## By text + +Free-text search lives in the search box in the header rather than on the +filter bar. Press K (or Ctrl K) +from anywhere to open it, then search challenges, projects, tasks, comments, or +jump straight to something by its ID. See +[Search prefixes](/documentation/searchbox-short-commands/) for the full +list of what it can do. + +## Clearing filters + +**Clear filters** resets the filter bar to its defaults. Because filters are +remembered between visits, it's worth reaching for when a search unexpectedly +comes back empty. diff --git a/_documentation/getting-started/03-searchbox-short-commands.md b/_documentation/getting-started/03-searchbox-short-commands.md new file mode 100644 index 0000000..4f50314 --- /dev/null +++ b/_documentation/getting-started/03-searchbox-short-commands.md @@ -0,0 +1,97 @@ +--- +title: Search Prefixes and Shortcuts +--- + +The search box in the MapRoulette header searches everything: challenges, +projects, tasks, comments, and named map features. Press Ctrl + +K ( + K on a Mac) from anywhere in +MapRoulette to open it. + +By default it searches across all of these at once. To search only one kind of +thing, start your query with its prefix — or pick the search type from the list +the box offers before you start typing. + +## List of supported prefixes + +| Prefix | Searches for | +| :----- | :--------------------------------------------------------------- | +| `c:` | **Challenges**, by name | +| `p:` | **Projects**, by name | +| `t:` | **Tasks**, by ID | +| `id:` | **Any resource by MapRoulette ID** — project, challenge or task | +| `f:` | **Everything at once** — projects, challenges and tasks in one list | +| `tc:` | **Task comments** | +| `cc:` | **Challenge comments** | + +## Details and examples + +### `c:` — find a challenge + +Show challenges whose name matches your text. + +``` +c:tiger +``` + +### `p:` — find a project + +Show projects whose name matches your text. Case-insensitive, and partial names +work. + +``` +p:mvexel +``` + +Selecting a result takes you to that project, from where you can see all of its +challenges. + +### `t:` and `id:` — jump straight to something + +`t:` looks up a single task by its numeric ID and shows its current status. + +``` +t:1234567 +``` + +`id:` is the same idea but broader: give it a number and it reports every +project, challenge and task that carries that ID, so you can pick the one you +meant. + +``` +id:40609 +``` + +### `f:` — search everything together + +Returns matching projects, challenges and tasks in a single list, so you don't +have to guess which kind of thing you're looking for. + +``` +f:bus stops +``` + +With no search text it shows a starting point instead: a few challenges to +explore and the featured projects. + +> This mode is labelled **Find a Feature by Name** in the search box, and +> described there as a search for geographic features. It currently searches +> MapRoulette's own projects, challenges and tasks rather than OSM features. +{: .legacy} + +### `tc:` and `cc:` — search comments + +Search the text of comments left on tasks (`tc:`) or on challenges (`cc:`), +which is the quickest way back to a discussion you half-remember. Results show +who wrote each comment. + +``` +tc:bad imagery +``` + +> Older versions of MapRoulette used `m/`, `n/` and `p/` in the challenge +> search box to move the map to a bounding box, run a Nominatim search, or +> filter by project. `p/` is now `p:`, the Nominatim search has become the +> location filter on +> [Explore Challenges](/documentation/discovering-challenges/), and there +> is no longer a command for moving the map to a raw bounding box. +{: .legacy} diff --git a/_documentation/getting-started/04-point-scoring.md b/_documentation/getting-started/04-point-scoring.md new file mode 100644 index 0000000..0a48915 --- /dev/null +++ b/_documentation/getting-started/04-point-scoring.md @@ -0,0 +1,39 @@ +--- +title: Earning Points and Levelling Up +--- + +## Points + +Points are awarded for each task that is completed as follows: + +| Completion Status | Points Awarded | +| ------------------------- | :------------: | +| Fixed | 5 | +| Not an Issue[^1] | 3 | +| Already Fixed | 3 | +| Can't Complete[^2] | 1 | +| Skipped | 0 | + +[^1]: Recorded as "False Positive" in exports, task tables and the API. +[^2]: Previously called "Too Hard". + +## Levels + +Your points also determine your **mapper level**. Level is derived from your +score with: + +``` +level = floor(sqrt(score / 10)) +``` + +so the score needed to reach a level is `level² × 10` — each level takes +progressively more points than the last. Level 5 needs 250 points, level 10 +needs 1,000, and level 50 needs 25,000. + +Your current level, the points you've earned within it, and how many are left +until the next one, are shown in the middle column of your +[Dashboard](/documentation/your-dashboard/). Selecting it opens the +**Mapper Level System** dialog, which lists every milestone level and its title +— from *New Recruit* at level 1 through *Rising Scout*, *Dedicated Mapper*, +*Master Navigator* and *Legendary Cartographer* up to *Transcendent +Cartographer* at level 316 (a million points). diff --git a/_documentation/mapping/01-using-layouts.md b/_documentation/mapping/01-using-layouts.md new file mode 100644 index 0000000..7c18c36 --- /dev/null +++ b/_documentation/mapping/01-using-layouts.md @@ -0,0 +1,48 @@ +--- +title: The Task Screen +--- + +The task screen is where mappers do the actual work: task instructions and +history on one side, the map or the editor on the other. Rather than a grid of +widgets you assemble yourself, it is a fixed two-panel layout you can resize +and collapse to suit your screen. + +### The two panels + +- **Left — the task panel.** Everything about the task, in three tabs: + - **Instructions** — the challenge and task instructions, the task's MR Tags, + and, when you're working on several tasks together, the list of bundled + tasks + - **Data** — the task's own data, in three collapsible sections: + **Properties** (the task feature's properties: its OSM tags and anything + else carried in the challenge's GeoJSON), **GeoJSON** (the raw geometry, + with a button to copy it) and **OSM feature** (the OSM element the task + points at, linked out to OpenStreetMap) + - **Comments** — the task's comment and status history, and the box to add + your own comment + + The task actions — lock, editor, and the completion buttons — sit at the + bottom of this panel. + +- **Right — the map, or the editor.** The task map, which the + [inline iD editor](/documentation/rapid-editor/) replaces while you're + editing. + +### Resizing + +Drag the handle between the two panels to give either one more room; the task +panel can take between 20% and 50% of the width. On a narrow screen the panels +stack, and the task information becomes a drawer you pull up over the map. + +The map has its own space-saving controls: the control stack collapses out of +the way, task markers can be hidden with H, and marker clustering +can be toggled. While the [built-in editor](/documentation/rapid-editor/) is +open, MapRoulette's controls float over it in a panel you can drag wherever you +like. The challenge page also has a **Show Map** / **Hide Map** +toggle, for when you'd rather browse without one. + +> Saved, named, importable and exportable widget layouts — and the **Edit +> Layout** / **Add Widget** controls that went with them — are not part of the +> rebuilt interface. Layouts you exported from an older version of MapRoulette +> can't be imported here. +{: .legacy} diff --git a/_documentation/mapping/02-rapid-editor.md b/_documentation/mapping/02-rapid-editor.md new file mode 100644 index 0000000..99d6cd7 --- /dev/null +++ b/_documentation/mapping/02-rapid-editor.md @@ -0,0 +1,56 @@ +--- +title: Editing inside MapRoulette +--- + +Most tasks can be edited without leaving MapRoulette, so you don't have to +bounce out to a separate application and back. + +## The built-in iD editor + +On a task's map, choose **Edit in iD** to open the iD editor inline, in place +of the task map. The task's OSM features are pre-selected for you, and the +changeset comment is pre-filled from the challenge, exactly as it would be if +you had opened iD in a new tab. + +### MapRoulette's controls + +A small panel floats over the editor with MapRoulette's own controls. Drag it +by the grip on its left edge to move it anywhere on screen — it starts just +below iD's toolbar, and wherever you put it is remembered for next time. The +chevron beside the grip collapses it down to just the MapRoulette logo. + +- **Unsaved changes** — how many elements you have pending. Click it to see + exactly what they are: every element created, modified or deleted, with each + modified element's tags shown against how they looked before you started +- **Re-Center** — reset the view back to the task location +- **Select Tasks** — re-select this task's features in iD, handy after you've + clicked elsewhere on the map +- **Focus** / **Show All** — hide everything except the task's features, or + bring the rest of the map back. Hidden features can't be clicked either, so + it's a good way to work on a crowded map without selecting a neighbour by + accident +- **Close editor** — return to the task map. If you have unsaved edits you'll + be asked to confirm + +The task panel on the left also lists your unsaved edits as you work, so you +can see what you're about to submit without opening the editor's own save +dialog. + +You still save your work through iD itself, and then set the task status in +MapRoulette as usual. + +## Opening an external editor instead + +The editor button in the task actions opens the task in whichever editor you've +set as your default — iD, JOSM, level0 or Rapid — in a separate tab or +application. See [Setting your default OSM +Editor](/documentation/setting-your-default-osm-editor/). + +> Earlier versions of MapRoulette embedded the **Rapid** editor in the task +> screen. Rapid is now offered as an external editor only; the embedded editor +> is iD. +{: .legacy} + +[Tag Fix challenges](/documentation/tag-fix-challenges/) always use the +built-in iD editor, whatever your default is, because MapRoulette applies the +challenge's suggested tags there for you. diff --git a/_documentation/mapping/03-solving-multiple-tasks-together.md b/_documentation/mapping/03-solving-multiple-tasks-together.md new file mode 100644 index 0000000..ab3b0cd --- /dev/null +++ b/_documentation/mapping/03-solving-multiple-tasks-together.md @@ -0,0 +1,54 @@ +--- +title: Solving Multiple Tasks Together +--- + +Many MapRoulette Challenges have Tasks that are geographically so close +together that it is more efficient to solve several of them as if they were one +Task. MapRoulette calls a group of tasks worked together a **bundle**, and the +tools for building one are built into the task map — there is nothing to add or +configure first. + +### Building a bundle + +Open a task, then use the **Work on multiple tasks** panel on the map. There +are two ways to add tasks to your selection: + +- **Draw to add tasks** (or press D) and then click and drag a shape + around the tasks you want. Press Esc to cancel while drawing. +- Select a nearby task marker on the map and choose **Add to Bundle** in the + task panel. + +The panel keeps a running count — *Working on 4 tasks* — and a task can be +taken back out again with **Remove from Bundle**. A bundle can hold up to 50 +tasks; the panel says so and stops accepting more once you reach the limit. + +The task you started from is the **primary** task of the bundle, and is marked +as such in the bundled task list on the **Instructions** tab. + +### Working the bundle + +Once tasks are bundled, completing the primary task completes all of them +together — you set one status, leave one comment, and every task in the bundle +receives it. Locking works the same way: locking the primary task locks the +whole bundle, which is why your Dashboard shows locked bundles as *n tasks*. + +A few map controls help while you work: + +- **Center to Bundle** fits the map to every task in the bundle rather than + just the primary one +- F cycles between showing only the tasks you've selected and + showing everything nearby +- **Show tasks from other challenges** brings in task markers that don't belong + to this challenge, so you can see what else is around + +If you're editing with the [inline iD editor](/documentation/rapid-editor/), +**Select All** in the bundled task list selects every bundled task's features +in iD at once. + +### Undoing a bundle + +**Work on only the primary task** (or press Delete) unbundles +everything and leaves you with the task you started on. **Reset to initial +bundle** restores the bundle as it was when the task loaded, which is useful if +the challenge itself shipped the tasks pre-bundled. Unbundling never deletes +tasks — it only separates them. diff --git a/_documentation/mapping/04-tag-fix-challenges.md b/_documentation/mapping/04-tag-fix-challenges.md new file mode 100644 index 0000000..bb01454 --- /dev/null +++ b/_documentation/mapping/04-tag-fix-challenges.md @@ -0,0 +1,79 @@ +--- +title: Tag Fix Challenges +--- + +Most MapRoulette tasks ask you to go and fix something yourself. A **Tag Fix** +task is different: the challenge already knows what it thinks the change should +be, and hands it to you ready-made. Your job is to judge whether it's right. + +Consider this aerial image of a Wendy's restaurant: + +![](/media/tagfix.png){:width="500"} + +You can see from the aerial imagery that this restaurant has a `drive_through`: +cars snake around the structure on a dedicated lane. But the restaurant does not +have `drive_through=yes` in OSM. That is exactly the kind of small, verifiable +change a Tag Fix challenge is built for. + +## Working a Tag Fix task + +When you lock a Tag Fix task, MapRoulette opens the built-in **iD** editor for +you automatically and applies the challenge's suggested tags there as unsaved +edits. It uses iD whatever editor you normally prefer, because iD is the one +MapRoulette can drive on your behalf. + +Nothing is submitted for you. The changes sit in iD exactly as though you had +typed them, so you can: + +- look them over on the map, with the affected element already selected +- correct a value the challenge got slightly wrong +- undo one you disagree with +- add something the challenge missed + +and then save them as your own edit, through iD, and set the task status as +usual. + +## Seeing what changed + +The task panel on the left shows the change in two stages. + +**Before the editor opens** it lists what the challenge suggests, compared +against the element's current tags in OpenStreetMap — so a suggestion the +element already satisfies is shown as such rather than as a change. + +**Once the editor is open** it switches to your unsaved edits: everything +currently pending, whether the challenge suggested it or you did it yourself. +Each modified element's tags are shown against how they looked before you +started. + +### Reset + +While a Tag Fix task is open in the editor, the panel offers a **Reset**. It +restores the challenge's suggestion exactly: the element's original tags with +the suggested change applied, discarding anything else you did to that element. + +The panel tells you which state you're in — whether the elements still match +what the challenge suggests, or how many have drifted from it because you undid +something, mistyped a value, or edited further. + +Reset only touches the elements the challenge names. Edits you made to other +elements are yours and are left alone. + +## Working several at once + +If you [bundle tasks together](/documentation/solving-multiple-tasks-together/), +every bundled Tag Fix task's suggestion is applied. Adding a task to the bundle +applies its suggestion; removing one takes its suggestion back out again, +leaving any editing you did to that element yourself in place. + +## Limits + +Only tag changes to existing elements are applied for you. A challenge can also +describe creating or deleting elements, and those are deliberately left for you +to do by hand — applying them automatically would be a much larger claim than +"these tags look wrong". + +> There is no longer a supported way to create a Tag Fix challenge from the +> MapRoulette interface. Tag Fix challenges are a kind of Cooperative +> Challenge, and cooperative challenges cannot be created here. +{: .legacy} diff --git a/_documentation/migrating/01-maproulette-3-to-4.md b/_documentation/migrating/01-maproulette-3-to-4.md new file mode 100644 index 0000000..8cdda17 --- /dev/null +++ b/_documentation/migrating/01-maproulette-3-to-4.md @@ -0,0 +1,70 @@ +--- +title: Moving from MapRoulette 3 to MapRoulette 4 +--- + +MapRoulette 4 is a rebuilt frontend. Your account, projects, challenges and +tasks are unchanged — the server behind both versions is the same one, so +nothing you have created needs migrating. What changed is the interface, and a +number of features that have not been rebuilt yet. + +This page lists only what actually differs. Anything you did in MapRoulette 3 +that isn't mentioned here works the same way, so if a feature you rely on is +absent from these tables, there is nothing to learn about it. + +Where a feature is listed as gone, the [HTTP +API](https://maproulette.org/docs/swagger-ui/index.html?url=/assets/swagger.json&docExpansion=none) +usually still exposes it, because the data model did not change. + +## For mappers + +| What you did in MR3 | Where it stands in MR4 | +|:--------------------|:-----------------------| +| Picked any imagery from the OSM editor layer index | The base layers are now a fixed set bundled with the frontend. See [Setting your Map Base Layer](/documentation/setting-your-map-base-layer/). | +| Turned on Mapillary, KartaView or OSM data overlays | Not part of the task map. Turn them on inside the iD editor instead, which carries its own photo and OSM data overlays. See [Editing inside MapRoulette](/documentation/rapid-editor/). | +| Edited with the embedded **Rapid** editor | Rapid is now an external editor. The embedded editor is iD. See [Rapid Editor](/documentation/rapid-editor/). | +| Saved, named, imported or exported widget layouts | Not available, and layouts exported from MR3 cannot be imported. See [Using Layouts](/documentation/using-layouts/). | +| Worked Tag Fix challenges | The editor opens automatically with the proposed tags applied, for you to review and save as your own edit, rather than approved with a Yes/No panel. See [Tag Fix Challenges](/documentation/tag-fix-challenges/). | +| Reviewed tasks | Not available. | +| Reported a challenge | The report goes to the MapRoulette administrators inside the app, rather than opening a public issue in a GitHub repository. See [Filing a Challenge Report](/documentation/challenge-flagging/). | +| Typed `m/`, `n/` or `p/` in the search box | `p/` is now `p:`; the Nominatim search became the location filter on [Explore Challenges](/documentation/discovering-challenges/); there is no bounding-box command. See [Searchbox Short Commands](/documentation/searchbox-short-commands/). | + +## For challenge managers + +| What you did in MR3 | Where it stands in MR4 | +|:--------------------|:-----------------------| +| Styled task features by property | Not available. | +| Created cooperative (including Tag Fix) challenges | Not available. | +| Created virtual challenges, or virtual projects | Not surfaced in the frontend. Both still exist in the API. | + +## For server administrators + +The biggest change is how the frontend is configured. + +- Settings are now **runtime**, not build-time. They are prefixed `VITE_` + rather than `REACT_APP_`, and are written into an `env.json` that the browser + loads before the app boots — so one built image can be reconfigured per + deployment without rebuilding. See [Runtime + Configuration](/documentation/runtime-configuration/). +- Base layers are no longer pulled from the editor layer index at build time. + `REACT_APP_ADDITIONAL_INDEX_LAYERS`, `REACT_APP_DEFAULT_MAP_LAYERS`, + `REACT_APP_DEFAULT_MAP_LAYER_ID` and `REACT_APP_MAP_LAYER_API_KEYS` are gone, + as are `src/customLayers.json` and the generated `src/defaultLayers.json`. + See [Map Layer Management](/documentation/map-layer-management/). +- The imagery overlay settings — `REACT_APP_IMAGERY_OPENSTREETCAM`, + `REACT_APP_MAPILLARY_API_KEY` and `REACT_APP_OSM_DATA_OVERLAY` — are gone + with the overlays themselves. +- `REACT_APP_SYSTEM_NOTICES_URL` is gone. System notices are now served by the + backend, which is where the URL of the notices file is configured. See + [System-Notice Management](/documentation/system-notice-management/). +- `REACT_APP_GITHUB_ISSUES_API_OWNER`, `REACT_APP_GITHUB_ISSUES_API_REPO` and + `REACT_APP_GITHUB_ISSUES_API_TOKEN` are gone. Challenge reports are stored by + the backend and triaged by a super user, so the frontend no longer needs a + repository or a token that can open issues in it. See [Filing a Challenge + Report](/documentation/challenge-flagging/). + +## Reading the rest of these docs + +Pages that describe something MapRoulette 3 did but MapRoulette 4 does not +carry a highlighted note saying so, so you can tell at a glance whether what +you are reading applies today. Every page otherwise describes the current +frontend. diff --git a/_documentation/migrating/02-documentation-changes.md b/_documentation/migrating/02-documentation-changes.md new file mode 100644 index 0000000..e43098e --- /dev/null +++ b/_documentation/migrating/02-documentation-changes.md @@ -0,0 +1,97 @@ +--- +title: What changed in these docs +--- + +These docs were reorganised and rewritten alongside MapRoulette 4. If you have +read them before, or have links saved, this page summarises what moved and what +went away. + +At a glance: **46 English pages became 42**, arranged in **10 sections instead +of 6**, and every page was reviewed against the current frontend. + +## URLs changed + +Pages used to live under a locale segment: + +``` +old: /en-US/documentation/your-dashboard/ +new: /documentation/your-dashboard/ +``` + +Old links still work — anything under `/en-US/` is redirected to the flat +address — so bookmarks and links from elsewhere are safe. A page's slug is +unchanged by which section it sits in, so pages that moved between sections +kept their address. + +## Sections were reorganised + +The old grouping put beginner and expert material for the same topic in +different places. The new one is organised by what you are doing. + +| Old section | Became | +|:------------|:-------| +| Basics | Getting Started, User Settings, Mapping Tasks, Challenges | +| Advanced | Mapping Tasks, Getting Started, Advanced | +| Creating Challenges | Challenges, Tasks | +| New Topics | Getting Started, Challenges, Mapping Tasks | +| Teams | Teams, Projects, Tasks | +| Server Admin | Server Admin | +| — | Migrating from MR3 (new) | + +The sections now are Getting Started, Migrating from MR3, Mapping Tasks, User +Settings, Projects, Challenges, Tasks, Teams, Advanced and Server Admin. + +## Pages that went away + +Seven pages were removed. None of them have redirects, so a saved link to one +will 404. + +| Removed page | Why | +|:-------------|:----| +| Reviewing | Not available in the current frontend | +| Using Mapillary Images | The Mapillary overlay is not part of the current frontend | +| Styling Task Features | Not part of the current frontend | +| Creating Cooperative Challenges | Cooperative challenges cannot be created | +| Editing Virtual Challenges | Not surfaced in the frontend | +| Virtual Projects | Not surfaced in the frontend | +| Translating the Docs | The docs are English-only for now — see below | + +Three pages were added: **Runtime Configuration**, describing the `VITE_*` +settings that replaced MapRoulette 3's `REACT_APP_*` ones, and the two pages of +this Migrating from MR3 section. + +## Pages that moved rather than went + +Four pages describe features that were missing when MapRoulette 4 was first +documented and have since been built. They have moved out of **Not Implemented +Yet** and into the sections they belong to, and their notices are gone: + +| Page | Now in | +|:-----|:-------| +| Setting The Basemap Layer For Your Challenge | User Settings | +| Challenge Managers: filtering tasks by properties | Challenges | +| Templating in Challenge Instructions | Challenges | +| System-Notice Management | Server Admin | + +Both have since left it — Following for Teams and Tag Fix Challenges for +Mapping Tasks — so the **Not Implemented Yet** section is gone entirely. + +## Translations were removed + +The docs used to carry partial translations into German, Spanish, French, Dutch +and Russian. Those files covered a small and uneven fraction of the site, and +had drifted badly out of date against the English pages — which were themselves +being rewritten. Rather than ship translations describing a version of +MapRoulette that no longer exists, they were removed along with the Transifex +setup and the page explaining how to contribute one. + +## Every page was checked against the app + +The largest change is not structural. Every page was re-read against the current +frontend, and anything that no longer matched was either corrected or marked. + +Where MapRoulette 3 did something MapRoulette 4 does not, the page now says so +in a highlighted note rather than quietly describing behaviour you cannot find. +There are a dozen or so such notes across the site. If you want the whole picture in one +place instead of page by page, see [Moving from MapRoulette 3 to MapRoulette +4](/documentation/maproulette-3-to-4/). diff --git a/_documentation/new-topics/bulk-editing-challenges.en_US.md b/_documentation/new-topics/bulk-editing-challenges.en_US.md deleted file mode 100644 index 3b49173..0000000 --- a/_documentation/new-topics/bulk-editing-challenges.en_US.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: Bulk Editing Challenges ---- - -Project owners can now **Bulk-edit** challenges within the same project. While this feature isn't as robust as editing a single challenge individually, there are a few fields that allow you to edit multiple challenges for quality of life purposes. - -**Keep in mind that this feature, for most fields, will overwrite the original data of each challenge if you choose to utilize the field. Since each challenge can have different data, you will not have context on this page of what you are overwriting. Use at your own risk. Fields that you leave alone will leave the original data the way it is.** - -## Go to your Project's admin page and select challenges - -Simply go to a project admin page. In the challenges widget, select the graph icon to the right of each challenge you would like to edit simultaneously. - -![](/media/bulk-edit-1.png){:width="500"} - -You can also choose to "select-all" by clicking the graph icon at the top of the list. - -## Bulk Edit Page - -Next, select the gear icon on the top right and select "Edit Selected" - -![](/media/bulk-edit-2.png){:width="500"} - -You'll be directed to the bulk edit page. - -## Remove a challenge from Bulk Edit - -You should see a list of the challenges you will be editing simultaneously. If you change your mind on any of the challenges, but don't want to go back and re-select them, you can click the "X" symbol to the right of the challenge name. - -![](/media/bulk-edit-3.png){:width="700"} - -## Bulk Editing Guidelines - -1. Any fields you choose to use for bulk editing will be used to **overwrite** the data that is on each challenge. - -2. Any fields you leave alone on the bulk edit page will not do anything to the existing challenge data. - -## Submitting A Bulk Edit - -Once you've proposed all of the changes you need on the form, press Submit and you will be presented with a confirmation modal that indicates all of the changes that will be made on each challenge. - -![](/media/bulk-edit-4.png) - -**Cancel Edit** will allow you to go back to the form and make any additional changes you like. Additionally you can choose to abandon all edits by clicking "Cancel Edit" on the bulk edit page. - -**Submit Bulk Edit** will proceed with the submission of edits on each challenge. - diff --git a/_documentation/new-topics/bulk-editing-challenges.fr_FR.md b/_documentation/new-topics/bulk-editing-challenges.fr_FR.md deleted file mode 100644 index b336e52..0000000 --- a/_documentation/new-topics/bulk-editing-challenges.fr_FR.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: Modification des défis en masse ---- - -Les propriétaires de projets peuvent désormais **éditer en bloc** des défis au sein d'un même projet. Bien que cette fonctionnalité ne soit pas aussi robuste que l'édition de chaque défi individuellement, il y a quelques champs qui vous permettent d'éditer plusieurs défis pour des raisons de confort personnel. - -**Gardez à l'esprit que cette fonction, pour la plupart des champs, écrasera les données originales de chaque défi si vous choisissez d'utiliser le champ. Étant donné que chaque défi peut avoir des données différentes, vous n'aurez pas de visibilité sur cette page quant à ce que vous écrasez. Vous l'utiliserez à vos risques et périls. Les champs que vous ne modifiez pas laisseront les données d'origine telles qu'elles sont. - -## Aller sur la page d'administration de votre projet et sélectionner les défis - -Il suffit de se rendre sur la page d'administration d'un projet. Dans le widget des défis, sélectionnez l'icône à droite de chaque défi que vous souhaitez modifier simultanément. - -![](/media/bulk-edit-1.png){:width="500"} - -Vous pouvez également choisir de "sélectionner tout" en cliquant sur l'icône graphique en haut de la liste. - -## Page Édition en bloc - -Ensuite, cliquez sur l'icône en forme de roue crantée en haut à droite et sélectionnez "Modifier la sélection" - -![](/media/bulk-edit-2.png){:width="500"} - -Vous serez redirigé vers la page d'édition en bloc. - -## Retirer un défi de l'édition en bloc - -Vous devriez voir une liste des défis que vous allez modifier simultanément. Si vous changez d'avis sur l'un des défis, mais que vous ne souhaitez pas revenir en arrière et le sélectionner à nouveau, vous pouvez cliquer sur le symbole "X" à droite du nom du défi. - -![](/media/bulk-edit-3.png){:width="700"} - -## Principes de l'édition en bloc - -1. Tous les champs que vous choisissez d'utiliser pour l'édition en masse seront réutilisés pour **écraser** les données qui se trouvent sur chaque défi. - -2. Tous les champs que vous ne modifiez pas sur la page d'édition en bloc ne changeront rien aux données existantes du défi. - -## Soumettre une modification en bloc - -Une fois que vous avez proposé toutes les modifications dont vous avez besoin sur le formulaire, cliquez sur Soumettre et vous verrez apparaître une fenêtre de confirmation qui indique toutes les modifications qui seront apportées à chaque défi. - -![](/media/bulk-edit-4.png) - -**Annuler les modifications** vous permettra de revenir au formulaire et d'y apporter les modifications que vous souhaitez. En outre, vous pouvez choisir d'abandonner toutes les modifications en cliquant sur "Annuler les modifications" sur la page d'édition en bloc. - -**Soumettre les modifications en bloc** vous permettra de soumettre les modifications pour chaque défi. - diff --git a/_documentation/new-topics/bulk-editing-challenges.nl.md b/_documentation/new-topics/bulk-editing-challenges.nl.md deleted file mode 100644 index 317e706..0000000 --- a/_documentation/new-topics/bulk-editing-challenges.nl.md +++ /dev/null @@ -1,49 +0,0 @@ ---- -title: Bulk Editing Challenges ---- - -Projecteigenaars kunnen nu missies **bewerken in bulk** binnen hetzelfde project. Hoewel deze functie niet zo robuust is als het bewerken van een individuele missie, zijn er enkele velden die je toelaten meerdere missies te bewerken. Dit om het je gemakkelijker te maken. - -**Wees gewaarschuwd: deze functie zal, voor de meeste velden, de originele data van elke missie overschrijven wanneer je ervoor kiest het veld te gebruiken. Aangezien elke missie andere data kan hebben, krijg je geen context op deze pagina over wat je aan het overschrijven bent. Gebruik is op eigen risico. Velden die je niet gebruikt zullen de originele data behouden.** - -## Ga naar de beheerpagina van je project en selecteer missies - -Ga naar de beheerpagina van een project. Selecteer in het missies-widget het grafiek icoontje rechts van elke missie die je simultaan wil bewerken. - -![](/media/bulk-edit-1.png){:width="500"} - - -Je kan er ook voor kiezen om allen te selecteren door op het grafiek icoontje bovenaan de lijst te klikken. - -## Bulkbewerkingspagina - -Selecteer vervolgens het tandwiel icoontje bovenaan rechts, en klik op "Geselecteerd Bewerken" - -![](/media/bulk-edit-2.png){:width="500"} - - -Je zal worden doorgestuurd naar de bulkbewerkingspagina. - -## Een uitdaging verwijderen uit bulk bewerken - -Je ziet nu een lijst met missies die je tegelijkertijd gaat bewerken. Als je van gedachten verandert over een van de missies, maar niet terug wilt gaan en ze opnieuw wilt selecteren, kun je op het "X"-symbool rechts van de naam van de uitdaging klikken . - -![](/media/bulk-edit-3.png){:width="700"} - - -## Bulkbewerking richtlijnen - -1. Elk veld dat je kiest om te gebruiken voor bulkbewerkingen zal de originele data van elke missie **overschrijven**. - -2. Elk veld dat je niet aanpast op de bulkbewerkingspagina, zal niets veranderen aan de oorspronkelijke data van elke missie. - -## Een bulkbewerking uitvoeren - -Nadat je alle wijzigingen die je wenst hebt ingevuld op het formulier, klik je op 'Dien in'. Je krijgt dan een bevestigingsmelding die alle wijzigingen voor alle missies samenvat. - -![](/media/bulk-edit-4.png) - -**Annuleer Bewerking** laat je toe om terug te gaan naar het formulier en aan te passen wat je wil. Bijkomend kan je ervoor kiezen om te stoppen met het opstellen van de bulkbewerking door op '"Annuleer Bewerking" op de bulkbewerkingspagina te drukken. - -**Dien bulkbewerking in** zal verdergaan met het indienen van de wijzigingen van elke missie. - diff --git a/_documentation/new-topics/bulk-editing-challenges.ru.md b/_documentation/new-topics/bulk-editing-challenges.ru.md deleted file mode 100644 index 8c77491..0000000 --- a/_documentation/new-topics/bulk-editing-challenges.ru.md +++ /dev/null @@ -1,49 +0,0 @@ ---- -title: Bulk Editing Challenges ---- - -Владельцы проектов теперь могут осуществлять **Массовое редактирование** задач в рамках одного проекта. Хотя данная функция не так эффективна, как редактирование отдельной задачи, благодаря ей есть несколько полей, которые позволяют редактировать сразу много задач - это облегчит вам жизнь. - -**Помните, что для большинства полей данная функция перезапишет исходные данные каждой отдельной задачи, если вы решите использовать это поле. Поскольку каждое задание может иметь разные данные, на этой странице вы не увидите контекста того, что вы перезаписываете. Используйте эту функцию на свой страх и риск. Поля, которые вы не будете трогать, сохранят исходные данные такими, какие они есть.** - -## Перейдите на страницу администрирования вашего Проекта и выберите задачи. - -Просто перейдите на страницу администрирования проекта. В виджете задач выберите значок графика справа от каждой задачи, которую вы хотите редактировать одновременно. - -![](/media/bulk-edit-1.png){:width="500"} - - -Вы также можете выбрать "выделить все", нажав на значок графика вверху списка. - -## Страница массового редактирования - -Далее, выберите значок передач справа вверху и отметьте "Изменить Выбранные" - -![](/media/bulk-edit-2.png){:width="500"} - - -Вы будете перенаправлены на страницу массового редактирования. - -## Удалить задачу из массового редактирования - -Осмотрите список задач, которые вы будете редактировать одновременно. Если вы передумали по какой-либо из них, но не хотите возвращаться и выбирать их повторно, вы можете нажать на символ "X" справа от названия задачи. - -![](/media/bulk-edit-3.png){:width="700"} - - -## Руководство по массовому редактированию - -1. Любые поля, которые вы выбираете для массового редактирования будут использованы для **перезаписи** данных, которые есть в каждой из задач. - -2. Любые поля, которые вы не используете на странице массового редактирования, не повлияют на существующие данные внутри задач. - -## Отправка массового редактирования - -Как только вы внесли все необходимые изменения в форму, нажмите Отправить, и вам будет представлено модальное окно подтверждения, в котором будут указаны все изменения, вносимые в каждую из задач. - -![](/media/bulk-edit-4.png) - -**Отменить редактирование** позволяет вернуться к форме и внести любые дополнительные изменения, которые вы бы хотели. Кроме того, вы можете отказаться от всех изменений, нажав "Отменить редактирование" на странице массового редактирования. - -**Отправить массовое редактирование** продолжит отправку изменений по каждой из задач. - diff --git a/_documentation/new-topics/challenge-comments.en_US.md b/_documentation/new-topics/challenge-comments.en_US.md deleted file mode 100644 index 8ce0c99..0000000 --- a/_documentation/new-topics/challenge-comments.en_US.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Challenge Comments ---- - -In an effort to provide more tooling for users to contact challenge owners, **Challenge Comments** have been added as a feature in addition to Task Comments. This allows users to address issues or assessments that could be systemic beyond just one task, and to get clarity from the owner or recommend changes without need to flag or report a challenge. - -To navigate to a challenge's comments and to post a comment, simply go to a challenge overview page like [this one](https://maproulette.org/browse/challenges/40609). Then click on the link "Get In Touch". - -![](/media/challenge-comments-2.png){:width="700"} - -## Submitting a comment - -Messages you submit here will automatically notify the challenge owner, so there's no need to include the challenge owner's tag. However, non-owners will still need to be tagged in the comment if you want them to be notified. - -## Task Specific Comments - -Task specific comments can be viewed here and will be included in the challenge comment feed by simply clicking the "Task Comments" checkbox. - diff --git a/_documentation/new-topics/challenge-comments.fr_FR.md b/_documentation/new-topics/challenge-comments.fr_FR.md deleted file mode 100644 index b672e36..0000000 --- a/_documentation/new-topics/challenge-comments.fr_FR.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Commentaires de défis ---- - -Dans le but de fournir plus d'outils aux utilisateurs et utilisatrices pour contacter les propriétaires des défis, les **commentaires de défis** ont été ajoutés en tant que fonctionnalité complémentaire aux commentaires de tâches. Cela permet d'aborder des questions ou des analyses qui pourraient être systémiques au-delà d'une seule tâche, et d'obtenir des éclaircissements de la part du ou de la propriétaire du défi, ou de recommander des changements sans avoir besoin de marquer ou de signaler un défi. - -Pour accéder aux commentaires d'un défi et publier un commentaire, il suffit de se rendre sur la page de présentation du défi, comme [celle-ci](https://maproulette.org/browse/challenges/40609). Cliquez ensuite sur le lien "Prendre contact". - -![](/media/challenge-comments-2.png){:width="700"} - -## Envoyer un commentaire - -Le ou la propriétaire du défi sera automatiquement informé des messages que vous envoyez ici. Il n'est donc pas nécessaire de l'identifier dans le commentaire. Cependant, les personnes qui ne sont pas propriétaires du défi devront être identifiées dans le commentaire si vous souhaitez qu'elles soient informées. - -## Commentaires spécifiques aux tâches - -Les commentaires spécifiques aux tâches peuvent être consultés ici et seront inclus dans le fil de commentaires du défi en cliquant simplement sur la case à cocher "Commentaires sur les tâches". - diff --git a/_documentation/new-topics/challenge-comments.nl.md b/_documentation/new-topics/challenge-comments.nl.md deleted file mode 100644 index b25ce74..0000000 --- a/_documentation/new-topics/challenge-comments.nl.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: Challenge Comments ---- - -In een poging om meer manieren te voorzien die gebruikers toelaten de eigenaars van de missies te contacteren, werd **Missie Opmerkingen** toegevoegd als een functie, naast de reeds bestaande Taak Opmerkingen. Dit laat gebruikers toe om problemen of opmerkingen te bespreken die meer systemisch zijn dan louter één taak. Ook laat het toe om verduidelijking of aangeraden wijzigingen van de eigenaar te krijgen, zonder hiervoor een missie te moeten rapporteren. - -Om naar de opmerkingen van een missie te gaan en een opmerking te plaatsen, ga je naar de overzichtspagina van een missie, zoals [deze](https://maproulette.org/browse/challenges/40609). Vervolgens klik je op "Neem contact met ons op". - -![](/media/challenge-comments-2.png){:width="700"} - - -## Een opmerking indienen - -Berichten die je hier indient zullen automatisch voor een melding bij de eigenaar van de missie zorgen. Het is dus niet nodig de tag van de eigenaar van de missie toe te voegen. Echter niet-eigenaars moeten nog steeds getagd worden als je wil dat deze ook een melding krijgen. - -## Taakspecifieke opmerkingen - -Taakspecifieke opmerkingen kunnen hier bekeken worden en zullen toegevoegd worden in het opmerkingenvenster door het selectievakje "Taak Opmerkingen" aan te klikken. - diff --git a/_documentation/new-topics/challenge-comments.ru.md b/_documentation/new-topics/challenge-comments.ru.md deleted file mode 100644 index c0e092e..0000000 --- a/_documentation/new-topics/challenge-comments.ru.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: Challenge Comments ---- - -Чтобы предоставить пользователям больше инструментов для связи с владельцами задач, были добавлены **Комментарии к задачам** в дополнение к уже существующим Комментариям к заданиям. Это позволяет пользователям решать возникающие вопросы, которые могут носить системный характер, выходя за рамки одного задания, а также получать разъяснения от владельца или рекомендовать изменения без необходимости отмечать задачу или сообщать о ней. - -Чтобы перейти к комментариям к задаче и опубликовать комментарий, просто перейдите на страницу обзора задания, например [эту](https://maproulette.org/browse/challenges/40609). Затем нажмите на ссылку "Связаться с нами". - -![](/media/challenge-comments-2.png){:width="700"} - - -## Отправка комментария - -Владелец задачи автоматически получит уведомление, как только вы отправите своё сообщение здесь, поэтому нет необходимости добавлять тэг владельца задачи. Однако тех, кто не является владельцем, все равно необходимо будет отметить в комментарии, если вы хотите, чтобы они были уведомлены. - -## Комментарии по конкретным заданиям - -Комментарии по конкретным заданиям можно просмотреть здесь, а, если вы хотите добавить их в список коментариев к задаче, тогда просто установите флажок «Комментарии к заданию». - diff --git a/_documentation/new-topics/challenge-flagging.en_US.md b/_documentation/new-topics/challenge-flagging.en_US.md deleted file mode 100644 index 4935ab9..0000000 --- a/_documentation/new-topics/challenge-flagging.en_US.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: Challenge Flagging ---- - -Challenge flagging allows mappers to report any questionable encounters within a challenge that did not meet quality standards. - -See original post and credits on our blog [here](https://blog.maproulette.org/2023/01/23/introducing-our-flag-report-a-challenge-feature/)! - -**Please be aware that Challenge Flagging is one of a set of features that assists mappers with reaching out to challenge owners. Flagging a challenge may not be necessary, so please review the list of features and our recommendations for [Reporting A Challenge](/en-US/documentation/reporting-a-challenge) depeding on your specific needs.** - -Upon coming across something we want to flag in a challenge, go to the challenge details page that belongs to the challenge, there you will be able to see a flag icon next to the challenge name. - -![](/media/challenge-flagging-1.png) - -Simply click on the flag icon, an email modal will appear to flag this challenge. Please include your email address, a flag description, and make sure you check \[I have attempted to contact the challenge creator\] before proceed. Click on the \[Flag Challenge\] button to submit a flag. This will open an issue in MapRoulette’s [challenge-reports repository](https://github.com/maproulette/challenge-reports/issues) on GitHub and generate a message in the comment section of this challenge. - -![](/media/challenge-flagging-2.png) - -Once the challenge is being successfully flagged, the flag icon will be filled red. - -![](/media/challenge-flagging-3.png) - -Clicking on the flag icon will redirect you to the issue’s page on GitHub. - -![](/media/challenge-flagging-4.png) - -You could also view information related to this issue in the comment section of this challenge( by clicking on Get In Touch). - -![](/media/challenge-flagging-5.png) - -Please note that only logged in user is able to flag a challenge. And if an issue has already been flagged by a user, we can only flag the same challenge again once that issue has been resolved. - -We hope flag feature will help maintain and improve the overall quality of challenges on MapRoulette by passing our users abilities to regulate. - diff --git a/_documentation/new-topics/challenge-flagging.fr_FR.md b/_documentation/new-topics/challenge-flagging.fr_FR.md deleted file mode 100644 index fe2a24f..0000000 --- a/_documentation/new-topics/challenge-flagging.fr_FR.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: Signalement des défis ---- - -La signalement d'un défi permet aux cartographes de reporter toute situation discutable concernant un défi qui n'a pas respecté les normes de qualité. - -Voir l'article original et les notes sur notre blog [ici](https://blog.maproulette.org/2023/01/23/introducing-our-flag-report-a-challenge-feature/) ! - -**Veuillez noter que le signalement des défis fait partie d'un ensemble de fonctionnalités qui aident les cartographes à contacter les propriétaires des défis. Il n'est pas forcément nécessaire de signaler un défi, c'est pourquoi nous vous invitons à consulter la liste des fonctionnalités et nos recommandations pour [Signaler un défi](/documentation/reporting-a-challenge) en fonction de vos besoins spécifiques**. - -Lorsque vous constatez une anomalie que vous souhaitez signaler dans un défi, rendez-vous sur la page des détails du défi, où vous trouverez une icône en forme de drapeau à côté du nom du défi. - -![](/media/challenge-flagging-1.png) - -Il vous suffit de cliquer sur l'icône en forme de drapeau et un formulaire de saisie apparaîtra pour vous permettre de signaler ce défi. Veuillez indiquer votre adresse électronique, une description du signalement, et assurez-vous de cocher la case \[J'ai tenté de contacter le créateur du défi\] avant de continuer. Cliquez sur le bouton \[Signaler le défi\] pour envoyer le signalement. Cela ouvrira un ticket dans le répertoire [challenge-reports repository](https://github.com/maproulette/challenge-reports/issues) de MapRoulette sur GitHub et génèrera un message dans la section commentaire de ce défi. - -![](/media/challenge-flagging-2.png) - -Une fois que le challenge a été signalé avec succès, l'icône de signalement sera remplie de rouge. - -![](/media/challenge-flagging-3.png) - -Cliquer sur l'icône de signalement vous redirigera vers la page GitHub du signalement. - -![](/media/challenge-flagging-4.png) - -Vous pouvez aussi voir les informations liées au problème dans la partie commentaire de ce challenge (en cliquant sur "Entrer en contact") - -![](/media/challenge-flagging-5.png) - -Veuillez noter que seules les personnes connectées peuvent signaler un problème. Et si un problème a déjà été signalé, il ne sera possible de signaler à nouveau le même défi qu'une fois que le problème aura été résolu. - -Nous espérons que cette fonctionnalité permettra de maintenir et d'améliorer la qualité générale des défis sur MapRoulette en donnant à nos utilisateurs la possibilité de mieux les réguler. - diff --git a/_documentation/new-topics/challenge-flagging.nl.md b/_documentation/new-topics/challenge-flagging.nl.md deleted file mode 100644 index 03e1c1e..0000000 --- a/_documentation/new-topics/challenge-flagging.nl.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: Challenge Flagging ---- - -Door het rapporteren van missies kunnen mappers melding maken van missies met een gebrekkige kwaliteit. - -Bekijk de originele post op onze blog [hierover](https://blog.maproulette.org/2023/01/23/introducing-our-flag-report-a-challenge-feature/)! - -**Houd er rekening mee dat het rapporteren van een missie één van de functies is die mappers helpen om beheerders van missies te bereiken. Het rapporteren van een missie is misschien niet nodig, dus bekijk de lijst met functies en onze aanbevelingen voor [het melden van een missie](/documentation/reporting-a-challenge) afhankelijk van je specifieke behoeften.** - -Als je iets tegenkomt dat je wilt markeren in een missie, ga je naar de pagina met de details van de missie. Daar zie je een vlagpictogram naast de naam van de missie. - -![](/media/challenge-flagging-1.png) - -Klink op het vlagpictogram, een pop-upvenster zal verschijnen om de missie te rapporteren. Gelieve je e-mailadres en reden van rapportering toe te voegen. Je dient ook de optie [ Ik heb geprobeerd de beheerder van de missie te contacteren ] aan te klikken voordat je kan rapporteren. Een rapportering zal een github issue openen in [een repository van Maproulette](https://github.com/maproulette/challenge-reports/issues). Ook zal een bericht in de commentarensectie van de missie verschijnen. - -![](/media/challenge-flagging-2.png) - -Als het rapporteren succesvol verlopen is, zal het vlagpictogram rood kleuren. - -![](/media/challenge-flagging-3.png) - -Als je dan opnieuw op het vlagpictogram drukt, zal je doorverwezen worden naar de issue-pagina op GitHub. - -![](/media/challenge-flagging-4.png) - -Je kunt ook informatie over deze kwestie bekijken in het commentaardeel van deze uitdaging (door te klikken op Neem contact op). - -![](/media/challenge-flagging-5.png) - -Alleen ingelogde gebruikers kunnen een probleem met een missie melden. Als er een probleem is gemeld, kan een probleem alleen nogmaals worden gemeld nadat het eerdere probleem is opgelost. - -We hopen dat de mogelijkheid om problemen te melden bijdraagt aan het bijhouden en verbeteren van de algehele kwaliteit van missies op MapRoulette. - diff --git a/_documentation/new-topics/challenge-flagging.ru.md b/_documentation/new-topics/challenge-flagging.ru.md deleted file mode 100644 index e7882f1..0000000 --- a/_documentation/new-topics/challenge-flagging.ru.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: Challenge Flagging ---- - -Помечание задач позволяет картографам сообщать о любых сомнительных моментах в задаче, которые не соответствуют стандартам качества. - -Вы можете ознакомиться с исходной публикацией и информацией об авторах в нашем блоге [здесь] (https://blog.maproulette.org/2023/01/23/introducing-our-flag-report-a-challenge-feature/)! - -**Пожалуйста, обратите внимание, что Помечание Задач - это одна из функций, которые помогают картографам связываться с владельцами задач. Может не быть необходимости помечать задачу, поэтому ознакомьтесь со списком функций и нашими рекомендациями для [Сообщения о проблеме](/documentation/reporting-a-challenge) в зависимости от вашего конкретного случая.** - -Если вы обнаружили что-то, что вы бы хотели пометить, перейдите на страницу сведений об этой задаче - там вы сможете увидеть значок пометки рядом с названием задачи. - -![](/media/challenge-flagging-1.png) - -Просто нажмите на значок пометки, и появится модальное сообщение электронной почты, чтобы отметить эту задачу. Прежде чем продолжить, укажите свой адрес электронной почты, описание для пометки и убедитесь, что вы отметили [Я пытался связаться с создателем задачи]. Нажмите кнопку [Пометить Задачу], чтобы отправить пометку. Это создаст тему в [хранилище отчетов о вызовах] Maproulette (https://github.com/maproulette/challenge-reports/issues) на GitHub и создаст сообщение в разделе комментариев к этой задаче. - -![](/media/challenge-flagging-2.png) - -Как только задание будет успешно помечено, значок пометки станет красным. - -![](/media/challenge-flagging-3.png) - -Нажатие на значок пометки, перенаправит вас на страницу проблемы на GitHub. - -![](/media/challenge-flagging-4.png) - -Вы также можете просмотреть информацию, связанную с этой проблемой, в разделе комментариев к этому заданию (нажав «Связаться с нами»). - -![](/media/challenge-flagging-5.png) - -Обратите внимание, что только зарегистрированный пользователь может пометить задачу. А, в случае, если данная проблема уже была помечена ранее другим пользователем, вы сможете пометить задачу снова только после того, как предыдущая проблема решена. - -Мы надеемся, что функция пометки поможет поддерживать и улучшать общее качество задач в MapRoulette, предоставляя нашим пользователям возможности регулирования. - diff --git a/_documentation/new-topics/rapid-editor.en_US.md b/_documentation/new-topics/rapid-editor.en_US.md deleted file mode 100644 index 4b50f8e..0000000 --- a/_documentation/new-topics/rapid-editor.en_US.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: Rapid Editor ---- - -In collaberation with our friends over at Rapid, we've integrated a way for you to submit map edits within MapRoulette instead of being directed to a separate application. - -The Rapid Editor is available on most Challenge Task pages. Simply start a task and within the Map Widget, click on the "Edit Mode" toggle. You'll now be able to make your edit using the widget, without need to go to a separate web page. - -![](/media/rapid-editor-1.png) - -The Rapid integration will be your default Map widget unless you switch back to "Classic Mode". - -**Please note the Rapid Editor is currently not available for Cooperative or Tag-fix challenges** - - diff --git a/_documentation/new-topics/translate-docs.en_US.md b/_documentation/new-topics/translate-docs.en_US.md deleted file mode 100644 index a3f2739..0000000 --- a/_documentation/new-topics/translate-docs.en_US.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: Help Us Translate Our Documentation ---- - -Are you multilingual? Then you can help us make MapRoulette's Documentation available in more languages. - -There are two ways you can help us translate this documentation website: using the Transifex website, or using a text editor and submitting your changes on GitHub. - -## Using Transifex - -You can use the Transifex website to add translations for parts of the MapRoulette documentation. The documentation has its own [Transifex Page](https://explore.transifex.com/maproulette/mr-docs/). You will need to create a Transifex account to submit translations using this method. - -![](/media/translate1.png){:width="700"} - -### Requesting a new language - -Go to the [Languages Page](https://app.transifex.com/maproulette/mr-docs/languages/) and click **Edit Languages**. Select the language you wish to add and click **Apply**. - -![](/media/translate2.png){:width="600"} - -### Adding translations - -Go to the [Translate Page](https://app.transifex.com/maproulette/mr-docs/translate) and in the header, select the target language you would like to help translate. - -![](/media/translate3.png){:width="800"} - -Translations added through Transifex don't appear on the website immediately. Once your contributions are submitted and reviewed, the development team will update the documentation site. - -## Using GitHub - -You can also help translate the MapRoulette Documentation by directly translating the Markdown text files that are used to generate the pages of this website. - -The documentation lives in the [maproulette/docs](https://github.com/maproulette/docs) repository. To translate a page, make a copy of the existing page's Markdown source file, and change the ISO language code in the file extension to the language you're translating to. For example, you'd rename `some-page.en_US.md` to `some-page.pt_BR.md` when translating "Some Page" from American English to Brazilian Portuguese. - -Next, open the file in a text editor and rewrite the content in the target language. You should translate all prose, including headings, alt text, and page metadata like the `title` and `slug`. But don't translate text in URLs or code examples, as this will probably break them. - -When you're done, open a [Pull Request](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request) to submit your changes. Once we've reviewed and merged them, the new translated page will appear here on the website. - diff --git a/_documentation/new-topics/your-dashboard.en_US.md b/_documentation/new-topics/your-dashboard.en_US.md deleted file mode 100644 index 62f27c5..0000000 --- a/_documentation/new-topics/your-dashboard.en_US.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: Your Dashboard ---- - -When logging into MapRoulette, you'll be presented with a customizable layout of different widgets that can help you get started on some challenges or see some highlights of your accomplishments and recent contributions. - -![](/media/dashboard-1.png) - -The main dashboard widget will display your current points and leaderboard status, and provides easy access/direction to challenges you've been working on or new challenges that may interest you. - -Just like most of the projects, challenges, and task pages, you can customize the layout of your dashboard to make it more personalized. - - -![](/media/dashboard-2.png){:width="500"} - - -Here are a list of different widgets available to you: - -![](/media/dashboard-3.png){:width="500"} - - -# Follow - -![](/media/dashboard-4.png){:width="500"} - - -Follow allows you to track the activity of other users, add new users to follow, and see who is following you. You can also control who follows you by blocking users if you choose. - -To follow a new user, click on **Following** at the top of the widget and input a users name. A dropdown of located users by your input will display and you can click on the user. The followed user will display on your list and the activity column will update appropriately. You can also click on their name and view their MapRoulette user page. - -![](/media/dashboard-5.png) - -![](/media/dashboard-6.png){:width="500"} - - -## Challenge Highlights - -This widget will showcase Challenges that have been labeled **Featured** by an admin, allowing the community more visibility over challenges with a high demand for contribution. Featured challenges will also show up at the top of your Challenge Search List. - -![](/media/dashboard-7.png) - -## Popular Challenges - -Challenges with recent contributions from the community may end up getting labeled **Popular**, and will show up in this widget. - -## Tracked Tasks - -Tasks that you've decided to Track will show up here. In order to track a task, go to the task page of the task you'd like to track. Click the gear box on the top right and select **Edit Layout**. Click the **Add Widget** dropdown and select the **More Options** widget. - -## Your Recent Contributions - -Similar to the **Follow** widget, where you can view other people's most recent work, this widget shows all of your personal recent contributions on Challenges. - diff --git a/_documentation/projects/01-projects-and-project-managers.md b/_documentation/projects/01-projects-and-project-managers.md new file mode 100644 index 0000000..1ff5248 --- /dev/null +++ b/_documentation/projects/01-projects-and-project-managers.md @@ -0,0 +1,64 @@ +--- +title: Projects and Project Managers +--- + +Projects are how challenges are organised: every challenge belongs to exactly +one project, and permissions on the project decide who can manage the +challenges inside it. + +## Managing your projects + +**Manage → Projects** (from the user menu) lists the projects you manage. From +there you can: + +- **Create Project** — a new project takes a name and a description +- open a project to see its challenges, its statistics, and its **Project + Playbook** of setup advice +- **Create challenge** inside it +- **Edit project**, **Pin project**, **Archive project**, **Enable** or + **Disable** it (see [Challenge Visibility and + Discovery](/documentation/challenge-visibility-and-discovery/)), + **Export CSV** of its tasks, or **Delete project** + +Deleting a project deletes all of its challenges and their tasks, and cannot be +undone. + +A challenge can be moved between projects you manage with **Move challenge** in +the challenge's actions menu. + +## Project roles + +Project permissions are granted per user (or per team) with one of three roles: + +**Read** — view the project overview page and the challenges under the project. + +**Write** — assist with managing existing challenges and their statuses. + +**Admin** — complete access to managing, editing or deleting the project, plus +the ability to add and remove other managers and change their privileges. + +A project always requires at least one Admin, so an admin can only be demoted +or removed once another user holds the Admin role. + +### Adding and removing managers + +The **Project managers** panel on the project's management page lists everyone +with a role on the project, and the teams granted one. From there you can: + +- search for a mapper by their OpenStreetMap username, pick the role to give + them, and add them +- change an existing manager's role from the dropdown beside their name +- remove a manager, or a team, with the bin icon + +Granting a [team](/documentation/teams/) a role gives that role to every +member, which is usually easier than adding people one at a time. A grantee who +somehow holds more than one role is shown as the strongest of them. + +## Tips + +- **Define scope early.** Use a stable naming pattern (region, theme, version) + and keep each project focused on one clear objective. +- **Publish intentionally.** Keep projects non-discoverable while iterating; + turn discoverable on only after instructions and QA checks are validated. +- **Share ownership.** Arrange co-managers before launch so triage, support and + archival responsibilities are covered. diff --git a/_documentation/server-admin/01-runtime-configuration.md b/_documentation/server-admin/01-runtime-configuration.md new file mode 100644 index 0000000..957e964 --- /dev/null +++ b/_documentation/server-admin/01-runtime-configuration.md @@ -0,0 +1,52 @@ +--- +title: Runtime Configuration +--- + +The MapRoulette frontend is configured with environment variables prefixed +`VITE_`. Unlike the older `REACT_APP_*` build-time variables, these are +**runtime** settings: the build writes them into a `env.json` file that the +browser loads before the app boots, so one built image can be reconfigured per +deployment without rebuilding. + +- In development, `env.json` is served from your local `.env` file. +- In a release build, `env.json` is emitted alongside the app containing the + defaults from `.env.example`. +- In the Docker image, any `VITE_*` variables set on the container are merged + over those defaults at start-up + (`docker/90-write-env-to-json.sh`). + +> Everything in `env.json` is downloaded by every visitor's browser. Do not put +> a secret in a `VITE_*` variable unless you are content for it to be public. + +## Settings + +| Variable | Purpose | +|:---------|:--------| +| `VITE_APP_NAME` | The name shown in the header and page titles | +| `VITE_APP_DESCRIPTION` | A description of this deployment | +| `VITE_APP_URL` | The public base URL of this deployment, used when building links to challenges and tasks. Falls back to the browser's own origin | +| `VITE_API_BASE_URL` | Base URL of the MapRoulette backend | +| `VITE_MAP_ROULETTE_SERVER_WEBSOCKET_URL` | The backend's WebSocket endpoint, used for live task and notification updates | +| `VITE_SERVER_API_KEY` | An API key sent with backend requests, where the deployment requires one | +| `VITE_OSM_SERVER` | Base URL of the OpenStreetMap website, used for user and changeset links. Defaults to `https://www.openstreetmap.org` | +| `VITE_OSM_API_SERVER` | Base URL of the OpenStreetMap API, used by the built-in iD editor. Defaults to `https://api.openstreetmap.org` | +| `VITE_SHORT_URL` | Base URL for the short links embedded in OSM changeset comments (e.g. `https://mpr.lt`). Short links are omitted if unset | +| `VITE_DOCS_BASE_URL` | Root URL of the documentation site the app's help links point at. Defaults to `https://learn.maproulette.org` | +| `VITE_EMAIL_ENFORCEMENT` | `required`, `encouraged` (the default) or `none`. Whether users must set an email address before performing management actions, or are merely prompted to | +| `VITE_DEPLOYMENT_PLUGIN_URLS` | Comma-separated URLs of [plugin](#plugins) bundles to load for every user at login | + +### Challenge reporting + +[Filing a challenge report](/documentation/challenge-flagging/) needs no +configuration. Reports are stored by the backend and triaged in-app by a super +user, so the GitHub repository and token the frontend used to require are gone. + +## Plugins + +Parts of MapRoulette ship as plugins — separately built JavaScript bundles that +the app loads at runtime and that render using the host app's own UI +components. Reviewing is the main example. + +- `VITE_DEPLOYMENT_PLUGIN_URLS` loads plugins for every user of the deployment. +- Individual users can add a plugin themselves from **Account Settings → + Plugins**, by pasting the URL of its bundle. diff --git a/_documentation/server-admin/02-map-layer-management.md b/_documentation/server-admin/02-map-layer-management.md new file mode 100644 index 0000000..e90428d --- /dev/null +++ b/_documentation/server-admin/02-map-layer-management.md @@ -0,0 +1,68 @@ +--- +title: Map Layer Management +--- + +MapRoulette's maps are rendered with [MapLibre GL](https://maplibre.org/), and +the base layers on offer are a fixed set of MapLibre style documents bundled +with the frontend: + +| Style | Source | +|:------|:-------| +| OSM Bright | OpenStreetMap vector tiles | +| OSM Carto | OpenStreetMap standard raster tiles | +| Bing Aerial | Bing Maps aerial imagery | +| Esri World Imagery | Esri World Imagery | +| Esri World Imagery (Clarity) | Esri World Imagery (Clarity) | + +Mappers switch between them with the **Map style** control on any map; the +choice is remembered in their browser. They can also add their own XYZ or WMS +layer from that control, saved to their own account and visible only to them. See [Setting your Map Base +Layer](/documentation/setting-your-map-base-layer/). + +## Changing the available layers + +The layer list is compiled into the frontend rather than configured at +deployment time. Each style lives as a JSON document in the frontend source +(`src/components/Map/`) and is registered in `src/components/Map/mapStyles.ts`: + +```ts +export const mapStyles: StyleSpecification[] = [ + asStyle(OsmBright), + asStyle(OsmCarto), + asStyle(BingAerial), + asStyle(EsriWorldImagery), + asStyle(EsriWorldImageryClarity), +] +``` + +To add, remove or reorder layers on your own installation, add a +[MapLibre style document](https://maplibre.org/maplibre-style-spec/) to that +directory, import it in `mapStyles.ts`, and rebuild. The first entry in the +array is the default. A raster style needs no `glyphs` URL of its own — +MapRoulette supplies one so that task and cluster markers can be labelled. + +The `name` in each style document is both what mappers see in the control and +the key the choice is stored under, so renaming a style resets everyone's +saved selection. + +> Note: layers are no longer pulled from the OSM [editor layer +> index](https://github.com/osmlab/editor-layer-index) at build time, and the +> `REACT_APP_ADDITIONAL_INDEX_LAYERS`, `REACT_APP_DEFAULT_MAP_LAYERS`, +> `REACT_APP_DEFAULT_MAP_LAYER_ID` and `REACT_APP_MAP_LAYER_API_KEYS` settings +> no longer exist. Neither does `src/customLayers.json` or the generated +> `src/defaultLayers.json`. If a style needs an API key, put it in the style +> document's tile URL. +{: .legacy} + +## Overlays + +> The Mapillary, OpenStreetCam/KartaView and OSM data overlays — and the +> `REACT_APP_IMAGERY_OPENSTREETCAM`, `REACT_APP_MAPILLARY_API_KEY` and +> `REACT_APP_OSM_DATA_OVERLAY` settings that controlled them — are not part of +> the current frontend, so there is nothing to configure. Mappers reach these +> overlays through the iD editor's own layer panel instead. See [Editing inside +> MapRoulette](/documentation/rapid-editor/). +{: .legacy} + +See also [Runtime Configuration](/documentation/runtime-configuration/) +for the settings that *are* configurable per deployment. diff --git a/_documentation/server-admin/03-system-notice-management.md b/_documentation/server-admin/03-system-notice-management.md new file mode 100644 index 0000000..f9674bd --- /dev/null +++ b/_documentation/server-admin/03-system-notice-management.md @@ -0,0 +1,55 @@ +--- +title: System-Notice Management +--- + +MapRoulette can display system notices — such as notice of upcoming +maintenance — as a banner across the top of every page. Notices come from a +simple JSON file that can be hosted anywhere (including a GitHub repo). The +backend fetches that file and serves it to the frontend at +`/api/v2/user/announcements`; the URL of the file is configured on the +**backend**, not on the frontend. + +The JSON file should represent a single object with a top-level `notices` +array of notice objects. Any other top-level fields are ignored. + +Each notice object should contain a `message` field, an [ISO +8601](https://en.wikipedia.org/wiki/ISO_8601) formatted `expirationTimestamp` +field in UTC, and a `uuid` field that uniquely identifies the notice. + +Example JSON: + +```json +{ + "notices": [ + { + "message": "A first notice. Maintenance is planned.", + "expirationTimestamp": "2019-08-01T17:00:00Z", + "uuid": "b98da355-a5e9-44b4-8a20-a5034d704de5" + }, + { + "message": "A second notice. Important things are happening", + "expirationTimestamp": "2019-08-04T15:00:00Z", + "uuid": "94aef98e-bf9f-46a6-a860-85e62498ae3d" + } + ] +} +``` + +Only notices that have not yet passed their `expirationTimestamp` are shown. A +notice whose timestamp cannot be parsed is skipped rather than displayed +indefinitely. + +Signed-in users can dismiss each notice, and it will not be shown to them +again — the acknowledgement is stored on their MapRoulette account, so it +follows them between browsers and devices. Signed-out visitors see notices too, +but dismissing one only lasts for that browsing session. + +The message may contain markdown. + +If you are creating a notice by hand, you may wish to take advantage of an +online UUID generator such as +. + +Removing the hosted file (or leaving none configured) simply means no banners +are shown — the frontend treats an empty or unavailable response as "no +notices" rather than an error. diff --git a/_documentation/server-admin/04-super-admin.md b/_documentation/server-admin/04-super-admin.md new file mode 100644 index 0000000..72e9532 --- /dev/null +++ b/_documentation/server-admin/04-super-admin.md @@ -0,0 +1,45 @@ +--- +title: Super Admin +--- + +Users flagged as super users on the server get a **Super Admin** entry in the +user menu, with tools that apply across the whole installation rather than to a +single project or challenge. + +Super user status is granted on the server, not from within MapRoulette. + +## User management + +Lists every account on the installation, searchable by name or email, showing +each user's role and when they joined. + +## Challenge reports + +The queue of [challenge reports](/documentation/challenge-flagging/) — mappers' +reports that a challenge is poorly designed and is causing incorrect edits. + +Each report shows the challenge and its project, who reported it and when, the +report text, and the reporter's email address if they volunteered one. That +address is only ever shown here. + +Filter the queue by status — **open**, **actioned** or **dismissed** — and, +with **Only challenges that are still active**, hide reports against challenges +that have already been archived. It opens on the open reports for still-active +challenges, which is the set worth working through. + +An open report can be opened in the challenge browser or its management page, +and is closed out as either **Mark actioned** — the concern was valid and +something was done about it — or **Dismiss**. Either decision takes an optional +note, and the report then records who decided it and when. + +## Team images + +Manages the images teams can use for their avatars. Images uploaded by teams +are reviewed here before they can be used, so an installation isn't hosting +arbitrary uploads. See [Teams](/documentation/teams/). + +> The remaining Super Admin screens — the overview dashboard, challenge and +> project administration, analytics and platform settings — +> are placeholders in the current frontend, badged **Coming Soon**. They are +> visible but do nothing yet. +{: .legacy} diff --git a/_documentation/server-admin/map-layer-management.en_US.md b/_documentation/server-admin/map-layer-management.en_US.md deleted file mode 100644 index 9fe4a2e..0000000 --- a/_documentation/server-admin/map-layer-management.en_US.md +++ /dev/null @@ -1,67 +0,0 @@ ---- -title: Map Layer Management ---- - -MapRoulette retrieves its map layer data from the [OSM Editor Layer Index](https://github.com/osmlab/editor-layer-index) at build time and, by default, makes available all global layers marked as "default" layers in the index (including overlays). OpenCycleMap, which is not currently a default in the index, is also configured to be included for backwards compatibility. - -It's possible, on a given server installation, to both choose additional layers from the OSM Editor Index and to add custom map layers that aren't present in the index. It's also possible to separately set (or override) API keys for both custom and indexed layers. - -## Including Additional Layers from the OSM Editor Layer Index - -To include additional layers already found in the OSM Editor Layer Index, simply add the desired layer ids to the `REACT_APP_ADDITIONAL_INDEX_LAYERS` configuration variable in the `.env` file. See the .env file for additional documentation. If any of those layers require API keys, then see below for how to specify keys. - -## Adding Custom Layers - -Custom layers can be added by defining them in the `src/customLayers.json` file. The contents of the file should be structured similarly to the `src/defaultLayers.json` file. - -> Note that `src/defaultLayers.json` is freshly generated and overwritten during each build, so it should not be modified directly - -Here's an example that adds the Mapbox Satellite Streets layer: - -```json -[ - { - "geometry": null, - "properties": { - "default": true, - "description": "Mapbox Satellite Streets.", - "i18n": true, - "id": "MapboxSatellite", - "max_zoom": 22, - "name": "Mapbox Satellite Streets", - "type": "tms", - "url": "https://api.mapbox.com/styles/v1/mapbox/satellite-streets-v10/tiles/256/{z}/{x}/{y}{r}?access_token={access_token}", - "attribution": { - "required": true, - "text": "Terms & Feedback", - "url": "https://www.mapbox.com/about/maps" - } - } - } -] -``` - -## Adding API Keys for Indexed or Custom Layers - -API Keys can be provided for both custom layers and layers from the OSM Editor Index by specifying them in the `REACT_APP_MAP_LAYER_API_KEYS` configuration variable in the `.env` file. You'll need to supply the layer id, the name of the substitution variable in the URL that is to be replaced with the key, and the key itself. See the .env file for additional documentation. - -## Disabling Stock Layers - -If you want full control over exactly which map layers are displayed, you can disable the stock layers by setting `REACT_APP_DEFAULT_MAP_LAYERS='disabled'` in your `.env` file. Then you can add exactly the layers you want (either from the editor index or custom, as discussed above). - -Note that this does not affect the overlays, such as Mapillary or OpenStreetCam, which can be enabled or disabled individually (discussed below). - -## Specifying a Default Map Layer - -MapRoulette comes configured to use the OpenStreetMap Standard layer as the default map layer, but you can override that by setting the `REACT_APP_DEFAULT_MAP_LAYER_ID` configuration variable in the `.env` file. See the .env file for additional documentation. - -## Controlling the Overlay Layers - -The following overlays can be individually enabled or disabled via `.env` file configuration variables. - -* OpenStreetCam imagery is enabled by default, but can be disabled by setting `REACT_APP_IMAGERY_OPENSTREETCAM='disabled'` - -* Mapillary is disabled by default, but can be enabled with a Mapillary client/api key by setting `REACT_APP_MAPILLARY_API_KEY='your-client-key'` - -* The OSM Data layer is enabled by default, but can be disabled by setting `REACT_APP_OSM_DATA_OVERLAY='disabled'` - diff --git a/_documentation/server-admin/system-notice-management.en_US.md b/_documentation/server-admin/system-notice-management.en_US.md deleted file mode 100644 index c63541e..0000000 --- a/_documentation/server-admin/system-notice-management.en_US.md +++ /dev/null @@ -1,35 +0,0 @@ ---- -title: System-Notice Management ---- - -MapRoulette supports the display of system notices -- such as notice of upcoming maintenance -- through a simple external JSON file that can be hosted anywhere (including a GitHub repo). You simply need to specify the URL to the file in the `REACT_APP_SYSTEM_NOTICES_URL` .env configuration variable. - -The JSON file should represent a single object with a top-level `notices` array of notice objects. Any other top-level fields are ignored. - -Each notice object should contain a `message` field, [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) formatted `expirationTimestamp` field in UTC, and a `uuid` field that uniquely identifies the notice. - -Example JSON: - -```json -{ - "notices": [ - { - "message": "A first notice. Maintenance is planned.", - "expirationTimestamp": "2019-08-01T17:00:00Z", - "uuid": "b98da355-a5e9-44b4-8a20-a5034d704de5" - }, - { - "message": "A second notice. Important things are happening", - "expirationTimestamp": "2019-08-04T15:00:00Z", - "uuid": "94aef98e-bf9f-46a6-a860-85e62498ae3d" - } - ] -} -``` - -Only future notices are displayed to users, based on each notice's `expirationTimestamp`. Logged-in users are given the option of acknowledging/dismissing each notice, and will not be shown the notice again once acknowledged. - -The message may contain markdown. - -If you are creating a notice by hand, you may wish to take advantage of an online UUID generator such as https://www.guidgenerator.com/online-guid-generator.aspx - diff --git a/_documentation/server-admin/system-notice-management.ru.md b/_documentation/server-admin/system-notice-management.ru.md deleted file mode 100644 index a8f6477..0000000 --- a/_documentation/server-admin/system-notice-management.ru.md +++ /dev/null @@ -1,35 +0,0 @@ ---- -title: System-Notice Management ---- - -MapRoulette поддерживает отображение системных уведомлений, например, уведомлений о предстоящем техобслуживании, через простой внешний файл JSON, который можно разместить где угодно (включая репозиторий GitHub). Вам просто нужно указать URL-адрес файла в переменной конфигурации `REACT_APP_SYSTEM_NOTICES_URL` .env. - -Файл JSON должен представлять собой один объект с массивом `notices` объектов верхнего уровня. Любые другие поля верхнего уровня игнорируются. - -Каждый объект уведомления должен содержать поле `message`, поле `expirationTimestamp` в формате [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) в формате UTC и поле `uuid`, которое создаёт уникальный идентификатор для уведомления. - -Пример JSON: - -```json -{ - "notices": [ - { - "message": "A first notice. Maintenance is planned.", - "expirationTimestamp": "2019-08-01T17:00:00Z", - "uuid": "b98da355-a5e9-44b4-8a20-a5034d704de5" - }, - { - "message": "A second notice. Important things are happening", - "expirationTimestamp": "2019-08-04T15:00:00Z", - "uuid": "94aef98e-bf9f-46a6-a860-85e62498ae3d" - } - ] -} -``` - -Пользователям отображаются только предстоящие уведомления в зависимости от `expirationTimestamp` каждого уведомления. Вошедшим в систему пользователям предоставляется возможность подтвердить/отклонить каждое уведомление, и после подтверждения уведомление больше не будет отображаться. - -Сообщение может содержать маркдаун. - -Если вы создаете уведомление вручную, вы можете воспользоваться онлайн-генератором UUID, например, https://www.guidgenerator.com/online-guid-generator.aspx. - diff --git a/_documentation/tasks/01-task-priority-rules.md b/_documentation/tasks/01-task-priority-rules.md new file mode 100644 index 0000000..316e80a --- /dev/null +++ b/_documentation/tasks/01-task-priority-rules.md @@ -0,0 +1,110 @@ +--- +title: Prioritizing Tasks +--- + +Tasks within a challenge can be prioritized by challenge managers as high, +medium, or low priority. Available higher priority tasks will generally be +served to mappers ahead of lower priority tasks. (See below for details about +how rules are applied.) + +Tasks are prioritized using priority rules that match against either task +feature properties (such as OSM tags) or their geographic location. + +## The prioritization editor + +Priorities are set on their own page: from the challenge's management page, +choose **Configure prioritization**. The page has an editor on the left and a +live preview on the right. + +The editor has a tab for each of the three tiers — **High**, **Medium** and +**Low** — plus a **Default priority** selector. Each tab holds that tier's +property rules and its geographic bounds. Beside each tier you'll see: + +- a **match count** — how many of the challenge's tasks the tier's rules + currently match +- warning badges reading **Matches all** or **No matches**, which usually mean a + rule is broader or narrower than you intended + +The preview map re-colours the challenge's tasks by the priority they would +receive, with a legend, so you can check your rules against real tasks before +committing to them. **Discard** throws away your unsaved changes; **Save** +writes them and returns you to the challenge. + +Updated rules are reapplied when you save, but it can take several minutes for +that reprioritization process to finish on the server. + +## Default priority + +MapRoulette offers an editable **default priority** that will be applied to +*any task that does not explicitly match any priority rule group*. That is, +tasks that match neither the configured high, medium, nor low priority rule +groups will receive the default priority. If no priority rules are set up, then +all tasks will receive the default priority. + +## Property rules + +Each property-based priority rule is set up with a property name, a data type, +a comparison operator, and — for most operators — a value. For example, a rule +of `building` `string` `equals` `yes` would match tasks with a `building` tag +set to `yes`. + +The available operators change depending on the type: + +| Type | Operators | +|:-----------|:----------| +| `string` | equals, does not equal, contains, exists, is missing | +| `number` | equals, does not equal, greater than, less than, greater than or equal to, less than or equal to | + +`exists` and `is missing` test only for the presence of the property, so they +take no value. It's important that the type is set correctly for the kind of +data found on the property — comparing a numeric tag as a `string` will compare +it alphabetically. + +Multiple rules can be set up in a group, joined with **AND** (*all* rules in +the group must match) or **OR** (*any* rule in the group must match). Rules can +be nested for greater granularity by adding a **Group** inside a group. + +### Matching multiple tag values with a single rule + +If you want to match a single tag against multiple possible values (such as +`highway` equal to either `trunk` or `primary`), one option is to set up a +separate rule for each value and OR them together. But MapRoulette also lets +you include multiple values separated by commas (e.g. `highway` `string` +`equals` `trunk,primary`). With "positive" operators like `equals` or +`contains`, the comma-separated values are OR'd together; with "negative" +operators like `does not equal` they are AND'd together. + +## Location rules + +Each tier can also be given geographic bounds, so a task is prioritized by +where it is. The **draw** control above the preview map offers: + +- **Rectangle** — click and drag to draw an axis-aligned box +- **Polygon** — click to drop each vertex, then double-click or press + Enter to finish; use this for any non-rectangular area +- **Select** — click a shape to select it, then drag a vertex to reshape it, a + midpoint to insert a new vertex, or the shape itself to move it. Right-click a + vertex to delete it +- **Pan** — move the map with no drawing tool active + +**Delete selected** removes the selected shape and **Clear all** removes every +shape in the tier. A tier can hold more than one shape. + +> Bounds are stored per tier, so switching tabs switches which set of shapes +> you're drawing. The shapes shown on the map belong to the tier whose tab is +> open. + +## How rules are applied + +Rules run top-down and **the first tier to match wins** — so a task matching +both the high and medium tiers is prioritized high. + +In general, higher priority tasks are served to mappers ahead of lower priority +ones. Until there are no high priority tasks left, mappers working on the +challenge will only be served high priority tasks; then normal priority tasks; +and finally low priority ones, until the challenge's tasks are exhausted. + +Please note that tasks marked **Can't Complete** with a higher priority will +still be served before any lower priority tasks. The underlying assumption is +that a more experienced mapper may still be able to resolve a task someone else +could not. diff --git a/_documentation/tasks/02-using-maproulette-tags.md b/_documentation/tasks/02-using-maproulette-tags.md new file mode 100644 index 0000000..0a1faff --- /dev/null +++ b/_documentation/tasks/02-using-maproulette-tags.md @@ -0,0 +1,54 @@ +--- +title: MapRoulette Tags +--- + +MapRoulette Tags, often called **MR Tags**, are used for custom filtering and +grouping of tasks within a challenge. MR Tags are exclusive to MapRoulette and +are not used or visible in other editors. If MR Tags are needed, the challenge +manager will typically say so in the challenge or task instructions. + +### How the data is used, with an example + +If you have a challenge in an area where there may not be enough high-quality +imagery for mappers to complete all the tasks successfully, you can ask mappers +to add a tag like `bad-imagery` when they encounter that situation. Later, when +you download the [tasks export](/documentation/exporting-challenge-data/), +you can analyse the tags to find out which areas lacked good imagery, and +potentially use that information to start something like an OpenDroneMap + +OpenAerialMap project 🙂. + +
+ A task where imagery is too poor to map from + Tags being added to a task + Tags in the task export +
+ +### Adding MR Tags + +Mappers add MR Tags in two places: + +- On the task panel's **Instructions** tab, the task's tags are listed with an **Edit + tags** control (or **No tags** if it has none yet). That opens the **Edit + task tags** dialog, where you type a tag and press Enter or + , to add it, and Backspace to remove the last one. As + you type, MapRoulette suggests tags already in use. +- In the completion dialog, the **Tags (Optional)** field takes several tags + separated by commas, so you can tag and complete a task in one go. + +Tags can be edited while a task is still open (created, skipped or can't +complete). + +### Preferred MR Tags + +A challenge can nominate the tags it would rather mappers used. Set them in +**Task settings** when creating or editing the challenge: **Preferred MR Tags +(task completion)**, a comma-separated list, with a checkbox beside it to +accept only those tags. They appear above the tag box as **Popular in this +challenge:**, as chips you can click to add rather than typing. + +### Restricting MR Tags + +A challenge can also be set to accept *only* its preferred tags. When it is, +anything you type that isn't in the challenge's list is refused, so the tags +that come back in the export stay consistent. + diff --git a/_documentation/creating-challenges/12-setting-external-task-identifiers.en_US.md b/_documentation/tasks/03-setting-external-task-identifiers.md similarity index 77% rename from _documentation/creating-challenges/12-setting-external-task-identifiers.en_US.md rename to _documentation/tasks/03-setting-external-task-identifiers.md index 501872b..dbf2b8d 100644 --- a/_documentation/creating-challenges/12-setting-external-task-identifiers.en_US.md +++ b/_documentation/tasks/03-setting-external-task-identifiers.md @@ -6,16 +6,20 @@ When possible, MapRoulette will assign your tasks unique external identifiers ba > Note: id fields in MapRoulette must always be represented as strings in GeoJSON, even if they are purely numerical -The name of the feature field or property to be used for this purpose can be specified during challenge creation on the "OSM/External Id Property" setting (found in the "Configure property-based behavior" section). - -![](/media/setting_external_id_field.png){:width="800"} +Historically the field or property to be used for this purpose was chosen +during challenge creation, on the "OSM/External Id Property" setting. Be sure that your external ids are **unique for each feature in your data**. It is your responsibility as the challenge creator to ensure this. Task features _missing_ the specified field will be assigned a [random UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_4_(random)) as an external identifier. > Note: MapRoulette always inspects external identifiers to determine if they match the format of OSM ids before treating them as such, so a UUID will not get treated as an OSM id during task editing or other processes -If you do not specify which field or property to use during challenge creation, MapRoulette will automatically scan your task features looking for certain special fields and properties to use as a unique external identifier. +You can name the property explicitly in **Task settings → OSM/External Id +Property** when creating or editing a challenge. + +If you leave it blank, MapRoulette will automatically scan your task features +looking for certain special fields and properties to use as a unique external +identifier. MapRoulette looks for external identifiers first on the feature fields and then within the feature's properties. It stops as soon as it finds a matching field or property. It looks for the following, in this order: @@ -29,7 +33,7 @@ name If none of those are found on either the feature fields or its properties, then a [random UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_4_(random)) is generated and assigned as an external identifier. -> Note: if you subsequently edit your challenge and set (or change) which feature field or property to treat as the OSM id, you must [rebuild your tasks](/en-US/documentation/rebuilding-challenge-tasks/) for that change to take effect. As mentioned above, you must be very careful to ensure that each feature will have a unique value for the field/property +> Note: if you subsequently edit your challenge and set (or change) which feature field or property to treat as the OSM id, you must [rebuild your tasks](/documentation/rebuilding-challenge-tasks/) for that change to take effect. As mentioned above, you must be very careful to ensure that each feature will have a unique value for the field/property > Note: A Tag Fix consists of one independent (or parent) operation which includes one or more embedded dependent (or child) operations. Any OSM ids referenced in an operation must be of the form of `elementType/numericId`, e.g. `node/123456789` @@ -40,6 +44,6 @@ While most MapRoulette tasks use OSM ids when specifying external ids, it's poss * Make sure your ids don't look like OSM ids. MapRoulette does not provide a way to distinguish OSM ids from non-OSM ids except by their formatting. For example, MapRoulette itself uses UUIDs if it needs to generate ids. If your ids look like OSM ids, then they may be treated as OSM ids in some situations. * Make sure your ids are represented as strings in your GeoJSON. External task ids must be strings in MapRoulette. * Do not reuse one of the traditional osm id fields mentioned above (such as `id`). Instead, give your external id field a different name, like `externalId`. -* Provide the name of your id field on the "OSM/External Id Property" setting when setting up your challenge (found in the "Configure property-based behavior" section) +* If you leave the property unnamed and rely on automatic detection, keep your ids out of the detected fields' way: don't reuse `id`, `@id`, `osmid`, `osm_id` or `name` unless you want that field treated as the external id * If you want your external id to show up in the task properties when someone clicks on a task feature, then put your id field inside the feature properties in your GeoJSON. If you do *not* want your id to be displayed in the task properties, then put it on the feature itself in your GeoJSON diff --git a/_documentation/tasks/04-defining-task-sourced-date.md b/_documentation/tasks/04-defining-task-sourced-date.md new file mode 100644 index 0000000..b6c555f --- /dev/null +++ b/_documentation/tasks/04-defining-task-sourced-date.md @@ -0,0 +1,18 @@ +--- +title: Defining A Sourced Date For Your Tasks +--- + +When you create tasks, you can record the date on which the source data was +sourced. This lets mappers know the vintage of the original data that their +task was created from, which matters when they're deciding how much to trust +it. + +The field is **Date data was sourced (optional)** and appears in two places: + +- in the **Task data** section when you + [create a challenge](/documentation/creating-a-challenge/) +- in the dialog when you + [rebuild a challenge's tasks](/documentation/rebuilding-challenge-tasks/), + so the date keeps up with the data + +![](/media/task-sourced-date.png) diff --git a/_documentation/tasks/05-mustache-tag-replacement.md b/_documentation/tasks/05-mustache-tag-replacement.md new file mode 100644 index 0000000..522ae97 --- /dev/null +++ b/_documentation/tasks/05-mustache-tag-replacement.md @@ -0,0 +1,56 @@ +--- +title: Mustache Tag Replacement +--- + +MapRoulette makes it easy to embed the value of task feature properties in +challenge instructions, using Mustache template syntax. + +{% raw %} + +To reference a property, surround its name with double curly braces or +"mustaches" (`{{` and `}}`). Any task feature property can be referenced in a +mustache tag by the property name, e.g. `{{highway}}` to display the value of +the `highway` property. + +Properties are merged across all of the task's features, so a property found on +any of them can be referenced. If the property doesn't exist on the task, the +mustache tag is left in place as literal text. + +> Note: when working with Markdown content (such as challenge instructions), +> the mustache tags get replaced *before* the final content is interpreted as +> Markdown. That means, for example, that feature property values will be +> interpreted as Markdown, allowing things like URLs to be converted into +> clickable links. If you instead wish to see the raw property value, you can +> surround the whole mustache tag (including the curly braces of the "mustache" +> itself) with single backticks + +## Workspace Properties + +Some workspaces made additional properties available for substitution that were +specific to the workspace state rather than the task itself. These "workspace" +properties always begin with a hash (`#`), e.g. `#mapZoom`, to avoid confusion +with task feature properties. Workspace properties are always case-sensitive. + +`{{#mapBBox}}`: a WSEN comma-separated bounding box of the current map bounds + +`{{#mapWest}}`: the longitude of the west side of the current map bounds + +`{{#mapSouth}}`: the latitude of the south side of the current map bounds + +`{{#mapEast}}`: the longitude of the east side of the current map bounds + +`{{#mapNorth}}`: the latitude of the north side of the current map bounds + +`{{#mapZoom}}`: the current zoom of the map + +`{{#mapLat}}`: The latitude of the map’s current centerpoint + +`{{#mapLon}}`: The longitude of the map’s current centerpoint + +`{{#osmType}}`: The type (node/way/relation) of the current task feature if it can be determined + +`{{#osmId}}`: The numerical OSM id of the current task feature if it can be determined + +`{{#mrTaskId}}`: the internal MapRoulette id of the current task (not the OSM id) + +{% endraw %} diff --git a/_documentation/creating-challenges/16-task-attachments.en_US.md b/_documentation/tasks/06-task-attachments.md similarity index 100% rename from _documentation/creating-challenges/16-task-attachments.en_US.md rename to _documentation/tasks/06-task-attachments.md diff --git a/_documentation/tasks/07-bulk-editing-challenges.md b/_documentation/tasks/07-bulk-editing-challenges.md new file mode 100644 index 0000000..a17f4f7 --- /dev/null +++ b/_documentation/tasks/07-bulk-editing-challenges.md @@ -0,0 +1,46 @@ +--- +title: Bulk Actions +--- + +When you're managing a challenge, most changes you need to make across many +tasks at once can be made from the challenge's task table rather than one task +at a time. + +## Selecting tasks + +Open **Manage** for your challenge to reach the tasks explorer. Narrow the +table with the **Status** and **Priority** filters and the sort control, then +use the checkbox on each row — +or the checkbox in the header, which selects every task currently visible — to +build a selection. A toolbar appears showing **_n_ selected**. + +> The header checkbox selects the *visible* tasks, which is the current page of +> the filtered table, not every task in the challenge. Narrow with the filters +> first if you want to be sure of what you're acting on. + +## Available actions + +| Action | What it does | +| ----------------- | ------------ | +| **Change status** | Sets every selected task to a status you pick (Created, Fixed, False Positive, Skipped, Already Fixed, Can't Complete, Disabled) | +| **Tag** | Applies the [MR Tags](/documentation/using-maproulette-tags/) you enter to every selected task | +| **Archive** / **Unarchive** | Archives the selected tasks, or brings them back | +| **Reassign** | Reassigns the selected tasks' reviews to a reviewer you search for. Only tasks whose reviews are still open are updated | +| **Clear lock** | Releases any active locks. Mappers currently working on those tasks may lose their in-progress session | +| **Delete** | Permanently removes the tasks along with their comments, reviews and tags | + +Each action confirms before it runs, and reports how many tasks it actually +changed — a bulk action can partially succeed if you lack permission on some of +the selected tasks. + +**Delete cannot be undone.** Neither can clearing locks, though mappers can +simply lock the task again. + +## Changing several challenges at once + +Editing a batch of challenges through a single form is not part of the current +frontend. Instead, each challenge row — on **Manage → Challenges** and on a +project's page — has an actions menu with the per-challenge operations: +pause/resume, archive/unarchive, pin, make discoverable, edit, move, clone, +[rebuild tasks](/documentation/rebuilding-challenge-tasks/), enable or +disable, and delete. diff --git a/_documentation/teams/01-teams.en_US.md b/_documentation/teams/01-teams.en_US.md deleted file mode 100644 index 89b4a7a..0000000 --- a/_documentation/teams/01-teams.en_US.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: Managing Teams ---- - -MapRoulette offers a basic implementation of Teams that makes it possible to group together affiliated users, such as users in a local a mapping club or attendees at a mapathon. Anyone can start a new team and invite other users to join their team. - -Teams will likely be enhanced with various features over time, but in v3.6.2 the primary purpose is to make it easier to grant project permissions to groups of users. When permissions are granted to a Team, each member of the team will also be conferred those permissions for as long as they are members of the team. - -### Starting a New Team -To start a team, go to the Dashboard page and add the Teams widget if you haven't already. Then click the cog icon and choose Start a New Team. Once you've provided a team name and description, and saved your new team, you can click on it and start inviting users to join your team. - -> Note: Teams and their membership are public. Private teams are not supported. - -### Team Roles -Members of teams have roles on the team itself: Admin, Write, or Read. Administrators have full management access to the team: inviting and removing members, editing the team name and description, and even deleting the team. The Read role can be thought of as a "standard" member who can see the team and all team members, and is able to leave the team, but otherwise has no management capability. In v3.6.2 the Write role does not confer any additional privilege over the Read role, but it may in future. - -> Note that a team member's role only affects their ability to manage the team itself and has no bearing on project permissions conferred to them when a Team is added to a project. All team members are granted the same project permissions through their team regardless of their role on the team. - -Teams must have at least one Administrator. If you wish to leave a team you created, you will first need to grant another team member the Admin role if you haven't already. - -### Adding a Team to a Project -The *Project Managers* widget on the Manage Project page has been enhanced in v3.6.2 to allow Teams to be added to projects. You do not have to be a member of a Team to add it to your project. - -> :warning: When you add a Team to a project, you are conferring the chosen project role to every member of the Team, including any future members who may be invited later. - -As before, projects must have at least one user with an Admin role. A Team cannot be the sole administrator of a project. - -### Accepting or Declining an Invitation -Have you been invited to a join a team? Go to your Dashboard, add the Teams widget if you haven't already, and then click the "..." control next to the team name to see options for joining the team or declining the invitation. - diff --git a/_documentation/teams/01-teams.md b/_documentation/teams/01-teams.md new file mode 100644 index 0000000..559fb9d --- /dev/null +++ b/_documentation/teams/01-teams.md @@ -0,0 +1,67 @@ +--- +title: Managing Teams +--- + +MapRoulette Teams group together affiliated users, such as the members of a +local mapping club or the attendees at a mapathon. Anyone can start a new team +and invite other users to join. + +Teams live in the **Teams** block on your +[Dashboard](/documentation/your-dashboard/), which lists the teams you +belong to and any pending invitations. Selecting a team opens its own page. + +> Note: Teams and their membership are public. Private teams are not supported. + +### Starting a New Team + +Use the **+** control in the dashboard's Teams block to create a team, and give +it: + +- a **name**, which must be unique +- a **description** +- optionally an **avatar** — upload a PNG, JPEG, WebP or GIF, or link to an + image URL instead. Square images look best + +You can edit any of these later from the team's page. + +### Team Roles + +Members of a team are either **Admin** or **Member**. Admins have full +management access to the team: inviting and removing members, promoting and +demoting other members, editing the team's name, description and avatar, and +deleting the team. A Member can see the team and its membership and can leave, +but has no management capability. + +The team page lists **Admins** and **Members** separately, with **Promote** and +**Demote** controls on each row for admins to use. + +Teams must have at least one Admin. If you wish to leave a team you created, +you will first need to promote another team member to Admin. + +> A member's role on the team affects only what they can do to the team itself. +> It has no bearing on the permissions a team confers when it is +> [given a role on a project](/documentation/projects-and-project-managers/): +> every member gets the same project permissions through the team, whatever +> their role on it. + +### Inviting members + +**Invite** opens a dialog where you search for a mapper by OSM username and +pick the role to give them. They receive an invitation, which shows on their +dashboard until they act on it, and they appear as **Invited** on the team page +in the meantime. + +### Accepting or Declining an Invitation + +Been invited to join a team? Your pending invitations appear in the Teams block +on your Dashboard, each with **Accept** and **Decline**. + +### Challenge images + +A team can hold a set of images that its members may put on their challenges. +Anyone on the team can **Request image** from the team's page; a super admin +reviews it, and once **Approved** it becomes selectable in the +[challenge form](/documentation/creating-a-challenge/) for everyone on +that team. Images awaiting review show as **Awaiting review**, and can be +withdrawn by whoever requested them or by a team admin. + diff --git a/_documentation/teams/02-following.en_US.md b/_documentation/teams/02-following.en_US.md deleted file mode 100644 index bbcce37..0000000 --- a/_documentation/teams/02-following.en_US.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Following other Users ---- - -MapRoulette supports basic Following capability whereby users can follow other users to easily keep abreast of their MapRoulette activity. While all MapRoulette activity is public, the activity of users you follow is pulled together into a single activity timeline for easy viewing. Following is currently managed through the optional Follow widget on the Dashboard page. - -Get started by visiting the Dashboard page and adding the Follow widget if you haven't already. There are three tabs: Activity, Following, and Followers. - -* The Activity tab shows all MapRoulette activity from users you are following. By default, similar consecutive activity entries are grouped together into a single item with a count. You can uncheck the "Group" option if you wish to see a separate item in the timeline for each recorded activity entry. - -* The Following tab allows you to view the users you are following, unfollow them, and follow additional users. - -* The Followers tab shows users who are following you, and contains options to follow them back or even block them (and unblock them). Blocked users will continue to see that they are following you, but will no longer see your activity in their Activity tab. Note, however, that MapRoulette activity is public so they may still discover aspects of your activity through other areas of the site. - -### Disallowing All Followers - -If you do not wish anyone to be able to follow you, you can visit your User Settings and set the Allow Following option to No. It's also possible to block individual followers via the Follow widget on the Dashboard page (see above). - diff --git a/_documentation/teams/02-following.md b/_documentation/teams/02-following.md new file mode 100644 index 0000000..3a20ba4 --- /dev/null +++ b/_documentation/teams/02-following.md @@ -0,0 +1,47 @@ +--- +title: Following other Users +--- + +MapRoulette supported basic Following capability whereby users could follow +other users to easily keep abreast of their MapRoulette activity. While all +MapRoulette activity is public, the activity of users you followed was pulled +together into a single activity timeline for easy viewing. Following was +managed through an optional Follow widget on the Dashboard page, with three +tabs: + +* **Activity** showed all MapRoulette activity from users you were following, + with similar consecutive entries grouped together into a single item with a + count. + +* **Following** listed the users you were following, and let you unfollow them + or follow additional users. + +* **Followers** showed users who were following you, with options to follow + them back or block them. Blocked users continued to see that they were + following you, but no longer saw your activity in their Activity tab. + +Users who did not wish to be followed at all could set **Allow Following** to +No in their User Settings. + +## What to use instead + +- A mapper's public profile — reachable from their name on a comment or from + the header of a challenge they own — shows their task statistics, reviews and + top challenges. +- Your own [Dashboard](/documentation/your-dashboard/) collects your + recent contributions. +- [Teams](/documentation/teams/) are the supported way to group mappers + who are working together. + +## Blocking a follower + +Your own profile lists your followers, each with a **Block** control. Blocking +stops someone receiving your activity. They are not told: from their side they +still appear to be following you, they simply stop seeing what you do. + +A blocked follower stays in the list, greyed out and marked as blocked, so you +can **Unblock** them again. + +> MapRoulette activity is public regardless. Blocking removes someone from your +> followers' activity feed; it does not hide your editing from them or from +> anyone else. diff --git a/_documentation/teams/03-projects-and-project-managers.en_US.md b/_documentation/teams/03-projects-and-project-managers.en_US.md deleted file mode 100644 index 5c35929..0000000 --- a/_documentation/teams/03-projects-and-project-managers.en_US.md +++ /dev/null @@ -1,33 +0,0 @@ ---- -title: Projects and Project Managers ---- - -MapRoulette provides lots of project and team tooling for users to collaborate. One feature that assists with this is the Project Managers widget in the Project overview page. - -![](/media/projects-project-managers-1.png) - -Here, the creator of a project can designate other users or teams to manage the project or even take a project over. - -## Adding a user or team - -Simply use the search box to find a user by their OpenStreetMap username. You can also assign a team. More about teams [here](/en-US/documentation/teams/) - -## Assigning a user privileges - -Users can be assigned various roles in the project - -**Read** - A user will be able to view the project overview page and the challenges under the project -**Write** - A user will be able to assist with managing of existing challenges and their statuses -**Admin** - A user will be have complete access to managing, editing, or deleting a project. Users will also be able to remove other managers or change their priviledges. - -## Removing a user or team - -An Admin has the ability to remove a user or team from the project. - -![](/media/projects-project-managers-2.png) - -## Removing an admin - -A project always requires at least one admin, so once another user is assigned **Admin**, other admins will be able to be demoted. - - diff --git a/_documentation/teams/04-virtual-projects.en_US.md b/_documentation/teams/04-virtual-projects.en_US.md deleted file mode 100644 index 8b7019f..0000000 --- a/_documentation/teams/04-virtual-projects.en_US.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: Virtual Projects ---- - -Virtual Projects provide a flexible means of loosely organizing disparate Challenges into ad-hoc groupings without having to move the challenges from their original projects. Whereas a challenge can only belong to a single standard project, it can be a member of any number of virtual projects. Anyone can create virtual projects and can add any challenge to their virtual project that is either publicly visible or to which they have at least read access (via permissions on the challenge's standard parent project). The admins of a virtual project can add other members to their virtual project, assigning them Read, Write, or Admin access. - -> Note: while you can add existing challenges to virtual projects, you cannot create new challenges within a virtual project. Challenges can only be created in standard projects (but can then be added to virtual projects) - -You can create a Virtual Project just like you would a regular Project. Just indicate that the Project you are creating is a Virtual Project: - -![create project screenshot](/media/70949151-ff40cd00-2054-11ea-981f-fd8fcb52c95d.png) - -Once you have your Virtual Project, you will see the (empty) challenge list in the Project management screen: - -![project manage screenshot](/media/70949413-9efe5b00-2055-11ea-866b-c8efaff441e5.png) - -Use the 'Manage Challenge List' button in the Challenge List widget to add / remove Challenges from this Virtual Project. - -![challenge list manager screenshot](/media/70949537-f00e4f00-2055-11ea-82ac-f5346e562a85.png) - -## Roles in Virtual Projects - -It is worth noting that Read/Write/Admin roles in virtual projects only govern the virtual project itself, and **do not** confer any administrative ability over the challenges in the virtual project. For example, a user who does not have write access to a challenge will not suddenly gain write access to it by adding that challenge to a virtual project in which they have do have write access. Challenge administrative permissions are solely governed by the challenge's standard parent project. - -However, any member of a virtual project will have limited read access to the challenges in that virtual project, even if some of those challenges would not normally be visible to them. For example, they will see the names of those challenges, be able to visit the mapper (not administrative) details page for the challenges, and will be able to see some aggregated data from the challenges such as comments and stats. However, a challenge can only be _added_ to a virtual project by someone who has visibility of the challenge, either because it is public or because they have been explicitly granted read or higher access. **Please be aware that by adding a challenge to a virtual project, you are granting all members of that virtual project limited read access to the challenge.** - -More specifically, the virtual project roles grant the following permissions: - -**Read**: user can view the virtual project; can see the challenges in the virtual project, visit the end-user details pages for those challenges to initiate work on them, and see various aggregated data from the challenges such as comments and stats; can see the usernames and roles of other members of the virtual project. - -**Write**: all permissions of Read; user can add/remove challenges to/from the virtual project; can edit the name and description of the virtual project itself. - -**Admin**: all permissions of Write; user can add/remove users to/from the virtual project and modify their roles. - diff --git a/_documentation/teams/04-virtual-projects.fr_FR.md b/_documentation/teams/04-virtual-projects.fr_FR.md deleted file mode 100644 index 4c41f59..0000000 --- a/_documentation/teams/04-virtual-projects.fr_FR.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: Projets Virtuels ---- - -Les Projets Virtuels sont un outil flexible permettant d’organiser différents challenge dans un groupe sans avoir besoin de séparer les challenges de leur projet. Bien qu'un challenge ne puisse dépendre que d'un seul projet standard, il peut être membre de plusieurs projets virtuels. N'importe qui peut créer des projets virtuels et y ajouter n'importe quel challenge publique ou dont il a un accès en lecture (depuis les permissions du projet standard du challenge). Les administrateurs d'un projet virtuel peuvent ajouter d'autres membres à leur projet virtuel, et leur donner des accès de Lecture, Écriture ou d'Administration. - -> Note: bien que vous puissiez ajouter des challenge existant aux projets virtuels, il n'est pas possible de créer de nouveaux challenges dans un projet virtuel. Les challenges ne peuvent être créer uniquement dans des projets standard (mais peuvent ensuite être ajoutés à des projets virtuels) - -Vous pouvez créer un Projet Virtuel comme vous le feriez pour un Projet Standard. Il suffit d'indiquer que le projet que vous créez est un projet virtuel : - -![create project screenshot](/media/70949151-ff40cd00-2054-11ea-981f-fd8fcb52c95d.png) - -Une fois que votre Projet Virtuel est créé, vous verrez une liste (vide) de challenge dans l'écran de gestion du projet : - -![project manage screenshot](/media/70949413-9efe5b00-2055-11ea-866b-c8efaff441e5.png) - -Utiliser le bouton "Gérer la liste des Challenge" dans le widget de la liste des challenges pour ajouter / supprimer des Challenges de ce Projet Virtuel. - -![challenge list manager screenshot](/media/70949537-f00e4f00-2055-11ea-82ac-f5346e562a85.png) - -## Rôles dans les projets virtuels - -Il est important de préciser que les rôles Lecture / Écriture / Administrateur dans les projets virtuels ne régissent que le projet virtuel lui-même et **ne donnent pas** de permissions sur les challenges du projet virtuel. Par exemple, un utilisateur qui n'a pas d'accès en écriture à un challenge n'obtiendra pas d'accès en écriture à ce challenge s'il est ajouté à un projet virtuel dans lequel l'utilisateur a un accès en écriture. Les permissions des challenges sont uniquement définies par le projet standard parent du défi. - -Cependant, tout membre d'un projet virtuel aura un accès limité en lecture aux challenges de ce projet virtuel, même si certains de ces challenges ne lui sont normalement pas visibles. Par exemple, ils verront les noms de ces challenges, pourront visiter la page de détails du challenge (pas celles des permissions), et pourront voir certaines données agrégées des challenges telles que les commentaires et les statistiques. Cependant, un challenge ne peut être _ajouté_ à un projet virtuel que par quelqu'un qui a la visibilité du challenge, soit parce qu'il est public, soit parce qu'il lui a été explicitement accordé un accès en lecture ou un accès supérieur. **Sachez qu'en ajoutant un challenge à un projet virtuel, vous accordez à tous les membres de ce projet virtuel un accès limité en lecture au challenge. - -Plus précisément, les rôles des projets virtuels accordent les autorisations suivantes : - -**Lecture** : l'utilisateur peut voir le projet virtuel ; il peut voir les challenges dans le projet virtuel, visiter les descriptions pour ces challenges afin de commencer à travailler dessus, et voir diverses données agrégées des challenges telles que les commentaires et les statistiques ; il peut voir les noms d'utilisateur et les rôles des autres membres du projet virtuel. - -**Écriture** : toutes les autorisations de lecture ; l'utilisateur peut ajouter/supprimer des challenges au projet virtuel ; il peut modifier le nom et la description du projet virtuel lui-même. - -**Administrateur** : toutes les permissions d'écriture ; l'utilisateur peut ajouter/supprimer des utilisateurs au projet virtuel et modifier leurs permissions. - diff --git a/_documentation/teams/05-reviewing.en_US.md b/_documentation/teams/05-reviewing.en_US.md deleted file mode 100644 index f96eba9..0000000 --- a/_documentation/teams/05-reviewing.en_US.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -title: Reviewing ---- - -As you fix things via MapRoulette, you can indicate that you would like someone else to review your work. Here’s how you do that. When you mark a task as fixed, you will see a new confirmation dialog: - -![](/media/reviewing-1.png) - -If you check the box ‘Need an extra set of eyes?’, the task will be added to the review queue. You can also set a global preference in your User Settings to have all your work reviewed by default (you can override it for individual tasks if desired). - -If you are a more experienced mapper, you may volunteer to review the tasks that your fellow mappers have requested to be reviewed. To enable this feature, go into your User Settings and check the box to volunteer as a reviewer. - -![](/media/reviewing-2.png) - -Once you’re in, you will see a new item in your user drop down menu. - -![](/media/reviewing-3.png){:width="500"} - - -Clicking this will take you to the review queue, which you can sort and filter in various ways. - -![](/media/reviewing-4.png) - -You can now go in and review single tasks, or add the currently visible list to your review queue. - -When you review a task, your job is to determine if the mapper solved the task the way they said they would. If it is fixed, you should check if the problem that was described in the task was indeed fixed. If the mapper marked it as Not an Issue or Already Fixed, you should verify that there was in fact not an issue in OSM. - -If the original mapper’s work looks fine, you can Approve the task. You can also make some additional edits to complete or fix the original mapper’s work, and mark the task as Approved (with fixes). Finally, if you want to give the task back to the original mapper, you can Reject the task. Whatever you choose, you can leave a comment that will be visible to the original mapper. - -![](/media/reviewing-5.png) - -Especially when you Reject a task, a comment telling the original mapper what they need to improve is very important. If they didn’t fix the Task in the first place, chances are that they won’t be able to fix it a second time without some help! - -As part of the review screen, there are some tools available to you that may come in handy: a link to the change in OSMCha, the option to visualize diffs between changes in Achavi, and the option to pull in the Attic data from Overpass. - -![](/media/reviewing-6.png) - diff --git a/_documentation/teams/06-using-maproulette-tags.en_US.md b/_documentation/teams/06-using-maproulette-tags.en_US.md deleted file mode 100644 index 7d32e8d..0000000 --- a/_documentation/teams/06-using-maproulette-tags.en_US.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -title: MapRoulette Tags ---- - -MapRoulette Tags, often called MR Tags, are primarily used for custom filtering and grouping tasks within a challenge. Currently, MR Tags are exclusive to MapRoulette and are not utilized or visible in other editors. If MR Tags are needed, the challenge manager will typically provide instructions on how to implement them within a task's description. - -### How the Data is Used and Example of Useful Tag Use - - For example, if you have a challenge in an area where there may not be enough high-quality imagery available for mappers to complete all the tasks successfully, you can ask mappers to add a tag like `bad-imagery` when they encounter that situation. Later, when you download the tasks export, you can analyze the tags to find out which areas lacked good imagery, and potentially use that information to start something like an OpenDroneMap + OpenAerialMap project 🙂. - -
- Image 1 - Image 3 - Image 2 -
- -### Preferred MR Tags - - Set in the challenge editor, these are the tags that will be recommended to mappers and reviewers if they try to add MR Tags. There are two types of preferred tags: - 1. Preferred MR Tags: Recommended in the task completion workflow, which is the workflow that most regular mappers use. - 2. Preferred MR Review Tags: Recommended in the task review workflow, which is the workflow the reviewers use. - -![](/media/mr-tags-3.png) - -### Restricting MR Tags - - As per the editor settings, if the 'Allow other tags during task completion' or review is marked as 'No', the only tags that the user can input are the ones from the pool of tags the challenge manager added. - -
- Image 4 - Image 5 -
- -### Adding MR Tags - - Mappers and reviewers can add MR Tags from the completion widget. If there are currently no MR Tags on a task, the 'Add MR Tags' button will be displayed. This button opens up a modal that allows the user to modify the displayed tags. - -
- Image 4 - Image 5 -
- -![](/media/mr-tags-2.png) - -MR Tags can also be added in the completion modal: - -![](/media/mr-tags-13.png){:width="1280"} - - - - diff --git a/_documentation/user-settings/01-setting-your-default-osm-editor.md b/_documentation/user-settings/01-setting-your-default-osm-editor.md new file mode 100644 index 0000000..5400b0a --- /dev/null +++ b/_documentation/user-settings/01-setting-your-default-osm-editor.md @@ -0,0 +1,43 @@ +--- +title: Setting your default OSM Editor +--- + +When you open a Task in an editor, you are sent to an OSM Editor to edit OSM +and resolve the task. Everyone has their own preference of OSM Editor, and you +can set this preference from your account settings: open the user menu at the +top right and choose **Account Settings**, then set **Default Editor** on the +**General** tab. + +![](/media/setting-default-editor.png) + +The available options are: + +- None +- Edit in iD +- Edit in JOSM +- Edit in new JOSM layer +- Edit just features in JOSM +- Edit in level0 +- Edit in Rapid + +Notice that for JOSM, you have three different options. You can load the data +within the Task bounding box in the currently active data layer, or in a new +data layer every time. Alternatively, you can load only the relevant OSM +features, instead of all data in the bounding box. For any of the JOSM options, +JOSM has to be running with +[remote control](https://josm.openstreetmap.de/wiki/Help/Preferences/RemoteControl) +enabled. + +> The settings form is saved with the **Submit** button at the bottom of the +> tab — your changes are not applied until you submit them. + +Because many mappers use different editors based on the task at hand, +MapRoulette also lets you switch editors from the Task screen. The editor +button in the task actions opens your current editor directly; the arrow beside +it opens a **Set Default Editor** menu that both switches editor and saves that +choice as your new default. A checkmark marks the current default. + +![](/media/editors-1.png){:width="600"} + +Some tasks can also be edited without leaving MapRoulette at all — see +[Editing inside MapRoulette](/documentation/rapid-editor/). diff --git a/_documentation/user-settings/02-setting-your-map-base-layer.md b/_documentation/user-settings/02-setting-your-map-base-layer.md new file mode 100644 index 0000000..ed6ce76 --- /dev/null +++ b/_documentation/user-settings/02-setting-your-map-base-layer.md @@ -0,0 +1,53 @@ +--- +title: Setting your Map Base Layer +--- + +Depending on the type of Task and the geographical area you are working on, you +may want to use a different base layer for the map. Every map in MapRoulette — +the explore map, a challenge's map, and the task map — carries the same set of +controls in its corner: + +- **Map style** — switch the base layer +- **Reset view** — return the map to where it started +- **Zoom in** / **Zoom out** +- a toggle to collapse the control stack out of the way + +The **Map style** control offers these base layers: + +- OSM Bright +- OSM Carto +- Bing Aerial +- Esri World Imagery +- Esri World Imagery (Clarity) + +Your choice is remembered in your browser and re-applied the next time a map +loads, so you only have to pick your preferred imagery once. + +Individual maps add their own buttons alongside these — the task map, for +example, adds controls for task markers and for +[working several tasks together](/documentation/solving-multiple-tasks-together/). + +## Your default basemap + +You can record a preferred basemap on your account from the user menu → +**Account Settings** → **General** → **Default Basemap**, with a **Custom +Basemap URL** field below it for your own tile template. Remember to press +**Submit** to save. + +![](/media/setting-default-baselayer.png) + +Maps open on this layer unless the challenge you are working on sets [a basemap +of its own](/documentation/setting-basemap-for-challenge/), which takes +precedence. If neither is set, the map opens on whichever layer you last picked +with the **Map style** control. + +## Adding your own layer + +The **Map style** control also offers **Add your own layer**, for imagery +MapRoulette doesn't bundle. Choose **XYZ tiles** and give a tile template like +`https://example.org/tile/{z}/{x}/{y}.png`, or choose **WMS** and give the +endpoint URL plus the layer names to request. + +Layers you add are saved to your account, so they follow you between browsers +and devices. Nobody else sees them. Remove one with the bin icon beside it in +the list. If you are signed out they are remembered by your browser alone. diff --git a/_documentation/user-settings/03-notifications-and-email.md b/_documentation/user-settings/03-notifications-and-email.md new file mode 100644 index 0000000..cdd230a --- /dev/null +++ b/_documentation/user-settings/03-notifications-and-email.md @@ -0,0 +1,74 @@ +--- +title: Notifications and Email +--- + +MapRoulette notifies you about events that may be important to you. The bell in +the header shows your unread notifications, with a dot when something is +waiting; **View all notifications** in that menu opens the full +**Notifications** page. + +![](/media/notificationsandemail.png){:width="500"} + +## What you get notified about + +Notifications are grouped into these categories, which you can filter by on the +Notifications page: + +- **System** — important MapRoulette system events, like planned downtime. + These are very infrequent. +- **Mentions** — someone mentioned you in a comment. +- **Comments** — new comments on a task or challenge you're involved with. +- **Reviews** — your task was approved, a revision was requested, a review was + requested of you, or a meta-review happened. +- **Challenges** — a challenge you contributed to was completed, or a challenge + unlock was requested. +- **Teams** — team invitations and other team activity. + +## Working through your notifications + +The Notifications page is a list with a filter bar and a reading pane: + +- Filter by **type**, by **sender**, by **task**, and by read/unread state. +- **Group by Task** collapses every notification about the same task into one + thread, which is the quickest way to deal with a busy task conversation. +- Selecting a notification opens the thread, showing the comments on that task, + and lets you **reply** without leaving the page. +- Notifications can be marked read or unread — individually, for a whole + thread, or for everything selected — and deleted. +- **Saved views** let you store a filter combination under a name and re-apply + it later, so a routine such as "unread review requests" is one click away. + Saved views live in your browser rather than on your account, so they don't + follow you to another device. + +## Email + +Your email address is set on the **Notifications** tab of your +[account settings](/documentation/setting-your-default-osm-editor/) +(user menu → **Account Settings**). If you ask for notifications by email, they +are sent there. + +MapRoulette does not require email validation, so please make sure that the +address you enter is valid and yours. Some management actions require an email +address to be set, so MapRoulette will prompt you for one if you own challenges +without having set it. + +## Choosing what you're told about + +The **Subscriptions** tab of your account settings controls each kind of +notification separately. For most kinds you choose one of: + +- **Ignore** — don't tell me at all +- **Notify in app** — a notification in MapRoulette, but no email +- **Notify and email immediately** — an email as soon as it happens +- **Notify and include in daily digest** — an email, batched into one a day + +The kinds you can set are system messages, mentions, review approved, review +rejected, review requested again, meta review, challenge completed, teams and +following. + +Two further settings are periodic summaries rather than one-off events — tasks +awaiting your review, and tasks awaiting your revision. Those take a frequency +instead: off, a daily email, or a weekly one. + +Each of these has its own **Submit** button, separate from the rest of your +account settings. diff --git a/_documentation/user-settings/04-setting-basemap-for-challenge.md b/_documentation/user-settings/04-setting-basemap-for-challenge.md new file mode 100644 index 0000000..f813c24 --- /dev/null +++ b/_documentation/user-settings/04-setting-basemap-for-challenge.md @@ -0,0 +1,45 @@ +--- +title: Setting The Basemap Layer For Your Challenge +--- + +One of the customizations you can apply to your own Challenges is a custom +basemap layer. This basemap layer will override whatever basemap MapRoulette +users have defined as their default. This is useful in those cases where you +know that a certain basemap is needed to successfully complete the tasks in +your Challenge. + +## Choosing the basemap + +When creating or editing a challenge, the **Basemap** section offers: + +- **Don't override — mappers use their own.** The default. Each mapper sees + their own preferred base layer. +- One of the base layers bundled with MapRoulette — the same list offered by + the **Map style** control on any map. See [Map Layer + Management](/documentation/map-layer-management/) for that list and how a + server administrator changes it. +- **Custom tile layer…**, which reveals a **Custom basemap URL** field for your + own XYZ layer using the common pattern: + + `https://some.imagerylayer.com/tile/{z}/{x}/{y}` + +Leaving the custom URL blank is treated the same as not overriding the basemap +at all. + +## Which basemap a mapper actually sees + +When a map opens, MapRoulette picks the first of these that is set: + +1. The challenge's basemap, if its owner set one. +2. The mapper's own default basemap, from [their account + settings](/documentation/setting-your-map-base-layer/). +3. Whichever base layer they last picked with the **Map style** control. + +A mapper can still switch layers with the **Map style** control after the map +opens — the challenge basemap decides where they start, not where they must +stay. + +> Challenges created in older versions of MapRoulette stored their basemap as +> one of a small set of numbered layers. Those still work: they resolve to the +> closest bundled base layer. OpenCycleMap has no bundled equivalent, so a +> challenge that asked for it falls back to the mapper's own preference. diff --git a/_includes/footer.html b/_includes/footer.html index ac332c0..e73e2f2 100644 --- a/_includes/footer.html +++ b/_includes/footer.html @@ -1,28 +1,90 @@ - - + + + diff --git a/_includes/header.html b/_includes/header.html index 5ba8214..a96284b 100644 --- a/_includes/header.html +++ b/_includes/header.html @@ -1,24 +1,73 @@
- - MapRoulette + + {% include logomark.html %} + MapRoulette Docs -
-
- {% if page.variants.size > 1 %} -
- {{ page.variants.size }} languages - -
- {% else %} - Help translate! - {% endif %} + + + +
+ +
+ + diff --git a/_includes/logomark.html b/_includes/logomark.html new file mode 100644 index 0000000..b100bbc --- /dev/null +++ b/_includes/logomark.html @@ -0,0 +1,10 @@ +{%- comment -%} +The MapRoulette logomark, copied from the app's ui/Logomark component so the +docs header uses the same mark. The inner rings spin on hover, as they do in +the app. +{%- endcomment -%} + diff --git a/_includes/nav-section.html b/_includes/nav-section.html new file mode 100644 index 0000000..cb6fd69 --- /dev/null +++ b/_includes/nav-section.html @@ -0,0 +1,18 @@ +{%- comment -%} +One labelled group of documentation links in the sidebar. +Params: section (directory name under _documentation/), current (page.url). +{%- endcomment -%} +{%- assign name = site.data.sections[include.section] | default: include.section -%} +{%- assign docs = site.documentation | where: "section", include.section | sort: "order" -%} +{%- if docs.size > 0 -%} +
  • +

    {{ name }}

    + +
  • +{%- endif -%} diff --git a/_layouts/default.html b/_layouts/default.html index e1ed93c..98bb78a 100644 --- a/_layouts/default.html +++ b/_layouts/default.html @@ -4,7 +4,7 @@ {%- include head.html -%} - skip to main content + {%- include header.html -%} diff --git a/_layouts/page.html b/_layouts/page.html index 657bf5a..e8700d9 100644 --- a/_layouts/page.html +++ b/_layouts/page.html @@ -2,40 +2,65 @@ layout: default --- -
    @@ -45,3 +70,78 @@

    {{ page.title }}

    {{ content }}
    + + diff --git a/_plugins/permalink.rb b/_plugins/permalink.rb index d0e8983..897b20a 100644 --- a/_plugins/permalink.rb +++ b/_plugins/permalink.rb @@ -1,47 +1,4 @@ module Jekyll - class LanguageField < Generator - # Parse an ISO language code out of the suffix of each page's filename, - # assign it to the 'lang' property, and strip it from the slug. Also, - # suppress output of pages whose lang is not in the list of enabled - # locales in _config.yaml. - safe true - - def generate(site) - site.documents.each do |doc| - if lang = get_lang(doc.relative_path) - doc.data['lang'] ||= lang.gsub('_', '-') - doc.data['slug'].chomp!(".#{lang}") - end - end - - site.pages.each do |page| - if lang = get_lang(page.relative_path) - page.data['lang'] ||= lang.gsub('_', '-') - page.data['slug'] = page.basename.chomp!(".#{lang}") - end - end - - site.pages.reject! {|page| not lang_enabled?(site, page) } - - site.collections.each do |name, collection| - collection.docs.reject! {|doc| not lang_enabled?(site, doc) } - end - end - - def lang_enabled?(site, doc) - lang = doc.data['lang'] - lang == nil or site.config['locales'].include? lang - end - - def get_lang(filename) - # Match the language code from the filename - if filename =~ /\.(\w{2,3}([-_]\w{2,3})?)\.md$/ - return $1 - end - nil - end - end - class StripNumberedPrefixes < Generator # Remove numeric prefixes from slugs of collection items (they are there for # sorting but we don't want them ending up in the URLs). Put the number in @@ -53,9 +10,7 @@ def generate(site) slug = doc.data['slug'] match = doc.basename.match(/^(\d+)-/) if match - if slug.start_with?(match[0]) - slug = slug[match[0].length..-1] - end + slug = slug[match[0].length..-1] if slug.start_with?(match[0]) doc.data['order'] = match[1] end doc.data['slug'] = slug @@ -64,33 +19,21 @@ def generate(site) end class Permalink < Generator - # Assigns permalinks to pages that begin with their language, - # e.g. /en-US/:collection/:slug/ + # Assigns permalinks of the form /:collection/:slug/ safe true def generate(site) site.documents.each do |doc| - lang = doc.data['lang'] - collection_name = doc.collection.label slug = doc.data['slug'] - if slug != "index" then slug += "/" end - doc.data['permalink'] ||= "/#{lang}/#{collection_name}/#{slug}" - end - - site.pages.each do |page| - if lang = page.data['lang'] - dirname = File.dirname(page.relative_path) - slug = page.data['slug'] - if slug != "index" then slug += "/" end - page.data['permalink'] ||= "/#{lang}/#{dirname}/#{slug}" - end + slug += "/" unless slug == "index" + doc.data['permalink'] ||= "/#{doc.collection.label}/#{slug}" end end end class Section < Generator # Assigns a section to each page in the 'documentation' collection, based on - # the subdir it's in. Used to arrange pages into section in the sidebar. + # the subdir it's in. Used to arrange pages into sections in the sidebar. safe true def generate(site) @@ -99,27 +42,4 @@ def generate(site) end end end - - class Variants < Generator - # Add a 'variants' property to each page in every collection, which links to - # other versions of that page in other languages. 'variants' is a Hash where - # keys are ISO language codes and values are URLs. - safe true - - def generate(site) - site.collections.each do |_, collection| - collection.docs.each do |doc| - ident = drop_lang_suffix(doc.relative_path) - doc.data['variants'] = collection.docs - .filter { |d| ident == drop_lang_suffix(d.relative_path) } - .map { |d| [d.data['lang'], d.data['permalink']] } - .to_h - end - end - end - - def drop_lang_suffix(filename) - return filename.sub(/\.\w{2,3}([-_]\w{2,3})?.md$/, '') - end - end end diff --git a/_screencasts/00-create-a-challenge-with-geojson-data.en_US.md b/_screencasts/00-create-a-challenge-with-geojson-data.md similarity index 100% rename from _screencasts/00-create-a-challenge-with-geojson-data.en_US.md rename to _screencasts/00-create-a-challenge-with-geojson-data.md diff --git a/_screencasts/01-create-a-challenge-with-overpass.en_US.md b/_screencasts/01-create-a-challenge-with-overpass.md similarity index 100% rename from _screencasts/01-create-a-challenge-with-overpass.en_US.md rename to _screencasts/01-create-a-challenge-with-overpass.md diff --git a/_screencasts/03-connect-2020-5-min-lightning-talk.en_US.md b/_screencasts/03-connect-2020-5-min-lightning-talk.md similarity index 65% rename from _screencasts/03-connect-2020-5-min-lightning-talk.en_US.md rename to _screencasts/03-connect-2020-5-min-lightning-talk.md index d7988e5..806db80 100644 --- a/_screencasts/03-connect-2020-5-min-lightning-talk.en_US.md +++ b/_screencasts/03-connect-2020-5-min-lightning-talk.md @@ -2,6 +2,11 @@ title: Create A Cooperative Challenge Lightning Talk --- +> Cooperative Challenges have since been removed from MapRoulette. This +> recording is kept as a record of the talk, but the workflow it demonstrates +> is no longer available. +{: .legacy} + Martijn van Exel's 5 minute lightning talk about creating a Cooperative Challenge diff --git a/_screencasts/04-maproulette-workshop-at-state-of-the-map-africa-november-2021-1.en_US.md b/_screencasts/04-maproulette-workshop-at-state-of-the-map-africa-november-2021-1.md similarity index 100% rename from _screencasts/04-maproulette-workshop-at-state-of-the-map-africa-november-2021-1.en_US.md rename to _screencasts/04-maproulette-workshop-at-state-of-the-map-africa-november-2021-1.md diff --git a/_styles/components.scss b/_styles/components.scss new file mode 100644 index 0000000..e3c760b --- /dev/null +++ b/_styles/components.scss @@ -0,0 +1,350 @@ +/* Header controls, modelled on the app's ThemeSwitcher, DropdownMenu and + * InputGroup components. */ + +/* ------------------------------------------------------- theme switcher --- */ + +/* A three-position pill (system / light / dark) with a sliding thumb, exactly + * as in the app's user menu. */ +.theme-switcher { + position: relative; + isolation: isolate; + display: inline-flex; + height: 2rem; + padding: 0.25rem; + border: 1px solid var(--mr-border); + border-radius: var(--mr-radius-full); + background: var(--mr-surface-subtle); +} + +.theme-switcher-thumb { + position: absolute; + top: 0.25rem; + left: 0.25rem; + height: 1.5rem; + width: 1.5rem; + border-radius: var(--mr-radius-full); + background: var(--mr-border); + transition: transform 300ms ease-out; +} + +:root.dark .theme-switcher-thumb { + background: var(--mr-surface); +} + +.theme-switcher button { + position: relative; + display: flex; + height: 1.5rem; + width: 1.5rem; + align-items: center; + justify-content: center; + padding: 0; + border: 0; + border-radius: var(--mr-radius-full); + background: none; + color: var(--mr-text-faint); + cursor: pointer; +} + +.theme-switcher button svg { + position: relative; + z-index: 10; + height: 0.75rem; + width: 0.75rem; +} + +.theme-switcher button[aria-pressed="true"] { + color: var(--mr-text-strong); +} + +/* ------------------------------------------------------- language picker --- */ + +/* Trigger looks like the app's ghost Button; the panel like its DropdownMenu. */ +details.language-picker { + display: inline-block; + position: relative; +} + +details.language-picker > summary { + list-style: none; + display: inline-flex; + align-items: center; + gap: 0.5rem; + height: 2rem; + padding: 0 0.625rem; + border-radius: var(--mr-radius); + font-size: 0.875rem; + font-weight: 500; + white-space: nowrap; + cursor: pointer; +} + +details.language-picker > summary::-webkit-details-marker { + display: none; +} + +details.language-picker > summary:hover, +details.language-picker[open] > summary { + background: var(--mr-surface-hover); + color: var(--mr-text-strong); +} + +details.language-picker > summary::before { + content: ""; + height: 1rem; + width: 1rem; + background-color: currentcolor; + mask-image: url(/assets/icons/translate.svg); + mask-size: contain; + mask-repeat: no-repeat; +} + +details.language-picker > summary::after { + content: ""; + height: 0.875rem; + width: 0.875rem; + background-color: currentcolor; + mask-image: url(/assets/icons/chevron-down.svg); + mask-size: contain; + mask-repeat: no-repeat; +} + +details.language-picker[open] > summary::after { + transform: rotate(180deg); +} + +details.language-picker ul { + position: absolute; + right: 0; + z-index: 40; + min-width: 10rem; + margin: 0.375rem 0 0; + padding: 0.25rem; + list-style: none; + border: 1px solid var(--mr-border); + border-radius: var(--mr-radius); + background: var(--mr-surface); + box-shadow: var(--mr-shadow-lg); + font-size: 0.875rem; +} + +:root.dark details.language-picker ul { + box-shadow: 0 0 0 1px var(--mr-border); +} + +details.language-picker li { + margin: 0; +} + +details.language-picker a { + display: block; + padding: 0.375rem 0.5rem; + border-radius: 0.375rem; + color: var(--mr-text); + text-decoration: none; +} + +details.language-picker a:hover { + background: var(--mr-surface-hover); + color: var(--mr-accent); +} + +/* --------------------------------------------------------------- search --- */ + +/* DocSearch mounts its own button here; size the slot like the app's global + * search input so the header keeps the same proportions. */ +.site-search { + flex: 1 1 auto; + min-width: 0; + max-width: 32rem; +} + +.site-search .DocSearch-Button { + width: 100%; + height: 2.5rem; + margin: 0; + padding: 0 0.75rem; + border: 1px solid var(--mr-border-strong); + border-radius: var(--mr-radius); + background: var(--mr-surface); + color: var(--mr-text-muted); + box-shadow: var(--mr-shadow-xs); +} + +.site-search .DocSearch-Button:hover { + box-shadow: var(--mr-shadow-xs); + background: var(--mr-surface); + border-color: var(--mr-text-faint); +} + +.site-search .DocSearch-Button:focus-visible { + outline: 3px solid var(--mr-ring); + outline-offset: 2px; +} + +.site-search .DocSearch-Button-Placeholder { + font-size: 0.875rem; + font-weight: 400; + padding: 0 0.5rem; +} + +.site-search .DocSearch-Search-Icon { + width: 1rem; + height: 1rem; + color: var(--mr-text-muted); +} + +.site-search .DocSearch-Button-Keys { + min-width: auto; +} + +.site-search .DocSearch-Button-Key { + height: 1.25rem; + width: auto; + min-width: 1.25rem; + padding: 0 0.25rem; + margin-right: 0.25rem; + border: 1px solid var(--mr-border); + border-radius: 0.25rem; + background: var(--mr-surface-subtle); + box-shadow: none; + color: var(--mr-text-muted); + font-size: 0.6875rem; + top: 0; +} + +/* ------------------------------------------------- search modal (DocSearch) --- */ + +/* Most of the modal is themed through DocSearch's own custom properties in + * theme.scss. These are the parts those variables don't reach. */ + +.DocSearch-Container { + backdrop-filter: blur(2px); +} + +.DocSearch-Modal { + border: 1px solid var(--mr-border); + border-radius: var(--mr-radius-lg); +} + +.DocSearch-SearchBar { + padding: var(--docsearch-spacing) var(--docsearch-spacing) 0; +} + +.DocSearch-Form { + border-radius: var(--mr-radius); +} + +/* One ring on the wrapper rather than two: the page's global :focus-visible + * outline was landing on the input on top of DocSearch's own box-shadow. */ +.DocSearch-Form:focus-within { + box-shadow: + inset 0 0 0 1px var(--mr-border-strong), + 0 0 0 3px var(--mr-accent-subtle); +} + +.DocSearch-Input:focus, +.DocSearch-Input:focus-visible { + outline: none; +} + +.DocSearch-Input { + font-size: 0.9375rem; + font-weight: 400; +} + +.DocSearch-Input::placeholder { + color: var(--mr-text-muted); + opacity: 1; +} + +.DocSearch-MagnifierLabel, +.DocSearch-Reset, +.DocSearch-LoadingIndicator { + color: var(--mr-text-muted); +} + +.DocSearch-MagnifierLabel svg, +.DocSearch-Reset svg, +.DocSearch-LoadingIndicator svg { + width: 1.125rem; + height: 1.125rem; +} + +.DocSearch-Dropdown { + max-height: min(28rem, 60vh); + padding: 0 var(--docsearch-spacing); +} + +/* Group headings, styled like the sidebar's section labels. */ +.DocSearch-Hit-source { + margin: 0; + padding: 0.875rem 0 0.375rem; + background: var(--mr-surface); + color: var(--mr-text-muted); + font-size: 0.6875rem; + font-weight: 600; + letter-spacing: 0.06em; + line-height: 1.4; + text-transform: uppercase; +} + +.DocSearch-Hit a { + border-radius: var(--mr-radius); + padding: 0 0.75rem; +} + +.DocSearch-Hit-title { + font-size: 0.9375rem; +} + +.DocSearch-Hit-path { + font-size: 0.75rem; + color: var(--mr-text-muted); +} + +.DocSearch-Hit[aria-selected="true"] .DocSearch-Hit-path, +.DocSearch-Hit[aria-selected="true"] mark { + color: var(--docsearch-hit-active-color); +} + +/* Empty and no-result states. */ +.DocSearch-StartScreen, +.DocSearch-NoResults { + padding: 2.5rem 1rem; + color: var(--mr-text-muted); + font-size: 0.875rem; +} + +.DocSearch-Title { + font-size: 0.9375rem; +} + +/* Footer key hints, matching the styling used in the docs themselves. */ +.DocSearch-Footer { + border-top: 1px solid var(--mr-border); + box-shadow: none; + padding: 0 var(--docsearch-spacing); +} + +.DocSearch-Commands { + font-size: 0.75rem; + color: var(--mr-text-muted); +} + +.DocSearch-Commands-Key { + width: auto; + min-width: 1.25rem; + height: 1.25rem; + padding: 0 0.25rem; + margin-right: 0.25rem; + border: 1px solid var(--mr-border); + border-radius: 0.25rem; + background: var(--mr-surface-subtle); + box-shadow: none; + color: var(--mr-text-muted); +} + +.DocSearch-Cancel { + color: var(--mr-text-muted); +} diff --git a/_styles/highlight.scss b/_styles/highlight.scss index 775dce9..049ac72 100644 --- a/_styles/highlight.scss +++ b/_styles/highlight.scss @@ -1,187 +1,96 @@ +/* Rouge syntax highlighting, driven by tokens so code blocks are legible in + * both themes (the previous palette only worked on a dark background). */ + +:root { + --hl-text: #24292f; + --hl-comment: #6e7781; + --hl-keyword: #cf222e; + --hl-string: #0a3069; + --hl-number: #0550ae; + --hl-name: #953800; + --hl-function: #8250df; + --hl-tag: #116329; + --hl-error: #b91c1c; +} + +:root.dark { + --hl-text: #f8f8f2; + --hl-comment: #8b8878; + --hl-keyword: #f92672; + --hl-string: #e6db74; + --hl-number: #ae81ff; + --hl-name: #a6e22e; + --hl-function: #a6e22e; + --hl-tag: #f92672; + --hl-error: #ff6b8a; +} + +.highlight, +.highlight pre { + color: var(--hl-text); +} + .highlight table td { padding: 5px; } .highlight table pre { margin: 0; } -.highlight .gh { - color: #999999; -} -.highlight .sr { - color: #f6aa11; -} -.highlight .go { - color: #888888; -} -.highlight .gp { - color: #555555; -} -.highlight .gs { -} -.highlight .gu { - color: #aaaaaa; -} -.highlight .nb { - color: #f6aa11; -} -.highlight .cm { - color: #75715e; -} -.highlight .cp { - color: #75715e; -} -.highlight .c1 { - color: #75715e; -} -.highlight .cs { - color: #75715e; -} -.highlight .c, .highlight .ch, .highlight .cd, .highlight .cpf { - color: #75715e; -} -.highlight .err { - color: #eb4cac; -} -.highlight .gr { - color: #eb4cac; -} -.highlight .gt { - color: #eb4cac; -} -.highlight .gd { - color: #49483e; -} -.highlight .gi { - color: #49483e; -} -.highlight .ge { - color: #49483e; -} -.highlight .kc { - color: #66d9ef; -} -.highlight .kd { - color: #66d9ef; -} -.highlight .kr { - color: #66d9ef; -} -.highlight .no { - color: #66d9ef; -} -.highlight .kt { - color: #66d9ef; -} -.highlight .mf { - color: #ae81ff; -} -.highlight .mh { - color: #ae81ff; -} -.highlight .il { - color: #ae81ff; -} -.highlight .mi { - color: #ae81ff; -} -.highlight .mo { - color: #ae81ff; -} -.highlight .m, .highlight .mb, .highlight .mx { - color: #ae81ff; -} -.highlight .sc { - color: #ae81ff; -} -.highlight .se { - color: #ae81ff; -} -.highlight .ss { - color: #ae81ff; -} -.highlight .sd { - color: #e6db74; -} -.highlight .s2 { - color: #e6db74; -} -.highlight .sb { - color: #e6db74; -} -.highlight .sh { - color: #e6db74; -} -.highlight .si { - color: #e6db74; -} -.highlight .sx { - color: #e6db74; -} -.highlight .s1 { - color: #e6db74; -} -.highlight .s, .highlight .sa, .highlight .dl { - color: #e6db74; -} -.highlight .na { - color: #a6e22e; -} -.highlight .nc { - color: #a6e22e; -} -.highlight .nd { - color: #a6e22e; -} -.highlight .ne { - color: #a6e22e; -} -.highlight .nf, .highlight .fm { - color: #a6e22e; -} -.highlight .vc { - color: #ffffff; -} -.highlight .nn { - color: #ffffff; -} -.highlight .nl { - color: #ffffff; -} -.highlight .ni { - color: #ffffff; -} -.highlight .bp { - color: #ffffff; -} -.highlight .vg { - color: #ffffff; -} -.highlight .vi { - color: #ffffff; -} -.highlight .nv, .highlight .vm { - color: #ffffff; -} -.highlight .w { - color: #ffffff; -} -.highlight { - color: #ffffff; -} -.highlight .n, .highlight .py, .highlight .nx { - color: #ffffff; -} -.highlight .ow { - color: #f92672; -} + +/* comments and generic output */ +.highlight .c, .highlight .ch, .highlight .cd, .highlight .cpf, +.highlight .cm, .highlight .cp, .highlight .c1, .highlight .cs, +.highlight .gh, .highlight .gu, .highlight .gp, .highlight .go { + color: var(--hl-comment); +} + +/* keywords and operators */ +.highlight .k, .highlight .kv, .highlight .kc, .highlight .kd, +.highlight .kn, .highlight .kp, .highlight .kr, .highlight .kt, +.highlight .o, .highlight .ow, .highlight .no { + color: var(--hl-keyword); +} + +/* markup / element names */ .highlight .nt { - color: #f92672; -} -.highlight .k, .highlight .kv { - color: #f92672; -} -.highlight .kn { - color: #f92672; -} -.highlight .kp { - color: #f92672; -} -.highlight .o { - color: #f92672; -} + color: var(--hl-tag); +} + +/* strings */ +.highlight .s, .highlight .sa, .highlight .sb, .highlight .sc, +.highlight .dl, .highlight .sd, .highlight .s1, .highlight .s2, +.highlight .se, .highlight .sh, .highlight .si, .highlight .sx, +.highlight .sr, .highlight .ss { + color: var(--hl-string); +} + +/* numbers */ +.highlight .m, .highlight .mb, .highlight .mf, .highlight .mh, +.highlight .mi, .highlight .mo, .highlight .mx, .highlight .il { + color: var(--hl-number); +} + +/* declarations: attributes, classes, constants */ +.highlight .na, .highlight .nb, .highlight .nc, .highlight .nd, +.highlight .ne, .highlight .nl, .highlight .nn { + color: var(--hl-name); +} + +/* function and method names */ +.highlight .nf, .highlight .fm { + color: var(--hl-function); +} + +/* plain names and variables inherit the body colour */ +.highlight .n, .highlight .py, .highlight .nx, .highlight .ni, +.highlight .nv, .highlight .vm, .highlight .vc, .highlight .vg, +.highlight .vi, .highlight .bp, .highlight .w { + color: var(--hl-text); +} + +/* errors and tracebacks */ +.highlight .err, .highlight .gr, .highlight .gt { + color: var(--hl-error); +} + +/* diffs */ +.highlight .gd { background: rgba(207, 34, 46, 0.12); } +.highlight .gi { background: rgba(22, 163, 74, 0.12); } +.highlight .ge { font-style: italic; } +.highlight .gs { font-weight: 600; } diff --git a/_styles/language-picker.scss b/_styles/language-picker.scss deleted file mode 100644 index 87b2ec5..0000000 --- a/_styles/language-picker.scss +++ /dev/null @@ -1,55 +0,0 @@ -details.language-picker { - display: inline-block; - position: relative; -} - -details.language-picker summary { - list-style: none; - padding: 0.25em; - padding-left: 0.5em; - border-radius: 0.25em; -} - -details.language-picker[open] summary { - background: rgba(255, 255, 255, 0.1); -} - -details.language-picker summary:hover { - background: rgba(255, 255, 255, 0.2) !important; -} - -details.language-picker summary::before { - display: inline-block; - content: ""; - height: 1.25em; - width: 1.25em; - background-color: currentcolor; - mask-image: url(/assets/icons/translate.svg); - mask-size: contain; - transform: translateY(0.25em); - margin-right: 1ch; -} - -details.language-picker summary::after { - display: inline-block; - content: "▼"; - height: 1.25em; - width: 1.25em; - margin-left: 1ch; -} - -details.language-picker[open] summary::after { - content: "▲"; -} - -details.language-picker ul { - margin: 0 0.5em; - padding: 0.5em; - background: #354b65; - list-style: none; - position: absolute; -} - -details.language-picker a { - text-decoration: none; -} diff --git a/_styles/layout.scss b/_styles/layout.scss index 9acf2b1..8592c7a 100644 --- a/_styles/layout.scss +++ b/_styles/layout.scss @@ -1,96 +1,279 @@ +/* Page shell: a sticky header over a sidebar + content grid, matching the + * app's AppLayout (header, then a scrolling region below it). */ + +*, +*::before, +*::after { + box-sizing: border-box; +} + html { - background: #172e51; + background: var(--mr-bg); + -webkit-text-size-adjust: 100%; } body { margin: 0; - background-image: linear-gradient(90deg, #47725f, #172e51); - - color: white; - font-family: sans-serif; - line-height: 1.5; - font-weight: 300; + background: var(--mr-bg); + color: var(--mr-text); + font-family: var(--mr-font-sans); + font-size: 1rem; + line-height: 1.6; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; display: grid; - grid-template-columns: [full-start left-start] 300px [left-end right-start] 1fr [right-end full-end]; - column-gap: 1em; - min-height: 100vh; + grid-template-columns: [full-start left-start] var(--mr-sidebar-width) [left-end right-start] minmax(0, 1fr) [right-end full-end]; grid-template-rows: min-content 1fr min-content; + min-height: 100vh; } -main { - max-width: 100ch; - margin: 1em; +/* The app draws a 3px focus ring on interactive elements; do the same here + * instead of relying on each browser's default outline. */ +/* Outlines follow the element's own border-radius, so don't set one here — + * doing so squared off rounded controls (nav links, search hits) on focus. */ +:focus-visible { + outline: 3px solid var(--mr-ring); + outline-offset: 2px; } +/* ---------------------------------------------------------------- header --- */ + body > header { grid-column: full; - background-image: linear-gradient(90deg, #47725f, #172e51); - box-shadow: rgba(0, 0, 0, 0.3) 0px 2px 4px 0px; + position: sticky; + top: 0; + z-index: 30; + background: var(--mr-bg); + border-bottom: 1px solid var(--mr-border); display: flex; align-items: center; - gap: 1.5em; justify-content: space-between; - padding: 1em 2em; + gap: 1rem; + padding: 0.625rem 0.75rem; } -body > header a, body > footer a { +@media (min-width: 48rem) { + body > header { + gap: 1.5rem; + padding: 0.875rem 1.25rem; + } + + .site-brand svg { + height: 2.25rem; + width: 2.25rem; + } +} + +.site-brand { + display: flex; + align-items: center; + gap: 0.5rem; + color: var(--mr-text-strong); text-decoration: none; + flex-shrink: 0; +} + +.site-brand:hover { + color: var(--mr-text-strong); +} + +.site-brand svg { + height: 2rem; + width: 2rem; +} + +.site-brand-name { + font-size: 1.25rem; + line-height: 1.25rem; + font-weight: 500; + white-space: nowrap; +} + +.site-brand-suffix { + color: var(--mr-text-muted); + font-weight: 400; } -body > header .right { +@media (max-width: 30rem) { + .site-brand-suffix { + display: none; + } +} + +.header-actions { display: flex; align-items: center; - gap: 1.5em; + gap: 0.75rem; + flex-shrink: 0; } +/* --------------------------------------------------------------- sidebar --- */ + body > nav { - margin-left: 1.5em; + grid-column: left; + padding: 1.5rem 0.5rem 1.5rem 1.25rem; + font-size: 0.875rem; + align-self: start; + position: sticky; + top: var(--mr-header-height); + /* Leave room for the footer: pinned at `top`, an element this tall bottoms + out exactly where the footer starts once it scrolls into view, so a long + nav list scrolls inside itself instead of running under the footer. */ + max-height: calc(100vh - var(--mr-header-height) - var(--mr-footer-height)); + overflow-y: auto; + overscroll-behavior: contain; } +nav h2, nav h3 { - margin-top: 2em; - margin-bottom: 0.5em; - font-size: small; - font-weight: bold; + margin: 1.75rem 0 0.5rem; + font-size: 0.6875rem; + font-weight: 600; + letter-spacing: 0.06em; text-transform: uppercase; - color: white; + color: var(--mr-text-muted); +} + +nav ul > li:first-child > h3 { + margin-top: 0; } nav ul { - list-style-type: none; + list-style: none; + margin: 0; padding: 0; } nav ul li { - line-height: 1.25; - margin: 0.25em 0; + line-height: 1.375; } -nav ul a, nav ul a:visited { +nav ul a { + display: block; + padding: 0.3125rem 0.5rem; + margin-left: -0.5rem; + border-radius: var(--mr-radius); + color: var(--mr-text); text-decoration: none; - color: white; + transition: color 150ms, background-color 150ms; } nav ul a:hover { - color: rgb(145, 243, 162); + color: var(--mr-accent); + background: var(--mr-surface-hover); + text-decoration: underline; + text-underline-offset: 4px; } +nav ul a[aria-current="page"] { + color: var(--mr-accent); + background: var(--mr-accent-subtle); + font-weight: 500; +} + +/* The sidebar is a plain list on wide screens; the disclosure summary that + * collapses it only appears on narrow ones. */ +.nav-toggle > summary { + display: none; +} + +@media (max-width: 60rem) { + body { + grid-template-columns: [full-start left-start right-start] minmax(0, 1fr) [left-end right-end full-end]; + } + + body > nav { + position: static; + max-height: none; + overflow: visible; + padding: 0.75rem 1rem 0; + border-bottom: 1px solid var(--mr-border); + } + + .nav-toggle > summary { + list-style: none; + display: flex; + align-items: center; + justify-content: space-between; + gap: 0.5rem; + padding: 0.5rem 0.75rem; + margin-bottom: 0.75rem; + border: 1px solid var(--mr-border-strong); + border-radius: var(--mr-radius); + background: var(--mr-surface); + font-weight: 500; + } + + .nav-toggle > summary::-webkit-details-marker { + display: none; + } + + .nav-toggle > summary::after { + content: ""; + height: 1rem; + width: 1rem; + background-color: currentcolor; + mask-image: url(/assets/icons/chevron-down.svg); + mask-size: contain; + mask-repeat: no-repeat; + transition: transform 150ms; + } + + .nav-toggle[open] > summary::after { + transform: rotate(180deg); + } +} + +/* --------------------------------------------------------------- content --- */ + +main { + grid-column: right; + max-width: 52rem; + padding: 2rem 1.25rem 4rem; +} + +@media (min-width: 60rem) { + main { + padding: 2.5rem 2.5rem 5rem; + } +} + +/* ---------------------------------------------------------------- footer --- */ + body > footer { grid-column: full; - background: #172e51; - color: #B4CBEE; - font-size: small; + /* Opaque and above the sticky sidebar, so the footer always wins the overlap + rather than having nav links show through it. */ + position: relative; + z-index: 20; + background: var(--mr-bg); + min-height: var(--mr-footer-height); + box-sizing: border-box; + border-top: 1px solid var(--mr-border); + color: var(--mr-text-muted); + font-size: 0.8125rem; display: flex; + flex-wrap: wrap; align-items: center; justify-content: center; - gap: 2em; - padding: 1em; + gap: 0.5rem 1.5rem; + padding: 1.5rem 1.25rem; } -body > footer ul { - padding: 0; - list-style-type: none; +body > footer a { + color: var(--mr-text-muted); + text-decoration: none; +} + +body > footer a:hover { + color: var(--mr-accent); + text-decoration: underline; + text-underline-offset: 4px; +} + +body > footer p { + margin: 0; } diff --git a/_styles/prose.scss b/_styles/prose.scss index e16f72c..96c2143 100644 --- a/_styles/prose.scss +++ b/_styles/prose.scss @@ -1,57 +1,247 @@ -h1, h2, h3, h4, h5, h6 { - font-weight: 300; - color: #fffd86; +/* Long-form content styling. Type scale, code, tables and callouts are built + * from the same tokens the app's Card / Table / Alert components use. */ + +h1, +h2, +h3, +h4, +h5, +h6 { + color: var(--mr-text-strong); + font-weight: 600; + letter-spacing: -0.01em; + line-height: 1.25; + scroll-margin-top: calc(var(--mr-header-height) + 1rem); +} + +h1 { + font-size: 2rem; + margin: 0 0 1.5rem; +} + +h2 { + font-size: 1.5rem; + margin: 2.5rem 0 1rem; + padding-bottom: 0.5rem; + border-bottom: 1px solid var(--mr-border); +} + +h3 { + font-size: 1.1875rem; + margin: 2rem 0 0.75rem; +} + +h4, +h5, +h6 { + font-size: 1rem; + margin: 1.5rem 0 0.5rem; +} + +p, +ul, +ol { + margin: 0 0 1rem; +} + +ul, +ol { + padding-left: 1.5rem; } -b, strong { +li { + margin: 0.25rem 0; +} + +li > ul, +li > ol { + margin: 0.25rem 0; +} + +b, +strong { font-weight: 600; + color: var(--mr-text-strong); } -pre, code { - font-size: 1em; +hr { + border: 0; + border-top: 1px solid var(--mr-border); + margin: 2.5rem 0; } -pre { - border: 1px solid rgba(255, 255, 255, 0.1); - background: rgba(0, 0, 0, 0.1); - padding: 1em; +/* ------------------------------------------------------------------ links --- */ + +/* Mirrors the app's `link` utility: underlined with a 4px offset, going green + * on hover, in both themes. Scoped to the content column so it can't reach + * into the header, the sidebar, or DocSearch's own modal. */ +main a, +main a:visited { + color: inherit; + text-decoration: underline; + text-underline-offset: 4px; + text-decoration-thickness: 1px; + transition: color 150ms; +} + +main a:hover { + color: var(--mr-accent); +} + +/* ------------------------------------------------------------------- code --- */ + +pre, +code, +kbd, +samp { + font-family: var(--mr-font-mono); + font-size: 0.875em; } code { - background: rgba(255, 255, 255, 0.15); - padding: 2px; - border-radius: 3px; + background: var(--mr-code-bg); + border: 1px solid var(--mr-code-border); + border-radius: 0.25rem; + padding: 0.1em 0.3em; + white-space: break-spaces; +} + +pre { + background: var(--mr-code-bg); + border: 1px solid var(--mr-code-border); + border-radius: var(--mr-radius-lg); + padding: 1rem; + margin: 0 0 1.25rem; + overflow-x: auto; + line-height: 1.5; } pre > code { background: none; - padding: initial; + border: 0; + padding: 0; + white-space: pre; } -a, a:visited { - color: rgb(145, 243, 162); +/* Keyboard keys, used heavily on the shortcuts page. */ +kbd { + display: inline-block; + min-width: 1.5rem; + padding: 0.125rem 0.375rem; + border: 1px solid var(--mr-border-strong); + border-bottom-width: 2px; + border-radius: 0.375rem; + background: var(--mr-surface); + color: var(--mr-text-strong); + font-size: 0.75rem; + font-family: var(--mr-font-sans); + font-weight: 500; + line-height: 1.25; + text-align: center; + white-space: nowrap; } -a:hover { - color: white; -} +/* ------------------------------------------------------------------ media --- */ -img, video { +img, +video { display: block; max-width: 100%; + border-radius: var(--mr-radius-lg); + border: 1px solid var(--mr-border); + background: var(--mr-surface); } img[width][height] { height: auto; /* Preserve aspect ratio */ } +/* ----------------------------------------------------------------- tables --- */ + +table { + width: 100%; + border-collapse: collapse; + margin: 0 0 1.25rem; + font-size: 0.9375rem; + display: block; + overflow-x: auto; +} + +th, +td { + padding: 0.625rem 0.75rem; + text-align: left; + border-bottom: 1px solid var(--mr-border); +} + +thead th { + color: var(--mr-text-muted); + font-size: 0.8125rem; + font-weight: 500; + white-space: nowrap; +} + +tbody tr:last-child td { + border-bottom: 0; +} + +/* ------------------------------------------------------- callouts / notes --- */ + +/* Kramdown renders `>` blocks as blockquotes; the app's Alert component is the + * closest equivalent, so borrow its shape. Add `{: .warning}` or `{: .legacy}` + * for the other variants. */ +blockquote { + margin: 0 0 1.25rem; + padding: 0.875rem 1rem; + border: 1px solid var(--mr-border); + border-left: 3px solid var(--mr-info); + border-radius: var(--mr-radius); + background: var(--mr-surface); + color: var(--mr-text); +} + +blockquote > :last-child { + margin-bottom: 0; +} + +blockquote.warning { + border-left-color: var(--mr-warning); +} + +blockquote.caution { + border-left-color: var(--mr-caution); +} + +/* Used to flag documentation for behaviour that the current MapRoulette + * frontend no longer provides. */ +blockquote.legacy { + border-left-color: var(--mr-text-faint); + color: var(--mr-text-muted); +} + +/* ------------------------------------------------------------- footnotes --- */ + .footnotes { - border-top: 1px solid color-mix(in srgb, currentColor 30%, transparent); - font-size: small; - margin-top: 2em; - padding-top: 2em; + border-top: 1px solid var(--mr-border); + color: var(--mr-text-muted); + font-size: 0.875rem; + margin-top: 2.5rem; + padding-top: 1.5rem; } .footnotes p { margin: 0.5em 0; } + +/* Side-by-side screenshot rows used on a few pages. */ +.figure-row { + display: flex; + flex-wrap: wrap; + gap: 0.75rem; + margin-bottom: 1.25rem; +} + +.figure-row img { + flex: 1 1 14rem; + min-width: 0; +} diff --git a/_styles/theme.scss b/_styles/theme.scss new file mode 100644 index 0000000..ece5639 --- /dev/null +++ b/_styles/theme.scss @@ -0,0 +1,137 @@ +/* Design tokens mirroring the MapRoulette app (see maproulette3 src/main.css). + * + * The app builds on Tailwind's zinc scale in light mode and its slate scale in + * dark mode, with green as the single accent colour. These variables restate + * those exact values so the docs and the app read as one product. */ + +:root { + color-scheme: light; + + --mr-bg: #f4f4f5; /* zinc-100 — app body background */ + --mr-surface: #ffffff; /* white — app Card background */ + --mr-surface-subtle: #fafafa; /* zinc-50 */ + --mr-surface-hover: #f4f4f5; /* zinc-100 */ + + --mr-text: #3f3f46; /* zinc-700 — app body text */ + --mr-text-strong: #18181b; /* zinc-900 — app Card text / headings */ + --mr-text-muted: #71717a; /* zinc-500 — app CardDescription */ + --mr-text-faint: #a1a1aa; /* zinc-400 */ + + --mr-border: #e4e4e7; /* zinc-200 — app default border */ + --mr-border-strong: #d4d4d8; /* zinc-300 — app outline button border */ + + --mr-accent: #16a34a; /* green-600 — app link hover, success button */ + --mr-accent-hover: #15803d; /* green-700 */ + --mr-accent-subtle: rgba(22, 163, 74, 0.12); + + --mr-info: #2563eb; /* blue-600 */ + --mr-warning: #ca8a04; /* yellow-600 */ + --mr-caution: #ea580c; /* orange-600 */ + --mr-danger: #b91c1c; /* red-700 */ + + --mr-code-bg: #fafafa; + --mr-code-border: #e4e4e7; + + /* The app's --shadow-lg override, plus Tailwind's shadow-sm/xs */ + --mr-shadow-xs: 0 1px 2px 0 rgba(0, 0, 0, 0.05); + --mr-shadow-sm: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px -1px rgba(0, 0, 0, 0.1); + --mr-shadow-lg: 0 0 10px rgba(0, 0, 0, 0.15); + + /* rounded-lg / rounded-xl / rounded-full in the app */ + --mr-radius: 0.5rem; + --mr-radius-lg: 0.75rem; + --mr-radius-full: 9999px; + + --mr-ring: rgba(9, 9, 11, 0.5); /* zinc-950/50 — app focus-visible ring */ + + --mr-font-sans: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, + "Helvetica Neue", Arial, sans-serif; + --mr-font-mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, + "Liberation Mono", monospace; + + --mr-sidebar-width: 17.5rem; + --mr-header-height: 4.25rem; + /* Also applied as the footer's min-height, so the space the sticky + * sidebar reserves below itself always matches the real footer. */ + --mr-footer-height: 4.25rem; +} + +:root.dark { + color-scheme: dark; + + --mr-bg: #020617; /* slate-950 — app body background */ + --mr-surface: #1e293b; /* slate-800 — app Card background */ + --mr-surface-subtle: #0f172a; /* slate-900 */ + --mr-surface-hover: #1e293b; /* slate-800 */ + + --mr-text: #fafafa; /* zinc-50 — app body text */ + --mr-text-strong: #fafafa; /* zinc-50 */ + --mr-text-muted: #94a3b8; /* slate-400 — app CardDescription */ + --mr-text-faint: #64748b; /* slate-500 */ + + --mr-border: #334155; /* slate-700 — app default border */ + --mr-border-strong: #334155; /* slate-700 */ + + --mr-accent: #4ade80; /* green-400 — app link hover in dark */ + --mr-accent-hover: #86efac; /* green-300 */ + --mr-accent-subtle: rgba(74, 222, 128, 0.14); + + --mr-info: #60a5fa; /* blue-400 */ + --mr-warning: #facc15; /* yellow-400 */ + --mr-caution: #fb923c; /* orange-400 */ + --mr-danger: #f87171; /* red-400 */ + + --mr-code-bg: #0f172a; + --mr-code-border: #334155; + + --mr-shadow-xs: none; + --mr-shadow-sm: none; + --mr-shadow-lg: none; + + --mr-ring: rgba(212, 212, 216, 0.5); /* zinc-300/50 — app dark focus ring */ +} + +/* Algolia DocSearch, themed with the tokens above so the search button and the + * search modal match the app's Input, Card and Dialog components rather than + * DocSearch's defaults. Driven through DocSearch's own custom properties + * wherever possible, so it survives upgrades; see components.scss for the few + * places a variable doesn't reach. */ +:root { + --docsearch-primary-color: #16a34a; /* green-600 — active hit, highlights */ + --docsearch-highlight-color: var(--docsearch-primary-color); + --docsearch-text-color: var(--mr-text); + --docsearch-muted-color: var(--mr-text-muted); + --docsearch-logo-color: var(--mr-text-faint); + --docsearch-icon-stroke-width: 2; + --docsearch-spacing: 0.75rem; + + --docsearch-container-background: rgba(9, 9, 11, 0.45); + --docsearch-modal-width: 38rem; + --docsearch-modal-height: 32rem; + --docsearch-modal-background: var(--mr-surface); + --docsearch-modal-shadow: var(--mr-shadow-lg); + + --docsearch-searchbox-height: 2.75rem; + --docsearch-searchbox-background: var(--mr-surface-subtle); + --docsearch-searchbox-focus-background: var(--mr-surface-subtle); + --docsearch-searchbox-shadow: inset 0 0 0 1px var(--mr-border-strong); + + --docsearch-hit-height: 3rem; + --docsearch-hit-color: var(--mr-text); + --docsearch-hit-active-color: #ffffff; + --docsearch-hit-background: var(--mr-surface-subtle); + --docsearch-hit-shadow: none; + + --docsearch-key-gradient: var(--mr-surface-subtle); + --docsearch-key-shadow: none; + + --docsearch-footer-height: 3rem; + --docsearch-footer-background: var(--mr-surface); + --docsearch-footer-shadow: 0 -1px 0 0 var(--mr-border); +} + +:root.dark { + --docsearch-primary-color: #22c55e; /* green-500 — white text still reads on it */ + --docsearch-container-background: rgba(2, 6, 23, 0.7); + --docsearch-modal-shadow: 0 0 0 1px var(--mr-border), 0 16px 40px rgba(0, 0, 0, 0.5); +} diff --git a/_styles/utils.scss b/_styles/utils.scss index 27115b9..c12a8bb 100644 --- a/_styles/utils.scss +++ b/_styles/utils.scss @@ -1,28 +1,79 @@ .sr-only:not(:focus):not(:active) { - clip: rect(0 0 0 0); + clip: rect(0 0 0 0); clip-path: inset(50%); height: 1px; overflow: hidden; position: absolute; - white-space: nowrap; + white-space: nowrap; width: 1px; } -a.sr-only[href="#content"] { +/* Skip link: hidden until focused, then shown as a button over the header. */ +.skip-link { position: absolute; - top: 0; + top: 0.5rem; left: 50%; transform: translateX(-50%); + z-index: 50; + padding: 0.5rem 1rem; + border-radius: var(--mr-radius); + background: var(--mr-text-strong); + color: var(--mr-bg); + font-size: 0.875rem; + font-weight: 500; + text-decoration: none; } a[rel="external"]::after { display: inline-block; content: ""; - height: 1em; - width: 1em; + height: 0.875em; + width: 0.875em; background-color: currentcolor; mask-image: url(/assets/icons/external.svg); mask-size: contain; + mask-repeat: no-repeat; transform: translateY(0.125em); - margin-left: 0.5ch; + margin-left: 0.375ch; +} + +/* Applied by the header script only when JS is available, so the theme + * switcher never appears as a dead control. */ +[hidden] { + display: none !important; +} + +/* The app's `link-nav` utility: no underline until hovered. */ +.link-nav, +.link-nav:visited { + color: var(--mr-text); + font-size: 0.875rem; + font-weight: 500; + text-decoration: none; + white-space: nowrap; +} + +.link-nav:hover { + color: var(--mr-accent); + text-decoration: underline; + text-underline-offset: 4px; +} + +/* Logomark rings spin on hover, matching the app's Logomark component. */ +@media (prefers-reduced-motion: no-preference) { + .site-brand:hover .logomark-inner { + transform-origin: center; + animation: logomark-spin 2s linear infinite; + } + + .site-brand:hover .logomark-middle { + transform-origin: center; + animation: logomark-spin 4s linear infinite; + } +} + +@keyframes logomark-spin { + to { + transform: rotate(360deg); + } } diff --git a/assets/icons/chevron-down.svg b/assets/icons/chevron-down.svg new file mode 100644 index 0000000..694be46 --- /dev/null +++ b/assets/icons/chevron-down.svg @@ -0,0 +1,3 @@ + + + diff --git a/index.es.md b/index.es.md deleted file mode 100644 index 75f2d00..0000000 --- a/index.es.md +++ /dev/null @@ -1,10 +0,0 @@ ---- ---- - -¡Te damos la bienvenida al sitio de documentación y aprendizaje de MapRoulette! - -![](/media/welcome-index.png) - -Si te gustaría trabajar como mapeador, visita nuestra aplicación web en [MapRoulette.org](https://maproulette.org/) - -¡Nuestra comunidad continua creciendo rápidamente! Si te gustaría ayudar a contribuir a la documentación de MapRoulette, por favor visita nuestro [Repositorio](https://github.com/maproulette/docs) para las instrucciones. Gracias de antemano. diff --git a/index.fr_FR.md b/index.fr_FR.md deleted file mode 100644 index 230d1c9..0000000 --- a/index.fr_FR.md +++ /dev/null @@ -1,10 +0,0 @@ ---- ---- - -Bienvenue sur la documentation et le site d'apprentissage de MapRoulette ! - -![](/media/welcome-index.png) - -Si vous souhaitez vous lancer dans la cartographie, visitez le site de l'application [MapRoulette.org](https://maproulette.org/). - -Notre communauté continue de se développer rapidement ! Si vous souhaitez aider à enrichir la documentation de MapRoulette, veuillez consulter notre [Répertoire](https://github.com/maproulette/docs) pour obtenir toutes les instructions. Merci d'avance. diff --git a/index.html b/index.html deleted file mode 100644 index 05e6acc..0000000 --- a/index.html +++ /dev/null @@ -1,22 +0,0 @@ ---- -layout: default ---- - -
    -

    Welcome to the MapRoulette documentation and learning site!

    -Click here if you are not redirected -
    - - diff --git a/index.en_US.md b/index.md similarity index 96% rename from index.en_US.md rename to index.md index d80cbb3..be94547 100644 --- a/index.en_US.md +++ b/index.md @@ -1,4 +1,5 @@ --- +permalink: / --- Welcome to the MapRoulette documentation and learning site! diff --git a/index.nl.md b/index.nl.md deleted file mode 100644 index 8ba90cf..0000000 --- a/index.nl.md +++ /dev/null @@ -1,10 +0,0 @@ ---- ---- - -Welkom op de documentatie- en leeromgeving van MapRoulette! - -![](/media/welcome-index.png) - -Als je wil beginnen karteren, ga dan naar de webpagina van onze applicatie [MapRoulette.org](https://maproulette.org/) - -Onze gemeenschap blijft snel groeien! Als je graag zou bijdragen aan de documentatie van Maproulette, kan je [deze pagina](https://github.com/maproulette/docs) bezoeken voor instructies. Dank bij voorbaat. diff --git a/index.pt_PT.md b/index.pt_PT.md deleted file mode 100644 index 9ff5df9..0000000 --- a/index.pt_PT.md +++ /dev/null @@ -1,10 +0,0 @@ ---- ---- - -Bem-vindo à página de documentação e aprendizagem do MapRoulette! - -![](/media/welcome-index.png) - -Se gostaria de começar a mapear, visite a nossa página da aplicação em [MapRoulette.org](https://maproulette.org/) - -A nossa comunidade continua a crescer rapidamente! Se gostaria de ajudar ao contribuir para a documentação do MapRoulette, por favor visite o nosso [Repositório](https://github.com/maproulette/docs) para obter instruções. Obrigado desde já. diff --git a/index.ru.md b/index.ru.md deleted file mode 100644 index a34a5f8..0000000 --- a/index.ru.md +++ /dev/null @@ -1,10 +0,0 @@ ---- ---- - -Добро пожаловать на сайт с документацией и обучающими материалами MapRoulette! - -![](/media/welcome-index.png) - -Если вы хотите заняться картированием, посетите страницу нашего приложения [MapRoulette.org](https://maproulette.org/) - -Наше сообщество продолжает быстро расти! Если вы хотите помочь и внести свой вклад в документацию MapRoulette, пожалуйста, посетите наш [Репозиторий] (https://github.com/maproulette/docs) для получения инструкций. Заранее благодарим вас. diff --git a/style.scss b/style.scss index 3aa15e4..388363d 100644 --- a/style.scss +++ b/style.scss @@ -1,9 +1,9 @@ --- --- -@import "highlight"; -@import "language-picker"; +@import "theme"; @import "layout"; @import "prose"; +@import "components"; +@import "highlight"; @import "utils"; -