├── client ├── src │ ├── assets │ │ ├── .gitkeep │ │ ├── i18n │ │ │ ├── notice.de.html │ │ │ ├── notice.es.html │ │ │ ├── notice.it.html │ │ │ ├── notice.en-US.html │ │ │ ├── changelog.de.html │ │ │ ├── changelog.en-US.html │ │ │ ├── changelog.it.html │ │ │ ├── changelog.es.html │ │ │ └── changelog.fr.html │ │ ├── icon.png │ │ ├── fonts │ │ │ ├── Linearicons-Free.eot │ │ │ ├── Linearicons-Free.ttf │ │ │ ├── Linearicons-Free.woff │ │ │ └── Linearicons-Free.woff2 │ │ ├── login-background-left.webp │ │ ├── login-background-right.webp │ │ └── arrow-down.svg │ ├── app │ │ ├── auth │ │ │ ├── oauth-landing │ │ │ │ ├── oauth-landing.component.scss │ │ │ │ ├── oauth-landing.component.html │ │ │ │ ├── oauth-landing.component.ts │ │ │ │ └── oauth-landing.component.spec.ts │ │ │ ├── login │ │ │ │ ├── login.component.html │ │ │ │ └── login.component.spec.ts │ │ │ ├── logged-in.interceptor.spec.ts │ │ │ ├── auth.guard.ts │ │ │ ├── logged-in.interceptor.ts │ │ │ └── auth.service.spec.ts │ │ ├── project-creation │ │ │ ├── task-edit │ │ │ │ ├── task-edit.component.scss │ │ │ │ ├── task-edit.component.html │ │ │ │ ├── task-edit.component.ts │ │ │ │ └── task-edit.component.spec.ts │ │ │ ├── task-draft-list │ │ │ │ ├── task-draft-list.component.scss │ │ │ │ ├── task-draft-list.component.html │ │ │ │ ├── task-draft-list.component.ts │ │ │ │ └── task-draft-list.component.spec.ts │ │ │ ├── project-import │ │ │ │ ├── project-import.component.scss │ │ │ │ ├── project-import.component.html │ │ │ │ └── project-import.component.ts │ │ │ ├── shape-upload │ │ │ │ ├── shape-upload.component.scss │ │ │ │ ├── shape-upload.component.html │ │ │ │ └── shape-upload.component.ts │ │ │ ├── shape-remote │ │ │ │ ├── shape-remote.component.scss │ │ │ │ ├── shape-remote.component.html │ │ │ │ └── shape-remote.component.ts │ │ │ ├── copy-project │ │ │ │ ├── copy-project.component.scss │ │ │ │ ├── copy-project.component.html │ │ │ │ └── copy-project.component.ts │ │ │ ├── project-properties │ │ │ │ ├── project-properties.component.scss │ │ │ │ ├── project-properties.component.ts │ │ │ │ ├── project-properties.component.spec.ts │ │ │ │ └── project-properties.component.html │ │ │ ├── project-properties.ts │ │ │ ├── shape-divide │ │ │ │ └── shape-divide.component.scss │ │ │ ├── drawing-toolbar │ │ │ │ ├── drawing-toolbar.component.html │ │ │ │ └── drawing-toolbar.component.scss │ │ │ ├── project-import.service.spec.ts │ │ │ └── project-creation │ │ │ │ └── project-creation.component.scss │ │ ├── common │ │ │ ├── entities │ │ │ │ ├── josm-data-source.ts │ │ │ │ ├── language.ts │ │ │ │ └── websocket-message.ts │ │ │ ├── components │ │ │ │ └── map │ │ │ │ │ ├── map.component.html │ │ │ │ │ └── map.component.scss │ │ │ ├── mock-router.ts │ │ │ ├── unsubscriber.ts │ │ │ ├── selected-language.guard.ts │ │ │ └── services │ │ │ │ ├── shortcut.service.spec.ts │ │ │ │ ├── websocket-client.service.spec.ts │ │ │ │ ├── loading.service.ts │ │ │ │ ├── process-point-color.service.spec.ts │ │ │ │ ├── process-point-color.service.ts │ │ │ │ ├── shortcut.service.ts │ │ │ │ ├── map-layer.service.spec.ts │ │ │ │ ├── loading.service.spec.ts │ │ │ │ └── notification.service.ts │ │ ├── task │ │ │ ├── task-map │ │ │ │ ├── task-map.component.html │ │ │ │ └── task-map.component.scss │ │ │ ├── task-title.pipe.ts │ │ │ ├── task-list │ │ │ │ ├── task-list.component.html │ │ │ │ └── task-list.component.scss │ │ │ ├── task-title.pipe.spec.ts │ │ │ ├── task.material.spec.ts │ │ │ ├── task-details │ │ │ │ ├── task-details.component.scss │ │ │ │ └── task-details.component.html │ │ │ └── task.material.ts │ │ ├── ui │ │ │ ├── footer │ │ │ │ ├── footer.component.html │ │ │ │ ├── footer.component.scss │ │ │ │ └── footer.component.ts │ │ │ ├── language-selection │ │ │ │ ├── language-selection.component.scss │ │ │ │ ├── language-selection.component.html │ │ │ │ ├── language-selection.component.ts │ │ │ │ └── language-selection.component.spec.ts │ │ │ ├── toolbar │ │ │ │ ├── toolbar.component.html │ │ │ │ ├── toolbar.component.ts │ │ │ │ ├── toolbar.component.scss │ │ │ │ └── toolbar.component.spec.ts │ │ │ ├── icon-button │ │ │ │ ├── icon-button.component.html │ │ │ │ ├── icon-button.component.scss │ │ │ │ └── icon-button.component.ts │ │ │ ├── zoom-control │ │ │ │ ├── zoom-control.component.html │ │ │ │ ├── zoom-control.component.scss │ │ │ │ ├── zoom-control.component.ts │ │ │ │ └── zoom-control.component.spec.ts │ │ │ ├── progress-bar │ │ │ │ ├── progress-bar.component.html │ │ │ │ ├── progress-bar.component.scss │ │ │ │ └── progress-bar.component.ts │ │ │ ├── tabs │ │ │ │ ├── tabs.component.html │ │ │ │ ├── tabs.component.spec.ts │ │ │ │ ├── tabs.component.ts │ │ │ │ └── tabs.component.scss │ │ │ ├── max-validator.directive.ts │ │ │ ├── min-validator.directive.ts │ │ │ ├── max-validator.directive.spec.ts │ │ │ ├── min-validator.directive.spec.ts │ │ │ └── notification │ │ │ │ ├── notification.component.html │ │ │ │ └── notification.component.ts │ │ ├── user │ │ │ ├── user-invitation │ │ │ │ ├── user-invitation.component.scss │ │ │ │ ├── user-invitation.component.html │ │ │ │ └── user-invitation.component.ts │ │ │ ├── user.material.ts │ │ │ ├── user-list │ │ │ │ ├── user-list.component.html │ │ │ │ ├── user-list.component.scss │ │ │ │ ├── user-list.component.ts │ │ │ │ └── user-list.component.spec.ts │ │ │ ├── current-user.service.spec.ts │ │ │ └── current-user.service.ts │ │ ├── config │ │ │ ├── config.ts │ │ │ ├── config.provider.ts │ │ │ ├── config.resolver.ts │ │ │ ├── config.provider.spec.ts │ │ │ └── config.resolver.spec.ts │ │ ├── app.component.html │ │ ├── app.component.scss │ │ ├── error-handler.ts │ │ ├── comments │ │ │ ├── comment.service.ts │ │ │ ├── comment.material.ts │ │ │ ├── comment │ │ │ │ ├── comment.component.html │ │ │ │ ├── comment.component.ts │ │ │ │ └── comment.component.spec.ts │ │ │ └── comment.service.spec.ts │ │ ├── project │ │ │ ├── project-settings │ │ │ │ └── project-settings.component.scss │ │ │ ├── project-list │ │ │ │ ├── project-list.component.scss │ │ │ │ └── project-list.component.html │ │ │ ├── project.resolver.ts │ │ │ └── all-projects.resolver.ts │ │ ├── dashboard │ │ │ ├── dashboard.component.scss │ │ │ ├── dashboard.component.html │ │ │ ├── dashboard.component.spec.ts │ │ │ └── dashboard.component.ts │ │ ├── app.component.spec.ts │ │ ├── app.component.ts │ │ └── app-routing.module.ts │ ├── favicon.ico │ ├── favicon.xcf │ ├── index.html │ ├── main.ts │ ├── colors.scss │ └── environments │ │ ├── environment.ts │ │ ├── environment.local.ts │ │ └── environment.prod.ts ├── .dockerignore ├── nginx.conf ├── .htaccess-stm-test ├── tsconfig.app.json ├── .vimrc ├── jest │ ├── worker-mock.ts │ └── setup-jest.ts ├── .editorconfig ├── tsconfig.spec.json ├── .browserslistrc ├── Dockerfile ├── jest.config.js ├── .gitignore ├── tsconfig.json ├── tslint-to-eslint-config.log └── package.json ├── screenshot.webp ├── server ├── .dockerignore ├── comment │ ├── api.go │ ├── entity.go │ ├── service.go │ └── service_test.go ├── database │ ├── scripts │ │ ├── 009_remove-task-ids-from-projects.sql │ │ ├── 002_project-description.sql │ │ ├── 000_init.sql │ │ ├── 010_add-project-creation-date.sql │ │ ├── 006_project-task-relation.sql │ │ ├── 013_josm-data-source.sql │ │ ├── 007_remove-stale-tasks.sql │ │ ├── 001_basic-tables.sql │ │ ├── 008_migrate-project-task-relation.sh │ │ ├── 011_comments.sql │ │ ├── common.sh │ │ ├── 003_string-to-array-migration.sql │ │ ├── 012_initial-comment-migration.sh │ │ └── 005_migrate-to-geo-json.sh │ ├── database.go │ └── init-db.sh ├── config │ ├── default.json │ ├── prod.json │ ├── local.json │ ├── root_test.go │ ├── api.go │ └── api_test.go ├── test │ └── test-config.json ├── oauth2 │ └── entity.go ├── task │ ├── api.go │ └── entity.go ├── export │ └── entity.go ├── util │ ├── random.go │ ├── logger.go │ └── util.go ├── Dockerfile ├── go.mod ├── project │ ├── api.go │ └── entity.go ├── api │ └── context.go ├── main.go └── run-tests.sh ├── doc ├── architecture │ ├── server-diagram.png │ └── server.puml ├── authentication │ └── authentication.png ├── operation │ ├── certbot.timer │ ├── stm-backup.timer │ ├── stm-backup.service │ ├── certbot.service │ ├── README.md │ └── docker.md └── README.md ├── .gitignore ├── create-backup.sh ├── README.ja.md └── docker-compose.yml /client/src/assets/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/src/assets/i18n/notice.de.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/src/assets/i18n/notice.es.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/src/assets/i18n/notice.it.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/src/assets/i18n/notice.en-US.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/src/app/auth/oauth-landing/oauth-landing.component.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/src/app/project-creation/task-edit/task-edit.component.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /screenshot.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hauke96/simple-task-manager/HEAD/screenshot.webp -------------------------------------------------------------------------------- /client/src/app/auth/oauth-landing/oauth-landing.component.html: -------------------------------------------------------------------------------- 1 |
Succesfully logged in :)
2 | -------------------------------------------------------------------------------- /client/src/app/common/entities/josm-data-source.ts: -------------------------------------------------------------------------------- 1 | export type JosmDataSource = 'OSM' | 'OVERPASS'; 2 | -------------------------------------------------------------------------------- /client/src/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hauke96/simple-task-manager/HEAD/client/src/favicon.ico -------------------------------------------------------------------------------- /client/src/favicon.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hauke96/simple-task-manager/HEAD/client/src/favicon.xcf -------------------------------------------------------------------------------- /client/src/assets/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hauke96/simple-task-manager/HEAD/client/src/assets/icon.png -------------------------------------------------------------------------------- /server/.dockerignore: -------------------------------------------------------------------------------- 1 | docker-compose* 2 | .dockerignore 3 | .git 4 | .gitignore 5 | server 6 | server.debug 7 | 8 | -------------------------------------------------------------------------------- /client/.dockerignore: -------------------------------------------------------------------------------- 1 | docker-compose* 2 | .dockerignore 3 | .git 4 | .gitignore 5 | node_modules 6 | npm-debug.log 7 | 8 | -------------------------------------------------------------------------------- /client/src/app/task/task-map/task-map.component.html: -------------------------------------------------------------------------------- 1 |Änderungen in 1.7.0:
2 | 3 |Changes in 1.7.0:
2 | 3 |Novità in 1.7.0:
2 | 3 | (Traduzione automatica) 4 | 5 |Cambios en 1.7.0:
2 | 3 | (Traducción automática) 4 | 5 |Modifications en 1.7.0 :
2 | 3 | (Traduction automatique) 4 | 5 |{{'project-creation.loading-title' | translate}}
12 |{{'project-list.no-project-notice' | translate}}
17 |{{'project-creation.loading-projects' | translate}}
7 |{{'project-creation.no-project-notice' | translate}}
12 |{{'project-creation.available-projects' | translate}}
15 |{{'dashboard.welcome' | translate: {userName: userName} }}
4 | 13 |{{'description' | translate}}
25 | {{descriptionInput.textLength}} / {{config.maxDescriptionLength}} 26 |
4 |
8 |
14 |
15 | # どのように動作しますか?
16 |
17 | ユーザは、地図上の大きな領域(例:市区)で構成される**プロジェクト**を作成できます。
18 | この領域は、いわゆる**タスク**より小さな領域(たとえば、1x1kmの大きな正方形)に分割されています。
19 | ファイル(例えばGeoJSONファイル)から**ジオメトリ**をインポートして、タスクを作成することもできます。
20 |
21 | 一度に1人のユーザーがそのようなタスクの作業ができるようになりました。このユーザーは、**進捗ポイント**を設定することで、タスクの**進捗**を更新できます。
22 | 領域が完全にマッピングされると、ユーザは進捗ポイントを最大値(100%)に設定して終了し、次のタスクを開始することができます。
23 |
24 | プロジェクトの所有者は、他のユーザをプロジェクトに招待することもできます。
25 | あるユーザーがタスクで作業している場合、他のユーザーはそのタスクのプロセスを更新できません。
26 |
27 | # さらに別のタスクマネージャですか?
28 | *(つまり、HOT Tasking Managerの何が問題ですか?)*
29 |
30 | 個人的には、HOT Tasking Managerがそれほど好きではない理由がいくつかあります(直感的なUIでない、iD統合、一定時間後にタスクから自動的に割り当てられないなど)
31 |
32 | 別の方法としては、例えばMapCraft・タスキング・マネージャがあります。これは非常に古く、すでにリポジトリをコンパイルできない状況です。
33 | したがって、MapCraftを設定することはできません(依存関係が壊れている古いPHPコードに何時間も費やしたくない場合)。
34 |
35 | つまり、基本的にはこれは別のタスクマネージャですが、既存のもののクローンではありません。
36 |
37 | # ドキュメント
38 |
39 | ドキュメントは、[docフォルダ](doc)(deployment,api,security,architecture,operationなど)と、別の[client](client)および[server](server)フォルダ(主にセットアップと開発情報)にあります。
40 |
41 | 現在、エンドユーザーマニュアルやチュートリアルなどはありません。
42 |
43 | # 貢献
44 |
45 | 現在、実際のガイドラインはありません。**issue**または**プルリクエスト**を自由に作成してください。
46 |
47 | **コーディングを開始しますか?**開始する方法については、[doc/development/README.md](doc/development/README.md)をご覧ください。
--------------------------------------------------------------------------------
/client/src/app/auth/logged-in.interceptor.spec.ts:
--------------------------------------------------------------------------------
1 | import { LoggedInInterceptor } from './logged-in.interceptor';
2 | import { AuthService } from './auth.service';
3 | import { NotificationService } from '../common/services/notification.service';
4 | import { HttpRequest } from '@angular/common/http';
5 | import { environment } from '../../environments/environment';
6 | import { of } from 'rxjs';
7 | import { TranslateService } from '@ngx-translate/core';
8 |
9 | describe(LoggedInInterceptor.name, () => {
10 | let interceptor: LoggedInInterceptor;
11 | let authService: AuthService;
12 | let notificationService: NotificationService;
13 | let translationService: TranslateService;
14 |
15 | beforeEach(() => {
16 | authService = {} as AuthService;
17 | notificationService = {} as NotificationService;
18 | translationService = {} as TranslateService;
19 |
20 | interceptor = new LoggedInInterceptor(authService, notificationService, translationService);
21 | });
22 |
23 | it('should call next handler on unauthenticated URLs', () => {
24 | const nextHandler = {
25 | handle: jest.fn()
26 | };
27 |
28 | const request = {url: 'https://foo.com/bar'} as HttpRequest