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