86 lines
2 KiB
JavaScript
86 lines
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);
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|