From 742f89f660d3041a468ad7ce39c36cd75f335e8a Mon Sep 17 00:00:00 2001 From: Alexander Skvortsov Date: Mon, 10 Aug 2020 00:34:03 -0400 Subject: [PATCH] add: forum/components/UserPageSidebar - extracted from UserPage, replaces affixSidebar util --- js/src/forum/components/UserPageSidebar.js | 42 ++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 js/src/forum/components/UserPageSidebar.js diff --git a/js/src/forum/components/UserPageSidebar.js b/js/src/forum/components/UserPageSidebar.js new file mode 100644 index 000000000..ad14c6887 --- /dev/null +++ b/js/src/forum/components/UserPageSidebar.js @@ -0,0 +1,42 @@ +import Component from "../../common/Component"; + +export default class UserPageSidebar extends Component { + view(vnode) { + return ( + ) + } + + onresize(vnode) { + const $sidebar = $(vnode.dom); + const $header = $('#header'); + const $footer = $('#footer'); + const $affixElement = $sidebar.find('> ul'); + + $(window).off('.affix'); + $affixElement.removeClass('affix affix-top affix-bottom').removeData('bs.affix'); + + // Don't affix the sidebar if it is taller than the viewport (otherwise + // there would be no way to scroll through its content). + if ($sidebar.outerHeight(true) > $(window).height() - $header.outerHeight(true)) return; + + $affixElement.affix({ + offset: { + top: () => $sidebar.offset().top - $header.outerHeight(true) - parseInt($sidebar.css('margin-top'), 10), + bottom: () => (this.bottom = $footer.outerHeight(true)), + }, + }); + }; + + oncreate(vnode) { + super.oncreate(vnode); + + // Register the affix plugin to execute on every window resize (and trigger) + $(window).on('resize', this.onresize.bind(this, vnode)).resize(); + } + + onremove(vnode) { + $(window).off('resize', this.onresize.bind(this, vnode)); + } +}