greatghoul / HabitRPG Shortcut for New Todo

// ==UserScript==
// @name         HabitRPG Shortcut for New Todo
// @namespace    http://ghoulmind.com/
// @version      0.2
// @description  Press N to open the Mew Todo Modal.
// @author       greatghoul
// @match        https://habitica.com/*
// @grant        none
// @license      MIT
// ==/UserScript==

(function () {
    'use strict';
    var timer = null;

    function noModalOpened () {
        return document.querySelectorAll('.modal.show').length === 0;
    }

    function noInputFocused () {
        var activeElement = document.activeElement;
        return !(activeElement && /(INPUT|TEXTAREA)/.test(activeElement.tagName));
    }

    function focusTodoTitle () {
        timer = null;
        var title = document.querySelector('#task-modal .title-input');
        title.focus();
    }

    function triggerClick(selector) {
        var elem = document.querySelector(selector);
        var clickEvent = new MouseEvent('click', { 'view': window, 'bubbles': true, 'cancelable': true });
        elem.dispatchEvent(clickEvent);
    }

    function keyOperator (event) {
        if (event.code === 'KeyN' && noModalOpened() && noInputFocused()) {
            triggerClick('#create-task-btn');
            setTimeout(function() {
                triggerClick('.create-task-btn .icon-todo');
                setTimeout(focusTodoTitle, 300);
            }, 300);
        }
    }

    window.addEventListener('keydown', keyOperator, false);
})();