plugins/orders/public/javascripts/toggle_edit.js
if (typeof toggle_edit === 'undefined') {
toggle_edit = {
_editing: jQuery(),
_isInner: false,
setEditing: function (value) {
toggle_edit._editing = jQuery(value);
},
editing: function () {
return toggle_edit._editing.first();
},
isEditing: function () {
return toggle_edit.editing().first().hasClass('edit');
},
edit: function (value_row) {
toggle_edit.setEditing(value_row);
toggle_edit.value_row.toggle_edit();
},
toggle: function() {
toggle_edit.editing().toggle();
},
hide: function() {
toggle_edit.editing().hide();
},
target: {
isToggle: function (target) {
return (jQuery(target).hasClass('box-edit-link') && !toggle_edit.isEditing()) ||
target.hasAttribute('toggle-edit') || jQuery(target).parents().attr('toggle-edit') != undefined;
},
isToggleIgnore: function (target) {
return target.hasAttribute('toggle-ignore') || jQuery(target).parents().attr('toggle-ignore') != undefined;
},
},
document_click: function(event) {
if (toggle_edit.target.isToggleIgnore(event.target))
return;
var isToggle = toggle_edit.target.isToggle(event.target);
var out = toggle_edit.value_row.locate(event.target).length == 0;
if (!isToggle && out && toggle_edit.isEditing()) {
toggle_edit.value_row.toggle_edit();
}
return true;
},
open_anchor: function () {
try {
el = jQuery(window.location.hash);
toggle_edit.value_row.reload();
if (el.hasClass('value-row')) {
toggle_edit.setEditing(el);
toggle_edit.value_row.toggle_edit();
}
} catch(e) {
// catch invalid anchor errors to avoid break in document.ready event chain
}
},
value_row: {
locate: function (context) {
return jQuery(context).hasClass('value-row') ? jQuery(context) : jQuery(context).parents('.value-row');
},
mouseenter: function () {
if (jQuery(this).attr('without-hover') != undefined)
return;
jQuery(this).addClass('hover');
},
mouseleave: function () {
if (jQuery(this).attr('without-hover') != undefined)
return;
jQuery(this).removeClass('hover');
},
click: function (event) {
if (toggle_edit.target.isToggleIgnore(event.target))
return true;
var value_row = toggle_edit.value_row.locate(event.target);
var now_isInner = value_row.length > 1;
var isToggle = toggle_edit.target.isToggle(event.target);
var isAnother = value_row.get(0) != toggle_edit.editing().get(0) || (now_isInner && !toggle_edit._isInner);
if (now_isInner && !toggle_edit._isInner)
toggle_edit.setEditing(value_row);
toggle_edit._isInner = now_isInner;
if (!isToggle && value_row.attr('without-click-edit') != undefined)
return;
if (isToggle) {
if (isAnother)
toggle_edit.value_row.toggle_edit();
toggle_edit.edit(value_row);
return false;
} else if (isAnother || !toggle_edit.isEditing()) {
if (toggle_edit.isEditing())
toggle_edit.value_row.toggle_edit();
toggle_edit.setEditing(value_row);
if (!toggle_edit.isEditing())
toggle_edit.value_row.toggle_edit();
return false;
}
return true;
},
toggle_edit: function (toggle) {
toggle_edit.editing().toggleClass('edit', toggle);
eval(toggle_edit.editing().attr('toggle-edit'));
if (!toggle_edit.isEditing()) {
if (toggle_edit._editing.length > 1)
toggle_edit.setEditing(jQuery(toggle_edit._editing[1]));
else
toggle_edit.setEditing(jQuery());
}
},
reload: function () {
toggle_edit.value_row.toggle_edit(true);
},
},
};
jQuery('.value-row').live('mouseenter', toggle_edit.value_row.mouseenter);
jQuery('.value-row').live('mouseleave', toggle_edit.value_row.mouseleave);
jQuery('.value-row').live('click', toggle_edit.value_row.click);
jQuery(document).click(toggle_edit.document_click);
jQuery(document).ready(toggle_edit.open_anchor);
jQuery(window).bind('hashchange', toggle_edit.open_anchor);
}