Index: third_party/polymer/components/core-splitter/core-splitter.html |
diff --git a/third_party/polymer/components/core-splitter/core-splitter.html b/third_party/polymer/components/core-splitter/core-splitter.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..391349c8399803637737a6d0c984df4a0b10d772 |
--- /dev/null |
+++ b/third_party/polymer/components/core-splitter/core-splitter.html |
@@ -0,0 +1,147 @@ |
+<!-- |
+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 |
+@homepage github.io |
+--> |
+ |
+<link rel="import" href="../polymer/polymer.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('core-splitter', { |
+ |
+ /** |
+ * 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 |
+ * |
+ * @attribute minSize |
+ * @type number |
+ * @default 0 |
+ */ |
+ minSize: 0, |
+ |
+ /** |
+ * 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, |
+ |
+ ready: function() { |
+ this.directionChanged(); |
+ }, |
+ |
+ 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 + 'px'; |
+ }, |
+ |
+ 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'; |
+ }, |
+ |
+ preventSelection: function(e) { |
+ e.preventDefault(); |
+ } |
+ }); |
+ |
+</script> |
+</polymer-element> |