107 lines
2.8 KiB
JavaScript
107 lines
2.8 KiB
JavaScript
/*global define*/
|
||
define(
|
||
[ 'config', 'lib/reqwest', 'util/addpublishers' ],
|
||
function ( config, reqwest, addPublishers ) {
|
||
// the ShareModel uploads and removes images from Imgur
|
||
function ShareModel () {
|
||
if ( ! ( this instanceof ShareModel ) ) {
|
||
return new ShareModel();
|
||
}
|
||
|
||
var self = this;
|
||
var base64Url;
|
||
var publishers = addPublishers( self,
|
||
'uploadstart', 'uploadend', 'uploadcomplete',
|
||
'removestart', 'removeend', 'removecomplete',
|
||
'error', 'statusmessage'
|
||
);
|
||
|
||
// http://stackoverflow.com/questions/17805456/upload-a-canvas-image-to-imgur-api-v3-with-javascript
|
||
function upload () {
|
||
if ( base64Url ) {
|
||
publishers.uploadstart.dispatch();
|
||
|
||
reqwest( {
|
||
url: 'https://api.imgur.com/3/image.json',
|
||
method: 'POST',
|
||
headers: {
|
||
Authorization: 'Client-ID ' + config.keys.imgur
|
||
},
|
||
data: {
|
||
image: base64Url.split( ',' )[1],
|
||
type: 'base64'
|
||
},
|
||
type: 'json',
|
||
crossOrigin: true,
|
||
success: uploadSuceeded,
|
||
error: uploadFailed
|
||
} );
|
||
} else {
|
||
uploadFailed( new Error( 'share.error.base64' ) );
|
||
}
|
||
|
||
return self;
|
||
}
|
||
|
||
function uploadSuceeded ( res ) {
|
||
publishers.uploadend.dispatch();
|
||
|
||
if ( res.status === 200 && res.data && res.data.link ) {
|
||
var link = res.data.link.replace( 'http://', 'https://' );
|
||
|
||
publishers.uploadcomplete.dispatch( link, res.data.id, res.data.deletehash );
|
||
publishers.statusmessage.dispatch( 'share.message.upload', { innerHTML: true, args: [ link ] } );
|
||
}
|
||
}
|
||
|
||
function uploadFailed ( err ) {
|
||
publishers.uploadend.dispatch();
|
||
publishers.error.dispatch( 'share.error.upload', { type: 'imguruploadfail' } );
|
||
console && console.log( err.message || err );
|
||
}
|
||
|
||
function updateUrl ( url ) {
|
||
base64Url = url;
|
||
|
||
return self;
|
||
}
|
||
|
||
function remove ( uid, deleteHash ) {
|
||
if ( deleteHash ) {
|
||
publishers.removestart.dispatch( uid );
|
||
|
||
reqwest( {
|
||
url: 'https://api.imgur.com/3/image/' + deleteHash,
|
||
method: 'DELETE',
|
||
headers: {
|
||
Authorization: 'Client-ID ' + config.keys.imgur
|
||
},
|
||
crossOrigin: true,
|
||
success: function () { removeSucceeded( uid ); },
|
||
error: function ( err ) { removeFailed( uid, err ); }
|
||
} );
|
||
}
|
||
|
||
return self;
|
||
}
|
||
|
||
function removeSucceeded ( uid ) {
|
||
publishers.removeend.dispatch( uid );
|
||
publishers.removecomplete.dispatch( uid );
|
||
publishers.statusmessage.dispatch( 'share.message.del' );
|
||
}
|
||
|
||
function removeFailed ( uid, err ) {
|
||
publishers.removeend.dispatch( uid );
|
||
publishers.error.dispatch( 'share.error.del', { type: 'imgurremovefail', uid: uid } );
|
||
console && console.log( err.message || err );
|
||
}
|
||
|
||
self.upload = upload;
|
||
self.updateUrl = updateUrl;
|
||
self.remove = remove
|
||
}
|
||
|
||
return ShareModel;
|
||
}
|
||
); |