(function() { 'use strict' // Save a reference to the global object (window in the browser) var _root = this function dependsOn(pathSpec, url) { if (pathSpec === 'ignore') { return false } var dependencyPath = pathSpec.split('/') var urlPath = url.split('/') for (var i = 0; i < urlPath.length; i++) { var dependencyElement = dependencyPath.shift() var pathElement = urlPath[i] if (dependencyElement !== pathElement && dependencyElement !== '*') { return false } if (dependencyPath.length === 0 || (dependencyPath.length === 1 && dependencyPath[0] === '')) { return true } } return false } function refreshPath(path) { var eltsWithDeps = htmx.findAll('[path-deps]') for (var i = 0; i < eltsWithDeps.length; i++) { var elt = eltsWithDeps[i] if (dependsOn(elt.getAttribute('path-deps'), path)) { htmx.trigger(elt, 'path-deps') } } } htmx.defineExtension('path-deps', { onEvent: function(name, evt) { if (name === 'htmx:beforeOnLoad') { var config = evt.detail.requestConfig // mutating call if (config.verb !== 'get' && evt.target.getAttribute('path-deps') !== 'ignore') { refreshPath(config.path) } } } }) /** * ******************** * Expose functionality * ******************** */ _root.PathDeps = { refresh: function(path) { refreshPath(path) } } }).call(this)