forked from MapComplete/MapComplete
		
	
		
			
				
	
	
		
			72 lines
		
	
	
		
			No EOL
		
	
	
		
			2.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			72 lines
		
	
	
		
			No EOL
		
	
	
		
			2.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| /**
 | |
|  * Helps in uplaoding, by generating the rigth title, decription and by adding the tag to the changeset
 | |
|  */
 | |
| import {UIEventSource} from "../UIEventSource";
 | |
| import {ImageUploadFlow} from "../../UI/ImageUploadFlow";
 | |
| import {SlideShow} from "../../UI/SlideShow";
 | |
| import {State} from "../../State";
 | |
| import {Tag} from "../Tags";
 | |
| 
 | |
| export class OsmImageUploadHandler {
 | |
|     private readonly _tags: UIEventSource<any>;
 | |
|     private readonly _slideShow: SlideShow;
 | |
|     private readonly _preferedLicense: UIEventSource<string>;
 | |
| 
 | |
|     constructor(tags: UIEventSource<any>,
 | |
|                 preferedLicense: UIEventSource<string>,
 | |
|                 slideShow : SlideShow
 | |
|     ) {
 | |
|         this._slideShow = slideShow; // To move the slideshow (if any) to the last, just added element
 | |
|         this._tags = tags;
 | |
|         this._preferedLicense = preferedLicense;
 | |
|     }
 | |
| 
 | |
|     private generateOptions(license: string) {
 | |
|         const tags = this._tags.data;
 | |
|         const self = this;
 | |
| 
 | |
|         const title = tags.name ?? "Unknown area";
 | |
|         const description = [
 | |
|             "author:" + State.state.osmConnection.userDetails.data.name,
 | |
|             "license:" + license,
 | |
|             "wikidata:" + tags.wikidata,
 | |
|             "osmid:" + tags.id,
 | |
|             "name:" + tags.name
 | |
|         ].join("\n");
 | |
| 
 | |
|         const changes = State.state.changes;
 | |
|         return {
 | |
|             title: title,
 | |
|             description: description,
 | |
|             handleURL: (url) => {
 | |
| 
 | |
|                 let key = "image";
 | |
|                 if (tags["image"] !== undefined) {
 | |
| 
 | |
|                     let freeIndex = 0;
 | |
|                     while (tags["image:" + freeIndex] !== undefined) {
 | |
|                         freeIndex++;
 | |
|                     }
 | |
|                     key = "image:" + freeIndex;
 | |
|                 }
 | |
|                 console.log("Adding image:" + key, url);
 | |
|                 changes.addTag(tags.id, new Tag(key, url));
 | |
|                 self._slideShow.MoveTo(-1); // set the last (thus newly added) image) to view
 | |
|             },
 | |
|             allDone: () => {
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     getUI(): ImageUploadFlow {
 | |
|         const self = this;
 | |
|         return new ImageUploadFlow(
 | |
|             this._preferedLicense,
 | |
|             function (license) {
 | |
|                 return self.generateOptions(license)
 | |
|             }
 | |
|         );
 | |
|     }
 | |
| 
 | |
| 
 | |
| } |