app/assets/javascripts/media_magick/toggleSortable.js
mediaMagick = {
toggleSortable: function (parentNode, updateUrl, options) {
if (parentNode === undefined) { return 'error - no node specified'; }
var settings = $.extend({
'linkSelector': 'a.toggleSortable',
'loadData': function () {
return {elements: function () { return parentNode.sortable('toArray'); }}
},
'messagingEngine': 'sticky'
}, options);
if (parentNode.hasClass('sortableActive')) {
parentNode.sortable('disable');
parentNode.removeClass('sortableActive');
if (animation !== undefined) {
clearInterval(animation);
}
var currMessage = $(settings.linkSelector).html();
$(settings.linkSelector).html($(settings.linkSelector).data('message'));
$(settings.linkSelector).data('message', currMessage);
$.ajax({
type: "PUT",
url: updateUrl,
data: settings.loadData(),
beforeSend: function () {
if (settings.messagingEngine === 'sticky') $.sticky('salvando ordenação…');
},
success: function () {
if (settings.messagingEngine === 'sticky') $.sticky('ordenação salva!');
parentNode.sortable('destroy');
},
error: function () {
if (settings.messagingEngine === 'sticky') $.sticky('erro ao salvar ordenação…');
parentNode.sortable('destroy');
}
});
} else {
parentNode.addClass('sortableActive');
parentNode.children().removeClass('clearleft');
parentNode.sortable();
var currMessage = $(settings.linkSelector).html();
$(settings.linkSelector).html($(settings.linkSelector).data('message'));
$(settings.linkSelector).data('message', currMessage);
animation = setInterval(function () {
mediaMagick.shake(parentNode.children());
}, 100);
}
},
shake: function (nodes) {
var arr = new Array();
nodes.each(function (i, el) {
var el = $(el);
var rT = Math.floor(Math.random() * 3);
var rL = Math.floor(Math.random() * 2);
el.css('margin-top', -rT);
el.css('margin-bottom', 24 + rT);
el.css('margin-left', 6 - rL);
el.css('margin-right', 6 + rL);
});
}
}