From 94ae6c3a09b089bed7402eed27b51929654de1cf Mon Sep 17 00:00:00 2001
From: Stijn de Witt
Date: Wed, 23 Sep 2015 01:24:41 +0200
Subject: [PATCH] Updated to Polymer 1.3.0
---
README.md | 713 ++--
lib/firebase-element/.bower.json | 9 +-
lib/firebase-element/bower.json | 3 +-
lib/firebase-element/firebase-collection.html | 16 +-
lib/firebase-element/firebase-document.html | 2 +-
.../firebase-query-behavior.html | 7 +-
.../test/firebase-collection.html | 41 +
lib/font-roboto/.bower.json | 2 +-
lib/gold-cc-cvc-input/.bower.json | 8 +-
lib/gold-cc-cvc-input/bower.json | 2 +-
lib/gold-cc-cvc-input/demo/index.html | 4 +-
lib/gold-cc-cvc-input/gold-cc-cvc-input.html | 41 +-
lib/gold-cc-cvc-input/test/basic.html | 27 +-
lib/gold-cc-expiration-input/.bower.json | 8 +-
lib/gold-cc-expiration-input/bower.json | 2 +-
lib/gold-cc-expiration-input/date-input.html | 4 -
lib/gold-cc-expiration-input/demo/index.html | 4 +-
.../gold-cc-expiration-input.html | 46 +-
lib/gold-cc-expiration-input/test/basic.html | 32 +-
lib/gold-cc-input/.bower.json | 8 +-
lib/gold-cc-input/bower.json | 2 +-
lib/gold-cc-input/demo/index.html | 4 +-
lib/gold-cc-input/gold-cc-input.html | 45 +-
lib/gold-cc-input/test/basic.html | 27 +-
lib/gold-email-input/.bower.json | 8 +-
lib/gold-email-input/bower.json | 2 +-
lib/gold-email-input/demo/index.html | 4 +-
lib/gold-email-input/gold-email-input.html | 41 +-
lib/gold-email-input/test/basic.html | 19 +-
lib/gold-phone-input/.bower.json | 8 +-
lib/gold-phone-input/bower.json | 2 +-
lib/gold-phone-input/demo/index.html | 7 +-
lib/gold-phone-input/gold-phone-input.html | 67 +-
lib/gold-phone-input/test/basic.html | 30 +-
lib/gold-zip-input/.bower.json | 8 +-
lib/gold-zip-input/bower.json | 2 +-
lib/gold-zip-input/gold-zip-input.html | 2 +-
lib/google-analytics/.bower.json | 8 +-
lib/google-analytics/README.md | 2 +-
lib/google-analytics/bower.json | 2 +-
lib/google-analytics/demo/demo.css | 150 -
lib/google-analytics/demo/index.html | 242 +-
.../google-analytics-chart.html | 63 +-
.../google-analytics-dashboard.html | 17 +-
.../google-analytics-date-selector.html | 27 +-
.../google-analytics-loader.html | 7 +-
.../google-analytics-query.html | 9 +-
.../google-analytics-view-selector.html | 24 +-
lib/google-apis/.bower.json | 8 +-
lib/google-apis/bower.json | 2 +-
lib/google-apis/google-maps-api.html | 11 +-
lib/google-map/.bower.json | 12 +-
lib/google-map/bower.json | 6 +-
lib/google-map/demo/index.html | 9 +-
lib/google-map/google-map-directions.html | 29 +-
lib/google-map/google-map-marker.html | 2 +-
lib/google-map/google-map-search.html | 170 +-
lib/google-map/google-map.html | 44 +-
lib/hydrolysis/.bower.json | 8 +-
lib/hydrolysis/bower.json | 2 +-
lib/hydrolysis/hydrolysis.js | 206 +-
lib/iron-autogrow-textarea/.bower.json | 8 +-
lib/iron-autogrow-textarea/README.md | 16 +-
lib/iron-autogrow-textarea/bower.json | 2 +-
.../iron-autogrow-textarea.html | 25 +-
lib/iron-behaviors/.bower.json | 8 +-
lib/iron-behaviors/bower.json | 2 +-
lib/iron-behaviors/iron-button-state.html | 35 +-
lib/iron-behaviors/iron-control-state.html | 15 +-
lib/iron-behaviors/test/active-state.html | 37 +
lib/iron-behaviors/test/focused-state.html | 20 +-
lib/iron-checked-element-behavior/.bower.json | 45 +
lib/iron-checked-element-behavior/.gitignore | 1 +
lib/iron-checked-element-behavior/README.md | 2 +
lib/iron-checked-element-behavior/bower.json | 36 +
.../demo/index.html | 39 +
.../demo/simple-checkbox.html | 64 +
lib/iron-checked-element-behavior/index.html | 30 +
.../iron-checked-element-behavior.html | 106 +
.../test/basic.html | 125 +
.../test/index.html | 34 +
.../test/simple-checkbox.html | 26 +
lib/iron-collapse/.bower.json | 8 +-
lib/iron-collapse/bower.json | 2 +-
lib/iron-collapse/iron-collapse.html | 33 +-
lib/iron-doc-viewer/.bower.json | 8 +-
lib/iron-doc-viewer/bower.json | 2 +-
lib/iron-doc-viewer/iron-doc-property.css | 8 +-
lib/iron-doc-viewer/iron-doc-property.html | 12 +-
lib/iron-doc-viewer/iron-doc-viewer.css | 34 +-
lib/iron-doc-viewer/iron-doc-viewer.html | 8 +-
lib/iron-dropdown/.bower.json | 11 +-
lib/iron-dropdown/bower.json | 5 +-
lib/iron-dropdown/demo/index.html | 6 +-
lib/iron-dropdown/iron-dropdown.html | 132 +-
lib/iron-dropdown/test/iron-dropdown.html | 90 +-
lib/iron-flex-layout/.bower.json | 8 +-
lib/iron-flex-layout/bower.json | 2 +-
lib/iron-flex-layout/iron-flex-layout.html | 17 +-
lib/iron-form-element-behavior/.bower.json | 16 +-
lib/iron-form-element-behavior/bower.json | 10 +-
.../iron-form-element-behavior.html | 20 +-
lib/iron-form/.bower.json | 9 +-
lib/iron-form/bower.json | 3 +-
lib/iron-form/demo/index.html | 24 +-
lib/iron-form/demo/simple-element.html | 52 +
lib/iron-form/iron-form.html | 11 +-
lib/iron-form/test/basic.html | 61 +
lib/iron-icon/.bower.json | 8 +-
lib/iron-icon/bower.json | 2 +-
lib/iron-icon/iron-icon.html | 19 +-
lib/iron-input/.bower.json | 8 +-
lib/iron-input/bower.json | 2 +-
lib/iron-input/iron-input.html | 6 +-
lib/iron-list/.bower.json | 17 +-
lib/iron-list/README.md | 6 +
lib/iron-list/bower.json | 11 +-
lib/iron-list/demo/demo1.html | 154 -
.../{demo2.html => external-content.html} | 0
lib/iron-list/demo/selection.html | 259 ++
lib/iron-list/iron-list.html | 334 +-
lib/iron-list/test/basic.html | 24 +-
lib/iron-list/test/hidden-list.html | 20 +-
lib/iron-list/test/index.html | 3 +-
lib/iron-list/test/physical-count.html | 24 +-
lib/iron-list/test/selection.html | 356 ++
lib/iron-list/test/x-list.html | 21 +-
lib/iron-menu-behavior/.bower.json | 9 +-
lib/iron-menu-behavior/bower.json | 3 +-
lib/iron-menu-behavior/demo/index.html | 150 +-
lib/iron-menu-behavior/demo/simple-menu.html | 3 +-
.../demo/simple-menubar.html | 3 +-
.../iron-menu-behavior.html | 8 +-
lib/iron-overlay-behavior/.bower.json | 8 +-
lib/iron-overlay-behavior/README.md | 2 +-
lib/iron-overlay-behavior/bower.json | 2 +-
.../iron-overlay-behavior.html | 25 +-
.../iron-overlay-manager.html | 6 +-
.../test/iron-overlay-behavior.html | 18 +
lib/iron-selector/.bower.json | 12 +-
lib/iron-selector/bower.json | 5 +-
lib/iron-selector/demo/index.html | 82 +-
lib/iron-selector/iron-selectable.html | 54 +-
.../test/excluded-local-names.html | 90 +
lib/iron-selector/test/index.html | 3 +-
lib/iron-test-helpers/.bower.json | 8 +-
lib/iron-test-helpers/README.md | 2 +-
lib/iron-test-helpers/bower.json | 2 +-
lib/iron-test-helpers/mock-interactions.js | 11 +-
lib/iron-validatable-behavior/.bower.json | 8 +-
lib/iron-validatable-behavior/bower.json | 2 +-
.../iron-validatable-behavior.html | 36 +-
lib/marked-element/.bower.json | 10 +-
lib/marked-element/bower.json | 4 +-
lib/marked-element/demo/index.html | 11 +-
lib/marked-element/marked-element.html | 53 +-
lib/marked-element/test/marked-element.html | 114 +-
lib/paper-badge/.bower.json | 8 +-
lib/paper-badge/README.md | 33 +-
lib/paper-badge/bower.json | 2 +-
lib/paper-badge/demo/test-button.html | 4 +-
lib/paper-badge/paper-badge.html | 54 +-
lib/paper-badge/test/basic.html | 93 +-
lib/paper-badge/test/test-button.html | 37 +
lib/paper-button/.bower.json | 19 +-
lib/paper-button/README.md | 27 +-
lib/paper-button/bower.json | 13 +-
lib/paper-button/demo/index.html | 8 +-
lib/paper-button/paper-button.html | 145 +-
lib/paper-button/test/paper-button.html | 19 +-
lib/paper-card/.bower.json | 13 +-
lib/paper-card/README.md | 32 +-
lib/paper-card/bower.json | 7 +-
lib/paper-card/paper-card.html | 130 +-
lib/paper-checkbox/.bower.json | 27 +-
lib/paper-checkbox/bower.json | 21 +-
lib/paper-checkbox/demo/index.html | 1 -
lib/paper-checkbox/paper-checkbox.css | 151 -
lib/paper-checkbox/paper-checkbox.html | 232 +-
lib/paper-checkbox/test/basic.html | 57 +-
lib/paper-dropdown-menu/.bower.json | 52 +
lib/paper-dropdown-menu/.gitignore | 1 +
lib/paper-dropdown-menu/README.md | 36 +
lib/paper-dropdown-menu/bower.json | 43 +
lib/paper-dropdown-menu/demo/index.html | 191 ++
lib/paper-dropdown-menu/index.html | 24 +
.../paper-dropdown-menu.html | 348 ++
lib/paper-dropdown-menu/test/index.html | 25 +
.../test/paper-dropdown-menu.html | 126 +
lib/paper-elements/.bower.json | 9 +-
lib/paper-elements/README.md | 5 +-
lib/paper-elements/bower.json | 3 +-
lib/paper-fab/.bower.json | 8 +-
lib/paper-fab/README.md | 23 -
lib/paper-fab/bower.json | 2 +-
lib/paper-fab/paper-fab.html | 4 +-
lib/paper-header-panel/.bower.json | 8 +-
lib/paper-header-panel/README.md | 153 +-
lib/paper-header-panel/bower.json | 2 +-
lib/paper-header-panel/paper-header-panel.css | 32 +-
.../paper-header-panel.html | 12 +-
lib/paper-input/.bower.json | 18 +-
lib/paper-input/bower.json | 12 +-
lib/paper-input/demo/index.html | 4 +-
lib/paper-input/demo/ssn-input.html | 41 +-
lib/paper-input/demo/ssn-validator.html | 4 -
lib/paper-input/paper-input-behavior.html | 78 +-
lib/paper-input/paper-input-char-counter.html | 32 +-
lib/paper-input/paper-input-container.html | 338 +-
lib/paper-input/paper-input-error.html | 44 +-
lib/paper-input/paper-input.html | 58 +-
lib/paper-input/paper-textarea.html | 21 +-
lib/paper-input/test/paper-input.html | 19 +-
lib/paper-input/test/paper-textarea.html | 9 +-
lib/paper-material/.bower.json | 8 +-
lib/paper-material/bower.json | 2 +-
lib/paper-material/paper-material.html | 3 +
lib/paper-menu-button/.bower.json | 8 +-
lib/paper-menu-button/bower.json | 2 +-
lib/paper-menu-button/demo/index.html | 18 +-
lib/paper-menu-button/paper-menu-button.html | 125 +-
.../test/paper-menu-button.html | 13 +
lib/paper-menu/.bower.json | 11 +-
lib/paper-menu/bower.json | 5 +-
lib/paper-menu/demo/index.html | 52 +-
lib/paper-menu/paper-menu-shared.css | 40 +
lib/paper-menu/paper-menu.html | 38 +-
lib/paper-menu/paper-submenu.html | 205 ++
lib/paper-menu/test/index.html | 3 +-
lib/paper-menu/test/paper-submenu.html | 190 ++
lib/paper-progress/.bower.json | 8 +-
lib/paper-progress/README.md | 14 +-
lib/paper-progress/bower.json | 2 +-
lib/paper-progress/demo/index.html | 3 +-
lib/paper-progress/paper-progress.html | 151 +-
lib/paper-progress/test/basic.html | 91 +-
lib/paper-radio-button/.bower.json | 13 +-
lib/paper-radio-button/bower.json | 7 +-
lib/paper-radio-button/paper-radio-button.css | 111 -
.../paper-radio-button.html | 164 +-
lib/paper-radio-button/test/basic.html | 39 +-
lib/paper-ripple/.bower.json | 14 +-
lib/paper-ripple/bower.json | 8 +-
lib/paper-ripple/paper-ripple.html | 155 +-
lib/paper-scroll-header-panel/.bower.json | 8 +-
lib/paper-scroll-header-panel/bower.json | 2 +-
lib/paper-scroll-header-panel/demo/demo1.html | 2 +-
.../demo/demo10.html | 90 +
.../paper-scroll-header-panel.html | 125 +-
lib/paper-scroll-header-panel/test/basic.html | 2 +-
lib/paper-scroll-header-panel/test/index.html | 3 +-
.../test/scroll.html | 135 +
lib/paper-slider/.bower.json | 8 +-
lib/paper-slider/README.md | 2 +
lib/paper-slider/bower.json | 2 +-
lib/paper-slider/demo/index.html | 6 +-
lib/paper-slider/paper-slider.css | 21 +-
lib/paper-slider/paper-slider.html | 30 +-
lib/paper-slider/test/basic.html | 30 +
lib/paper-tabs/.bower.json | 9 +-
lib/paper-tabs/bower.json | 3 +-
lib/paper-tabs/paper-tab.html | 12 +-
lib/paper-tabs/test/basic.html | 16 +-
lib/paper-toggle-button/.bower.json | 17 +-
lib/paper-toggle-button/bower.json | 11 +-
.../paper-toggle-button.css | 109 -
.../paper-toggle-button.html | 155 +-
lib/paper-toggle-button/test/basic.html | 26 +-
lib/paper-tooltip/.bower.json | 16 +-
lib/paper-tooltip/README.md | 28 +-
lib/paper-tooltip/bower.json | 10 +-
lib/paper-tooltip/demo/index.html | 21 +-
lib/paper-tooltip/demo/test-button.html | 37 +
lib/paper-tooltip/paper-tooltip.html | 187 +-
lib/paper-tooltip/test/basic.html | 321 +-
lib/paper-tooltip/test/test-button.html | 41 +
lib/platinum-push-messaging/.bower.json | 27 +-
lib/platinum-push-messaging/README.md | 2 +-
lib/platinum-push-messaging/bower.json | 19 +-
lib/platinum-push-messaging/demo/index.html | 138 -
.../demo/manifest.json | 4 -
.../platinum-push-messaging.html | 113 +-
lib/platinum-push-messaging/service-worker.js | 9 +
lib/platinum-push-messaging/test/index.html | 33 +
.../test/supported.html | 69 +
.../test/unsupported.html | 55 +
lib/polymer/.bower.json | 16 +-
lib/polymer/bower.json | 5 +-
lib/polymer/build.log | 25 +-
lib/polymer/polymer-micro.html | 438 +--
lib/polymer/polymer-mini.html | 841 +++--
lib/polymer/polymer.html | 2872 ++++++++++-------
lib/promise-polyfill/.bower.json | 6 +-
lib/webcomponentsjs/.bower.json | 8 +-
lib/webcomponentsjs/CustomElements.js | 35 +-
lib/webcomponentsjs/CustomElements.min.js | 4 +-
lib/webcomponentsjs/HTMLImports.js | 4 +-
lib/webcomponentsjs/HTMLImports.min.js | 4 +-
lib/webcomponentsjs/MutationObserver.js | 4 +-
lib/webcomponentsjs/MutationObserver.min.js | 4 +-
lib/webcomponentsjs/ShadowDOM.js | 6 +-
lib/webcomponentsjs/ShadowDOM.min.js | 2 +-
lib/webcomponentsjs/bower.json | 2 +-
lib/webcomponentsjs/build.log | 34 +-
lib/webcomponentsjs/package.json | 2 +-
lib/webcomponentsjs/webcomponents-lite.js | 38 +-
lib/webcomponentsjs/webcomponents-lite.min.js | 6 +-
lib/webcomponentsjs/webcomponents.js | 41 +-
lib/webcomponentsjs/webcomponents.min.js | 6 +-
package.json | 2 +-
310 files changed, 11166 insertions(+), 5217 deletions(-)
delete mode 100644 lib/google-analytics/demo/demo.css
create mode 100644 lib/iron-checked-element-behavior/.bower.json
create mode 100644 lib/iron-checked-element-behavior/.gitignore
create mode 100644 lib/iron-checked-element-behavior/README.md
create mode 100644 lib/iron-checked-element-behavior/bower.json
create mode 100644 lib/iron-checked-element-behavior/demo/index.html
create mode 100644 lib/iron-checked-element-behavior/demo/simple-checkbox.html
create mode 100644 lib/iron-checked-element-behavior/index.html
create mode 100644 lib/iron-checked-element-behavior/iron-checked-element-behavior.html
create mode 100644 lib/iron-checked-element-behavior/test/basic.html
create mode 100644 lib/iron-checked-element-behavior/test/index.html
create mode 100644 lib/iron-checked-element-behavior/test/simple-checkbox.html
create mode 100644 lib/iron-form/demo/simple-element.html
delete mode 100644 lib/iron-list/demo/demo1.html
rename lib/iron-list/demo/{demo2.html => external-content.html} (100%)
create mode 100644 lib/iron-list/demo/selection.html
create mode 100644 lib/iron-list/test/selection.html
create mode 100644 lib/iron-selector/test/excluded-local-names.html
create mode 100644 lib/paper-badge/test/test-button.html
delete mode 100644 lib/paper-checkbox/paper-checkbox.css
create mode 100644 lib/paper-dropdown-menu/.bower.json
create mode 100644 lib/paper-dropdown-menu/.gitignore
create mode 100644 lib/paper-dropdown-menu/README.md
create mode 100644 lib/paper-dropdown-menu/bower.json
create mode 100644 lib/paper-dropdown-menu/demo/index.html
create mode 100644 lib/paper-dropdown-menu/index.html
create mode 100644 lib/paper-dropdown-menu/paper-dropdown-menu.html
create mode 100644 lib/paper-dropdown-menu/test/index.html
create mode 100644 lib/paper-dropdown-menu/test/paper-dropdown-menu.html
create mode 100644 lib/paper-menu/paper-menu-shared.css
create mode 100644 lib/paper-menu/paper-submenu.html
create mode 100644 lib/paper-menu/test/paper-submenu.html
delete mode 100644 lib/paper-radio-button/paper-radio-button.css
create mode 100644 lib/paper-scroll-header-panel/demo/demo10.html
create mode 100644 lib/paper-scroll-header-panel/test/scroll.html
delete mode 100644 lib/paper-toggle-button/paper-toggle-button.css
create mode 100644 lib/paper-tooltip/demo/test-button.html
create mode 100644 lib/paper-tooltip/test/test-button.html
delete mode 100644 lib/platinum-push-messaging/demo/index.html
delete mode 100644 lib/platinum-push-messaging/demo/manifest.json
create mode 100644 lib/platinum-push-messaging/test/index.html
create mode 100644 lib/platinum-push-messaging/test/supported.html
create mode 100644 lib/platinum-push-messaging/test/unsupported.html
diff --git a/README.md b/README.md
index d7ef41f8..75672b79 100644
--- a/README.md
+++ b/README.md
@@ -1,349 +1,378 @@
-# polymer-cdn
-A mirror of Polymer's components so that they can be used directly from CDN
+# polymer-cdn v1.1.3
+**A mirror of Polymer's components so that they can be used directly from CDN**
## How to use
In general, given an element named `my-cool-element`, the CDN url for it will be:
```
-https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/my-cool-element/my-cool-element.html
+https://cdn.rawgit.com/download/polymer-cdn/1.1.3/lib/my-cool-element/my-cool-element.html
```
-## Contents
-
- promise-polyfill#1.0.0
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/promise-polyfill/promise-polyfill.html
-
- webcomponentsjs#0.7.9
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/webcomponentsjs/webcomponentsjs.html
-
- polymer#1.0.0
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/polymer/polymer.html
-
- iron-elements#1.0.3
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/iron-elements/iron-elements.html
-
- iron-a11y-announcer#1.0.2
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/iron-a11y-announcer/iron-a11y-announcer.html
-
- iron-a11y-keys#1.0.2
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/iron-a11y-keys/iron-a11y-keys.html
-
- iron-a11y-keys-behavior#1.0.5
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/iron-a11y-keys-behavior/iron-a11y-keys-behavior.html
-
- iron-ajax#1.0.3
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/iron-ajax/iron-ajax.html
-
- iron-autogrow-textarea#1.0.3
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/iron-autogrow-textarea/iron-autogrow-textarea.html
-
- iron-behaviors#1.0.5
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/iron-behaviors/iron-behaviors.html
-
- iron-collapse#1.0.2
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/iron-collapse/iron-collapse.html
-
- iron-component-page#1.0.5
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/iron-component-page/iron-component-page.html
-
- iron-doc-viewer#1.0.4
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/iron-doc-viewer/iron-doc-viewer.html
-
- iron-dropdown#1.0.3
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/iron-dropdown/iron-dropdown.html
-
- iron-fit-behavior#1.0.3
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/iron-fit-behavior/iron-fit-behavior.html
-
- iron-flex-layout#1.0.2
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/iron-flex-layout/iron-flex-layout.html
-
- iron-form#1.0.7
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/iron-form/iron-form.html
-
- iron-form-element-behavior#1.0.3
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/iron-form-element-behavior/iron-form-element-behavior.html
-
- iron-icon#1.0.2
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/iron-icon/iron-icon.html
-
- iron-icons#1.0.3
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/iron-icons/iron-icons.html
-
- iron-iconset#1.0.2
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/iron-iconset/iron-iconset.html
-
- iron-iconset-svg#1.0.4
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/iron-iconset-svg/iron-iconset-svg.html
-
- iron-image#1.0.2
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/iron-image/iron-image.html
-
- iron-input#1.0.4
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/iron-input/iron-input.html
-
- iron-jsonp-library#1.0.3
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/iron-jsonp-library/iron-jsonp-library.html
-
- iron-list#1.0.2
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/iron-list/iron-list.html
-
- iron-localstorage#1.0.4
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/iron-localstorage/iron-localstorage.html
-
- iron-media-query#1.0.2
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/iron-media-query/iron-media-query.html
-
- iron-menu-behavior#1.0.1
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/iron-menu-behavior/iron-menu-behavior.html
-
- iron-meta#1.0.3
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/iron-meta/iron-meta.html
-
- iron-overlay-behavior#1.0.4
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/iron-overlay-behavior/iron-overlay-behavior.html
-
- iron-pages#1.0.3
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/iron-pages/iron-pages.html
-
- iron-range-behavior#1.0.2
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/iron-range-behavior/iron-range-behavior.html
-
- iron-resizable-behavior#1.0.2
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/iron-resizable-behavior/iron-resizable-behavior.html
-
- iron-selector#1.0.2
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/iron-selector/iron-selector.html
-
- iron-signals#1.0.2
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/iron-signals/iron-signals.html
-
- iron-test-helpers#1.0.1
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/iron-test-helpers/iron-test-helpers.html
-
- iron-validatable-behavior#1.0.3
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/iron-validatable-behavior/iron-validatable-behavior.html
-
- iron-validator-behavior#1.0.1
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/iron-validator-behavior/iron-validator-behavior.html
-
-
-
+## Versioning
+As this repo groups a whole set of components, versioning is tricky. For now I've decided to
+follow the Polymer version number and add an extra number behind it for updates that did not
+involve a change of the Polymer version. It's important to remember that this repo does not
+(can not) follow semantic versioning guidelines and that it's version numbers indicate not
+much more than which versions came before which and after which other versions.
+
+Make sure you always link to a specific version and not to `master`, as that would mean your
+code could change right under your nose. Something you don't want in production! Also, for
+this same reason, I recommend forking this repo and including from your own fork, so you'll
+have full control over it.
+
+To see available versions and select one, use the `Branch` dropdown menu and select one of
+the `tags`. You can then browse that version of the Repo. Browse to the file you want to include
+and the url to it's `raw` version. Throw that into [RawGit](https://rawgit.com) and you'll
+have a url to a file on CDN that never expires from cache and is not throttled or limited
+in bandwidth in any way.
+
+![Branch selection in GitHub](https://camo.githubusercontent.com/8dbe1c395f07374e7d435880cc6804513989fea4/687474703a2f2f692e696d6775722e636f6d2f447867774872362e706e67)
+
+## Missing something?
+This repository aims to be a complete set of the standard Polymer components, grouped in such
+a way that (transitive) dependencies can be correctly resolved for all components. If you are
+missing some (version of) a component, please [create an issue](https://github.com/Download/polymer-cdn/issues)
+explaining what should be changed and I'll do my best to implement it.
+
+Pull requests are of course also always welcome! If you want to try that, here is the rough procedure:
+1. Create an issue in this repo describing your change and mention you're preparing a pull request
+2. Fork this repo
+3. Clone your forked repo to your own machine
+4. Create and switch to a new Branch
+5. Implement the change
+6. Commit your change, making sure to mention the URL to the issue created in step 1 in the commit comment
+7. Push your change to your fork (make sure to push the right branch)
+8. Create a Pull Request from your change.
+
+I will review the PR and if it looks good, Merge it and Publish the resulting work as a new Release.
-
- paper-elements#1.0.3
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/paper-elements/paper-elements.html
-
- paper-badge#1.0.0
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/paper-badge/paper-badge.html
-
- paper-behaviors#1.0.3
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/paper-behaviors/paper-behaviors.html
-
- paper-button#1.0.3
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/paper-button/paper-button.html
-
- paper-card#1.0.0
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/paper-card/paper-card.html
-
- paper-checkbox#1.0.5
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/paper-checkbox/paper-checkbox.html
-
- paper-dialog#1.0.1
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/paper-dialog/paper-dialog.html
-
- paper-dialog-behavior#1.0.4
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/paper-dialog-behavior/paper-dialog-behavior.html
-
- paper-dialog-scrollable#1.0.1
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/paper-dialog-scrollable/paper-dialog-scrollable.html
-
- paper-drawer-panel#1.0.3
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/paper-drawer-panel/paper-drawer-panel.html
-
- paper-fab#1.0.3
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/paper-fab/paper-fab.html
-
- paper-header-panel#1.0.3
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/paper-header-panel/paper-header-panel.html
-
- paper-icon-button#1.0.3
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/paper-icon-button/paper-icon-button.html
-
- paper-input#1.0.8
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/paper-input/paper-input.html
-
- paper-item#1.0.2
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/paper-item/paper-item.html
-
- paper-material#1.0.1
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/paper-material/paper-material.html
-
- paper-menu#1.0.1
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/paper-menu/paper-menu.html
-
- paper-menu-button#1.0.1
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/paper-menu-button/paper-menu-button.html
-
- paper-progress#1.0.2
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/paper-progress/paper-progress.html
-
- paper-radio-button#1.0.5
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/paper-radio-button/paper-radio-button.html
-
- paper-radio-group#1.0.4
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/paper-radio-group/paper-radio-group.html
-
- paper-ripple#1.0.1
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/paper-ripple/paper-ripple.html
-
- paper-scroll-header-panel#1.0.6
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/paper-scroll-header-panel/paper-scroll-header-panel.html
-
- paper-slider#1.0.4
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/paper-slider/paper-slider.html
-
- paper-spinner#1.0.2
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/paper-spinner/paper-spinner.html
-
- paper-styles#1.0.11
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/paper-styles/paper-styles.html
-
- paper-tabs#1.0.1
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/paper-tabs/paper-tabs.html
-
- paper-toast#1.0.0
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/paper-toast/paper-toast.html
-
- paper-toggle-button#1.0.5
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/paper-toggle-button/paper-toggle-button.html
-
- paper-toolbar#1.0.4
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/paper-toolbar/paper-toolbar.html
-
- paper-tooltip#1.0.1
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/paper-tooltip/paper-tooltip.html
-
-
-
-
-
- gold-elements#1.0.1
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/gold-elements/gold-elements.html
-
- gold-cc-cvc-input#1.0.3
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/gold-cc-cvc-input/gold-cc-cvc-input.html
-
- gold-cc-expiration-input#1.0.4
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/gold-cc-expiration-input/gold-cc-expiration-input.html
-
- gold-cc-input#1.0.5
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/gold-cc-input/gold-cc-input.html
-
- gold-email-input#1.0.3
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/gold-email-input/gold-email-input.html
-
- gold-phone-input#1.0.4
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/gold-phone-input/gold-phone-input.html
-
- gold-zip-input#1.0.2
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/gold-zip-input/gold-zip-input.html
-
-
-
-
-
- platinum-elements#1.0.1
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/platinum-elements/platinum-elements.html
-
- platinum-push-messaging#1.0.1
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/platinum-push-messaging/platinum-push-messaging.html
-
- platinum-sw#1.0.2
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/platinum-sw/platinum-sw.html
-
-
-
-
-
- neon-elements#1.0.0
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/neon-elements/neon-elements.html
-
- neon-animation#1.0.6
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/neon-animation/neon-animation.html
-
-
-
-
-
- google-web-components#1.0.1
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/google-web-components/google-web-components.html
-
- firebase-element#1.0.3
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/firebase-element/firebase-collection.html
-
- firebase#2.2.9
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/firebase/firebase.js
-
-
-
- google-analytics#1.0.2
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/google-analytics/google-analytics.html
-
- google-apis#1.0.2
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/google-apis/google-apis.html
-
- google-calendar#1.0.1
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/google-calendar/google-calendar.html
-
- google-castable-video#1.0.1
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/google-castable-video/google-castable-video.html
-
- google-chart#1.0.2
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/google-chart/google-chart.html
-
- google-feeds#1.0.1
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/google-feeds/google-feeds.html
-
- google-hangout-button#1.0.1
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/google-hangout-button/google-hangout-button.html
-
- google-map#1.0.3
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/google-map/google-map.html
-
- google-sheets#1.0.4
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/google-sheets/google-sheets.html
-
- google-signin#1.0.3
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/google-signin/google-signin.html
-
- google-streetview-pano#1.0.1
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/google-streetview-pano/google-streetview-pano.html
-
- google-url-shortener#1.0.1
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/google-url-shortener/google-url-shortener.html
-
- google-youtube#1.1.2
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/google-youtube/google-youtube.html
-
- google-youtube-upload#1.1.2
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/google-youtube-upload/google-youtube-upload.html
-
-
-
-
-
- molecules#1.0.0
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/molecules/molecules.html
-
- marked-element#1.0.2
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/marked-element/marked-element.html
-
- marked#0.3.4
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/marked/marked.min.js
-
-
-
-
- prism#0.0.1
- https://cdn.rawgit.com/download/polymer-cdn/1.0.1/lib/prism/prism.js
-
+## Contents
+All these libraries can be found in the `lib` subfolder. These used to be links to the actual files,
+but it made updating painful so now I just copy the Bower output. You can browse the repo to locate
+the files manually, or just trust Bower.
+
+```sh
+└── webcomponentsjs#0.7.12
+
+paper-elements#1.0.5 lib\paper-elements
+├── paper-badge#1.0.3
+├── paper-behaviors#1.0.3
+├── paper-button#1.0.6
+├── paper-card#1.0.5
+├── paper-checkbox#1.0.10
+├── paper-dialog#1.0.1
+├── paper-dialog-behavior#1.0.4
+├── paper-dialog-scrollable#1.0.1
+├── paper-drawer-panel#1.0.3
+├── paper-dropdown-menu#1.0.2
+├── paper-fab#1.0.4
+├── paper-header-panel#1.0.5
+├── paper-icon-button#1.0.3
+├── paper-input#1.0.14
+├── paper-item#1.0.2
+├── paper-material#1.0.2
+├── paper-menu#1.1.0
+├── paper-menu-button#1.0.3
+├── paper-progress#1.0.5
+├── paper-radio-button#1.0.8
+├── paper-radio-group#1.0.4
+├── paper-ripple#1.0.2
+├── paper-scroll-header-panel#1.0.8
+├── paper-slider#1.0.6
+├── paper-spinner#1.0.2
+├── paper-styles#1.0.11
+├── paper-tabs#1.0.2
+├── paper-toast#1.0.0
+├── paper-toggle-button#1.0.8
+├── paper-toolbar#1.0.4
+└── paper-tooltip#1.1.0
+
+iron-autogrow-textarea#1.0.5 lib\iron-autogrow-textarea
+├── iron-behaviors#1.0.8
+├── iron-flex-layout#1.0.3
+├── iron-form-element-behavior#1.0.4
+├── iron-validatable-behavior#1.0.4
+└── polymer#1.1.3
+
+google-apis#1.1.0 lib\google-apis
+├── iron-jsonp-library#1.0.3
+└── polymer#1.1.3
+
+iron-collapse#1.0.3 lib\iron-collapse
+└── polymer#1.1.3
+
+firebase-element#1.0.6 lib\firebase-element
+├── firebase#2.2.9
+└── polymer#1.1.3
+
+google-map#1.1.0 lib\google-map
+├── google-apis#1.1.0
+├── iron-resizable-behavior#1.0.2
+└── polymer#1.1.3
+
+iron-behaviors#1.0.8 lib\iron-behaviors
+├── iron-a11y-keys-behavior#1.0.5
+└── polymer#1.1.3
+
+google-analytics#1.2.0 lib\google-analytics
+├── ga-api-utils#0.2.0
+├── google-chart#1.0.2
+├── google-signin#1.0.3
+├── polymer#1.1.3
+└── promise-polyfill#1.0.0
+
+iron-flex-layout#1.0.3 lib\iron-flex-layout
+└── polymer#1.1.3
+
+iron-form-element-behavior#1.0.4 lib\iron-form-element-behavior
+└── polymer#1.1.3
+
+iron-dropdown#1.0.6 lib\iron-dropdown
+├── iron-a11y-keys-behavior#1.0.5
+├── iron-behaviors#1.0.8
+├── iron-overlay-behavior#1.0.6
+├── iron-resizable-behavior#1.0.2
+├── neon-animation#1.0.6
+└── polymer#1.1.3
+
+iron-icon#1.0.4 lib\iron-icon
+├── iron-flex-layout#1.0.3
+├── iron-meta#1.0.3
+└── polymer#1.1.3
+
+iron-input#1.0.6 lib\iron-input
+├── iron-validatable-behavior#1.0.4
+└── polymer#1.1.3
+
+iron-form#1.0.9 lib\iron-form
+├── iron-ajax#1.0.4
+└── polymer#1.1.3
+
+iron-menu-behavior#1.0.3 lib\iron-menu-behavior
+├── iron-a11y-keys-behavior#1.0.5
+├── iron-selector#1.0.3
+└── polymer#1.1.3
+
+iron-overlay-behavior#1.0.6 lib\iron-overlay-behavior
+├── iron-fit-behavior#1.0.3
+├── iron-resizable-behavior#1.0.2
+└── polymer#1.1.3
+
+iron-test-helpers#1.0.3 lib\iron-test-helpers
+└── polymer#1.1.3
+
+iron-validatable-behavior#1.0.4 lib\iron-validatable-behavior
+├── iron-meta#1.0.3
+└── polymer#1.1.3
+
+iron-doc-viewer#1.0.5 lib\iron-doc-viewer
+├── marked-element#1.1.1
+├── paper-button#1.0.6
+├── paper-styles#1.0.11
+├── polymer#1.1.3
+└── prism-element#1.0.2
+
+gold-cc-cvc-input#1.0.4 lib\gold-cc-cvc-input
+├── iron-form-element-behavior#1.0.4
+├── iron-icon#1.0.4
+├── paper-input#1.0.14
+├── paper-styles#1.0.11
+└── polymer#1.1.3
+
+marked-element#1.1.1 lib\marked-element
+├── marked#0.3.5
+└── polymer#1.1.3
+
+iron-selector#1.0.3 lib\iron-selector
+└── polymer#1.1.3
+
+gold-phone-input#1.0.6 lib\gold-phone-input
+├── iron-form-element-behavior#1.0.4
+├── iron-input#1.0.6
+├── paper-input#1.0.14
+├── paper-styles#1.0.11
+└── polymer#1.1.3
+
+gold-zip-input#1.0.3 lib\gold-zip-input
+├── iron-form-element-behavior#1.0.4
+├── iron-icon#1.0.4
+├── iron-validator-behavior#1.0.1
+├── paper-input#1.0.14
+├── paper-styles#1.0.11
+└── polymer#1.1.3
+
+gold-email-input#1.0.4 lib\gold-email-input
+├── iron-form-element-behavior#1.0.4
+├── iron-icon#1.0.4
+├── paper-input#1.0.14
+├── paper-styles#1.0.11
+└── polymer#1.1.3
+
+gold-cc-expiration-input#1.0.5 lib\gold-cc-expiration-input
+├── iron-form-element-behavior#1.0.4
+├── iron-validatable-behavior#1.0.4
+├── iron-validator-behavior#1.0.1
+├── paper-input#1.0.14
+├── paper-styles#1.0.11
+└── polymer#1.1.3
+
+paper-material#1.0.2 lib\paper-material
+├── paper-styles#1.0.11
+└── polymer#1.1.3
+
+platinum-push-messaging#1.0.3 lib\platinum-push-messaging
+├── polymer#1.1.3
+└── promise-polyfill#1.0.0
+
+paper-ripple#1.0.2 lib\paper-ripple
+├── iron-a11y-keys-behavior#1.0.5
+└── polymer#1.1.3
+
+gold-cc-input#1.0.6 lib\gold-cc-input
+├── iron-form-element-behavior#1.0.4
+├── iron-icon#1.0.4
+├── iron-validator-behavior#1.0.1
+├── paper-input#1.0.14
+├── paper-styles#1.0.11
+└── polymer#1.1.3
+
+paper-header-panel#1.0.5 lib\paper-header-panel
+├── iron-flex-layout#1.0.3
+└── polymer#1.1.3
+
+paper-dropdown-menu#1.0.2 lib\paper-dropdown-menu
+├── iron-a11y-keys-behavior#1.0.5
+├── iron-icon#1.0.4
+├── iron-icons#1.0.3
+├── paper-input#1.0.14
+├── paper-menu-button#1.0.3
+├── paper-ripple#1.0.2
+├── paper-styles#1.0.11
+└── polymer#1.1.3
+
+paper-badge#1.0.3 lib\paper-badge
+├── iron-resizable-behavior#1.0.2
+├── paper-styles#1.0.11
+└── polymer#1.1.3
+
+paper-checkbox#1.0.10 lib\paper-checkbox
+├── iron-checked-element-behavior#1.0.2
+├── paper-behaviors#1.0.3
+├── paper-ripple#1.0.2
+├── paper-styles#1.0.11
+└── polymer#1.1.3
+
+paper-card#1.0.5 lib\paper-card
+├── iron-flex-layout#1.0.3
+├── paper-material#1.0.2
+└── polymer#1.1.3
+
+promise-polyfill#1.0.0 lib\promise-polyfill
+└── polymer#1.1.3
+
+paper-button#1.0.6 lib\paper-button
+├── iron-flex-layout#1.0.3
+├── paper-behaviors#1.0.3
+├── paper-material#1.0.2
+├── paper-ripple#1.0.2
+└── polymer#1.1.3
+
+iron-list#1.1.1 lib\iron-list
+├── iron-resizable-behavior#1.0.2
+└── polymer#1.1.3
+
+paper-fab#1.0.4 lib\paper-fab
+├── iron-flex-layout#1.0.3
+├── iron-icon#1.0.4
+├── iron-icons#1.0.3
+├── paper-behaviors#1.0.3
+├── paper-material#1.0.2
+├── paper-ripple#1.0.2
+├── paper-styles#1.0.11
+└── polymer#1.1.3
+
+paper-progress#1.0.5 lib\paper-progress
+├── iron-range-behavior#1.0.2
+├── paper-styles#1.0.11
+└── polymer#1.1.3
+
+paper-input#1.0.14 lib\paper-input
+├── iron-autogrow-textarea#1.0.5
+├── iron-behaviors#1.0.8
+├── iron-form-element-behavior#1.0.4
+├── iron-input#1.0.6
+├── paper-styles#1.0.11
+└── polymer#1.1.3
+
+paper-menu-button#1.0.3 lib\paper-menu-button
+├── iron-a11y-keys-behavior#1.0.5
+├── iron-behaviors#1.0.8
+├── iron-dropdown#1.0.6
+├── neon-animation#1.0.6
+├── paper-material#1.0.2
+├── paper-styles#1.0.11
+└── polymer#1.1.3
+
+paper-menu#1.1.0 lib\paper-menu
+├── iron-behaviors#1.0.8
+├── iron-collapse#1.0.3
+├── iron-menu-behavior#1.0.3
+├── paper-styles#1.0.11
+└── polymer#1.1.3
+
+webcomponentsjs#0.7.12 lib\webcomponentsjs
+
+paper-slider#1.0.6 lib\paper-slider
+├── iron-a11y-keys-behavior#1.0.5
+├── iron-behaviors#1.0.8
+├── iron-flex-layout#1.0.3
+├── iron-form-element-behavior#1.0.4
+├── paper-behaviors#1.0.3
+├── paper-input#1.0.14
+├── paper-progress#1.0.5
+├── paper-ripple#1.0.2
+├── paper-styles#1.0.11
+└── polymer#1.1.3
+
+paper-toggle-button#1.0.8 lib\paper-toggle-button
+├── iron-checked-element-behavior#1.0.2
+├── paper-behaviors#1.0.3
+├── paper-ripple#1.0.2
+├── paper-styles#1.0.11
+└── polymer#1.1.3
+
+paper-radio-button#1.0.8 lib\paper-radio-button
+├── iron-checked-element-behavior#1.0.2
+├── paper-behaviors#1.0.3
+├── paper-ripple#1.0.2
+├── paper-styles#1.0.11
+└── polymer#1.1.3
+
+paper-tabs#1.0.2 lib\paper-tabs
+├── iron-behaviors#1.0.8
+├── iron-flex-layout#1.0.3
+├── iron-icon#1.0.4
+├── iron-iconset-svg#1.0.4
+├── iron-menu-behavior#1.0.3
+├── iron-resizable-behavior#1.0.2
+├── paper-icon-button#1.0.3
+├── paper-ripple#1.0.2
+├── paper-styles#1.0.11
+└── polymer#1.1.3
+
+paper-tooltip#1.1.0 lib\paper-tooltip
+├── neon-animation#1.0.6
+├── paper-styles#1.0.11
+└── polymer#1.1.3
+
+hydrolysis#1.15.4 lib\hydrolysis
+
+iron-checked-element-behavior#1.0.2 lib\iron-checked-element-behavior
+├── iron-form-element-behavior#1.0.4
+├── iron-validatable-behavior#1.0.4
+└── polymer#1.1.3
+
+paper-scroll-header-panel#1.0.8 lib\paper-scroll-header-panel
+├── iron-resizable-behavior#1.0.2
+├── paper-toolbar#1.0.4
+└── polymer#1.1.3
+```
\ No newline at end of file
diff --git a/lib/firebase-element/.bower.json b/lib/firebase-element/.bower.json
index 00bb4fdb..7a85df10 100644
--- a/lib/firebase-element/.bower.json
+++ b/lib/firebase-element/.bower.json
@@ -1,6 +1,7 @@
{
"name": "firebase-element",
- "version": "1.0.3",
+ "description": "An element that makes it easy to declaratively use the powerful firebase backend",
+ "version": "1.0.6",
"private": true,
"main": [
"firebase-collection.html",
@@ -21,11 +22,11 @@
"web-component-tester": "*"
},
"homepage": "https://github.com/GoogleWebComponents/firebase-element",
- "_release": "1.0.3",
+ "_release": "1.0.6",
"_resolution": {
"type": "version",
- "tag": "v1.0.3",
- "commit": "6641f76631cc815a96e3e001fe1cd4e5d60556f0"
+ "tag": "v1.0.6",
+ "commit": "e0526a5a62c41b074e41ab3b0a0d21fb0b43ded0"
},
"_source": "git://github.com/GoogleWebComponents/firebase-element.git",
"_target": "^1.0.0",
diff --git a/lib/firebase-element/bower.json b/lib/firebase-element/bower.json
index 296b1a70..6e59289d 100644
--- a/lib/firebase-element/bower.json
+++ b/lib/firebase-element/bower.json
@@ -1,6 +1,7 @@
{
"name": "firebase-element",
- "version": "1.0.3",
+ "description": "An element that makes it easy to declaratively use the powerful firebase backend",
+ "version": "1.0.6",
"private": true,
"main": ["firebase-collection.html","firebase-document.html","firebase-auth.html","firebase-query-behavior.html"],
"dependencies": {
diff --git a/lib/firebase-element/firebase-collection.html b/lib/firebase-element/firebase-collection.html
index 8ecedf4a..64de6f60 100644
--- a/lib/firebase-element/firebase-collection.html
+++ b/lib/firebase-element/firebase-collection.html
@@ -230,7 +230,7 @@ [[dinosaur.__firebaseKey__]]
'firebase-child-added': '_onFirebaseChildAdded',
'firebase-child-removed': '_onFirebaseChildRemoved',
'firebase-child-changed': '_onFirebaseChildChanged',
- 'firebase-child-moved': '_onFirebaseChildChanged',
+ 'firebase-child-moved': '_onFirebaseChildMoved',
},
/**
@@ -326,8 +326,6 @@ [[dinosaur.__firebaseKey__]]
this.remove(removed);
}, this);
- this.data.splice(splice.index, splice.addedCount);
-
added.forEach(function(added) {
this.add(added);
}, this);
@@ -514,18 +512,22 @@ [[dinosaur.__firebaseKey__]]
var value = this._valueMap[key];
var previousChild;
var newIndex;
+ var currentIndex;
+ var previousIndex;
if (!value) {
this._error('Received firebase-child-moved event for unknown child "' + key + '"');
return;
}
- previousValue = event.detail.previousChildName != null ?
+ previousChild = event.detail.previousChildName != null ?
this._valueMap[event.detail.previousChildName] : null;
- newIndex = previousValue != null ?
- this.data.indexOf(previousValue) + 1 : 0;
- this.splice('data', this.data.indexOf(value), 1);
+ currentIndex = this.data.indexOf(value);
+ previousIndex = previousChild ? this.data.indexOf(previousChild) : -1;
+ newIndex = currentIndex > previousIndex ? previousIndex + 1 : previousIndex;
+
+ this.splice('data', currentIndex, 1);
this.splice('data', newIndex, 0, value);
});
}
diff --git a/lib/firebase-element/firebase-document.html b/lib/firebase-element/firebase-document.html
index afc5b747..de4739f6 100644
--- a/lib/firebase-element/firebase-document.html
+++ b/lib/firebase-element/firebase-document.html
@@ -23,7 +23,7 @@
+ data="{{dinosaurs}}">
In the above example, if the `dinosaurs` object is data-bound elsewhere via
Polymer's data-binding system, changes to the document will be automatically
diff --git a/lib/firebase-element/firebase-query-behavior.html b/lib/firebase-element/firebase-query-behavior.html
index 57ab5a04..bfba3529 100644
--- a/lib/firebase-element/firebase-query-behavior.html
+++ b/lib/firebase-element/firebase-query-behavior.html
@@ -74,6 +74,9 @@
},
_applyRemoteDataChange: function(applyChange) {
+ if (this._applyingLocalDataChanges) {
+ return;
+ }
this._receivingRemoteChanges = true;
applyChange.call(this);
this._receivingRemoteChanges = false;
@@ -84,7 +87,9 @@
return;
}
+ this._applyingLocalDataChanges = true;
this._applyLocalDataChanges(changes);
+ this._applyingLocalDataChanges = false;
},
_queryChanged: function(query, oldQuery) {
@@ -144,7 +149,7 @@
},
_onQueryChildMoved: function(childSnapshot, previousChildName) {
- this._log('Firebase Event: "child_changed"', childSnapshot, previousChildName);
+ this._log('Firebase Event: "child_moved"', childSnapshot, previousChildName);
this.fire('firebase-child-moved', {
childSnapshot: childSnapshot,
previousChildName: previousChildName
diff --git a/lib/firebase-element/test/firebase-collection.html b/lib/firebase-element/test/firebase-collection.html
index 4db473bc..8aecae41 100644
--- a/lib/firebase-element/test/firebase-collection.html
+++ b/lib/firebase-element/test/firebase-collection.html
@@ -64,10 +64,51 @@
+
+
+
+
+
+
+ [[item.value]]
+
+
+
+
+
+
+
+
+
@@ -65,29 +66,43 @@
test('valid input is ok', function() {
var input = fixture('required');
input.value='123';
- input._onInput();
forceXIfStamp(input);
+
var container = Polymer.dom(input.root).querySelector('paper-input-container');
assert.ok(container, 'paper-input-container exists');
assert.isFalse(container.invalid);
+
+ var error = Polymer.dom(input.root).querySelector('paper-input-error');
+ assert.ok(error, 'paper-input-error exists');
+ assert.equal(getComputedStyle(error).visibility, 'hidden', 'error is visibility:hidden');
});
test('invalid input is not ok', function() {
var input = fixture('required');
input.value='13';
- input._onInput();
forceXIfStamp(input);
+
var container = Polymer.dom(input.root).querySelector('paper-input-container');
assert.ok(container, 'paper-input-container exists');
assert.isTrue(container.invalid);
+
+ var error = Polymer.dom(input.root).querySelector('paper-input-error');
+ assert.ok(error, 'paper-input-error exists');
+ assert.notEqual(getComputedStyle(error).visibility, 'hidden', 'error is not visibility:hidden');
});
- test('empty required input shows error', function() {
+ test('empty required input shows error on blur', function() {
var input = fixture('required');
forceXIfStamp(input);
+
var error = Polymer.dom(input.root).querySelector('paper-input-error');
assert.ok(error, 'paper-input-error exists');
- assert.notEqual(getComputedStyle(error).display, 'none', 'error is not display:none');
+
+ assert.equal(getComputedStyle(error).visibility, 'hidden', 'error is visibility:hidden');
+ MockInteractions.focus(input);
+ MockInteractions.blur(input);
+
+ assert.notEqual(getComputedStyle(error).visibility, 'hidden', 'error is not visibility:hidden');
});
test('invalid input shows error message after manual validation', function() {
@@ -97,9 +112,9 @@
assert.ok(error, 'paper-input-error exists');
// The error message is only displayed after manual validation.
- assert.equal(getComputedStyle(error).display, 'none', 'error is not display:none');
+ assert.equal(getComputedStyle(error).visibility, 'hidden', 'error is visibility:hidden');
input.validate();
- assert.notEqual(getComputedStyle(error).display, 'none', 'error is not display:none');
+ assert.notEqual(getComputedStyle(error).visibility, 'hidden', 'error is not visibility:hidden');
});
});
diff --git a/lib/gold-cc-expiration-input/.bower.json b/lib/gold-cc-expiration-input/.bower.json
index 4fbf164a..6ee3d14c 100644
--- a/lib/gold-cc-expiration-input/.bower.json
+++ b/lib/gold-cc-expiration-input/.bower.json
@@ -1,6 +1,6 @@
{
"name": "gold-cc-expiration-input",
- "version": "1.0.4",
+ "version": "1.0.5",
"description": "A validating input for a credit card expiration date",
"authors": [
"The Polymer Authors"
@@ -37,11 +37,11 @@
"web-component-tester": "*",
"webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
},
- "_release": "1.0.4",
+ "_release": "1.0.5",
"_resolution": {
"type": "version",
- "tag": "v1.0.4",
- "commit": "bae2611413800ca8bbc6485d8245a171b120e98f"
+ "tag": "v1.0.5",
+ "commit": "0ee43e195427f8bba4d7f5498581901a0676f5de"
},
"_source": "git://github.com/PolymerElements/gold-cc-expiration-input.git",
"_target": "^1.0.0",
diff --git a/lib/gold-cc-expiration-input/bower.json b/lib/gold-cc-expiration-input/bower.json
index b267cb21..23a1b1bc 100644
--- a/lib/gold-cc-expiration-input/bower.json
+++ b/lib/gold-cc-expiration-input/bower.json
@@ -1,6 +1,6 @@
{
"name": "gold-cc-expiration-input",
- "version": "1.0.4",
+ "version": "1.0.5",
"description": "A validating input for a credit card expiration date",
"authors": [
"The Polymer Authors"
diff --git a/lib/gold-cc-expiration-input/date-input.html b/lib/gold-cc-expiration-input/date-input.html
index 3c3f3ff3..c0493347 100644
--- a/lib/gold-cc-expiration-input/date-input.html
+++ b/lib/gold-cc-expiration-input/date-input.html
@@ -16,10 +16,6 @@
-
- [[label]]
+ [[label]]
+[[countryCode]]
@@ -99,6 +106,7 @@
inputmode$="[[inputmode]]"
placeholder$="[[placeholder]]"
readonly$="[[readonly]]"
+ maxlength$="[[maxlength]]"
size$="[[size]]">
@@ -147,13 +155,23 @@
type: String,
value: 'XXX-XXX-XXXX',
observer: '_phoneNumberPatternChanged'
+ },
+
+ value: {
+ observer: '_onValueChanged'
}
},
observers: [
- '_computeValue(value)'
+ '_onFocusedChanged(focused)'
],
+ ready: function() {
+ // If there's an initial input, validate it.
+ if (this.value)
+ this._handleAutoValidate();
+ },
+
_phoneNumberPatternChanged: function() {
// Transform the pattern into a regex the iron-input understands.
var regex = '';
@@ -161,15 +179,18 @@
regex = regex.replace(/X/gi, '\\d');
regex = regex.replace(/\+/g, '\\+');
this.$.input.pattern = regex;
-
- if (this.autoValidate) {
- this.$.container.invalid = !this.$.input.validate();
- }
},
- _computeValue: function(value) {
+ /**
+ * A handler that is called on input
+ */
+ _onValueChanged: function(value, oldValue) {
+ // The initial property assignment is handled by `ready`.
+ if (oldValue == undefined)
+ return;
+
var start = this.$.input.selectionStart;
- var previousCharADash = this.value.charAt(start - 1) == '-';
+ var previousCharADash = value ? this.value.charAt(start - 1) == '-' : false;
// Remove any already-applied formatting.
value = value.replace(/-/g, '');
@@ -200,8 +221,34 @@
this.$.input.selectionStart = start + 1;
this.$.input.selectionEnd = start + 1;
}
- }
+ this._handleAutoValidate();
+ },
+
+ /**
+ * Overidden from Polymer.PaperInputBehavior.
+ */
+ validate: function() {
+ // Update the container and its addons (i.e. the custom error-message).
+ var valid = this.$.input.validate()
+ this.$.container.invalid = !valid;
+ this.$.container.updateAddons({
+ inputElement: this.$.input,
+ value: this.value,
+ invalid: !valid
+ });
+
+ return valid;
+ },
+
+ /**
+ * Overidden from Polymer.IronControlState.
+ */
+ _onFocusedChanged: function(focused) {
+ if (!focused) {
+ this._handleAutoValidate();
+ }
+ }
})
})();
diff --git a/lib/gold-phone-input/test/basic.html b/lib/gold-phone-input/test/basic.html
index 60168636..c7fecb12 100644
--- a/lib/gold-phone-input/test/basic.html
+++ b/lib/gold-phone-input/test/basic.html
@@ -23,6 +23,7 @@
+
@@ -47,7 +48,7 @@
suite('basic', function() {
test('input is spaced out correctly', function() {
var input = fixture('basic');
- input.value='1231112222';
+ input.value ='1231112222';
assert.equal(input.value, '123-111-2222');
});
@@ -59,6 +60,10 @@
var container = Polymer.dom(input.root).querySelector('paper-input-container');
assert.ok(container, 'paper-input-container exists');
assert.isTrue(container.invalid);
+
+ var error = Polymer.dom(input.root).querySelector('paper-input-error');
+ assert.ok(error, 'paper-input-error exists');
+ assert.notEqual(getComputedStyle(error).visibility, 'hidden', 'error is not visibility:hidden');
});
test('valid input is ok', function() {
@@ -69,24 +74,38 @@
var container = Polymer.dom(input.root).querySelector('paper-input-container');
assert.ok(container, 'paper-input-container exists');
assert.isFalse(container.invalid);
+
+ var error = Polymer.dom(input.root).querySelector('paper-input-error');
+ assert.ok(error, 'paper-input-error exists');
+ assert.equal(getComputedStyle(error).visibility, 'hidden', 'error is visibility:hidden');
});
- test('empty required input shows error', function() {
+ test('empty required input shows error on blur', function(done) {
var input = fixture('required');
forceXIfStamp(input);
var error = Polymer.dom(input.root).querySelector('paper-input-error');
assert.ok(error, 'paper-input-error exists');
- assert.notEqual(getComputedStyle(error).display, 'none', 'error is not display:none');
+
+ assert.equal(getComputedStyle(error).visibility, 'hidden', 'error is visibility:hidden');
+
+ input.addEventListener('blur', function(event) {
+ assert(!input.focused, 'input is blurred');
+ assert.notEqual(getComputedStyle(error).visibility, 'hidden', 'error is not visibility:hidden');
+ done();
+ });
+ MockInteractions.focus(input.inputElement);
+ MockInteractions.blur(input.inputElement);
});
test('caret position is preserved', function() {
var input = fixture('required');
var ironInput = Polymer.dom(input.root).querySelector('input[is="iron-input"]');
- input.value='111-111-1';
+
+ input.value ='111-111';
ironInput.selectionStart = 2;
ironInput.selectionEnd = 2;
- input._computeValue('112-111-11');
+ input._onValueChanged('111-111-1', '111-111');
assert.equal(ironInput.selectionStart, 2, 'selectionStart is preserved');
assert.equal(ironInput.selectionEnd, 2, 'selectionEnd is preserved');
@@ -108,7 +127,6 @@
});
-
});
diff --git a/lib/gold-zip-input/.bower.json b/lib/gold-zip-input/.bower.json
index 703f1f17..12087e45 100644
--- a/lib/gold-zip-input/.bower.json
+++ b/lib/gold-zip-input/.bower.json
@@ -1,6 +1,6 @@
{
"name": "gold-zip-input",
- "version": "1.0.2",
+ "version": "1.0.3",
"description": "An input field for a zip code",
"authors": [
"The Polymer Authors"
@@ -37,11 +37,11 @@
"web-component-tester": "*",
"webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
},
- "_release": "1.0.2",
+ "_release": "1.0.3",
"_resolution": {
"type": "version",
- "tag": "v1.0.2",
- "commit": "9df86547cdcd412d7d9ece84bfb06be5e9f160f1"
+ "tag": "v1.0.3",
+ "commit": "db94f16b231c13fd86eb5dbfa71cf6aa8a7529f9"
},
"_source": "git://github.com/PolymerElements/gold-zip-input.git",
"_target": "^1.0.0",
diff --git a/lib/gold-zip-input/bower.json b/lib/gold-zip-input/bower.json
index 1093a8d4..f4ae0e68 100644
--- a/lib/gold-zip-input/bower.json
+++ b/lib/gold-zip-input/bower.json
@@ -1,6 +1,6 @@
{
"name": "gold-zip-input",
- "version": "1.0.2",
+ "version": "1.0.3",
"description": "An input field for a zip code",
"authors": [
"The Polymer Authors"
diff --git a/lib/gold-zip-input/gold-zip-input.html b/lib/gold-zip-input/gold-zip-input.html
index 971df98f..013f5fd5 100644
--- a/lib/gold-zip-input/gold-zip-input.html
+++ b/lib/gold-zip-input/gold-zip-input.html
@@ -125,7 +125,7 @@
_computeValue: function(value) {
var start = this.$.input.selectionStart;
- var previousCharADash = this.value.charAt(start - 1) == '-';
+ var previousCharADash = this.value ? this.value.charAt(start - 1) == '-' : false;
// Remove any already-applied formatting.
value = value.replace(/-/g, '');
diff --git a/lib/google-analytics/.bower.json b/lib/google-analytics/.bower.json
index 4f7e137a..f9af6268 100644
--- a/lib/google-analytics/.bower.json
+++ b/lib/google-analytics/.bower.json
@@ -1,6 +1,6 @@
{
"name": "google-analytics",
- "version": "1.0.2",
+ "version": "1.2.0",
"description": "Encapsulates Google Analytics dashboard features into web components",
"homepage": "https://googlewebcomponents.github.io/google-analytics",
"authors": [
@@ -30,11 +30,11 @@
"devDependencies": {
"iron-component-page": "PolymerElements/iron-component-page#^1.0.2"
},
- "_release": "1.0.2",
+ "_release": "1.2.0",
"_resolution": {
"type": "version",
- "tag": "v1.0.2",
- "commit": "c6af2b375596f235406af06a220cf8a6cc08c6d4"
+ "tag": "v1.2.0",
+ "commit": "6cd444e91c4b1befb34e3d1dc516163c71f42262"
},
"_source": "git://github.com/GoogleWebComponents/google-analytics.git",
"_target": "^1.0.0",
diff --git a/lib/google-analytics/README.md b/lib/google-analytics/README.md
index a333c731..038bb4c9 100644
--- a/lib/google-analytics/README.md
+++ b/lib/google-analytics/README.md
@@ -1,4 +1,4 @@
google-analytics
================
-See the [component page](https://googlewebcomponents.github.io/google-analytics) for more information.
+See the [component page](https://elements.polymer-project.org/elements/google-analytics) for more information.
diff --git a/lib/google-analytics/bower.json b/lib/google-analytics/bower.json
index f15db7bb..d59166ab 100644
--- a/lib/google-analytics/bower.json
+++ b/lib/google-analytics/bower.json
@@ -1,6 +1,6 @@
{
"name": "google-analytics",
- "version": "1.0.2",
+ "version": "1.2.0",
"description": "Encapsulates Google Analytics dashboard features into web components",
"homepage": "https://googlewebcomponents.github.io/google-analytics",
"authors": [
diff --git a/lib/google-analytics/demo/demo.css b/lib/google-analytics/demo/demo.css
deleted file mode 100644
index 0ef50699..00000000
--- a/lib/google-analytics/demo/demo.css
+++ /dev/null
@@ -1,150 +0,0 @@
-body {
- background: #eee;
- color: #222;
- font: 13px/1.3 'Open Sans', sans-serif;
- margin: 0;
- padding: 0;
-}
-
-header {
- background-color: #333;
- box-sizing: border-box;
- color: #eee;
- display: table;
- padding: 1.2em 1.5em;
- width: 100%;
-}
-header > h1 {
- display: table-cell;
- font-size: 1.667em;
- font-weight: 400;
- margin: 0;
- vertical-align: middle;
- width: 100%;
-}
-header > h1 em {
- font-weight: 300;
- font-size: .8em;
- font-style: normal;
- margin-left: .5em;
- opacity: .6;
-}
-header > google-signin {
- display: table-cell;
- vertical-align: middle;
- white-space: nowrap;
-}
-
-/**
- * .control styles.
- */
- google-analytics-view-selector::shadow .control,
- google-analytics-date-selector::shadow .control {
- display: inline-block;
- margin: 0 1em 1.5em 0;
-}
-google-analytics-view-selector::shadow .control:last-child,
-google-analytics-date-selector::shadow .control:last-child {
- margin-right: 0;
-}
-google-analytics-view-selector::shadow .control > label,
-google-analytics-date-selector::shadow .control > label {
- display: block;
- padding: 0 0 .4em 2px;
-}
-
-/**
- * Common styles.
- */
-google-analytics-view-selector,
-google-analytics-date-selector {
- border: 1px solid #ccc;
- border-radius: 4px;
- background: #fff;
- float: left;
- margin: 0 1.5em 1.5em 0;
- padding: 1.5em 1.5em 0;
-}
-google-analytics-chart {
- border: 1px solid #ccc;
- border-radius: 4px;
- background: #fff;
- float: left;
- margin: 0 1.5em 1.5em 0;
- padding: 1.5em;
- position: relative;
- transition: opacity .2s ease;
-}
-google-analytics-chart:not([rendered]) {
- display: none;
-}
-
-google-analytics-chart:first-of-type {
- clear: both;
-}
-google-analytics-chart h3 {
- border: 0;
- font-size: 1.3em;
- font-weight: 300;
- margin: 0;
- padding: 0;
-}
-
-
-/**
- * styles.
- */
-google-analytics-dashboard {
- display: block;
- padding: 1.5em;
- transition: opacity .3s ease;
-}
-google-analytics-dashboard:not([authorized]) {
- opacity: .4;
- pointer-events: none;
-}
-
-/**
- * styles.
- */
-google-analytics-view-selector::shadow label {
- font-weight: bold;
-}
-google-analytics-view-selector::shadow select {
- border: 1px solid #ccc;
- border-radius: 4px;
- box-sizing: border-box;
- height: 34px;
- line-height: 20px;
- min-width: 160px;
- padding: 6px 12px;
-}
-google-analytics-view-selector::shadow select:focus {
- border-color: #4d90fe;
- outline: 0;
-}
-google-analytics-view-selector::shadow label {
- font-weight: bold;
-}
-
-/**
- * styles.
- */
-google-analytics-date-selector::shadow label {
- font-weight: bold;
-}
-google-analytics-date-selector::shadow input {
- border: 1px solid #ccc;
- border-radius: 4px;
- box-sizing: border-box;
- font: inherit;
- font-weight: 400;
- height: 34px;
- line-height: 20px;
- min-width: 160px;
- padding: 6px;
-}
-google-analytics-date-selector::shadow input:focus {
- border-color: #4d90fe;
- outline: 0;
-}
diff --git a/lib/google-analytics/demo/index.html b/lib/google-analytics/demo/index.html
index 1400e406..a3ee6b9b 100644
--- a/lib/google-analytics/demo/index.html
+++ b/lib/google-analytics/demo/index.html
@@ -1,5 +1,5 @@
-
+
@@ -8,170 +8,184 @@
+
+
+
+
- Google Analytics Polymer Elements Demo
+ Google Analytics
+ Polymer Elements Demo
-
@@ -203,7 +217,7 @@ Users by Country
metrics="ga:pageviews"
dimensions="ga:browser"
sort="-ga:pageviews"
- max-results="5">
+ max-results="6">
Pageviews by Browser
diff --git a/lib/google-analytics/google-analytics-chart.html b/lib/google-analytics/google-analytics-chart.html
index dc2b1565..666a1640 100644
--- a/lib/google-analytics/google-analytics-chart.html
+++ b/lib/google-analytics/google-analytics-chart.html
@@ -16,14 +16,40 @@
metrics="ga:sessions"
dimensions="ga:country"
sort="-ga:sessions"
- maxResults="5">
+ max-results="5">
@element google-analytics-chart
@demo
+@homepage https://googlewebcomponents.github.io/google-analytics
-->
+
+
+
+
-
diff --git a/lib/google-analytics/google-analytics-dashboard.html b/lib/google-analytics/google-analytics-dashboard.html
index 9d3b3e0e..69a1bd20 100644
--- a/lib/google-analytics/google-analytics-dashboard.html
+++ b/lib/google-analytics/google-analytics-dashboard.html
@@ -1,7 +1,8 @@
+
-
+
+
+
diff --git a/lib/google-analytics/google-analytics-date-selector.html b/lib/google-analytics/google-analytics-date-selector.html
index 890fa0d5..fccb2820 100644
--- a/lib/google-analytics/google-analytics-date-selector.html
+++ b/lib/google-analytics/google-analytics-date-selector.html
@@ -1,4 +1,5 @@
+
+
+
Start Date
@@ -55,7 +69,9 @@
max="{{maxEndDate}}">
+
+
-
diff --git a/lib/google-analytics/google-analytics-loader.html b/lib/google-analytics/google-analytics-loader.html
index 22a56e34..f2fa3c05 100644
--- a/lib/google-analytics/google-analytics-loader.html
+++ b/lib/google-analytics/google-analytics-loader.html
@@ -9,9 +9,12 @@
Loads gapi.client.analytics, and watches user signed-in state.
@element google-analytics-loader
+@demo
@homepage https://googlewebcomponents.github.io/google-analytics
-->
+
+
+
diff --git a/lib/google-analytics/google-analytics-query.html b/lib/google-analytics/google-analytics-query.html
index 30a81d6c..8c5bf3d5 100644
--- a/lib/google-analytics/google-analytics-query.html
+++ b/lib/google-analytics/google-analytics-query.html
@@ -11,22 +11,22 @@
metrics="ga:sessions"
dimensions="ga:country"
sort="-ga:sessions"
- maxResults="5">
+ max-results="5">
@element google-analytics-query
@extends google-analytics-base
-@blurb Element for querying the Google Analytics Core Reporting API.
-@status alpha
@homepage https://googlewebcomponents.github.io/google-analytics
-->
-
+
+
+
-
diff --git a/lib/google-analytics/google-analytics-view-selector.html b/lib/google-analytics/google-analytics-view-selector.html
index 8f3b0266..0b5a5fce 100644
--- a/lib/google-analytics/google-analytics-view-selector.html
+++ b/lib/google-analytics/google-analytics-view-selector.html
@@ -20,20 +20,33 @@
@element google-analytics-view-selector
-@extends google-analytics-base
-@blurb Element for selecting the ids value for Google Analytics queries
-@status alpha
+@demo
@homepage https://googlewebcomponents.github.io/google-analytics
-->
+
+
@@ -67,10 +80,13 @@
+
+
diff --git a/lib/google-apis/.bower.json b/lib/google-apis/.bower.json
index e5adb7d2..b437926a 100644
--- a/lib/google-apis/.bower.json
+++ b/lib/google-apis/.bower.json
@@ -1,6 +1,6 @@
{
"name": "google-apis",
- "version": "1.0.2",
+ "version": "1.1.0",
"description": "Web components to load Google API libraries",
"homepage": "https://googlewebcomponents.github.io/google-apis",
"main": "google-apis.html",
@@ -27,11 +27,11 @@
"devDependencies": {
"iron-component-page": "PolymerElements/iron-component-page#^1.0.0"
},
- "_release": "1.0.2",
+ "_release": "1.1.0",
"_resolution": {
"type": "version",
- "tag": "v1.0.2",
- "commit": "7e8a931dd8ad48adc9d82dfe6e6f8a60b7c946c4"
+ "tag": "1.1.0",
+ "commit": "7fa2ff1da3d6a2bd5891b7441d89fd8ffbf0d83d"
},
"_source": "git://github.com/GoogleWebComponents/google-apis.git",
"_target": "^1.0.0",
diff --git a/lib/google-apis/bower.json b/lib/google-apis/bower.json
index fb83a99f..7f5b1ced 100644
--- a/lib/google-apis/bower.json
+++ b/lib/google-apis/bower.json
@@ -1,6 +1,6 @@
{
"name": "google-apis",
- "version": "1.0.2",
+ "version": "1.1.0",
"description": "Web components to load Google API libraries",
"homepage": "https://googlewebcomponents.github.io/google-apis",
"main": "google-apis.html",
diff --git a/lib/google-apis/google-maps-api.html b/lib/google-apis/google-maps-api.html
index 14598c55..eab4d600 100644
--- a/lib/google-apis/google-maps-api.html
+++ b/lib/google-apis/google-maps-api.html
@@ -16,7 +16,7 @@
#### Example
-
+
diff --git a/lib/google-map/google-map.html b/lib/google-map/google-map.html
index a0ce5d48..0e7643e7 100644
--- a/lib/google-map/google-map.html
+++ b/lib/google-map/google-map.html
@@ -38,7 +38,7 @@
Example - with Google directions, using data-binding inside another Polymer element
-
+
@@ -65,7 +65,7 @@
- }
+ */
+ this.behaviorsByName = {};
+
/**
* A map, keyed by absolute path, of Document metadata.
* @member {Object}
@@ -131,7 +138,7 @@ var Analyzer = function Analyzer(attachAST,
this.html = {};
this._parsedDocuments = {};
-
+
/**
* A map, keyed by path, of HTML document ASTs.
* @type {Object}
@@ -305,7 +312,7 @@ Analyzer.prototype._processScript = function _processScript(script, href) {
var parsedJs;
if (!src) {
try {
- parsedJs = jsParse(script.childNodes[0].value);
+ parsedJs = jsParse((script.childNodes.length) ? script.childNodes[0].value : '');
} catch (err) {
// Figure out the correct line number for the error.
var line = 0;
@@ -342,7 +349,9 @@ Analyzer.prototype._processScript = function _processScript(script, href) {
if (parsedJs.behaviors) {
parsedJs.behaviors.forEach(function(behavior){
behavior.contentHref = href;
- });
+ this.behaviorsByName[behavior.is] = behavior;
+ this.behaviorsByName[behavior.symbol] = behavior;
+ }.bind(this));
this.behaviors = this.behaviors.concat(parsedJs.behaviors);
}
return parsedJs;
@@ -417,6 +426,38 @@ Analyzer.prototype._getDependencies = function _getDependencies(href, found, tra
});
};
+function matchesDocumentFolder(descriptor, href) {
+ if (!descriptor.contentHref) {
+ return false;
+ }
+ var descriptorDoc = url.parse(descriptor.contentHref);
+ if (!descriptorDoc || !descriptorDoc.pathname) {
+ return false;
+ }
+ var searchDoc = url.parse(href);
+ if (!searchDoc || !searchDoc.pathname) {
+ return false;
+ }
+ var searchPath = searchDoc.pathname;
+ var lastSlash = searchPath.lastIndexOf("/");
+ if (lastSlash > 0) {
+ searchPath = searchPath.slice(0, lastSlash);
+ }
+ return descriptorDoc.pathname.startsWith(searchPath);
+}
+
+Analyzer.prototype.elementsForFolder = function elementsForFolder(href) {
+ return this.elements.filter(function(element){
+ return matchesDocumentFolder(element, href);
+ });
+};
+
+Analyzer.prototype.behaviorsForFolder = function behaviorsForFolder(href) {
+ return this.behaviors.filter(function(behavior){
+ return matchesDocumentFolder(behavior, href);
+ });
+};
+
/**
* Returns a promise that resolves to a POJO representation of the import
* tree, in a format that maintains the ordering of the HTML imports spec.
@@ -550,7 +591,7 @@ Analyzer.prototype._inlineImports = function _inlineImports(ast, href, loaded) {
*
* The elements in the loaded document are unmodified from their original
* documents.
- *
+ *
* @param {string} href The document to load.
* @param {Object.=} loaded An object keyed by already loaded documents.
* @return {Promise.}
@@ -607,9 +648,17 @@ Analyzer.prototype.annotate = function annotate() {
this.elements.unshift(featureEl);
this.elementsByTagName[featureEl.is] = featureEl;
}
-
- this.elements.forEach(docs.annotateElement);
- this.behaviors.forEach(docs.annotateElement); // Same shape.
+ var behaviorsByName = this.behaviorsByName;
+ var elementHelper = function(descriptor){
+ docs.annotateElement(descriptor, behaviorsByName);
+ };
+ this.elements.forEach(elementHelper);
+ this.behaviors.forEach(elementHelper); // Same shape.
+ this.behaviors.forEach(function(behavior){
+ if (behavior.is !== behavior.symbol && behavior.symbol) {
+ this.behaviorsByName[behavior.symbol] = undefined;
+ }
+ }.bind(this));
};
function attachDomModule(parsedImport, element) {
@@ -820,7 +869,7 @@ function arrayExpressionToValue(arry) {
for (var i=0; i 0 ? node.declarations[0].init : null;
+ }
+ }
+
+ /**
+ * checks whether an expression is a simple array containing only member
+ * expressions or identifiers.
+ */
+ function isSimpleBehaviorArray(expression) {
+ if (!expression || expression.type !== 'ArrayExpression') return false;
+ for (var i=0; i < expression.elements.length; i++) {
+ if (expression.elements[i].type !== 'MemberExpression' &&
+ expression.elements[i].type !== 'Identifier') {
+ return false;
+ }
+ }
+ return true;
+ }
+
var visitors = {
/**
@@ -993,20 +1069,14 @@ module.exports = function behaviorFinder() {
// inside the array. Ex:
// Polymer.IronMultiSelectableBehavior = [ {....}, Polymer.IronSelectableBehavior]
// We add these to behaviors array
- var expression;
- switch(node.type) {
- case 'ExpressionStatement':
- expression = node.expression.right;
- break;
- case 'VariableDeclaration':
- expression = node.declarations.length > 0 ? node.declarations[0].init : null;
- break;
- }
+ var expression = behaviorExpression(node);
var chained = [];
if (expression && expression.type === 'ArrayExpression') {
for (var i=0; i < expression.elements.length; i++) {
- if (expression.elements[i].type === 'MemberExpression')
+ if (expression.elements[i].type === 'MemberExpression' ||
+ expression.elements[i].type === 'Identifier') {
chained.push(astValue.expressionToValue(expression.elements[i]));
+ }
}
if (chained.length > 0)
currentBehavior.behaviors = chained;
@@ -1035,8 +1105,9 @@ module.exports = function behaviorFinder() {
}
var name = jsdoc.getTag(currentBehavior.jsdoc, 'polymerBehavior', 'name');
+ currentBehavior.symbol = getName();
if (!name) {
- name = getName();
+ name = currentBehavior.symbol;
}
if (!name) {
console.warn('Unable to determine name for @polymerBehavior:', comment);
@@ -1046,6 +1117,15 @@ module.exports = function behaviorFinder() {
this._parseChainedBehaviors(node);
currentBehavior = mergeBehavior(currentBehavior);
+
+ // Some behaviors are just lists of other behaviors. If this is one then
+ // add it to behaviors right away.
+ if (isSimpleBehaviorArray(behaviorExpression(node))) {
+ // TODO(ajo): Add a test to confirm the presence of `properties`.
+ if (!currentBehavior.properties) currentBehavior.properties = [];
+ behaviors.push(currentBehavior);
+ currentBehavior = null;
+ }
},
/**
@@ -1180,6 +1260,54 @@ function annotateElementHeader(descriptor) {
}
}
+function matchByName(propa, propb) {
+ return propa.name == propb.name;
+}
+
+function copyProperties(from, to, behaviorsByName) {
+ if (from.properties) {
+ from.properties.forEach(function(fromProp){
+ for (var toProp, i = 0; i < to.properties.length; i++) {
+ toProp = to.properties[i];
+ if (fromProp.name === toProp.name) {
+ return;
+ }
+ }
+ var newProp = {__fromBehavior: from.is};
+ if (fromProp.__fromBehavior) {
+ return;
+ }
+ Object.keys(fromProp).forEach(function(propertyField){
+ newProp[propertyField] = fromProp[propertyField];
+ });
+ to.properties.push(newProp);
+ });
+ }
+ if (!from.behaviors) {
+ return;
+ }
+ from.behaviors.forEach(function(behavior){
+ var definedBehavior = behaviorsByName[behavior] || behaviorsByName[behavior.symbol];
+ if (!definedBehavior) {
+ return;
+ }
+ copyProperties(definedBehavior, to, behaviorsByName);
+ });
+}
+
+function mixinBehaviors(descriptor, behaviorsByName) {
+ if (descriptor.behaviors) {
+ descriptor.behaviors.forEach(function(behavior){
+ if (!behaviorsByName[behavior]) {
+ console.warn("Behavior " + behavior + " not found!");
+ return;
+ }
+ var definedBehavior = behaviorsByName[behavior];
+ copyProperties(definedBehavior, descriptor, behaviorsByName);
+ });
+ }
+}
+
/**
* Annotates documentation found within a Hydrolysis element descriptor. Also
* supports behaviors.
@@ -1190,7 +1318,7 @@ function annotateElementHeader(descriptor) {
* @param {Object} descriptor The element descriptor.
* @return {Object} The descriptor that was given.
*/
-function annotateElement(descriptor) {
+function annotateElement(descriptor, behaviorsByName) {
if (!descriptor.desc && descriptor.type === 'element') {
descriptor.desc = _findElementDocs(descriptor.is,
descriptor.domModule,
@@ -1201,8 +1329,11 @@ function annotateElement(descriptor) {
// The `` is too low level for most needs, and it is _not_
// serializable. So we drop it now that we've extracted all the useful bits
// from it.
+ // TODO: Don't worry about serializability here, provide an API to get JSON.
delete descriptor.domModule;
+ mixinBehaviors(descriptor, behaviorsByName);
+
// Descriptors that should have their `desc` properties parsed as JSDoc.
descriptor.properties.forEach(function(property) {
// Feature properties are special, configuration is really just a matter of
@@ -1235,9 +1366,8 @@ function annotateElement(descriptor) {
* @param {Object} descriptor behavior descriptor
* @return {Object} descriptor passed in as param
*/
-function annotateBehavior(descriptor) {
+function annotateBehavior(descriptor, behaviorsByName) {
annotate(descriptor);
-
annotateElementHeader(descriptor);
return descriptor;
@@ -1296,7 +1426,10 @@ function annotateProperty(descriptor, ignoreConfiguration) {
// @default JSDoc wins
var defaultTag = jsdoc.getTag(descriptor.jsdoc, 'default');
if (defaultTag !== null) {
- descriptor.default = (defaultTag.name || '') + (defaultTag.description || '');
+ var newDefault = (defaultTag.name || '') + (defaultTag.description || '');
+ if (newDefault !== '') {
+ descriptor.default = newDefault;
+ }
}
return descriptor;
@@ -1525,7 +1658,6 @@ var elementFinder = function elementFinder() {
if (node.type != 'ArrayExpression') {
return;
}
- element.behaviors = [];
for (var i=0; i
-
-
+
Because the `textarea`'s `value` property is not observable, you should use
-this element's `bind-value` instead for imperative updates. Alternatively, if
-you do set the `textarea`'s `value` imperatively, you must also call `update`
-to notify this element the value has changed.
-
- Example:
- /* preferred, using the example HTML above*/
- a1.bindValue = 'some\ntext';
-
- /* alternatively, */
- t1.value = 'some\ntext';
- a1.update();
+this element's `bind-value` instead for imperative updates.
diff --git a/lib/iron-autogrow-textarea/bower.json b/lib/iron-autogrow-textarea/bower.json
index 810f88f8..e508251f 100644
--- a/lib/iron-autogrow-textarea/bower.json
+++ b/lib/iron-autogrow-textarea/bower.json
@@ -1,6 +1,6 @@
{
"name": "iron-autogrow-textarea",
- "version": "1.0.3",
+ "version": "1.0.5",
"description": "A textarea element that automatically grows with input",
"authors": [
"The Polymer Authors"
diff --git a/lib/iron-autogrow-textarea/iron-autogrow-textarea.html b/lib/iron-autogrow-textarea/iron-autogrow-textarea.html
index cb1cd339..a2fa7270 100644
--- a/lib/iron-autogrow-textarea/iron-autogrow-textarea.html
+++ b/lib/iron-autogrow-textarea/iron-autogrow-textarea.html
@@ -21,9 +21,7 @@
Example:
-
-
-
+
Because the `textarea`'s `value` property is not observable, you should use
this element's `bind-value` instead for imperative updates.
@@ -63,6 +61,7 @@
height: 100%;
font-size: inherit;
font-family: inherit;
+ line-height: inherit;
}
::content textarea:invalid {
@@ -150,8 +149,8 @@
* Bound to the textarea's `autofocus` attribute.
*/
autofocus: {
- type: String,
- value: 'off'
+ type: Boolean,
+ value: false
},
/**
@@ -243,17 +242,6 @@
return valid;
},
- _update: function() {
- this.$.mirror.innerHTML = this._valueForMirror();
-
- var textarea = this.textarea;
- // If the value of the textarea was updated imperatively, then we
- // need to manually update bindValue as well.
- if (textarea && this.bindValue != textarea.value) {
- this.bindValue = textarea.value;
- }
- },
-
_bindValueChanged: function() {
var textarea = this.textarea;
if (!textarea) {
@@ -261,14 +249,13 @@
}
textarea.value = this.bindValue;
- this._update();
+ this.$.mirror.innerHTML = this._valueForMirror();
// manually notify because we don't want to notify until after setting value
this.fire('bind-value-changed', {value: this.bindValue});
},
_onInput: function(event) {
this.bindValue = event.path ? event.path[0].value : event.target.value;
- this._update();
},
_constrain: function(tokens) {
@@ -302,5 +289,5 @@
_computeValue: function() {
return this.bindValue;
}
- })
+ });
diff --git a/lib/iron-behaviors/.bower.json b/lib/iron-behaviors/.bower.json
index 96f7c465..f4993518 100644
--- a/lib/iron-behaviors/.bower.json
+++ b/lib/iron-behaviors/.bower.json
@@ -1,6 +1,6 @@
{
"name": "iron-behaviors",
- "version": "1.0.5",
+ "version": "1.0.8",
"description": "Provides a set of behaviors for the iron elements",
"private": true,
"authors": [
@@ -28,11 +28,11 @@
"webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
},
"homepage": "https://github.com/PolymerElements/iron-behaviors",
- "_release": "1.0.5",
+ "_release": "1.0.8",
"_resolution": {
"type": "version",
- "tag": "v1.0.5",
- "commit": "bdae66f398838eda78c203b3ae979dcb5cd2a60e"
+ "tag": "v1.0.8",
+ "commit": "663ad706b43989f4961d945b8116cf4db346532f"
},
"_source": "git://github.com/PolymerElements/iron-behaviors.git",
"_target": "^1.0.0",
diff --git a/lib/iron-behaviors/bower.json b/lib/iron-behaviors/bower.json
index 5b658f24..2f7f40e0 100644
--- a/lib/iron-behaviors/bower.json
+++ b/lib/iron-behaviors/bower.json
@@ -1,6 +1,6 @@
{
"name": "iron-behaviors",
- "version": "1.0.5",
+ "version": "1.0.8",
"description": "Provides a set of behaviors for the iron elements",
"private": true,
"authors": [
diff --git a/lib/iron-behaviors/iron-button-state.html b/lib/iron-behaviors/iron-button-state.html
index 11c03d76..96a2bfa9 100644
--- a/lib/iron-behaviors/iron-button-state.html
+++ b/lib/iron-behaviors/iron-button-state.html
@@ -50,8 +50,7 @@
type: Boolean,
value: false,
notify: true,
- reflectToAttribute: true,
- observer: '_activeChanged'
+ reflectToAttribute: true
},
/**
@@ -72,6 +71,16 @@
receivedFocusFromKeyboard: {
type: Boolean,
readOnly: true
+ },
+
+ /**
+ * The aria attribute to be set if the button is a toggle and in the
+ * active state.
+ */
+ ariaActiveAttribute: {
+ type: String,
+ value: 'aria-pressed',
+ observer: '_ariaActiveAttributeChanged'
}
},
@@ -82,7 +91,8 @@
},
observers: [
- '_detectKeyboardFocus(focused)'
+ '_detectKeyboardFocus(focused)',
+ '_activeChanged(active, ariaActiveAttribute)'
],
keyBindings: {
@@ -109,8 +119,10 @@
// to emulate native checkbox, (de-)activations from a user interaction fire
// 'change' events
_userActivate: function(active) {
- this.active = active;
- this.fire('change');
+ if (this.active !== active) {
+ this.active = active;
+ this.fire('change');
+ }
},
_eventSourceIsPrimaryInput: function(event) {
@@ -178,11 +190,18 @@
this._changedButtonState();
},
- _activeChanged: function(active) {
+ _ariaActiveAttributeChanged: function(value, oldValue) {
+ if (oldValue && oldValue != value && this.hasAttribute(oldValue)) {
+ this.removeAttribute(oldValue);
+ }
+ },
+
+ _activeChanged: function(active, ariaActiveAttribute) {
if (this.toggles) {
- this.setAttribute('aria-pressed', active ? 'true' : 'false');
+ this.setAttribute(this.ariaActiveAttribute,
+ active ? 'true' : 'false');
} else {
- this.removeAttribute('aria-pressed');
+ this.removeAttribute(this.ariaActiveAttribute);
}
this._changedButtonState();
},
diff --git a/lib/iron-behaviors/iron-control-state.html b/lib/iron-behaviors/iron-control-state.html
index 33e42ea1..8362aa3e 100644
--- a/lib/iron-behaviors/iron-control-state.html
+++ b/lib/iron-behaviors/iron-control-state.html
@@ -60,22 +60,21 @@
],
ready: function() {
- // TODO(sjmiles): ensure read-only property is valued so the compound
- // observer will fire
- if (this.focused === undefined) {
- this._setFocused(false);
- }
this.addEventListener('focus', this._boundFocusBlurHandler, true);
this.addEventListener('blur', this._boundFocusBlurHandler, true);
},
_focusBlurHandler: function(event) {
- var target = event.path ? event.path[0] : event.target;
- if (target === this) {
+ // NOTE(cdata): if we are in ShadowDOM land, `event.target` will
+ // eventually become `this` due to retargeting; if we are not in
+ // ShadowDOM land, `event.target` will eventually become `this` due
+ // to the second conditional which fires a synthetic event (that is also
+ // handled). In either case, we can disregard `event.path`.
+
+ if (event.target === this) {
var focused = event.type === 'focus';
this._setFocused(focused);
} else if (!this.shadowRoot) {
- event.stopPropagation();
this.fire(event.type, {sourceEvent: event}, {
node: this,
bubbles: event.bubbles,
diff --git a/lib/iron-behaviors/test/active-state.html b/lib/iron-behaviors/test/active-state.html
index 983df0e8..0fa6fdcf 100644
--- a/lib/iron-behaviors/test/active-state.html
+++ b/lib/iron-behaviors/test/active-state.html
@@ -60,6 +60,8 @@
MockInteractions.downAndUp(activeTarget, function() {
try {
expect(activeTarget.hasAttribute('active')).to.be.eql(true);
+ expect(activeTarget.hasAttribute('aria-pressed')).to.be.eql(true);
+ expect(activeTarget.getAttribute('aria-pressed')).to.be.eql('true');
done();
} catch (e) {
done(e);
@@ -72,6 +74,8 @@
MockInteractions.downAndUp(activeTarget, function() {
try {
expect(activeTarget.hasAttribute('active')).to.be.eql(false);
+ expect(activeTarget.hasAttribute('aria-pressed')).to.be.eql(true);
+ expect(activeTarget.getAttribute('aria-pressed')).to.be.eql('false');
done();
} catch (e) {
done(e);
@@ -79,6 +83,39 @@
});
});
});
+
+ test('the correct aria attribute is set', function(done) {
+ activeTarget.ariaActiveAttribute = 'aria-checked';
+ MockInteractions.downAndUp(activeTarget, function() {
+ try {
+ expect(activeTarget.hasAttribute('active')).to.be.eql(true);
+ expect(activeTarget.hasAttribute('aria-checked')).to.be.eql(true);
+ expect(activeTarget.getAttribute('aria-checked')).to.be.eql('true');
+ done();
+ } catch (e) {
+ done(e);
+ }
+ });
+ });
+
+ test('the aria attribute is updated correctly', function(done) {
+ activeTarget.ariaActiveAttribute = 'aria-checked';
+ MockInteractions.downAndUp(activeTarget, function() {
+ try {
+ expect(activeTarget.hasAttribute('active')).to.be.eql(true);
+ expect(activeTarget.hasAttribute('aria-checked')).to.be.eql(true);
+ expect(activeTarget.getAttribute('aria-checked')).to.be.eql('true');
+
+ activeTarget.ariaActiveAttribute = 'aria-pressed';
+ expect(activeTarget.hasAttribute('aria-checked')).to.be.eql(false);
+ expect(activeTarget.hasAttribute('aria-pressed')).to.be.eql(true);
+ expect(activeTarget.getAttribute('aria-pressed')).to.be.eql('true');
+ done();
+ } catch (e) {
+ done(e);
+ }
+ });
+ });
});
});
diff --git a/lib/iron-behaviors/test/focused-state.html b/lib/iron-behaviors/test/focused-state.html
index 2d3af69b..6ee67927 100644
--- a/lib/iron-behaviors/test/focused-state.html
+++ b/lib/iron-behaviors/test/focused-state.html
@@ -90,26 +90,24 @@
focusable = fixture('NestedFocusedState');
});
- test('focus/blur events fired on host element', function(done) {
+ test('focus/blur events fired on host element', function() {
var nFocusEvents = 0;
var nBlurEvents = 0;
+
focusable.addEventListener('focus', function() {
nFocusEvents += 1;
- // setTimeout to wait for potentially more, erroneous events
- setTimeout(function() {
- assert.equal(nFocusEvents, 1, 'one focus event fired');
- MockInteractions.blur(focusable.$.input);
- });
+ expect(focusable.focused).to.be.equal(true);
+ MockInteractions.blur(focusable.$.input);
});
focusable.addEventListener('blur', function() {
+ expect(focusable.focused).to.be.equal(false);
nBlurEvents += 1;
- // setTimeout to wait for potentially more, erroneous events
- setTimeout(function() {
- assert.equal(nBlurEvents, 1, 'one blur event fired');
- done();
- });
});
+
MockInteractions.focus(focusable.$.input);
+
+ expect(nBlurEvents).to.be.greaterThan(0);
+ expect(nFocusEvents).to.be.greaterThan(0);
});
});
diff --git a/lib/iron-checked-element-behavior/.bower.json b/lib/iron-checked-element-behavior/.bower.json
new file mode 100644
index 00000000..91392b16
--- /dev/null
+++ b/lib/iron-checked-element-behavior/.bower.json
@@ -0,0 +1,45 @@
+{
+ "name": "iron-checked-element-behavior",
+ "version": "1.0.2",
+ "description": "Implements an element that has a checked attribute and can be added to a form",
+ "authors": "The Polymer Authors",
+ "keywords": [
+ "web-components",
+ "polymer",
+ "iron",
+ "behavior"
+ ],
+ "main": [
+ "iron-checked-element-behavior.html"
+ ],
+ "private": true,
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/iron-checked-element-behavior.git"
+ },
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "homepage": "https://github.com/PolymerElements/iron-checked-element-behavior",
+ "ignore": [],
+ "dependencies": {
+ "polymer": "Polymer/polymer#^1.0.0",
+ "iron-validatable-behavior": "PolymerElements/iron-validatable-behavior#^1.0.0",
+ "iron-form-element-behavior": "PolymerElements/iron-form-element-behavior#^1.0.0"
+ },
+ "devDependencies": {
+ "paper-styles": "PolymerElements/paper-styles#^1.0.0",
+ "paper-button": "PolymerElements/paper-button#^1.0.0",
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
+ "test-fixture": "PolymerElements/test-fixture#^1.0.0",
+ "web-component-tester": "*",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
+ },
+ "_release": "1.0.2",
+ "_resolution": {
+ "type": "version",
+ "tag": "v1.0.2",
+ "commit": "975b9f22ebd89ef457491fcc44cb86b660fc42cd"
+ },
+ "_source": "git://github.com/PolymerElements/iron-checked-element-behavior.git",
+ "_target": "^1.0.0",
+ "_originalSource": "PolymerElements/iron-checked-element-behavior"
+}
\ No newline at end of file
diff --git a/lib/iron-checked-element-behavior/.gitignore b/lib/iron-checked-element-behavior/.gitignore
new file mode 100644
index 00000000..8d4ae253
--- /dev/null
+++ b/lib/iron-checked-element-behavior/.gitignore
@@ -0,0 +1 @@
+bower_components
diff --git a/lib/iron-checked-element-behavior/README.md b/lib/iron-checked-element-behavior/README.md
new file mode 100644
index 00000000..b892ad04
--- /dev/null
+++ b/lib/iron-checked-element-behavior/README.md
@@ -0,0 +1,2 @@
+# iron-checked-element-behavior
+Implements an element that has a checked attribute and can be added to a form
diff --git a/lib/iron-checked-element-behavior/bower.json b/lib/iron-checked-element-behavior/bower.json
new file mode 100644
index 00000000..fd78387e
--- /dev/null
+++ b/lib/iron-checked-element-behavior/bower.json
@@ -0,0 +1,36 @@
+{
+ "name": "iron-checked-element-behavior",
+ "version": "1.0.2",
+ "description": "Implements an element that has a checked attribute and can be added to a form",
+ "authors": "The Polymer Authors",
+ "keywords": [
+ "web-components",
+ "polymer",
+ "iron",
+ "behavior"
+ ],
+ "main": [
+ "iron-checked-element-behavior.html"
+ ],
+ "private": true,
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/PolymerElements/iron-checked-element-behavior.git"
+ },
+ "license": "http://polymer.github.io/LICENSE.txt",
+ "homepage": "https://github.com/PolymerElements/iron-checked-element-behavior",
+ "ignore": [],
+ "dependencies": {
+ "polymer": "Polymer/polymer#^1.0.0",
+ "iron-validatable-behavior": "PolymerElements/iron-validatable-behavior#^1.0.0",
+ "iron-form-element-behavior": "PolymerElements/iron-form-element-behavior#^1.0.0"
+ },
+ "devDependencies": {
+ "paper-styles": "PolymerElements/paper-styles#^1.0.0",
+ "paper-button": "PolymerElements/paper-button#^1.0.0",
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
+ "test-fixture": "PolymerElements/test-fixture#^1.0.0",
+ "web-component-tester": "*",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
+ }
+}
diff --git a/lib/iron-checked-element-behavior/demo/index.html b/lib/iron-checked-element-behavior/demo/index.html
new file mode 100644
index 00000000..788a64f0
--- /dev/null
+++ b/lib/iron-checked-element-behavior/demo/index.html
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+ iron-checked-element-behavior demo
+
+
+
+
+
+
+
+
+
diff --git a/lib/iron-checked-element-behavior/demo/simple-checkbox.html b/lib/iron-checked-element-behavior/demo/simple-checkbox.html
new file mode 100644
index 00000000..fd99c98a
--- /dev/null
+++ b/lib/iron-checked-element-behavior/demo/simple-checkbox.html
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+
+
+
+ {{label}}
+ validate
+
+
+
+
+
diff --git a/lib/iron-checked-element-behavior/index.html b/lib/iron-checked-element-behavior/index.html
new file mode 100644
index 00000000..1975dc5a
--- /dev/null
+++ b/lib/iron-checked-element-behavior/index.html
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+ iron-checked-element-behavior
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/lib/iron-checked-element-behavior/iron-checked-element-behavior.html b/lib/iron-checked-element-behavior/iron-checked-element-behavior.html
new file mode 100644
index 00000000..312db24a
--- /dev/null
+++ b/lib/iron-checked-element-behavior/iron-checked-element-behavior.html
@@ -0,0 +1,106 @@
+
+
+
+
+
+
+
diff --git a/lib/iron-checked-element-behavior/test/basic.html b/lib/iron-checked-element-behavior/test/basic.html
new file mode 100644
index 00000000..af0c5ee3
--- /dev/null
+++ b/lib/iron-checked-element-behavior/test/basic.html
@@ -0,0 +1,125 @@
+
+
+
+
+
+ iron-checked-element-behavior basic tests
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/lib/iron-checked-element-behavior/test/index.html b/lib/iron-checked-element-behavior/test/index.html
new file mode 100644
index 00000000..ec355dcb
--- /dev/null
+++ b/lib/iron-checked-element-behavior/test/index.html
@@ -0,0 +1,34 @@
+
+
+
+
+
+ iron-checked-element-behavior tests
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/lib/iron-checked-element-behavior/test/simple-checkbox.html b/lib/iron-checked-element-behavior/test/simple-checkbox.html
new file mode 100644
index 00000000..95228fae
--- /dev/null
+++ b/lib/iron-checked-element-behavior/test/simple-checkbox.html
@@ -0,0 +1,26 @@
+
+
+
+
+
+
diff --git a/lib/iron-collapse/.bower.json b/lib/iron-collapse/.bower.json
index 2dbabbf0..2eecb886 100644
--- a/lib/iron-collapse/.bower.json
+++ b/lib/iron-collapse/.bower.json
@@ -1,6 +1,6 @@
{
"name": "iron-collapse",
- "version": "1.0.2",
+ "version": "1.0.3",
"description": "Provides a collapsable container",
"authors": [
"The Polymer Authors"
@@ -28,11 +28,11 @@
"paper-styles": "PolymerElements/paper-styles#^1.0.0",
"webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
},
- "_release": "1.0.2",
+ "_release": "1.0.3",
"_resolution": {
"type": "version",
- "tag": "v1.0.2",
- "commit": "0b0228632fa005a57664d3bda8dbe14c89bec942"
+ "tag": "v1.0.3",
+ "commit": "08716fe08adec031ecbcfffd1811d27fea2f82ad"
},
"_source": "git://github.com/PolymerElements/iron-collapse.git",
"_target": "^1.0.0",
diff --git a/lib/iron-collapse/bower.json b/lib/iron-collapse/bower.json
index 4c1a7a4e..f0438df6 100644
--- a/lib/iron-collapse/bower.json
+++ b/lib/iron-collapse/bower.json
@@ -1,6 +1,6 @@
{
"name": "iron-collapse",
- "version": "1.0.2",
+ "version": "1.0.3",
"description": "Provides a collapsable container",
"authors": [
"The Polymer Authors"
diff --git a/lib/iron-collapse/iron-collapse.html b/lib/iron-collapse/iron-collapse.html
index b8f72fd7..96e475fa 100644
--- a/lib/iron-collapse/iron-collapse.html
+++ b/lib/iron-collapse/iron-collapse.html
@@ -14,7 +14,7 @@
`iron-collapse` creates a collapsible block of content. By default, the content
will be collapsed. Use `opened` or `toggle()` to show/hide the content.
- toggle collapse
+ toggle collapse
Content goes here...
@@ -134,21 +134,11 @@
},
show: function() {
- this.toggleClass('iron-collapse-closed', false);
- this.updateSize('auto', false);
- var s = this._calcSize();
- this.updateSize('0px', false);
- // force layout to ensure transition will go
- this.offsetHeight;
- this.updateSize(s, true);
+ this.opened = true;
},
hide: function() {
- this.toggleClass('iron-collapse-opened', false);
- this.updateSize(this._calcSize(), false);
- // force layout to ensure transition will go
- this.offsetHeight;
- this.updateSize('0px', true);
+ this.opened = false;
},
updateSize: function(size, animated) {
@@ -171,7 +161,22 @@
},
_openedChanged: function() {
- this[this.opened ? 'show' : 'hide']();
+ if (this.opened) {
+ this.toggleClass('iron-collapse-closed', false);
+ this.updateSize('auto', false);
+ var s = this._calcSize();
+ this.updateSize('0px', false);
+ // force layout to ensure transition will go
+ /** @suppress {suspiciousCode} */ this.offsetHeight;
+ this.updateSize(s, true);
+ }
+ else {
+ this.toggleClass('iron-collapse-opened', false);
+ this.updateSize(this._calcSize(), false);
+ // force layout to ensure transition will go
+ /** @suppress {suspiciousCode} */ this.offsetHeight;
+ this.updateSize('0px', true);
+ }
this.setAttribute('aria-expanded', this.opened ? 'true' : 'false');
},
diff --git a/lib/iron-doc-viewer/.bower.json b/lib/iron-doc-viewer/.bower.json
index 2a9c7b6d..63aad5c2 100644
--- a/lib/iron-doc-viewer/.bower.json
+++ b/lib/iron-doc-viewer/.bower.json
@@ -1,6 +1,6 @@
{
"name": "iron-doc-viewer",
- "version": "1.0.4",
+ "version": "1.0.5",
"authors": [
"The Polymer Authors"
],
@@ -34,11 +34,11 @@
"webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0",
"web-component-tester": "*"
},
- "_release": "1.0.4",
+ "_release": "1.0.5",
"_resolution": {
"type": "version",
- "tag": "v1.0.4",
- "commit": "65dda889216b4fbf8cf4ab1fef8efc2ad15b59d3"
+ "tag": "v1.0.5",
+ "commit": "9cca1ab5f94cca7906a0c7bfb4eeb9a7c05a562d"
},
"_source": "git://github.com/PolymerElements/iron-doc-viewer.git",
"_target": "^1.0.0",
diff --git a/lib/iron-doc-viewer/bower.json b/lib/iron-doc-viewer/bower.json
index 1569460f..9f377fbc 100644
--- a/lib/iron-doc-viewer/bower.json
+++ b/lib/iron-doc-viewer/bower.json
@@ -1,6 +1,6 @@
{
"name": "iron-doc-viewer",
- "version": "1.0.4",
+ "version": "1.0.5",
"authors": [
"The Polymer Authors"
],
diff --git a/lib/iron-doc-viewer/iron-doc-property.css b/lib/iron-doc-viewer/iron-doc-property.css
index 525f522d..93a72400 100644
--- a/lib/iron-doc-viewer/iron-doc-property.css
+++ b/lib/iron-doc-viewer/iron-doc-property.css
@@ -104,7 +104,7 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
#params marked-element {
display: inline-block;
}
-#params marked-element::shadow #content p {
+#params .markdown-html p {
margin: 0;
}
@@ -114,15 +114,15 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
display: block;
}
-#desc::shadow #content > :first-child {
+#desc .markdown-html > :first-child {
margin-top: 0;
}
-#desc::shadow #content > :last-child {
+#desc .markdown-html > :last-child {
margin-bottom: 0;
}
-#desc::shadow #content #content code {
+#desc .markdown-html code {
@apply(--paper-font-code1);
}
diff --git a/lib/iron-doc-viewer/iron-doc-property.html b/lib/iron-doc-viewer/iron-doc-property.html
index 91aa6738..3abdde09 100644
--- a/lib/iron-doc-viewer/iron-doc-property.html
+++ b/lib/iron-doc-viewer/iron-doc-property.html
@@ -38,15 +38,21 @@
{{item.name}}
{{item.type}}
-
+
+
+
Returns
{{descriptor.return.type}}
-
+
+
+
-
+
+
+
diff --git a/lib/iron-doc-viewer/iron-doc-viewer.css b/lib/iron-doc-viewer/iron-doc-viewer.css
index 7244c313..c4c5d2b0 100644
--- a/lib/iron-doc-viewer/iron-doc-viewer.css
+++ b/lib/iron-doc-viewer/iron-doc-viewer.css
@@ -45,7 +45,7 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
padding: 4px 0;
}
-#summary marked-element::shadow #content pre {
+#summary .markdown-html pre {
background-color: var(--paper-grey-50);
border: solid #e5e5e5;
border-width: 1px 0;
@@ -55,52 +55,52 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
word-wrap: break-word;
}
-#summary marked-element::shadow #content table {
+#summary .markdown-html table {
width: 100%;
border-collapse: collapse;
margin: 12px 0;
border-top: 1px solid #e5e5e5;
}
-#summary marked-element::shadow #content tr {
+#summary .markdown-html tr {
border-bottom: 1px solid #e5e5e5;
padding: 0 18px;
}
-#summary marked-element::shadow #content td,
-#summary marked-element::shadow #content th {
+#summary .markdown-html td,
+#summary .markdown-html th {
padding: 6px 12px;
}
-#summary marked-element::shadow #content td:first-child,
-#summary marked-element::shadow #content th:first-child {
+#summary .markdown-html td:first-child,
+#summary .markdown-html th:first-child {
padding-left: 24px;
}
-#summary marked-element::shadow #content td:last-child,
-#summary marked-element::shadow #content th:last-child {
+#summary .markdown-html td:last-child,
+#summary .markdown-html th:last-child {
padding-right: 24px;
}
-#summary marked-element::shadow #content code {
+#summary .markdown-html code {
@apply(--paper-font-code1);
}
-#summary marked-element::shadow #content p {
+#summary .markdown-html p {
padding: 0 24px;
}
-#summary marked-element::shadow #content a {
+#summary .markdown-html a {
color: var(--paper-indigo-a200);
font-weight: 500;
text-decoration: none;
}
-#summary marked-element::shadow #content h1,
-#summary marked-element::shadow #content h2,
-#summary marked-element::shadow #content h3,
-#summary marked-element::shadow #content h4,
-#summary marked-element::shadow #content h5 {
+#summary .markdown-html h1,
+#summary .markdown-html h2,
+#summary .markdown-html h3,
+#summary .markdown-html h4,
+#summary .markdown-html h5 {
padding: 0 18px;
}
diff --git a/lib/iron-doc-viewer/iron-doc-viewer.html b/lib/iron-doc-viewer/iron-doc-viewer.html
index 268aa7cc..056801ff 100644
--- a/lib/iron-doc-viewer/iron-doc-viewer.html
+++ b/lib/iron-doc-viewer/iron-doc-viewer.html
@@ -8,7 +8,9 @@
subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
-->
-
+
+
+
@@ -52,7 +54,9 @@
diff --git a/lib/iron-dropdown/.bower.json b/lib/iron-dropdown/.bower.json
index 22d7dcda..97901cf8 100644
--- a/lib/iron-dropdown/.bower.json
+++ b/lib/iron-dropdown/.bower.json
@@ -1,6 +1,6 @@
{
"name": "iron-dropdown",
- "version": "1.0.3",
+ "version": "1.0.6",
"description": "",
"authors": [
"The Polymer Authors"
@@ -24,8 +24,7 @@
"iron-overlay-behavior": "polymerelements/iron-overlay-behavior#^1.0.0",
"iron-resizable-behavior": "polymerelements/iron-resizable-behavior#^1.0.0",
"neon-animation": "polymerelements/neon-animation#^1.0.0",
- "iron-a11y-keys-behavior": "polymerelements/iron-a11y-keys-behavior#^1.0.0",
- "iron-image": "polymerelements/iron-image#^1.0.0"
+ "iron-a11y-keys-behavior": "polymerelements/iron-a11y-keys-behavior#^1.0.0"
},
"devDependencies": {
"iron-component-page": "polymerelements/iron-component-page#^1.0.0",
@@ -36,11 +35,11 @@
"web-component-tester": "*",
"iron-image": "polymerelements/iron-image#^1.0.0"
},
- "_release": "1.0.3",
+ "_release": "1.0.6",
"_resolution": {
"type": "version",
- "tag": "v1.0.3",
- "commit": "1373bee6eb6a52108aeb6203a2841fd7d421859e"
+ "tag": "v1.0.6",
+ "commit": "9b52ccb37577b0e4b3d34f3795117d95648b39ff"
},
"_source": "git://github.com/PolymerElements/iron-dropdown.git",
"_target": "^1.0.0",
diff --git a/lib/iron-dropdown/bower.json b/lib/iron-dropdown/bower.json
index e2889273..3ff762f6 100644
--- a/lib/iron-dropdown/bower.json
+++ b/lib/iron-dropdown/bower.json
@@ -1,6 +1,6 @@
{
"name": "iron-dropdown",
- "version": "1.0.3",
+ "version": "1.0.6",
"description": "",
"authors": [
"The Polymer Authors"
@@ -24,8 +24,7 @@
"iron-overlay-behavior": "polymerelements/iron-overlay-behavior#^1.0.0",
"iron-resizable-behavior": "polymerelements/iron-resizable-behavior#^1.0.0",
"neon-animation": "polymerelements/neon-animation#^1.0.0",
- "iron-a11y-keys-behavior": "polymerelements/iron-a11y-keys-behavior#^1.0.0",
- "iron-image": "polymerelements/iron-image#^1.0.0"
+ "iron-a11y-keys-behavior": "polymerelements/iron-a11y-keys-behavior#^1.0.0"
},
"devDependencies": {
"iron-component-page": "polymerelements/iron-component-page#^1.0.0",
diff --git a/lib/iron-dropdown/demo/index.html b/lib/iron-dropdown/demo/index.html
index 2725057c..2b1e449a 100644
--- a/lib/iron-dropdown/demo/index.html
+++ b/lib/iron-dropdown/demo/index.html
@@ -85,7 +85,7 @@
Basic
-
+
[[item]]
@@ -101,7 +101,7 @@
Bottom-left Aligned
-
+
[[item]]
@@ -109,7 +109,7 @@
Top-right Aligned
-
+
[[item]]
diff --git a/lib/iron-dropdown/iron-dropdown.html b/lib/iron-dropdown/iron-dropdown.html
index db1bb08f..0320f437 100644
--- a/lib/iron-dropdown/iron-dropdown.html
+++ b/lib/iron-dropdown/iron-dropdown.html
@@ -98,6 +98,28 @@
reflectToAttribute: true
},
+ /**
+ * A pixel value that will be added to the position calculated for the
+ * given `horizontalAlign`. Use a negative value to offset to the
+ * left, or a positive value to offset to the right.
+ */
+ horizontalOffset: {
+ type: Number,
+ value: 0,
+ notify: true
+ },
+
+ /**
+ * A pixel value that will be added to the position calculated for the
+ * given `verticalAlign`. Use a negative value to offset towards the
+ * top, or a positive value to offset towards the bottom.
+ */
+ verticalOffset: {
+ type: Number,
+ value: 0,
+ notify: true
+ },
+
/**
* The element that should be used to position the dropdown when
* it is opened.
@@ -123,6 +145,14 @@
type: Object
},
+ /**
+ * If provided, this will be the element that will be focused when
+ * the dropdown opens.
+ */
+ focusTarget: {
+ type: Object
+ },
+
/**
* Set to true to disable animations when opening and closing the
* dropdown.
@@ -132,6 +162,17 @@
value: false
},
+ /**
+ * By default, the dropdown will constrain scrolling on the page
+ * to itself when opened.
+ * Set to true in order to prevent scroll from being constrained
+ * to the dropdown when it opens.
+ */
+ allowOutsideScroll: {
+ type: Boolean,
+ value: false
+ },
+
/**
* We memoize the positionTarget bounding rectangle so that we can
* limit the number of times it is queried per resize / relayout.
@@ -147,7 +188,7 @@
},
observers: [
- '_updateOverlayPosition(verticalAlign, horizontalAlign)'
+ '_updateOverlayPosition(verticalAlign, horizontalAlign, verticalOffset, horizontalOffset)'
],
attached: function() {
@@ -163,6 +204,17 @@
return Polymer.dom(this.$.content).getDistributedNodes()[0];
},
+ /**
+ * The element that should be focused when the dropdown opens.
+ */
+ get _focusTarget() {
+ return this.focusTarget || this.containedElement;
+ },
+
+ /**
+ * The element that should be used to position the dropdown when
+ * it opens, if no position target is configured.
+ */
get _defaultPositionTarget() {
var parent = Polymer.dom(this).parentNode;
@@ -173,6 +225,9 @@
return parent;
},
+ /**
+ * The bounding rect of the position target.
+ */
get _positionRect() {
if (!this._positionRectMemo && this.positionTarget) {
this._positionRectMemo = this.positionTarget.getBoundingClientRect();
@@ -181,6 +236,9 @@
return this._positionRectMemo;
},
+ /**
+ * The horizontal offset value used to position the dropdown.
+ */
get _horizontalAlignTargetValue() {
var target;
@@ -190,9 +248,14 @@
target = this._positionRect.left;
}
+ target += this.horizontalOffset;
+
return Math.max(target, 0);
},
+ /**
+ * The vertical offset value used to position the dropdown.
+ */
get _verticalAlignTargetValue() {
var target;
@@ -202,30 +265,49 @@
target = this._positionRect.top;
}
+ target += this.verticalOffset;
+
return Math.max(target, 0);
},
+ /**
+ * Called when the value of `opened` changes.
+ *
+ * @param {boolean} opened True if the dropdown is opened.
+ */
_openedChanged: function(opened) {
if (opened && this.disabled) {
this.cancel();
} else {
- this._cancelAnimations();
+ this.cancelAnimation();
this._prepareDropdown();
Polymer.IronOverlayBehaviorImpl._openedChanged.apply(this, arguments);
}
+
+ if (this.opened) {
+ this._focusContent();
+ }
},
+ /**
+ * Overridden from `IronOverlayBehavior`.
+ */
_renderOpened: function() {
- Polymer.IronDropdownScrollManager.pushScrollLock(this);
+ if (!this.allowOutsideScroll) {
+ Polymer.IronDropdownScrollManager.pushScrollLock(this);
+ }
+
if (!this.noAnimations && this.animationConfig && this.animationConfig.open) {
this.$.contentWrapper.classList.add('animating');
this.playAnimation('open');
} else {
- this._focusContent();
Polymer.IronOverlayBehaviorImpl._renderOpened.apply(this, arguments);
}
},
+ /**
+ * Overridden from `IronOverlayBehavior`.
+ */
_renderClosed: function() {
Polymer.IronDropdownScrollManager.removeScrollLock(this);
if (!this.noAnimations && this.animationConfig && this.animationConfig.close) {
@@ -236,6 +318,12 @@
}
},
+ /**
+ * Called when animation finishes on the dropdown (when opening or
+ * closing). Responsible for "completing" the process of opening or
+ * closing the dropdown by positioning it or setting its display to
+ * none.
+ */
_onNeonAnimationFinish: function() {
this.$.contentWrapper.classList.remove('animating');
if (this.opened) {
@@ -245,6 +333,9 @@
}
},
+ /**
+ * Called when an `iron-resize` event fires.
+ */
_onIronResize: function() {
var containedElement = this.containedElement;
var scrollTop;
@@ -267,14 +358,17 @@
}
},
+ /**
+ * Called when the `positionTarget` property changes.
+ */
_positionTargetChanged: function() {
this._updateOverlayPosition();
},
- _cancelAnimations: function() {
- this.cancelAnimation();
- },
-
+ /**
+ * Constructs the final animation config from different properties used
+ * to configure specific parts of the opening and closing animations.
+ */
_updateAnimationConfig: function() {
var animationConfig = {};
var animations = [];
@@ -302,12 +396,21 @@
this.animationConfig = animationConfig;
},
+ /**
+ * Prepares the dropdown for opening by updating measured layout
+ * values.
+ */
_prepareDropdown: function() {
this.sizingTarget = this.containedElement || this.sizingTarget;
this._updateAnimationConfig();
this._updateOverlayPosition();
},
+ /**
+ * Updates the overlay position based on configured horizontal
+ * and vertical alignment, and re-memoizes these values for the sake
+ * of behavior in `IronFitBehavior`.
+ */
_updateOverlayPosition: function() {
this._positionRectMemo = null;
@@ -333,10 +436,17 @@
}
},
+ /**
+ * Focuses the configured focus target.
+ */
_focusContent: function() {
- if (this.containedElement) {
- this.containedElement.focus();
- }
+ // NOTE(cdata): This is async so that it can attempt the focus after
+ // `display: none` is removed from the element.
+ this.async(function() {
+ if (this._focusTarget) {
+ this._focusTarget.focus();
+ }
+ });
}
});
})();
diff --git a/lib/iron-dropdown/test/iron-dropdown.html b/lib/iron-dropdown/test/iron-dropdown.html
index 2aa16e74..b8fcdb77 100644
--- a/lib/iron-dropdown/test/iron-dropdown.html
+++ b/lib/iron-dropdown/test/iron-dropdown.html
@@ -33,6 +33,14 @@
+
+
+
+ I don't lock scroll!
+
+
+
+
@@ -43,6 +51,16 @@
+
+
+
+
+
+
+
+
diff --git a/lib/iron-flex-layout/.bower.json b/lib/iron-flex-layout/.bower.json
index 98650a25..65338034 100644
--- a/lib/iron-flex-layout/.bower.json
+++ b/lib/iron-flex-layout/.bower.json
@@ -1,6 +1,6 @@
{
"name": "iron-flex-layout",
- "version": "1.0.2",
+ "version": "1.0.3",
"description": "Provide flexbox-based layouts",
"keywords": [
"web-components",
@@ -24,11 +24,11 @@
"webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
},
"homepage": "https://github.com/PolymerElements/iron-flex-layout",
- "_release": "1.0.2",
+ "_release": "1.0.3",
"_resolution": {
"type": "version",
- "tag": "v1.0.2",
- "commit": "50bcecf40ab23caa7c2cd90030555e00c5ba7154"
+ "tag": "v1.0.3",
+ "commit": "e6c2cfec18354973ac03e70dcd8afcc3c72d09b9"
},
"_source": "git://github.com/PolymerElements/iron-flex-layout.git",
"_target": "^1.0.0",
diff --git a/lib/iron-flex-layout/bower.json b/lib/iron-flex-layout/bower.json
index 202fbe00..a300d516 100644
--- a/lib/iron-flex-layout/bower.json
+++ b/lib/iron-flex-layout/bower.json
@@ -1,6 +1,6 @@
{
"name": "iron-flex-layout",
- "version": "1.0.2",
+ "version": "1.0.3",
"description": "Provide flexbox-based layouts",
"keywords": [
"web-components",
diff --git a/lib/iron-flex-layout/iron-flex-layout.html b/lib/iron-flex-layout/iron-flex-layout.html
index ed9cd7bb..b7d1f087 100644
--- a/lib/iron-flex-layout/iron-flex-layout.html
+++ b/lib/iron-flex-layout/iron-flex-layout.html
@@ -10,8 +10,14 @@
-
+
+
+
+
+
+
+
diff --git a/lib/iron-form/iron-form.html b/lib/iron-form/iron-form.html
index 7db72938..7f6f41fa 100644
--- a/lib/iron-form/iron-form.html
+++ b/lib/iron-form/iron-form.html
@@ -164,6 +164,8 @@
* custom components and native elements of the form. If there are elements
* with duplicate names, then their values will get aggregated into an
* array of values.
+ *
+ * @return {!Object}
*/
serialize: function() {
var json = {};
@@ -238,12 +240,11 @@
// Validate all the custom elements.
var validatable;
for (var el, i = 0; el = this._customElements[i], i < this._customElements.length; i++) {
- if (el.required && this._useValue(el)) {
+ if (el.required && !el.disabled) {
validatable = /** @type {{validate: (function() : boolean)}} */ (el);
- // TODO(notwaldorf): IronValidatableBehavior can return undefined if
- // a validator is not set. It probably shouldn't, but in the meantime
- // deal with that scenario.
- valid = !!validatable.validate() && valid;
+ // Some elements may not have correctly defined a validate method.
+ if (validatable.validate)
+ valid = !!validatable.validate() && valid;
}
}
diff --git a/lib/iron-form/test/basic.html b/lib/iron-form/test/basic.html
index 75031962..248431ca 100644
--- a/lib/iron-form/test/basic.html
+++ b/lib/iron-form/test/basic.html
@@ -91,6 +91,15 @@
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Inbox
-
-
-
-
-
-
-
-
-
- [[index]]
- [[item.name]]
-
-
[[item.shortText]]
-
[[item.longText]]
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/lib/iron-list/demo/demo2.html b/lib/iron-list/demo/external-content.html
similarity index 100%
rename from lib/iron-list/demo/demo2.html
rename to lib/iron-list/demo/external-content.html
diff --git a/lib/iron-list/demo/selection.html b/lib/iron-list/demo/selection.html
new file mode 100644
index 00000000..1fa011e5
--- /dev/null
+++ b/lib/iron-list/demo/selection.html
@@ -0,0 +1,259 @@
+
+
+
+
+
+
+
Selection
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Inbox
+
+
+
+
+
+
+
+
+
+
+
+
+ [[index]]
+ [[item.name]]
+
+
[[item.shortText]]
+
+
+
+
+
+
+
+
+
+
+ Select a contact
+
+
+
+
+ [[item.name]]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/lib/iron-list/iron-list.html b/lib/iron-list/iron-list.html
index d8feb465..1872280c 100644
--- a/lib/iron-list/iron-list.html
+++ b/lib/iron-list/iron-list.html
@@ -76,7 +76,7 @@
By default, elements such as `iron-pages`, `paper-tabs` or `paper-dialog` will trigger
this event automatically. If you hide the list manually (e.g. you use `display: none`)
-you might want to implement `IronResizableBehavior` or fire this event manually right
+you might want to implement `IronResizableBehavior` or fire this event manually right
after the list became visible again. e.g.
document.querySelector('iron-list').fire('resize');
@@ -92,13 +92,16 @@
:host {
display: block;
- will-change: transform;
}
:host(.has-scroller) {
overflow: auto;
}
+ :host(:not(.has-scroller)) {
+ position: relative;
+ }
+
#items {
position: relative;
}
@@ -108,13 +111,20 @@
box-sizing: border-box;
position: absolute;
top: 0;
+ will-change: transform;
}
+
+
+
+
+
@@ -158,12 +168,61 @@
indexAs: {
type: String,
value: 'index'
- }
+ },
+ /**
+ * The name of the variable to add to the binding scope to indicate
+ * if the row is selected.
+ */
+ selectedAs: {
+ type: String,
+ value: 'selected'
+ },
+
+ /**
+ * When true, tapping a row will select the item, placing its data model
+ * in the set of selected items retrievable via the selection property.
+ *
+ * Note that tapping focusable elements within the list item will not
+ * result in selection, since they are presumed to have their * own action.
+ */
+ selectionEnabled: {
+ type: Boolean,
+ value: false
+ },
+
+ /**
+ * When `multiSelection` is false, this is the currently selected item, or `null`
+ * if no item is selected.
+ */
+ selectedItem: {
+ type: Object,
+ notify: true
+ },
+
+ /**
+ * When `multiSelection` is true, this is an array that contains the selected items.
+ */
+ selectedItems: {
+ type: Object,
+ notify: true
+ },
+
+ /**
+ * When `true`, multiple items may be selected at once (in this case,
+ * `selected` is an array of currently selected items). When `false`,
+ * only one item may be selected at a time.
+ */
+ multiSelection: {
+ type: Boolean,
+ value: false
+ }
},
observers: [
- '_itemsChanged(items.*)'
+ '_itemsChanged(items.*)',
+ '_selectionEnabledChanged(selectionEnabled)',
+ '_multiSelectionChanged(multiSelection)'
],
behaviors: [
@@ -177,7 +236,7 @@
/**
* The ratio of hidden tiles that should remain in the scroll direction.
- * Recommended value ≈ 0.5, so it will distribute tiles evely in both directions.
+ * Recommended value ~0.5, so it will distribute tiles evely in both directions.
*/
_ratio: 0.5,
@@ -199,7 +258,7 @@
/**
* The number of tiles in the DOM.
*/
- _physicalCount: DEFAULT_PHYSICAL_COUNT,
+ _physicalCount: 0,
/**
* The k-th tile that is at the top of the scrolling list.
@@ -248,9 +307,14 @@
_physicalIndexForKey: null,
/**
- * The average scroll size
+ * The estimated scroll height based on `_physicalAverage`
+ */
+ _estScrollHeight: 0,
+
+ /**
+ * The scroll height of the dom node
*/
- _scrollSize: 0,
+ _scrollHeight: 0,
/**
* The size of the viewport
@@ -282,7 +346,7 @@
* True if the current item list was rendered for the first time
* after attached.
*/
- _initRendered: false,
+ _itemsRendered: false,
/**
* The bottom of the physical content.
@@ -322,7 +386,7 @@
* The maximum scroll top value.
*/
get _maxScrollTop() {
- return this._scrollSize - this._viewportSize;
+ return this._estScrollHeight - this._viewportSize;
},
/**
@@ -357,7 +421,7 @@
* True if the current list is visible.
*/
get _isVisible() {
- return !!(this.offsetWidth || this.offsetHeight);
+ return this._scroller && Boolean(this._scroller.offsetWidth || this._scroller.offsetHeight);
},
/**
@@ -384,6 +448,16 @@
return this._firstVisibleIndexVal;
},
+ ready: function() {
+ if (IOS_TOUCH_SCROLLING) {
+ this._scrollListener = function() {
+ requestAnimationFrame(this._scrollHandler.bind(this));
+ }.bind(this);
+ } else {
+ this._scrollListener = this._scrollHandler.bind(this);
+ }
+ },
+
/**
* When the element has been attached to the DOM tree.
*/
@@ -399,19 +473,13 @@
this.classList.add('has-scroller');
}
- this.updateViewportBoundaries();
-
if (IOS_TOUCH_SCROLLING) {
this._scroller.style.webkitOverflowScrolling = 'touch';
-
- this._scroller.addEventListener('scroll', function() {
- requestAnimationFrame(this._scrollHandler.bind(this));
- }.bind(this));
- } else {
- this._scroller.addEventListener('scroll', this._scrollHandler.bind(this));
}
- // render the list of items if we haven't rendered them yet
+ this._scroller.addEventListener('scroll', this._scrollListener);
+
+ this.updateViewportBoundaries();
this._render();
},
@@ -419,7 +487,10 @@
* When the element has been removed from the DOM tree.
*/
detached: function() {
- this._initRendered = false;
+ this._itemsRendered = false;
+ if (this._scroller) {
+ this._scroller.removeEventListener('scroll', this._scrollListener);
+ }
},
/**
@@ -645,9 +716,11 @@
* but it also ensures that only one `update` cycle is created.
*/
_render: function() {
- if (this.isAttached && !this._initRendered && this._isVisible && this.items) {
+ var requiresUpdate = this._virtualCount > 0 || this._physicalCount > 0;
+
+ if (this.isAttached && !this._itemsRendered && this._isVisible && requiresUpdate) {
this._update();
- this._initRendered = true;
+ this._itemsRendered = true;
}
},
@@ -657,12 +730,16 @@
_ensureTemplatized: function() {
if (!this.ctor) {
// Template instance props that should be excluded from forwarding
- this._instanceProps = {
- __key__: true
- };
- this._instanceProps[this.as] = true;
- this._instanceProps[this.indexAs] = true;
+ var props = {};
+
+ props.__key__ = true;
+ props[this.as] = true;
+ props[this.indexAs] = true;
+ props[this.selectedAs] = true;
+
+ this._instanceProps = props;
this._userTemplate = Polymer.dom(this).querySelector('template');
+
if (this._userTemplate) {
this.templatize(this._userTemplate);
} else {
@@ -738,10 +815,14 @@
}
},
+ /**
+ * Called when the items have changed. That is, ressignments
+ * to `items`, splices or updates to a single item.
+ */
_itemsChanged: function(change) {
if (change.path === 'items') {
// render the new set
- this._initRendered = false;
+ this._itemsRendered = false;
// update the whole set
this._virtualStartVal = 0;
@@ -755,16 +836,16 @@
// create the initial physical items
if (!this._physicalItems) {
+ this._physicalCount = Math.max(1, Math.min(DEFAULT_PHYSICAL_COUNT, this._virtualCount));
this._physicalItems = this._createPool(this._physicalCount);
this._physicalSizes = new Array(this._physicalCount);
}
this.debounce('refresh', this._render);
-
} else if (change.path === 'items.splices') {
// render the new set
- this._initRendered = false;
+ this._itemsRendered = false;
this._adjustVirtualIndex(change.value.indexSplices);
this._virtualCount = this.items ? this.items.length : 0;
@@ -778,9 +859,15 @@
},
_adjustVirtualIndex: function(splices) {
- for (var i = 0; i < splices.length; i++) {
- var splice = splices[i];
- var idx = splice.index;
+ var i, splice, idx;
+
+ for (i = 0; i < splices.length; i++) {
+ splice = splices[i];
+
+ // deselect removed items
+ splice.removed.forEach(this.$.selector.deselect, this.$.selector);
+
+ idx = splice.index;
// We only need to care about changes happening above the current position
if (idx >= this._virtualStartVal) {
break;
@@ -795,6 +882,10 @@
this._refresh();
},
+ /**
+ * Executes a provided function per every physical index in `itemSet`
+ * `itemSet` default value is equivalent to the entire set of physical indexes.
+ */
_iterateItems: function(fn, itemSet) {
var pidx, vidx, rtn, i;
@@ -830,6 +921,9 @@
}
},
+ /**
+ * Assigns the data models to a given set of items.
+ */
_assignModels: function(itemSet) {
this._iterateItems(function(pidx, vidx) {
var el = this._physicalItems[pidx];
@@ -839,6 +933,7 @@
if (item) {
inst[this.as] = item;
inst.__key__ = this._collection.getKey(item);
+ inst[this.selectedAs] = this.$.selector.isSelected(item);
inst[this.indexAs] = vidx;
el.removeAttribute('hidden');
this._physicalIndexForKey[inst.__key__] = pidx;
@@ -850,6 +945,9 @@
}, itemSet);
},
+ /**
+ * Updates the height for a given set of items.
+ */
_updateMetrics: function() {
var total = 0;
var prevAvgCount = this._physicalAverageCount;
@@ -875,6 +973,9 @@
}
},
+ /**
+ * Updates the position of the physical items.
+ */
_positionItems: function(itemSet) {
this._adjustScrollPosition();
@@ -888,6 +989,9 @@
}, itemSet);
},
+ /**
+ * Adjusts the scroll position when it was overestimated.
+ */
_adjustScrollPosition: function() {
var deltaHeight = this._virtualStartVal === 0 ? this._physicalTop :
Math.min(this._scrollPosition + this._physicalTop, 0);
@@ -902,6 +1006,9 @@
}
},
+ /**
+ * Sets the position of the scroll.
+ */
_resetScrollPosition: function(pos) {
if (this._scroller) {
this._scroller.scrollTop = pos;
@@ -909,11 +1016,21 @@
}
},
- _updateScrollerSize: function() {
- this._scrollSize = (this._physicalBottom +
+ /**
+ * Sets the scroll height, that's the height of the content,
+ */
+ _updateScrollerSize: function(forceUpdate) {
+ this._estScrollHeight = (this._physicalBottom +
Math.max(this._virtualCount - this._physicalCount - this._virtualStartVal, 0) * this._physicalAverage);
- this.$.items.style.height = this._scrollSize + 'px';
+ forceUpdate = forceUpdate || this._scrollHeight === 0;
+ forceUpdate = forceUpdate || this._scrollPosition >= this._estScrollHeight - this._physicalSize;
+
+ // amortize height adjustment, so it won't trigger repaints very often
+ if (forceUpdate || Math.abs(this._estScrollHeight - this._scrollHeight) >= this._optPhysicalSize) {
+ this.$.items.style.height = this._estScrollHeight + 'px';
+ this._scrollHeight = this._estScrollHeight;
+ }
},
/**
@@ -921,12 +1038,14 @@
* of the physical items in the DOM tree.
*
* @method scrollToIndex
+ * @param {number} idx The index of the item
*/
scrollToIndex: function(idx) {
if (typeof idx !== 'number') {
return;
}
+ var itemSet;
var firstVisible = this.firstVisibleIndex;
idx = Math.min(Math.max(idx, 0), this._virtualCount-1);
@@ -957,7 +1076,7 @@
}
// update the scroller size
- this._updateScrollerSize();
+ this._updateScrollerSize(true);
// update the position of the items
this._positionItems();
@@ -965,6 +1084,12 @@
// set the new scroll position
this._resetScrollPosition(this._physicalTop + targetOffsetTop + 1);
+ // increase the pool of physical items if needed
+ if (itemSet = this._increasePoolIfNeeded()) {
+ // set models to the new items
+ this.async(this._update.bind(this, itemSet));
+ }
+
// clear cached visible index
this._firstVisibleIndexVal = null;
},
@@ -983,12 +1108,143 @@
*/
_resizeHandler: function() {
this.debounce('resize', function() {
- if (this._physicalItems && this._isVisible) {
+ this._render();
+ if (this._itemsRendered && this._physicalItems && this._isVisible) {
this._resetAverage();
this.updateViewportBoundaries();
this.scrollToIndex(this.firstVisibleIndex);
}
});
+ },
+
+ _getModelFromItem: function(item) {
+ var key = this._collection.getKey(item);
+ var pidx = this._physicalIndexForKey[key];
+
+ if (pidx !== undefined) {
+ return this._physicalItems[pidx]._templateInstance;
+ }
+ return null;
+ },
+
+ /**
+ * Select the list item at the given index.
+ *
+ * @method selectItem
+ * @param {(Object|number)} item the item object or its index
+ */
+ selectItem: function(item) {
+ if (typeof item === 'number') {
+ item = this.items[item];
+ if (!item) {
+ throw new RangeError('
- not found');
+ }
+ } else {
+ if (this._collection.getKey(item) === undefined) {
+ throw new TypeError('
- should be a valid item');
+ }
+ }
+
+ var model = this._getModelFromItem(item);
+
+ if (!this.multiSelection && this.selectedItem) {
+ this.deselectItem(this.selectedItem);
+ }
+ if (model) {
+ model[this.selectedAs] = true;
+ }
+ this.$.selector.select(item);
+ },
+
+ /**
+ * Deselects the given item list if it is already selected.
+ *
+ * @method deselect
+ * @param {(Object|number)} item the item object or its index
+ */
+ deselectItem: function(item) {
+ if (typeof item === 'number') {
+ item = this.items[item];
+ if (!item) {
+ throw new RangeError('
- not found');
+ }
+ } else {
+ if (this._collection.getKey(item) === undefined) {
+ throw new TypeError('
- should be a valid item');
+ }
+ }
+
+ var model = this._getModelFromItem(item);
+
+ if (model) {
+ model[this.selectedAs] = false;
+ }
+ this.$.selector.deselect(item);
+ },
+
+ /**
+ * Select or deselect a given item depending on whether the item
+ * has already been selected.
+ *
+ * @method toggleSelectionForItem
+ * @param {(Object|number)} item the item object or its index
+ */
+ toggleSelectionForItem: function(item) {
+ var item = typeof item === 'number' ? this.items[item] : item;
+ if (this.$.selector.isSelected(item)) {
+ this.deselectItem(item);
+ } else {
+ this.selectItem(item);
+ }
+ },
+
+ /**
+ * Clears the current selection state of the list.
+ *
+ * @method clearSelection
+ */
+ clearSelection: function() {
+ function unselect(item) {
+ var model = this._getModelFromItem(item);
+ if (model) {
+ model[this.selectedAs] = false;
+ }
+ }
+
+ if (Array.isArray(this.selectedItems)) {
+ this.selectedItems.forEach(unselect, this);
+ } else if (this.selectedItem) {
+ unselect.call(this, this.selectedItem);
+ }
+
+ this.$.selector.clearSelection();
+ },
+
+ /**
+ * Add an event listener to `tap` if `selectionEnabled` is true,
+ * it will remove the listener otherwise.
+ */
+ _selectionEnabledChanged: function(selectionEnabled) {
+ if (selectionEnabled) {
+ this.listen(this, 'tap', '_selectionHandler');
+ } else {
+ this.unlisten(this, 'tap', '_selectionHandler');
+ }
+ },
+
+ /**
+ * Select an item from an event object.
+ */
+ _selectionHandler: function(e) {
+ var model = this.modelForElement(e.target);
+ if (model) {
+ this.toggleSelectionForItem(model[this.as]);
+ }
+ },
+
+ _multiSelectionChanged: function(multiSelection) {
+ this.clearSelection();
+ this.$.selector.multi = multiSelection;
}
});
diff --git a/lib/iron-list/test/basic.html b/lib/iron-list/test/basic.html
index cae4f010..1e07981a 100644
--- a/lib/iron-list/test/basic.html
+++ b/lib/iron-list/test/basic.html
@@ -70,7 +70,7 @@
});
test('check physical item size', function(done) {
- var setSize = list._physicalCount - 1;
+ var setSize = 10;
container.data = buildDataSet(setSize);
flush(function() {
@@ -151,6 +151,28 @@
});
});
+
+ test('reset items', function(done) {
+ list.items = buildDataSet(100);
+
+ flush(function() {
+ var firstItem = getFirstItemFromList(list);
+ assert.equal(firstItem.textContent, '0');
+
+ list.items = null;
+
+ flush(function() {
+ assert.notEqual(getFirstItemFromList(list), firstItem);
+ list.items = buildDataSet(100);
+
+ flush(function() {
+ assert.equal(getFirstItemFromList(list), firstItem);
+ done();
+ });
+ });
+ });
+ });
+
});
diff --git a/lib/iron-list/test/hidden-list.html b/lib/iron-list/test/hidden-list.html
index 57fb5ef8..fa1a6453 100644
--- a/lib/iron-list/test/hidden-list.html
+++ b/lib/iron-list/test/hidden-list.html
@@ -54,20 +54,16 @@
test('resize', function(done) {
list.items = buildDataSet(100);
list.fire('resize');
- flush(function() {
- assert.notEqual(getFirstItemFromList(list).textContent, '0');
-
+
+ assert.notEqual(getFirstItemFromList(list).textContent, '0');
+ Polymer.RenderStatus.whenReady(function() {
container.removeAttribute('hidden');
-
+ assert.notEqual(getFirstItemFromList(list).textContent, '0');
+ list.fire('resize');
flush(function() {
- assert.notEqual(getFirstItemFromList(list).textContent, '0');
-
- list.fire('resize');
-
- flush(function() {
- assert.equal(getFirstItemFromList(list).textContent, '0');
- done();
- });
+ assert.isTrue(list.isAttached);
+ assert.equal(getFirstItemFromList(list).textContent, '0');
+ done();
});
});
});
diff --git a/lib/iron-list/test/index.html b/lib/iron-list/test/index.html
index 16b23e5c..7bdf2251 100644
--- a/lib/iron-list/test/index.html
+++ b/lib/iron-list/test/index.html
@@ -21,7 +21,8 @@
'basic.html',
'mutations.html',
'physical-count.html',
- 'hidden-list.html'
+ 'hidden-list.html',
+ 'selection.html'
]);
+
+
+
+
+
+
+
+
+
+
diff --git a/lib/iron-list/test/physical-count.html b/lib/iron-list/test/physical-count.html
index d9ae50f5..a9f7c287 100644
--- a/lib/iron-list/test/physical-count.html
+++ b/lib/iron-list/test/physical-count.html
@@ -28,7 +28,7 @@
-
+
@@ -54,6 +54,28 @@
done();
});
});
+
+ test('increase pool size on resize', function(done) {
+ list.items = buildDataSet(1000);
+
+ flush(function() {
+ // change the height of the list
+ container.listHeight = 500;
+ // resize
+ list.fire('resize');
+
+ flush(function() {
+ var lastItem = getLastItemFromList(list);
+ var lastItemHeight = lastItem.offsetHeight;
+ var expectedFinalItem = list.offsetHeight/lastItemHeight - 1;
+
+ assert.equal(lastItemHeight, 1);
+ assert.equal(getLastItemFromList(list).textContent, expectedFinalItem);
+ done();
+ });
+ });
+ });
+
});
diff --git a/lib/iron-list/test/selection.html b/lib/iron-list/test/selection.html
new file mode 100644
index 00000000..8bd584f1
--- /dev/null
+++ b/lib/iron-list/test/selection.html
@@ -0,0 +1,356 @@
+
+
+
+