/* @licstart The following is the entire license notice for the JavaScript code in this page. This is the code powering . Copyright © 2014-2016 zPlus Copyright © 2016 Adonay "adfeno" Felipe Nogueira This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . As additional permission under GNU GPL version 3 section 7, you may distribute non-source (e.g., minimized or compacted) forms of that code without the copy of the GNU GPL normally required by section 4, provided you include this license notice and a URL through which recipients can access the Corresponding Source. @licend The above is the entire license notice for the JavaScript code in this page. */ /** * Store which keys have been pressed. * When a key has been pressed, pressed_key[e.keyCode] will be set * to TRUE. When a key is released, pressed_key[e.keyCode] will be * set to FALSE. */ var pressed_key = []; /** * Change arrows class when voting. */ function vote (action, vote_dom) { var arrow_up = vote_dom.querySelector ('button[title="upvote"]'); var vote_counter = vote_dom.querySelector ('.count') var arrow_down = vote_dom.querySelector ('button[title="downvote"]'); // Voted/Upvoted var current_status = 0; if (vote_dom.classList.contains('upvoted')) current_status = 1; if (vote_dom.classList.contains('downvoted')) current_status = -1; // Current vote var current_vote = Number (vote_counter.textContent); // Remove any existing upvoted/downvoted class vote_dom.classList.remove ('upvoted'); vote_dom.classList.remove ('downvoted'); // Toggle upvote class for arrow if ("up" == action) switch (current_status) { case -1: vote_counter.textContent = current_vote + 2; vote_dom.classList.add ('upvoted'); break; case 0: vote_counter.textContent = current_vote + 1; vote_dom.classList.add ('upvoted'); break; case 1: vote_counter.textContent = current_vote - 1; break; } // Toggle downvote class for arrow if ("down" == action) switch (current_status) { case -1: vote_counter.textContent = current_vote + 1; break; case 0: vote_counter.textContent = current_vote - 1; vote_dom.classList.add ('downvoted'); break; case 1: vote_counter.textContent = current_vote - 2; vote_dom.classList.add ('downvoted'); break; } } // Wait DOM to be ready... document.addEventListener ('DOMContentLoaded', function() { /** * A "vote section" is a containing * - up arrow * - votes sum * - down arrow * * However, if the user is not logged in, there's only a text * with the sum of votes, eg. "2 votes" (no children). */ var vote_sections = document.querySelectorAll ('.vote '); // Bind vote() event to up/down vote arrows for (var i = 0; i < vote_sections.length; i++) // See comment above on the "vote_sections" declaration. if (vote_sections[i].children.length > 0) { vote_sections[i] .querySelector ('button[title="upvote"]') .addEventListener ('click', function () { vote ('up', this.closest ('.vote')) }); vote_sections[i] .querySelector ('button[title="downvote"]') .addEventListener ('click', function () { vote ('down', this.closest ('.vote')) }); } // Bind onkeydown()/onkeyup() event to keys document.onkeydown = document.onkeyup = function(e) { // Set the current key code as TRUE/FALSE pressed_key[e.keyCode] = e.type == 'keydown'; // If Ctrl+Enter have been pressed // Key codes: Ctrl=17, Enter=13 if (pressed_key[17] && pressed_key[13]) { // Select all forms in the current page with class "shortcut-submit" var forms = document.querySelectorAll ("form.shortcut-submit"); for (var i = 0; i < forms.length; i++) forms[i].submit (); } } // Function to hide/show menu when burger-icon has been clicked var burger_menus = document.getElementsByClassName ('burger-icon') for (var i = 0; i < burger_menus.length; i++) burger_menus[i].addEventListener ('click', function (event) { // Toggle menu visibility document.getElementById ('menu').classList.toggle ('visible'); this.classList.toggle ('open'); }); });