86 lines
		
	
	
		
			No EOL
		
	
	
		
			2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			86 lines
		
	
	
		
			No EOL
		
	
	
		
			2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| (function($) {
 | |
| $(function(){
 | |
| 	var PAPER_WIDTH, PAPER_HEIGTH;
 | |
| 	var paper, ratio;
 | |
| 	var isDrag = false;
 | |
|     var dragger = function (e) {
 | |
| 		this.dx = e.clientX;
 | |
|         this.dy = e.clientY;
 | |
| 		isDrag = this;
 | |
|         this.animate({"fill-opacity": .3, "fill": "#fffccc"}, 500);
 | |
|     };
 | |
| 	
 | |
| 	document.onmousemove = function (e) {
 | |
|         e = e || window.event;
 | |
|         if (isDrag) {
 | |
|             isDrag.translate(e.clientX - isDrag.dx, e.clientY - isDrag.dy);
 | |
| 			paper.safari();
 | |
|             isDrag.dx = e.clientX;
 | |
|             isDrag.dy = e.clientY;
 | |
|         }
 | |
|     };
 | |
|     
 | |
| 	document.onmouseup = function (e) {
 | |
|         if (isDrag) {
 | |
| 			isDrag.animate({"fill-opacity": .2, "fill": "#fff"}, 500);
 | |
| 			if (isDrag.type == "circle") {
 | |
| 				updatePosition(isDrag.attrs.cx, isDrag.attrs.cy);
 | |
| 			} 
 | |
| 		}
 | |
| 		isDrag = false;
 | |
|     };
 | |
| 	
 | |
| 	var focalPoint; 
 | |
| 	
 | |
| 	function add(x, y) {
 | |
| 		if (isNaN(x)) {
 | |
| 			x = PAPER_WIDTH / 2;
 | |
| 			y = PAPER_HEIGTH / 2;
 | |
| 		}
 | |
| 		var el = paper.circle(x, y, 15);
 | |
| 		el.attr("fill", "#fff");
 | |
| 		el.attr("fill-opacity", .2);
 | |
| 		el.attr("stroke", "#c00");
 | |
| 		el.attr('stroke-width', 2);
 | |
| 		
 | |
| 		 
 | |
| 		el.mousedown(dragger);
 | |
| 		el.node.style.cursor = "move";
 | |
| 		focalPoint = el;
 | |
| 	}
 | |
| 	
 | |
| 	function remove(id){
 | |
| 		focalPoint.remove();
 | |
| 		focalPoint = null;
 | |
| 	}
 | |
| 	
 | |
| 	function updatePosition(x, y) {
 | |
| 		$("#id_subject_location").val(x === undefined ? '' : parseInt(parseInt(x)*ratio) + ',' + parseInt(parseInt(y)*ratio) );
 | |
| 	}
 | |
| 	
 | |
| 	
 | |
| 	$('#image_container img').load(function(){
 | |
| 		PAPER_WIDTH = $('#image_container img').width();
 | |
| 		PAPER_HEIGTH = $('#image_container img').height();
 | |
| 		$('#image_container').height(PAPER_HEIGTH + 'px');
 | |
| 		
 | |
| 		//  interface
 | |
| 		ratio = parseFloat($('#image_container img').attr('rel'));
 | |
| 		paper = Raphael(document.getElementById("paper"), PAPER_WIDTH, PAPER_HEIGTH);	
 | |
| 		// read location from form
 | |
| 		var location = $("#id_subject_location").val();
 | |
| 		var x, y;
 | |
| 		if (location){
 | |
| 			x = parseInt(parseInt(location.split(',')[0])/ratio);
 | |
| 			y = parseInt(parseInt(location.split(',')[1])/ratio);		
 | |
| 		}
 | |
| 		add(x, y);
 | |
| 	});
 | |
| });
 | |
| })(django.jQuery);
 | |
| 
 | |
| 
 | |
| 	
 | |
|     
 | |
|         
 | |
|     
 |