(function(){ var Monitor = function () { var base = this base.$el = $("#minotaur") base.timeout = null base.delay = 2500 base.objects = {} base.init = function () { base.$el.removeClass() base.$el.click(base.save) } base.watch = function (object) { base.objects[object.type] = base.objects[object.type] || {} base.objects[object.type][object._id] = object base.clear() base.timeout = setTimeout(base.save, base.delay) } base.unwatch = function (object) { if (base.objects[object.type] && base.objects[object.type][object._id]) { delete base.objects[object.type][object._id] } } base.clear = function () { if (base.timeout) clearTimeout(base.timeout) base.timeout = false } base.save = function () { var saving = false base.clear() for (var type in base.objects) { for (var id in base.objects[type]) { var obj = base.objects[type][id] if (obj) { obj.save(null, function(){ base.hide() }, function(){ base.hide() }) } delete base.objects[type][id] saving = true } } saving ? base.show() : base.hide() } base.show = function () { base.$el.removeClass().addClass('saving') } base.hide = function () { base.$el.removeClass('saving') } base.init(); } window.Minotaur = new Monitor (); })()