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);
 | 
						|
 | 
						|
 | 
						|
	
 | 
						|
    
 | 
						|
        
 | 
						|
    
 |