diff options
author | Maximilian Hils <git@maximilianhils.com> | 2014-09-18 23:22:02 +0200 |
---|---|---|
committer | Maximilian Hils <git@maximilianhils.com> | 2014-09-18 23:22:02 +0200 |
commit | e66f240e8148fd63e6739950bd773b4052d91501 (patch) | |
tree | 539b1a500948c6e9ba209e15e284da5b3dac21a8 /web/src/js/components/utils.jsx.js | |
parent | d1ba150ea79689a55898efa760f7d77ca5ed601c (diff) | |
download | mitmproxy-e66f240e8148fd63e6739950bd773b4052d91501.tar.gz mitmproxy-e66f240e8148fd63e6739950bd773b4052d91501.tar.bz2 mitmproxy-e66f240e8148fd63e6739950bd773b4052d91501.zip |
add splitter
Diffstat (limited to 'web/src/js/components/utils.jsx.js')
-rw-r--r-- | web/src/js/components/utils.jsx.js | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/web/src/js/components/utils.jsx.js b/web/src/js/components/utils.jsx.js new file mode 100644 index 00000000..d986e24a --- /dev/null +++ b/web/src/js/components/utils.jsx.js @@ -0,0 +1,80 @@ +/** @jsx React.DOM */ + +//React utils. For other utilities, see ../utils.js + +var Splitter = React.createClass({ + getDefaultProps: function () { + return { + axis: "x" + } + }, + getInitialState: function(){ + return { + applied: false, + startX: false, + startY: false + }; + }, + onMouseDown: function(e){ + this.setState({ + startX: e.pageX, + startY: e.pageY + }); + window.addEventListener("mousemove",this.onMouseMove); + window.addEventListener("mouseup",this.onMouseUp); + }, + onMouseUp: function(e){ + window.removeEventListener("mouseup",this.onMouseUp); + window.removeEventListener("mousemove",this.onMouseMove); + + var node = this.getDOMNode(); + var prev = node.previousElementSibling; + var next = node.nextElementSibling; + this.getDOMNode().style.transform=""; + + var dX = e.pageX-this.state.startX; + var dY = e.pageY-this.state.startY; + var flexBasis; + if(this.props.axis === "x"){ + flexBasis = prev.offsetWidth + dX; + } else { + flexBasis = prev.offsetHeight + dY; + } + + prev.style.flex = "0 0 "+Math.max(0, flexBasis)+"px"; + next.style.flex = "1 1 auto"; + + this.setState({ + applied: true + }); + }, + onMouseMove: function(e){ + var dX = 0, dY = 0; + if(this.props.axis === "x"){ + dX = e.pageX-this.state.startX; + } else { + dY = e.pageY-this.state.startY; + } + this.getDOMNode().style.transform = "translate("+dX+"px,"+dY+"px)"; + }, + reset: function(){ + if(!this.state.applied){ + return; + } + var node = this.getDOMNode(); + var prev = node.previousElementSibling; + var next = node.nextElementSibling; + + prev.style.flex = ""; + next.style.flex = ""; + }, + render: function(){ + var className = "splitter"; + if(this.props.axis === "x"){ + className += " splitter-x"; + } else { + className += " splitter-y"; + } + return <div className={className} onMouseDown={this.onMouseDown}></div>; + } +});
\ No newline at end of file |