204 lines
5.1 KiB
HTML
204 lines
5.1 KiB
HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
|
<head>
|
|
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
|
|
<meta http-equiv="Content-Language" content="en-us" />
|
|
<title>Dynamic image test</title>
|
|
<script src="../lib/prototype.js" type="text/javascript"></script>
|
|
<script src="../lib/scriptaculous.js?load=builder,dragdrop" type="text/javascript"></script>
|
|
<script src="../cropper.js" type="text/javascript"></script>
|
|
|
|
|
|
<script type="text/javascript" charset="utf-8">
|
|
|
|
/**
|
|
* A little manager that allows us to swap the image dynamically
|
|
*
|
|
*/
|
|
var CropImageManager = {
|
|
/**
|
|
* Holds the current Cropper.Img object
|
|
* @var obj
|
|
*/
|
|
curCrop: null,
|
|
|
|
/**
|
|
* Initialises the cropImageManager
|
|
*
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
init: function() {
|
|
this.attachCropper();
|
|
},
|
|
|
|
/**
|
|
* Handles the changing of the select to change the image, the option value
|
|
* is a pipe seperated list of imgSrc|width|height
|
|
*
|
|
* @access public
|
|
* @param obj event
|
|
* @return void
|
|
*/
|
|
onChange: function( e ) {
|
|
var vals = $F( Event.element( e ) ).split('|');
|
|
this.setImage( vals[0], vals[1], vals[2] );
|
|
},
|
|
|
|
/**
|
|
* Sets the image within the element & attaches/resets the image cropper
|
|
*
|
|
* @access private
|
|
* @param string Source path of new image
|
|
* @param int Width of new image in pixels
|
|
* @param int Height of new image in pixels
|
|
* @return void
|
|
*/
|
|
setImage: function( imgSrc, w, h ) {
|
|
$PR( 'testImage' ).src = imgSrc;
|
|
$PR( 'testImage' ).width = w;
|
|
$PR( 'testImage' ).height = h;
|
|
this.attachCropper();
|
|
},
|
|
|
|
/**
|
|
* Attaches/resets the image cropper
|
|
*
|
|
* @access private
|
|
* @return void
|
|
*/
|
|
attachCropper: function() {
|
|
if( this.curCrop == null ) this.curCrop = new Cropper.Img( 'testImage', { onEndCrop: onEndCrop } );
|
|
else this.curCrop.reset();
|
|
},
|
|
|
|
/**
|
|
* Removes the cropper
|
|
*
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
removeCropper: function() {
|
|
if( this.curCrop != null ) {
|
|
this.curCrop.remove();
|
|
}
|
|
},
|
|
|
|
/**
|
|
* Resets the cropper, either re-setting or re-applying
|
|
*
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
resetCropper: function() {
|
|
this.attachCropper();
|
|
}
|
|
};
|
|
|
|
|
|
// setup the callback function
|
|
function onEndCrop( coords, dimensions ) {
|
|
$PR( 'x1' ).value = coords.x1;
|
|
$PR( 'y1' ).value = coords.y1;
|
|
$PR( 'x2' ).value = coords.x2;
|
|
$PR( 'y2' ).value = coords.y2;
|
|
$PR( 'width' ).value = dimensions.width;
|
|
$PR( 'height' ).value = dimensions.height;
|
|
}
|
|
|
|
// basic example
|
|
Event.observe(
|
|
window,
|
|
'load',
|
|
function() {
|
|
CropImageManager.init();
|
|
Event.observe( $PR('removeCropper'), 'click', CropImageManager.removeCropper.bindAsEventListener( CropImageManager ), false );
|
|
Event.observe( $PR('resetCropper'), 'click', CropImageManager.resetCropper.bindAsEventListener( CropImageManager ), false );
|
|
Event.observe( $PR('imageChoice'), 'change', CropImageManager.onChange.bindAsEventListener( CropImageManager ), false );
|
|
}
|
|
);
|
|
|
|
|
|
/*
|
|
if( typeof(dump) != 'function' ) {
|
|
Debug.init(true, '/');
|
|
|
|
function dump( msg ) {
|
|
Debug.raise( msg );
|
|
};
|
|
} else dump( '---------------------------------------\n' );
|
|
*/
|
|
|
|
</script>
|
|
<link rel="stylesheet" type="text/css" href="debug.css" media="all" />
|
|
<style type="text/css">
|
|
label {
|
|
clear: left;
|
|
margin-left: 50px;
|
|
float: left;
|
|
width: 5em;
|
|
}
|
|
|
|
html, body {
|
|
margin: 0;
|
|
}
|
|
|
|
#testWrap {
|
|
margin: 20px 0 0 50px; /* Just while testing, to make sure we return the correct positions for the image & not the window */
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<h2>Dynamic image test</h2>
|
|
<p>
|
|
Test of dynamically changing images or removing & re-applying the cropper
|
|
</p>
|
|
|
|
<div id="testWrap">
|
|
<img src="castle.jpg" alt="test image" id="testImage" width="500" height="333" />
|
|
</div>
|
|
|
|
<p>
|
|
<label for="imageChoice">image:</label>
|
|
<select name="imageChoice" id="imageChoice">
|
|
<option value="castle.jpg|500|333">Castle</option>
|
|
<option value="poppy.jpg|311|466">Flower</option>
|
|
</select>
|
|
</p>
|
|
|
|
<p>
|
|
<input type="button" id="removeCropper" value="Remove Cropper" />
|
|
<input type="button" id="resetCropper" value="Reset Cropper" />
|
|
</p>
|
|
|
|
|
|
<p>
|
|
<label for="x1">x1:</label>
|
|
<input type="text" name="x1" id="x1" />
|
|
</p>
|
|
<p>
|
|
<label for="y1">y1:</label>
|
|
<input type="text" name="y1" id="y1" />
|
|
</p>
|
|
<p>
|
|
<label for="x2">x2:</label>
|
|
<input type="text" name="x2" id="x2" />
|
|
</p>
|
|
<p>
|
|
<label for="y2">y2:</label>
|
|
<input type="text" name="y2" id="y2" />
|
|
</p>
|
|
<p>
|
|
<label for="width">width:</label>
|
|
<input type="text" name="width" id="width" />
|
|
</p>
|
|
<p>
|
|
<label for="height">height</label>
|
|
<input type="text" name="height" id="height" />
|
|
</p>
|
|
|
|
</body>
|
|
</html>
|
|
|
|
|