/** * 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; private _changeHandler: Changes; private _userdetails: UIEventSource; private _slideShow: SlideShow; constructor(tags: UIEventSource, userdetails: UIEventSource, 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; } 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, function (license) { return self.generateOptions(license) } ); } }