UNPKG

@hilemangroup/bp-frontend

Version:

Common shared frontend utilities for boilerplate projects

64 lines (51 loc) 2.23 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = collapsible; var _jquery = _interopRequireDefault(require("jquery")); var _uniqueId = _interopRequireDefault(require("./uniqueId")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } var defaults = { prepend: false, copyToggler: true }; var getId = function getId() { return (0, _uniqueId["default"])('collapsible-collapse-'); }; /** * @param {Object} options * @param {string} options.collapse - A selector for the collapse element. * @param {string} options.collapseToggle - A selector for the collapse toggle button element. * @param {string|Function} options.collapseToggleLocation - A selector for the collapse toggle button's parent element, or a function that returns the parent element. * @param {boolean} [options.prepend] - Whether the toggle button is prepended or appended to the parent element. * @param {boolean} [options.copyToggler] - Whether the toggle button is passed by reference or by copy. */ function collapsible(options) { if (!_jquery["default"].fn.collapse) { console.error('collapse.js not loaded'); return; } var settings = _jquery["default"].extend({}, defaults, options); return (0, _jquery["default"])(settings.collapse).each(function () { var id = getId(); var $collapse = (0, _jquery["default"])(this); var $collapseToggleLocation = typeof settings.collapseToggleLocation === 'function' ? settings.collapseToggleLocation($collapse) : (0, _jquery["default"])(settings.collapseToggleLocation); var $collapseToggle = settings.copyToggler ? (0, _jquery["default"])(settings.collapseToggle).clone() : settings.collapseToggle; $collapseToggle.addClass('collapsed').attr({ 'aria-expanded': 'false', 'aria-controls': id, 'data-toggle': 'collapse', 'data-target': '#' + id }); if (settings.prepend && $collapseToggleLocation.length) { $collapseToggleLocation.prepend($collapseToggle); } else { $collapseToggleLocation.append($collapseToggle); } $collapse.addClass('collapse').attr({ id: id }).collapse('hide'); }); } ;