@hilemangroup/bp-frontend
Version:
Common shared frontend utilities for boilerplate projects
64 lines (51 loc) • 2.23 kB
JavaScript
;
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');
});
}
;