UNPKG

five-bells-visualization

Version:
164 lines (132 loc) 4.62 kB
<!-- Copyright (c) 2014 The Polymer Project Authors. All rights reserved. This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as part of the polymer project is also subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt --> <!-- `core-splitter` provides a split bar and dragging on the split bar will resize the sibling element. Use its `direction` property to indicate which sibling element to be resized and the orientation. Usually you would want to use `core-splitter` along with flex layout so that the other sibling element can be _flexible_. Example: <div horizontal layout> <div>left</div> <core-splitter direction="left"></core-splitter> <div flex>right</div> </div> In the above example, dragging the splitter will resize the _left_ element. And since the parent container is a flexbox and the _right_ element has `flex`, the _right_ element will be auto-resized. For horizontal splitter set `direction` to `up` or `down`. Example: <div vertical layout> <div>top</div> <core-splitter direction="up"></core-splitter> <div flex>bottom</div> </div> @group Polymer Core Elements @element core-splitter @mixins Polymer.CoreResizer https://github.com/polymer/core-resizable @homepage github.io --> <link rel="import" href="../polymer/polymer.html"> <link rel="import" href="../core-resizable/core-resizable.html"> <polymer-element name="core-splitter" attributes="direction locked minSize allowOverflow" on-trackstart="{{trackStart}}" on-track="{{track}}" on-down="{{preventSelection}}"> <template> <link rel="stylesheet" href="core-splitter.css"> </template> <script> Polymer(Polymer.mixin({ /** * Possible values are `left`, `right`, `up` and `down`. * * @attribute direction * @type string * @default 'left' */ direction: 'left', /** * Minimum width to which the splitter target can be sized, e.g. * `minSize="100px"` * * @attribute minSize * @type string * @default '' */ minSize: '', /** * Locks the split bar so it can't be dragged. * * @attribute locked * @type boolean * @default false */ locked: false, /** * By default the parent and siblings of the splitter are set to overflow hidden. This helps * avoid elements bleeding outside the splitter regions. Set this property to true to allow * these elements to overflow. * * @attribute allowOverflow * @type boolean * @default false */ allowOverflow: false, // Listen for resize requests on parent, since splitter is peer to resizables resizerIsPeer: true, ready: function() { this.directionChanged(); }, attached: function() { this.resizerAttachedHandler(); }, detached: function() { this.resizerDetachedHandler(); }, domReady: function() { if (!this.allowOverflow) { this.parentNode.style.overflow = this.nextElementSibling.style.overflow = this.previousElementSibling.style.overflow = 'hidden'; } }, directionChanged: function() { this.isNext = this.direction === 'right' || this.direction === 'down'; this.horizontal = this.direction === 'up' || this.direction === 'down'; this.update(); }, update: function() { this.target = this.isNext ? this.nextElementSibling : this.previousElementSibling; this.dimension = this.horizontal ? 'height' : 'width'; this.classList.toggle('horizontal', this.horizontal); }, targetChanged: function(old) { if (old) { old.style[old.__splitterMinSize] = ''; } var min = this.target.__splitterMinSize = this.horizontal ? 'minHeight' : 'minWidth'; this.target.style[min] = this.minSize; }, trackStart: function() { this.update(); this.size = parseInt(getComputedStyle(this.target)[this.dimension]); }, track: function(e) { if (this.locked) { return; } var d = e[this.horizontal ? 'dy' : 'dx']; this.target.style[this.dimension] = this.size + (this.isNext ? -d : d) + 'px'; this.notifyResize(); }, preventSelection: function(e) { e.preventDefault(); } }, Polymer.CoreResizer)); </script> </polymer-element>