Proyectos de Subversion Moodle

Rev

Autoría | Ultima modificación | Ver Log |

{"version":3,"file":"srlogger.min.js","sources":["../../../src/local/reactive/srlogger.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.\n\n/**\n * Screen reader-only (sr-only) reactive mutations logger class.\n *\n * This logger can be used by the StateManager to log mutation feedbacks and actions.\n * The feedback messages logged by this logger will be rendered in a sr-only, ARIA live region.\n *\n * @module     core/local/reactive/srlogger\n * @class      SRLogger\n * @copyright  2023 Jun Pataleta <jun@moodle.com>\n * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport Logger from 'core/local/reactive/logger';\n\n/**\n * Logger entry structure.\n *\n * @typedef {object} LoggerEntry\n * @property {string} feedbackMessage Feedback message.\n */\n\n/**\n * Screen reader-only (sr-only) reactive mutations logger class.\n *\n * @class SRLogger\n */\nexport default class SRLogger extends Logger {\n    /**\n     * The element ID of the ARIA live region where the logger feedback will be rendered.\n     *\n     * @type {string}\n     */\n    static liveRegionId = 'sr-logger-feedback-container';\n\n    /**\n     * Add a log entry.\n     * @param {LoggerEntry} entry Log entry.\n     */\n    add(entry) {\n        if (entry.feedbackMessage) {\n            // Fetch or create an ARIA live region that will serve as the container for the logger feedback.\n            let loggerFeedback = document.getElementById(SRLogger.liveRegionId);\n            if (!loggerFeedback) {\n                loggerFeedback = document.createElement('div');\n                loggerFeedback.id = SRLogger.liveRegionId;\n                loggerFeedback.classList.add('sr-only');\n                loggerFeedback.setAttribute('aria-live', 'polite');\n                document.body.append(loggerFeedback);\n            }\n            // Set the ARIA live region's contents with the feedback.\n            loggerFeedback.innerHTML = entry.feedbackMessage;\n\n            // Clear the feedback message after 4 seconds to avoid the contents from being read out in case the user navigates\n            // to this region. This is similar to the default timeout of toast messages before disappearing from view.\n            setTimeout(() => {\n                loggerFeedback.innerHTML = '';\n            }, 4000);\n        }\n    }\n}\n"],"names":["SRLogger","Logger","add","entry","feedbackMessage","loggerFeedback","document","getElementById","liveRegionId","createElement","id","classList","setAttribute","body","append","innerHTML","setTimeout"],"mappings":"iQAyCqBA,iBAAiBC,gBAYlCC,IAAIC,UACIA,MAAMC,gBAAiB,KAEnBC,eAAiBC,SAASC,eAAeP,SAASQ,cACjDH,iBACDA,eAAiBC,SAASG,cAAc,OACxCJ,eAAeK,GAAKV,SAASQ,aAC7BH,eAAeM,UAAUT,IAAI,WAC7BG,eAAeO,aAAa,YAAa,UACzCN,SAASO,KAAKC,OAAOT,iBAGzBA,eAAeU,UAAYZ,MAAMC,gBAIjCY,YAAW,KACPX,eAAeU,UAAY,KAC5B,kLA9BMf,wBAMK"}