| OLD | NEW |
| (Empty) |
| 1 <!-- | |
| 2 Copyright (c) 2014 The Polymer Project Authors. All rights reserved. | |
| 3 This code may only be used under the BSD style license found at http://polymer.g
ithub.io/LICENSE.txt | |
| 4 The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt | |
| 5 The complete set of contributors may be found at http://polymer.github.io/CONTRI
BUTORS.txt | |
| 6 Code distributed by Google as part of the polymer project is also | |
| 7 subject to an additional IP rights grant found at http://polymer.github.io/PATEN
TS.txt | |
| 8 --> | |
| 9 | |
| 10 <!-- | |
| 11 `core-splitter` provides a split bar and dragging on the split bar | |
| 12 will resize the sibling element. Use its `direction` property to indicate | |
| 13 which sibling element to be resized and the orientation. Usually you would want | |
| 14 to use `core-splitter` along with flex layout so that the other sibling | |
| 15 element can be _flexible_. | |
| 16 | |
| 17 Example: | |
| 18 | |
| 19 <div horizontal layout> | |
| 20 <div>left</div> | |
| 21 <core-splitter direction="left"></core-splitter> | |
| 22 <div flex>right</div> | |
| 23 </div> | |
| 24 | |
| 25 In the above example, dragging the splitter will resize the _left_ element. And | |
| 26 since the parent container is a flexbox and the _right_ element has | |
| 27 `flex`, the _right_ element will be auto-resized. | |
| 28 | |
| 29 For horizontal splitter set `direction` to `up` or `down`. | |
| 30 | |
| 31 Example: | |
| 32 | |
| 33 <div vertical layout> | |
| 34 <div>top</div> | |
| 35 <core-splitter direction="up"></core-splitter> | |
| 36 <div flex>bottom</div> | |
| 37 </div> | |
| 38 | |
| 39 @group Polymer Core Elements | |
| 40 @element core-splitter | |
| 41 @homepage github.io | |
| 42 --> | |
| 43 | |
| 44 <link rel="import" href="../polymer/polymer.html"> | |
| 45 <link rel="import" href="../core-resizable/core-resizable.html"> | |
| 46 | |
| 47 <polymer-element name="core-splitter" attributes="direction locked minSize allow
Overflow" | |
| 48 on-trackstart="{{trackStart}}" on-track="{{track}}" on-down="{{preventSelect
ion}}"> | |
| 49 | |
| 50 <template> | |
| 51 | |
| 52 <link rel="stylesheet" href="core-splitter.css"> | |
| 53 | |
| 54 </template> | |
| 55 <script> | |
| 56 | |
| 57 Polymer(Polymer.mixin({ | |
| 58 | |
| 59 /** | |
| 60 * Possible values are `left`, `right`, `up` and `down`. | |
| 61 * | |
| 62 * @attribute direction | |
| 63 * @type string | |
| 64 * @default 'left' | |
| 65 */ | |
| 66 direction: 'left', | |
| 67 | |
| 68 /** | |
| 69 * Minimum width to which the splitter target can be sized, e.g. | |
| 70 * `minSize="100px"` | |
| 71 * | |
| 72 * @attribute minSize | |
| 73 * @type string | |
| 74 * @default '' | |
| 75 */ | |
| 76 minSize: '', | |
| 77 | |
| 78 /** | |
| 79 * Locks the split bar so it can't be dragged. | |
| 80 * | |
| 81 * @attribute locked | |
| 82 * @type boolean | |
| 83 * @default false | |
| 84 */ | |
| 85 locked: false, | |
| 86 | |
| 87 /** | |
| 88 * By default the parent and siblings of the splitter are set to overflow hi
dden. This helps | |
| 89 * avoid elements bleeding outside the splitter regions. Set this property t
o true to allow | |
| 90 * these elements to overflow. | |
| 91 * | |
| 92 * @attribute allowOverflow | |
| 93 * @type boolean | |
| 94 * @default false | |
| 95 */ | |
| 96 allowOverflow: false, | |
| 97 | |
| 98 // Listen for resize requests on parent, since splitter is peer to resizable
s | |
| 99 resizerIsPeer: true, | |
| 100 | |
| 101 ready: function() { | |
| 102 this.directionChanged(); | |
| 103 }, | |
| 104 | |
| 105 attached: function() { | |
| 106 this.resizerAttachedHandler(); | |
| 107 }, | |
| 108 | |
| 109 detached: function() { | |
| 110 this.resizerDetachedHandler(); | |
| 111 }, | |
| 112 | |
| 113 domReady: function() { | |
| 114 if (!this.allowOverflow) { | |
| 115 this.parentNode.style.overflow = this.nextElementSibling.style.overflow
= | |
| 116 this.previousElementSibling.style.overflow = 'hidden'; | |
| 117 } | |
| 118 }, | |
| 119 | |
| 120 directionChanged: function() { | |
| 121 this.isNext = this.direction === 'right' || this.direction === 'down'; | |
| 122 this.horizontal = this.direction === 'up' || this.direction === 'down'; | |
| 123 this.update(); | |
| 124 }, | |
| 125 | |
| 126 update: function() { | |
| 127 this.target = this.isNext ? this.nextElementSibling : this.previousElement
Sibling; | |
| 128 this.dimension = this.horizontal ? 'height' : 'width'; | |
| 129 this.classList.toggle('horizontal', this.horizontal); | |
| 130 }, | |
| 131 | |
| 132 targetChanged: function(old) { | |
| 133 if (old) { | |
| 134 old.style[old.__splitterMinSize] = ''; | |
| 135 } | |
| 136 var min = this.target.__splitterMinSize = this.horizontal ? 'minHeight' :
'minWidth'; | |
| 137 this.target.style[min] = this.minSize; | |
| 138 }, | |
| 139 | |
| 140 trackStart: function() { | |
| 141 this.update(); | |
| 142 this.size = parseInt(getComputedStyle(this.target)[this.dimension]); | |
| 143 }, | |
| 144 | |
| 145 track: function(e) { | |
| 146 if (this.locked) { | |
| 147 return; | |
| 148 } | |
| 149 var d = e[this.horizontal ? 'dy' : 'dx']; | |
| 150 this.target.style[this.dimension] = | |
| 151 this.size + (this.isNext ? -d : d) + 'px'; | |
| 152 this.notifyResize(); | |
| 153 }, | |
| 154 | |
| 155 preventSelection: function(e) { | |
| 156 e.preventDefault(); | |
| 157 } | |
| 158 | |
| 159 }, Polymer.CoreResizer)); | |
| 160 | |
| 161 </script> | |
| 162 </polymer-element> | |
| OLD | NEW |