Tag = { "favorite": function(button) { var message = getMessageInfo(button); var favorited = $(button).parents(".dump").hasClass("favorite"); if (favorited) { Tag.rm(message.id, "favorite"); $(button).parents(".dump").removeClass("favorite"); if (RawFavs[message.id]) { delete RawFavs[message.id]; paletteImageCache = false; } } else { Tag.add(message.id, "favorite"); $(button).parents(".dump").addClass("favorite"); if (RawFavs && MessageContentCache[message.id]) { // chat ui stuff if ($("#palette-button").css("display") == "none") paletteButtonShowAnim(); RawFavs[message.id] = MessageContentCache[message.id]; paletteImageCache = false; } } }, "add": function(message_id, tag) { Tag.ajax("/cmd/tag/add", {"message_id": message_id, "tag": tag}); }, "rm": function(message_id, tag) { Tag.ajax("/cmd/tag/rm", {"message_id": message_id, "tag": tag}); }, "ajax": function(url, data) { $.ajax({ "type": 'POST', "timeout": 5000, "url": url, "data": data, "cache": false }); }, "animated_fav": function(button, scoreClass, bigTextSize, smallTextSize) { if (!Nick) { return; } Tag.favorite(button); var $dump = $(button).parents(".dump"); var isAdding = $dump.hasClass('favorite'); // Frontpage-favs can be triggered by clicking score number, // so manually sync heart-thumb visual state. if ($(button).hasClass('hallscore')) { $dump.find('.thumb').attr('src', isAdding ? Imgs.logThumb : Imgs.logThumbOff); } if ($dump.attr('nick') == Nick) return; var $score = $dump.find(scoreClass); var inc = isAdding ? 1 : -1; var oldScore = parseInt($score.text(), 10); $score.text(oldScore + inc); $score.stop().animate({ 'font-size': bigTextSize }, 250, function() { $score.animate({ 'font-size': smallTextSize }, 250); }); if (isAdding) { var link = $('') .attr('href', Domain + '/' + Nick + '/popular') .append($('').text(Nick)) .append(" "); $dump.find('.faver-list').append(link); } else { $dump.find('.faver-list b').filter(function() { return $(this).text() == Nick }).parent().remove(); } } }