203 lines
		
	
	
	
		
			5.1 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			203 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>
 | |
| 
 | |
| 
 |