diff options
author | Maximilian Hils <git@maximilianhils.com> | 2016-03-10 15:13:24 +0100 |
---|---|---|
committer | Maximilian Hils <git@maximilianhils.com> | 2016-03-10 15:13:24 +0100 |
commit | 4a6edd92e661fa228f6f8607f045ef5489f58a05 (patch) | |
tree | 7a2134ac48cce29694313e5a5b3105f2cf7e93ff /web/src/js/components/helpers/AutoScroll.js | |
parent | b413a052f96896d387f58e903203cf2e29c6f1f6 (diff) | |
parent | 1c0496e051d8b1af297138732475b1689ada5eb8 (diff) | |
download | mitmproxy-4a6edd92e661fa228f6f8607f045ef5489f58a05.tar.gz mitmproxy-4a6edd92e661fa228f6f8607f045ef5489f58a05.tar.bz2 mitmproxy-4a6edd92e661fa228f6f8607f045ef5489f58a05.zip |
Merge pull request #1004 from gzzhanghao/vscroll
[web] VirtualScroll and AutoScroll helper
Diffstat (limited to 'web/src/js/components/helpers/AutoScroll.js')
-rw-r--r-- | web/src/js/components/helpers/AutoScroll.js | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/web/src/js/components/helpers/AutoScroll.js b/web/src/js/components/helpers/AutoScroll.js new file mode 100644 index 00000000..d37b9f37 --- /dev/null +++ b/web/src/js/components/helpers/AutoScroll.js @@ -0,0 +1,25 @@ +import React from "react"; +import ReactDOM from "react-dom"; + +const symShouldStick = Symbol("shouldStick"); +const isAtBottom = v => v.scrollTop + v.clientHeight === v.scrollHeight; + +export default Component => Object.assign(class AutoScrollWrapper extends Component { + + static displayName = Component.name; + + componentWillUpdate() { + const viewport = ReactDOM.findDOMNode(this); + this[symShouldStick] = viewport.scrollTop && isAtBottom(viewport); + super.componentWillUpdate && super.componentWillUpdate(); + } + + componentDidUpdate() { + const viewport = ReactDOM.findDOMNode(this); + if (this[symShouldStick] && !isAtBottom(viewport)) { + viewport.scrollTop = viewport.scrollHeight; + } + super.componentDidUpdate && super.componentDidUpdate(); + } + +}, Component); |