Index: polymer_0.5.0/bower_components/core-resizable/core-resizable.html |
diff --git a/polymer_0.5.0/bower_components/core-resizable/core-resizable.html b/polymer_0.5.0/bower_components/core-resizable/core-resizable.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..21650dc30738f8390d2b996a93c4edba7222a519 |
--- /dev/null |
+++ b/polymer_0.5.0/bower_components/core-resizable/core-resizable.html |
@@ -0,0 +1,248 @@ |
+<!-- |
+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 |
+--> |
+ |
+<!-- |
+ * @group Polymer Mixins |
+--> |
+ |
+<link rel="import" href="../polymer/polymer.html"> |
+ |
+<script> |
+ |
+(function(scope) { |
+ |
+/** |
+ `Polymer.CoreResizable` and `Polymer.CoreResizer` are a set of mixins that can be used |
+ in Polymer elements to coordinate the flow of resize events between "resizers" (elements |
+ that control the size or hidden state of their children) and "resizables" (elements that |
+ need to be notified when they are resized or un-hidden by their parents in order to take |
+ action on their new measurements). |
+ |
+ Elements that perform measurement should add the `Core.Resizable` mixin to their |
+ Polymer prototype definition and listen for the `core-resize` event on themselves. |
+ This event will be fired when they become showing after having been hidden, |
+ when they are resized explicitly by a `CoreResizer`, or when the window has been resized. |
+ Note, the `core-resize` event is non-bubbling. |
+ |
+ `CoreResizable`'s must manually call the `resizableAttachedHandler` from the element's |
+ `attached` callback and `resizableDetachedHandler` from the element's `detached` |
+ callback. |
+ |
+ @element CoreResizable |
+ @status beta |
+ @homepage github.io |
+*/ |
+ |
+ scope.CoreResizable = { |
+ |
+ /** |
+ * User must call from `attached` callback |
+ * |
+ * @method resizableAttachedHandler |
+ */ |
+ resizableAttachedHandler: function(cb) { |
+ cb = cb || this._notifyResizeSelf; |
+ this.async(function() { |
+ var detail = {callback: cb, hasParentResizer: false}; |
+ this.fire('core-request-resize', detail); |
+ if (!detail.hasParentResizer) { |
+ this._boundWindowResizeHandler = cb.bind(this); |
+ // log('adding window resize handler', null, this); |
+ window.addEventListener('resize', this._boundWindowResizeHandler); |
+ } |
+ }.bind(this)); |
+ }, |
+ |
+ /** |
+ * User must call from `detached` callback |
+ * |
+ * @method resizableDetachedHandler |
+ */ |
+ resizableDetachedHandler: function() { |
+ this.fire('core-request-resize-cancel', null, this, false); |
+ if (this._boundWindowResizeHandler) { |
+ window.removeEventListener('resize', this._boundWindowResizeHandler); |
+ } |
+ }, |
+ |
+ // Private: fire non-bubbling resize event to self; returns whether |
+ // preventDefault was called, indicating that children should not |
+ // be resized |
+ _notifyResizeSelf: function() { |
+ return this.fire('core-resize', null, this, false).defaultPrevented; |
+ } |
+ |
+ }; |
+ |
+/** |
+ `Polymer.CoreResizable` and `Polymer.CoreResizer` are a set of mixins that can be used |
+ in Polymer elements to coordinate the flow of resize events between "resizers" (elements |
+ that control the size or hidden state of their children) and "resizables" (elements that |
+ need to be notified when they are resized or un-hidden by their parents in order to take |
+ action on their new measurements). |
+ |
+ Elements that cause their children to be resized (e.g. a splitter control) or hide/show |
+ their children (e.g. overlay) should add the `Core.CoreResizer` mixin to their |
+ Polymer prototype definition and then call `this.notifyResize()` any time the element |
+ resizes or un-hides its children. |
+ |
+ `CoreResizer`'s must manually call the `resizerAttachedHandler` from the element's |
+ `attached` callback and `resizerDetachedHandler` from the element's `detached` |
+ callback. |
+ |
+ Note: `CoreResizer` extends `CoreResizable`, and can listen for the `core-resize` event |
+ on itself if it needs to perform resize work on itself before notifying children. |
+ In this case, returning `false` from the `core-resize` event handler (or calling |
+ `preventDefault` on the event) will prevent notification of children if required. |
+ |
+ @element CoreResizer |
+ @extends CoreResizable |
+ @status beta |
+ @homepage github.io |
+*/ |
+ |
+ scope.CoreResizer = Polymer.mixin({ |
+ |
+ /** |
+ * User must call from `attached` callback |
+ * |
+ * @method resizerAttachedHandler |
+ */ |
+ resizerAttachedHandler: function() { |
+ this.resizableAttachedHandler(this.notifyResize); |
+ this._boundResizeRequested = this._boundResizeRequested || this._handleResizeRequested.bind(this); |
+ var listener; |
+ if (this.resizerIsPeer) { |
+ listener = this.parentElement || (this.parentNode && this.parentNode.host); |
+ listener._resizerPeers = listener._resizerPeers || []; |
+ listener._resizerPeers.push(this); |
+ } else { |
+ listener = this; |
+ } |
+ listener.addEventListener('core-request-resize', this._boundResizeRequested); |
+ this._resizerListener = listener; |
+ }, |
+ |
+ /** |
+ * User must call from `detached` callback |
+ * |
+ * @method resizerDetachedHandler |
+ */ |
+ resizerDetachedHandler: function() { |
+ this.resizableDetachedHandler(); |
+ this._resizerListener.removeEventListener('core-request-resize', this._boundResizeRequested); |
+ }, |
+ |
+ /** |
+ * User should call when resizing or un-hiding children |
+ * |
+ * @method notifyResize |
+ */ |
+ notifyResize: function() { |
+ // Notify self |
+ if (!this._notifyResizeSelf()) { |
+ // Notify requestors if default was not prevented |
+ var r = this.resizeRequestors; |
+ if (r) { |
+ for (var i=0; i<r.length; i++) { |
+ var ri = r[i]; |
+ if (!this.resizerShouldNotify || this.resizerShouldNotify(ri.target)) { |
+ // log('notifying resize', null, ri.target, true); |
+ ri.callback.apply(ri.target); |
+ // logEnd(); |
+ } |
+ } |
+ } |
+ } |
+ }, |
+ |
+ /** |
+ * User should implement to introduce filtering when notifying children. |
+ * Generally, children that are hidden by the CoreResizer (e.g. non-active |
+ * pages) need not be notified during resize, since they will be notified |
+ * again when becoming un-hidden. |
+ * |
+ * Return `true` if CoreResizable passed as argument should be notified of |
+ * resize. |
+ * |
+ * @method resizeerShouldNotify |
+ * @param {Element} el |
+ */ |
+ // resizeerShouldNotify: function(el) { } // User to implement if needed |
+ |
+ /** |
+ * Set to `true` if the resizer is actually a peer to the elements it |
+ * resizes (e.g. splitter); in this case it will listen for resize requests |
+ * events from its peers on its parent. |
+ * |
+ * @property resizerIsPeer |
+ * @type Boolean |
+ * @default false |
+ */ |
+ |
+ // Private: Handle requests for resize |
+ _handleResizeRequested: function(e) { |
+ var target = e.path[0]; |
+ if ((target == this) || |
+ (target == this._resizerListener) || |
+ (this._resizerPeers && this._resizerPeers.indexOf(target) < 0)) { |
+ return; |
+ } |
+ // log('resize requested', target, this); |
+ if (!this.resizeRequestors) { |
+ this.resizeRequestors = []; |
+ } |
+ this.resizeRequestors.push({target: target, callback: e.detail.callback}); |
+ target.addEventListener('core-request-resize-cancel', this._cancelResizeRequested.bind(this)); |
+ e.detail.hasParentResizer = true; |
+ e.stopPropagation(); |
+ }, |
+ |
+ // Private: Handle cancellation requests for resize |
+ _cancelResizeRequested: function(e) { |
+ // Exit early if we're already out of the DOM (resizeRequestors will already be null) |
+ if (this.resizeRequestors) { |
+ for (var i=0; i<this.resizeRequestors.length; i++) { |
+ if (this.resizeRequestors[i].target == e.target) { |
+ // log('resizeCanceled', e.target, this); |
+ this.resizeRequestors.splice(i, 1); |
+ break; |
+ } |
+ } |
+ } |
+ } |
+ |
+ }, Polymer.CoreResizable); |
+ |
+ // function prettyName(el) { |
+ // return el.localName + (el.id ? '#' : '') + el.id; |
+ // } |
+ |
+ // function log(what, from, to, group) { |
+ // var args = [what]; |
+ // if (from) { |
+ // args.push('from ' + prettyName(from)); |
+ // } |
+ // if (to) { |
+ // args.push('to ' + prettyName(to)); |
+ // } |
+ // if (group) { |
+ // console.group.apply(console, args); |
+ // } else { |
+ // console.log.apply(console, args); |
+ // } |
+ // } |
+ |
+ // function logEnd() { |
+ // console.groupEnd(); |
+ // } |
+ |
+})(Polymer); |
+ |
+</script> |