$(function () { var default_error_message = 'Server error, please try again later.'; $.ajaxSetup({ beforeSend: function (xhr, settings) { if (!/^(GET|HEAD|OPTIONS|TRACE)$/i.test(settings.type) && !this.crossDomain) { xhr.setRequestHeader('X-CSRFToken', csrf_token); } } }); $(document).ajaxError(function (event, request, settings) { var message = null; if (request.responseJSON && request.responseJSON.hasOwnProperty('message')) { message = request.responseJSON.message; } else if (request.responseText) { var IS_JSON = true; try { var data = JSON.parse(request.responseText); } catch (err) { IS_JSON = false; } if (IS_JSON && data !== undefined && data.hasOwnProperty('message')) { message = JSON.parse(request.responseText).message; } else { message = default_error_message; } } else { message = default_error_message; } toast(message, 'error'); }); var flash = null; function toast(body, category) { clearTimeout(flash); var $toast = $('#toast'); if (category === 'error') { $toast.css('background-color', 'red') } else { $toast.css('background-color', '#333') } $toast.text(body).fadeIn(); flash = setTimeout(function () { $toast.fadeOut(); }, 3000); } var hover_timer = null; function show_profile_popover(e) { var $el = $(e.target); hover_timer = setTimeout(function () { hover_timer = null; $.ajax({ type: 'GET', url: $el.data('href'), success: function (data) { $el.popover({ html: true, content: data, trigger: 'manual', animation: false }); $el.popover('show'); $('.popover').on('mouseleave', function () { setTimeout(function () { $el.popover('hide'); }, 200); }); } }); }, 500); } function hide_profile_popover(e) { var $el = $(e.target); if (hover_timer) { clearTimeout(hover_timer); hover_timer = null; } else { setTimeout(function () { if (!$('.popover:hover').length) { $el.popover('hide'); } }, 200); } } function update_followers_count(id) { var $el = $('#followers-count-' + id); $.ajax({ type: 'GET', url: $el.data('href'), success: function (data) { $el.text(data.count); } }); } function update_collectors_count(id) { $.ajax({ type: 'GET', url: $('#collectors-count-' + id).data('href'), success: function (data) { console.log(data); $('#collectors-count-' + id).text(data.count); } }); } function update_notifications_count() { var $el = $('#notification-badge'); $.ajax({ type: 'GET', url: $el.data('href'), success: function (data) { if (data.count === 0) { $('#notification-badge').hide(); } else { $el.show(); $el.text(data.count) } } }); } function follow(e) { var $el = $(e.target); var id = $el.data('id'); $.ajax({ type: 'POST', url: $el.data('href'), success: function (data) { $el.prev().show(); $el.hide(); update_followers_count(id); toast(data.message); } }); } function unfollow(e) { var $el = $(e.target); var id = $el.data('id'); $.ajax({ type: 'POST', url: $el.data('href'), success: function (data) { $el.next().show(); $el.hide(); update_followers_count(id); toast(data.message); } }); } function collect(e) { var $el = $(e.target).data('href') ? $(e.target) : $(e.target).parent('.collect-btn'); var id = $el.data('id'); $.ajax({ type: 'POST', url: $el.data('href'), success: function (data) { $el.prev().show(); $el.hide(); update_collectors_count(id); toast(data.message); } }); } function uncollect(e) { var $el = $(e.target).data('href') ? $(e.target) : $(e.target).parent('.uncollect-btn'); var id = $el.data('id'); $.ajax({ type: 'POST', url: $el.data('href'), success: function (data) { $el.next().show(); $el.hide(); update_collectors_count(id); toast(data.message); } }); } $('.profile-popover').hover(show_profile_popover.bind(this), hide_profile_popover.bind(this)); $(document).on('click', '.follow-btn', follow.bind(this)); $(document).on('click', '.unfollow-btn', unfollow.bind(this)); $(document).on('click', '.collect-btn', collect.bind(this)); $(document).on('click', '.uncollect-btn', uncollect.bind(this)); // hide or show tag edit form $('#tag-btn').click(function () { $('#tags').hide(); $('#tag-form').show(); }); $('#cancel-tag').click(function () { $('#tag-form').hide(); $('#tags').show(); }); // hide or show description edit form $('#description-btn').click(function () { $('#description').hide(); $('#description-form').show(); }); $('#cancel-description').click(function () { $('#description-form').hide(); $('#description').show(); }); // delete confirm modal $('#confirm-delete').on('show.bs.modal', function (e) { $('.delete-form').attr('action', $(e.relatedTarget).data('href')); }); if (is_authenticated) { setInterval(update_notifications_count, 30000); } $("[data-toggle='tooltip']").tooltip({title: moment($(this).data('timestamp')).format('lll')}) });