| 
									
										
										
										
											2021-02-15 17:44:19 +01:00
										 |  |  | // @ts-ignore
 | 
					
						
							| 
									
										
										
										
											2020-06-25 03:39:31 +02:00
										 |  |  | import $ from "jquery" | 
					
						
							| 
									
										
										
										
											2020-07-08 15:09:34 +02:00
										 |  |  | import {LicenseInfo} from "./Wikimedia"; | 
					
						
							| 
									
										
										
										
											2020-06-25 03:39:31 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | export class Imgur { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     static uploadMultiple( | 
					
						
							|  |  |  |         title: string, description: string, blobs: FileList, | 
					
						
							|  |  |  |         handleSuccessfullUpload: ((imageURL: string) => void), | 
					
						
							|  |  |  |         allDone: (() => void), | 
					
						
							| 
									
										
										
										
											2020-07-21 22:50:54 +02:00
										 |  |  |         onFail: ((reason: string) => void), | 
					
						
							| 
									
										
										
										
											2020-07-25 18:00:08 +02:00
										 |  |  |         offset:number) { | 
					
						
							| 
									
										
										
										
											2020-06-25 03:39:31 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-25 18:00:08 +02:00
										 |  |  |         if(offset === undefined){ | 
					
						
							|  |  |  |             throw "Offset undefined - not uploading to prevent to much uploads!" | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2020-06-25 03:39:31 +02:00
										 |  |  |         if (blobs.length == offset) { | 
					
						
							|  |  |  |             allDone(); | 
					
						
							|  |  |  |             return; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         const blob = blobs.item(offset); | 
					
						
							|  |  |  |         const self = this; | 
					
						
							|  |  |  |         this.uploadImage(title, description, blob, | 
					
						
							|  |  |  |             (imageUrl) => { | 
					
						
							|  |  |  |                 handleSuccessfullUpload(imageUrl); | 
					
						
							|  |  |  |                 self.uploadMultiple( | 
					
						
							|  |  |  |                     title, description, blobs, | 
					
						
							|  |  |  |                     handleSuccessfullUpload, | 
					
						
							|  |  |  |                     allDone, | 
					
						
							| 
									
										
										
										
											2020-07-25 12:32:30 +02:00
										 |  |  |                     onFail, | 
					
						
							| 
									
										
										
										
											2020-06-25 03:39:31 +02:00
										 |  |  |                     offset + 1); | 
					
						
							| 
									
										
										
										
											2020-07-21 22:50:54 +02:00
										 |  |  |             }, | 
					
						
							|  |  |  |             onFail | 
					
						
							| 
									
										
										
										
											2020-06-25 03:39:31 +02:00
										 |  |  |         ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-08 15:09:34 +02:00
										 |  |  |     } | 
					
						
							|  |  |  |     static getDescriptionOfImage(url: string, | 
					
						
							|  |  |  |                        handleDescription: ((license: LicenseInfo) => void)) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         const hash = url.substr("https://i.imgur.com/".length).split(".jpg")[0]; | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         const apiUrl = 'https://api.imgur.com/3/image/'+hash; | 
					
						
							|  |  |  |         const apiKey = '7070e7167f0a25a'; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-30 01:13:18 +02:00
										 |  |  |         const settings = { | 
					
						
							| 
									
										
										
										
											2020-07-08 15:09:34 +02:00
										 |  |  |             async: true, | 
					
						
							|  |  |  |             crossDomain: true, | 
					
						
							|  |  |  |             processData: false, | 
					
						
							|  |  |  |             contentType: false, | 
					
						
							|  |  |  |             type: 'GET', | 
					
						
							|  |  |  |             url: apiUrl, | 
					
						
							|  |  |  |             headers: { | 
					
						
							|  |  |  |                 Authorization: 'Client-ID ' + apiKey, | 
					
						
							|  |  |  |                 Accept: 'application/json', | 
					
						
							|  |  |  |             }, | 
					
						
							|  |  |  |         }; | 
					
						
							| 
									
										
										
										
											2021-02-15 17:44:19 +01:00
										 |  |  |         // @ts-ignore
 | 
					
						
							| 
									
										
										
										
											2020-07-08 15:09:34 +02:00
										 |  |  |         $.ajax(settings).done(function (response) { | 
					
						
							| 
									
										
										
										
											2020-11-17 16:29:51 +01:00
										 |  |  |             const descr: string = response.data.description ?? ""; | 
					
						
							|  |  |  |             const data: any = {}; | 
					
						
							| 
									
										
										
										
											2020-07-08 15:09:34 +02:00
										 |  |  |             for (const tag of descr.split("\n")) { | 
					
						
							|  |  |  |                 const kv = tag.split(":"); | 
					
						
							|  |  |  |                 const k = kv[0]; | 
					
						
							|  |  |  |                 const v = kv[1].replace("\r", ""); | 
					
						
							|  |  |  |                 data[k] = v; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |              | 
					
						
							|  |  |  |             const licenseInfo = new LicenseInfo(); | 
					
						
							|  |  |  |              | 
					
						
							|  |  |  |             licenseInfo.licenseShortName = data.license; | 
					
						
							|  |  |  |             licenseInfo.artist = data.author; | 
					
						
							|  |  |  |              | 
					
						
							|  |  |  |             handleDescription(licenseInfo); | 
					
						
							|  |  |  |              | 
					
						
							|  |  |  |         }).fail((reason) => { | 
					
						
							|  |  |  |             console.log("Getting metadata from to IMGUR failed", reason) | 
					
						
							|  |  |  |         }); | 
					
						
							|  |  |  |      | 
					
						
							| 
									
										
										
										
											2020-06-25 03:39:31 +02:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     static uploadImage(title: string, description: string, blob, | 
					
						
							| 
									
										
										
										
											2020-07-21 22:50:54 +02:00
										 |  |  |                        handleSuccessfullUpload: ((imageURL: string) => void), | 
					
						
							|  |  |  |                        onFail: (reason:string) => void) { | 
					
						
							| 
									
										
										
										
											2020-06-25 03:39:31 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         const apiUrl = 'https://api.imgur.com/3/image'; | 
					
						
							|  |  |  |         const apiKey = '7070e7167f0a25a'; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-30 01:13:18 +02:00
										 |  |  |         const settings = { | 
					
						
							| 
									
										
										
										
											2020-06-25 03:39:31 +02:00
										 |  |  |             async: true, | 
					
						
							|  |  |  |             crossDomain: true, | 
					
						
							|  |  |  |             processData: false, | 
					
						
							|  |  |  |             contentType: false, | 
					
						
							|  |  |  |             type: 'POST', | 
					
						
							|  |  |  |             url: apiUrl, | 
					
						
							|  |  |  |             headers: { | 
					
						
							|  |  |  |                 Authorization: 'Client-ID ' + apiKey, | 
					
						
							|  |  |  |                 Accept: 'application/json', | 
					
						
							|  |  |  |             }, | 
					
						
							|  |  |  |             mimeType: 'multipart/form-data', | 
					
						
							|  |  |  |         }; | 
					
						
							| 
									
										
										
										
											2020-08-30 01:13:18 +02:00
										 |  |  |         const formData = new FormData(); | 
					
						
							| 
									
										
										
										
											2020-06-25 03:39:31 +02:00
										 |  |  |         formData.append('image', blob); | 
					
						
							|  |  |  |         formData.append("title", title); | 
					
						
							|  |  |  |         formData.append("description", description) | 
					
						
							|  |  |  |         // @ts-ignore
 | 
					
						
							|  |  |  |         settings.data = formData; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // Response contains stringified JSON
 | 
					
						
							|  |  |  |         // Image URL available at response.data.link
 | 
					
						
							| 
									
										
										
										
											2021-02-15 17:44:19 +01:00
										 |  |  |         // @ts-ignore
 | 
					
						
							| 
									
										
										
										
											2020-06-25 03:39:31 +02:00
										 |  |  |         $.ajax(settings).done(function (response) { | 
					
						
							|  |  |  |             response = JSON.parse(response); | 
					
						
							|  |  |  |             handleSuccessfullUpload(response.data.link); | 
					
						
							| 
									
										
										
										
											2020-06-28 00:06:23 +02:00
										 |  |  |         }).fail((reason) => { | 
					
						
							| 
									
										
										
										
											2020-07-21 22:50:54 +02:00
										 |  |  |             console.log("Uploading to IMGUR failed", reason); | 
					
						
							| 
									
										
										
										
											2021-02-15 17:44:19 +01:00
										 |  |  |             // @ts-ignore
 | 
					
						
							| 
									
										
										
										
											2020-07-30 11:30:04 +02:00
										 |  |  |             onFail(reason); | 
					
						
							| 
									
										
										
										
											2020-06-25 03:39:31 +02:00
										 |  |  |         }); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } |