diff --git a/js/components/sidenav_toggler.js b/js/components/sidenav_toggler.js new file mode 100644 index 00000000..faba4c3b --- /dev/null +++ b/js/components/sidenav_toggler.js @@ -0,0 +1,30 @@ +import ToggleMixin from '../mixins/toggle' + +const cookieName = 'expandSidenav' + +export default { + name: 'sidenav-toggler', + + mixins: [ToggleMixin], + + props: { + defaultVisible: { + type: Boolean, + default: function() { + if (document.cookie.match(cookieName)) { + return !!document.cookie.match(cookieName + ' *= *true') + } else { + return true + } + }, + }, + }, + + methods: { + toggle: function(e) { + e.preventDefault() + this.isVisible = !this.isVisible + document.cookie = cookieName + '=' + this.isVisible + '; path=/' + }, + }, +} diff --git a/js/components/toggler.js b/js/components/toggler.js index 0cd18dc8..a3e1ece5 100644 --- a/js/components/toggler.js +++ b/js/components/toggler.js @@ -1,32 +1,14 @@ +import ToggleMixin from '../mixins/toggle' + export default { name: 'toggler', + mixins: [ToggleMixin], + props: { defaultVisible: { type: Boolean, default: () => false, }, }, - - data: function() { - return { - isVisible: this.defaultVisible, - } - }, - - render: function(createElement) { - return createElement(this.$vnode.data.tag, [ - this.$scopedSlots.default({ - isVisible: this.isVisible, - toggle: this.toggle, - }), - ]) - }, - - methods: { - toggle: function(e) { - e.preventDefault() - this.isVisible = !this.isVisible - }, - }, } diff --git a/js/index.js b/js/index.js index f2f82bc9..7495c51c 100644 --- a/js/index.js +++ b/js/index.js @@ -33,6 +33,7 @@ import RequestsList from './components/requests_list' import ConfirmationPopover from './components/confirmation_popover' import { isNotInVerticalViewport } from './lib/viewport' import DateSelector from './components/date_selector' +import SidenavToggler from './components/sidenav_toggler' Vue.config.productionTip = false @@ -68,6 +69,7 @@ const app = new Vue({ uploadinput, DateSelector, EditOfficerForm, + SidenavToggler, }, mounted: function() { diff --git a/js/mixins/toggle.js b/js/mixins/toggle.js new file mode 100644 index 00000000..d891eb02 --- /dev/null +++ b/js/mixins/toggle.js @@ -0,0 +1,23 @@ +export default { + data: function() { + return { + isVisible: this.defaultVisible, + } + }, + + render: function(createElement) { + return createElement(this.$vnode.data.tag, [ + this.$scopedSlots.default({ + isVisible: this.isVisible, + toggle: this.toggle, + }), + ]) + }, + + methods: { + toggle: function(e) { + e.preventDefault() + this.isVisible = !this.isVisible + }, + }, +} diff --git a/templates/navigation/global_sidenav.html b/templates/navigation/global_sidenav.html index 99875cab..401cfaa5 100644 --- a/templates/navigation/global_sidenav.html +++ b/templates/navigation/global_sidenav.html @@ -2,7 +2,7 @@ {% from "components/sidenav_item.html" import SidenavItem %} -