139 lines
4.0 KiB
JavaScript
139 lines
4.0 KiB
JavaScript
/*global define*/
|
||
define(
|
||
[ 'lib/reqwest' ],
|
||
function( reqwest, $ )
|
||
{
|
||
var signals;
|
||
var imgur_button;
|
||
var imgur_url_container;
|
||
var imgur_url_input;
|
||
var imgur_url_link;
|
||
var imgur_url_error;
|
||
var twitter_link;
|
||
var facebook_link;
|
||
var reddit_link;
|
||
var is_uploading = false;
|
||
var is_showing_links = false;
|
||
|
||
function init( shared )
|
||
{
|
||
signals = shared.signals;
|
||
imgur_button = document.getElementById( 'imgur-button' );
|
||
imgur_url_container = document.getElementById( 'imgur-url-container' );
|
||
imgur_url_input = document.getElementById( 'imgur-url-input' );
|
||
imgur_url_link = document.getElementById( 'imgur-url-link' );
|
||
imgur_url_error = document.getElementById( 'imgur-url-error' );
|
||
twitter_link = document.getElementById( 'twitter-link' );
|
||
facebook_link = document.getElementById( 'facebook-link' );
|
||
reddit_link = document.getElementById( 'reddit-link' );
|
||
|
||
imgur_button.addEventListener( 'click', buttonClicked, false );
|
||
imgur_url_input.addEventListener( 'click', selectInput, false );
|
||
|
||
signals['control-updated'].add( controlsUpdated );
|
||
}
|
||
|
||
function buttonClicked( event )
|
||
{
|
||
event.preventDefault();
|
||
|
||
if ( ! is_uploading )
|
||
{
|
||
signals['image-data-url-requested'].dispatch( upload );
|
||
|
||
imgur_url_container.classList.remove( 'is-active', 'upload-failed', 'upload-successful' );
|
||
}
|
||
}
|
||
|
||
function selectInput()
|
||
{
|
||
imgur_url_input.select();
|
||
}
|
||
|
||
//http://stackoverflow.com/questions/17805456/upload-a-canvas-image-to-imgur-api-v3-with-javascript
|
||
function upload( data_url )
|
||
{
|
||
if ( ! is_uploading )
|
||
{
|
||
imgur_button.classList.add( 'is-uploading' );
|
||
|
||
is_uploading = true;
|
||
|
||
reqwest(
|
||
{
|
||
url: 'https://api.imgur.com/3/image.json',
|
||
method: 'POST',
|
||
headers: {
|
||
Authorization: 'Client-ID a4c24380d884932'
|
||
},
|
||
data: {
|
||
image: data_url.split( ',' )[1],
|
||
type: 'base64'
|
||
},
|
||
type: 'json',
|
||
crossOrigin: true,
|
||
success: imageUploaded,
|
||
error: uploadFailed
|
||
}
|
||
);
|
||
}
|
||
}
|
||
|
||
function imageUploaded( response )
|
||
{
|
||
is_uploading = false;
|
||
|
||
if ( response && response.data && response.data.link )
|
||
{
|
||
var twitter_share_url_text = "Check out what I made with @snorpey’s glitch tool: ";
|
||
twitter_share_url_text += response.data.link;
|
||
twitter_share_url_text += ' http://snorpey.github.io/jpg-glitch';
|
||
|
||
//http://ar.zu.my/how-to-really-customize-the-deprecated-facebook-sharer-dot-php/
|
||
var facebook_share_url = 'https://www.facebook.com/sharer/sharer.php?s=100';
|
||
facebook_share_url += '&p[url]=' + response.data.link;
|
||
facebook_share_url += '&p[title]=Glitch!';
|
||
facebook_share_url += '&p[images][0]=' + response.data.link;
|
||
facebook_share_url += '&p[summary]=' + encodeURIComponent( 'Check out what I made with this glitch tool: http://snorpey.github.io/jpg-glitch' );
|
||
|
||
imgur_button.classList.remove( 'is-uploading' );
|
||
imgur_url_input.setAttribute( 'value', response.data.link );
|
||
imgur_url_link.href = response.data.link;
|
||
imgur_url_container.classList.add( 'is-active', 'upload-successful' );
|
||
|
||
twitter_link.href = 'https://twitter.com/intent/tweet?text=' + encodeURIComponent( twitter_share_url_text );
|
||
facebook_link.href = facebook_share_url;
|
||
reddit_link.href = 'https://www.reddit.com/submit?url=' + encodeURIComponent( response.data.link ) + '&title=Glitch!';
|
||
|
||
is_showing_links = true;
|
||
}
|
||
|
||
else
|
||
{
|
||
uploadFailed();
|
||
}
|
||
}
|
||
|
||
function uploadFailed( response )
|
||
{
|
||
is_uploading = false;
|
||
imgur_button.classList.remove( 'is-uploading' );
|
||
imgur_url_container.classList.add( 'is-active', 'upload-failed' );
|
||
}
|
||
|
||
function controlsUpdated()
|
||
{
|
||
if ( is_showing_links )
|
||
{
|
||
imgur_url_container.classList.remove( 'is-active' );
|
||
imgur_url_container.classList.remove( 'upload-failed' );
|
||
imgur_url_container.classList.remove( 'upload-successful' );
|
||
imgur_button.classList.remove( 'is-uploading' );
|
||
|
||
is_showing_links = false;
|
||
}
|
||
}
|
||
|
||
return { init: init };
|
||
}
|
||
); |