1$(document).ready(function () { 2 var project_id_to_vote = location.search.split('voting=')[1]; 3 var vote_cooldown = false; 4 5 if (project_id_to_vote && window.user) { 6 var $btn = $('.openVoteModal[data-project-id="' + project_id_to_vote + '"]'); 7 var project_name = $btn.data('project-name'); 8 9 openVoteModal(project_id_to_vote, project_name); 10 } 11 12 $('.openVoteModal').click(function () { 13 var $btn = $(this); 14 var project_id = $btn.data('project-id'); 15 var project_name = $btn.data('project-name'); 16 17 openVoteModal(project_id, project_name); 18 }); 19 20 const fpPromise = new Promise((resolve, reject) => { 21 const script = document.createElement('script'); 22 script.onload = resolve; 23 script.onerror = reject; 24 script.async = true; 25 script.src = '/static/ui/js/fp.min.js?v=1' 26 document.head.appendChild(script); 27 }) 28 .then(() => FingerprintJS.load()); 29 30 function openVoteModal(project_id, project_name) { 31 var $vote_modal = $('#voteModal'); 32 33 $vote_modal.modal('show').one('hidden.bs.modal', function () { 34 var $nick = $vote_modal.find('[name="nick"]'); 35 var $vote_btn = $vote_modal.find('.voteBtn'); 36 37 $nick 38 .tooltip('destroy') 39 .val(''); 40 $vote_btn.tooltip('destroy'); 41 }); 42 $vote_modal.find('.projectName').text(project_name); 43 $vote_modal.find('[name="project_id"]').val(project_id); 44 } 45 46 var params = {}; 47 48 $('.voteForm').submit(function (e) { 49 e.preventDefault(); 50 51 if (!vote_cooldown) { 52 53 fpPromise.then(fp => fp.get()).then(result => { 54 $('.voteForm').append('<input type="hidden" name="vv" value="'+result.visitorId+'" />'); 55 }).finally(() => { 56 vote_cooldown = true; 57 setTimeout(function () { 58 vote_cooldown = false; 59 }, 5000); 60 61 var $vote_form = $(this); 62 var $vote_modal = $('#voteModal'); 63 var $nick = $vote_form.find('[name="nick"]'); 64 var $vote_btn = $vote_form.find('.voteBtn'); 65 66 if (!$nick.val()) { 67 $nick.tooltip({ 68 title: 'ÐбÑзаÑелÑное поле.', 69 position: 'top', 70 trigger: 'manual' 71 }).tooltip('show').one('click focus change', function () { 72 $(this).tooltip('destroy'); 73 }); 74 return false; 75 } 76 77 $nick.one('click focus change', function () { 78 $vote_btn.tooltip('destroy'); 79 }); 80 81 $.ajax({ 82 url: '/projects/vote/', 83 type: "POST", 84 data: $vote_form.serialize(), 85 success: function (data) { 86 var $project_vote_btn = $('.openVoteModal[data-project-id="' + data.project_id + '"]'); 87 88 $vote_modal.modal('hide'); 89 $project_vote_btn.tooltip({ 90 title: 'ÐлагодаÑим за ÐÐ°Ñ Ð³Ð¾Ð»Ð¾Ñ, ÐÑ ÑможеÑе повÑоÑно пÑоголоÑоваÑÑ ÑеÑез 24 ÑаÑа.', 91 position: 'top', 92 trigger: 'manual' 93 }).tooltip('show'); 94 95 const successMessage = $('<div class="alert alert-success" style="font-size:20px;">ÐÑ ÑÑпеÑно пÑоголоÑовали! СледÑÑÑий Ð³Ð¾Ð»Ð¾Ñ Ð±ÑÐ´ÐµÑ Ð´Ð¾ÑÑÑпен ÑеÑез 24 ÑаÑа.</div>'); 96 $('.voteForm__message').before(successMessage); 97 98 setTimeout(function () { 99 $project_vote_btn.tooltip('destroy'); 100 }, 100000); 101 }, 102 error: function (response) { 103 let error_text; 104 105 if (response.status === 500) { 106 error_text = 'ÐÑибка 500'; 107 } else if (response.responseText === 'incorrect_nick') { 108 error_text = 'ÐекоÑÑекÑнÑй ник'; 109 } else if (response.responseText === 'incorrect_google_recaptcha') { //MrYarik666 Add if 110 error_text = 'ÐожалÑйÑÑа, поÑÑавÑÑе галоÑÐºÑ Ð² капÑе'; 111 } else if (response.responseText === 'incorrect_google_recaptcha_service') { //MrYarik666 Add if 112 error_text = 'ÐапÑа вÑеменно не ÑабоÑаеÑ. ÐовÑоÑиÑе попÑÑÐºÑ Ð¿Ð¾Ð·Ð´Ð½ÐµÐµ.'; 113 } else if (response.responseText === 'error') { 114 error_text = 'ÐÐ°Ñ Ð³Ð¾Ð»Ð¾Ñ Ñже бÑл ÑÑÑен в поÑледние 24 ÑаÑа. ÐожалÑйÑÑа, попÑобÑйÑе Ñнова ÑеÑез ÑаÑ.'; 115 } else if (response.responseText === 'vk_deactivated') { 116 error_text = 'ÐÐ°Ñ Ð°ÐºÐºÐ°ÑÐ½Ñ Ð·Ð°Ð±Ð»Ð¾ÐºÐ¸Ñован во ÐконÑакÑе.'; 117 } else if (response.responseText === 'g') { 118 error_text = 'ÐÐ°Ñ Ð°Ð¹Ð¿Ð¸ Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑ Ð² базе даннÑÑ ÑпамеÑов, либо Ð²Ñ Ð¸ÑполÑзÑеÑе пÑблиÑнÑй VPN/пÑокÑи. ÐÑклÑÑиÑе VPN/пÑокÑи и попÑобÑйÑе Ñнова.'; 119 } 120 else { 121 error_text = 'ÐÑибка! Ðод оÑибки: ' + response.status + ', обновиÑе ÑÑÑаниÑÑ'; 122 } 123 $vote_btn.tooltip({ 124 title: error_text, 125 position: 'top', 126 trigger: 'manual', 127 }).tooltip('show'); 128 } 129 }); 130 131 //}); 132 133 // add spinner img after voting 134 const voteForm = document.querySelector('#voteForm'), 135 statusMessage = document.createElement('img'), 136 voteBtn = document.querySelector('[data-vote]'); 137 138 statusMessage.src = '/static/ui/img/spinner.svg'; 139 statusMessage.classList.add('spinner'); 140 voteForm.insertAdjacentElement('afterend', statusMessage); 141 voteBtn.setAttribute("disabled", "disabled"); 142 setTimeout(() => { 143 statusMessage.remove(); 144 voteBtn.removeAttribute("disabled"); 145 }, 4000); 146 147 $vote_btn.tooltip('destroy'); 148 }); 149 } 150 }); 151 152}); 153
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.