');
this.form.hide();
image.canvas.children('.image-annotate-view').append(this.form);
this.form.children('span.actions').hide();
// Set the position and size of the note
this.setPosition();
// Add the behavior: hide/display the note when hovering the area
var annotation = this;
// Fix z-index when necessary where multiple notes are visible
this.area.hover(function() {
annotation.show();
// Send this element to the top if it doesn't fully block another area element
if (!isBlocker(annotation.area)) {
toTop(annotation.area);
toTop(annotation.form);
};
}, function() {
annotation.hide();
});
this.form.hover(function() {
annotation.show();
// Send this element to the top if it doesn't fully block another area element
if (!isBlocker(annotation.area)) {
toTop(annotation.area);
toTop(annotation.form);
};
}, function() {
annotation.hide();
});
// Edit a note feature
if (this.editable) {
var form = this;
this.area.click(function() {
form.edit();
});
this.form.click(function() {
form.edit();
});
}
};
// Is the selected area element fully blocking any other area element
function isBlocker(element){
var selected_id = $(element)[0].id;
var selected_top = $(element)[0].offsetTop;
var selected_height = $(element)[0].offsetHeight;
var selected_left = $(element)[0].offsetLeft;
var selected_width = $(element)[0].offsetWidth;
var selected_bottom = selected_top + selected_height;
var selected_right = selected_left + selected_width;
var fullyBlockedFound = false;
$(".image-annotate-area").each(function(i, area) {
if ($(area)[0].id != selected_id) {
if ( selected_top <= $(area)[0].offsetTop
&& selected_bottom >= ($(area)[0].offsetTop + $(area)[0].offsetHeight)
&& selected_left <= $(area)[0].offsetLeft
&& selected_right >= ($(area)[0].offsetLeft + $(area)[0].offsetWidth) ) {
// console.log("SELECTED_ID="+selected_id+" BLOCKS="+$(area)[0].id);
fullyBlockedFound = true;
return false; // No need to check any more areas; break out of .each loop
}
}
});
return fullyBlockedFound;
};
function toTop(element){
var index_highest = 50;
$(".image-annotate-area,.image-annotate-note,.image-actions").each(function() {
var index_current = parseInt($(this).css("z-index"), 10);
//console.log(index_current );
if(index_current > index_highest) {
index_highest = index_current;
}
});
//console.log('highest '+index_highest);
$(element).css({'z-index':index_highest+1});
};
$.fn.annotateView.prototype.setPosition = function() {
///
/// Sets the position of an annotation.
///
this.area.children('div').height((parseInt(this.note.height) - 2) + 'px');
this.area.children('div').width((parseInt(this.note.width) - 2) + 'px');
this.area.css('left', (this.note.left) + 'px');
this.area.css('top', (this.note.top) + 'px');
this.form.css('left', (this.note.left) + 'px');
this.form.css('top', (parseInt(this.note.top) + parseInt(this.note.height) + 7) + 'px');
};
$.fn.annotateView.prototype.show = function() {
///
/// Highlights the annotation
///
this.form.fadeIn(50);
if (!this.editable) {
this.area.addClass('image-annotate-area-hover');
} else {
this.area.addClass('image-annotate-area-editable-hover');
}
};
$.fn.annotateView.prototype.hide = function() {
///
/// Removes the highlight from the annotation.
///
if (this.image.toggle==false){this.form.fadeOut(50);}
this.area.removeClass('image-annotate-area-hover');
this.area.removeClass('image-annotate-area-editable-hover');
};
$.fn.annotateView.prototype.destroy = function() {
///
/// Destroys the annotation.
///
this.area.remove();
this.form.remove();
}
$.fn.annotateView.prototype.edit = function() {
///
/// Edits the annotation.
///
if (this.image.mode == 'view') {
this.image.mode = 'edit';
var annotation = this;
// Create/prepare the editable note elements
var editable = new $.fn.annotateEdit(this.image, this.note);
$.fn.annotateImage.createSaveButton(editable, this.image, annotation);
// Add the delete button
var del = $('' + button_delete + '');
del.click(function() {
var form = $('#image-annotate-edit-form form');
$.fn.annotateImage.appendPosition(form, editable)
if (annotation.image.useAjax) {
$.ajax({
url: annotation.image.deleteUrl,
data: form.serialize(),
error: function(e) { alert(error_deleting) }
});
}
annotation.image.mode = 'view';
editable.destroy();
annotation.destroy();
});
editable.form.append(del);
$.fn.annotateImage.createCancelButton(editable, this.image);
}
};
$.fn.annotateImage.appendPosition = function(form, editable) {
///
/// Appends the annotations coordinates to the given form that is posted to the server.
///
var areaFields = $('' +
'' +
'' +
'' +
'');
form.append(areaFields);
}
$.fn.annotateView.prototype.resetPosition = function(editable, text) {
///
/// Sets the position of an annotation.
///
this.form.html(text.replace(new RegExp('\n', 'g'), ' '));
this.form.hide();
// Resize
this.area.children('div').height(editable.area.height() + 'px');
this.area.children('div').width((editable.area.width() - 2) + 'px');
this.area.css('left', (editable.area.position().left) + 'px');
this.area.css('top', (editable.area.position().top) + 'px');
this.form.css('left', (editable.area.position().left) + 'px');
this.form.css('top', (parseInt(editable.area.position().top) + parseInt(editable.area.height()) + 7) + 'px');
// Save new position to note
this.note.top = editable.area.position().top;
this.note.left = editable.area.position().left;
this.note.height = editable.area.height();
this.note.width = editable.area.width();
this.note.text = text;
this.note.id = editable.note.id;
this.editable = true;
// Send this element to the top if it doesn't fully block another area element
if (!isBlocker(this.area)) {
toTop(this.area);
toTop(this.form);
}
};
})(jQuery);