$(function(){ var loggedIn = $('.user-handle').length > 0; var tags = Object.create(null); function toggleClick(){ if (!loggedIn) { login(); return false; } var $this = $(this); var normalized = $this.data('slug'); var upvote = !$this.hasClass('tagged'); $this.text($this.text() * 1 + (upvote? 1 : -1)); $this.toggleClass('tagged'); if (upvote) $.ajax({ method: 'POST', url: '@{PackageTagR pn}', data: {slug:normalized} }); else $.ajax({ method: 'POST', url: '@{PackageUntagR pn}', data: {slug:normalized} }); } $('.tags').find('.tag').each(function(){ tags[$(this).find('.tag-name').text()] = true; }); $('.expanding').each(function(){ var $this = $(this); if ($this.height() > 300) { $this.addClass('collapsed'); $this.find('.bottom-gradient').click(function(){ $this.removeClass('collapsed'); }); } }); $('#like').click(function(){ var $this = $(this); if (loggedIn) { var action = 'like'; if ($this.hasClass('fa-thumbs-up')) { action = 'unlike'; } $this.toggleClass('fa-thumbs-up'); $this.toggleClass('fa-thumbs-o-up'); $likes = $('#likes'); nLikes = parseInt($likes.text(), 10); if (action == 'like') { $this.attr('title','You liked this!'); nLikes += 1; $.post("@{PackageLikeR pn}"); } else { $this.attr('title','You disliked this.'); nLikes -= 1; $.post("@{PackageUnlikeR pn}"); } $likes.text(nLikes); $('#like-or-likes').text(nLikes == 1 ? ' like ' : ' likes '); } else { login(); } }); $('.tag-toggle').click(toggleClick); $('#add-tag').click(function(){ if (!loggedIn) login(); $('#add-tag-form').toggleClass('hidden'); $('#new-tag').focus(); }); $('#new-tag').change(function(){ $('#add-form-btn').val('Confirm'); $('#tag-msg').hide(); }); $('#new-tag').keypress(function(){ $('#add-form-btn').val('Confirm'); }); $('#add-tag-form').submit(function(){ try { var candidate = $('#new-tag').val(); var normalized = candidate .replace(/[^a-zA-Z0-9-.]/g,'-') .replace(/-+/g,'-') .replace(/^-/,'') .replace(/-$/,'') .toLowerCase(); if (candidate !== normalized) { $('#new-tag').val(normalized); $('#add-form-btn').val('Done'); } else { $.ajax({ method: 'POST', url: '@{PackageTagR pn}', data: {slug:normalized}, success: function(){ $('.no-tags').remove(); $('#new-tag').val(''); $('#add-form-btn').val('Confirm'); if (!tags[normalized]) { var tag = $(''); tag.find('a').text(normalized + ' ').attr('href','/tag/' + normalized); $('.tags').prepend(', '); var count = $('1') .addClass('tag-count') .addClass('tag-toggle') .addClass('tagged') .data('slug',normalized) .attr('title','Add/remove vote for: ' + normalized) .click(toggleClick); $('.tags').prepend(count); $('.tags').prepend(tag); } tags[normalized] = true; }, error: function(err){ $('#tag-msg').text("Couldn't add that tag").show(); } }); } } finally { return false; } }); }); // Workaround for missing functionality in IE 8 and earlier. if( Object.create === undefined ) { Object.create = function( o ) { function F(){} F.prototype = o; return new F(); }; } function login(){ window.location.href = '@{AuthR LoginR}'; }