X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/a6633642232efd164d4708967ab59e498fbff896..refs/pull/4913/head:/resources/js/components/collapsible.js diff --git a/resources/js/components/collapsible.js b/resources/js/components/collapsible.js index 544f91008..6f740ed71 100644 --- a/resources/js/components/collapsible.js +++ b/resources/js/components/collapsible.js @@ -1,35 +1,37 @@ -import {slideDown, slideUp} from "../services/animations"; +import {slideDown, slideUp} from '../services/animations'; +import {Component} from './component'; /** * Collapsible * Provides some simple logic to allow collapsible sections. */ -class Collapsible { +export class Collapsible extends Component { - constructor(elem) { - this.elem = elem; - this.trigger = elem.querySelector('[collapsible-trigger]'); - this.content = elem.querySelector('[collapsible-content]'); + setup() { + this.container = this.$el; + this.trigger = this.$refs.trigger; + this.content = this.$refs.content; - if (!this.trigger) return; - this.trigger.addEventListener('click', this.toggle.bind(this)); - this.openIfContainsError(); + if (this.trigger) { + this.trigger.addEventListener('click', this.toggle.bind(this)); + this.openIfContainsError(); + } } open() { - this.elem.classList.add('open'); + this.container.classList.add('open'); this.trigger.setAttribute('aria-expanded', 'true'); slideDown(this.content, 300); } close() { - this.elem.classList.remove('open'); + this.container.classList.remove('open'); this.trigger.setAttribute('aria-expanded', 'false'); slideUp(this.content, 300); } toggle() { - if (this.elem.classList.contains('open')) { + if (this.container.classList.contains('open')) { this.close(); } else { this.open(); @@ -44,5 +46,3 @@ class Collapsible { } } - -export default Collapsible; \ No newline at end of file