1 line
2.9 KiB
JavaScript
1 line
2.9 KiB
JavaScript
"use strict";var e=function(e){return e&&e.__esModule?e["default"]:e},t=e(require("react")),s=e(require("../listen")),i=e(require("react/lib/cloneWithProps")),n=e(require("clamp"));module.exports=function(){return{handleSize:8,propTypes:{onLayoutResize:t.PropTypes.func},getDefaultProps:function(){return{supportedChildren:{HLayout:!0,VLayout:!0,TreeView:!0,"layout-child":!0}}},handleResize:function(){this.forceUpdate()},getInitialState:function(){var e=this.props.serialized,t=[];if(e.length>0)for(var s=0;s<e.length;s++)t[s]=e[s].size;else if(Array.isArray(this.props.children))for(var i=this.props.children.length,n=this.handleSize*(i-1),a=this.getSize()-n,s=0;i>s;s++){var r=a/i;this.props.serialized[s]={size:r,children:[]},t.push(r)}else{var r=this.getSize();this.props.serialized[0]={size:r,children:[]},t.push(r)}return{sizes:t,serialized:this.props.serialized}},componentDidMount:function(){},onMouseMove:function(e,t){t.preventDefault(),t.stopPropagation();var s=this.getEventPosition(t)-this.start,i=this.startSizes[0]+this.startSizes[1];this.state.sizes[e]=n(this.startSizes[0]+s,0,i),this.state.sizes[e+1]=n(this.startSizes[1]-s,0,i),this.state.serialized[e].size=this.state.sizes[e],this.state.serialized[e+1].size=this.state.sizes[e+1],this.props.onLayoutResize&&this.props.onLayoutResize(this.state.sizes),this.setState(this.state)},onMouseUp:function(){this.state.disposables.forEach(function(e){e.dispose()});for(var e=document.getElementsByClassName("animation-preview"),t=0;t<e.length;t++)e[t].style.pointerEvents=""},onHandleDown:function(e,t){var i=this;if(1===t.nativeEvent.which){t.nativeEvent.preventDefault(),this.start=this.getEventPosition(t.nativeEvent),this.startSizes=[this.state.sizes[e],this.state.sizes[e+1]],this.state.disposables=[s(document.body,"mouseup",this.onMouseUp),s(document.body,"mousemove",function(t){i.onMouseMove(e,t)})];for(var n=document.getElementsByClassName("animation-preview"),a=0;a<n.length;a++)n[a].style.pointerEvents="none"}},render:function(){for(var e=this,s=this.props.children.slice(),n=this.state.sizes.reduce(function(e,t){return e+t},0),a=this.handleSize*(s.length-1),r=(this.getSize()-a)/n,o=0;o<this.state.sizes.length;o++)this.state.sizes[o]*=r;for(var h=0,o=0;o<s.length;o++){var l=s[o],p=this.state.sizes[o];if(l&&l.type&&this.props.supportedChildren[l.type.displayName]){var u=this.getProps(p,this.props.width,this.props.height);("HLayout"===l.type.displayName||"VLayout"===l.type.displayName)&&(u.serialized=this.state.serialized[o].children),l=i(l,u)}s[o]=t.createElement("div",{key:h++,className:this.getContainerClass(),style:this.getProps(p,this.props.width,p,this.props.height)},l)}var d=[];return s.forEach(function(i,n){d.push(i),n<s.length-1&&d.push(t.createElement("div",{key:h++,className:"layout-handle",onMouseDown:function(t){e.onHandleDown(n,t)},style:e.getHandleStyle()}))}),t.createElement("div",{className:this.getLayoutClass()},d)}}}; |