UNPKG

next-csrf

Version:

CSRF mitigation library for Next.js

111 lines (87 loc) 3.75 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); // move <area> elements to the location of the <img> elements that reference them exports.default = function (elements, context) { // images - unless they are focusable themselves, likely not // part of the elements list, so we'll have to find them and // sort them into the elements list manually var usemaps = context.querySelectorAll('img[usemap]'); var maps = new Maps(context); // remove all <area> elements from the elements list, // but put them the map for later retrieval var _elements = maps.extractAreasFromList(elements); if (!usemaps.length) { // the context does not contain any <area>s so no need // to replace anything, just remove any maps return _elements; } return (0, _mergeDomOrder2.default)({ list: _elements, elements: usemaps, resolveElement: function resolveElement(image) { var name = image.getAttribute('usemap').slice(1); return maps.getAreasFor(name); } }); }; var _tabbable = require('./tabbable'); var _tabbable2 = _interopRequireDefault(_tabbable); var _mergeDomOrder = require('../util/merge-dom-order'); var _mergeDomOrder2 = _interopRequireDefault(_mergeDomOrder); var _getDocument = require('../util/get-document'); var _getDocument2 = _interopRequireDefault(_getDocument); var _imageMap = require('../util/image-map'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var Maps = function () { function Maps(context) { _classCallCheck(this, Maps); this._document = (0, _getDocument2.default)(context); this.maps = {}; } _createClass(Maps, [{ key: 'getAreasFor', value: function getAreasFor(name) { if (!this.maps[name]) { // the map is not defined within the context, so we // have to go find it elsewhere in the document this.addMapByName(name); } return this.maps[name]; } }, { key: 'addMapByName', value: function addMapByName(name) { var map = (0, _imageMap.getMapByName)(name, this._document); if (!map) { // if there is no map, the img[usemap] wasn't doing anything anyway return; } this.maps[map.name] = (0, _tabbable2.default)({ context: map }); } }, { key: 'extractAreasFromList', value: function extractAreasFromList(elements) { // remove all <area> elements from the elements list, // but put them the map for later retrieval return elements.filter(function (element) { var nodeName = element.nodeName.toLowerCase(); if (nodeName !== 'area') { return true; } var map = element.parentNode; if (!this.maps[map.name]) { this.maps[map.name] = []; } this.maps[map.name].push(element); return false; }, this); } }]); return Maps; }(); module.exports = exports['default']; //# sourceMappingURL=tabsequence.sort-area.js.map