add button for image import
This commit is contained in:
parent
252ebb0eec
commit
452f82bdcc
@ -30,6 +30,8 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="export-wrapper">
|
<div class="export-wrapper">
|
||||||
|
<button id="import-button" class="button">import image</button>
|
||||||
|
<input type="file" id="import-input" accept="image/*" />
|
||||||
<button id="save-button" class="button">export image</button>
|
<button id="save-button" class="button">export image</button>
|
||||||
<a id="png-button" download="glitched-image.png" target="_blank" class="download-link">download bitmap file<span> (.png)</span></a>
|
<a id="png-button" download="glitched-image.png" target="_blank" class="download-link">download bitmap file<span> (.png)</span></a>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -20,6 +20,7 @@ require(
|
|||||||
'src/controls',
|
'src/controls',
|
||||||
'src/export-png',
|
'src/export-png',
|
||||||
'src/save-button',
|
'src/save-button',
|
||||||
|
'src/import-button',
|
||||||
'util/feature-test',
|
'util/feature-test',
|
||||||
'lib/signals-1.0.0',
|
'lib/signals-1.0.0',
|
||||||
'lib/html5slider'
|
'lib/html5slider'
|
||||||
@ -31,6 +32,7 @@ require(
|
|||||||
controls,
|
controls,
|
||||||
png,
|
png,
|
||||||
save_button,
|
save_button,
|
||||||
|
import_button,
|
||||||
testFeatures,
|
testFeatures,
|
||||||
Signal
|
Signal
|
||||||
)
|
)
|
||||||
@ -55,6 +57,7 @@ require(
|
|||||||
controls.init( shared );
|
controls.init( shared );
|
||||||
png.init( shared );
|
png.init( shared );
|
||||||
save_button.init( shared );
|
save_button.init( shared );
|
||||||
|
import_button.init( shared );
|
||||||
image.init( shared );
|
image.init( shared );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
65
scripts/src/import-button.js
Normal file
65
scripts/src/import-button.js
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
/*global define*/
|
||||||
|
define(
|
||||||
|
[ 'util/trigger-event' ],
|
||||||
|
function( triggerEvent )
|
||||||
|
{
|
||||||
|
var feature;
|
||||||
|
var signals;
|
||||||
|
var import_button;
|
||||||
|
var import_input;
|
||||||
|
var file_reader;
|
||||||
|
var image;
|
||||||
|
var file_loading = false;
|
||||||
|
var allowed_file_types = [ 'image/png', 'image/jpg', 'image/jpeg' ];
|
||||||
|
|
||||||
|
function init( shared )
|
||||||
|
{
|
||||||
|
signals = shared.signals;
|
||||||
|
feature = shared.feature;
|
||||||
|
|
||||||
|
// http://www.html5rocks.com/en/tutorials/file/dndfiles/
|
||||||
|
if ( feature['file-api' ] )
|
||||||
|
{
|
||||||
|
file_reader = new FileReader();
|
||||||
|
|
||||||
|
import_button = document.getElementById( 'import-button' );
|
||||||
|
import_input = document.getElementById( 'import-input' );
|
||||||
|
|
||||||
|
file_reader.addEventListener( 'load', fileLoaded, false );
|
||||||
|
import_button.addEventListener( 'click', buttonClicked, false );
|
||||||
|
import_input.addEventListener( 'change', fileSelected, false );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function buttonClicked( event )
|
||||||
|
{
|
||||||
|
event.preventDefault();
|
||||||
|
|
||||||
|
if ( ! file_loading )
|
||||||
|
{
|
||||||
|
triggerEvent( import_input, 'click' );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function fileSelected( event )
|
||||||
|
{
|
||||||
|
var files = event.target.files;
|
||||||
|
|
||||||
|
if (
|
||||||
|
files[0] &&
|
||||||
|
files[0].type &&
|
||||||
|
allowed_file_types.indexOf( files[0].type ) !== -1
|
||||||
|
)
|
||||||
|
{
|
||||||
|
file_reader.readAsDataURL( files[0] );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function fileLoaded( event )
|
||||||
|
{
|
||||||
|
signals['set-new-src'].dispatch( event.target.result );
|
||||||
|
}
|
||||||
|
|
||||||
|
return { init: init };
|
||||||
|
}
|
||||||
|
);
|
||||||
71
scripts/util/trigger-event.js
Normal file
71
scripts/util/trigger-event.js
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
/*global define*/
|
||||||
|
define(
|
||||||
|
function()
|
||||||
|
{
|
||||||
|
// http://stackoverflow.com/a/2381862/229189
|
||||||
|
function triggerEvent( node, event_name )
|
||||||
|
{
|
||||||
|
var doc;
|
||||||
|
|
||||||
|
if ( node.ownerDocument )
|
||||||
|
{
|
||||||
|
doc = node.ownerDocument;
|
||||||
|
}
|
||||||
|
|
||||||
|
else if ( node.nodeType === 9 )
|
||||||
|
{
|
||||||
|
doc = node;
|
||||||
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
{
|
||||||
|
throw new Error('Invalid node passed to fireEvent: ' + node.id);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( node.fireEvent )
|
||||||
|
{
|
||||||
|
// IE-style
|
||||||
|
var event = doc.createEventObject();
|
||||||
|
|
||||||
|
event.synthetic = true;
|
||||||
|
|
||||||
|
node.fireEvent( 'on' + event_name, event );
|
||||||
|
}
|
||||||
|
|
||||||
|
else if ( node.dispatchEvent )
|
||||||
|
{
|
||||||
|
var event_class = '';
|
||||||
|
|
||||||
|
switch ( event_name )
|
||||||
|
{
|
||||||
|
case 'click':
|
||||||
|
case 'mousedown':
|
||||||
|
case 'mouseup':
|
||||||
|
event_class = 'MouseEvents';
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'focus':
|
||||||
|
case 'change':
|
||||||
|
case 'blur':
|
||||||
|
case 'select':
|
||||||
|
event_class = 'HTMLEvents';
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
throw 'triggerEvent: Couldn’t find an event class for event ' + event_name + '.';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
var event = doc.createEvent( event_class );
|
||||||
|
var bubbles = event_name == 'change' ? false : true;
|
||||||
|
|
||||||
|
event.initEvent( event_name, bubbles, true );
|
||||||
|
|
||||||
|
event.synthetic = true;
|
||||||
|
node.dispatchEvent( event );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return triggerEvent;
|
||||||
|
}
|
||||||
|
);
|
||||||
@ -89,6 +89,11 @@ a:hover
|
|||||||
width: 100px;
|
width: 100px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#import-input
|
||||||
|
{
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
#canvas
|
#canvas
|
||||||
{
|
{
|
||||||
clear: both;
|
clear: both;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user