From d8be0028b80dcf7026489598f4f8905ecc291611 Mon Sep 17 00:00:00 2001 From: pdevty Date: Tue, 30 Jun 2015 22:41:33 +0900 Subject: initial commit --- LICENSE.md | 20 + README.md | 69 + archetypes/default.md | 4 + images/screenshot.png | Bin 0 -> 255760 bytes images/tn.png | Bin 0 -> 108491 bytes layouts/_default/list.html | 7 + layouts/_default/single.html | 45 + layouts/_default/terms.html | 12 + layouts/index.html | 7 + layouts/partials/content.html | 26 + layouts/partials/disqus.html | 13 + layouts/partials/footer.html | 21 + layouts/partials/header.html | 165 + layouts/partials/pagination.html | 13 + static/bower.json | 14 + static/bower_components/font-roboto/.bower.json | 31 + static/bower_components/font-roboto/README.md | 1 + static/bower_components/font-roboto/bower.json | 22 + static/bower_components/font-roboto/roboto.html | 10 + .../iron-a11y-keys-behavior/.bower.json | 42 + .../iron-a11y-keys-behavior/.gitignore | 1 + .../iron-a11y-keys-behavior/README.md | 15 + .../iron-a11y-keys-behavior/bower.json | 32 + .../iron-a11y-keys-behavior/demo/index.html | 24 + .../iron-a11y-keys-behavior/demo/x-key-aware.html | 91 + .../iron-a11y-keys-behavior/index.html | 24 + .../iron-a11y-keys-behavior.html | 421 ++ .../iron-a11y-keys-behavior/test/basic-test.html | 248 + .../iron-a11y-keys-behavior/test/index.html | 29 + static/bower_components/iron-behaviors/.bower.json | 40 + static/bower_components/iron-behaviors/.gitignore | 1 + static/bower_components/iron-behaviors/README.md | 4 + static/bower_components/iron-behaviors/bower.json | 30 + .../iron-behaviors/demo/index.html | 47 + .../iron-behaviors/demo/simple-button.html | 70 + static/bower_components/iron-behaviors/index.html | 27 + .../iron-behaviors/iron-button-state.html | 186 + .../iron-behaviors/iron-control-state.html | 108 + .../iron-behaviors/test/active-state.html | 154 + .../iron-behaviors/test/disabled-state.html | 85 + .../iron-behaviors/test/focused-state.html | 120 + .../iron-behaviors/test/index.html | 25 + .../iron-behaviors/test/test-elements.html | 66 + .../bower_components/iron-flex-layout/.bower.json | 36 + .../bower_components/iron-flex-layout/.gitignore | 2 + static/bower_components/iron-flex-layout/README.md | 4 + .../bower_components/iron-flex-layout/bower.json | 26 + .../iron-flex-layout/classes/iron-flex-layout.html | 307 + .../classes/iron-shadow-flex-layout.html | 302 + .../iron-flex-layout/demo/index.html | 42 + .../iron-flex-layout/demo/x-app.html | 118 + .../iron-flex-layout/iron-flex-layout.html | 313 + static/bower_components/iron-icon/.bower.json | 43 + static/bower_components/iron-icon/.gitignore | 1 + static/bower_components/iron-icon/README.md | 56 + static/bower_components/iron-icon/bower.json | 33 + static/bower_components/iron-icon/demo/index.html | 48 + .../bower_components/iron-icon/demo/location.png | Bin 0 -> 324 bytes static/bower_components/iron-icon/hero.svg | 19 + static/bower_components/iron-icon/index.html | 26 + static/bower_components/iron-icon/iron-icon.html | 179 + static/bower_components/iron-icon/test/index.html | 31 + .../bower_components/iron-icon/test/iron-icon.html | 120 + static/bower_components/iron-icons/.bower.json | 46 + static/bower_components/iron-icons/.gitignore | 3 + static/bower_components/iron-icons/README.md | 6 + static/bower_components/iron-icons/av-icons.html | 73 + static/bower_components/iron-icons/bower.json | 37 + .../iron-icons/communication-icons.html | 59 + static/bower_components/iron-icons/demo/index.html | 132 + .../bower_components/iron-icons/device-icons.html | 94 + .../bower_components/iron-icons/editor-icons.html | 70 + .../iron-icons/hardware-icons.html | 61 + static/bower_components/iron-icons/hero.svg | 35 + .../bower_components/iron-icons/image-icons.html | 164 + static/bower_components/iron-icons/index.html | 25 + static/bower_components/iron-icons/iron-icons.html | 303 + static/bower_components/iron-icons/maps-icons.html | 71 + .../iron-icons/notification-icons.html | 62 + .../bower_components/iron-icons/social-icons.html | 40 + .../bower_components/iron-iconset-svg/.bower.json | 41 + .../bower_components/iron-iconset-svg/.gitignore | 1 + static/bower_components/iron-iconset-svg/README.md | 4 + .../bower_components/iron-iconset-svg/bower.json | 31 + .../iron-iconset-svg/demo/index.html | 65 + .../iron-iconset-svg/demo/svg-sample-icons.html | 69 + .../bower_components/iron-iconset-svg/index.html | 26 + .../iron-iconset-svg/iron-iconset-svg.html | 192 + .../iron-iconset-svg/test/index.html | 30 + .../iron-iconset-svg/test/iron-iconset-svg.html | 107 + static/bower_components/iron-image/.bower.json | 40 + static/bower_components/iron-image/.gitignore | 1 + static/bower_components/iron-image/README.md | 60 + static/bower_components/iron-image/bower.json | 30 + static/bower_components/iron-image/demo/index.html | 183 + .../bower_components/iron-image/demo/polymer.svg | 175 + static/bower_components/iron-image/index.html | 24 + static/bower_components/iron-image/iron-image.html | 354 + static/bower_components/iron-image/test/index.html | 25 + .../iron-image/test/iron-image.html | 78 + .../bower_components/iron-media-query/.bower.json | 40 + .../bower_components/iron-media-query/.gitignore | 1 + static/bower_components/iron-media-query/README.md | 11 + .../bower_components/iron-media-query/bower.json | 31 + .../iron-media-query/demo/index.html | 45 + static/bower_components/iron-media-query/hero.svg | 29 + .../bower_components/iron-media-query/index.html | 29 + .../iron-media-query/iron-media-query.html | 77 + .../iron-media-query/test/basic.html | 71 + .../iron-media-query/test/index.html | 30 + .../iron-menu-behavior/.bower.json | 41 + .../bower_components/iron-menu-behavior/.gitignore | 1 + .../bower_components/iron-menu-behavior/README.md | 3 + .../bower_components/iron-menu-behavior/bower.json | 32 + .../iron-menu-behavior/demo/index.html | 100 + .../iron-menu-behavior/demo/simple-menu.html | 50 + .../iron-menu-behavior/demo/simple-menubar.html | 54 + .../bower_components/iron-menu-behavior/index.html | 30 + .../iron-menu-behavior/iron-menu-behavior.html | 214 + .../iron-menu-behavior/iron-menubar-behavior.html | 65 + .../iron-menu-behavior/test/index.html | 35 + .../test/iron-menu-behavior.html | 108 + .../test/iron-menubar-behavior.html | 108 + .../iron-menu-behavior/test/test-menu.html | 40 + .../iron-menu-behavior/test/test-menubar.html | 40 + static/bower_components/iron-meta/.bower.json | 38 + static/bower_components/iron-meta/.gitignore | 1 + static/bower_components/iron-meta/README.md | 46 + static/bower_components/iron-meta/bower.json | 28 + static/bower_components/iron-meta/demo/index.html | 46 + static/bower_components/iron-meta/hero.svg | 33 + static/bower_components/iron-meta/index.html | 27 + static/bower_components/iron-meta/iron-meta.html | 317 + static/bower_components/iron-meta/test/basic.html | 48 + static/bower_components/iron-meta/test/index.html | 30 + .../bower_components/iron-meta/test/iron-meta.html | 186 + .../iron-resizable-behavior/.bower.json | 40 + .../iron-resizable-behavior/.gitignore | 1 + .../iron-resizable-behavior/README.md | 16 + .../iron-resizable-behavior/bower.json | 30 + .../iron-resizable-behavior/demo/index.html | 29 + .../iron-resizable-behavior/demo/src/x-app.html | 114 + .../iron-resizable-behavior/index.html | 25 + .../iron-resizable-behavior.html | 193 + .../iron-resizable-behavior/test/basic.html | 263 + .../iron-resizable-behavior/test/index.html | 32 + .../test/iron-resizable-behavior.html | 87 + .../test/test-elements.html | 193 + static/bower_components/iron-selector/.bower.json | 41 + static/bower_components/iron-selector/.gitignore | 2 + static/bower_components/iron-selector/README.md | 50 + static/bower_components/iron-selector/bower.json | 31 + .../bower_components/iron-selector/demo/index.html | 66 + static/bower_components/iron-selector/index.html | 28 + .../iron-selector/iron-multi-selectable.html | 120 + .../iron-selector/iron-selectable.html | 307 + .../iron-selector/iron-selection.html | 115 + .../iron-selector/iron-selector.html | 71 + .../iron-selector/test/activate-event.html | 138 + .../bower_components/iron-selector/test/basic.html | 150 + .../iron-selector/test/content-element.html | 43 + .../iron-selector/test/content.html | 168 + .../bower_components/iron-selector/test/index.html | 36 + .../bower_components/iron-selector/test/multi.html | 135 + .../iron-selector/test/next-previous.html | 134 + .../iron-selector/test/selected-attribute.html | 72 + .../iron-selector/test/template-repeat.html | 110 + .../bower_components/paper-behaviors/.bower.json | 48 + static/bower_components/paper-behaviors/.gitignore | 1 + static/bower_components/paper-behaviors/README.md | 4 + static/bower_components/paper-behaviors/bower.json | 39 + .../paper-behaviors/demo/index.html | 57 + .../paper-behaviors/demo/paper-button.html | 71 + .../paper-behaviors/demo/paper-radio-button.html | 116 + static/bower_components/paper-behaviors/index.html | 26 + .../paper-behaviors/paper-button-behavior.html | 56 + .../paper-behaviors/paper-inky-focus-behavior.html | 44 + .../paper-behaviors/test/index.html | 26 + .../test/paper-button-behavior.html | 82 + .../test/paper-radio-button-behavior.html | 62 + .../paper-behaviors/test/test-button.html | 34 + .../paper-behaviors/test/test-radio-button.html | 41 + .../paper-drawer-panel/.bower.json | 42 + .../bower_components/paper-drawer-panel/.gitignore | 1 + .../bower_components/paper-drawer-panel/README.md | 71 + .../bower_components/paper-drawer-panel/bower.json | 33 + .../paper-drawer-panel/demo/index.html | 85 + .../bower_components/paper-drawer-panel/hero.svg | 21 + .../bower_components/paper-drawer-panel/index.html | 29 + .../paper-drawer-panel/paper-drawer-panel.css | 142 + .../paper-drawer-panel/paper-drawer-panel.html | 591 ++ static/bower_components/paper-fab/.bower.json | 48 + static/bower_components/paper-fab/.gitignore | 1 + static/bower_components/paper-fab/README.md | 44 + static/bower_components/paper-fab/bower.json | 39 + static/bower_components/paper-fab/demo/index.html | 97 + static/bower_components/paper-fab/index.html | 24 + static/bower_components/paper-fab/paper-fab.html | 175 + static/bower_components/paper-fab/test/a11y.html | 71 + static/bower_components/paper-fab/test/basic.html | 76 + static/bower_components/paper-fab/test/index.html | 26 + .../bower_components/paper-icon-button/.bower.json | 43 + .../bower_components/paper-icon-button/.gitignore | 1 + .../bower_components/paper-icon-button/README.md | 49 + .../bower_components/paper-icon-button/bower.json | 33 + .../paper-icon-button/demo/index.html | 154 + .../bower_components/paper-icon-button/index.html | 23 + .../paper-icon-button/paper-icon-button.html | 156 + .../paper-icon-button/test/a11y.html | 94 + .../paper-icon-button/test/basic.html | 77 + .../paper-icon-button/test/index.html | 26 + static/bower_components/paper-item/.bower.json | 49 + static/bower_components/paper-item/.gitignore | 1 + static/bower_components/paper-item/README.md | 4 + .../bower_components/paper-item/all-imports.html | 13 + static/bower_components/paper-item/bower.json | 40 + static/bower_components/paper-item/demo/index.html | 285 + static/bower_components/paper-item/index.html | 30 + .../paper-item/paper-icon-item.html | 86 + .../paper-item/paper-item-body.html | 93 + .../paper-item/paper-item-shared.css | 19 + static/bower_components/paper-item/paper-item.html | 95 + static/bower_components/paper-item/test/index.html | 34 + .../paper-item/test/paper-item.html | 66 + static/bower_components/paper-material/.bower.json | 45 + static/bower_components/paper-material/.gitignore | 1 + static/bower_components/paper-material/README.md | 13 + static/bower_components/paper-material/bower.json | 36 + .../paper-material/demo/index.html | 113 + static/bower_components/paper-material/index.html | 30 + .../paper-material/paper-material.html | 98 + .../paper-material/test/index.html | 25 + .../paper-material/test/paper-material.html | 92 + static/bower_components/paper-menu/.bower.json | 41 + static/bower_components/paper-menu/.gitignore | 1 + static/bower_components/paper-menu/README.md | 3 + static/bower_components/paper-menu/bower.json | 32 + static/bower_components/paper-menu/demo/index.html | 81 + static/bower_components/paper-menu/hero.svg | 35 + static/bower_components/paper-menu/index.html | 30 + static/bower_components/paper-menu/paper-menu.html | 133 + static/bower_components/paper-menu/test/index.html | 34 + .../paper-menu/test/paper-menu.html | 67 + static/bower_components/paper-ripple/.bower.json | 39 + static/bower_components/paper-ripple/.gitignore | 1 + static/bower_components/paper-ripple/README.md | 65 + static/bower_components/paper-ripple/bower.json | 29 + .../bower_components/paper-ripple/demo/index.html | 413 ++ static/bower_components/paper-ripple/hero.svg | 30 + static/bower_components/paper-ripple/index.html | 27 + .../paper-ripple/paper-ripple.html | 716 ++ .../bower_components/paper-ripple/test/index.html | 25 + .../paper-ripple/test/paper-ripple.html | 166 + .../paper-scroll-header-panel/.bower.json | 48 + .../paper-scroll-header-panel/.gitignore | 1 + .../paper-scroll-header-panel/README.md | 56 + .../paper-scroll-header-panel/bower.json | 38 + .../paper-scroll-header-panel/demo/demo1.html | 81 + .../paper-scroll-header-panel/demo/demo2.html | 78 + .../paper-scroll-header-panel/demo/demo3.html | 79 + .../paper-scroll-header-panel/demo/demo4.html | 114 + .../paper-scroll-header-panel/demo/demo5.html | 113 + .../paper-scroll-header-panel/demo/demo6.html | 117 + .../paper-scroll-header-panel/demo/demo7.html | 120 + .../paper-scroll-header-panel/demo/demo8.html | 126 + .../paper-scroll-header-panel/demo/demo9.html | 108 + .../paper-scroll-header-panel/demo/images/bg2.jpg | Bin 0 -> 97102 bytes .../paper-scroll-header-panel/demo/images/bg3.jpg | Bin 0 -> 80676 bytes .../paper-scroll-header-panel/demo/images/bg5.jpg | Bin 0 -> 328472 bytes .../paper-scroll-header-panel/demo/images/bg6.jpg | Bin 0 -> 179472 bytes .../paper-scroll-header-panel/demo/images/bg9.jpg | Bin 0 -> 178111 bytes .../paper-scroll-header-panel/demo/index.html | 113 + .../demo/lorem-ipsum.html | 42 + .../demo/sample-content.html | 72 + .../paper-scroll-header-panel/hero.svg | 41 + .../paper-scroll-header-panel/index.html | 28 + .../paper-scroll-header-panel.html | 455 ++ .../paper-scroll-header-panel/test/basic.html | 112 + .../paper-scroll-header-panel/test/index.html | 25 + static/bower_components/paper-styles/.bower.json | 40 + static/bower_components/paper-styles/README.md | 3 + static/bower_components/paper-styles/bower.json | 31 + .../paper-styles/classes/global.html | 96 + .../paper-styles/classes/shadow-layout.html | 302 + .../paper-styles/classes/shadow.html | 52 + .../paper-styles/classes/typography.html | 171 + static/bower_components/paper-styles/color.html | 333 + .../paper-styles/default-theme.html | 39 + .../bower_components/paper-styles/demo-pages.html | 72 + static/bower_components/paper-styles/demo.css | 25 + .../bower_components/paper-styles/demo/index.html | 358 + .../paper-styles/paper-styles-classes.html | 14 + .../paper-styles/paper-styles.html | 17 + static/bower_components/paper-styles/shadow.html | 65 + .../bower_components/paper-styles/typography.html | 238 + static/bower_components/paper-toolbar/.bower.json | 45 + static/bower_components/paper-toolbar/.gitignore | 1 + static/bower_components/paper-toolbar/README.md | 51 + static/bower_components/paper-toolbar/bower.json | 35 + .../bower_components/paper-toolbar/demo/index.html | 81 + static/bower_components/paper-toolbar/index.html | 38 + .../paper-toolbar/paper-toolbar.html | 368 + .../bower_components/paper-toolbar/test/index.html | 24 + .../paper-toolbar/test/paper-toolbar.html | 147 + static/bower_components/polymer/.bower.json | 36 + static/bower_components/polymer/LICENSE.txt | 27 + static/bower_components/polymer/bower.json | 26 + static/bower_components/polymer/build.log | 26 + static/bower_components/polymer/polymer-micro.html | 529 ++ static/bower_components/polymer/polymer-mini.html | 1396 ++++ static/bower_components/polymer/polymer.html | 3985 +++++++++++ .../bower_components/webcomponentsjs/.bower.json | 27 + .../webcomponentsjs/CustomElements.js | 963 +++ .../webcomponentsjs/CustomElements.min.js | 11 + .../webcomponentsjs/HTMLImports.js | 1085 +++ .../webcomponentsjs/HTMLImports.min.js | 11 + .../webcomponentsjs/MutationObserver.js | 344 + .../webcomponentsjs/MutationObserver.min.js | 11 + static/bower_components/webcomponentsjs/README.md | 125 + .../bower_components/webcomponentsjs/ShadowDOM.js | 4414 ++++++++++++ .../webcomponentsjs/ShadowDOM.min.js | 15 + static/bower_components/webcomponentsjs/bower.json | 18 + static/bower_components/webcomponentsjs/build.log | 33 + .../bower_components/webcomponentsjs/package.json | 31 + .../webcomponentsjs/webcomponents-lite.js | 2314 +++++++ .../webcomponentsjs/webcomponents-lite.min.js | 13 + .../webcomponentsjs/webcomponents.js | 7126 ++++++++++++++++++++ .../webcomponentsjs/webcomponents.min.js | 15 + static/images/cover.png | Bin 0 -> 17970 bytes static/images/facebook-dreamstale25.png | Bin 0 -> 712 bytes static/images/feed-dreamstale27.png | Bin 0 -> 1237 bytes static/images/github2-dreamstale35.png | Bin 0 -> 1121 bytes static/images/google+-dreamstale37.png | Bin 0 -> 1158 bytes static/images/linkedin-dreamstale45.png | Bin 0 -> 817 bytes static/images/photo.png | Bin 0 -> 1293 bytes static/images/profile.png | Bin 0 -> 17970 bytes static/images/twitter-dreamstale71.png | Bin 0 -> 997 bytes theme.toml | 13 + 338 files changed, 45240 insertions(+) create mode 100644 LICENSE.md create mode 100644 README.md create mode 100644 archetypes/default.md create mode 100644 images/screenshot.png create mode 100644 images/tn.png create mode 100644 layouts/_default/list.html create mode 100644 layouts/_default/single.html create mode 100644 layouts/_default/terms.html create mode 100644 layouts/index.html create mode 100644 layouts/partials/content.html create mode 100644 layouts/partials/disqus.html create mode 100644 layouts/partials/footer.html create mode 100644 layouts/partials/header.html create mode 100644 layouts/partials/pagination.html create mode 100644 static/bower.json create mode 100644 static/bower_components/font-roboto/.bower.json create mode 100644 static/bower_components/font-roboto/README.md create mode 100644 static/bower_components/font-roboto/bower.json create mode 100644 static/bower_components/font-roboto/roboto.html create mode 100644 static/bower_components/iron-a11y-keys-behavior/.bower.json create mode 100644 static/bower_components/iron-a11y-keys-behavior/.gitignore create mode 100644 static/bower_components/iron-a11y-keys-behavior/README.md create mode 100644 static/bower_components/iron-a11y-keys-behavior/bower.json create mode 100644 static/bower_components/iron-a11y-keys-behavior/demo/index.html create mode 100644 static/bower_components/iron-a11y-keys-behavior/demo/x-key-aware.html create mode 100644 static/bower_components/iron-a11y-keys-behavior/index.html create mode 100644 static/bower_components/iron-a11y-keys-behavior/iron-a11y-keys-behavior.html create mode 100644 static/bower_components/iron-a11y-keys-behavior/test/basic-test.html create mode 100644 static/bower_components/iron-a11y-keys-behavior/test/index.html create mode 100644 static/bower_components/iron-behaviors/.bower.json create mode 100644 static/bower_components/iron-behaviors/.gitignore create mode 100644 static/bower_components/iron-behaviors/README.md create mode 100644 static/bower_components/iron-behaviors/bower.json create mode 100644 static/bower_components/iron-behaviors/demo/index.html create mode 100644 static/bower_components/iron-behaviors/demo/simple-button.html create mode 100644 static/bower_components/iron-behaviors/index.html create mode 100644 static/bower_components/iron-behaviors/iron-button-state.html create mode 100644 static/bower_components/iron-behaviors/iron-control-state.html create mode 100644 static/bower_components/iron-behaviors/test/active-state.html create mode 100644 static/bower_components/iron-behaviors/test/disabled-state.html create mode 100644 static/bower_components/iron-behaviors/test/focused-state.html create mode 100644 static/bower_components/iron-behaviors/test/index.html create mode 100644 static/bower_components/iron-behaviors/test/test-elements.html create mode 100644 static/bower_components/iron-flex-layout/.bower.json create mode 100644 static/bower_components/iron-flex-layout/.gitignore create mode 100644 static/bower_components/iron-flex-layout/README.md create mode 100644 static/bower_components/iron-flex-layout/bower.json create mode 100644 static/bower_components/iron-flex-layout/classes/iron-flex-layout.html create mode 100644 static/bower_components/iron-flex-layout/classes/iron-shadow-flex-layout.html create mode 100644 static/bower_components/iron-flex-layout/demo/index.html create mode 100644 static/bower_components/iron-flex-layout/demo/x-app.html create mode 100644 static/bower_components/iron-flex-layout/iron-flex-layout.html create mode 100644 static/bower_components/iron-icon/.bower.json create mode 100644 static/bower_components/iron-icon/.gitignore create mode 100644 static/bower_components/iron-icon/README.md create mode 100644 static/bower_components/iron-icon/bower.json create mode 100644 static/bower_components/iron-icon/demo/index.html create mode 100644 static/bower_components/iron-icon/demo/location.png create mode 100644 static/bower_components/iron-icon/hero.svg create mode 100644 static/bower_components/iron-icon/index.html create mode 100644 static/bower_components/iron-icon/iron-icon.html create mode 100644 static/bower_components/iron-icon/test/index.html create mode 100644 static/bower_components/iron-icon/test/iron-icon.html create mode 100644 static/bower_components/iron-icons/.bower.json create mode 100644 static/bower_components/iron-icons/.gitignore create mode 100644 static/bower_components/iron-icons/README.md create mode 100644 static/bower_components/iron-icons/av-icons.html create mode 100644 static/bower_components/iron-icons/bower.json create mode 100644 static/bower_components/iron-icons/communication-icons.html create mode 100644 static/bower_components/iron-icons/demo/index.html create mode 100644 static/bower_components/iron-icons/device-icons.html create mode 100644 static/bower_components/iron-icons/editor-icons.html create mode 100644 static/bower_components/iron-icons/hardware-icons.html create mode 100644 static/bower_components/iron-icons/hero.svg create mode 100644 static/bower_components/iron-icons/image-icons.html create mode 100644 static/bower_components/iron-icons/index.html create mode 100644 static/bower_components/iron-icons/iron-icons.html create mode 100644 static/bower_components/iron-icons/maps-icons.html create mode 100644 static/bower_components/iron-icons/notification-icons.html create mode 100644 static/bower_components/iron-icons/social-icons.html create mode 100644 static/bower_components/iron-iconset-svg/.bower.json create mode 100644 static/bower_components/iron-iconset-svg/.gitignore create mode 100644 static/bower_components/iron-iconset-svg/README.md create mode 100644 static/bower_components/iron-iconset-svg/bower.json create mode 100644 static/bower_components/iron-iconset-svg/demo/index.html create mode 100644 static/bower_components/iron-iconset-svg/demo/svg-sample-icons.html create mode 100644 static/bower_components/iron-iconset-svg/index.html create mode 100644 static/bower_components/iron-iconset-svg/iron-iconset-svg.html create mode 100644 static/bower_components/iron-iconset-svg/test/index.html create mode 100644 static/bower_components/iron-iconset-svg/test/iron-iconset-svg.html create mode 100644 static/bower_components/iron-image/.bower.json create mode 100644 static/bower_components/iron-image/.gitignore create mode 100644 static/bower_components/iron-image/README.md create mode 100644 static/bower_components/iron-image/bower.json create mode 100644 static/bower_components/iron-image/demo/index.html create mode 100644 static/bower_components/iron-image/demo/polymer.svg create mode 100644 static/bower_components/iron-image/index.html create mode 100644 static/bower_components/iron-image/iron-image.html create mode 100644 static/bower_components/iron-image/test/index.html create mode 100644 static/bower_components/iron-image/test/iron-image.html create mode 100644 static/bower_components/iron-media-query/.bower.json create mode 100644 static/bower_components/iron-media-query/.gitignore create mode 100644 static/bower_components/iron-media-query/README.md create mode 100644 static/bower_components/iron-media-query/bower.json create mode 100644 static/bower_components/iron-media-query/demo/index.html create mode 100644 static/bower_components/iron-media-query/hero.svg create mode 100644 static/bower_components/iron-media-query/index.html create mode 100644 static/bower_components/iron-media-query/iron-media-query.html create mode 100644 static/bower_components/iron-media-query/test/basic.html create mode 100644 static/bower_components/iron-media-query/test/index.html create mode 100644 static/bower_components/iron-menu-behavior/.bower.json create mode 100644 static/bower_components/iron-menu-behavior/.gitignore create mode 100644 static/bower_components/iron-menu-behavior/README.md create mode 100644 static/bower_components/iron-menu-behavior/bower.json create mode 100644 static/bower_components/iron-menu-behavior/demo/index.html create mode 100644 static/bower_components/iron-menu-behavior/demo/simple-menu.html create mode 100644 static/bower_components/iron-menu-behavior/demo/simple-menubar.html create mode 100644 static/bower_components/iron-menu-behavior/index.html create mode 100644 static/bower_components/iron-menu-behavior/iron-menu-behavior.html create mode 100644 static/bower_components/iron-menu-behavior/iron-menubar-behavior.html create mode 100644 static/bower_components/iron-menu-behavior/test/index.html create mode 100644 static/bower_components/iron-menu-behavior/test/iron-menu-behavior.html create mode 100644 static/bower_components/iron-menu-behavior/test/iron-menubar-behavior.html create mode 100644 static/bower_components/iron-menu-behavior/test/test-menu.html create mode 100644 static/bower_components/iron-menu-behavior/test/test-menubar.html create mode 100644 static/bower_components/iron-meta/.bower.json create mode 100644 static/bower_components/iron-meta/.gitignore create mode 100644 static/bower_components/iron-meta/README.md create mode 100644 static/bower_components/iron-meta/bower.json create mode 100644 static/bower_components/iron-meta/demo/index.html create mode 100644 static/bower_components/iron-meta/hero.svg create mode 100644 static/bower_components/iron-meta/index.html create mode 100644 static/bower_components/iron-meta/iron-meta.html create mode 100644 static/bower_components/iron-meta/test/basic.html create mode 100644 static/bower_components/iron-meta/test/index.html create mode 100644 static/bower_components/iron-meta/test/iron-meta.html create mode 100644 static/bower_components/iron-resizable-behavior/.bower.json create mode 100644 static/bower_components/iron-resizable-behavior/.gitignore create mode 100644 static/bower_components/iron-resizable-behavior/README.md create mode 100644 static/bower_components/iron-resizable-behavior/bower.json create mode 100644 static/bower_components/iron-resizable-behavior/demo/index.html create mode 100644 static/bower_components/iron-resizable-behavior/demo/src/x-app.html create mode 100644 static/bower_components/iron-resizable-behavior/index.html create mode 100644 static/bower_components/iron-resizable-behavior/iron-resizable-behavior.html create mode 100644 static/bower_components/iron-resizable-behavior/test/basic.html create mode 100644 static/bower_components/iron-resizable-behavior/test/index.html create mode 100644 static/bower_components/iron-resizable-behavior/test/iron-resizable-behavior.html create mode 100644 static/bower_components/iron-resizable-behavior/test/test-elements.html create mode 100644 static/bower_components/iron-selector/.bower.json create mode 100644 static/bower_components/iron-selector/.gitignore create mode 100644 static/bower_components/iron-selector/README.md create mode 100644 static/bower_components/iron-selector/bower.json create mode 100644 static/bower_components/iron-selector/demo/index.html create mode 100644 static/bower_components/iron-selector/index.html create mode 100644 static/bower_components/iron-selector/iron-multi-selectable.html create mode 100644 static/bower_components/iron-selector/iron-selectable.html create mode 100644 static/bower_components/iron-selector/iron-selection.html create mode 100644 static/bower_components/iron-selector/iron-selector.html create mode 100644 static/bower_components/iron-selector/test/activate-event.html create mode 100644 static/bower_components/iron-selector/test/basic.html create mode 100644 static/bower_components/iron-selector/test/content-element.html create mode 100644 static/bower_components/iron-selector/test/content.html create mode 100644 static/bower_components/iron-selector/test/index.html create mode 100644 static/bower_components/iron-selector/test/multi.html create mode 100644 static/bower_components/iron-selector/test/next-previous.html create mode 100644 static/bower_components/iron-selector/test/selected-attribute.html create mode 100644 static/bower_components/iron-selector/test/template-repeat.html create mode 100644 static/bower_components/paper-behaviors/.bower.json create mode 100644 static/bower_components/paper-behaviors/.gitignore create mode 100644 static/bower_components/paper-behaviors/README.md create mode 100644 static/bower_components/paper-behaviors/bower.json create mode 100644 static/bower_components/paper-behaviors/demo/index.html create mode 100644 static/bower_components/paper-behaviors/demo/paper-button.html create mode 100644 static/bower_components/paper-behaviors/demo/paper-radio-button.html create mode 100644 static/bower_components/paper-behaviors/index.html create mode 100644 static/bower_components/paper-behaviors/paper-button-behavior.html create mode 100644 static/bower_components/paper-behaviors/paper-inky-focus-behavior.html create mode 100644 static/bower_components/paper-behaviors/test/index.html create mode 100644 static/bower_components/paper-behaviors/test/paper-button-behavior.html create mode 100644 static/bower_components/paper-behaviors/test/paper-radio-button-behavior.html create mode 100644 static/bower_components/paper-behaviors/test/test-button.html create mode 100644 static/bower_components/paper-behaviors/test/test-radio-button.html create mode 100644 static/bower_components/paper-drawer-panel/.bower.json create mode 100644 static/bower_components/paper-drawer-panel/.gitignore create mode 100644 static/bower_components/paper-drawer-panel/README.md create mode 100644 static/bower_components/paper-drawer-panel/bower.json create mode 100644 static/bower_components/paper-drawer-panel/demo/index.html create mode 100644 static/bower_components/paper-drawer-panel/hero.svg create mode 100644 static/bower_components/paper-drawer-panel/index.html create mode 100644 static/bower_components/paper-drawer-panel/paper-drawer-panel.css create mode 100644 static/bower_components/paper-drawer-panel/paper-drawer-panel.html create mode 100644 static/bower_components/paper-fab/.bower.json create mode 100644 static/bower_components/paper-fab/.gitignore create mode 100644 static/bower_components/paper-fab/README.md create mode 100644 static/bower_components/paper-fab/bower.json create mode 100644 static/bower_components/paper-fab/demo/index.html create mode 100644 static/bower_components/paper-fab/index.html create mode 100644 static/bower_components/paper-fab/paper-fab.html create mode 100644 static/bower_components/paper-fab/test/a11y.html create mode 100644 static/bower_components/paper-fab/test/basic.html create mode 100644 static/bower_components/paper-fab/test/index.html create mode 100644 static/bower_components/paper-icon-button/.bower.json create mode 100644 static/bower_components/paper-icon-button/.gitignore create mode 100644 static/bower_components/paper-icon-button/README.md create mode 100644 static/bower_components/paper-icon-button/bower.json create mode 100644 static/bower_components/paper-icon-button/demo/index.html create mode 100644 static/bower_components/paper-icon-button/index.html create mode 100644 static/bower_components/paper-icon-button/paper-icon-button.html create mode 100644 static/bower_components/paper-icon-button/test/a11y.html create mode 100644 static/bower_components/paper-icon-button/test/basic.html create mode 100644 static/bower_components/paper-icon-button/test/index.html create mode 100644 static/bower_components/paper-item/.bower.json create mode 100644 static/bower_components/paper-item/.gitignore create mode 100644 static/bower_components/paper-item/README.md create mode 100644 static/bower_components/paper-item/all-imports.html create mode 100644 static/bower_components/paper-item/bower.json create mode 100644 static/bower_components/paper-item/demo/index.html create mode 100644 static/bower_components/paper-item/index.html create mode 100644 static/bower_components/paper-item/paper-icon-item.html create mode 100644 static/bower_components/paper-item/paper-item-body.html create mode 100644 static/bower_components/paper-item/paper-item-shared.css create mode 100644 static/bower_components/paper-item/paper-item.html create mode 100644 static/bower_components/paper-item/test/index.html create mode 100644 static/bower_components/paper-item/test/paper-item.html create mode 100644 static/bower_components/paper-material/.bower.json create mode 100644 static/bower_components/paper-material/.gitignore create mode 100644 static/bower_components/paper-material/README.md create mode 100644 static/bower_components/paper-material/bower.json create mode 100644 static/bower_components/paper-material/demo/index.html create mode 100644 static/bower_components/paper-material/index.html create mode 100644 static/bower_components/paper-material/paper-material.html create mode 100644 static/bower_components/paper-material/test/index.html create mode 100644 static/bower_components/paper-material/test/paper-material.html create mode 100644 static/bower_components/paper-menu/.bower.json create mode 100644 static/bower_components/paper-menu/.gitignore create mode 100644 static/bower_components/paper-menu/README.md create mode 100644 static/bower_components/paper-menu/bower.json create mode 100644 static/bower_components/paper-menu/demo/index.html create mode 100644 static/bower_components/paper-menu/hero.svg create mode 100644 static/bower_components/paper-menu/index.html create mode 100644 static/bower_components/paper-menu/paper-menu.html create mode 100644 static/bower_components/paper-menu/test/index.html create mode 100644 static/bower_components/paper-menu/test/paper-menu.html create mode 100644 static/bower_components/paper-ripple/.bower.json create mode 100644 static/bower_components/paper-ripple/.gitignore create mode 100644 static/bower_components/paper-ripple/README.md create mode 100644 static/bower_components/paper-ripple/bower.json create mode 100644 static/bower_components/paper-ripple/demo/index.html create mode 100644 static/bower_components/paper-ripple/hero.svg create mode 100644 static/bower_components/paper-ripple/index.html create mode 100644 static/bower_components/paper-ripple/paper-ripple.html create mode 100644 static/bower_components/paper-ripple/test/index.html create mode 100644 static/bower_components/paper-ripple/test/paper-ripple.html create mode 100644 static/bower_components/paper-scroll-header-panel/.bower.json create mode 100644 static/bower_components/paper-scroll-header-panel/.gitignore create mode 100644 static/bower_components/paper-scroll-header-panel/README.md create mode 100644 static/bower_components/paper-scroll-header-panel/bower.json create mode 100644 static/bower_components/paper-scroll-header-panel/demo/demo1.html create mode 100644 static/bower_components/paper-scroll-header-panel/demo/demo2.html create mode 100644 static/bower_components/paper-scroll-header-panel/demo/demo3.html create mode 100644 static/bower_components/paper-scroll-header-panel/demo/demo4.html create mode 100644 static/bower_components/paper-scroll-header-panel/demo/demo5.html create mode 100644 static/bower_components/paper-scroll-header-panel/demo/demo6.html create mode 100644 static/bower_components/paper-scroll-header-panel/demo/demo7.html create mode 100644 static/bower_components/paper-scroll-header-panel/demo/demo8.html create mode 100644 static/bower_components/paper-scroll-header-panel/demo/demo9.html create mode 100644 static/bower_components/paper-scroll-header-panel/demo/images/bg2.jpg create mode 100644 static/bower_components/paper-scroll-header-panel/demo/images/bg3.jpg create mode 100644 static/bower_components/paper-scroll-header-panel/demo/images/bg5.jpg create mode 100644 static/bower_components/paper-scroll-header-panel/demo/images/bg6.jpg create mode 100644 static/bower_components/paper-scroll-header-panel/demo/images/bg9.jpg create mode 100644 static/bower_components/paper-scroll-header-panel/demo/index.html create mode 100644 static/bower_components/paper-scroll-header-panel/demo/lorem-ipsum.html create mode 100644 static/bower_components/paper-scroll-header-panel/demo/sample-content.html create mode 100644 static/bower_components/paper-scroll-header-panel/hero.svg create mode 100644 static/bower_components/paper-scroll-header-panel/index.html create mode 100644 static/bower_components/paper-scroll-header-panel/paper-scroll-header-panel.html create mode 100644 static/bower_components/paper-scroll-header-panel/test/basic.html create mode 100644 static/bower_components/paper-scroll-header-panel/test/index.html create mode 100644 static/bower_components/paper-styles/.bower.json create mode 100644 static/bower_components/paper-styles/README.md create mode 100644 static/bower_components/paper-styles/bower.json create mode 100644 static/bower_components/paper-styles/classes/global.html create mode 100644 static/bower_components/paper-styles/classes/shadow-layout.html create mode 100644 static/bower_components/paper-styles/classes/shadow.html create mode 100644 static/bower_components/paper-styles/classes/typography.html create mode 100644 static/bower_components/paper-styles/color.html create mode 100644 static/bower_components/paper-styles/default-theme.html create mode 100644 static/bower_components/paper-styles/demo-pages.html create mode 100644 static/bower_components/paper-styles/demo.css create mode 100644 static/bower_components/paper-styles/demo/index.html create mode 100644 static/bower_components/paper-styles/paper-styles-classes.html create mode 100644 static/bower_components/paper-styles/paper-styles.html create mode 100644 static/bower_components/paper-styles/shadow.html create mode 100644 static/bower_components/paper-styles/typography.html create mode 100644 static/bower_components/paper-toolbar/.bower.json create mode 100644 static/bower_components/paper-toolbar/.gitignore create mode 100644 static/bower_components/paper-toolbar/README.md create mode 100644 static/bower_components/paper-toolbar/bower.json create mode 100644 static/bower_components/paper-toolbar/demo/index.html create mode 100644 static/bower_components/paper-toolbar/index.html create mode 100644 static/bower_components/paper-toolbar/paper-toolbar.html create mode 100644 static/bower_components/paper-toolbar/test/index.html create mode 100644 static/bower_components/paper-toolbar/test/paper-toolbar.html create mode 100644 static/bower_components/polymer/.bower.json create mode 100644 static/bower_components/polymer/LICENSE.txt create mode 100644 static/bower_components/polymer/bower.json create mode 100644 static/bower_components/polymer/build.log create mode 100644 static/bower_components/polymer/polymer-micro.html create mode 100644 static/bower_components/polymer/polymer-mini.html create mode 100644 static/bower_components/polymer/polymer.html create mode 100644 static/bower_components/webcomponentsjs/.bower.json create mode 100644 static/bower_components/webcomponentsjs/CustomElements.js create mode 100644 static/bower_components/webcomponentsjs/CustomElements.min.js create mode 100644 static/bower_components/webcomponentsjs/HTMLImports.js create mode 100644 static/bower_components/webcomponentsjs/HTMLImports.min.js create mode 100644 static/bower_components/webcomponentsjs/MutationObserver.js create mode 100644 static/bower_components/webcomponentsjs/MutationObserver.min.js create mode 100644 static/bower_components/webcomponentsjs/README.md create mode 100644 static/bower_components/webcomponentsjs/ShadowDOM.js create mode 100644 static/bower_components/webcomponentsjs/ShadowDOM.min.js create mode 100644 static/bower_components/webcomponentsjs/bower.json create mode 100644 static/bower_components/webcomponentsjs/build.log create mode 100644 static/bower_components/webcomponentsjs/package.json create mode 100644 static/bower_components/webcomponentsjs/webcomponents-lite.js create mode 100644 static/bower_components/webcomponentsjs/webcomponents-lite.min.js create mode 100644 static/bower_components/webcomponentsjs/webcomponents.js create mode 100644 static/bower_components/webcomponentsjs/webcomponents.min.js create mode 100644 static/images/cover.png create mode 100644 static/images/facebook-dreamstale25.png create mode 100644 static/images/feed-dreamstale27.png create mode 100644 static/images/github2-dreamstale35.png create mode 100644 static/images/google+-dreamstale37.png create mode 100644 static/images/linkedin-dreamstale45.png create mode 100644 static/images/photo.png create mode 100644 static/images/profile.png create mode 100644 static/images/twitter-dreamstale71.png create mode 100644 theme.toml diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..74b7d39 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2015 pdevty + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..7755255 --- /dev/null +++ b/README.md @@ -0,0 +1,69 @@ +# Polymer + +Polymer is a web components material design theme for [Hugo](http://gohugo.io/). + +![](https://github.com/pdevty/polymer/blob/master/images/tn.png) + +## Features + +- Material Design by [polymer](https://www.polymer-project.org/1.0/) +- Google Analytics (optional) +- Pagination +- Disqus (optional) +- Twitter, Facebook, GitHub, Google+, LinkedIn links (optional) +- Tags +- Categories +- Cover, Photo, Profile image (optional) +- Highlighting source code + +## Installation + +```shell +$ mkdir themes +$ cd themes +$ git clone https://github.com/pdevty/polymer +``` + +## Usage + +```shell +$ hugo server -t polymer -w -D +``` + +## Configuration + +config.toml + +```toml +theme="polymer" +baseurl = "Your Site URL" +languageCode = "en-us" +title = "Your Site Title" +MetaDataFormat = "toml" +paginate = 10 # optional +disqusShortname = "Your Disqus Name" # optional +copyright = "© 2015 Copyright Text" + +[params] + author = "Your Name" + photo = "images/photo.png" # optional + profile = "images/profile.png" # optional + cover = "images/cover.png" # optional + twitter = "Your Twitter Name" # optional + github = "Your Github Name" # optional + facebook = "Your facebook Name" # optional + gplus = "Your Google+ Name" # optional + linkedin = "Your linkedin Name" # optional + googleAnalyticsUserID = "Your Analytics User Id" # optional + +[permalinks] + post = "/:year/:month/:day/:filename/" # optional +``` + +## Contributing + +1. Fork it +2. Create your feature branch (`git checkout -b my-new-feature`) +3. Commit your changes (`git commit -am 'Add some feature'`) +4. Push to the branch (`git push origin my-new-feature`) +5. Create new Pull Request \ No newline at end of file diff --git a/archetypes/default.md b/archetypes/default.md new file mode 100644 index 0000000..b03c0c1 --- /dev/null +++ b/archetypes/default.md @@ -0,0 +1,4 @@ ++++ +Tags = [] +Categories = [] ++++ \ No newline at end of file diff --git a/images/screenshot.png b/images/screenshot.png new file mode 100644 index 0000000..63394a5 Binary files /dev/null and b/images/screenshot.png differ diff --git a/images/tn.png b/images/tn.png new file mode 100644 index 0000000..46935ee Binary files /dev/null and b/images/tn.png differ diff --git a/layouts/_default/list.html b/layouts/_default/list.html new file mode 100644 index 0000000..b8b3d91 --- /dev/null +++ b/layouts/_default/list.html @@ -0,0 +1,7 @@ +{{ partial "header.html" . }} + +{{ partial "content.html" . }} + +{{ partial "pagination.html" .Paginator }} + +{{ partial "footer.html" . }} diff --git a/layouts/_default/single.html b/layouts/_default/single.html new file mode 100644 index 0000000..65a2bbd --- /dev/null +++ b/layouts/_default/single.html @@ -0,0 +1,45 @@ +{{ partial "header.html" . }} + +{{ $baseurl := .Site.BaseURL }} +
+ +
+
{{ .Title }}
+ {{if .Params.categories }} +
+ {{ range $index, $category := .Params.categories }} + {{ $category }} + {{ end }} +
+ {{end}} +
{{ .Content }}
+
+ {{ .Date.Format "2 Jan 2006" }} + {{if .Params.tags }} + {{ range $index, $tag := .Params.tags }} + #{{ $tag }} + {{ end }} + {{end}} +
+ {{ with .Site.DisqusShortname }} + {{ partial "disqus.html" . }} + {{ end }} +
+ +
+ + + {{if .Prev}} + + {{else}} + + {{end}} +
+ {{if .Next}} + + {{else}} + + {{end}} +
+ +{{ partial "footer.html" . }} diff --git a/layouts/_default/terms.html b/layouts/_default/terms.html new file mode 100644 index 0000000..458139b --- /dev/null +++ b/layouts/_default/terms.html @@ -0,0 +1,12 @@ +{{ $baseurl := .Site.BaseURL }} +{{ partial "header.html" . }} + +{{ $data := .Data }} + + + {{ range $key, $value := .Data.Terms }} + {{ if eq $data.Plural "tags"}}{{else}}{{end}} 
{{ $key }}
{{ len $value }}
+ {{ end }} +
+ +{{ partial "footer.html" . }} \ No newline at end of file diff --git a/layouts/index.html b/layouts/index.html new file mode 100644 index 0000000..b8b3d91 --- /dev/null +++ b/layouts/index.html @@ -0,0 +1,7 @@ +{{ partial "header.html" . }} + +{{ partial "content.html" . }} + +{{ partial "pagination.html" .Paginator }} + +{{ partial "footer.html" . }} diff --git a/layouts/partials/content.html b/layouts/partials/content.html new file mode 100644 index 0000000..e93dde2 --- /dev/null +++ b/layouts/partials/content.html @@ -0,0 +1,26 @@ +{{ $baseurl := .Site.BaseURL }} +
+ +{{range $index, $page := .Paginator.Pages}} +
+ + {{if .Params.categories }} +
+ {{ range $index, $category := .Params.categories }} + {{ $category }} + {{ end }} +
+ {{end}} +
{{ .Summary }}
+
+ {{ .Date.Format "2 Jan 2006" }} + {{if .Params.tags }} + {{ range $index, $tag := .Params.tags }} + #{{ $tag }} + {{ end }} + {{end}} +
+
+{{ end }} + +
diff --git a/layouts/partials/disqus.html b/layouts/partials/disqus.html new file mode 100644 index 0000000..a07c97a --- /dev/null +++ b/layouts/partials/disqus.html @@ -0,0 +1,13 @@ +
+ + \ No newline at end of file diff --git a/layouts/partials/footer.html b/layouts/partials/footer.html new file mode 100644 index 0000000..7f2c1c6 --- /dev/null +++ b/layouts/partials/footer.html @@ -0,0 +1,21 @@ + + +
+
Design pdevty
+
+ + + + + {{with .Site.Params.googleAnalyticsUserID }} + + {{end}} + + \ No newline at end of file diff --git a/layouts/partials/header.html b/layouts/partials/header.html new file mode 100644 index 0000000..f61d3c5 --- /dev/null +++ b/layouts/partials/header.html @@ -0,0 +1,165 @@ +{{ $baseurl := .Site.BaseURL }} + + + + + + + {{ .Title }} + + + + + + + + + + + + + + + + + + + + + + + +
{{.Site.Title}}
+
+ {{with .Site.Params.facebook}} + + {{end}} + {{with .Site.Params.twitter}} + + {{end}} + {{with .Site.Params.gplus}} + + {{end}} + {{with .Site.Params.linkedin}} + + {{end}} + {{with .Site.Params.github}} + + {{end}} + + +
diff --git a/layouts/partials/pagination.html b/layouts/partials/pagination.html new file mode 100644 index 0000000..1b87b12 --- /dev/null +++ b/layouts/partials/pagination.html @@ -0,0 +1,13 @@ + + {{if .HasPrev}} + + {{else}} + + {{end}} +
+ {{if .HasNext}} + + {{else}} + + {{end}} +
diff --git a/static/bower.json b/static/bower.json new file mode 100644 index 0000000..5ff3b4f --- /dev/null +++ b/static/bower.json @@ -0,0 +1,14 @@ +{ + "name": "polymer", + "dependencies": { + "polymer": "Polymer/polymer#^1.0.0", + "paper-scroll-header-panel": "PolymerElements/paper-scroll-header-panel#^1.0.0", + "iron-icons": "PolymerElements/iron-icons#^1.0.0", + "paper-icon-button": "PolymerElements/paper-icon-button#^1.0.0", + "paper-drawer-panel": "PolymerElements/paper-drawer-panel#^1.0.0", + "paper-menu": "PolymerElements/paper-menu#^1.0.0", + "paper-item": "PolymerElements/paper-item#^1.0.0", + "paper-fab": "PolymerElements/paper-fab#^1.0.0", + "iron-image": "PolymerElements/iron-image#^1.0.0" + } +} diff --git a/static/bower_components/font-roboto/.bower.json b/static/bower_components/font-roboto/.bower.json new file mode 100644 index 0000000..432744c --- /dev/null +++ b/static/bower_components/font-roboto/.bower.json @@ -0,0 +1,31 @@ +{ + "name": "font-roboto", + "version": "1.0.0", + "description": "An HTML import for Roboto", + "authors": [ + "The Polymer Authors" + ], + "keywords": [ + "font", + "roboto" + ], + "repository": { + "type": "git", + "url": "git://github.com/PolymerElements/font-roboto.git" + }, + "main": "roboto.html", + "license": "http://polymer.github.io/LICENSE.txt", + "homepage": "https://github.com/PolymerElements/font-roboto/", + "ignore": [ + "/.*" + ], + "_release": "1.0.0", + "_resolution": { + "type": "version", + "tag": "1.0.0", + "commit": "b85b217e5f4b31f9c03b588e25c977b8104a40cd" + }, + "_source": "git://github.com/PolymerElements/font-roboto.git", + "_target": "^1.0.0", + "_originalSource": "PolymerElements/font-roboto" +} \ No newline at end of file diff --git a/static/bower_components/font-roboto/README.md b/static/bower_components/font-roboto/README.md new file mode 100644 index 0000000..61c6394 --- /dev/null +++ b/static/bower_components/font-roboto/README.md @@ -0,0 +1 @@ +# font-roboto diff --git a/static/bower_components/font-roboto/bower.json b/static/bower_components/font-roboto/bower.json new file mode 100644 index 0000000..0962916 --- /dev/null +++ b/static/bower_components/font-roboto/bower.json @@ -0,0 +1,22 @@ +{ + "name": "font-roboto", + "version": "1.0.0", + "description": "An HTML import for Roboto", + "authors": [ + "The Polymer Authors" + ], + "keywords": [ + "font", + "roboto" + ], + "repository": { + "type": "git", + "url": "git://github.com/PolymerElements/font-roboto.git" + }, + "main": "roboto.html", + "license": "http://polymer.github.io/LICENSE.txt", + "homepage": "https://github.com/PolymerElements/font-roboto/", + "ignore": [ + "/.*" + ] +} diff --git a/static/bower_components/font-roboto/roboto.html b/static/bower_components/font-roboto/roboto.html new file mode 100644 index 0000000..848d1da --- /dev/null +++ b/static/bower_components/font-roboto/roboto.html @@ -0,0 +1,10 @@ + + diff --git a/static/bower_components/iron-a11y-keys-behavior/.bower.json b/static/bower_components/iron-a11y-keys-behavior/.bower.json new file mode 100644 index 0000000..f0a9c76 --- /dev/null +++ b/static/bower_components/iron-a11y-keys-behavior/.bower.json @@ -0,0 +1,42 @@ +{ + "name": "iron-a11y-keys-behavior", + "version": "1.0.5", + "description": "A behavior that enables keybindings for greater a11y.", + "keywords": [ + "web-components", + "web-component", + "polymer", + "a11y", + "input" + ], + "authors": [ + "The Polymer Authors" + ], + "repository": { + "type": "git", + "url": "git://github.com/PolymerElements/iron-a11y-keys-behavior.git" + }, + "main": "iron-a11y-keys-behavior.html", + "license": "http://polymer.github.io/LICENSE.txt", + "dependencies": { + "polymer": "Polymer/polymer#^1.0.0" + }, + "devDependencies": { + "paper-styles": "PolymerElements/paper-styles#^1.0.2", + "iron-component-page": "polymerelements/iron-component-page#^1.0.0", + "iron-test-helpers": "polymerelements/iron-test-helpers#^1.0.0", + "test-fixture": "polymerelements/test-fixture#^1.0.0", + "web-component-tester": "*", + "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0" + }, + "homepage": "https://github.com/polymerelements/iron-a11y-keys-behavior", + "_release": "1.0.5", + "_resolution": { + "type": "version", + "tag": "v1.0.5", + "commit": "cf833eab5c55a26c5aa92e56d3fcb079120ce66a" + }, + "_source": "git://github.com/polymerelements/iron-a11y-keys-behavior.git", + "_target": "^1.0.0", + "_originalSource": "polymerelements/iron-a11y-keys-behavior" +} \ No newline at end of file diff --git a/static/bower_components/iron-a11y-keys-behavior/.gitignore b/static/bower_components/iron-a11y-keys-behavior/.gitignore new file mode 100644 index 0000000..8d4ae25 --- /dev/null +++ b/static/bower_components/iron-a11y-keys-behavior/.gitignore @@ -0,0 +1 @@ +bower_components diff --git a/static/bower_components/iron-a11y-keys-behavior/README.md b/static/bower_components/iron-a11y-keys-behavior/README.md new file mode 100644 index 0000000..2d16daa --- /dev/null +++ b/static/bower_components/iron-a11y-keys-behavior/README.md @@ -0,0 +1,15 @@ +iron-a11y-keys-behavior +======================= + +`Polymer.IronA11yKeysBehavior` provides a normalized interface for processing +keyboard commands that pertain to [WAI-ARIA best practices](http://www.w3.org/TR/wai-aria-practices/#kbd_general_binding). +The element takes care of browser differences with respect to Keyboard events +and uses an expressive syntax to filter key presses. + +Use the `keyBindings` prototype property to express what combination of keys +will trigger the event to fire. + +Use the `key-event-target` attribute to set up event handlers on a specific +node. +The `keys-pressed` event will fire when one of the key combinations set with the +`keys` property is pressed. diff --git a/static/bower_components/iron-a11y-keys-behavior/bower.json b/static/bower_components/iron-a11y-keys-behavior/bower.json new file mode 100644 index 0000000..aa52718 --- /dev/null +++ b/static/bower_components/iron-a11y-keys-behavior/bower.json @@ -0,0 +1,32 @@ +{ + "name": "iron-a11y-keys-behavior", + "version": "1.0.5", + "description": "A behavior that enables keybindings for greater a11y.", + "keywords": [ + "web-components", + "web-component", + "polymer", + "a11y", + "input" + ], + "authors": [ + "The Polymer Authors" + ], + "repository": { + "type": "git", + "url": "git://github.com/PolymerElements/iron-a11y-keys-behavior.git" + }, + "main": "iron-a11y-keys-behavior.html", + "license": "http://polymer.github.io/LICENSE.txt", + "dependencies": { + "polymer": "Polymer/polymer#^1.0.0" + }, + "devDependencies": { + "paper-styles": "PolymerElements/paper-styles#^1.0.2", + "iron-component-page": "polymerelements/iron-component-page#^1.0.0", + "iron-test-helpers": "polymerelements/iron-test-helpers#^1.0.0", + "test-fixture": "polymerelements/test-fixture#^1.0.0", + "web-component-tester": "*", + "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0" + } +} diff --git a/static/bower_components/iron-a11y-keys-behavior/demo/index.html b/static/bower_components/iron-a11y-keys-behavior/demo/index.html new file mode 100644 index 0000000..2c3fec7 --- /dev/null +++ b/static/bower_components/iron-a11y-keys-behavior/demo/index.html @@ -0,0 +1,24 @@ + + + + + + Iron A11y Keys Behavior demo + + + + + +
+ +
+ + diff --git a/static/bower_components/iron-a11y-keys-behavior/demo/x-key-aware.html b/static/bower_components/iron-a11y-keys-behavior/demo/x-key-aware.html new file mode 100644 index 0000000..a7f3205 --- /dev/null +++ b/static/bower_components/iron-a11y-keys-behavior/demo/x-key-aware.html @@ -0,0 +1,91 @@ + + + + + + + + + + + + diff --git a/static/bower_components/iron-a11y-keys-behavior/index.html b/static/bower_components/iron-a11y-keys-behavior/index.html new file mode 100644 index 0000000..e533e79 --- /dev/null +++ b/static/bower_components/iron-a11y-keys-behavior/index.html @@ -0,0 +1,24 @@ + + + + + + iron-a11y-keys-behavior + + + + + + + + + + diff --git a/static/bower_components/iron-a11y-keys-behavior/iron-a11y-keys-behavior.html b/static/bower_components/iron-a11y-keys-behavior/iron-a11y-keys-behavior.html new file mode 100644 index 0000000..e95a298 --- /dev/null +++ b/static/bower_components/iron-a11y-keys-behavior/iron-a11y-keys-behavior.html @@ -0,0 +1,421 @@ + + + + + diff --git a/static/bower_components/iron-a11y-keys-behavior/test/basic-test.html b/static/bower_components/iron-a11y-keys-behavior/test/basic-test.html new file mode 100644 index 0000000..8e50c92 --- /dev/null +++ b/static/bower_components/iron-a11y-keys-behavior/test/basic-test.html @@ -0,0 +1,248 @@ + + + + + + + iron-a11y-keys + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/bower_components/iron-a11y-keys-behavior/test/index.html b/static/bower_components/iron-a11y-keys-behavior/test/index.html new file mode 100644 index 0000000..24f9e35 --- /dev/null +++ b/static/bower_components/iron-a11y-keys-behavior/test/index.html @@ -0,0 +1,29 @@ + + + + + + + Tests + + + + + + + + + diff --git a/static/bower_components/iron-behaviors/.bower.json b/static/bower_components/iron-behaviors/.bower.json new file mode 100644 index 0000000..bf8b6cf --- /dev/null +++ b/static/bower_components/iron-behaviors/.bower.json @@ -0,0 +1,40 @@ +{ + "name": "iron-behaviors", + "version": "1.0.4", + "description": "Provides a set of behaviors for the iron elements", + "private": true, + "authors": [ + "The Polymer Authors" + ], + "repository": { + "type": "git", + "url": "git://github.com/PolymerElements/iron-behaviors.git" + }, + "main": [ + "iron-button-state.html", + "iron-control-state.html" + ], + "license": "http://polymer.github.io/LICENSE.txt", + "dependencies": { + "polymer": "Polymer/polymer#^1.0.0", + "iron-a11y-keys-behavior": "PolymerElements/iron-a11y-keys-behavior#^1.0.0" + }, + "devDependencies": { + "paper-styles": "polymerelements/paper-styles#^1.0.2", + "iron-test-helpers": "polymerelements/iron-test-helpers#^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" + }, + "homepage": "https://github.com/PolymerElements/iron-behaviors", + "_release": "1.0.4", + "_resolution": { + "type": "version", + "tag": "v1.0.4", + "commit": "8792edd457de697a74f398c09b67df30adf7d866" + }, + "_source": "git://github.com/PolymerElements/iron-behaviors.git", + "_target": "^1.0.0", + "_originalSource": "PolymerElements/iron-behaviors" +} \ No newline at end of file diff --git a/static/bower_components/iron-behaviors/.gitignore b/static/bower_components/iron-behaviors/.gitignore new file mode 100644 index 0000000..8d4ae25 --- /dev/null +++ b/static/bower_components/iron-behaviors/.gitignore @@ -0,0 +1 @@ +bower_components diff --git a/static/bower_components/iron-behaviors/README.md b/static/bower_components/iron-behaviors/README.md new file mode 100644 index 0000000..593986e --- /dev/null +++ b/static/bower_components/iron-behaviors/README.md @@ -0,0 +1,4 @@ +iron-behaviors +============== + +This repository collects shared behaviors that are mixed in to other elements. diff --git a/static/bower_components/iron-behaviors/bower.json b/static/bower_components/iron-behaviors/bower.json new file mode 100644 index 0000000..6a18575 --- /dev/null +++ b/static/bower_components/iron-behaviors/bower.json @@ -0,0 +1,30 @@ +{ + "name": "iron-behaviors", + "version": "1.0.4", + "description": "Provides a set of behaviors for the iron elements", + "private": true, + "authors": [ + "The Polymer Authors" + ], + "repository": { + "type": "git", + "url": "git://github.com/PolymerElements/iron-behaviors.git" + }, + "main": [ + "iron-button-state.html", + "iron-control-state.html" + ], + "license": "http://polymer.github.io/LICENSE.txt", + "dependencies": { + "polymer": "Polymer/polymer#^1.0.0", + "iron-a11y-keys-behavior": "PolymerElements/iron-a11y-keys-behavior#^1.0.0" + }, + "devDependencies": { + "paper-styles": "polymerelements/paper-styles#^1.0.2", + "iron-test-helpers": "polymerelements/iron-test-helpers#^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/static/bower_components/iron-behaviors/demo/index.html b/static/bower_components/iron-behaviors/demo/index.html new file mode 100644 index 0000000..4001664 --- /dev/null +++ b/static/bower_components/iron-behaviors/demo/index.html @@ -0,0 +1,47 @@ + + + + + + + + + + simple-button + + + + + + + + + +
+

Normal

+ + Hello World + +

Toggles

+ + Hello World + +

Disabled

+ + Hello World +
+ + diff --git a/static/bower_components/iron-behaviors/demo/simple-button.html b/static/bower_components/iron-behaviors/demo/simple-button.html new file mode 100644 index 0000000..ab6432b --- /dev/null +++ b/static/bower_components/iron-behaviors/demo/simple-button.html @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + diff --git a/static/bower_components/iron-behaviors/index.html b/static/bower_components/iron-behaviors/index.html new file mode 100644 index 0000000..220deb0 --- /dev/null +++ b/static/bower_components/iron-behaviors/index.html @@ -0,0 +1,27 @@ + + + + + + Iron Behaviors + + + + + + + + + + + + + diff --git a/static/bower_components/iron-behaviors/iron-button-state.html b/static/bower_components/iron-behaviors/iron-button-state.html new file mode 100644 index 0000000..fc52e17 --- /dev/null +++ b/static/bower_components/iron-behaviors/iron-button-state.html @@ -0,0 +1,186 @@ + + + + + + + diff --git a/static/bower_components/iron-behaviors/iron-control-state.html b/static/bower_components/iron-behaviors/iron-control-state.html new file mode 100644 index 0000000..33e42ea --- /dev/null +++ b/static/bower_components/iron-behaviors/iron-control-state.html @@ -0,0 +1,108 @@ + + + + + diff --git a/static/bower_components/iron-behaviors/test/active-state.html b/static/bower_components/iron-behaviors/test/active-state.html new file mode 100644 index 0000000..bffa727 --- /dev/null +++ b/static/bower_components/iron-behaviors/test/active-state.html @@ -0,0 +1,154 @@ + + + + + active-state + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/bower_components/iron-behaviors/test/disabled-state.html b/static/bower_components/iron-behaviors/test/disabled-state.html new file mode 100644 index 0000000..af24ee2 --- /dev/null +++ b/static/bower_components/iron-behaviors/test/disabled-state.html @@ -0,0 +1,85 @@ + + + + + disabled-state + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/bower_components/iron-behaviors/test/focused-state.html b/static/bower_components/iron-behaviors/test/focused-state.html new file mode 100644 index 0000000..2d3af69 --- /dev/null +++ b/static/bower_components/iron-behaviors/test/focused-state.html @@ -0,0 +1,120 @@ + + + + + focused-state + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/bower_components/iron-behaviors/test/index.html b/static/bower_components/iron-behaviors/test/index.html new file mode 100644 index 0000000..0eef4d6 --- /dev/null +++ b/static/bower_components/iron-behaviors/test/index.html @@ -0,0 +1,25 @@ + + + + + + + + + + + + diff --git a/static/bower_components/iron-behaviors/test/test-elements.html b/static/bower_components/iron-behaviors/test/test-elements.html new file mode 100644 index 0000000..43bd8e5 --- /dev/null +++ b/static/bower_components/iron-behaviors/test/test-elements.html @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + diff --git a/static/bower_components/iron-flex-layout/.bower.json b/static/bower_components/iron-flex-layout/.bower.json new file mode 100644 index 0000000..cfb5824 --- /dev/null +++ b/static/bower_components/iron-flex-layout/.bower.json @@ -0,0 +1,36 @@ +{ + "name": "iron-flex-layout", + "version": "1.0.2", + "description": "Provide flexbox-based layouts", + "keywords": [ + "web-components", + "polymer", + "layout" + ], + "private": true, + "license": "http://polymer.github.io/LICENSE.txt", + "authors": [ + "The Polymer Authors" + ], + "repository": { + "type": "git", + "url": "git://github.com/PolymerElements/iron-flex-layout.git" + }, + "dependencies": { + "polymer": "Polymer/polymer#^1.0.0" + }, + "devDependencies": { + "paper-styles": "polymerelements/paper-styles#^1.0.0", + "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0" + }, + "homepage": "https://github.com/polymerelements/iron-flex-layout", + "_release": "1.0.2", + "_resolution": { + "type": "version", + "tag": "v1.0.2", + "commit": "50bcecf40ab23caa7c2cd90030555e00c5ba7154" + }, + "_source": "git://github.com/polymerelements/iron-flex-layout.git", + "_target": "^1.0.0", + "_originalSource": "polymerelements/iron-flex-layout" +} \ No newline at end of file diff --git a/static/bower_components/iron-flex-layout/.gitignore b/static/bower_components/iron-flex-layout/.gitignore new file mode 100644 index 0000000..1eb1fa5 --- /dev/null +++ b/static/bower_components/iron-flex-layout/.gitignore @@ -0,0 +1,2 @@ +bower_components + diff --git a/static/bower_components/iron-flex-layout/README.md b/static/bower_components/iron-flex-layout/README.md new file mode 100644 index 0000000..895ed0f --- /dev/null +++ b/static/bower_components/iron-flex-layout/README.md @@ -0,0 +1,4 @@ +iron-flex-layout +================ + +Layout styles for the iron elements. diff --git a/static/bower_components/iron-flex-layout/bower.json b/static/bower_components/iron-flex-layout/bower.json new file mode 100644 index 0000000..202fbe0 --- /dev/null +++ b/static/bower_components/iron-flex-layout/bower.json @@ -0,0 +1,26 @@ +{ + "name": "iron-flex-layout", + "version": "1.0.2", + "description": "Provide flexbox-based layouts", + "keywords": [ + "web-components", + "polymer", + "layout" + ], + "private": true, + "license": "http://polymer.github.io/LICENSE.txt", + "authors": [ + "The Polymer Authors" + ], + "repository": { + "type": "git", + "url": "git://github.com/PolymerElements/iron-flex-layout.git" + }, + "dependencies": { + "polymer": "Polymer/polymer#^1.0.0" + }, + "devDependencies": { + "paper-styles": "polymerelements/paper-styles#^1.0.0", + "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0" + } +} diff --git a/static/bower_components/iron-flex-layout/classes/iron-flex-layout.html b/static/bower_components/iron-flex-layout/classes/iron-flex-layout.html new file mode 100644 index 0000000..283c2a8 --- /dev/null +++ b/static/bower_components/iron-flex-layout/classes/iron-flex-layout.html @@ -0,0 +1,307 @@ + + + + + diff --git a/static/bower_components/iron-flex-layout/classes/iron-shadow-flex-layout.html b/static/bower_components/iron-flex-layout/classes/iron-shadow-flex-layout.html new file mode 100644 index 0000000..c42067a --- /dev/null +++ b/static/bower_components/iron-flex-layout/classes/iron-shadow-flex-layout.html @@ -0,0 +1,302 @@ + + diff --git a/static/bower_components/iron-flex-layout/demo/index.html b/static/bower_components/iron-flex-layout/demo/index.html new file mode 100644 index 0000000..ea4df38 --- /dev/null +++ b/static/bower_components/iron-flex-layout/demo/index.html @@ -0,0 +1,42 @@ + + + + + + + iron-flex-layout + + + + + + + + + + + + + + + + + diff --git a/static/bower_components/iron-flex-layout/demo/x-app.html b/static/bower_components/iron-flex-layout/demo/x-app.html new file mode 100644 index 0000000..489a5f5 --- /dev/null +++ b/static/bower_components/iron-flex-layout/demo/x-app.html @@ -0,0 +1,118 @@ + + + + + + + + + + + + + diff --git a/static/bower_components/iron-flex-layout/iron-flex-layout.html b/static/bower_components/iron-flex-layout/iron-flex-layout.html new file mode 100644 index 0000000..ed9cd7b --- /dev/null +++ b/static/bower_components/iron-flex-layout/iron-flex-layout.html @@ -0,0 +1,313 @@ + + + + + diff --git a/static/bower_components/iron-icon/.bower.json b/static/bower_components/iron-icon/.bower.json new file mode 100644 index 0000000..8ce0fb3 --- /dev/null +++ b/static/bower_components/iron-icon/.bower.json @@ -0,0 +1,43 @@ +{ + "name": "iron-icon", + "private": true, + "version": "1.0.2", + "license": "http://polymer.github.io/LICENSE.txt", + "description": "An element that supports displaying an icon", + "main": "iron-icon.html", + "author": [ + "The Polymer Authors" + ], + "keywords": [ + "web-components", + "polymer", + "icon" + ], + "repository": { + "type": "git", + "url": "git://github.com/PolymerElements/iron-icon.git" + }, + "dependencies": { + "iron-flex-layout": "polymerelements/iron-flex-layout#^1.0.0", + "iron-meta": "polymerelements/iron-meta#^1.0.0", + "polymer": "Polymer/polymer#^1.0.0" + }, + "devDependencies": { + "test-fixture": "polymerelements/test-fixture#^1.0.0", + "iron-iconset": "polymerelements/iron-iconset#^1.0.0", + "iron-icons": "polymerelements/iron-icons#^1.0.0", + "iron-component-page": "polymerelements/iron-component-page#^1.0.0", + "web-component-tester": "*", + "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0" + }, + "homepage": "https://github.com/polymerelements/iron-icon", + "_release": "1.0.2", + "_resolution": { + "type": "version", + "tag": "v1.0.2", + "commit": "f9246c47ecb1c682f0fb9ea48255d5f7debd1e03" + }, + "_source": "git://github.com/polymerelements/iron-icon.git", + "_target": "^1.0.0", + "_originalSource": "polymerelements/iron-icon" +} \ No newline at end of file diff --git a/static/bower_components/iron-icon/.gitignore b/static/bower_components/iron-icon/.gitignore new file mode 100644 index 0000000..8d4ae25 --- /dev/null +++ b/static/bower_components/iron-icon/.gitignore @@ -0,0 +1 @@ +bower_components diff --git a/static/bower_components/iron-icon/README.md b/static/bower_components/iron-icon/README.md new file mode 100644 index 0000000..27b65c0 --- /dev/null +++ b/static/bower_components/iron-icon/README.md @@ -0,0 +1,56 @@ +iron-icon +========= + +The `iron-icon` element displays an icon. By default an icon renders as a 24px square. + +Example using src: + +```html + +``` + +Example setting size to 32px x 32px: + +```html + + + +``` + +The iron elements include several sets of icons. +To use the default set of icons, import `iron-icons.html` and use the `icon` attribute to specify an icon: + +```html + + + + +``` + +To use a different built-in set of icons, import `iron-icons/-icons.html`, and +specify the icon as `:`. For example: + +```html + + + + +``` + +You can also create custom icon sets of bitmap or SVG icons. + +Example of using an icon named `cherry` from a custom iconset with the ID `fruit`: + +```html + +``` + +See [iron-iconset](#iron-iconset) and [iron-iconset-svg](#iron-iconset-svg) for more information about +how to create a custom iconset. + +See [iron-icons](http://www.polymer-project.org/components/iron-icons/demo.html) for the default set of icons. diff --git a/static/bower_components/iron-icon/bower.json b/static/bower_components/iron-icon/bower.json new file mode 100644 index 0000000..9361b56 --- /dev/null +++ b/static/bower_components/iron-icon/bower.json @@ -0,0 +1,33 @@ +{ + "name": "iron-icon", + "private": true, + "version": "1.0.2", + "license": "http://polymer.github.io/LICENSE.txt", + "description": "An element that supports displaying an icon", + "main": "iron-icon.html", + "author": [ + "The Polymer Authors" + ], + "keywords": [ + "web-components", + "polymer", + "icon" + ], + "repository": { + "type": "git", + "url": "git://github.com/PolymerElements/iron-icon.git" + }, + "dependencies": { + "iron-flex-layout": "polymerelements/iron-flex-layout#^1.0.0", + "iron-meta": "polymerelements/iron-meta#^1.0.0", + "polymer": "Polymer/polymer#^1.0.0" + }, + "devDependencies": { + "test-fixture": "polymerelements/test-fixture#^1.0.0", + "iron-iconset": "polymerelements/iron-iconset#^1.0.0", + "iron-icons": "polymerelements/iron-icons#^1.0.0", + "iron-component-page": "polymerelements/iron-component-page#^1.0.0", + "web-component-tester": "*", + "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0" + } +} diff --git a/static/bower_components/iron-icon/demo/index.html b/static/bower_components/iron-icon/demo/index.html new file mode 100644 index 0000000..ff71239 --- /dev/null +++ b/static/bower_components/iron-icon/demo/index.html @@ -0,0 +1,48 @@ + + + + + iron-icon demo + + + + + + + + +
+

This demo is for a single <iron-icon>. If you're looking for the + whole set of available icons, check out the <iron-icons> demo.

+ +
+ + + +

<iron-icon icon="example:location">

+ + + +

<iron-icon src="location.png">

+ +
+
+ + diff --git a/static/bower_components/iron-icon/demo/location.png b/static/bower_components/iron-icon/demo/location.png new file mode 100644 index 0000000..9bb7423 Binary files /dev/null and b/static/bower_components/iron-icon/demo/location.png differ diff --git a/static/bower_components/iron-icon/hero.svg b/static/bower_components/iron-icon/hero.svg new file mode 100644 index 0000000..19f01c2 --- /dev/null +++ b/static/bower_components/iron-icon/hero.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + diff --git a/static/bower_components/iron-icon/index.html b/static/bower_components/iron-icon/index.html new file mode 100644 index 0000000..e871f17 --- /dev/null +++ b/static/bower_components/iron-icon/index.html @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + diff --git a/static/bower_components/iron-icon/iron-icon.html b/static/bower_components/iron-icon/iron-icon.html new file mode 100644 index 0000000..bdb55c7 --- /dev/null +++ b/static/bower_components/iron-icon/iron-icon.html @@ -0,0 +1,179 @@ + + + + + + + + + + + + + + + + + diff --git a/static/bower_components/iron-icon/test/index.html b/static/bower_components/iron-icon/test/index.html new file mode 100644 index 0000000..0a56bb7 --- /dev/null +++ b/static/bower_components/iron-icon/test/index.html @@ -0,0 +1,31 @@ + + + + + + + + Tests + + + + + + + + + diff --git a/static/bower_components/iron-icon/test/iron-icon.html b/static/bower_components/iron-icon/test/iron-icon.html new file mode 100644 index 0000000..3b8202f --- /dev/null +++ b/static/bower_components/iron-icon/test/iron-icon.html @@ -0,0 +1,120 @@ + + + + + + + iron-icon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/bower_components/iron-icons/.bower.json b/static/bower_components/iron-icons/.bower.json new file mode 100644 index 0000000..93ce65e --- /dev/null +++ b/static/bower_components/iron-icons/.bower.json @@ -0,0 +1,46 @@ +{ + "name": "iron-icons", + "version": "1.0.3", + "description": "A set of icons for use with iron-icon", + "authors": [ + "The Polymer Authors" + ], + "keywords": [ + "web-components", + "polymer", + "icon" + ], + "main": "iron-icons.html", + "private": true, + "repository": { + "type": "git", + "url": "git://github.com/PolymerElements/iron-icons" + }, + "license": "http://polymer.github.io/LICENSE.txt", + "homepage": "https://github.com/PolymerElements/paper-icons", + "dependencies": { + "iron-icon": "polymerelements/iron-icon#^1.0.0", + "iron-iconset-svg": "polymerelements/iron-iconset-svg#^1.0.0", + "polymer": "Polymer/polymer#^1.0.0" + }, + "devDependencies": { + "paper-styles": "polymerelements/paper-styles#^1.0.2", + "iron-component-page": "polymerelements/iron-component-page#1.0.0", + "iron-flex-layout": "polymerelements/iron-flex-layout#^1.0.0", + "iron-meta": "polymerelements/iron-meta#^1.0.0", + "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0" + }, + "ignore": [ + "util", + "update-icons.sh" + ], + "_release": "1.0.3", + "_resolution": { + "type": "version", + "tag": "v1.0.3", + "commit": "036325be99c33c052ac807a705aacad70be1127f" + }, + "_source": "git://github.com/PolymerElements/iron-icons.git", + "_target": "^1.0.0", + "_originalSource": "PolymerElements/iron-icons" +} \ No newline at end of file diff --git a/static/bower_components/iron-icons/.gitignore b/static/bower_components/iron-icons/.gitignore new file mode 100644 index 0000000..bb1944e --- /dev/null +++ b/static/bower_components/iron-icons/.gitignore @@ -0,0 +1,3 @@ +util/node_modules +material-design-icons +bower_components diff --git a/static/bower_components/iron-icons/README.md b/static/bower_components/iron-icons/README.md new file mode 100644 index 0000000..5502532 --- /dev/null +++ b/static/bower_components/iron-icons/README.md @@ -0,0 +1,6 @@ +iron-icons +========= + +## Building +Running `update-icons.sh` will checkout [material-design-icons](https://github.com/google/material-design-icons), reduce +the fileset to 24px svgs, and compile the iconsets. diff --git a/static/bower_components/iron-icons/av-icons.html b/static/bower_components/iron-icons/av-icons.html new file mode 100644 index 0000000..0d6ff37 --- /dev/null +++ b/static/bower_components/iron-icons/av-icons.html @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/bower_components/iron-icons/bower.json b/static/bower_components/iron-icons/bower.json new file mode 100644 index 0000000..8ec25db --- /dev/null +++ b/static/bower_components/iron-icons/bower.json @@ -0,0 +1,37 @@ +{ + "name": "iron-icons", + "version": "1.0.3", + "description": "A set of icons for use with iron-icon", + "authors": [ + "The Polymer Authors" + ], + "keywords": [ + "web-components", + "polymer", + "icon" + ], + "main": "iron-icons.html", + "private": true, + "repository": { + "type": "git", + "url": "git://github.com/PolymerElements/iron-icons" + }, + "license": "http://polymer.github.io/LICENSE.txt", + "homepage": "https://github.com/PolymerElements/paper-icons", + "dependencies": { + "iron-icon": "polymerelements/iron-icon#^1.0.0", + "iron-iconset-svg": "polymerelements/iron-iconset-svg#^1.0.0", + "polymer": "Polymer/polymer#^1.0.0" + }, + "devDependencies": { + "paper-styles": "polymerelements/paper-styles#^1.0.2", + "iron-component-page": "polymerelements/iron-component-page#1.0.0", + "iron-flex-layout": "polymerelements/iron-flex-layout#^1.0.0", + "iron-meta": "polymerelements/iron-meta#^1.0.0", + "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0" + }, + "ignore": [ + "util", + "update-icons.sh" + ] +} diff --git a/static/bower_components/iron-icons/communication-icons.html b/static/bower_components/iron-icons/communication-icons.html new file mode 100644 index 0000000..ec72704 --- /dev/null +++ b/static/bower_components/iron-icons/communication-icons.html @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/bower_components/iron-icons/demo/index.html b/static/bower_components/iron-icons/demo/index.html new file mode 100644 index 0000000..d5daf8f --- /dev/null +++ b/static/bower_components/iron-icons/demo/index.html @@ -0,0 +1,132 @@ + + + + + + + iron-icons + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/bower_components/iron-icons/device-icons.html b/static/bower_components/iron-icons/device-icons.html new file mode 100644 index 0000000..e875a05 --- /dev/null +++ b/static/bower_components/iron-icons/device-icons.html @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/bower_components/iron-icons/editor-icons.html b/static/bower_components/iron-icons/editor-icons.html new file mode 100644 index 0000000..7fabfe0 --- /dev/null +++ b/static/bower_components/iron-icons/editor-icons.html @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/bower_components/iron-icons/hardware-icons.html b/static/bower_components/iron-icons/hardware-icons.html new file mode 100644 index 0000000..670cb07 --- /dev/null +++ b/static/bower_components/iron-icons/hardware-icons.html @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/bower_components/iron-icons/hero.svg b/static/bower_components/iron-icons/hero.svg new file mode 100644 index 0000000..52949be --- /dev/null +++ b/static/bower_components/iron-icons/hero.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/bower_components/iron-icons/image-icons.html b/static/bower_components/iron-icons/image-icons.html new file mode 100644 index 0000000..f6c45f5 --- /dev/null +++ b/static/bower_components/iron-icons/image-icons.html @@ -0,0 +1,164 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/bower_components/iron-icons/index.html b/static/bower_components/iron-icons/index.html new file mode 100644 index 0000000..95d1991 --- /dev/null +++ b/static/bower_components/iron-icons/index.html @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + diff --git a/static/bower_components/iron-icons/iron-icons.html b/static/bower_components/iron-icons/iron-icons.html new file mode 100644 index 0000000..922d4d8 --- /dev/null +++ b/static/bower_components/iron-icons/iron-icons.html @@ -0,0 +1,303 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/bower_components/iron-icons/maps-icons.html b/static/bower_components/iron-icons/maps-icons.html new file mode 100644 index 0000000..008a0ef --- /dev/null +++ b/static/bower_components/iron-icons/maps-icons.html @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/bower_components/iron-icons/notification-icons.html b/static/bower_components/iron-icons/notification-icons.html new file mode 100644 index 0000000..39db434 --- /dev/null +++ b/static/bower_components/iron-icons/notification-icons.html @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/bower_components/iron-icons/social-icons.html b/static/bower_components/iron-icons/social-icons.html new file mode 100644 index 0000000..5553caa --- /dev/null +++ b/static/bower_components/iron-icons/social-icons.html @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/bower_components/iron-iconset-svg/.bower.json b/static/bower_components/iron-iconset-svg/.bower.json new file mode 100644 index 0000000..7031e24 --- /dev/null +++ b/static/bower_components/iron-iconset-svg/.bower.json @@ -0,0 +1,41 @@ +{ + "name": "iron-iconset-svg", + "description": "Manages a set of svg icons", + "version": "1.0.4", + "keywords": [ + "web-components", + "polymer", + "icon" + ], + "license": "http://polymer.github.io/LICENSE.txt", + "private": true, + "authors": [ + "The Polymer Authors" + ], + "repository": { + "type": "git", + "url": "git://github.com/PolymerElements/iron-iconset-svg.git" + }, + "dependencies": { + "polymer": "polymer/polymer#^1.0.0", + "iron-meta": "polymerelements/iron-meta#^1.0.0" + }, + "devDependencies": { + "paper-styles": "polymerelements/paper-styles#^1.0.2", + "iron-component-page": "polymerelements/iron-component-page#^1.0.0", + "iron-icon": "polymerelements/iron-icon#^1.0.0", + "test-fixture": "polymerelements/test-fixture#^1.0.0", + "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0", + "web-component-tester": "*" + }, + "homepage": "https://github.com/polymerelements/iron-iconset-svg", + "_release": "1.0.4", + "_resolution": { + "type": "version", + "tag": "v1.0.4", + "commit": "795aa82ac22971421bc4375efbd2419ebba9099f" + }, + "_source": "git://github.com/polymerelements/iron-iconset-svg.git", + "_target": "^1.0.0", + "_originalSource": "polymerelements/iron-iconset-svg" +} \ No newline at end of file diff --git a/static/bower_components/iron-iconset-svg/.gitignore b/static/bower_components/iron-iconset-svg/.gitignore new file mode 100644 index 0000000..8d4ae25 --- /dev/null +++ b/static/bower_components/iron-iconset-svg/.gitignore @@ -0,0 +1 @@ +bower_components diff --git a/static/bower_components/iron-iconset-svg/README.md b/static/bower_components/iron-iconset-svg/README.md new file mode 100644 index 0000000..37d603a --- /dev/null +++ b/static/bower_components/iron-iconset-svg/README.md @@ -0,0 +1,4 @@ +iron-iconset-svg +========= + +See the [component page](http://polymer-project.org/docs/elements/iron-elements.html#iron-iconset-svg) for more information. diff --git a/static/bower_components/iron-iconset-svg/bower.json b/static/bower_components/iron-iconset-svg/bower.json new file mode 100644 index 0000000..b58569c --- /dev/null +++ b/static/bower_components/iron-iconset-svg/bower.json @@ -0,0 +1,31 @@ +{ + "name": "iron-iconset-svg", + "description": "Manages a set of svg icons", + "version": "1.0.4", + "keywords": [ + "web-components", + "polymer", + "icon" + ], + "license": "http://polymer.github.io/LICENSE.txt", + "private": true, + "authors": [ + "The Polymer Authors" + ], + "repository": { + "type": "git", + "url": "git://github.com/PolymerElements/iron-iconset-svg.git" + }, + "dependencies": { + "polymer": "polymer/polymer#^1.0.0", + "iron-meta": "polymerelements/iron-meta#^1.0.0" + }, + "devDependencies": { + "paper-styles": "polymerelements/paper-styles#^1.0.2", + "iron-component-page": "polymerelements/iron-component-page#^1.0.0", + "iron-icon": "polymerelements/iron-icon#^1.0.0", + "test-fixture": "polymerelements/test-fixture#^1.0.0", + "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0", + "web-component-tester": "*" + } +} diff --git a/static/bower_components/iron-iconset-svg/demo/index.html b/static/bower_components/iron-iconset-svg/demo/index.html new file mode 100644 index 0000000..efe8478 --- /dev/null +++ b/static/bower_components/iron-iconset-svg/demo/index.html @@ -0,0 +1,65 @@ + + + + + + + iron-iconset-svg + + + + + + + + + +
+ + + +
+ + + diff --git a/static/bower_components/iron-iconset-svg/demo/svg-sample-icons.html b/static/bower_components/iron-iconset-svg/demo/svg-sample-icons.html new file mode 100644 index 0000000..94c930d --- /dev/null +++ b/static/bower_components/iron-iconset-svg/demo/svg-sample-icons.html @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/bower_components/iron-iconset-svg/index.html b/static/bower_components/iron-iconset-svg/index.html new file mode 100644 index 0000000..e871f17 --- /dev/null +++ b/static/bower_components/iron-iconset-svg/index.html @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + diff --git a/static/bower_components/iron-iconset-svg/iron-iconset-svg.html b/static/bower_components/iron-iconset-svg/iron-iconset-svg.html new file mode 100644 index 0000000..3cebc2c --- /dev/null +++ b/static/bower_components/iron-iconset-svg/iron-iconset-svg.html @@ -0,0 +1,192 @@ + + + + + + diff --git a/static/bower_components/iron-iconset-svg/test/index.html b/static/bower_components/iron-iconset-svg/test/index.html new file mode 100644 index 0000000..db4a3f6 --- /dev/null +++ b/static/bower_components/iron-iconset-svg/test/index.html @@ -0,0 +1,30 @@ + + + + + + + + Tests + + + + + + + + + diff --git a/static/bower_components/iron-iconset-svg/test/iron-iconset-svg.html b/static/bower_components/iron-iconset-svg/test/iron-iconset-svg.html new file mode 100644 index 0000000..4af6f8b --- /dev/null +++ b/static/bower_components/iron-iconset-svg/test/iron-iconset-svg.html @@ -0,0 +1,107 @@ + + + + + + + iron-iconset-svg + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/bower_components/iron-image/.bower.json b/static/bower_components/iron-image/.bower.json new file mode 100644 index 0000000..6431717 --- /dev/null +++ b/static/bower_components/iron-image/.bower.json @@ -0,0 +1,40 @@ +{ + "name": "iron-image", + "version": "1.0.2", + "license": "http://polymer.github.io/LICENSE.txt", + "description": "An image-displaying element with lots of convenient features", + "private": true, + "authors": [ + "The Polymer Authors" + ], + "keywords": [ + "web-components", + "polymer", + "media" + ], + "repository": { + "type": "git", + "url": "git://github.com/PolymerElements/iron-image.git" + }, + "dependencies": { + "iron-flex-layout": "polymerelements/iron-flex-layout#^1.0.0", + "polymer": "Polymer/polymer#^1.0.0" + }, + "devDependencies": { + "paper-styles": "polymerelements/paper-styles#^1.0.4", + "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" + }, + "homepage": "https://github.com/PolymerElements/iron-image", + "_release": "1.0.2", + "_resolution": { + "type": "version", + "tag": "v1.0.2", + "commit": "f3d3090dc9a59b662f67c9c7dd1fc61e716f353d" + }, + "_source": "git://github.com/PolymerElements/iron-image.git", + "_target": "^1.0.0", + "_originalSource": "PolymerElements/iron-image" +} \ No newline at end of file diff --git a/static/bower_components/iron-image/.gitignore b/static/bower_components/iron-image/.gitignore new file mode 100644 index 0000000..8d4ae25 --- /dev/null +++ b/static/bower_components/iron-image/.gitignore @@ -0,0 +1 @@ +bower_components diff --git a/static/bower_components/iron-image/README.md b/static/bower_components/iron-image/README.md new file mode 100644 index 0000000..04fda7a --- /dev/null +++ b/static/bower_components/iron-image/README.md @@ -0,0 +1,60 @@ +iron-image +========== + +`iron-image` is an element for displaying an image that provides useful sizing and +preloading options not found on the standard `` tag. + +The `sizing` option allows the image to be either cropped (`cover`) or +letterboxed (`contain`) to fill a fixed user-size placed on the element. + +The `preload` option prevents the browser from rendering the image until the +image is fully loaded. In the interim, either the element's CSS `background-color` +can be be used as the placeholder, or the `placeholder` property can be +set to a URL (preferably a data-URI, for instant rendering) for an +placeholder image. + +The `fade` option (only valid when `preload` is set) will cause the placeholder +image/color to be faded out once the image is rendered. + +Examples: + +Basically identical to `` tag: + +```html + +``` + +Will letterbox the image to fit: + +```html + +``` + +Will crop the image to fit: + +```html + +``` + +Will show light-gray background until the image loads: + +```html + +``` + +Will show a base-64 encoded placeholder image until the image loads: + +```html + +``` + +Will fade the light-gray background out once the image is loaded: + +```html + +``` diff --git a/static/bower_components/iron-image/bower.json b/static/bower_components/iron-image/bower.json new file mode 100644 index 0000000..8e3d0ac --- /dev/null +++ b/static/bower_components/iron-image/bower.json @@ -0,0 +1,30 @@ +{ + "name": "iron-image", + "version": "1.0.2", + "license": "http://polymer.github.io/LICENSE.txt", + "description": "An image-displaying element with lots of convenient features", + "private": true, + "authors": [ + "The Polymer Authors" + ], + "keywords": [ + "web-components", + "polymer", + "media" + ], + "repository": { + "type": "git", + "url": "git://github.com/PolymerElements/iron-image.git" + }, + "dependencies": { + "iron-flex-layout": "polymerelements/iron-flex-layout#^1.0.0", + "polymer": "Polymer/polymer#^1.0.0" + }, + "devDependencies": { + "paper-styles": "polymerelements/paper-styles#^1.0.4", + "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/static/bower_components/iron-image/demo/index.html b/static/bower_components/iron-image/demo/index.html new file mode 100644 index 0000000..b29f9cb --- /dev/null +++ b/static/bower_components/iron-image/demo/index.html @@ -0,0 +1,183 @@ + + + + + + iron-image + + + + + + + + + + + + + + + + diff --git a/static/bower_components/iron-image/demo/polymer.svg b/static/bower_components/iron-image/demo/polymer.svg new file mode 100644 index 0000000..70735e7 --- /dev/null +++ b/static/bower_components/iron-image/demo/polymer.svg @@ -0,0 +1,175 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/bower_components/iron-image/index.html b/static/bower_components/iron-image/index.html new file mode 100644 index 0000000..b12d417 --- /dev/null +++ b/static/bower_components/iron-image/index.html @@ -0,0 +1,24 @@ + + + + + + iron-image + + + + + + + + + + diff --git a/static/bower_components/iron-image/iron-image.html b/static/bower_components/iron-image/iron-image.html new file mode 100644 index 0000000..7eba73f --- /dev/null +++ b/static/bower_components/iron-image/iron-image.html @@ -0,0 +1,354 @@ + + + + + + + + + + + + + + + + diff --git a/static/bower_components/iron-image/test/index.html b/static/bower_components/iron-image/test/index.html new file mode 100644 index 0000000..fa31e17 --- /dev/null +++ b/static/bower_components/iron-image/test/index.html @@ -0,0 +1,25 @@ + + + + + + + + + + + + + diff --git a/static/bower_components/iron-image/test/iron-image.html b/static/bower_components/iron-image/test/iron-image.html new file mode 100644 index 0000000..0e06fe3 --- /dev/null +++ b/static/bower_components/iron-image/test/iron-image.html @@ -0,0 +1,78 @@ + + + + + iron-image + + + + + + + + + + + + + + + + diff --git a/static/bower_components/iron-media-query/.bower.json b/static/bower_components/iron-media-query/.bower.json new file mode 100644 index 0000000..ce32680 --- /dev/null +++ b/static/bower_components/iron-media-query/.bower.json @@ -0,0 +1,40 @@ +{ + "name": "iron-media-query", + "version": "1.0.2", + "description": "Lets you bind to a CSS media query", + "authors": [ + "The Polymer Authors" + ], + "keywords": [ + "web-components", + "polymer", + "media" + ], + "private": true, + "repository": { + "type": "git", + "url": "git://github.com/PolymerElements/iron-media-query" + }, + "license": "http://polymer.github.io/LICENSE.txt", + "homepage": "https://github.com/PolymerElements/iron-media-query", + "ignore": [], + "dependencies": { + "polymer": "Polymer/polymer#^1.0.0" + }, + "devDependencies": { + "paper-styles": "polymerelements/paper-styles#^1.0.2", + "web-component-tester": "*", + "test-fixture": "PolymerElements/test-fixture#^1.0.0", + "iron-component-page": "PolymerElements/iron-component-page#^1.0.0", + "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0" + }, + "_release": "1.0.2", + "_resolution": { + "type": "version", + "tag": "v1.0.2", + "commit": "34abf0a3b8bf9e9e478352dbb3d9e6a76bf3669a" + }, + "_source": "git://github.com/PolymerElements/iron-media-query.git", + "_target": "^1.0.0", + "_originalSource": "PolymerElements/iron-media-query" +} \ No newline at end of file diff --git a/static/bower_components/iron-media-query/.gitignore b/static/bower_components/iron-media-query/.gitignore new file mode 100644 index 0000000..8d4ae25 --- /dev/null +++ b/static/bower_components/iron-media-query/.gitignore @@ -0,0 +1 @@ +bower_components diff --git a/static/bower_components/iron-media-query/README.md b/static/bower_components/iron-media-query/README.md new file mode 100644 index 0000000..f577b3c --- /dev/null +++ b/static/bower_components/iron-media-query/README.md @@ -0,0 +1,11 @@ +# iron-media-query + +`iron-media-query` can be used to data bind to a CSS media query. +The `query` property is a bare CSS media query. +The `query-matches` property is a boolean representing if the page matches that media query. + +Example: + +```html + +``` diff --git a/static/bower_components/iron-media-query/bower.json b/static/bower_components/iron-media-query/bower.json new file mode 100644 index 0000000..48c342a --- /dev/null +++ b/static/bower_components/iron-media-query/bower.json @@ -0,0 +1,31 @@ +{ + "name": "iron-media-query", + "version": "1.0.2", + "description": "Lets you bind to a CSS media query", + "authors": [ + "The Polymer Authors" + ], + "keywords": [ + "web-components", + "polymer", + "media" + ], + "private": true, + "repository": { + "type": "git", + "url": "git://github.com/PolymerElements/iron-media-query" + }, + "license": "http://polymer.github.io/LICENSE.txt", + "homepage": "https://github.com/PolymerElements/iron-media-query", + "ignore": [], + "dependencies": { + "polymer": "Polymer/polymer#^1.0.0" + }, + "devDependencies": { + "paper-styles": "polymerelements/paper-styles#^1.0.2", + "web-component-tester": "*", + "test-fixture": "PolymerElements/test-fixture#^1.0.0", + "iron-component-page": "PolymerElements/iron-component-page#^1.0.0", + "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0" + } +} diff --git a/static/bower_components/iron-media-query/demo/index.html b/static/bower_components/iron-media-query/demo/index.html new file mode 100644 index 0000000..2f3856f --- /dev/null +++ b/static/bower_components/iron-media-query/demo/index.html @@ -0,0 +1,45 @@ + + + + + + iron-media-query demo + + + + + + + + + + + + + +
+

<iron-media-query>

+ + +
+ + + diff --git a/static/bower_components/iron-media-query/hero.svg b/static/bower_components/iron-media-query/hero.svg new file mode 100644 index 0000000..0a7982b --- /dev/null +++ b/static/bower_components/iron-media-query/hero.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/bower_components/iron-media-query/index.html b/static/bower_components/iron-media-query/index.html new file mode 100644 index 0000000..7aee5c1 --- /dev/null +++ b/static/bower_components/iron-media-query/index.html @@ -0,0 +1,29 @@ + + + + + + + + + iron-media-query + + + + + + + + + + + + + diff --git a/static/bower_components/iron-media-query/iron-media-query.html b/static/bower_components/iron-media-query/iron-media-query.html new file mode 100644 index 0000000..8325eb2 --- /dev/null +++ b/static/bower_components/iron-media-query/iron-media-query.html @@ -0,0 +1,77 @@ + + + + + + + diff --git a/static/bower_components/iron-media-query/test/basic.html b/static/bower_components/iron-media-query/test/basic.html new file mode 100644 index 0000000..34346c2 --- /dev/null +++ b/static/bower_components/iron-media-query/test/basic.html @@ -0,0 +1,71 @@ + + + + + + + iron-media-query-basic + + + + + + + + + + + + + + + + + + + + + diff --git a/static/bower_components/iron-media-query/test/index.html b/static/bower_components/iron-media-query/test/index.html new file mode 100644 index 0000000..7baa57f --- /dev/null +++ b/static/bower_components/iron-media-query/test/index.html @@ -0,0 +1,30 @@ + + + + + + + + Tests + + + + + + + + + diff --git a/static/bower_components/iron-menu-behavior/.bower.json b/static/bower_components/iron-menu-behavior/.bower.json new file mode 100644 index 0000000..7ca24d4 --- /dev/null +++ b/static/bower_components/iron-menu-behavior/.bower.json @@ -0,0 +1,41 @@ +{ + "name": "iron-menu-behavior", + "version": "1.0.1", + "description": "Provides accessible menu behavior", + "authors": "The Polymer Authors", + "keywords": [ + "web-components", + "polymer", + "behavior", + "menu" + ], + "main": "iron-menu-behavior.html", + "private": true, + "repository": { + "type": "git", + "url": "git://github.com/PolymerElements/iron-menu-behavior" + }, + "license": "http://polymer.github.io/LICENSE.txt", + "homepage": "https://github.com/PolymerElements/iron-menu-behavior", + "ignore": [], + "dependencies": { + "iron-selector": "PolymerElements/iron-selector#^1.0.0", + "polymer": "Polymer/polymer#^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", + "test-fixture": "PolymerElements/test-fixture#^1.0.0", + "web-component-tester": "*", + "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0" + }, + "_release": "1.0.1", + "_resolution": { + "type": "version", + "tag": "v1.0.1", + "commit": "3809f0eb7461c8ca63640aaa238775b3a25aa578" + }, + "_source": "git://github.com/PolymerElements/iron-menu-behavior.git", + "_target": "^1.0.0", + "_originalSource": "PolymerElements/iron-menu-behavior" +} \ No newline at end of file diff --git a/static/bower_components/iron-menu-behavior/.gitignore b/static/bower_components/iron-menu-behavior/.gitignore new file mode 100644 index 0000000..8d4ae25 --- /dev/null +++ b/static/bower_components/iron-menu-behavior/.gitignore @@ -0,0 +1 @@ +bower_components diff --git a/static/bower_components/iron-menu-behavior/README.md b/static/bower_components/iron-menu-behavior/README.md new file mode 100644 index 0000000..42ab7fa --- /dev/null +++ b/static/bower_components/iron-menu-behavior/README.md @@ -0,0 +1,3 @@ +# iron-menu-behavior + +`Polymer.IronMenuBehavior` implements accessible menu behavior. diff --git a/static/bower_components/iron-menu-behavior/bower.json b/static/bower_components/iron-menu-behavior/bower.json new file mode 100644 index 0000000..f0d453c --- /dev/null +++ b/static/bower_components/iron-menu-behavior/bower.json @@ -0,0 +1,32 @@ +{ + "name": "iron-menu-behavior", + "version": "1.0.1", + "description": "Provides accessible menu behavior", + "authors": "The Polymer Authors", + "keywords": [ + "web-components", + "polymer", + "behavior", + "menu" + ], + "main": "iron-menu-behavior.html", + "private": true, + "repository": { + "type": "git", + "url": "git://github.com/PolymerElements/iron-menu-behavior" + }, + "license": "http://polymer.github.io/LICENSE.txt", + "homepage": "https://github.com/PolymerElements/iron-menu-behavior", + "ignore": [], + "dependencies": { + "iron-selector": "PolymerElements/iron-selector#^1.0.0", + "polymer": "Polymer/polymer#^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", + "test-fixture": "PolymerElements/test-fixture#^1.0.0", + "web-component-tester": "*", + "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0" + } +} diff --git a/static/bower_components/iron-menu-behavior/demo/index.html b/static/bower_components/iron-menu-behavior/demo/index.html new file mode 100644 index 0000000..6e64d2a --- /dev/null +++ b/static/bower_components/iron-menu-behavior/demo/index.html @@ -0,0 +1,100 @@ + + + + + + + + + + iron-menu-behavior demo + + + + + + + + + + + + +
+ +
Simple menu
+ + +
  • item 0
  • +
  • item 1
  • +
  • item 2
  • +
  • item 3
  • +
    + +
    + +
    + +
    Multi-select menu
    + + +
  • item 0
  • +
  • item 1
  • +
  • item 2
  • +
  • item 3
  • +
  • item 4
  • +
    + +
    + +
    + +
    Simple menubar
    + + +
  • item 0
  • +
  • item 1
  • +
  • item 2
  • +
  • item 3
  • +
    + +
    + +
    +
    Multi-select menubar
    + + +
  • item 0
  • +
  • item 1
  • +
  • item 2
  • +
  • item 3
  • +
  • item 4
  • +
    +
    + + diff --git a/static/bower_components/iron-menu-behavior/demo/simple-menu.html b/static/bower_components/iron-menu-behavior/demo/simple-menu.html new file mode 100644 index 0000000..cd1c7cf --- /dev/null +++ b/static/bower_components/iron-menu-behavior/demo/simple-menu.html @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + diff --git a/static/bower_components/iron-menu-behavior/demo/simple-menubar.html b/static/bower_components/iron-menu-behavior/demo/simple-menubar.html new file mode 100644 index 0000000..ad38ecf --- /dev/null +++ b/static/bower_components/iron-menu-behavior/demo/simple-menubar.html @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + diff --git a/static/bower_components/iron-menu-behavior/index.html b/static/bower_components/iron-menu-behavior/index.html new file mode 100644 index 0000000..2c643c4 --- /dev/null +++ b/static/bower_components/iron-menu-behavior/index.html @@ -0,0 +1,30 @@ + + + + + + + + + iron-menu-behavior + + + + + + + + + + + + + diff --git a/static/bower_components/iron-menu-behavior/iron-menu-behavior.html b/static/bower_components/iron-menu-behavior/iron-menu-behavior.html new file mode 100644 index 0000000..aa58c7f --- /dev/null +++ b/static/bower_components/iron-menu-behavior/iron-menu-behavior.html @@ -0,0 +1,214 @@ + + + + + + + diff --git a/static/bower_components/iron-menu-behavior/iron-menubar-behavior.html b/static/bower_components/iron-menu-behavior/iron-menubar-behavior.html new file mode 100644 index 0000000..e25304a --- /dev/null +++ b/static/bower_components/iron-menu-behavior/iron-menubar-behavior.html @@ -0,0 +1,65 @@ + + + + + + diff --git a/static/bower_components/iron-menu-behavior/test/index.html b/static/bower_components/iron-menu-behavior/test/index.html new file mode 100644 index 0000000..4b1c82f --- /dev/null +++ b/static/bower_components/iron-menu-behavior/test/index.html @@ -0,0 +1,35 @@ + + + + + + iron-menu-behavior tests + + + + + + + + + + + + + + diff --git a/static/bower_components/iron-menu-behavior/test/iron-menu-behavior.html b/static/bower_components/iron-menu-behavior/test/iron-menu-behavior.html new file mode 100644 index 0000000..309dbb1 --- /dev/null +++ b/static/bower_components/iron-menu-behavior/test/iron-menu-behavior.html @@ -0,0 +1,108 @@ + + + + + + iron-menu-behavior tests + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/bower_components/iron-menu-behavior/test/iron-menubar-behavior.html b/static/bower_components/iron-menu-behavior/test/iron-menubar-behavior.html new file mode 100644 index 0000000..b007b1c --- /dev/null +++ b/static/bower_components/iron-menu-behavior/test/iron-menubar-behavior.html @@ -0,0 +1,108 @@ + + + + + + iron-menubar-behavior tests + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/bower_components/iron-menu-behavior/test/test-menu.html b/static/bower_components/iron-menu-behavior/test/test-menu.html new file mode 100644 index 0000000..19b1662 --- /dev/null +++ b/static/bower_components/iron-menu-behavior/test/test-menu.html @@ -0,0 +1,40 @@ + + + + + + + + + + + + diff --git a/static/bower_components/iron-menu-behavior/test/test-menubar.html b/static/bower_components/iron-menu-behavior/test/test-menubar.html new file mode 100644 index 0000000..5f7ecbc --- /dev/null +++ b/static/bower_components/iron-menu-behavior/test/test-menubar.html @@ -0,0 +1,40 @@ + + + + + + + + + + + + diff --git a/static/bower_components/iron-meta/.bower.json b/static/bower_components/iron-meta/.bower.json new file mode 100644 index 0000000..8119ebc --- /dev/null +++ b/static/bower_components/iron-meta/.bower.json @@ -0,0 +1,38 @@ +{ + "name": "iron-meta", + "version": "1.0.3", + "keywords": [ + "web-components", + "polymer" + ], + "license": "http://polymer.github.io/LICENSE.txt", + "description": "Useful for sharing information across a DOM tree", + "private": true, + "authors": [ + "The Polymer Authors" + ], + "repository": { + "type": "git", + "url": "git://github.com/PolymerElements/iron-meta.git" + }, + "dependencies": { + "polymer": "Polymer/polymer#^1.0.0" + }, + "devDependencies": { + "paper-styles": "polymerelements/paper-styles#^1.0.4", + "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" + }, + "homepage": "https://github.com/polymerelements/iron-meta", + "_release": "1.0.3", + "_resolution": { + "type": "version", + "tag": "v1.0.3", + "commit": "91529259262b0d8f33fed44bc3fd47aedf35cb04" + }, + "_source": "git://github.com/polymerelements/iron-meta.git", + "_target": "^1.0.0", + "_originalSource": "polymerelements/iron-meta" +} \ No newline at end of file diff --git a/static/bower_components/iron-meta/.gitignore b/static/bower_components/iron-meta/.gitignore new file mode 100644 index 0000000..8d4ae25 --- /dev/null +++ b/static/bower_components/iron-meta/.gitignore @@ -0,0 +1 @@ +bower_components diff --git a/static/bower_components/iron-meta/README.md b/static/bower_components/iron-meta/README.md new file mode 100644 index 0000000..26e2ddf --- /dev/null +++ b/static/bower_components/iron-meta/README.md @@ -0,0 +1,46 @@ +iron-meta +========= + +`iron-meta` is a generic element you can use for sharing information across the DOM tree. +It uses [monostate pattern](http://c2.com/cgi/wiki?MonostatePattern) such that any +instance of iron-meta has access to the shared +information. You can use `iron-meta` to share whatever you want (or create an extension +[like x-meta] for enhancements). + +The `iron-meta` instances containing your actual data can be loaded in an import, +or constructed in any way you see fit. The only requirement is that you create them +before you try to access them. + +Examples: + +If I create an instance like this: + +```html + +``` + +Note that value="foo/bar" is the metadata I've defined. I could define more +attributes or use child nodes to define additional metadata. + +Now I can access that element (and it's metadata) from any iron-meta instance +via the byKey method, e.g. + +```javascript +meta.byKey('info').getAttribute('value'); +``` + +Pure imperative form would be like: + +```javascript +document.createElement('iron-meta').byKey('info').getAttribute('value'); +``` + +Or, in a Polymer element, you can include a meta in your template: + +```html + +``` + +```javascript +this.$.meta.byKey('info').getAttribute('value'); +``` diff --git a/static/bower_components/iron-meta/bower.json b/static/bower_components/iron-meta/bower.json new file mode 100644 index 0000000..65a1f8f --- /dev/null +++ b/static/bower_components/iron-meta/bower.json @@ -0,0 +1,28 @@ +{ + "name": "iron-meta", + "version": "1.0.3", + "keywords": [ + "web-components", + "polymer" + ], + "license": "http://polymer.github.io/LICENSE.txt", + "description": "Useful for sharing information across a DOM tree", + "private": true, + "authors": [ + "The Polymer Authors" + ], + "repository": { + "type": "git", + "url": "git://github.com/PolymerElements/iron-meta.git" + }, + "dependencies": { + "polymer": "Polymer/polymer#^1.0.0" + }, + "devDependencies": { + "paper-styles": "polymerelements/paper-styles#^1.0.4", + "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/static/bower_components/iron-meta/demo/index.html b/static/bower_components/iron-meta/demo/index.html new file mode 100644 index 0000000..3deee3c --- /dev/null +++ b/static/bower_components/iron-meta/demo/index.html @@ -0,0 +1,46 @@ + + + + + + + + + iron-meta + + + + + + + +
    +

    <iron-meta>

    + + The value stored at key="info" is . +
    + + + + + diff --git a/static/bower_components/iron-meta/hero.svg b/static/bower_components/iron-meta/hero.svg new file mode 100644 index 0000000..8d36c50 --- /dev/null +++ b/static/bower_components/iron-meta/hero.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/bower_components/iron-meta/index.html b/static/bower_components/iron-meta/index.html new file mode 100644 index 0000000..c70dc6e --- /dev/null +++ b/static/bower_components/iron-meta/index.html @@ -0,0 +1,27 @@ + + + + + + + + iron-meta + + + + + + + + + + + diff --git a/static/bower_components/iron-meta/iron-meta.html b/static/bower_components/iron-meta/iron-meta.html new file mode 100644 index 0000000..4b34311 --- /dev/null +++ b/static/bower_components/iron-meta/iron-meta.html @@ -0,0 +1,317 @@ + + + + + + + diff --git a/static/bower_components/iron-meta/test/basic.html b/static/bower_components/iron-meta/test/basic.html new file mode 100644 index 0000000..c561dc3 --- /dev/null +++ b/static/bower_components/iron-meta/test/basic.html @@ -0,0 +1,48 @@ + + + + + + + iron-meta-basic + + + + + + + + + + + + + + + + + diff --git a/static/bower_components/iron-meta/test/index.html b/static/bower_components/iron-meta/test/index.html new file mode 100644 index 0000000..2b9541b --- /dev/null +++ b/static/bower_components/iron-meta/test/index.html @@ -0,0 +1,30 @@ + + + + + + + + Tests + + + + + + + + + diff --git a/static/bower_components/iron-meta/test/iron-meta.html b/static/bower_components/iron-meta/test/iron-meta.html new file mode 100644 index 0000000..c1a4028 --- /dev/null +++ b/static/bower_components/iron-meta/test/iron-meta.html @@ -0,0 +1,186 @@ + + + + + + + iron-meta + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/bower_components/iron-resizable-behavior/.bower.json b/static/bower_components/iron-resizable-behavior/.bower.json new file mode 100644 index 0000000..9ae5e84 --- /dev/null +++ b/static/bower_components/iron-resizable-behavior/.bower.json @@ -0,0 +1,40 @@ +{ + "name": "iron-resizable-behavior", + "version": "1.0.2", + "license": "http://polymer.github.io/LICENSE.txt", + "description": "Coordinates the flow of resizeable elements", + "private": true, + "main": "iron-resizable-behavior.html", + "authors": [ + "The Polymer Authors" + ], + "keywords": [ + "web-components", + "polymer", + "iron", + "behavior" + ], + "repository": { + "type": "git", + "url": "git://github.com/PolymerElements/iron-resizable-behavior.git" + }, + "dependencies": { + "polymer": "Polymer/polymer#^1.0.0" + }, + "devDependencies": { + "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" + }, + "homepage": "https://github.com/PolymerElements/iron-resizable-behavior", + "_release": "1.0.2", + "_resolution": { + "type": "version", + "tag": "v1.0.2", + "commit": "85de8ba28be2bf17c81d6436ef1119022b003674" + }, + "_source": "git://github.com/PolymerElements/iron-resizable-behavior.git", + "_target": "^1.0.0", + "_originalSource": "PolymerElements/iron-resizable-behavior" +} \ No newline at end of file diff --git a/static/bower_components/iron-resizable-behavior/.gitignore b/static/bower_components/iron-resizable-behavior/.gitignore new file mode 100644 index 0000000..8d4ae25 --- /dev/null +++ b/static/bower_components/iron-resizable-behavior/.gitignore @@ -0,0 +1 @@ +bower_components diff --git a/static/bower_components/iron-resizable-behavior/README.md b/static/bower_components/iron-resizable-behavior/README.md new file mode 100644 index 0000000..72be6de --- /dev/null +++ b/static/bower_components/iron-resizable-behavior/README.md @@ -0,0 +1,16 @@ +iron-resizable-behavior +======================= + +`IronResizableBehavior` is a behavior that can be used in Polymer elements to +coordinate the flow of resize events between "resizers" (elements that control the +size or hidden state of their children) and "resizables" (elements that need to be +notified when they are resized or un-hidden by their parents in order to take +action on their new measurements). + +Elements that perform measurement should add the `IronResizableBehavior` behavior to +their element definition and listen for the `iron-resize` event on themselves. +This event will be fired when they become showing after having been hidden, +when they are resized explicitly by another resizable, or when the window has been +resized. + +Note, the `iron-resize` event is non-bubbling. diff --git a/static/bower_components/iron-resizable-behavior/bower.json b/static/bower_components/iron-resizable-behavior/bower.json new file mode 100644 index 0000000..d0591a3 --- /dev/null +++ b/static/bower_components/iron-resizable-behavior/bower.json @@ -0,0 +1,30 @@ +{ + "name": "iron-resizable-behavior", + "version": "1.0.2", + "license": "http://polymer.github.io/LICENSE.txt", + "description": "Coordinates the flow of resizeable elements", + "private": true, + "main": "iron-resizable-behavior.html", + "authors": [ + "The Polymer Authors" + ], + "keywords": [ + "web-components", + "polymer", + "iron", + "behavior" + ], + "repository": { + "type": "git", + "url": "git://github.com/PolymerElements/iron-resizable-behavior.git" + }, + "dependencies": { + "polymer": "Polymer/polymer#^1.0.0" + }, + "devDependencies": { + "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/static/bower_components/iron-resizable-behavior/demo/index.html b/static/bower_components/iron-resizable-behavior/demo/index.html new file mode 100644 index 0000000..2896c50 --- /dev/null +++ b/static/bower_components/iron-resizable-behavior/demo/index.html @@ -0,0 +1,29 @@ + + + + + + + iron-resizable-behavior demo + + + + + + + + + + + + + + diff --git a/static/bower_components/iron-resizable-behavior/demo/src/x-app.html b/static/bower_components/iron-resizable-behavior/demo/src/x-app.html new file mode 100644 index 0000000..c334ad3 --- /dev/null +++ b/static/bower_components/iron-resizable-behavior/demo/src/x-app.html @@ -0,0 +1,114 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/bower_components/iron-resizable-behavior/index.html b/static/bower_components/iron-resizable-behavior/index.html new file mode 100644 index 0000000..b9b8809 --- /dev/null +++ b/static/bower_components/iron-resizable-behavior/index.html @@ -0,0 +1,25 @@ + + + + + + + iron-resizable-behavior + + + + + + + + + + diff --git a/static/bower_components/iron-resizable-behavior/iron-resizable-behavior.html b/static/bower_components/iron-resizable-behavior/iron-resizable-behavior.html new file mode 100644 index 0000000..19b8c02 --- /dev/null +++ b/static/bower_components/iron-resizable-behavior/iron-resizable-behavior.html @@ -0,0 +1,193 @@ + + + + + + diff --git a/static/bower_components/iron-resizable-behavior/test/basic.html b/static/bower_components/iron-resizable-behavior/test/basic.html new file mode 100644 index 0000000..0ae890d --- /dev/null +++ b/static/bower_components/iron-resizable-behavior/test/basic.html @@ -0,0 +1,263 @@ + + + + + + + iron-resizable-behavior tests + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/bower_components/iron-resizable-behavior/test/index.html b/static/bower_components/iron-resizable-behavior/test/index.html new file mode 100644 index 0000000..e1d3fca --- /dev/null +++ b/static/bower_components/iron-resizable-behavior/test/index.html @@ -0,0 +1,32 @@ + + + + + + + + Tests + + + + + + + + + diff --git a/static/bower_components/iron-resizable-behavior/test/iron-resizable-behavior.html b/static/bower_components/iron-resizable-behavior/test/iron-resizable-behavior.html new file mode 100644 index 0000000..695b977 --- /dev/null +++ b/static/bower_components/iron-resizable-behavior/test/iron-resizable-behavior.html @@ -0,0 +1,87 @@ + + + + + + + iron-resizable-behavior tests + + + + + + + + + + + + + + + + + + + + diff --git a/static/bower_components/iron-resizable-behavior/test/test-elements.html b/static/bower_components/iron-resizable-behavior/test/test-elements.html new file mode 100644 index 0000000..d70561e --- /dev/null +++ b/static/bower_components/iron-resizable-behavior/test/test-elements.html @@ -0,0 +1,193 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/bower_components/iron-selector/.bower.json b/static/bower_components/iron-selector/.bower.json new file mode 100644 index 0000000..3105082 --- /dev/null +++ b/static/bower_components/iron-selector/.bower.json @@ -0,0 +1,41 @@ +{ + "name": "iron-selector", + "version": "1.0.2", + "description": "Manages a set of elements that can be selected", + "private": true, + "license": "http://polymer.github.io/LICENSE.txt", + "main": [ + "iron-selector.html" + ], + "authors": [ + "The Polymer Authors" + ], + "keywords": [ + "web-components", + "polymer", + "selector" + ], + "repository": { + "type": "git", + "url": "git://github.com/PolymerElements/iron-selector.git" + }, + "dependencies": { + "polymer": "Polymer/polymer#^1.0.0" + }, + "devDependencies": { + "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" + }, + "homepage": "https://github.com/PolymerElements/iron-selector", + "_release": "1.0.2", + "_resolution": { + "type": "version", + "tag": "v1.0.2", + "commit": "ea22d91d11ba6f72c01faa952d5e600f9d1773cf" + }, + "_source": "git://github.com/PolymerElements/iron-selector.git", + "_target": "^1.0.0", + "_originalSource": "PolymerElements/iron-selector" +} \ No newline at end of file diff --git a/static/bower_components/iron-selector/.gitignore b/static/bower_components/iron-selector/.gitignore new file mode 100644 index 0000000..b13058c --- /dev/null +++ b/static/bower_components/iron-selector/.gitignore @@ -0,0 +1,2 @@ +bower_components +.DS_Store diff --git a/static/bower_components/iron-selector/README.md b/static/bower_components/iron-selector/README.md new file mode 100644 index 0000000..6bece29 --- /dev/null +++ b/static/bower_components/iron-selector/README.md @@ -0,0 +1,50 @@ +iron-selector +============= + +`iron-selector` is an element which can be used to manage a list of elements +that can be selected. Tapping on the item will make the item selected. The `selected` indicates +which item is being selected. The default is to use the index of the item. + +Example: + +```html + +
    Item 1
    +
    Item 2
    +
    Item 3
    +
    +``` + +If you want to use the attribute value of an element for `selected` instead of the index, +set `attrForSelected` to the name of the attribute. For example, if you want to select item by +`name`, set `attrForSelected` to `name`. + +Example: + +```html + +
    Foo
    +
    Bar
    +
    Zot
    +
    +``` + +`iron-selector` is not styled. Use the `iron-selected` CSS class to style the selected element. + +Example: + +```html + + +... + + +
    Item 1
    +
    Item 2
    +
    Item 3
    +
    +``` diff --git a/static/bower_components/iron-selector/bower.json b/static/bower_components/iron-selector/bower.json new file mode 100644 index 0000000..b9751df --- /dev/null +++ b/static/bower_components/iron-selector/bower.json @@ -0,0 +1,31 @@ +{ + "name": "iron-selector", + "version": "1.0.2", + "description": "Manages a set of elements that can be selected", + "private": true, + "license": "http://polymer.github.io/LICENSE.txt", + "main": [ + "iron-selector.html" + ], + "authors": [ + "The Polymer Authors" + ], + "keywords": [ + "web-components", + "polymer", + "selector" + ], + "repository": { + "type": "git", + "url": "git://github.com/PolymerElements/iron-selector.git" + }, + "dependencies": { + "polymer": "Polymer/polymer#^1.0.0" + }, + "devDependencies": { + "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/static/bower_components/iron-selector/demo/index.html b/static/bower_components/iron-selector/demo/index.html new file mode 100644 index 0000000..cdb7f99 --- /dev/null +++ b/static/bower_components/iron-selector/demo/index.html @@ -0,0 +1,66 @@ + + + + + + + iron-selector + + + + + + + + + + + + +

    Basic

    + + +
    Item 0
    +
    Item 1
    +
    Item 2
    +
    Item 3
    +
    Item 4
    +
    + +

    Multi-select

    + + +
    Item 0
    +
    Item 1
    +
    Item 2
    +
    Item 3
    +
    Item 4
    +
    + +

    Example

    + + +
    Foo
    +
    Bar
    +
    Zot
    +
    + + + diff --git a/static/bower_components/iron-selector/index.html b/static/bower_components/iron-selector/index.html new file mode 100644 index 0000000..a27840b --- /dev/null +++ b/static/bower_components/iron-selector/index.html @@ -0,0 +1,28 @@ + + + + + + + iron-selector + + + + + + + + + + + + + diff --git a/static/bower_components/iron-selector/iron-multi-selectable.html b/static/bower_components/iron-selector/iron-multi-selectable.html new file mode 100644 index 0000000..ba9455d --- /dev/null +++ b/static/bower_components/iron-selector/iron-multi-selectable.html @@ -0,0 +1,120 @@ + + + + + + diff --git a/static/bower_components/iron-selector/iron-selectable.html b/static/bower_components/iron-selector/iron-selectable.html new file mode 100644 index 0000000..f0506d5 --- /dev/null +++ b/static/bower_components/iron-selector/iron-selectable.html @@ -0,0 +1,307 @@ + + + + + + diff --git a/static/bower_components/iron-selector/iron-selection.html b/static/bower_components/iron-selector/iron-selection.html new file mode 100644 index 0000000..0ff04cf --- /dev/null +++ b/static/bower_components/iron-selector/iron-selection.html @@ -0,0 +1,115 @@ + + + + + + diff --git a/static/bower_components/iron-selector/iron-selector.html b/static/bower_components/iron-selector/iron-selector.html new file mode 100644 index 0000000..92abe04 --- /dev/null +++ b/static/bower_components/iron-selector/iron-selector.html @@ -0,0 +1,71 @@ + + + + + + + diff --git a/static/bower_components/iron-selector/test/activate-event.html b/static/bower_components/iron-selector/test/activate-event.html new file mode 100644 index 0000000..8390548 --- /dev/null +++ b/static/bower_components/iron-selector/test/activate-event.html @@ -0,0 +1,138 @@ + + + + + + + iron-selector-activate-event + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/bower_components/iron-selector/test/basic.html b/static/bower_components/iron-selector/test/basic.html new file mode 100644 index 0000000..602de18 --- /dev/null +++ b/static/bower_components/iron-selector/test/basic.html @@ -0,0 +1,150 @@ + + + + + + + iron-selector-basic + + + + + + + + + + + + + + + + + + + +

    + + + + + + + + + diff --git a/static/bower_components/iron-selector/test/content-element.html b/static/bower_components/iron-selector/test/content-element.html new file mode 100644 index 0000000..d0cd6d7 --- /dev/null +++ b/static/bower_components/iron-selector/test/content-element.html @@ -0,0 +1,43 @@ + + + + + + + + + + + diff --git a/static/bower_components/iron-selector/test/content.html b/static/bower_components/iron-selector/test/content.html new file mode 100644 index 0000000..e869f98 --- /dev/null +++ b/static/bower_components/iron-selector/test/content.html @@ -0,0 +1,168 @@ + + + + + + + iron-selector-content + + + + + + + + + + + + + + + + +
    item0
    +
    item1
    +
    item2
    +
    item3
    +
    + + + item0 +
    + item1 + item2 +
    + item3 +
    + + + + + + + + + diff --git a/static/bower_components/iron-selector/test/index.html b/static/bower_components/iron-selector/test/index.html new file mode 100644 index 0000000..17d7e4b --- /dev/null +++ b/static/bower_components/iron-selector/test/index.html @@ -0,0 +1,36 @@ + + + + + + + + Tests + + + + + + + + + diff --git a/static/bower_components/iron-selector/test/multi.html b/static/bower_components/iron-selector/test/multi.html new file mode 100644 index 0000000..fdc31c7 --- /dev/null +++ b/static/bower_components/iron-selector/test/multi.html @@ -0,0 +1,135 @@ + + + + + + + iron-selector-multi + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/bower_components/iron-selector/test/next-previous.html b/static/bower_components/iron-selector/test/next-previous.html new file mode 100644 index 0000000..3a830c2 --- /dev/null +++ b/static/bower_components/iron-selector/test/next-previous.html @@ -0,0 +1,134 @@ + + + + + + + iron-selector-next-previous + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/bower_components/iron-selector/test/selected-attribute.html b/static/bower_components/iron-selector/test/selected-attribute.html new file mode 100644 index 0000000..3e1ecaf --- /dev/null +++ b/static/bower_components/iron-selector/test/selected-attribute.html @@ -0,0 +1,72 @@ + + + + + + + iron-selector-selected-attribute + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/bower_components/iron-selector/test/template-repeat.html b/static/bower_components/iron-selector/test/template-repeat.html new file mode 100644 index 0000000..eae2729 --- /dev/null +++ b/static/bower_components/iron-selector/test/template-repeat.html @@ -0,0 +1,110 @@ + + + + + + + iron-selector-template-repeat + + + + + + + + + + + + + + + + + + + diff --git a/static/bower_components/paper-behaviors/.bower.json b/static/bower_components/paper-behaviors/.bower.json new file mode 100644 index 0000000..7c969e4 --- /dev/null +++ b/static/bower_components/paper-behaviors/.bower.json @@ -0,0 +1,48 @@ +{ + "name": "paper-behaviors", + "version": "1.0.2", + "description": "Common behaviors across the paper elements", + "authors": [ + "The Polymer Authors" + ], + "main": [ + "paper-button-behavior.html", + "paper-radio-button-behavior.html" + ], + "keywords": [ + "web-components", + "web-component", + "polymer", + "paper", + "behavior" + ], + "private": true, + "repository": { + "type": "git", + "url": "git://github.com/PolymerElements/paper-behaviors" + }, + "license": "http://polymer.github.io/LICENSE.txt", + "homepage": "https://github.com/PolymerElements/paper-behaviors", + "dependencies": { + "iron-behaviors": "PolymerElements/iron-behaviors#^1.0.0", + "polymer": "Polymer/polymer#^1.0.0" + }, + "devDependencies": { + "iron-component-page": "polymerelements/iron-component-page#^1.0.0", + "iron-test-helpers": "polymerelements/iron-test-helpers#^1.0.0", + "paper-material": "PolymerElements/paper-material#^1.0.0", + "paper-ripple": "PolymerElements/paper-ripple#^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": "4dd226a2cc5b780a73d0058cd9998b6e0af1cb2c" + }, + "_source": "git://github.com/polymerelements/paper-behaviors.git", + "_target": "^1.0.0", + "_originalSource": "polymerelements/paper-behaviors" +} \ No newline at end of file diff --git a/static/bower_components/paper-behaviors/.gitignore b/static/bower_components/paper-behaviors/.gitignore new file mode 100644 index 0000000..8d4ae25 --- /dev/null +++ b/static/bower_components/paper-behaviors/.gitignore @@ -0,0 +1 @@ +bower_components diff --git a/static/bower_components/paper-behaviors/README.md b/static/bower_components/paper-behaviors/README.md new file mode 100644 index 0000000..e793a62 --- /dev/null +++ b/static/bower_components/paper-behaviors/README.md @@ -0,0 +1,4 @@ +paper-behaviors +=============== + +These are common behaviors used across `paper-*` elements. diff --git a/static/bower_components/paper-behaviors/bower.json b/static/bower_components/paper-behaviors/bower.json new file mode 100644 index 0000000..d4cae45 --- /dev/null +++ b/static/bower_components/paper-behaviors/bower.json @@ -0,0 +1,39 @@ +{ + "name": "paper-behaviors", + "version": "1.0.2", + "description": "Common behaviors across the paper elements", + "authors": [ + "The Polymer Authors" + ], + "main": [ + "paper-button-behavior.html", + "paper-radio-button-behavior.html" + ], + "keywords": [ + "web-components", + "web-component", + "polymer", + "paper", + "behavior" + ], + "private": true, + "repository": { + "type": "git", + "url": "git://github.com/PolymerElements/paper-behaviors" + }, + "license": "http://polymer.github.io/LICENSE.txt", + "homepage": "https://github.com/PolymerElements/paper-behaviors", + "dependencies": { + "iron-behaviors": "PolymerElements/iron-behaviors#^1.0.0", + "polymer": "Polymer/polymer#^1.0.0" + }, + "devDependencies": { + "iron-component-page": "polymerelements/iron-component-page#^1.0.0", + "iron-test-helpers": "polymerelements/iron-test-helpers#^1.0.0", + "paper-material": "PolymerElements/paper-material#^1.0.0", + "paper-ripple": "PolymerElements/paper-ripple#^1.0.0", + "test-fixture": "PolymerElements/test-fixture#^1.0.0", + "web-component-tester": "*", + "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0" + } +} diff --git a/static/bower_components/paper-behaviors/demo/index.html b/static/bower_components/paper-behaviors/demo/index.html new file mode 100644 index 0000000..d6b775b --- /dev/null +++ b/static/bower_components/paper-behaviors/demo/index.html @@ -0,0 +1,57 @@ + + + + + + + + + + + paper-behaviors demo + + + + + + + + + + + +

    Normal

    + + Hello World + +

    Toggles

    + + Hello World + +

    Disabled

    + + Hello World + +

    Radio button with focus state

    + + + + + + diff --git a/static/bower_components/paper-behaviors/demo/paper-button.html b/static/bower_components/paper-behaviors/demo/paper-button.html new file mode 100644 index 0000000..c38bd00 --- /dev/null +++ b/static/bower_components/paper-behaviors/demo/paper-button.html @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + diff --git a/static/bower_components/paper-behaviors/demo/paper-radio-button.html b/static/bower_components/paper-behaviors/demo/paper-radio-button.html new file mode 100644 index 0000000..93af175 --- /dev/null +++ b/static/bower_components/paper-behaviors/demo/paper-radio-button.html @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + diff --git a/static/bower_components/paper-behaviors/index.html b/static/bower_components/paper-behaviors/index.html new file mode 100644 index 0000000..3e003cb --- /dev/null +++ b/static/bower_components/paper-behaviors/index.html @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + diff --git a/static/bower_components/paper-behaviors/paper-button-behavior.html b/static/bower_components/paper-behaviors/paper-button-behavior.html new file mode 100644 index 0000000..bbe508f --- /dev/null +++ b/static/bower_components/paper-behaviors/paper-button-behavior.html @@ -0,0 +1,56 @@ + + + + + + diff --git a/static/bower_components/paper-behaviors/paper-inky-focus-behavior.html b/static/bower_components/paper-behaviors/paper-inky-focus-behavior.html new file mode 100644 index 0000000..4f6e9f8 --- /dev/null +++ b/static/bower_components/paper-behaviors/paper-inky-focus-behavior.html @@ -0,0 +1,44 @@ + + + + + + diff --git a/static/bower_components/paper-behaviors/test/index.html b/static/bower_components/paper-behaviors/test/index.html new file mode 100644 index 0000000..c58bfee --- /dev/null +++ b/static/bower_components/paper-behaviors/test/index.html @@ -0,0 +1,26 @@ + + + + + + + + + + + + + diff --git a/static/bower_components/paper-behaviors/test/paper-button-behavior.html b/static/bower_components/paper-behaviors/test/paper-button-behavior.html new file mode 100644 index 0000000..9663938 --- /dev/null +++ b/static/bower_components/paper-behaviors/test/paper-button-behavior.html @@ -0,0 +1,82 @@ + + + + + + paper-button-behavior + + + + + + + + + + + + + + + + + + + + diff --git a/static/bower_components/paper-behaviors/test/paper-radio-button-behavior.html b/static/bower_components/paper-behaviors/test/paper-radio-button-behavior.html new file mode 100644 index 0000000..890d0bb --- /dev/null +++ b/static/bower_components/paper-behaviors/test/paper-radio-button-behavior.html @@ -0,0 +1,62 @@ + + + + + + paper-radio-button-behavior + + + + + + + + + + + + + + + + + + + + diff --git a/static/bower_components/paper-behaviors/test/test-button.html b/static/bower_components/paper-behaviors/test/test-button.html new file mode 100644 index 0000000..3bbf356 --- /dev/null +++ b/static/bower_components/paper-behaviors/test/test-button.html @@ -0,0 +1,34 @@ + + + + + + + + + + + + diff --git a/static/bower_components/paper-behaviors/test/test-radio-button.html b/static/bower_components/paper-behaviors/test/test-radio-button.html new file mode 100644 index 0000000..afeabbb --- /dev/null +++ b/static/bower_components/paper-behaviors/test/test-radio-button.html @@ -0,0 +1,41 @@ + + + + + + + + + + + + diff --git a/static/bower_components/paper-drawer-panel/.bower.json b/static/bower_components/paper-drawer-panel/.bower.json new file mode 100644 index 0000000..e49fa46 --- /dev/null +++ b/static/bower_components/paper-drawer-panel/.bower.json @@ -0,0 +1,42 @@ +{ + "name": "paper-drawer-panel", + "version": "1.0.2", + "description": "A responsive drawer panel", + "authors": [ + "The Polymer Authors" + ], + "keywords": [ + "web-components", + "polymer", + "drawer", + "responsive", + "layout" + ], + "repository": { + "type": "git", + "url": "git://github.com/PolymerElements/paper-drawer-panel.git" + }, + "license": "http://polymer.github.io/LICENSE.txt", + "homepage": "https://github.com/PolymerElements/paper-drawer-panel", + "dependencies": { + "polymer": "Polymer/polymer#^1.0.0", + "iron-selector": "PolymerElements/iron-selector#^1.0.0", + "iron-media-query": "PolymerElements/iron-media-query#^1.0.0" + }, + "devDependencies": { + "iron-component-page": "PolymerElements/iron-component-page#^1.0.0", + "paper-button": "PolymerElements/paper-button#^1.0.0", + "paper-styles": "PolymerElements/paper-styles#^1.0.0", + "web-component-tester": "*", + "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0" + }, + "_release": "1.0.2", + "_resolution": { + "type": "version", + "tag": "v1.0.2", + "commit": "691739c877914f7231eaca16b724bdca295dfe8d" + }, + "_source": "git://github.com/PolymerElements/paper-drawer-panel.git", + "_target": "^1.0.0", + "_originalSource": "PolymerElements/paper-drawer-panel" +} \ No newline at end of file diff --git a/static/bower_components/paper-drawer-panel/.gitignore b/static/bower_components/paper-drawer-panel/.gitignore new file mode 100644 index 0000000..fbe05fc --- /dev/null +++ b/static/bower_components/paper-drawer-panel/.gitignore @@ -0,0 +1 @@ +bower_components/ diff --git a/static/bower_components/paper-drawer-panel/README.md b/static/bower_components/paper-drawer-panel/README.md new file mode 100644 index 0000000..2828663 --- /dev/null +++ b/static/bower_components/paper-drawer-panel/README.md @@ -0,0 +1,71 @@ +# paper-drawer-panel + +`paper-drawer-panel` contains a drawer panel and a main panel. The drawer +and the main panel are side-by-side with drawer on the left. When the browser +window size is smaller than the `responsiveWidth`, `paper-drawer-panel` +changes to narrow layout. In narrow layout, the drawer will be stacked on top +of the main panel. The drawer will slide in/out to hide/reveal the main +panel. + +Use the attribute `drawer` to indicate that the element is the drawer panel and +`main` to indicate that the element is the main panel. + +Example: + +```html + +
    Drawer panel...
    +
    Main panel...
    +
    +``` + +The drawer and the main panels are not scrollable. You can set CSS overflow +property on the elements to make them scrollable or use `paper-header-panel`. + +Example: + +```html + + + +
    Drawer content...
    +
    + + +
    Main content...
    +
    +
    +``` + +An element that should toggle the drawer will automatically do so if it's +given the `paper-drawer-toggle` attribute. Also this element will automatically +be hidden in wide layout. + +Example: + +```html + + + +
    Application
    +
    +
    Drawer content...
    +
    + + + +
    Title
    +
    +
    Main content...
    +
    +
    +``` + +To position the drawer to the right, add `right-drawer` attribute. + +```html + +
    Drawer panel...
    +
    Main panel...
    +
    +``` diff --git a/static/bower_components/paper-drawer-panel/bower.json b/static/bower_components/paper-drawer-panel/bower.json new file mode 100644 index 0000000..f87cca9 --- /dev/null +++ b/static/bower_components/paper-drawer-panel/bower.json @@ -0,0 +1,33 @@ +{ + "name": "paper-drawer-panel", + "version": "1.0.2", + "description": "A responsive drawer panel", + "authors": [ + "The Polymer Authors" + ], + "keywords": [ + "web-components", + "polymer", + "drawer", + "responsive", + "layout" + ], + "repository": { + "type": "git", + "url": "git://github.com/PolymerElements/paper-drawer-panel.git" + }, + "license": "http://polymer.github.io/LICENSE.txt", + "homepage": "https://github.com/PolymerElements/paper-drawer-panel", + "dependencies": { + "polymer": "Polymer/polymer#^1.0.0", + "iron-selector": "PolymerElements/iron-selector#^1.0.0", + "iron-media-query": "PolymerElements/iron-media-query#^1.0.0" + }, + "devDependencies": { + "iron-component-page": "PolymerElements/iron-component-page#^1.0.0", + "paper-button": "PolymerElements/paper-button#^1.0.0", + "paper-styles": "PolymerElements/paper-styles#^1.0.0", + "web-component-tester": "*", + "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0" + } +} diff --git a/static/bower_components/paper-drawer-panel/demo/index.html b/static/bower_components/paper-drawer-panel/demo/index.html new file mode 100644 index 0000000..f69df9f --- /dev/null +++ b/static/bower_components/paper-drawer-panel/demo/index.html @@ -0,0 +1,85 @@ + + + + + paper-drawer-panel demo + + + + + + + + + + + + + + + + + + + +
    +
    +
    + flip drawer +
    +
    + toggle drawer +
    +
    +
    + + + + + diff --git a/static/bower_components/paper-drawer-panel/hero.svg b/static/bower_components/paper-drawer-panel/hero.svg new file mode 100644 index 0000000..b53bf75 --- /dev/null +++ b/static/bower_components/paper-drawer-panel/hero.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/static/bower_components/paper-drawer-panel/index.html b/static/bower_components/paper-drawer-panel/index.html new file mode 100644 index 0000000..1390ecc --- /dev/null +++ b/static/bower_components/paper-drawer-panel/index.html @@ -0,0 +1,29 @@ + + + + + + + + + paper-drawer-panel + + + + + + + + + + + + + diff --git a/static/bower_components/paper-drawer-panel/paper-drawer-panel.css b/static/bower_components/paper-drawer-panel/paper-drawer-panel.css new file mode 100644 index 0000000..ab7c568 --- /dev/null +++ b/static/bower_components/paper-drawer-panel/paper-drawer-panel.css @@ -0,0 +1,142 @@ +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt +The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt +The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt +Code distributed by Google as part of the polymer project is also +subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt + +*/ +:host { + display: block; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + overflow: hidden; +} + +iron-selector > #drawer { + position: absolute; + top: 0; + left: 0; + height: 100%; + background-color: white; + will-change: transform; + box-sizing: border-box; + -moz-box-sizing: border-box; + + @apply(--paper-drawer-panel-drawer-container); +} + +.transition > #drawer { + transition: -webkit-transform ease-in-out 0.3s, width ease-in-out 0.3s; + transition: transform ease-in-out 0.3s, width ease-in-out 0.3s; +} + +.left-drawer > #drawer { + @apply(--paper-drawer-panel-left-drawer-container); +} + +.right-drawer > #drawer { + left: auto; + right: 0; + + @apply(--paper-drawer-panel-right-drawer-container); +} + +iron-selector > #main { + position: absolute; + top: 0; + right: 0; + bottom: 0; + + @apply(--paper-drawer-panel-main-container); +} + +.transition > #main { + transition: left ease-in-out 0.3s, padding ease-in-out 0.3s; +} + +.right-drawer > #main { + left: 0; +} + +.right-drawer.transition > #main { + transition: right ease-in-out 0.3s, padding ease-in-out 0.3s; +} + +#main > ::content > [main] { + height: 100%; +} + +#drawer > ::content > [drawer] { + height: 100%; +} + +#scrim { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + visibility: hidden; + opacity: 0; + transition: opacity ease-in-out 0.38s, visibility ease-in-out 0.38s; + background-color: rgba(0, 0, 0, 0.3); +} + +.narrow-layout > #drawer.iron-selected { + box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.15); +} + +.right-drawer.narrow-layout > #drawer.iron-selected { + box-shadow: -2px 2px 4px rgba(0, 0, 0, 0.15); +} + +.narrow-layout > #drawer > ::content > [drawer] { + border: 0; +} + +.left-drawer.narrow-layout > #drawer:not(.iron-selected) { + -webkit-transform: translateX(-100%); + transform: translateX(-100%); +} + +.right-drawer.narrow-layout > #drawer:not(.iron-selected) { + left: auto; + -webkit-transform: translateX(100%); + transform: translateX(100%); +} + +.narrow-layout > #main { + left: 0 !important; + padding: 0; +} + +.right-drawer.narrow-layout > #main { + left: 0; + right: 0; + padding: 0; +} + +.narrow-layout > #main:not(.iron-selected) > #scrim, +.dragging > #main > #scrim { + visibility: visible; + opacity: var(--paper-drawer-panel-scrim-opacity, 1); +} + +.narrow-layout > #main > * { + margin: 0; + min-height: 100%; + left: 0; + right: 0; + box-sizing: border-box; + -moz-box-sizing: border-box; +} + +iron-selector:not(.narrow-layout) #main ::content [paper-drawer-toggle] { + display: none; +} \ No newline at end of file diff --git a/static/bower_components/paper-drawer-panel/paper-drawer-panel.html b/static/bower_components/paper-drawer-panel/paper-drawer-panel.html new file mode 100644 index 0000000..148cfeb --- /dev/null +++ b/static/bower_components/paper-drawer-panel/paper-drawer-panel.html @@ -0,0 +1,591 @@ + + + + + + + + + + + + + + + + diff --git a/static/bower_components/paper-fab/.bower.json b/static/bower_components/paper-fab/.bower.json new file mode 100644 index 0000000..15e922a --- /dev/null +++ b/static/bower_components/paper-fab/.bower.json @@ -0,0 +1,48 @@ +{ + "name": "paper-fab", + "version": "1.0.2", + "description": "A material design floating action button", + "authors": [ + "The Polymer Authors" + ], + "keywords": [ + "web-components", + "polymer", + "button" + ], + "main": "paper-fab.html", + "ignore": [], + "private": true, + "repository": { + "type": "git", + "url": "git://github.com/PolymerElements/paper-fab" + }, + "license": "http://polymer.github.io/LICENSE.txt", + "homepage": "https://github.com/PolymerElements/paper-fab", + "dependencies": { + "paper-ripple": "polymerelements/paper-ripple#^1.0.0", + "paper-material": "polymerelements/paper-material#^1.0.0", + "paper-behaviors": "polymerelements/paper-behaviors#^1.0.0", + "iron-flex-layout": "polymerelements/iron-flex-layout#^1.0.0", + "iron-icon": "polymerelements/iron-icon#^1.0.0", + "iron-icons": "polymerelements/iron-icons#^1.0.0", + "paper-styles": "polymerelements/paper-styles#^1.0.0", + "polymer": "Polymer/polymer#^1.0.0" + }, + "devDependencies": { + "iron-component-page": "PolymerElements/iron-component-page#^1.0.0", + "test-fixture": "polymerelements/test-fixture#^1.0.0", + "paper-styles": "polymerelements/paper-styles#^1.0.0", + "web-component-tester": "*", + "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0" + }, + "_release": "1.0.2", + "_resolution": { + "type": "version", + "tag": "v1.0.2", + "commit": "59d2f77f456271f1ae4059b92d83ba7655fb1580" + }, + "_source": "git://github.com/PolymerElements/paper-fab.git", + "_target": "^1.0.0", + "_originalSource": "PolymerElements/paper-fab" +} \ No newline at end of file diff --git a/static/bower_components/paper-fab/.gitignore b/static/bower_components/paper-fab/.gitignore new file mode 100644 index 0000000..8d4ae25 --- /dev/null +++ b/static/bower_components/paper-fab/.gitignore @@ -0,0 +1 @@ +bower_components diff --git a/static/bower_components/paper-fab/README.md b/static/bower_components/paper-fab/README.md new file mode 100644 index 0000000..5da43e2 --- /dev/null +++ b/static/bower_components/paper-fab/README.md @@ -0,0 +1,44 @@ +paper-fab +========= + +Material Design: Button + +`paper-fab` is a floating action button. It contains an image placed in the center and +comes in two sizes: regular size and a smaller size by applying the attribute `mini`. When +the user touches the button, a ripple effect emanates from the center of the button. + +You may import `iron-icons` to use with this element, or provide a URL to a custom icon. +See `iron-iconset` for more information about how to use a custom icon set. + +Example: + +```html + + + + + +``` + +Styling +------- + +Style the button with CSS as you would a normal DOM element. If you are using the icons +provided by `iron-icons`, the icon will inherit the foreground color of the button. + +```html + + +``` + +By default, the ripple is the same color as the foreground at 25% opacity. You may +customize the color using this selector: + +```css +/* make #my-button use a blue ripple instead of foreground color */ +#my-button::shadow #ripple { + color: blue; +} +``` + +The opacity of the ripple is not customizable via CSS. diff --git a/static/bower_components/paper-fab/bower.json b/static/bower_components/paper-fab/bower.json new file mode 100644 index 0000000..f3738a2 --- /dev/null +++ b/static/bower_components/paper-fab/bower.json @@ -0,0 +1,39 @@ +{ + "name": "paper-fab", + "version": "1.0.2", + "description": "A material design floating action button", + "authors": [ + "The Polymer Authors" + ], + "keywords": [ + "web-components", + "polymer", + "button" + ], + "main": "paper-fab.html", + "ignore": [], + "private": true, + "repository": { + "type": "git", + "url": "git://github.com/PolymerElements/paper-fab" + }, + "license": "http://polymer.github.io/LICENSE.txt", + "homepage": "https://github.com/PolymerElements/paper-fab", + "dependencies": { + "paper-ripple": "polymerelements/paper-ripple#^1.0.0", + "paper-material": "polymerelements/paper-material#^1.0.0", + "paper-behaviors": "polymerelements/paper-behaviors#^1.0.0", + "iron-flex-layout": "polymerelements/iron-flex-layout#^1.0.0", + "iron-icon": "polymerelements/iron-icon#^1.0.0", + "iron-icons": "polymerelements/iron-icons#^1.0.0", + "paper-styles": "polymerelements/paper-styles#^1.0.0", + "polymer": "Polymer/polymer#^1.0.0" + }, + "devDependencies": { + "iron-component-page": "PolymerElements/iron-component-page#^1.0.0", + "test-fixture": "polymerelements/test-fixture#^1.0.0", + "paper-styles": "polymerelements/paper-styles#^1.0.0", + "web-component-tester": "*", + "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0" + } +} diff --git a/static/bower_components/paper-fab/demo/index.html b/static/bower_components/paper-fab/demo/index.html new file mode 100644 index 0000000..3bd9935 --- /dev/null +++ b/static/bower_components/paper-fab/demo/index.html @@ -0,0 +1,97 @@ + + + + + + + + + + paper-fab demo + + + + + + + + + + + +
    +
    +

    Enabled

    +
    + + + + + +
    +
    + +
    +

    Disabled

    +
    + + + + + +
    +
    + +
    +

    Colors

    +
    + + + + + +
    +
    +
    + + diff --git a/static/bower_components/paper-fab/index.html b/static/bower_components/paper-fab/index.html new file mode 100644 index 0000000..c98a658 --- /dev/null +++ b/static/bower_components/paper-fab/index.html @@ -0,0 +1,24 @@ + + + + + + paper-fab + + + + + + + + + + diff --git a/static/bower_components/paper-fab/paper-fab.html b/static/bower_components/paper-fab/paper-fab.html new file mode 100644 index 0000000..f607ca4 --- /dev/null +++ b/static/bower_components/paper-fab/paper-fab.html @@ -0,0 +1,175 @@ + + + + + + + + + + + + + + + + + + diff --git a/static/bower_components/paper-fab/test/a11y.html b/static/bower_components/paper-fab/test/a11y.html new file mode 100644 index 0000000..2a2cbe3 --- /dev/null +++ b/static/bower_components/paper-fab/test/a11y.html @@ -0,0 +1,71 @@ + + + + + + paper-fab a11y tests + + + + + + + + + + + + + + + + + + + + + diff --git a/static/bower_components/paper-fab/test/basic.html b/static/bower_components/paper-fab/test/basic.html new file mode 100644 index 0000000..6c8a48a --- /dev/null +++ b/static/bower_components/paper-fab/test/basic.html @@ -0,0 +1,76 @@ + + + + + + paper-fab basic tests + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/bower_components/paper-fab/test/index.html b/static/bower_components/paper-fab/test/index.html new file mode 100644 index 0000000..9f90214 --- /dev/null +++ b/static/bower_components/paper-fab/test/index.html @@ -0,0 +1,26 @@ + + + + + + + paper-fab tests + + + + + + diff --git a/static/bower_components/paper-icon-button/.bower.json b/static/bower_components/paper-icon-button/.bower.json new file mode 100644 index 0000000..71c8d45 --- /dev/null +++ b/static/bower_components/paper-icon-button/.bower.json @@ -0,0 +1,43 @@ +{ + "name": "paper-icon-button", + "private": true, + "version": "1.0.2", + "license": "http://polymer.github.io/LICENSE.txt", + "description": "A material design icon button", + "main": "paper-icon-button.html", + "author": [ + "The Polymer Authors" + ], + "keywords": [ + "web-components", + "polymer", + "button", + "icon", + "control" + ], + "dependencies": { + "iron-flex-layout": "polymerelements/iron-flex-layout#^1.0.0", + "iron-icon": "polymerelements/iron-icon#^1.0.0", + "iron-icons": "polymerelements/iron-icons#^1.0.0", + "paper-behaviors": "polymerelements/paper-behaviors#^1.0.0", + "paper-ripple": "polymerelements/paper-ripple#^1.0.0", + "paper-styles": "polymerelements/paper-styles#^1.0.0", + "polymer": "Polymer/polymer#^1.0.0" + }, + "devDependencies": { + "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" + }, + "homepage": "https://github.com/PolymerElements/paper-icon-button", + "_release": "1.0.2", + "_resolution": { + "type": "version", + "tag": "v1.0.2", + "commit": "b22ade2080f2527760eae41e4700c52d4689a866" + }, + "_source": "git://github.com/PolymerElements/paper-icon-button.git", + "_target": "^1.0.0", + "_originalSource": "PolymerElements/paper-icon-button" +} \ No newline at end of file diff --git a/static/bower_components/paper-icon-button/.gitignore b/static/bower_components/paper-icon-button/.gitignore new file mode 100644 index 0000000..8d4ae25 --- /dev/null +++ b/static/bower_components/paper-icon-button/.gitignore @@ -0,0 +1 @@ +bower_components diff --git a/static/bower_components/paper-icon-button/README.md b/static/bower_components/paper-icon-button/README.md new file mode 100644 index 0000000..96dbf8e --- /dev/null +++ b/static/bower_components/paper-icon-button/README.md @@ -0,0 +1,49 @@ +paper-icon-button +================= + +Material Design: Buttons + +`paper-icon-button` is a button with an image placed at the center. When the user touches +the button, a ripple effect emanates from the center of the button. + +`paper-icon-button` includes a default icon set. Use `icon` to specify which icon +from the icon set to use. + +```html + +``` + +See [`iron-iconset`](#iron-iconset) for more information about +how to use a custom icon set. + +Example: + +```html + + + + +``` + +Styling +------- + +Style the button with CSS as you would a normal DOM element. If you are using the icons +provided by `iron-icons`, they will inherit the foreground color of the button. + +```html + + +``` + +By default, the ripple is the same color as the foreground at 25% opacity. You may +customize the color using this selector: + +```css +/* make #my-button use a blue ripple instead of foreground color */ +#my-button::shadow #ripple { + color: blue; +} +``` + +The opacity of the ripple is not customizable via CSS. diff --git a/static/bower_components/paper-icon-button/bower.json b/static/bower_components/paper-icon-button/bower.json new file mode 100644 index 0000000..6886757 --- /dev/null +++ b/static/bower_components/paper-icon-button/bower.json @@ -0,0 +1,33 @@ +{ + "name": "paper-icon-button", + "private": true, + "version": "1.0.2", + "license": "http://polymer.github.io/LICENSE.txt", + "description": "A material design icon button", + "main": "paper-icon-button.html", + "author": [ + "The Polymer Authors" + ], + "keywords": [ + "web-components", + "polymer", + "button", + "icon", + "control" + ], + "dependencies": { + "iron-flex-layout": "polymerelements/iron-flex-layout#^1.0.0", + "iron-icon": "polymerelements/iron-icon#^1.0.0", + "iron-icons": "polymerelements/iron-icons#^1.0.0", + "paper-behaviors": "polymerelements/paper-behaviors#^1.0.0", + "paper-ripple": "polymerelements/paper-ripple#^1.0.0", + "paper-styles": "polymerelements/paper-styles#^1.0.0", + "polymer": "Polymer/polymer#^1.0.0" + }, + "devDependencies": { + "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/static/bower_components/paper-icon-button/demo/index.html b/static/bower_components/paper-icon-button/demo/index.html new file mode 100644 index 0000000..cbe6795 --- /dev/null +++ b/static/bower_components/paper-icon-button/demo/index.html @@ -0,0 +1,154 @@ + + + + + paper-icon-button + + + + + + + + + + + + + + +
    +
    +

    Enabled

    +
    + + + + + + + +
    +
    + +
    +

    Disabled

    +
    + + + + + + + +
    +
    + +
    +

    Color

    +
    + + + + + + + +
    +
    + +
    +

    Size

    +
    + +


    + +
    +
    +
    + + + + diff --git a/static/bower_components/paper-icon-button/index.html b/static/bower_components/paper-icon-button/index.html new file mode 100644 index 0000000..94c3720 --- /dev/null +++ b/static/bower_components/paper-icon-button/index.html @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + diff --git a/static/bower_components/paper-icon-button/paper-icon-button.html b/static/bower_components/paper-icon-button/paper-icon-button.html new file mode 100644 index 0000000..f4164ce --- /dev/null +++ b/static/bower_components/paper-icon-button/paper-icon-button.html @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + diff --git a/static/bower_components/paper-icon-button/test/a11y.html b/static/bower_components/paper-icon-button/test/a11y.html new file mode 100644 index 0000000..f6bf6fd --- /dev/null +++ b/static/bower_components/paper-icon-button/test/a11y.html @@ -0,0 +1,94 @@ + + + + + + paper-icon-button a11y tests + + + + + + + + + + + + + + + + + + + + + diff --git a/static/bower_components/paper-icon-button/test/basic.html b/static/bower_components/paper-icon-button/test/basic.html new file mode 100644 index 0000000..e98689c --- /dev/null +++ b/static/bower_components/paper-icon-button/test/basic.html @@ -0,0 +1,77 @@ + + + + + + paper-icon-button basic tests + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/bower_components/paper-icon-button/test/index.html b/static/bower_components/paper-icon-button/test/index.html new file mode 100644 index 0000000..321c261 --- /dev/null +++ b/static/bower_components/paper-icon-button/test/index.html @@ -0,0 +1,26 @@ + + + + + + + paper-icon-button tests + + + + + + diff --git a/static/bower_components/paper-item/.bower.json b/static/bower_components/paper-item/.bower.json new file mode 100644 index 0000000..00391bb --- /dev/null +++ b/static/bower_components/paper-item/.bower.json @@ -0,0 +1,49 @@ +{ + "name": "paper-item", + "version": "1.0.1", + "description": "A material-design styled list item", + "authors": [ + "The Polymer Authors" + ], + "keywords": [ + "web-components", + "polymer", + "item" + ], + "main": [ + "paper-item.html", + "paper-icon-item.html", + "paper-item-body.html" + ], + "private": true, + "repository": { + "type": "git", + "url": "git://github.com/PolymerElements/paper-item" + }, + "license": "MIT", + "homepage": "https://github.com/PolymerElements/paper-item", + "ignore": [], + "dependencies": { + "paper-styles": "PolymerElements/paper-styles#^1.0.0", + "polymer": "Polymer/polymer#^1.0.0" + }, + "devDependencies": { + "iron-icon": "PolymerElements/iron-icon#^1.0.0", + "iron-icons": "PolymerElements/iron-icons#^1.0.0", + "paper-checkbox": "PolymerElements/paper-checkbox#^1.0.0", + "paper-toggle-button": "PolymerElements/paper-toggle-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.1", + "_resolution": { + "type": "version", + "tag": "v1.0.1", + "commit": "645ebae475ab4fc28698da253ccc3aa2c48341d7" + }, + "_source": "git://github.com/PolymerElements/paper-item.git", + "_target": "^1.0.0", + "_originalSource": "PolymerElements/paper-item" +} \ No newline at end of file diff --git a/static/bower_components/paper-item/.gitignore b/static/bower_components/paper-item/.gitignore new file mode 100644 index 0000000..fbe05fc --- /dev/null +++ b/static/bower_components/paper-item/.gitignore @@ -0,0 +1 @@ +bower_components/ diff --git a/static/bower_components/paper-item/README.md b/static/bower_components/paper-item/README.md new file mode 100644 index 0000000..02f8202 --- /dev/null +++ b/static/bower_components/paper-item/README.md @@ -0,0 +1,4 @@ +paper-item +========= + +A non-interactive list item. diff --git a/static/bower_components/paper-item/all-imports.html b/static/bower_components/paper-item/all-imports.html new file mode 100644 index 0000000..4b1583f --- /dev/null +++ b/static/bower_components/paper-item/all-imports.html @@ -0,0 +1,13 @@ + + + + + diff --git a/static/bower_components/paper-item/bower.json b/static/bower_components/paper-item/bower.json new file mode 100644 index 0000000..f077268 --- /dev/null +++ b/static/bower_components/paper-item/bower.json @@ -0,0 +1,40 @@ +{ + "name": "paper-item", + "version": "1.0.1", + "description": "A material-design styled list item", + "authors": [ + "The Polymer Authors" + ], + "keywords": [ + "web-components", + "polymer", + "item" + ], + "main": [ + "paper-item.html", + "paper-icon-item.html", + "paper-item-body.html" + ], + "private": true, + "repository": { + "type": "git", + "url": "git://github.com/PolymerElements/paper-item" + }, + "license": "MIT", + "homepage": "https://github.com/PolymerElements/paper-item", + "ignore": [], + "dependencies": { + "paper-styles": "PolymerElements/paper-styles#^1.0.0", + "polymer": "Polymer/polymer#^1.0.0" + }, + "devDependencies": { + "iron-icon": "PolymerElements/iron-icon#^1.0.0", + "iron-icons": "PolymerElements/iron-icons#^1.0.0", + "paper-checkbox": "PolymerElements/paper-checkbox#^1.0.0", + "paper-toggle-button": "PolymerElements/paper-toggle-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/static/bower_components/paper-item/demo/index.html b/static/bower_components/paper-item/demo/index.html new file mode 100644 index 0000000..cdedb31 --- /dev/null +++ b/static/bower_components/paper-item/demo/index.html @@ -0,0 +1,285 @@ + + + + + + + + + + paper-item demo + + + + + + + + + + + + + + + + + +
    +
    +

    Single line items

    +
    + Inbox + Starred + Sent mail + Drafts +
    +
    + +
    +

    Icon with text

    +
    + + Inbox + + + Outbox + + + Trash + + + Spam + +
    +
    + +
    +

    Avatar with text

    +
    + +
    Alphonso Engelking +
    + +
    Andrews Boyd +
    + +
    Angela Decker +
    + +
    Lorem Ipsum +
    +
    +
    + +
    +

    Avatar with text and icon

    +
    + +
    +
    Alphonso
    + +
    + +
    +
    Andrews
    + +
    + +
    +
    Angela
    + +
    + +
    +
    Lorem
    + +
    +
    +
    + +
    +

    Avatar with text and control

    +
    + +
    +
    Alphonso
    + +
    + +
    +
    Andrews
    + +
    + +
    +
    Angela
    + +
    + +
    +
    Lorem
    + +
    +
    +
    + +
    +

    Control with text and icon

    +
    + + +
    Alphonso
    + +
    + + +
    Andrews
    + +
    + + +
    Angela
    + +
    + + +
    Lorem
    + +
    +
    +
    + +
    +

    Two-line items

    +
    + + +
    Profile Photo
    +
    Change your Google+ profile photo
    +
    +
    + + +
    Show your status
    +
    Your status is visible to everyone you use with
    +
    +
    + + +
    Settings
    +
    Change your account settings
    +
    +
    +
    +
    + +
    +

    Icon with two-line text

    +
    + +
    + +
    Alphonso Engelking
    +
    Change photo
    +
    +
    + + + +
    (650) 555-1234
    +
    Mobile
    +
    +
    + + + +
    alphonso@example.com
    +
    Personal
    +
    +
    + +
    +
    + +
    +

    Avatar with text and icon

    +
    + +
    + +
    Photos
    +
    Jan 9, 2014
    +
    + +
    + +
    + +
    Recipes
    +
    Jan 17, 2014
    +
    + +
    + +
    + +
    Work
    +
    Jan 28, 2014
    +
    + +
    +
    +
    + + + diff --git a/static/bower_components/paper-item/index.html b/static/bower_components/paper-item/index.html new file mode 100644 index 0000000..b409ed1 --- /dev/null +++ b/static/bower_components/paper-item/index.html @@ -0,0 +1,30 @@ + + + + + + + + + paper-item + + + + + + + + + + + + + diff --git a/static/bower_components/paper-item/paper-icon-item.html b/static/bower_components/paper-item/paper-icon-item.html new file mode 100644 index 0000000..231159c --- /dev/null +++ b/static/bower_components/paper-item/paper-icon-item.html @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + diff --git a/static/bower_components/paper-item/paper-item-body.html b/static/bower_components/paper-item/paper-item-body.html new file mode 100644 index 0000000..6345830 --- /dev/null +++ b/static/bower_components/paper-item/paper-item-body.html @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + diff --git a/static/bower_components/paper-item/paper-item-shared.css b/static/bower_components/paper-item/paper-item-shared.css new file mode 100644 index 0000000..8528d1a --- /dev/null +++ b/static/bower_components/paper-item/paper-item-shared.css @@ -0,0 +1,19 @@ +/* + @license + Copyright (c) 2015 The Polymer Project Authors. All rights reserved. + This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt + The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt + The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt + Code distributed by Google as part of the polymer project is also + subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt +*/ + +:host { + display: block; + min-height: var(--paper-item-min-height, 48px); + padding: 0px 16px; +} + +:host > ::content > *:not(:first-child):not(:last-child) { + margin-right: 16px; +} diff --git a/static/bower_components/paper-item/paper-item.html b/static/bower_components/paper-item/paper-item.html new file mode 100644 index 0000000..50b89fe --- /dev/null +++ b/static/bower_components/paper-item/paper-item.html @@ -0,0 +1,95 @@ + + + + + + + + + + + + + + + + + + + diff --git a/static/bower_components/paper-item/test/index.html b/static/bower_components/paper-item/test/index.html new file mode 100644 index 0000000..6f5314c --- /dev/null +++ b/static/bower_components/paper-item/test/index.html @@ -0,0 +1,34 @@ + + + + + + paper-item tests + + + + + + + + + + + + + + diff --git a/static/bower_components/paper-item/test/paper-item.html b/static/bower_components/paper-item/test/paper-item.html new file mode 100644 index 0000000..3c77ce3 --- /dev/null +++ b/static/bower_components/paper-item/test/paper-item.html @@ -0,0 +1,66 @@ + + + + + + paper-item tests + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/bower_components/paper-material/.bower.json b/static/bower_components/paper-material/.bower.json new file mode 100644 index 0000000..1933706 --- /dev/null +++ b/static/bower_components/paper-material/.bower.json @@ -0,0 +1,45 @@ +{ + "name": "paper-material", + "version": "1.0.0", + "description": "A material design container that looks like a lifted sheet of paper", + "private": true, + "authors": [ + "The Polymer Authors" + ], + "keywords": [ + "web-components", + "web-component", + "polymer", + "paper", + "container" + ], + "main": [ + "paper-material.html" + ], + "repository": { + "type": "git", + "url": "git://github.com/PolymerElements/paper-material" + }, + "license": "http://polymer.github.io/LICENSE.txt", + "homepage": "https://github.com/PolymerElements/paper-material", + "ignore": [], + "dependencies": { + "paper-styles": "polymerelements/paper-styles#^1.0.0", + "polymer": "Polymer/polymer#^1.0.0" + }, + "devDependencies": { + "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.0", + "_resolution": { + "type": "version", + "tag": "v1.0.0", + "commit": "bd769d2b8c4f9ab000aee22582d76b5935793dc1" + }, + "_source": "git://github.com/polymerelements/paper-material.git", + "_target": "^1.0.0", + "_originalSource": "polymerelements/paper-material" +} \ No newline at end of file diff --git a/static/bower_components/paper-material/.gitignore b/static/bower_components/paper-material/.gitignore new file mode 100644 index 0000000..8d4ae25 --- /dev/null +++ b/static/bower_components/paper-material/.gitignore @@ -0,0 +1 @@ +bower_components diff --git a/static/bower_components/paper-material/README.md b/static/bower_components/paper-material/README.md new file mode 100644 index 0000000..1105102 --- /dev/null +++ b/static/bower_components/paper-material/README.md @@ -0,0 +1,13 @@ +# paper-material +A Material Design container that looks like a lifted piece of paper. + +`paper-material` is a container that renders two shadows on top of each other to +create the effect of a lifted piece of paper. + +Example: + +```html + + ... content ... + +``` diff --git a/static/bower_components/paper-material/bower.json b/static/bower_components/paper-material/bower.json new file mode 100644 index 0000000..e6f78bc --- /dev/null +++ b/static/bower_components/paper-material/bower.json @@ -0,0 +1,36 @@ +{ + "name": "paper-material", + "version": "1.0.0", + "description": "A material design container that looks like a lifted sheet of paper", + "private": true, + "authors": [ + "The Polymer Authors" + ], + "keywords": [ + "web-components", + "web-component", + "polymer", + "paper", + "container" + ], + "main": [ + "paper-material.html" + ], + "repository": { + "type": "git", + "url": "git://github.com/PolymerElements/paper-material" + }, + "license": "http://polymer.github.io/LICENSE.txt", + "homepage": "https://github.com/PolymerElements/paper-material", + "ignore": [], + "dependencies": { + "paper-styles": "polymerelements/paper-styles#^1.0.0", + "polymer": "Polymer/polymer#^1.0.0" + }, + "devDependencies": { + "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/static/bower_components/paper-material/demo/index.html b/static/bower_components/paper-material/demo/index.html new file mode 100644 index 0000000..864f696 --- /dev/null +++ b/static/bower_components/paper-material/demo/index.html @@ -0,0 +1,113 @@ + + + + + paper-material demo + + + + + + + + + + + + + + + + + + + + diff --git a/static/bower_components/paper-material/index.html b/static/bower_components/paper-material/index.html new file mode 100644 index 0000000..7209e6d --- /dev/null +++ b/static/bower_components/paper-material/index.html @@ -0,0 +1,30 @@ + + + + + + + + + paper-material + + + + + + + + + + + + + diff --git a/static/bower_components/paper-material/paper-material.html b/static/bower_components/paper-material/paper-material.html new file mode 100644 index 0000000..60f87ba --- /dev/null +++ b/static/bower_components/paper-material/paper-material.html @@ -0,0 +1,98 @@ + + + + + + + + + + + + diff --git a/static/bower_components/paper-material/test/index.html b/static/bower_components/paper-material/test/index.html new file mode 100644 index 0000000..492a567 --- /dev/null +++ b/static/bower_components/paper-material/test/index.html @@ -0,0 +1,25 @@ + + + + + + + paper-material tests + + + + + + diff --git a/static/bower_components/paper-material/test/paper-material.html b/static/bower_components/paper-material/test/paper-material.html new file mode 100644 index 0000000..0a593fb --- /dev/null +++ b/static/bower_components/paper-material/test/paper-material.html @@ -0,0 +1,92 @@ + + + + + + paper-material basic tests + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/bower_components/paper-menu/.bower.json b/static/bower_components/paper-menu/.bower.json new file mode 100644 index 0000000..0e4dff9 --- /dev/null +++ b/static/bower_components/paper-menu/.bower.json @@ -0,0 +1,41 @@ +{ + "name": "paper-menu", + "version": "1.0.0", + "description": "Implements an accessible material design menu", + "authors": "The Polymer Authors", + "keywords": [ + "web-components", + "polymer", + "menu" + ], + "main": "paper-menu.html", + "private": true, + "repository": { + "type": "git", + "url": "git://github.com/PolymerElements/paper-menu" + }, + "license": "http://polymer.github.io/LICENSE.txt", + "homepage": "https://github.com/PolymerElements/paper-menu", + "ignore": [], + "dependencies": { + "iron-menu-behavior": "PolymerElements/iron-menu-behavior#^1.0.0", + "paper-styles": "PolymerElements/paper-styles#^1.0.0", + "polymer": "Polymer/polymer#^1.0.0" + }, + "devDependencies": { + "iron-component-page": "PolymerElements/iron-component-page#^1.0.0", + "paper-item": "PolymerElements/paper-item#^1.0.0", + "test-fixture": "PolymerElements/test-fixture#^1.0.0", + "web-component-tester": "*", + "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0" + }, + "_release": "1.0.0", + "_resolution": { + "type": "version", + "tag": "v1.0.0", + "commit": "0642450ec9df0fc0b1d909842f436c3dea79ed1e" + }, + "_source": "git://github.com/PolymerElements/paper-menu.git", + "_target": "^1.0.0", + "_originalSource": "PolymerElements/paper-menu" +} \ No newline at end of file diff --git a/static/bower_components/paper-menu/.gitignore b/static/bower_components/paper-menu/.gitignore new file mode 100644 index 0000000..fbe05fc --- /dev/null +++ b/static/bower_components/paper-menu/.gitignore @@ -0,0 +1 @@ +bower_components/ diff --git a/static/bower_components/paper-menu/README.md b/static/bower_components/paper-menu/README.md new file mode 100644 index 0000000..9991680 --- /dev/null +++ b/static/bower_components/paper-menu/README.md @@ -0,0 +1,3 @@ +# paper-menu + +`` implements an accessible menu control with Material Design styling. diff --git a/static/bower_components/paper-menu/bower.json b/static/bower_components/paper-menu/bower.json new file mode 100644 index 0000000..dd2a5cd --- /dev/null +++ b/static/bower_components/paper-menu/bower.json @@ -0,0 +1,32 @@ +{ + "name": "paper-menu", + "version": "1.0.0", + "description": "Implements an accessible material design menu", + "authors": "The Polymer Authors", + "keywords": [ + "web-components", + "polymer", + "menu" + ], + "main": "paper-menu.html", + "private": true, + "repository": { + "type": "git", + "url": "git://github.com/PolymerElements/paper-menu" + }, + "license": "http://polymer.github.io/LICENSE.txt", + "homepage": "https://github.com/PolymerElements/paper-menu", + "ignore": [], + "dependencies": { + "iron-menu-behavior": "PolymerElements/iron-menu-behavior#^1.0.0", + "paper-styles": "PolymerElements/paper-styles#^1.0.0", + "polymer": "Polymer/polymer#^1.0.0" + }, + "devDependencies": { + "iron-component-page": "PolymerElements/iron-component-page#^1.0.0", + "paper-item": "PolymerElements/paper-item#^1.0.0", + "test-fixture": "PolymerElements/test-fixture#^1.0.0", + "web-component-tester": "*", + "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0" + } +} diff --git a/static/bower_components/paper-menu/demo/index.html b/static/bower_components/paper-menu/demo/index.html new file mode 100644 index 0000000..9734cac --- /dev/null +++ b/static/bower_components/paper-menu/demo/index.html @@ -0,0 +1,81 @@ + + + + + + + + + + paper-menu demo + + + + + + + + + + + +
    +
    +

    Standard

    +
    + + Inbox + Starred + Sent mail + Drafts + +
    +
    + +
    +

    Pre-selected

    +
    + + Inbox + Starred + Sent mail + Drafts + +
    +
    + +
    +

    Multi-select

    +
    + + Bold + Italic + Underline + Strikethrough + +
    +
    +
    + + diff --git a/static/bower_components/paper-menu/hero.svg b/static/bower_components/paper-menu/hero.svg new file mode 100644 index 0000000..eaa0fb5 --- /dev/null +++ b/static/bower_components/paper-menu/hero.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/bower_components/paper-menu/index.html b/static/bower_components/paper-menu/index.html new file mode 100644 index 0000000..fc88411 --- /dev/null +++ b/static/bower_components/paper-menu/index.html @@ -0,0 +1,30 @@ + + + + + + + + + paper-menu + + + + + + + + + + + + + diff --git a/static/bower_components/paper-menu/paper-menu.html b/static/bower_components/paper-menu/paper-menu.html new file mode 100644 index 0000000..45ecd72 --- /dev/null +++ b/static/bower_components/paper-menu/paper-menu.html @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + diff --git a/static/bower_components/paper-menu/test/index.html b/static/bower_components/paper-menu/test/index.html new file mode 100644 index 0000000..e6b26d5 --- /dev/null +++ b/static/bower_components/paper-menu/test/index.html @@ -0,0 +1,34 @@ + + + + + + paper-menu tests + + + + + + + + + + + + + + diff --git a/static/bower_components/paper-menu/test/paper-menu.html b/static/bower_components/paper-menu/test/paper-menu.html new file mode 100644 index 0000000..5856775 --- /dev/null +++ b/static/bower_components/paper-menu/test/paper-menu.html @@ -0,0 +1,67 @@ + + + + + + paper-menu tests + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/bower_components/paper-ripple/.bower.json b/static/bower_components/paper-ripple/.bower.json new file mode 100644 index 0000000..0cbf50c --- /dev/null +++ b/static/bower_components/paper-ripple/.bower.json @@ -0,0 +1,39 @@ +{ + "name": "paper-ripple", + "version": "1.0.1", + "license": "http://polymer.github.io/LICENSE.txt", + "description": "Adds a material design ripple to any container", + "private": true, + "authors": [ + "The Polymer Authors" + ], + "keywords": [ + "web-components", + "polymer", + "ripple" + ], + "main": "paper-ripple.html", + "dependencies": { + "polymer": "Polymer/polymer#^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", + "iron-icon": "polymerelements/iron-icon#^1.0.0", + "iron-icons": "polymerelements/iron-icons#^1.0.0", + "paper-styles": "polymerelements/paper-styles#^1.0.0", + "test-fixture": "polymerelements/test-fixture#^1.0.0", + "web-component-tester": "*", + "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0" + }, + "homepage": "https://github.com/polymerelements/paper-ripple", + "_release": "1.0.1", + "_resolution": { + "type": "version", + "tag": "v1.0.1", + "commit": "af19d904802437c305390bb03415c11661de3d0a" + }, + "_source": "git://github.com/polymerelements/paper-ripple.git", + "_target": "^1.0.0", + "_originalSource": "polymerelements/paper-ripple" +} \ No newline at end of file diff --git a/static/bower_components/paper-ripple/.gitignore b/static/bower_components/paper-ripple/.gitignore new file mode 100644 index 0000000..8d4ae25 --- /dev/null +++ b/static/bower_components/paper-ripple/.gitignore @@ -0,0 +1 @@ +bower_components diff --git a/static/bower_components/paper-ripple/README.md b/static/bower_components/paper-ripple/README.md new file mode 100644 index 0000000..b9bde23 --- /dev/null +++ b/static/bower_components/paper-ripple/README.md @@ -0,0 +1,65 @@ +paper-ripple +============ + +`paper-ripple` provides a visual effect that other paper elements can +use to simulate a rippling effect emanating from the point of contact. The +effect can be visualized as a concentric circle with motion. + +Example: + +```html + +``` + +`paper-ripple` listens to "mousedown" and "mouseup" events so it would display ripple +effect when touches on it. You can also defeat the default behavior and +manually route the down and up actions to the ripple element. Note that it is +important if you call downAction() you will have to make sure to call +upAction() so that `paper-ripple` would end the animation loop. + +Example: + +```html + +... + +``` + +Styling ripple effect: + +Use CSS color property to style the ripple: + +```css +paper-ripple { + color: #4285f4; +} +``` + +Note that CSS color property is inherited so it is not required to set it on +the `paper-ripple` element directly. + + +By default, the ripple is centered on the point of contact. Apply the ``recenters`` attribute to have the ripple grow toward the center of its container. + +```html + +``` + +Apply `center` to center the ripple inside its container from the start. + +```html + +``` + +Apply `circle` class to make the rippling effect within a circle. + +```html + +``` diff --git a/static/bower_components/paper-ripple/bower.json b/static/bower_components/paper-ripple/bower.json new file mode 100644 index 0000000..b9bb0d9 --- /dev/null +++ b/static/bower_components/paper-ripple/bower.json @@ -0,0 +1,29 @@ +{ + "name": "paper-ripple", + "version": "1.0.1", + "license": "http://polymer.github.io/LICENSE.txt", + "description": "Adds a material design ripple to any container", + "private": true, + "authors": [ + "The Polymer Authors" + ], + "keywords": [ + "web-components", + "polymer", + "ripple" + ], + "main": "paper-ripple.html", + "dependencies": { + "polymer": "Polymer/polymer#^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", + "iron-icon": "polymerelements/iron-icon#^1.0.0", + "iron-icons": "polymerelements/iron-icons#^1.0.0", + "paper-styles": "polymerelements/paper-styles#^1.0.0", + "test-fixture": "polymerelements/test-fixture#^1.0.0", + "web-component-tester": "*", + "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0" + } +} diff --git a/static/bower_components/paper-ripple/demo/index.html b/static/bower_components/paper-ripple/demo/index.html new file mode 100644 index 0000000..365eb3e --- /dev/null +++ b/static/bower_components/paper-ripple/demo/index.html @@ -0,0 +1,413 @@ + + + + + paper-ripple demo + + + + + + + + + + + + + + + + + +
    + +
    +
    SUBMIT
    + +
    + +
    +
    CANCEL
    + +
    + +
    +
    COMPOSE
    + +
    + +
    +
    OK
    + +
    + +
    + +
    + +
    +
    +1
    + +
    + +
    +
    +1
    + +
    + +
    +
    +1
    + +
    + +
    + +
    + +
    + + +
    + +
    + + +
    + +
    + + +
    + +
    + + +
    + +
    + +
    + +
    + + +
    + +
    + + +
    + +
    + + +
    + +
    + +
    + + + + + +
    + +
    + +
    + +
    +
    Permission

    +
    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam.
    +
    + +
    +
    ACCEPT
    + +
    + +
    +
    DECLINE
    + +
    + +
    + +
    + +
    + +
    + + + +
    + +
    + + + + diff --git a/static/bower_components/paper-ripple/hero.svg b/static/bower_components/paper-ripple/hero.svg new file mode 100644 index 0000000..96f0b4c --- /dev/null +++ b/static/bower_components/paper-ripple/hero.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/bower_components/paper-ripple/index.html b/static/bower_components/paper-ripple/index.html new file mode 100644 index 0000000..3c371fa --- /dev/null +++ b/static/bower_components/paper-ripple/index.html @@ -0,0 +1,27 @@ + + + + + + paper-ripple + + + + + + + + + + + + + diff --git a/static/bower_components/paper-ripple/paper-ripple.html b/static/bower_components/paper-ripple/paper-ripple.html new file mode 100644 index 0000000..08d3da1 --- /dev/null +++ b/static/bower_components/paper-ripple/paper-ripple.html @@ -0,0 +1,716 @@ + + + + + + + + + + + + + + + diff --git a/static/bower_components/paper-ripple/test/index.html b/static/bower_components/paper-ripple/test/index.html new file mode 100644 index 0000000..48197c0 --- /dev/null +++ b/static/bower_components/paper-ripple/test/index.html @@ -0,0 +1,25 @@ + + + + + + + Tests + + + + + + diff --git a/static/bower_components/paper-ripple/test/paper-ripple.html b/static/bower_components/paper-ripple/test/paper-ripple.html new file mode 100644 index 0000000..8123206 --- /dev/null +++ b/static/bower_components/paper-ripple/test/paper-ripple.html @@ -0,0 +1,166 @@ + + + + + + + paper-ripple + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/bower_components/paper-scroll-header-panel/.bower.json b/static/bower_components/paper-scroll-header-panel/.bower.json new file mode 100644 index 0000000..422d641 --- /dev/null +++ b/static/bower_components/paper-scroll-header-panel/.bower.json @@ -0,0 +1,48 @@ +{ + "name": "paper-scroll-header-panel", + "description": "A header bar with scrolling behavior", + "version": "1.0.4", + "license": "http://polymer.github.io/LICENSE.txt", + "private": true, + "authors": "The Polymer Authors", + "keywords": [ + "web-components", + "polymer", + "layout", + "responsive" + ], + "main": [ + "paper-scroll-header-panel.html" + ], + "repository": { + "type": "git", + "url": "git://github.com/PolymerElements/paper-scroll-header-panel.git" + }, + "dependencies": { + "polymer": "Polymer/polymer#^1.0.0", + "paper-toolbar": "PolymerElements/paper-toolbar#^1.0.0", + "iron-resizable-behavior": "PolymerElements/iron-resizable-behavior#^1.0.0" + }, + "devDependencies": { + "paper-styles": "PolymerElements/paper-styles#^1.0.0", + "iron-flex-layout": "PolymerElements/iron-flex-layout#^1.0.0", + "iron-media-query": "PolymerElements/iron-media-query#^1.0.0", + "iron-icons": "PolymerElements/iron-icons#^1.0.0", + "paper-icon-button": "PolymerElements/paper-icon-button#^1.0.0", + "paper-input": "PolymerElements/paper-input#^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" + }, + "homepage": "https://github.com/PolymerElements/paper-scroll-header-panel", + "_release": "1.0.4", + "_resolution": { + "type": "version", + "tag": "v1.0.4", + "commit": "13f17709ce666adf2ab25161bc180816c53e7583" + }, + "_source": "git://github.com/PolymerElements/paper-scroll-header-panel.git", + "_target": "^1.0.0", + "_originalSource": "PolymerElements/paper-scroll-header-panel" +} \ No newline at end of file diff --git a/static/bower_components/paper-scroll-header-panel/.gitignore b/static/bower_components/paper-scroll-header-panel/.gitignore new file mode 100644 index 0000000..8d4ae25 --- /dev/null +++ b/static/bower_components/paper-scroll-header-panel/.gitignore @@ -0,0 +1 @@ +bower_components diff --git a/static/bower_components/paper-scroll-header-panel/README.md b/static/bower_components/paper-scroll-header-panel/README.md new file mode 100644 index 0000000..78f6376 --- /dev/null +++ b/static/bower_components/paper-scroll-header-panel/README.md @@ -0,0 +1,56 @@ +paper-scroll-header-panel +======================== + +`paper-scroll-header-panel` contains a header section and a content section. The header is initially on the top part of the view but it scrolls away with the rest of the scrollable content. Upon scrolling slightly up at any point, the header scrolls back into view. This saves screen space and allows users to access important controls by easily moving them back to the view. + +Important: The `paper-scroll-header-panel` will not display if its parent does not have a height. Using layout classes, you can easily make the `paper-scroll-header-panel` fill the screen + +```html + + + + Hello World! + + + +``` +or, if you would prefer to do it in CSS, just give html, body, and `paper-scroll-header-panel` a height of 100%: +```css +html, body { + height: 100%; + margin: 0; +} +paper-scroll-header-panel { + height: 100%; +} +``` +`paper-scroll-header-panel` works well with `paper-toolbar` but can use any element that represents a header by adding a `paper-header` class to it. + +```html + + Header +
    Content goes here...
    +
    +``` + +### Styling scroll-header-panel: + +To change background for toolbar when it is at its full size: + +```css +paper-scroll-header-panel { + --paper-scroll-header-panel-full-header: { + background-color: red; + }; +} +``` + +To change the background for toolbar when it is condensed: + +```css +paper-scroll-header-panel { + --paper-scroll-header-panel-condensed-header: { + background-color: #f4b400; + }; +} +``` diff --git a/static/bower_components/paper-scroll-header-panel/bower.json b/static/bower_components/paper-scroll-header-panel/bower.json new file mode 100644 index 0000000..007cc44 --- /dev/null +++ b/static/bower_components/paper-scroll-header-panel/bower.json @@ -0,0 +1,38 @@ +{ + "name": "paper-scroll-header-panel", + "description": "A header bar with scrolling behavior", + "version": "1.0.4", + "license": "http://polymer.github.io/LICENSE.txt", + "private": true, + "authors": "The Polymer Authors", + "keywords": [ + "web-components", + "polymer", + "layout", + "responsive" + ], + "main": [ + "paper-scroll-header-panel.html" + ], + "repository": { + "type": "git", + "url": "git://github.com/PolymerElements/paper-scroll-header-panel.git" + }, + "dependencies": { + "polymer": "Polymer/polymer#^1.0.0", + "paper-toolbar": "PolymerElements/paper-toolbar#^1.0.0", + "iron-resizable-behavior": "PolymerElements/iron-resizable-behavior#^1.0.0" + }, + "devDependencies": { + "paper-styles": "PolymerElements/paper-styles#^1.0.0", + "iron-flex-layout": "PolymerElements/iron-flex-layout#^1.0.0", + "iron-media-query": "PolymerElements/iron-media-query#^1.0.0", + "iron-icons": "PolymerElements/iron-icons#^1.0.0", + "paper-icon-button": "PolymerElements/paper-icon-button#^1.0.0", + "paper-input": "PolymerElements/paper-input#^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/static/bower_components/paper-scroll-header-panel/demo/demo1.html b/static/bower_components/paper-scroll-header-panel/demo/demo1.html new file mode 100644 index 0000000..b14b0e7 --- /dev/null +++ b/static/bower_components/paper-scroll-header-panel/demo/demo1.html @@ -0,0 +1,81 @@ + + + + + paper-scroll-header-panel: demo1 + + + + + + + + + + + + + + + + + + + + + + + + + +
    Title
    + + + +
    + +
    + + + +
    + +
    + + + diff --git a/static/bower_components/paper-scroll-header-panel/demo/demo2.html b/static/bower_components/paper-scroll-header-panel/demo/demo2.html new file mode 100644 index 0000000..81c9484 --- /dev/null +++ b/static/bower_components/paper-scroll-header-panel/demo/demo2.html @@ -0,0 +1,78 @@ + + + + + paper-scroll-header-panel: demo2 + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    Title
    + +
    + +
    + + + +
    + +
    + + + diff --git a/static/bower_components/paper-scroll-header-panel/demo/demo3.html b/static/bower_components/paper-scroll-header-panel/demo/demo3.html new file mode 100644 index 0000000..eb41f1b --- /dev/null +++ b/static/bower_components/paper-scroll-header-panel/demo/demo3.html @@ -0,0 +1,79 @@ + + + + + paper-scroll-header-panel: demo3 + + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + +
    + + + +
    + +
    + + + diff --git a/static/bower_components/paper-scroll-header-panel/demo/demo4.html b/static/bower_components/paper-scroll-header-panel/demo/demo4.html new file mode 100644 index 0000000..9b865d7 --- /dev/null +++ b/static/bower_components/paper-scroll-header-panel/demo/demo4.html @@ -0,0 +1,114 @@ + + + + + paper-scroll-header-panel: demo4 + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    Title
    + +
    + +
    + + + +
    + +
    + + + + + diff --git a/static/bower_components/paper-scroll-header-panel/demo/demo5.html b/static/bower_components/paper-scroll-header-panel/demo/demo5.html new file mode 100644 index 0000000..5cb2048 --- /dev/null +++ b/static/bower_components/paper-scroll-header-panel/demo/demo5.html @@ -0,0 +1,113 @@ + + + + + paper-scroll-header-panel: demo5 + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    Title
    + +
    + +
    + + + +
    + +
    + + + + + diff --git a/static/bower_components/paper-scroll-header-panel/demo/demo6.html b/static/bower_components/paper-scroll-header-panel/demo/demo6.html new file mode 100644 index 0000000..c1524ab --- /dev/null +++ b/static/bower_components/paper-scroll-header-panel/demo/demo6.html @@ -0,0 +1,117 @@ + + + + + paper-scroll-header-panel: demo6 + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    Title
    + +
    + +
    + + + +
    + +
    + + + + + diff --git a/static/bower_components/paper-scroll-header-panel/demo/demo7.html b/static/bower_components/paper-scroll-header-panel/demo/demo7.html new file mode 100644 index 0000000..4b5710b --- /dev/null +++ b/static/bower_components/paper-scroll-header-panel/demo/demo7.html @@ -0,0 +1,120 @@ + + + + + paper-scroll-header-panel: demo7 + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    Title
    + +
    + +
    + +

    Resize window to toggle between fixed header and scrolled header

    + + +
    + +
    + + + + + + + diff --git a/static/bower_components/paper-scroll-header-panel/demo/demo8.html b/static/bower_components/paper-scroll-header-panel/demo/demo8.html new file mode 100644 index 0000000..ffc24e6 --- /dev/null +++ b/static/bower_components/paper-scroll-header-panel/demo/demo8.html @@ -0,0 +1,126 @@ + + + + + paper-scroll-header-panel: demo8 + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    Lorem ipsum dolor sit amet
    +
    Iisque perfecto dissentiet cum et
    +
    + + + +
    + +
    + + + +
    + +
    + + + diff --git a/static/bower_components/paper-scroll-header-panel/demo/demo9.html b/static/bower_components/paper-scroll-header-panel/demo/demo9.html new file mode 100644 index 0000000..3c0d691 --- /dev/null +++ b/static/bower_components/paper-scroll-header-panel/demo/demo9.html @@ -0,0 +1,108 @@ + + + + + paper-scroll-header-panel: demo9 + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    +
    + +
    + + + +
    + +
    + + + diff --git a/static/bower_components/paper-scroll-header-panel/demo/images/bg2.jpg b/static/bower_components/paper-scroll-header-panel/demo/images/bg2.jpg new file mode 100644 index 0000000..9aad0a9 Binary files /dev/null and b/static/bower_components/paper-scroll-header-panel/demo/images/bg2.jpg differ diff --git a/static/bower_components/paper-scroll-header-panel/demo/images/bg3.jpg b/static/bower_components/paper-scroll-header-panel/demo/images/bg3.jpg new file mode 100644 index 0000000..5079b4e Binary files /dev/null and b/static/bower_components/paper-scroll-header-panel/demo/images/bg3.jpg differ diff --git a/static/bower_components/paper-scroll-header-panel/demo/images/bg5.jpg b/static/bower_components/paper-scroll-header-panel/demo/images/bg5.jpg new file mode 100644 index 0000000..979ef17 Binary files /dev/null and b/static/bower_components/paper-scroll-header-panel/demo/images/bg5.jpg differ diff --git a/static/bower_components/paper-scroll-header-panel/demo/images/bg6.jpg b/static/bower_components/paper-scroll-header-panel/demo/images/bg6.jpg new file mode 100644 index 0000000..1dec3f3 Binary files /dev/null and b/static/bower_components/paper-scroll-header-panel/demo/images/bg6.jpg differ diff --git a/static/bower_components/paper-scroll-header-panel/demo/images/bg9.jpg b/static/bower_components/paper-scroll-header-panel/demo/images/bg9.jpg new file mode 100644 index 0000000..c9a2e65 Binary files /dev/null and b/static/bower_components/paper-scroll-header-panel/demo/images/bg9.jpg differ diff --git a/static/bower_components/paper-scroll-header-panel/demo/index.html b/static/bower_components/paper-scroll-header-panel/demo/index.html new file mode 100644 index 0000000..f2119b4 --- /dev/null +++ b/static/bower_components/paper-scroll-header-panel/demo/index.html @@ -0,0 +1,113 @@ + + + + + paper-scroll-header-panel: demo4 + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    Title
    + +
    + +
    + + + +
    + +
    + + + + + diff --git a/static/bower_components/paper-scroll-header-panel/demo/lorem-ipsum.html b/static/bower_components/paper-scroll-header-panel/demo/lorem-ipsum.html new file mode 100644 index 0000000..ed4fb4c --- /dev/null +++ b/static/bower_components/paper-scroll-header-panel/demo/lorem-ipsum.html @@ -0,0 +1,42 @@ + + + + diff --git a/static/bower_components/paper-scroll-header-panel/demo/sample-content.html b/static/bower_components/paper-scroll-header-panel/demo/sample-content.html new file mode 100644 index 0000000..e325fe2 --- /dev/null +++ b/static/bower_components/paper-scroll-header-panel/demo/sample-content.html @@ -0,0 +1,72 @@ + + + + + + diff --git a/static/bower_components/paper-scroll-header-panel/hero.svg b/static/bower_components/paper-scroll-header-panel/hero.svg new file mode 100644 index 0000000..25710e9 --- /dev/null +++ b/static/bower_components/paper-scroll-header-panel/hero.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/bower_components/paper-scroll-header-panel/index.html b/static/bower_components/paper-scroll-header-panel/index.html new file mode 100644 index 0000000..e2e7712 --- /dev/null +++ b/static/bower_components/paper-scroll-header-panel/index.html @@ -0,0 +1,28 @@ + + + + + + + + + paper-scroll-header-panel + + + + + + + + + + + diff --git a/static/bower_components/paper-scroll-header-panel/paper-scroll-header-panel.html b/static/bower_components/paper-scroll-header-panel/paper-scroll-header-panel.html new file mode 100644 index 0000000..ba6b5cd --- /dev/null +++ b/static/bower_components/paper-scroll-header-panel/paper-scroll-header-panel.html @@ -0,0 +1,455 @@ + + + + + + + + + + + + + + diff --git a/static/bower_components/paper-scroll-header-panel/test/basic.html b/static/bower_components/paper-scroll-header-panel/test/basic.html new file mode 100644 index 0000000..9017654 --- /dev/null +++ b/static/bower_components/paper-scroll-header-panel/test/basic.html @@ -0,0 +1,112 @@ + + + + + + paper-scroll-header-panel test + + + + + + + + + + + + + + + + + + + + + diff --git a/static/bower_components/paper-scroll-header-panel/test/index.html b/static/bower_components/paper-scroll-header-panel/test/index.html new file mode 100644 index 0000000..f07aca9 --- /dev/null +++ b/static/bower_components/paper-scroll-header-panel/test/index.html @@ -0,0 +1,25 @@ + + + + + + + Tests + + + + + + diff --git a/static/bower_components/paper-styles/.bower.json b/static/bower_components/paper-styles/.bower.json new file mode 100644 index 0000000..32205aa --- /dev/null +++ b/static/bower_components/paper-styles/.bower.json @@ -0,0 +1,40 @@ +{ + "name": "paper-styles", + "version": "1.0.7", + "description": "Common (global) styles for Material Design elements.", + "authors": [ + "The Polymer Authors" + ], + "keywords": [ + "web-component", + "polymer", + "style" + ], + "repository": { + "type": "git", + "url": "git://github.com/PolymerElements/paper-styles.git" + }, + "main": "paper-styles.html", + "license": "http://polymer.github.io/LICENSE.txt", + "homepage": "https://github.com/polymerelements/paper-styles/", + "ignore": [ + "/.*" + ], + "dependencies": { + "iron-flex-layout": "PolymerElements/iron-flex-layout#^1.0.0", + "font-roboto": "PolymerElements/font-roboto#^1.0.0", + "polymer": "Polymer/polymer#^1.0.0" + }, + "devDependencies": { + "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0" + }, + "_release": "1.0.7", + "_resolution": { + "type": "version", + "tag": "v1.0.7", + "commit": "c65f5ce6b898bb756fca35cedaa53c3e8011abeb" + }, + "_source": "git://github.com/PolymerElements/paper-styles.git", + "_target": "^1.0.0", + "_originalSource": "PolymerElements/paper-styles" +} \ No newline at end of file diff --git a/static/bower_components/paper-styles/README.md b/static/bower_components/paper-styles/README.md new file mode 100644 index 0000000..82a7847 --- /dev/null +++ b/static/bower_components/paper-styles/README.md @@ -0,0 +1,3 @@ +# paper-styles + +Material design CSS styles. diff --git a/static/bower_components/paper-styles/bower.json b/static/bower_components/paper-styles/bower.json new file mode 100644 index 0000000..576dc4c --- /dev/null +++ b/static/bower_components/paper-styles/bower.json @@ -0,0 +1,31 @@ +{ + "name": "paper-styles", + "version": "1.0.7", + "description": "Common (global) styles for Material Design elements.", + "authors": [ + "The Polymer Authors" + ], + "keywords": [ + "web-component", + "polymer", + "style" + ], + "repository": { + "type": "git", + "url": "git://github.com/PolymerElements/paper-styles.git" + }, + "main": "paper-styles.html", + "license": "http://polymer.github.io/LICENSE.txt", + "homepage": "https://github.com/polymerelements/paper-styles/", + "ignore": [ + "/.*" + ], + "dependencies": { + "iron-flex-layout": "PolymerElements/iron-flex-layout#^1.0.0", + "font-roboto": "PolymerElements/font-roboto#^1.0.0", + "polymer": "Polymer/polymer#^1.0.0" + }, + "devDependencies": { + "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0" + } +} diff --git a/static/bower_components/paper-styles/classes/global.html b/static/bower_components/paper-styles/classes/global.html new file mode 100644 index 0000000..6f0d5dd --- /dev/null +++ b/static/bower_components/paper-styles/classes/global.html @@ -0,0 +1,96 @@ + + + + + diff --git a/static/bower_components/paper-styles/classes/shadow-layout.html b/static/bower_components/paper-styles/classes/shadow-layout.html new file mode 100644 index 0000000..fc69fb3 --- /dev/null +++ b/static/bower_components/paper-styles/classes/shadow-layout.html @@ -0,0 +1,302 @@ + + diff --git a/static/bower_components/paper-styles/classes/shadow.html b/static/bower_components/paper-styles/classes/shadow.html new file mode 100644 index 0000000..4c40a14 --- /dev/null +++ b/static/bower_components/paper-styles/classes/shadow.html @@ -0,0 +1,52 @@ + + + diff --git a/static/bower_components/paper-styles/classes/typography.html b/static/bower_components/paper-styles/classes/typography.html new file mode 100644 index 0000000..5514abb --- /dev/null +++ b/static/bower_components/paper-styles/classes/typography.html @@ -0,0 +1,171 @@ + + + + + + + diff --git a/static/bower_components/paper-styles/color.html b/static/bower_components/paper-styles/color.html new file mode 100644 index 0000000..f0be341 --- /dev/null +++ b/static/bower_components/paper-styles/color.html @@ -0,0 +1,333 @@ + + + + + diff --git a/static/bower_components/paper-styles/default-theme.html b/static/bower_components/paper-styles/default-theme.html new file mode 100644 index 0000000..add581c --- /dev/null +++ b/static/bower_components/paper-styles/default-theme.html @@ -0,0 +1,39 @@ + + + + + diff --git a/static/bower_components/paper-styles/demo-pages.html b/static/bower_components/paper-styles/demo-pages.html new file mode 100644 index 0000000..44f2288 --- /dev/null +++ b/static/bower_components/paper-styles/demo-pages.html @@ -0,0 +1,72 @@ + + + + + + + + + + + diff --git a/static/bower_components/paper-styles/demo.css b/static/bower_components/paper-styles/demo.css new file mode 100644 index 0000000..efd8b47 --- /dev/null +++ b/static/bower_components/paper-styles/demo.css @@ -0,0 +1,25 @@ +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt +The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt +The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt +Code distributed by Google as part of the polymer project is also +subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt + +*/ +body { + font-family: 'Roboto', 'Noto', sans-serif; + font-size: 14px; + margin: 0; + padding: 24px; +} + +section { + padding: 20px 0; +} + +section > div { + padding: 14px; + font-size: 16px; +} diff --git a/static/bower_components/paper-styles/demo/index.html b/static/bower_components/paper-styles/demo/index.html new file mode 100644 index 0000000..42f449f --- /dev/null +++ b/static/bower_components/paper-styles/demo/index.html @@ -0,0 +1,358 @@ + + + + + + + + + + + paper-styles demo + + + + + + + + + + + + + + + + + + + + + + + +
    +

    demo-pages.html

    + +

    Horizontal sections

    +
    +
    +

    Column 1

    +
    +
    Oxygen
    +
    Carbon
    +
    Hydrogen
    +
    Nitrogen
    +
    Calcium
    +
    +
    + +
    +

    Column 2

    +
    +
    Oxygen
    +
    Carbon
    +
    Hydrogen
    +
    Nitrogen
    +
    Calcium
    +
    +
    + +
    +

    Column 3

    +
    +
    Oxygen
    +
    Carbon
    +
    Hydrogen
    +
    Nitrogen
    +
    Calcium
    +
    +
    +
    + +

    Vertical sections

    +
    +
    +

    Section 1

    +
    +
    Oxygen
    +
    Carbon
    +
    Hydrogen
    +
    Nitrogen
    +
    Calcium
    +
    +
    +
    + +
    +

    Section 2 (centered)

    +
    +
    Oxygen
    +
    Carbon
    +
    Hydrogen
    +
    Nitrogen
    +
    Calcium
    +
    +
    + +
    + + + diff --git a/static/bower_components/paper-styles/paper-styles-classes.html b/static/bower_components/paper-styles/paper-styles-classes.html new file mode 100644 index 0000000..ae315a5 --- /dev/null +++ b/static/bower_components/paper-styles/paper-styles-classes.html @@ -0,0 +1,14 @@ + + + + + + diff --git a/static/bower_components/paper-styles/paper-styles.html b/static/bower_components/paper-styles/paper-styles.html new file mode 100644 index 0000000..1e4fce5 --- /dev/null +++ b/static/bower_components/paper-styles/paper-styles.html @@ -0,0 +1,17 @@ + + + + + + + + + diff --git a/static/bower_components/paper-styles/shadow.html b/static/bower_components/paper-styles/shadow.html new file mode 100644 index 0000000..dfb7e8a --- /dev/null +++ b/static/bower_components/paper-styles/shadow.html @@ -0,0 +1,65 @@ + + + + + diff --git a/static/bower_components/paper-styles/typography.html b/static/bower_components/paper-styles/typography.html new file mode 100644 index 0000000..15ae115 --- /dev/null +++ b/static/bower_components/paper-styles/typography.html @@ -0,0 +1,238 @@ + + + + + + diff --git a/static/bower_components/paper-toolbar/.bower.json b/static/bower_components/paper-toolbar/.bower.json new file mode 100644 index 0000000..de532ef --- /dev/null +++ b/static/bower_components/paper-toolbar/.bower.json @@ -0,0 +1,45 @@ +{ + "name": "paper-toolbar", + "version": "1.0.2", + "license": "http://polymer.github.io/LICENSE.txt", + "description": "A material design toolbar that is easily customizable", + "private": true, + "main": [ + "paper-toolbar.html" + ], + "authors": [ + "The Polymer Authors" + ], + "keywords": [ + "web-components", + "polymer", + "toolbar", + "layout" + ], + "repository": { + "type": "git", + "url": "git://github.com/PolymerElements/paper-toolbar.git" + }, + "dependencies": { + "paper-styles": "PolymerElements/paper-styles#^1.0.0", + "polymer": "Polymer/polymer#^1.0.0" + }, + "devDependencies": { + "iron-icons": "PolymerElements/iron-icons#^1.0.0", + "paper-icon-button": "PolymerElements/paper-icon-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" + }, + "homepage": "https://github.com/PolymerElements/paper-toolbar", + "_release": "1.0.2", + "_resolution": { + "type": "version", + "tag": "v1.0.2", + "commit": "402eb11da736a5ae19713748bfa04cd96f3f7a0c" + }, + "_source": "git://github.com/PolymerElements/paper-toolbar.git", + "_target": "^1.0.0", + "_originalSource": "PolymerElements/paper-toolbar" +} \ No newline at end of file diff --git a/static/bower_components/paper-toolbar/.gitignore b/static/bower_components/paper-toolbar/.gitignore new file mode 100644 index 0000000..fbe05fc --- /dev/null +++ b/static/bower_components/paper-toolbar/.gitignore @@ -0,0 +1 @@ +bower_components/ diff --git a/static/bower_components/paper-toolbar/README.md b/static/bower_components/paper-toolbar/README.md new file mode 100644 index 0000000..4356276 --- /dev/null +++ b/static/bower_components/paper-toolbar/README.md @@ -0,0 +1,51 @@ +paper-toolbar +============ + +`paper-toolbar` is a horizontal bar containing items that can be used for +label, navigation, search and actions. The items place inside the +`paper-toolbar` are projected into a `class="horizontal center layout"` container inside of +`paper-toolbar`'s Shadow DOM. You can use flex attributes to control the items' +sizing. + +Example: + +```html + + +
    Title
    + +
    +``` + +`paper-toolbar` has a standard height, but can made be taller by setting `tall` +class on the `paper-toolbar`. This will make the toolbar 3x the normal height. + +```html + + + +``` + +Apply `medium-tall` class to make the toolbar medium tall. This will make the +toolbar 2x the normal height. + +```html + + + +``` + +When `tall`, items can pin to either the top (default), middle or bottom. Use +`middle` class for middle content and `bottom` class for bottom content. + +```html + + +
    Middle Title
    +
    Bottom Title
    +
    +``` + +For `medium-tall` toolbar, the middle and bottom contents overlap and are +pinned to the bottom. But `middleJustify` and `bottomJustify` attributes are +still honored separately. diff --git a/static/bower_components/paper-toolbar/bower.json b/static/bower_components/paper-toolbar/bower.json new file mode 100644 index 0000000..26a02b6 --- /dev/null +++ b/static/bower_components/paper-toolbar/bower.json @@ -0,0 +1,35 @@ +{ + "name": "paper-toolbar", + "version": "1.0.2", + "license": "http://polymer.github.io/LICENSE.txt", + "description": "A material design toolbar that is easily customizable", + "private": true, + "main": [ + "paper-toolbar.html" + ], + "authors": [ + "The Polymer Authors" + ], + "keywords": [ + "web-components", + "polymer", + "toolbar", + "layout" + ], + "repository": { + "type": "git", + "url": "git://github.com/PolymerElements/paper-toolbar.git" + }, + "dependencies": { + "paper-styles": "PolymerElements/paper-styles#^1.0.0", + "polymer": "Polymer/polymer#^1.0.0" + }, + "devDependencies": { + "iron-icons": "PolymerElements/iron-icons#^1.0.0", + "paper-icon-button": "PolymerElements/paper-icon-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/static/bower_components/paper-toolbar/demo/index.html b/static/bower_components/paper-toolbar/demo/index.html new file mode 100644 index 0000000..104bb14 --- /dev/null +++ b/static/bower_components/paper-toolbar/demo/index.html @@ -0,0 +1,81 @@ + + + + + + + + paper-toolbar demo + + + + + + + + + + + + + + + + Toolbar + + + + + + + + Toolbar: tall + + + + + + + + Toolbar: tall with elements pin to the bottom + + + + + + + + + + + + Toolbar: medium-tall with label aligns to the bottom + + + + +
    + + + +
    label aligns to the middle
    +
    some stuffs align to the bottom
    +
    + + + +
    + + + +
    element (e.g. progress) fits at the bottom of the toolbar
    +
    +
    + + + diff --git a/static/bower_components/paper-toolbar/index.html b/static/bower_components/paper-toolbar/index.html new file mode 100644 index 0000000..6533b73 --- /dev/null +++ b/static/bower_components/paper-toolbar/index.html @@ -0,0 +1,38 @@ + + + + + + + + + paper-toolbar + + + + + + + + + + + + + + + diff --git a/static/bower_components/paper-toolbar/paper-toolbar.html b/static/bower_components/paper-toolbar/paper-toolbar.html new file mode 100644 index 0000000..153305e --- /dev/null +++ b/static/bower_components/paper-toolbar/paper-toolbar.html @@ -0,0 +1,368 @@ + + + + + + + + + + + + + + + + diff --git a/static/bower_components/paper-toolbar/test/index.html b/static/bower_components/paper-toolbar/test/index.html new file mode 100644 index 0000000..a1bd42a --- /dev/null +++ b/static/bower_components/paper-toolbar/test/index.html @@ -0,0 +1,24 @@ + + + + + + + paper-toolbar tests + + + + + + diff --git a/static/bower_components/paper-toolbar/test/paper-toolbar.html b/static/bower_components/paper-toolbar/test/paper-toolbar.html new file mode 100644 index 0000000..a5998c1 --- /dev/null +++ b/static/bower_components/paper-toolbar/test/paper-toolbar.html @@ -0,0 +1,147 @@ + + + + + + paper-toolbar basic tests + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/bower_components/polymer/.bower.json b/static/bower_components/polymer/.bower.json new file mode 100644 index 0000000..d0373ee --- /dev/null +++ b/static/bower_components/polymer/.bower.json @@ -0,0 +1,36 @@ +{ + "name": "polymer", + "version": "1.0.5", + "main": [ + "polymer.html" + ], + "license": "http://polymer.github.io/LICENSE.txt", + "ignore": [ + "/.*", + "/test/" + ], + "authors": [ + "The Polymer Authors (http://polymer.github.io/AUTHORS.txt)" + ], + "repository": { + "type": "git", + "url": "https://github.com/Polymer/polymer.git" + }, + "dependencies": { + "webcomponentsjs": "^0.7.2" + }, + "devDependencies": { + "web-component-tester": "*" + }, + "private": true, + "homepage": "https://github.com/Polymer/polymer", + "_release": "1.0.5", + "_resolution": { + "type": "version", + "tag": "v1.0.5", + "commit": "b93f076d7b2606733d7166f311b77550deb98a39" + }, + "_source": "git://github.com/Polymer/polymer.git", + "_target": "^1.0.0", + "_originalSource": "Polymer/polymer" +} \ No newline at end of file diff --git a/static/bower_components/polymer/LICENSE.txt b/static/bower_components/polymer/LICENSE.txt new file mode 100644 index 0000000..95987ba --- /dev/null +++ b/static/bower_components/polymer/LICENSE.txt @@ -0,0 +1,27 @@ +// Copyright (c) 2014 The Polymer Authors. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/static/bower_components/polymer/bower.json b/static/bower_components/polymer/bower.json new file mode 100644 index 0000000..a8799d3 --- /dev/null +++ b/static/bower_components/polymer/bower.json @@ -0,0 +1,26 @@ +{ + "name": "polymer", + "version": "1.0.5", + "main": [ + "polymer.html" + ], + "license": "http://polymer.github.io/LICENSE.txt", + "ignore": [ + "/.*", + "/test/" + ], + "authors": [ + "The Polymer Authors (http://polymer.github.io/AUTHORS.txt)" + ], + "repository": { + "type": "git", + "url": "https://github.com/Polymer/polymer.git" + }, + "dependencies": { + "webcomponentsjs": "^0.7.2" + }, + "devDependencies": { + "web-component-tester": "*" + }, + "private": true +} diff --git a/static/bower_components/polymer/build.log b/static/bower_components/polymer/build.log new file mode 100644 index 0000000..4e4c0d8 --- /dev/null +++ b/static/bower_components/polymer/build.log @@ -0,0 +1,26 @@ +BUILD LOG +--------- +Build Time: 2015-06-25T16:47:16-0700 + +NODEJS INFORMATION +================== +nodejs: v0.12.2 +del: 1.2.0 +gulp: 3.9.0 +gulp-audit: 1.0.0 +gulp-rename: 1.2.2 +gulp-replace: 0.5.3 +gulp-vulcanize: 6.0.1 +polyclean: 1.2.0 +run-sequence: 1.1.1 +lazypipe: 0.2.4 + +REPO REVISIONS +============== +polymer: e859b532a7fb5b10ae1311c22988b76cc6cbc04a + +BUILD HASHES +============ +polymer-mini.html: 93f4b283ba95fd687562b965bf7651eab7a66a1f +polymer-micro.html: db73818583996fe27b9f1119f0e4ef46ccadc859 +polymer.html: 9b0cd22e821422a8afe809ca5715612e682e5622 \ No newline at end of file diff --git a/static/bower_components/polymer/polymer-micro.html b/static/bower_components/polymer/polymer-micro.html new file mode 100644 index 0000000..4bf4234 --- /dev/null +++ b/static/bower_components/polymer/polymer-micro.html @@ -0,0 +1,529 @@ + + diff --git a/static/bower_components/polymer/polymer-mini.html b/static/bower_components/polymer/polymer-mini.html new file mode 100644 index 0000000..da6e750 --- /dev/null +++ b/static/bower_components/polymer/polymer-mini.html @@ -0,0 +1,1396 @@ + + + + diff --git a/static/bower_components/polymer/polymer.html b/static/bower_components/polymer/polymer.html new file mode 100644 index 0000000..9d7e47c --- /dev/null +++ b/static/bower_components/polymer/polymer.html @@ -0,0 +1,3985 @@ + + + diff --git a/static/bower_components/webcomponentsjs/.bower.json b/static/bower_components/webcomponentsjs/.bower.json new file mode 100644 index 0000000..161ba54 --- /dev/null +++ b/static/bower_components/webcomponentsjs/.bower.json @@ -0,0 +1,27 @@ +{ + "name": "webcomponentsjs", + "main": "webcomponents.js", + "version": "0.7.5", + "homepage": "http://webcomponents.org", + "authors": [ + "The Polymer Authors" + ], + "repository": { + "type": "git", + "url": "https://github.com/webcomponents/webcomponentsjs.git" + }, + "keywords": [ + "webcomponents" + ], + "license": "BSD", + "ignore": [], + "_release": "0.7.5", + "_resolution": { + "type": "version", + "tag": "v0.7.5", + "commit": "6e2fd746392a9fbec95711872e21fa22bff22fae" + }, + "_source": "git://github.com/Polymer/webcomponentsjs.git", + "_target": "^0.7.2", + "_originalSource": "webcomponentsjs" +} \ No newline at end of file diff --git a/static/bower_components/webcomponentsjs/CustomElements.js b/static/bower_components/webcomponentsjs/CustomElements.js new file mode 100644 index 0000000..ae4af3b --- /dev/null +++ b/static/bower_components/webcomponentsjs/CustomElements.js @@ -0,0 +1,963 @@ +/** + * @license + * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt + */ +// @version 0.7.5 +if (typeof WeakMap === "undefined") { + (function() { + var defineProperty = Object.defineProperty; + var counter = Date.now() % 1e9; + var WeakMap = function() { + this.name = "__st" + (Math.random() * 1e9 >>> 0) + (counter++ + "__"); + }; + WeakMap.prototype = { + set: function(key, value) { + var entry = key[this.name]; + if (entry && entry[0] === key) entry[1] = value; else defineProperty(key, this.name, { + value: [ key, value ], + writable: true + }); + return this; + }, + get: function(key) { + var entry; + return (entry = key[this.name]) && entry[0] === key ? entry[1] : undefined; + }, + "delete": function(key) { + var entry = key[this.name]; + if (!entry || entry[0] !== key) return false; + entry[0] = entry[1] = undefined; + return true; + }, + has: function(key) { + var entry = key[this.name]; + if (!entry) return false; + return entry[0] === key; + } + }; + window.WeakMap = WeakMap; + })(); +} + +(function(global) { + var registrationsTable = new WeakMap(); + var setImmediate; + if (/Trident|Edge/.test(navigator.userAgent)) { + setImmediate = setTimeout; + } else if (window.setImmediate) { + setImmediate = window.setImmediate; + } else { + var setImmediateQueue = []; + var sentinel = String(Math.random()); + window.addEventListener("message", function(e) { + if (e.data === sentinel) { + var queue = setImmediateQueue; + setImmediateQueue = []; + queue.forEach(function(func) { + func(); + }); + } + }); + setImmediate = function(func) { + setImmediateQueue.push(func); + window.postMessage(sentinel, "*"); + }; + } + var isScheduled = false; + var scheduledObservers = []; + function scheduleCallback(observer) { + scheduledObservers.push(observer); + if (!isScheduled) { + isScheduled = true; + setImmediate(dispatchCallbacks); + } + } + function wrapIfNeeded(node) { + return window.ShadowDOMPolyfill && window.ShadowDOMPolyfill.wrapIfNeeded(node) || node; + } + function dispatchCallbacks() { + isScheduled = false; + var observers = scheduledObservers; + scheduledObservers = []; + observers.sort(function(o1, o2) { + return o1.uid_ - o2.uid_; + }); + var anyNonEmpty = false; + observers.forEach(function(observer) { + var queue = observer.takeRecords(); + removeTransientObserversFor(observer); + if (queue.length) { + observer.callback_(queue, observer); + anyNonEmpty = true; + } + }); + if (anyNonEmpty) dispatchCallbacks(); + } + function removeTransientObserversFor(observer) { + observer.nodes_.forEach(function(node) { + var registrations = registrationsTable.get(node); + if (!registrations) return; + registrations.forEach(function(registration) { + if (registration.observer === observer) registration.removeTransientObservers(); + }); + }); + } + function forEachAncestorAndObserverEnqueueRecord(target, callback) { + for (var node = target; node; node = node.parentNode) { + var registrations = registrationsTable.get(node); + if (registrations) { + for (var j = 0; j < registrations.length; j++) { + var registration = registrations[j]; + var options = registration.options; + if (node !== target && !options.subtree) continue; + var record = callback(options); + if (record) registration.enqueue(record); + } + } + } + } + var uidCounter = 0; + function JsMutationObserver(callback) { + this.callback_ = callback; + this.nodes_ = []; + this.records_ = []; + this.uid_ = ++uidCounter; + } + JsMutationObserver.prototype = { + observe: function(target, options) { + target = wrapIfNeeded(target); + if (!options.childList && !options.attributes && !options.characterData || options.attributeOldValue && !options.attributes || options.attributeFilter && options.attributeFilter.length && !options.attributes || options.characterDataOldValue && !options.characterData) { + throw new SyntaxError(); + } + var registrations = registrationsTable.get(target); + if (!registrations) registrationsTable.set(target, registrations = []); + var registration; + for (var i = 0; i < registrations.length; i++) { + if (registrations[i].observer === this) { + registration = registrations[i]; + registration.removeListeners(); + registration.options = options; + break; + } + } + if (!registration) { + registration = new Registration(this, target, options); + registrations.push(registration); + this.nodes_.push(target); + } + registration.addListeners(); + }, + disconnect: function() { + this.nodes_.forEach(function(node) { + var registrations = registrationsTable.get(node); + for (var i = 0; i < registrations.length; i++) { + var registration = registrations[i]; + if (registration.observer === this) { + registration.removeListeners(); + registrations.splice(i, 1); + break; + } + } + }, this); + this.records_ = []; + }, + takeRecords: function() { + var copyOfRecords = this.records_; + this.records_ = []; + return copyOfRecords; + } + }; + function MutationRecord(type, target) { + this.type = type; + this.target = target; + this.addedNodes = []; + this.removedNodes = []; + this.previousSibling = null; + this.nextSibling = null; + this.attributeName = null; + this.attributeNamespace = null; + this.oldValue = null; + } + function copyMutationRecord(original) { + var record = new MutationRecord(original.type, original.target); + record.addedNodes = original.addedNodes.slice(); + record.removedNodes = original.removedNodes.slice(); + record.previousSibling = original.previousSibling; + record.nextSibling = original.nextSibling; + record.attributeName = original.attributeName; + record.attributeNamespace = original.attributeNamespace; + record.oldValue = original.oldValue; + return record; + } + var currentRecord, recordWithOldValue; + function getRecord(type, target) { + return currentRecord = new MutationRecord(type, target); + } + function getRecordWithOldValue(oldValue) { + if (recordWithOldValue) return recordWithOldValue; + recordWithOldValue = copyMutationRecord(currentRecord); + recordWithOldValue.oldValue = oldValue; + return recordWithOldValue; + } + function clearRecords() { + currentRecord = recordWithOldValue = undefined; + } + function recordRepresentsCurrentMutation(record) { + return record === recordWithOldValue || record === currentRecord; + } + function selectRecord(lastRecord, newRecord) { + if (lastRecord === newRecord) return lastRecord; + if (recordWithOldValue && recordRepresentsCurrentMutation(lastRecord)) return recordWithOldValue; + return null; + } + function Registration(observer, target, options) { + this.observer = observer; + this.target = target; + this.options = options; + this.transientObservedNodes = []; + } + Registration.prototype = { + enqueue: function(record) { + var records = this.observer.records_; + var length = records.length; + if (records.length > 0) { + var lastRecord = records[length - 1]; + var recordToReplaceLast = selectRecord(lastRecord, record); + if (recordToReplaceLast) { + records[length - 1] = recordToReplaceLast; + return; + } + } else { + scheduleCallback(this.observer); + } + records[length] = record; + }, + addListeners: function() { + this.addListeners_(this.target); + }, + addListeners_: function(node) { + var options = this.options; + if (options.attributes) node.addEventListener("DOMAttrModified", this, true); + if (options.characterData) node.addEventListener("DOMCharacterDataModified", this, true); + if (options.childList) node.addEventListener("DOMNodeInserted", this, true); + if (options.childList || options.subtree) node.addEventListener("DOMNodeRemoved", this, true); + }, + removeListeners: function() { + this.removeListeners_(this.target); + }, + removeListeners_: function(node) { + var options = this.options; + if (options.attributes) node.removeEventListener("DOMAttrModified", this, true); + if (options.characterData) node.removeEventListener("DOMCharacterDataModified", this, true); + if (options.childList) node.removeEventListener("DOMNodeInserted", this, true); + if (options.childList || options.subtree) node.removeEventListener("DOMNodeRemoved", this, true); + }, + addTransientObserver: function(node) { + if (node === this.target) return; + this.addListeners_(node); + this.transientObservedNodes.push(node); + var registrations = registrationsTable.get(node); + if (!registrations) registrationsTable.set(node, registrations = []); + registrations.push(this); + }, + removeTransientObservers: function() { + var transientObservedNodes = this.transientObservedNodes; + this.transientObservedNodes = []; + transientObservedNodes.forEach(function(node) { + this.removeListeners_(node); + var registrations = registrationsTable.get(node); + for (var i = 0; i < registrations.length; i++) { + if (registrations[i] === this) { + registrations.splice(i, 1); + break; + } + } + }, this); + }, + handleEvent: function(e) { + e.stopImmediatePropagation(); + switch (e.type) { + case "DOMAttrModified": + var name = e.attrName; + var namespace = e.relatedNode.namespaceURI; + var target = e.target; + var record = new getRecord("attributes", target); + record.attributeName = name; + record.attributeNamespace = namespace; + var oldValue = e.attrChange === MutationEvent.ADDITION ? null : e.prevValue; + forEachAncestorAndObserverEnqueueRecord(target, function(options) { + if (!options.attributes) return; + if (options.attributeFilter && options.attributeFilter.length && options.attributeFilter.indexOf(name) === -1 && options.attributeFilter.indexOf(namespace) === -1) { + return; + } + if (options.attributeOldValue) return getRecordWithOldValue(oldValue); + return record; + }); + break; + + case "DOMCharacterDataModified": + var target = e.target; + var record = getRecord("characterData", target); + var oldValue = e.prevValue; + forEachAncestorAndObserverEnqueueRecord(target, function(options) { + if (!options.characterData) return; + if (options.characterDataOldValue) return getRecordWithOldValue(oldValue); + return record; + }); + break; + + case "DOMNodeRemoved": + this.addTransientObserver(e.target); + + case "DOMNodeInserted": + var changedNode = e.target; + var addedNodes, removedNodes; + if (e.type === "DOMNodeInserted") { + addedNodes = [ changedNode ]; + removedNodes = []; + } else { + addedNodes = []; + removedNodes = [ changedNode ]; + } + var previousSibling = changedNode.previousSibling; + var nextSibling = changedNode.nextSibling; + var record = getRecord("childList", e.target.parentNode); + record.addedNodes = addedNodes; + record.removedNodes = removedNodes; + record.previousSibling = previousSibling; + record.nextSibling = nextSibling; + forEachAncestorAndObserverEnqueueRecord(e.relatedNode, function(options) { + if (!options.childList) return; + return record; + }); + } + clearRecords(); + } + }; + global.JsMutationObserver = JsMutationObserver; + if (!global.MutationObserver) global.MutationObserver = JsMutationObserver; +})(this); + +window.CustomElements = window.CustomElements || { + flags: {} +}; + +(function(scope) { + var flags = scope.flags; + var modules = []; + var addModule = function(module) { + modules.push(module); + }; + var initializeModules = function() { + modules.forEach(function(module) { + module(scope); + }); + }; + scope.addModule = addModule; + scope.initializeModules = initializeModules; + scope.hasNative = Boolean(document.registerElement); + scope.useNative = !flags.register && scope.hasNative && !window.ShadowDOMPolyfill && (!window.HTMLImports || window.HTMLImports.useNative); +})(window.CustomElements); + +window.CustomElements.addModule(function(scope) { + var IMPORT_LINK_TYPE = window.HTMLImports ? window.HTMLImports.IMPORT_LINK_TYPE : "none"; + function forSubtree(node, cb) { + findAllElements(node, function(e) { + if (cb(e)) { + return true; + } + forRoots(e, cb); + }); + forRoots(node, cb); + } + function findAllElements(node, find, data) { + var e = node.firstElementChild; + if (!e) { + e = node.firstChild; + while (e && e.nodeType !== Node.ELEMENT_NODE) { + e = e.nextSibling; + } + } + while (e) { + if (find(e, data) !== true) { + findAllElements(e, find, data); + } + e = e.nextElementSibling; + } + return null; + } + function forRoots(node, cb) { + var root = node.shadowRoot; + while (root) { + forSubtree(root, cb); + root = root.olderShadowRoot; + } + } + function forDocumentTree(doc, cb) { + _forDocumentTree(doc, cb, []); + } + function _forDocumentTree(doc, cb, processingDocuments) { + doc = window.wrap(doc); + if (processingDocuments.indexOf(doc) >= 0) { + return; + } + processingDocuments.push(doc); + var imports = doc.querySelectorAll("link[rel=" + IMPORT_LINK_TYPE + "]"); + for (var i = 0, l = imports.length, n; i < l && (n = imports[i]); i++) { + if (n.import) { + _forDocumentTree(n.import, cb, processingDocuments); + } + } + cb(doc); + } + scope.forDocumentTree = forDocumentTree; + scope.forSubtree = forSubtree; +}); + +window.CustomElements.addModule(function(scope) { + var flags = scope.flags; + var forSubtree = scope.forSubtree; + var forDocumentTree = scope.forDocumentTree; + function addedNode(node) { + return added(node) || addedSubtree(node); + } + function added(node) { + if (scope.upgrade(node)) { + return true; + } + attached(node); + } + function addedSubtree(node) { + forSubtree(node, function(e) { + if (added(e)) { + return true; + } + }); + } + function attachedNode(node) { + attached(node); + if (inDocument(node)) { + forSubtree(node, function(e) { + attached(e); + }); + } + } + var hasPolyfillMutations = !window.MutationObserver || window.MutationObserver === window.JsMutationObserver; + scope.hasPolyfillMutations = hasPolyfillMutations; + var isPendingMutations = false; + var pendingMutations = []; + function deferMutation(fn) { + pendingMutations.push(fn); + if (!isPendingMutations) { + isPendingMutations = true; + setTimeout(takeMutations); + } + } + function takeMutations() { + isPendingMutations = false; + var $p = pendingMutations; + for (var i = 0, l = $p.length, p; i < l && (p = $p[i]); i++) { + p(); + } + pendingMutations = []; + } + function attached(element) { + if (hasPolyfillMutations) { + deferMutation(function() { + _attached(element); + }); + } else { + _attached(element); + } + } + function _attached(element) { + if (element.__upgraded__ && (element.attachedCallback || element.detachedCallback)) { + if (!element.__attached && inDocument(element)) { + element.__attached = true; + if (element.attachedCallback) { + element.attachedCallback(); + } + } + } + } + function detachedNode(node) { + detached(node); + forSubtree(node, function(e) { + detached(e); + }); + } + function detached(element) { + if (hasPolyfillMutations) { + deferMutation(function() { + _detached(element); + }); + } else { + _detached(element); + } + } + function _detached(element) { + if (element.__upgraded__ && (element.attachedCallback || element.detachedCallback)) { + if (element.__attached && !inDocument(element)) { + element.__attached = false; + if (element.detachedCallback) { + element.detachedCallback(); + } + } + } + } + function inDocument(element) { + var p = element; + var doc = wrap(document); + while (p) { + if (p == doc) { + return true; + } + p = p.parentNode || p.nodeType === Node.DOCUMENT_FRAGMENT_NODE && p.host; + } + } + function watchShadow(node) { + if (node.shadowRoot && !node.shadowRoot.__watched) { + flags.dom && console.log("watching shadow-root for: ", node.localName); + var root = node.shadowRoot; + while (root) { + observe(root); + root = root.olderShadowRoot; + } + } + } + function handler(mutations) { + if (flags.dom) { + var mx = mutations[0]; + if (mx && mx.type === "childList" && mx.addedNodes) { + if (mx.addedNodes) { + var d = mx.addedNodes[0]; + while (d && d !== document && !d.host) { + d = d.parentNode; + } + var u = d && (d.URL || d._URL || d.host && d.host.localName) || ""; + u = u.split("/?").shift().split("/").pop(); + } + } + console.group("mutations (%d) [%s]", mutations.length, u || ""); + } + mutations.forEach(function(mx) { + if (mx.type === "childList") { + forEach(mx.addedNodes, function(n) { + if (!n.localName) { + return; + } + addedNode(n); + }); + forEach(mx.removedNodes, function(n) { + if (!n.localName) { + return; + } + detachedNode(n); + }); + } + }); + flags.dom && console.groupEnd(); + } + function takeRecords(node) { + node = window.wrap(node); + if (!node) { + node = window.wrap(document); + } + while (node.parentNode) { + node = node.parentNode; + } + var observer = node.__observer; + if (observer) { + handler(observer.takeRecords()); + takeMutations(); + } + } + var forEach = Array.prototype.forEach.call.bind(Array.prototype.forEach); + function observe(inRoot) { + if (inRoot.__observer) { + return; + } + var observer = new MutationObserver(handler); + observer.observe(inRoot, { + childList: true, + subtree: true + }); + inRoot.__observer = observer; + } + function upgradeDocument(doc) { + doc = window.wrap(doc); + flags.dom && console.group("upgradeDocument: ", doc.baseURI.split("/").pop()); + addedNode(doc); + observe(doc); + flags.dom && console.groupEnd(); + } + function upgradeDocumentTree(doc) { + forDocumentTree(doc, upgradeDocument); + } + var originalCreateShadowRoot = Element.prototype.createShadowRoot; + if (originalCreateShadowRoot) { + Element.prototype.createShadowRoot = function() { + var root = originalCreateShadowRoot.call(this); + window.CustomElements.watchShadow(this); + return root; + }; + } + scope.watchShadow = watchShadow; + scope.upgradeDocumentTree = upgradeDocumentTree; + scope.upgradeSubtree = addedSubtree; + scope.upgradeAll = addedNode; + scope.attachedNode = attachedNode; + scope.takeRecords = takeRecords; +}); + +window.CustomElements.addModule(function(scope) { + var flags = scope.flags; + function upgrade(node) { + if (!node.__upgraded__ && node.nodeType === Node.ELEMENT_NODE) { + var is = node.getAttribute("is"); + var definition = scope.getRegisteredDefinition(is || node.localName); + if (definition) { + if (is && definition.tag == node.localName) { + return upgradeWithDefinition(node, definition); + } else if (!is && !definition.extends) { + return upgradeWithDefinition(node, definition); + } + } + } + } + function upgradeWithDefinition(element, definition) { + flags.upgrade && console.group("upgrade:", element.localName); + if (definition.is) { + element.setAttribute("is", definition.is); + } + implementPrototype(element, definition); + element.__upgraded__ = true; + created(element); + scope.attachedNode(element); + scope.upgradeSubtree(element); + flags.upgrade && console.groupEnd(); + return element; + } + function implementPrototype(element, definition) { + if (Object.__proto__) { + element.__proto__ = definition.prototype; + } else { + customMixin(element, definition.prototype, definition.native); + element.__proto__ = definition.prototype; + } + } + function customMixin(inTarget, inSrc, inNative) { + var used = {}; + var p = inSrc; + while (p !== inNative && p !== HTMLElement.prototype) { + var keys = Object.getOwnPropertyNames(p); + for (var i = 0, k; k = keys[i]; i++) { + if (!used[k]) { + Object.defineProperty(inTarget, k, Object.getOwnPropertyDescriptor(p, k)); + used[k] = 1; + } + } + p = Object.getPrototypeOf(p); + } + } + function created(element) { + if (element.createdCallback) { + element.createdCallback(); + } + } + scope.upgrade = upgrade; + scope.upgradeWithDefinition = upgradeWithDefinition; + scope.implementPrototype = implementPrototype; +}); + +window.CustomElements.addModule(function(scope) { + var isIE11OrOlder = scope.isIE11OrOlder; + var upgradeDocumentTree = scope.upgradeDocumentTree; + var upgradeAll = scope.upgradeAll; + var upgradeWithDefinition = scope.upgradeWithDefinition; + var implementPrototype = scope.implementPrototype; + var useNative = scope.useNative; + function register(name, options) { + var definition = options || {}; + if (!name) { + throw new Error("document.registerElement: first argument `name` must not be empty"); + } + if (name.indexOf("-") < 0) { + throw new Error("document.registerElement: first argument ('name') must contain a dash ('-'). Argument provided was '" + String(name) + "'."); + } + if (isReservedTag(name)) { + throw new Error("Failed to execute 'registerElement' on 'Document': Registration failed for type '" + String(name) + "'. The type name is invalid."); + } + if (getRegisteredDefinition(name)) { + throw new Error("DuplicateDefinitionError: a type with name '" + String(name) + "' is already registered"); + } + if (!definition.prototype) { + definition.prototype = Object.create(HTMLElement.prototype); + } + definition.__name = name.toLowerCase(); + definition.lifecycle = definition.lifecycle || {}; + definition.ancestry = ancestry(definition.extends); + resolveTagName(definition); + resolvePrototypeChain(definition); + overrideAttributeApi(definition.prototype); + registerDefinition(definition.__name, definition); + definition.ctor = generateConstructor(definition); + definition.ctor.prototype = definition.prototype; + definition.prototype.constructor = definition.ctor; + if (scope.ready) { + upgradeDocumentTree(document); + } + return definition.ctor; + } + function overrideAttributeApi(prototype) { + if (prototype.setAttribute._polyfilled) { + return; + } + var setAttribute = prototype.setAttribute; + prototype.setAttribute = function(name, value) { + changeAttribute.call(this, name, value, setAttribute); + }; + var removeAttribute = prototype.removeAttribute; + prototype.removeAttribute = function(name) { + changeAttribute.call(this, name, null, removeAttribute); + }; + prototype.setAttribute._polyfilled = true; + } + function changeAttribute(name, value, operation) { + name = name.toLowerCase(); + var oldValue = this.getAttribute(name); + operation.apply(this, arguments); + var newValue = this.getAttribute(name); + if (this.attributeChangedCallback && newValue !== oldValue) { + this.attributeChangedCallback(name, oldValue, newValue); + } + } + function isReservedTag(name) { + for (var i = 0; i < reservedTagList.length; i++) { + if (name === reservedTagList[i]) { + return true; + } + } + } + var reservedTagList = [ "annotation-xml", "color-profile", "font-face", "font-face-src", "font-face-uri", "font-face-format", "font-face-name", "missing-glyph" ]; + function ancestry(extnds) { + var extendee = getRegisteredDefinition(extnds); + if (extendee) { + return ancestry(extendee.extends).concat([ extendee ]); + } + return []; + } + function resolveTagName(definition) { + var baseTag = definition.extends; + for (var i = 0, a; a = definition.ancestry[i]; i++) { + baseTag = a.is && a.tag; + } + definition.tag = baseTag || definition.__name; + if (baseTag) { + definition.is = definition.__name; + } + } + function resolvePrototypeChain(definition) { + if (!Object.__proto__) { + var nativePrototype = HTMLElement.prototype; + if (definition.is) { + var inst = document.createElement(definition.tag); + var expectedPrototype = Object.getPrototypeOf(inst); + if (expectedPrototype === definition.prototype) { + nativePrototype = expectedPrototype; + } + } + var proto = definition.prototype, ancestor; + while (proto && proto !== nativePrototype) { + ancestor = Object.getPrototypeOf(proto); + proto.__proto__ = ancestor; + proto = ancestor; + } + definition.native = nativePrototype; + } + } + function instantiate(definition) { + return upgradeWithDefinition(domCreateElement(definition.tag), definition); + } + var registry = {}; + function getRegisteredDefinition(name) { + if (name) { + return registry[name.toLowerCase()]; + } + } + function registerDefinition(name, definition) { + registry[name] = definition; + } + function generateConstructor(definition) { + return function() { + return instantiate(definition); + }; + } + var HTML_NAMESPACE = "http://www.w3.org/1999/xhtml"; + function createElementNS(namespace, tag, typeExtension) { + if (namespace === HTML_NAMESPACE) { + return createElement(tag, typeExtension); + } else { + return domCreateElementNS(namespace, tag); + } + } + function createElement(tag, typeExtension) { + if (tag) { + tag = tag.toLowerCase(); + } + if (typeExtension) { + typeExtension = typeExtension.toLowerCase(); + } + var definition = getRegisteredDefinition(typeExtension || tag); + if (definition) { + if (tag == definition.tag && typeExtension == definition.is) { + return new definition.ctor(); + } + if (!typeExtension && !definition.is) { + return new definition.ctor(); + } + } + var element; + if (typeExtension) { + element = createElement(tag); + element.setAttribute("is", typeExtension); + return element; + } + element = domCreateElement(tag); + if (tag.indexOf("-") >= 0) { + implementPrototype(element, HTMLElement); + } + return element; + } + var domCreateElement = document.createElement.bind(document); + var domCreateElementNS = document.createElementNS.bind(document); + var isInstance; + if (!Object.__proto__ && !useNative) { + isInstance = function(obj, ctor) { + var p = obj; + while (p) { + if (p === ctor.prototype) { + return true; + } + p = p.__proto__; + } + return false; + }; + } else { + isInstance = function(obj, base) { + return obj instanceof base; + }; + } + function wrapDomMethodToForceUpgrade(obj, methodName) { + var orig = obj[methodName]; + obj[methodName] = function() { + var n = orig.apply(this, arguments); + upgradeAll(n); + return n; + }; + } + wrapDomMethodToForceUpgrade(Node.prototype, "cloneNode"); + wrapDomMethodToForceUpgrade(document, "importNode"); + if (isIE11OrOlder) { + (function() { + var importNode = document.importNode; + document.importNode = function() { + var n = importNode.apply(document, arguments); + if (n.nodeType == n.DOCUMENT_FRAGMENT_NODE) { + var f = document.createDocumentFragment(); + f.appendChild(n); + return f; + } else { + return n; + } + }; + })(); + } + document.registerElement = register; + document.createElement = createElement; + document.createElementNS = createElementNS; + scope.registry = registry; + scope.instanceof = isInstance; + scope.reservedTagList = reservedTagList; + scope.getRegisteredDefinition = getRegisteredDefinition; + document.register = document.registerElement; +}); + +(function(scope) { + var useNative = scope.useNative; + var initializeModules = scope.initializeModules; + var isIE11OrOlder = /Trident/.test(navigator.userAgent); + if (useNative) { + var nop = function() {}; + scope.watchShadow = nop; + scope.upgrade = nop; + scope.upgradeAll = nop; + scope.upgradeDocumentTree = nop; + scope.upgradeSubtree = nop; + scope.takeRecords = nop; + scope.instanceof = function(obj, base) { + return obj instanceof base; + }; + } else { + initializeModules(); + } + var upgradeDocumentTree = scope.upgradeDocumentTree; + if (!window.wrap) { + if (window.ShadowDOMPolyfill) { + window.wrap = window.ShadowDOMPolyfill.wrapIfNeeded; + window.unwrap = window.ShadowDOMPolyfill.unwrapIfNeeded; + } else { + window.wrap = window.unwrap = function(node) { + return node; + }; + } + } + function bootstrap() { + upgradeDocumentTree(window.wrap(document)); + if (window.HTMLImports) { + window.HTMLImports.__importsParsingHook = function(elt) { + upgradeDocumentTree(wrap(elt.import)); + }; + } + window.CustomElements.ready = true; + setTimeout(function() { + window.CustomElements.readyTime = Date.now(); + if (window.HTMLImports) { + window.CustomElements.elapsed = window.CustomElements.readyTime - window.HTMLImports.readyTime; + } + document.dispatchEvent(new CustomEvent("WebComponentsReady", { + bubbles: true + })); + }); + } + if (isIE11OrOlder && typeof window.CustomEvent !== "function") { + window.CustomEvent = function(inType, params) { + params = params || {}; + var e = document.createEvent("CustomEvent"); + e.initCustomEvent(inType, Boolean(params.bubbles), Boolean(params.cancelable), params.detail); + e.preventDefault = function() { + Object.defineProperty(this, "defaultPrevented", { + get: function() { + return true; + } + }); + }; + return e; + }; + window.CustomEvent.prototype = window.Event.prototype; + } + if (document.readyState === "complete" || scope.flags.eager) { + bootstrap(); + } else if (document.readyState === "interactive" && !window.attachEvent && (!window.HTMLImports || window.HTMLImports.ready)) { + bootstrap(); + } else { + var loadEvent = window.HTMLImports && !window.HTMLImports.ready ? "HTMLImportsLoaded" : "DOMContentLoaded"; + window.addEventListener(loadEvent, bootstrap); + } + scope.isIE11OrOlder = isIE11OrOlder; +})(window.CustomElements); \ No newline at end of file diff --git a/static/bower_components/webcomponentsjs/CustomElements.min.js b/static/bower_components/webcomponentsjs/CustomElements.min.js new file mode 100644 index 0000000..c4eff21 --- /dev/null +++ b/static/bower_components/webcomponentsjs/CustomElements.min.js @@ -0,0 +1,11 @@ +/** + * @license + * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt + */ +// @version 0.7.5 +"undefined"==typeof WeakMap&&!function(){var e=Object.defineProperty,t=Date.now()%1e9,n=function(){this.name="__st"+(1e9*Math.random()>>>0)+(t++ +"__")};n.prototype={set:function(t,n){var o=t[this.name];return o&&o[0]===t?o[1]=n:e(t,this.name,{value:[t,n],writable:!0}),this},get:function(e){var t;return(t=e[this.name])&&t[0]===e?t[1]:void 0},"delete":function(e){var t=e[this.name];return t&&t[0]===e?(t[0]=t[1]=void 0,!0):!1},has:function(e){var t=e[this.name];return t?t[0]===e:!1}},window.WeakMap=n}(),function(e){function t(e){_.push(e),b||(b=!0,h(o))}function n(e){return window.ShadowDOMPolyfill&&window.ShadowDOMPolyfill.wrapIfNeeded(e)||e}function o(){b=!1;var e=_;_=[],e.sort(function(e,t){return e.uid_-t.uid_});var t=!1;e.forEach(function(e){var n=e.takeRecords();r(e),n.length&&(e.callback_(n,e),t=!0)}),t&&o()}function r(e){e.nodes_.forEach(function(t){var n=v.get(t);n&&n.forEach(function(t){t.observer===e&&t.removeTransientObservers()})})}function i(e,t){for(var n=e;n;n=n.parentNode){var o=v.get(n);if(o)for(var r=0;r0){var r=n[o-1],i=p(r,e);if(i)return void(n[o-1]=i)}else t(this.observer);n[o]=e},addListeners:function(){this.addListeners_(this.target)},addListeners_:function(e){var t=this.options;t.attributes&&e.addEventListener("DOMAttrModified",this,!0),t.characterData&&e.addEventListener("DOMCharacterDataModified",this,!0),t.childList&&e.addEventListener("DOMNodeInserted",this,!0),(t.childList||t.subtree)&&e.addEventListener("DOMNodeRemoved",this,!0)},removeListeners:function(){this.removeListeners_(this.target)},removeListeners_:function(e){var t=this.options;t.attributes&&e.removeEventListener("DOMAttrModified",this,!0),t.characterData&&e.removeEventListener("DOMCharacterDataModified",this,!0),t.childList&&e.removeEventListener("DOMNodeInserted",this,!0),(t.childList||t.subtree)&&e.removeEventListener("DOMNodeRemoved",this,!0)},addTransientObserver:function(e){if(e!==this.target){this.addListeners_(e),this.transientObservedNodes.push(e);var t=v.get(e);t||v.set(e,t=[]),t.push(this)}},removeTransientObservers:function(){var e=this.transientObservedNodes;this.transientObservedNodes=[],e.forEach(function(e){this.removeListeners_(e);for(var t=v.get(e),n=0;n=0)){n.push(e);for(var o,r=e.querySelectorAll("link[rel="+a+"]"),d=0,s=r.length;s>d&&(o=r[d]);d++)o["import"]&&i(o["import"],t,n);t(e)}}var a=window.HTMLImports?window.HTMLImports.IMPORT_LINK_TYPE:"none";e.forDocumentTree=r,e.forSubtree=t}),window.CustomElements.addModule(function(e){function t(e){return n(e)||o(e)}function n(t){return e.upgrade(t)?!0:void d(t)}function o(e){_(e,function(e){return n(e)?!0:void 0})}function r(e){d(e),f(e)&&_(e,function(e){d(e)})}function i(e){O.push(e),N||(N=!0,setTimeout(a))}function a(){N=!1;for(var e,t=O,n=0,o=t.length;o>n&&(e=t[n]);n++)e();O=[]}function d(e){y?i(function(){s(e)}):s(e)}function s(e){e.__upgraded__&&(e.attachedCallback||e.detachedCallback)&&!e.__attached&&f(e)&&(e.__attached=!0,e.attachedCallback&&e.attachedCallback())}function u(e){c(e),_(e,function(e){c(e)})}function c(e){y?i(function(){l(e)}):l(e)}function l(e){e.__upgraded__&&(e.attachedCallback||e.detachedCallback)&&e.__attached&&!f(e)&&(e.__attached=!1,e.detachedCallback&&e.detachedCallback())}function f(e){for(var t=e,n=wrap(document);t;){if(t==n)return!0;t=t.parentNode||t.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&t.host}}function p(e){if(e.shadowRoot&&!e.shadowRoot.__watched){b.dom&&console.log("watching shadow-root for: ",e.localName);for(var t=e.shadowRoot;t;)v(t),t=t.olderShadowRoot}}function m(e){if(b.dom){var n=e[0];if(n&&"childList"===n.type&&n.addedNodes&&n.addedNodes){for(var o=n.addedNodes[0];o&&o!==document&&!o.host;)o=o.parentNode;var r=o&&(o.URL||o._URL||o.host&&o.host.localName)||"";r=r.split("/?").shift().split("/").pop()}console.group("mutations (%d) [%s]",e.length,r||"")}e.forEach(function(e){"childList"===e.type&&(M(e.addedNodes,function(e){e.localName&&t(e)}),M(e.removedNodes,function(e){e.localName&&u(e)}))}),b.dom&&console.groupEnd()}function h(e){for(e=window.wrap(e),e||(e=window.wrap(document));e.parentNode;)e=e.parentNode;var t=e.__observer;t&&(m(t.takeRecords()),a())}function v(e){if(!e.__observer){var t=new MutationObserver(m);t.observe(e,{childList:!0,subtree:!0}),e.__observer=t}}function w(e){e=window.wrap(e),b.dom&&console.group("upgradeDocument: ",e.baseURI.split("/").pop()),t(e),v(e),b.dom&&console.groupEnd()}function g(e){E(e,w)}var b=e.flags,_=e.forSubtree,E=e.forDocumentTree,y=!window.MutationObserver||window.MutationObserver===window.JsMutationObserver;e.hasPolyfillMutations=y;var N=!1,O=[],M=Array.prototype.forEach.call.bind(Array.prototype.forEach),L=Element.prototype.createShadowRoot;L&&(Element.prototype.createShadowRoot=function(){var e=L.call(this);return window.CustomElements.watchShadow(this),e}),e.watchShadow=p,e.upgradeDocumentTree=g,e.upgradeSubtree=o,e.upgradeAll=t,e.attachedNode=r,e.takeRecords=h}),window.CustomElements.addModule(function(e){function t(t){if(!t.__upgraded__&&t.nodeType===Node.ELEMENT_NODE){var o=t.getAttribute("is"),r=e.getRegisteredDefinition(o||t.localName);if(r){if(o&&r.tag==t.localName)return n(t,r);if(!o&&!r["extends"])return n(t,r)}}}function n(t,n){return a.upgrade&&console.group("upgrade:",t.localName),n.is&&t.setAttribute("is",n.is),o(t,n),t.__upgraded__=!0,i(t),e.attachedNode(t),e.upgradeSubtree(t),a.upgrade&&console.groupEnd(),t}function o(e,t){Object.__proto__?e.__proto__=t.prototype:(r(e,t.prototype,t["native"]),e.__proto__=t.prototype)}function r(e,t,n){for(var o={},r=t;r!==n&&r!==HTMLElement.prototype;){for(var i,a=Object.getOwnPropertyNames(r),d=0;i=a[d];d++)o[i]||(Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(r,i)),o[i]=1);r=Object.getPrototypeOf(r)}}function i(e){e.createdCallback&&e.createdCallback()}var a=e.flags;e.upgrade=t,e.upgradeWithDefinition=n,e.implementPrototype=o}),window.CustomElements.addModule(function(e){function t(t,o){var s=o||{};if(!t)throw new Error("document.registerElement: first argument `name` must not be empty");if(t.indexOf("-")<0)throw new Error("document.registerElement: first argument ('name') must contain a dash ('-'). Argument provided was '"+String(t)+"'.");if(r(t))throw new Error("Failed to execute 'registerElement' on 'Document': Registration failed for type '"+String(t)+"'. The type name is invalid.");if(u(t))throw new Error("DuplicateDefinitionError: a type with name '"+String(t)+"' is already registered");return s.prototype||(s.prototype=Object.create(HTMLElement.prototype)),s.__name=t.toLowerCase(),s.lifecycle=s.lifecycle||{},s.ancestry=i(s["extends"]),a(s),d(s),n(s.prototype),c(s.__name,s),s.ctor=l(s),s.ctor.prototype=s.prototype,s.prototype.constructor=s.ctor,e.ready&&w(document),s.ctor}function n(e){if(!e.setAttribute._polyfilled){var t=e.setAttribute;e.setAttribute=function(e,n){o.call(this,e,n,t)};var n=e.removeAttribute;e.removeAttribute=function(e){o.call(this,e,null,n)},e.setAttribute._polyfilled=!0}}function o(e,t,n){e=e.toLowerCase();var o=this.getAttribute(e);n.apply(this,arguments);var r=this.getAttribute(e);this.attributeChangedCallback&&r!==o&&this.attributeChangedCallback(e,o,r)}function r(e){for(var t=0;t=0&&_(o,HTMLElement),o)}function m(e,t){var n=e[t];e[t]=function(){var e=n.apply(this,arguments);return g(e),e}}var h,v=e.isIE11OrOlder,w=e.upgradeDocumentTree,g=e.upgradeAll,b=e.upgradeWithDefinition,_=e.implementPrototype,E=e.useNative,y=["annotation-xml","color-profile","font-face","font-face-src","font-face-uri","font-face-format","font-face-name","missing-glyph"],N={},O="http://www.w3.org/1999/xhtml",M=document.createElement.bind(document),L=document.createElementNS.bind(document);h=Object.__proto__||E?function(e,t){return e instanceof t}:function(e,t){for(var n=e;n;){if(n===t.prototype)return!0;n=n.__proto__}return!1},m(Node.prototype,"cloneNode"),m(document,"importNode"),v&&!function(){var e=document.importNode;document.importNode=function(){var t=e.apply(document,arguments);if(t.nodeType==t.DOCUMENT_FRAGMENT_NODE){var n=document.createDocumentFragment();return n.appendChild(t),n}return t}}(),document.registerElement=t,document.createElement=p,document.createElementNS=f,e.registry=N,e["instanceof"]=h,e.reservedTagList=y,e.getRegisteredDefinition=u,document.register=document.registerElement}),function(e){function t(){a(window.wrap(document)),window.HTMLImports&&(window.HTMLImports.__importsParsingHook=function(e){a(wrap(e["import"]))}),window.CustomElements.ready=!0,setTimeout(function(){window.CustomElements.readyTime=Date.now(),window.HTMLImports&&(window.CustomElements.elapsed=window.CustomElements.readyTime-window.HTMLImports.readyTime),document.dispatchEvent(new CustomEvent("WebComponentsReady",{bubbles:!0}))})}var n=e.useNative,o=e.initializeModules,r=/Trident/.test(navigator.userAgent);if(n){var i=function(){};e.watchShadow=i,e.upgrade=i,e.upgradeAll=i,e.upgradeDocumentTree=i,e.upgradeSubtree=i,e.takeRecords=i,e["instanceof"]=function(e,t){return e instanceof t}}else o();var a=e.upgradeDocumentTree;if(window.wrap||(window.ShadowDOMPolyfill?(window.wrap=window.ShadowDOMPolyfill.wrapIfNeeded,window.unwrap=window.ShadowDOMPolyfill.unwrapIfNeeded):window.wrap=window.unwrap=function(e){return e}),r&&"function"!=typeof window.CustomEvent&&(window.CustomEvent=function(e,t){t=t||{};var n=document.createEvent("CustomEvent");return n.initCustomEvent(e,Boolean(t.bubbles),Boolean(t.cancelable),t.detail),n.preventDefault=function(){Object.defineProperty(this,"defaultPrevented",{get:function(){return!0}})},n},window.CustomEvent.prototype=window.Event.prototype),"complete"===document.readyState||e.flags.eager)t();else if("interactive"!==document.readyState||window.attachEvent||window.HTMLImports&&!window.HTMLImports.ready){var d=window.HTMLImports&&!window.HTMLImports.ready?"HTMLImportsLoaded":"DOMContentLoaded";window.addEventListener(d,t)}else t();e.isIE11OrOlder=r}(window.CustomElements); \ No newline at end of file diff --git a/static/bower_components/webcomponentsjs/HTMLImports.js b/static/bower_components/webcomponentsjs/HTMLImports.js new file mode 100644 index 0000000..e9f03ec --- /dev/null +++ b/static/bower_components/webcomponentsjs/HTMLImports.js @@ -0,0 +1,1085 @@ +/** + * @license + * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt + */ +// @version 0.7.5 +if (typeof WeakMap === "undefined") { + (function() { + var defineProperty = Object.defineProperty; + var counter = Date.now() % 1e9; + var WeakMap = function() { + this.name = "__st" + (Math.random() * 1e9 >>> 0) + (counter++ + "__"); + }; + WeakMap.prototype = { + set: function(key, value) { + var entry = key[this.name]; + if (entry && entry[0] === key) entry[1] = value; else defineProperty(key, this.name, { + value: [ key, value ], + writable: true + }); + return this; + }, + get: function(key) { + var entry; + return (entry = key[this.name]) && entry[0] === key ? entry[1] : undefined; + }, + "delete": function(key) { + var entry = key[this.name]; + if (!entry || entry[0] !== key) return false; + entry[0] = entry[1] = undefined; + return true; + }, + has: function(key) { + var entry = key[this.name]; + if (!entry) return false; + return entry[0] === key; + } + }; + window.WeakMap = WeakMap; + })(); +} + +(function(global) { + var registrationsTable = new WeakMap(); + var setImmediate; + if (/Trident|Edge/.test(navigator.userAgent)) { + setImmediate = setTimeout; + } else if (window.setImmediate) { + setImmediate = window.setImmediate; + } else { + var setImmediateQueue = []; + var sentinel = String(Math.random()); + window.addEventListener("message", function(e) { + if (e.data === sentinel) { + var queue = setImmediateQueue; + setImmediateQueue = []; + queue.forEach(function(func) { + func(); + }); + } + }); + setImmediate = function(func) { + setImmediateQueue.push(func); + window.postMessage(sentinel, "*"); + }; + } + var isScheduled = false; + var scheduledObservers = []; + function scheduleCallback(observer) { + scheduledObservers.push(observer); + if (!isScheduled) { + isScheduled = true; + setImmediate(dispatchCallbacks); + } + } + function wrapIfNeeded(node) { + return window.ShadowDOMPolyfill && window.ShadowDOMPolyfill.wrapIfNeeded(node) || node; + } + function dispatchCallbacks() { + isScheduled = false; + var observers = scheduledObservers; + scheduledObservers = []; + observers.sort(function(o1, o2) { + return o1.uid_ - o2.uid_; + }); + var anyNonEmpty = false; + observers.forEach(function(observer) { + var queue = observer.takeRecords(); + removeTransientObserversFor(observer); + if (queue.length) { + observer.callback_(queue, observer); + anyNonEmpty = true; + } + }); + if (anyNonEmpty) dispatchCallbacks(); + } + function removeTransientObserversFor(observer) { + observer.nodes_.forEach(function(node) { + var registrations = registrationsTable.get(node); + if (!registrations) return; + registrations.forEach(function(registration) { + if (registration.observer === observer) registration.removeTransientObservers(); + }); + }); + } + function forEachAncestorAndObserverEnqueueRecord(target, callback) { + for (var node = target; node; node = node.parentNode) { + var registrations = registrationsTable.get(node); + if (registrations) { + for (var j = 0; j < registrations.length; j++) { + var registration = registrations[j]; + var options = registration.options; + if (node !== target && !options.subtree) continue; + var record = callback(options); + if (record) registration.enqueue(record); + } + } + } + } + var uidCounter = 0; + function JsMutationObserver(callback) { + this.callback_ = callback; + this.nodes_ = []; + this.records_ = []; + this.uid_ = ++uidCounter; + } + JsMutationObserver.prototype = { + observe: function(target, options) { + target = wrapIfNeeded(target); + if (!options.childList && !options.attributes && !options.characterData || options.attributeOldValue && !options.attributes || options.attributeFilter && options.attributeFilter.length && !options.attributes || options.characterDataOldValue && !options.characterData) { + throw new SyntaxError(); + } + var registrations = registrationsTable.get(target); + if (!registrations) registrationsTable.set(target, registrations = []); + var registration; + for (var i = 0; i < registrations.length; i++) { + if (registrations[i].observer === this) { + registration = registrations[i]; + registration.removeListeners(); + registration.options = options; + break; + } + } + if (!registration) { + registration = new Registration(this, target, options); + registrations.push(registration); + this.nodes_.push(target); + } + registration.addListeners(); + }, + disconnect: function() { + this.nodes_.forEach(function(node) { + var registrations = registrationsTable.get(node); + for (var i = 0; i < registrations.length; i++) { + var registration = registrations[i]; + if (registration.observer === this) { + registration.removeListeners(); + registrations.splice(i, 1); + break; + } + } + }, this); + this.records_ = []; + }, + takeRecords: function() { + var copyOfRecords = this.records_; + this.records_ = []; + return copyOfRecords; + } + }; + function MutationRecord(type, target) { + this.type = type; + this.target = target; + this.addedNodes = []; + this.removedNodes = []; + this.previousSibling = null; + this.nextSibling = null; + this.attributeName = null; + this.attributeNamespace = null; + this.oldValue = null; + } + function copyMutationRecord(original) { + var record = new MutationRecord(original.type, original.target); + record.addedNodes = original.addedNodes.slice(); + record.removedNodes = original.removedNodes.slice(); + record.previousSibling = original.previousSibling; + record.nextSibling = original.nextSibling; + record.attributeName = original.attributeName; + record.attributeNamespace = original.attributeNamespace; + record.oldValue = original.oldValue; + return record; + } + var currentRecord, recordWithOldValue; + function getRecord(type, target) { + return currentRecord = new MutationRecord(type, target); + } + function getRecordWithOldValue(oldValue) { + if (recordWithOldValue) return recordWithOldValue; + recordWithOldValue = copyMutationRecord(currentRecord); + recordWithOldValue.oldValue = oldValue; + return recordWithOldValue; + } + function clearRecords() { + currentRecord = recordWithOldValue = undefined; + } + function recordRepresentsCurrentMutation(record) { + return record === recordWithOldValue || record === currentRecord; + } + function selectRecord(lastRecord, newRecord) { + if (lastRecord === newRecord) return lastRecord; + if (recordWithOldValue && recordRepresentsCurrentMutation(lastRecord)) return recordWithOldValue; + return null; + } + function Registration(observer, target, options) { + this.observer = observer; + this.target = target; + this.options = options; + this.transientObservedNodes = []; + } + Registration.prototype = { + enqueue: function(record) { + var records = this.observer.records_; + var length = records.length; + if (records.length > 0) { + var lastRecord = records[length - 1]; + var recordToReplaceLast = selectRecord(lastRecord, record); + if (recordToReplaceLast) { + records[length - 1] = recordToReplaceLast; + return; + } + } else { + scheduleCallback(this.observer); + } + records[length] = record; + }, + addListeners: function() { + this.addListeners_(this.target); + }, + addListeners_: function(node) { + var options = this.options; + if (options.attributes) node.addEventListener("DOMAttrModified", this, true); + if (options.characterData) node.addEventListener("DOMCharacterDataModified", this, true); + if (options.childList) node.addEventListener("DOMNodeInserted", this, true); + if (options.childList || options.subtree) node.addEventListener("DOMNodeRemoved", this, true); + }, + removeListeners: function() { + this.removeListeners_(this.target); + }, + removeListeners_: function(node) { + var options = this.options; + if (options.attributes) node.removeEventListener("DOMAttrModified", this, true); + if (options.characterData) node.removeEventListener("DOMCharacterDataModified", this, true); + if (options.childList) node.removeEventListener("DOMNodeInserted", this, true); + if (options.childList || options.subtree) node.removeEventListener("DOMNodeRemoved", this, true); + }, + addTransientObserver: function(node) { + if (node === this.target) return; + this.addListeners_(node); + this.transientObservedNodes.push(node); + var registrations = registrationsTable.get(node); + if (!registrations) registrationsTable.set(node, registrations = []); + registrations.push(this); + }, + removeTransientObservers: function() { + var transientObservedNodes = this.transientObservedNodes; + this.transientObservedNodes = []; + transientObservedNodes.forEach(function(node) { + this.removeListeners_(node); + var registrations = registrationsTable.get(node); + for (var i = 0; i < registrations.length; i++) { + if (registrations[i] === this) { + registrations.splice(i, 1); + break; + } + } + }, this); + }, + handleEvent: function(e) { + e.stopImmediatePropagation(); + switch (e.type) { + case "DOMAttrModified": + var name = e.attrName; + var namespace = e.relatedNode.namespaceURI; + var target = e.target; + var record = new getRecord("attributes", target); + record.attributeName = name; + record.attributeNamespace = namespace; + var oldValue = e.attrChange === MutationEvent.ADDITION ? null : e.prevValue; + forEachAncestorAndObserverEnqueueRecord(target, function(options) { + if (!options.attributes) return; + if (options.attributeFilter && options.attributeFilter.length && options.attributeFilter.indexOf(name) === -1 && options.attributeFilter.indexOf(namespace) === -1) { + return; + } + if (options.attributeOldValue) return getRecordWithOldValue(oldValue); + return record; + }); + break; + + case "DOMCharacterDataModified": + var target = e.target; + var record = getRecord("characterData", target); + var oldValue = e.prevValue; + forEachAncestorAndObserverEnqueueRecord(target, function(options) { + if (!options.characterData) return; + if (options.characterDataOldValue) return getRecordWithOldValue(oldValue); + return record; + }); + break; + + case "DOMNodeRemoved": + this.addTransientObserver(e.target); + + case "DOMNodeInserted": + var changedNode = e.target; + var addedNodes, removedNodes; + if (e.type === "DOMNodeInserted") { + addedNodes = [ changedNode ]; + removedNodes = []; + } else { + addedNodes = []; + removedNodes = [ changedNode ]; + } + var previousSibling = changedNode.previousSibling; + var nextSibling = changedNode.nextSibling; + var record = getRecord("childList", e.target.parentNode); + record.addedNodes = addedNodes; + record.removedNodes = removedNodes; + record.previousSibling = previousSibling; + record.nextSibling = nextSibling; + forEachAncestorAndObserverEnqueueRecord(e.relatedNode, function(options) { + if (!options.childList) return; + return record; + }); + } + clearRecords(); + } + }; + global.JsMutationObserver = JsMutationObserver; + if (!global.MutationObserver) global.MutationObserver = JsMutationObserver; +})(this); + +window.HTMLImports = window.HTMLImports || { + flags: {} +}; + +(function(scope) { + var IMPORT_LINK_TYPE = "import"; + var useNative = Boolean(IMPORT_LINK_TYPE in document.createElement("link")); + var hasShadowDOMPolyfill = Boolean(window.ShadowDOMPolyfill); + var wrap = function(node) { + return hasShadowDOMPolyfill ? window.ShadowDOMPolyfill.wrapIfNeeded(node) : node; + }; + var rootDocument = wrap(document); + var currentScriptDescriptor = { + get: function() { + var script = window.HTMLImports.currentScript || document.currentScript || (document.readyState !== "complete" ? document.scripts[document.scripts.length - 1] : null); + return wrap(script); + }, + configurable: true + }; + Object.defineProperty(document, "_currentScript", currentScriptDescriptor); + Object.defineProperty(rootDocument, "_currentScript", currentScriptDescriptor); + var isIE = /Trident/.test(navigator.userAgent); + function whenReady(callback, doc) { + doc = doc || rootDocument; + whenDocumentReady(function() { + watchImportsLoad(callback, doc); + }, doc); + } + var requiredReadyState = isIE ? "complete" : "interactive"; + var READY_EVENT = "readystatechange"; + function isDocumentReady(doc) { + return doc.readyState === "complete" || doc.readyState === requiredReadyState; + } + function whenDocumentReady(callback, doc) { + if (!isDocumentReady(doc)) { + var checkReady = function() { + if (doc.readyState === "complete" || doc.readyState === requiredReadyState) { + doc.removeEventListener(READY_EVENT, checkReady); + whenDocumentReady(callback, doc); + } + }; + doc.addEventListener(READY_EVENT, checkReady); + } else if (callback) { + callback(); + } + } + function markTargetLoaded(event) { + event.target.__loaded = true; + } + function watchImportsLoad(callback, doc) { + var imports = doc.querySelectorAll("link[rel=import]"); + var parsedCount = 0, importCount = imports.length, newImports = [], errorImports = []; + function checkDone() { + if (parsedCount == importCount && callback) { + callback({ + allImports: imports, + loadedImports: newImports, + errorImports: errorImports + }); + } + } + function loadedImport(e) { + markTargetLoaded(e); + newImports.push(this); + parsedCount++; + checkDone(); + } + function errorLoadingImport(e) { + errorImports.push(this); + parsedCount++; + checkDone(); + } + if (importCount) { + for (var i = 0, imp; i < importCount && (imp = imports[i]); i++) { + if (isImportLoaded(imp)) { + parsedCount++; + checkDone(); + } else { + imp.addEventListener("load", loadedImport); + imp.addEventListener("error", errorLoadingImport); + } + } + } else { + checkDone(); + } + } + function isImportLoaded(link) { + return useNative ? link.__loaded || link.import && link.import.readyState !== "loading" : link.__importParsed; + } + if (useNative) { + new MutationObserver(function(mxns) { + for (var i = 0, l = mxns.length, m; i < l && (m = mxns[i]); i++) { + if (m.addedNodes) { + handleImports(m.addedNodes); + } + } + }).observe(document.head, { + childList: true + }); + function handleImports(nodes) { + for (var i = 0, l = nodes.length, n; i < l && (n = nodes[i]); i++) { + if (isImport(n)) { + handleImport(n); + } + } + } + function isImport(element) { + return element.localName === "link" && element.rel === "import"; + } + function handleImport(element) { + var loaded = element.import; + if (loaded) { + markTargetLoaded({ + target: element + }); + } else { + element.addEventListener("load", markTargetLoaded); + element.addEventListener("error", markTargetLoaded); + } + } + (function() { + if (document.readyState === "loading") { + var imports = document.querySelectorAll("link[rel=import]"); + for (var i = 0, l = imports.length, imp; i < l && (imp = imports[i]); i++) { + handleImport(imp); + } + } + })(); + } + whenReady(function(detail) { + window.HTMLImports.ready = true; + window.HTMLImports.readyTime = new Date().getTime(); + var evt = rootDocument.createEvent("CustomEvent"); + evt.initCustomEvent("HTMLImportsLoaded", true, true, detail); + rootDocument.dispatchEvent(evt); + }); + scope.IMPORT_LINK_TYPE = IMPORT_LINK_TYPE; + scope.useNative = useNative; + scope.rootDocument = rootDocument; + scope.whenReady = whenReady; + scope.isIE = isIE; +})(window.HTMLImports); + +(function(scope) { + var modules = []; + var addModule = function(module) { + modules.push(module); + }; + var initializeModules = function() { + modules.forEach(function(module) { + module(scope); + }); + }; + scope.addModule = addModule; + scope.initializeModules = initializeModules; +})(window.HTMLImports); + +window.HTMLImports.addModule(function(scope) { + var CSS_URL_REGEXP = /(url\()([^)]*)(\))/g; + var CSS_IMPORT_REGEXP = /(@import[\s]+(?!url\())([^;]*)(;)/g; + var path = { + resolveUrlsInStyle: function(style, linkUrl) { + var doc = style.ownerDocument; + var resolver = doc.createElement("a"); + style.textContent = this.resolveUrlsInCssText(style.textContent, linkUrl, resolver); + return style; + }, + resolveUrlsInCssText: function(cssText, linkUrl, urlObj) { + var r = this.replaceUrls(cssText, urlObj, linkUrl, CSS_URL_REGEXP); + r = this.replaceUrls(r, urlObj, linkUrl, CSS_IMPORT_REGEXP); + return r; + }, + replaceUrls: function(text, urlObj, linkUrl, regexp) { + return text.replace(regexp, function(m, pre, url, post) { + var urlPath = url.replace(/["']/g, ""); + if (linkUrl) { + urlPath = new URL(urlPath, linkUrl).href; + } + urlObj.href = urlPath; + urlPath = urlObj.href; + return pre + "'" + urlPath + "'" + post; + }); + } + }; + scope.path = path; +}); + +window.HTMLImports.addModule(function(scope) { + var xhr = { + async: true, + ok: function(request) { + return request.status >= 200 && request.status < 300 || request.status === 304 || request.status === 0; + }, + load: function(url, next, nextContext) { + var request = new XMLHttpRequest(); + if (scope.flags.debug || scope.flags.bust) { + url += "?" + Math.random(); + } + request.open("GET", url, xhr.async); + request.addEventListener("readystatechange", function(e) { + if (request.readyState === 4) { + var locationHeader = request.getResponseHeader("Location"); + var redirectedUrl = null; + if (locationHeader) { + var redirectedUrl = locationHeader.substr(0, 1) === "/" ? location.origin + locationHeader : locationHeader; + } + next.call(nextContext, !xhr.ok(request) && request, request.response || request.responseText, redirectedUrl); + } + }); + request.send(); + return request; + }, + loadDocument: function(url, next, nextContext) { + this.load(url, next, nextContext).responseType = "document"; + } + }; + scope.xhr = xhr; +}); + +window.HTMLImports.addModule(function(scope) { + var xhr = scope.xhr; + var flags = scope.flags; + var Loader = function(onLoad, onComplete) { + this.cache = {}; + this.onload = onLoad; + this.oncomplete = onComplete; + this.inflight = 0; + this.pending = {}; + }; + Loader.prototype = { + addNodes: function(nodes) { + this.inflight += nodes.length; + for (var i = 0, l = nodes.length, n; i < l && (n = nodes[i]); i++) { + this.require(n); + } + this.checkDone(); + }, + addNode: function(node) { + this.inflight++; + this.require(node); + this.checkDone(); + }, + require: function(elt) { + var url = elt.src || elt.href; + elt.__nodeUrl = url; + if (!this.dedupe(url, elt)) { + this.fetch(url, elt); + } + }, + dedupe: function(url, elt) { + if (this.pending[url]) { + this.pending[url].push(elt); + return true; + } + var resource; + if (this.cache[url]) { + this.onload(url, elt, this.cache[url]); + this.tail(); + return true; + } + this.pending[url] = [ elt ]; + return false; + }, + fetch: function(url, elt) { + flags.load && console.log("fetch", url, elt); + if (!url) { + setTimeout(function() { + this.receive(url, elt, { + error: "href must be specified" + }, null); + }.bind(this), 0); + } else if (url.match(/^data:/)) { + var pieces = url.split(","); + var header = pieces[0]; + var body = pieces[1]; + if (header.indexOf(";base64") > -1) { + body = atob(body); + } else { + body = decodeURIComponent(body); + } + setTimeout(function() { + this.receive(url, elt, null, body); + }.bind(this), 0); + } else { + var receiveXhr = function(err, resource, redirectedUrl) { + this.receive(url, elt, err, resource, redirectedUrl); + }.bind(this); + xhr.load(url, receiveXhr); + } + }, + receive: function(url, elt, err, resource, redirectedUrl) { + this.cache[url] = resource; + var $p = this.pending[url]; + for (var i = 0, l = $p.length, p; i < l && (p = $p[i]); i++) { + this.onload(url, p, resource, err, redirectedUrl); + this.tail(); + } + this.pending[url] = null; + }, + tail: function() { + --this.inflight; + this.checkDone(); + }, + checkDone: function() { + if (!this.inflight) { + this.oncomplete(); + } + } + }; + scope.Loader = Loader; +}); + +window.HTMLImports.addModule(function(scope) { + var Observer = function(addCallback) { + this.addCallback = addCallback; + this.mo = new MutationObserver(this.handler.bind(this)); + }; + Observer.prototype = { + handler: function(mutations) { + for (var i = 0, l = mutations.length, m; i < l && (m = mutations[i]); i++) { + if (m.type === "childList" && m.addedNodes.length) { + this.addedNodes(m.addedNodes); + } + } + }, + addedNodes: function(nodes) { + if (this.addCallback) { + this.addCallback(nodes); + } + for (var i = 0, l = nodes.length, n, loading; i < l && (n = nodes[i]); i++) { + if (n.children && n.children.length) { + this.addedNodes(n.children); + } + } + }, + observe: function(root) { + this.mo.observe(root, { + childList: true, + subtree: true + }); + } + }; + scope.Observer = Observer; +}); + +window.HTMLImports.addModule(function(scope) { + var path = scope.path; + var rootDocument = scope.rootDocument; + var flags = scope.flags; + var isIE = scope.isIE; + var IMPORT_LINK_TYPE = scope.IMPORT_LINK_TYPE; + var IMPORT_SELECTOR = "link[rel=" + IMPORT_LINK_TYPE + "]"; + var importParser = { + documentSelectors: IMPORT_SELECTOR, + importsSelectors: [ IMPORT_SELECTOR, "link[rel=stylesheet]", "style", "script:not([type])", 'script[type="application/javascript"]', 'script[type="text/javascript"]' ].join(","), + map: { + link: "parseLink", + script: "parseScript", + style: "parseStyle" + }, + dynamicElements: [], + parseNext: function() { + var next = this.nextToParse(); + if (next) { + this.parse(next); + } + }, + parse: function(elt) { + if (this.isParsed(elt)) { + flags.parse && console.log("[%s] is already parsed", elt.localName); + return; + } + var fn = this[this.map[elt.localName]]; + if (fn) { + this.markParsing(elt); + fn.call(this, elt); + } + }, + parseDynamic: function(elt, quiet) { + this.dynamicElements.push(elt); + if (!quiet) { + this.parseNext(); + } + }, + markParsing: function(elt) { + flags.parse && console.log("parsing", elt); + this.parsingElement = elt; + }, + markParsingComplete: function(elt) { + elt.__importParsed = true; + this.markDynamicParsingComplete(elt); + if (elt.__importElement) { + elt.__importElement.__importParsed = true; + this.markDynamicParsingComplete(elt.__importElement); + } + this.parsingElement = null; + flags.parse && console.log("completed", elt); + }, + markDynamicParsingComplete: function(elt) { + var i = this.dynamicElements.indexOf(elt); + if (i >= 0) { + this.dynamicElements.splice(i, 1); + } + }, + parseImport: function(elt) { + if (window.HTMLImports.__importsParsingHook) { + window.HTMLImports.__importsParsingHook(elt); + } + if (elt.import) { + elt.import.__importParsed = true; + } + this.markParsingComplete(elt); + if (elt.__resource && !elt.__error) { + elt.dispatchEvent(new CustomEvent("load", { + bubbles: false + })); + } else { + elt.dispatchEvent(new CustomEvent("error", { + bubbles: false + })); + } + if (elt.__pending) { + var fn; + while (elt.__pending.length) { + fn = elt.__pending.shift(); + if (fn) { + fn({ + target: elt + }); + } + } + } + this.parseNext(); + }, + parseLink: function(linkElt) { + if (nodeIsImport(linkElt)) { + this.parseImport(linkElt); + } else { + linkElt.href = linkElt.href; + this.parseGeneric(linkElt); + } + }, + parseStyle: function(elt) { + var src = elt; + elt = cloneStyle(elt); + src.__appliedElement = elt; + elt.__importElement = src; + this.parseGeneric(elt); + }, + parseGeneric: function(elt) { + this.trackElement(elt); + this.addElementToDocument(elt); + }, + rootImportForElement: function(elt) { + var n = elt; + while (n.ownerDocument.__importLink) { + n = n.ownerDocument.__importLink; + } + return n; + }, + addElementToDocument: function(elt) { + var port = this.rootImportForElement(elt.__importElement || elt); + port.parentNode.insertBefore(elt, port); + }, + trackElement: function(elt, callback) { + var self = this; + var done = function(e) { + if (callback) { + callback(e); + } + self.markParsingComplete(elt); + self.parseNext(); + }; + elt.addEventListener("load", done); + elt.addEventListener("error", done); + if (isIE && elt.localName === "style") { + var fakeLoad = false; + if (elt.textContent.indexOf("@import") == -1) { + fakeLoad = true; + } else if (elt.sheet) { + fakeLoad = true; + var csr = elt.sheet.cssRules; + var len = csr ? csr.length : 0; + for (var i = 0, r; i < len && (r = csr[i]); i++) { + if (r.type === CSSRule.IMPORT_RULE) { + fakeLoad = fakeLoad && Boolean(r.styleSheet); + } + } + } + if (fakeLoad) { + setTimeout(function() { + elt.dispatchEvent(new CustomEvent("load", { + bubbles: false + })); + }); + } + } + }, + parseScript: function(scriptElt) { + var script = document.createElement("script"); + script.__importElement = scriptElt; + script.src = scriptElt.src ? scriptElt.src : generateScriptDataUrl(scriptElt); + scope.currentScript = scriptElt; + this.trackElement(script, function(e) { + script.parentNode.removeChild(script); + scope.currentScript = null; + }); + this.addElementToDocument(script); + }, + nextToParse: function() { + this._mayParse = []; + return !this.parsingElement && (this.nextToParseInDoc(rootDocument) || this.nextToParseDynamic()); + }, + nextToParseInDoc: function(doc, link) { + if (doc && this._mayParse.indexOf(doc) < 0) { + this._mayParse.push(doc); + var nodes = doc.querySelectorAll(this.parseSelectorsForNode(doc)); + for (var i = 0, l = nodes.length, p = 0, n; i < l && (n = nodes[i]); i++) { + if (!this.isParsed(n)) { + if (this.hasResource(n)) { + return nodeIsImport(n) ? this.nextToParseInDoc(n.import, n) : n; + } else { + return; + } + } + } + } + return link; + }, + nextToParseDynamic: function() { + return this.dynamicElements[0]; + }, + parseSelectorsForNode: function(node) { + var doc = node.ownerDocument || node; + return doc === rootDocument ? this.documentSelectors : this.importsSelectors; + }, + isParsed: function(node) { + return node.__importParsed; + }, + needsDynamicParsing: function(elt) { + return this.dynamicElements.indexOf(elt) >= 0; + }, + hasResource: function(node) { + if (nodeIsImport(node) && node.import === undefined) { + return false; + } + return true; + } + }; + function nodeIsImport(elt) { + return elt.localName === "link" && elt.rel === IMPORT_LINK_TYPE; + } + function generateScriptDataUrl(script) { + var scriptContent = generateScriptContent(script); + return "data:text/javascript;charset=utf-8," + encodeURIComponent(scriptContent); + } + function generateScriptContent(script) { + return script.textContent + generateSourceMapHint(script); + } + function generateSourceMapHint(script) { + var owner = script.ownerDocument; + owner.__importedScripts = owner.__importedScripts || 0; + var moniker = script.ownerDocument.baseURI; + var num = owner.__importedScripts ? "-" + owner.__importedScripts : ""; + owner.__importedScripts++; + return "\n//# sourceURL=" + moniker + num + ".js\n"; + } + function cloneStyle(style) { + var clone = style.ownerDocument.createElement("style"); + clone.textContent = style.textContent; + path.resolveUrlsInStyle(clone); + return clone; + } + scope.parser = importParser; + scope.IMPORT_SELECTOR = IMPORT_SELECTOR; +}); + +window.HTMLImports.addModule(function(scope) { + var flags = scope.flags; + var IMPORT_LINK_TYPE = scope.IMPORT_LINK_TYPE; + var IMPORT_SELECTOR = scope.IMPORT_SELECTOR; + var rootDocument = scope.rootDocument; + var Loader = scope.Loader; + var Observer = scope.Observer; + var parser = scope.parser; + var importer = { + documents: {}, + documentPreloadSelectors: IMPORT_SELECTOR, + importsPreloadSelectors: [ IMPORT_SELECTOR ].join(","), + loadNode: function(node) { + importLoader.addNode(node); + }, + loadSubtree: function(parent) { + var nodes = this.marshalNodes(parent); + importLoader.addNodes(nodes); + }, + marshalNodes: function(parent) { + return parent.querySelectorAll(this.loadSelectorsForNode(parent)); + }, + loadSelectorsForNode: function(node) { + var doc = node.ownerDocument || node; + return doc === rootDocument ? this.documentPreloadSelectors : this.importsPreloadSelectors; + }, + loaded: function(url, elt, resource, err, redirectedUrl) { + flags.load && console.log("loaded", url, elt); + elt.__resource = resource; + elt.__error = err; + if (isImportLink(elt)) { + var doc = this.documents[url]; + if (doc === undefined) { + doc = err ? null : makeDocument(resource, redirectedUrl || url); + if (doc) { + doc.__importLink = elt; + this.bootDocument(doc); + } + this.documents[url] = doc; + } + elt.import = doc; + } + parser.parseNext(); + }, + bootDocument: function(doc) { + this.loadSubtree(doc); + this.observer.observe(doc); + parser.parseNext(); + }, + loadedAll: function() { + parser.parseNext(); + } + }; + var importLoader = new Loader(importer.loaded.bind(importer), importer.loadedAll.bind(importer)); + importer.observer = new Observer(); + function isImportLink(elt) { + return isLinkRel(elt, IMPORT_LINK_TYPE); + } + function isLinkRel(elt, rel) { + return elt.localName === "link" && elt.getAttribute("rel") === rel; + } + function hasBaseURIAccessor(doc) { + return !!Object.getOwnPropertyDescriptor(doc, "baseURI"); + } + function makeDocument(resource, url) { + var doc = document.implementation.createHTMLDocument(IMPORT_LINK_TYPE); + doc._URL = url; + var base = doc.createElement("base"); + base.setAttribute("href", url); + if (!doc.baseURI && !hasBaseURIAccessor(doc)) { + Object.defineProperty(doc, "baseURI", { + value: url + }); + } + var meta = doc.createElement("meta"); + meta.setAttribute("charset", "utf-8"); + doc.head.appendChild(meta); + doc.head.appendChild(base); + doc.body.innerHTML = resource; + if (window.HTMLTemplateElement && HTMLTemplateElement.bootstrap) { + HTMLTemplateElement.bootstrap(doc); + } + return doc; + } + if (!document.baseURI) { + var baseURIDescriptor = { + get: function() { + var base = document.querySelector("base"); + return base ? base.href : window.location.href; + }, + configurable: true + }; + Object.defineProperty(document, "baseURI", baseURIDescriptor); + Object.defineProperty(rootDocument, "baseURI", baseURIDescriptor); + } + scope.importer = importer; + scope.importLoader = importLoader; +}); + +window.HTMLImports.addModule(function(scope) { + var parser = scope.parser; + var importer = scope.importer; + var dynamic = { + added: function(nodes) { + var owner, parsed, loading; + for (var i = 0, l = nodes.length, n; i < l && (n = nodes[i]); i++) { + if (!owner) { + owner = n.ownerDocument; + parsed = parser.isParsed(owner); + } + loading = this.shouldLoadNode(n); + if (loading) { + importer.loadNode(n); + } + if (this.shouldParseNode(n) && parsed) { + parser.parseDynamic(n, loading); + } + } + }, + shouldLoadNode: function(node) { + return node.nodeType === 1 && matches.call(node, importer.loadSelectorsForNode(node)); + }, + shouldParseNode: function(node) { + return node.nodeType === 1 && matches.call(node, parser.parseSelectorsForNode(node)); + } + }; + importer.observer.addCallback = dynamic.added.bind(dynamic); + var matches = HTMLElement.prototype.matches || HTMLElement.prototype.matchesSelector || HTMLElement.prototype.webkitMatchesSelector || HTMLElement.prototype.mozMatchesSelector || HTMLElement.prototype.msMatchesSelector; +}); + +(function(scope) { + var initializeModules = scope.initializeModules; + var isIE = scope.isIE; + if (scope.useNative) { + return; + } + if (isIE && typeof window.CustomEvent !== "function") { + window.CustomEvent = function(inType, params) { + params = params || {}; + var e = document.createEvent("CustomEvent"); + e.initCustomEvent(inType, Boolean(params.bubbles), Boolean(params.cancelable), params.detail); + e.preventDefault = function() { + Object.defineProperty(this, "defaultPrevented", { + get: function() { + return true; + } + }); + }; + return e; + }; + window.CustomEvent.prototype = window.Event.prototype; + } + initializeModules(); + var rootDocument = scope.rootDocument; + function bootstrap() { + window.HTMLImports.importer.bootDocument(rootDocument); + } + if (document.readyState === "complete" || document.readyState === "interactive" && !window.attachEvent) { + bootstrap(); + } else { + document.addEventListener("DOMContentLoaded", bootstrap); + } +})(window.HTMLImports); \ No newline at end of file diff --git a/static/bower_components/webcomponentsjs/HTMLImports.min.js b/static/bower_components/webcomponentsjs/HTMLImports.min.js new file mode 100644 index 0000000..c13580a --- /dev/null +++ b/static/bower_components/webcomponentsjs/HTMLImports.min.js @@ -0,0 +1,11 @@ +/** + * @license + * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt + */ +// @version 0.7.5 +"undefined"==typeof WeakMap&&!function(){var e=Object.defineProperty,t=Date.now()%1e9,n=function(){this.name="__st"+(1e9*Math.random()>>>0)+(t++ +"__")};n.prototype={set:function(t,n){var r=t[this.name];return r&&r[0]===t?r[1]=n:e(t,this.name,{value:[t,n],writable:!0}),this},get:function(e){var t;return(t=e[this.name])&&t[0]===e?t[1]:void 0},"delete":function(e){var t=e[this.name];return t&&t[0]===e?(t[0]=t[1]=void 0,!0):!1},has:function(e){var t=e[this.name];return t?t[0]===e:!1}},window.WeakMap=n}(),function(e){function t(e){_.push(e),w||(w=!0,f(r))}function n(e){return window.ShadowDOMPolyfill&&window.ShadowDOMPolyfill.wrapIfNeeded(e)||e}function r(){w=!1;var e=_;_=[],e.sort(function(e,t){return e.uid_-t.uid_});var t=!1;e.forEach(function(e){var n=e.takeRecords();o(e),n.length&&(e.callback_(n,e),t=!0)}),t&&r()}function o(e){e.nodes_.forEach(function(t){var n=v.get(t);n&&n.forEach(function(t){t.observer===e&&t.removeTransientObservers()})})}function i(e,t){for(var n=e;n;n=n.parentNode){var r=v.get(n);if(r)for(var o=0;o0){var o=n[r-1],i=m(o,e);if(i)return void(n[r-1]=i)}else t(this.observer);n[r]=e},addListeners:function(){this.addListeners_(this.target)},addListeners_:function(e){var t=this.options;t.attributes&&e.addEventListener("DOMAttrModified",this,!0),t.characterData&&e.addEventListener("DOMCharacterDataModified",this,!0),t.childList&&e.addEventListener("DOMNodeInserted",this,!0),(t.childList||t.subtree)&&e.addEventListener("DOMNodeRemoved",this,!0)},removeListeners:function(){this.removeListeners_(this.target)},removeListeners_:function(e){var t=this.options;t.attributes&&e.removeEventListener("DOMAttrModified",this,!0),t.characterData&&e.removeEventListener("DOMCharacterDataModified",this,!0),t.childList&&e.removeEventListener("DOMNodeInserted",this,!0),(t.childList||t.subtree)&&e.removeEventListener("DOMNodeRemoved",this,!0)},addTransientObserver:function(e){if(e!==this.target){this.addListeners_(e),this.transientObservedNodes.push(e);var t=v.get(e);t||v.set(e,t=[]),t.push(this)}},removeTransientObservers:function(){var e=this.transientObservedNodes;this.transientObservedNodes=[],e.forEach(function(e){this.removeListeners_(e);for(var t=v.get(e),n=0;nm&&(h=s[m]);m++)a(h)?(d++,n()):(h.addEventListener("load",r),h.addEventListener("error",i));else n()}function a(e){return l?e.__loaded||e["import"]&&"loading"!==e["import"].readyState:e.__importParsed}function s(e){for(var t,n=0,r=e.length;r>n&&(t=e[n]);n++)d(t)&&c(t)}function d(e){return"link"===e.localName&&"import"===e.rel}function c(e){var t=e["import"];t?o({target:e}):(e.addEventListener("load",o),e.addEventListener("error",o))}var u="import",l=Boolean(u in document.createElement("link")),h=Boolean(window.ShadowDOMPolyfill),m=function(e){return h?window.ShadowDOMPolyfill.wrapIfNeeded(e):e},p=m(document),f={get:function(){var e=window.HTMLImports.currentScript||document.currentScript||("complete"!==document.readyState?document.scripts[document.scripts.length-1]:null);return m(e)},configurable:!0};Object.defineProperty(document,"_currentScript",f),Object.defineProperty(p,"_currentScript",f);var v=/Trident/.test(navigator.userAgent),b=v?"complete":"interactive",g="readystatechange";l&&(new MutationObserver(function(e){for(var t,n=0,r=e.length;r>n&&(t=e[n]);n++)t.addedNodes&&s(t.addedNodes)}).observe(document.head,{childList:!0}),function(){if("loading"===document.readyState)for(var e,t=document.querySelectorAll("link[rel=import]"),n=0,r=t.length;r>n&&(e=t[n]);n++)c(e)}()),t(function(e){window.HTMLImports.ready=!0,window.HTMLImports.readyTime=(new Date).getTime();var t=p.createEvent("CustomEvent");t.initCustomEvent("HTMLImportsLoaded",!0,!0,e),p.dispatchEvent(t)}),e.IMPORT_LINK_TYPE=u,e.useNative=l,e.rootDocument=p,e.whenReady=t,e.isIE=v}(window.HTMLImports),function(e){var t=[],n=function(e){t.push(e)},r=function(){t.forEach(function(t){t(e)})};e.addModule=n,e.initializeModules=r}(window.HTMLImports),window.HTMLImports.addModule(function(e){var t=/(url\()([^)]*)(\))/g,n=/(@import[\s]+(?!url\())([^;]*)(;)/g,r={resolveUrlsInStyle:function(e,t){var n=e.ownerDocument,r=n.createElement("a");return e.textContent=this.resolveUrlsInCssText(e.textContent,t,r),e},resolveUrlsInCssText:function(e,r,o){var i=this.replaceUrls(e,o,r,t);return i=this.replaceUrls(i,o,r,n)},replaceUrls:function(e,t,n,r){return e.replace(r,function(e,r,o,i){var a=o.replace(/["']/g,"");return n&&(a=new URL(a,n).href),t.href=a,a=t.href,r+"'"+a+"'"+i})}};e.path=r}),window.HTMLImports.addModule(function(e){var t={async:!0,ok:function(e){return e.status>=200&&e.status<300||304===e.status||0===e.status},load:function(n,r,o){var i=new XMLHttpRequest;return(e.flags.debug||e.flags.bust)&&(n+="?"+Math.random()),i.open("GET",n,t.async),i.addEventListener("readystatechange",function(e){if(4===i.readyState){var n=i.getResponseHeader("Location"),a=null;if(n)var a="/"===n.substr(0,1)?location.origin+n:n;r.call(o,!t.ok(i)&&i,i.response||i.responseText,a)}}),i.send(),i},loadDocument:function(e,t,n){this.load(e,t,n).responseType="document"}};e.xhr=t}),window.HTMLImports.addModule(function(e){var t=e.xhr,n=e.flags,r=function(e,t){this.cache={},this.onload=e,this.oncomplete=t,this.inflight=0,this.pending={}};r.prototype={addNodes:function(e){this.inflight+=e.length;for(var t,n=0,r=e.length;r>n&&(t=e[n]);n++)this.require(t);this.checkDone()},addNode:function(e){this.inflight++,this.require(e),this.checkDone()},require:function(e){var t=e.src||e.href;e.__nodeUrl=t,this.dedupe(t,e)||this.fetch(t,e)},dedupe:function(e,t){if(this.pending[e])return this.pending[e].push(t),!0;return this.cache[e]?(this.onload(e,t,this.cache[e]),this.tail(),!0):(this.pending[e]=[t],!1)},fetch:function(e,r){if(n.load&&console.log("fetch",e,r),e)if(e.match(/^data:/)){var o=e.split(","),i=o[0],a=o[1];a=i.indexOf(";base64")>-1?atob(a):decodeURIComponent(a),setTimeout(function(){this.receive(e,r,null,a)}.bind(this),0)}else{var s=function(t,n,o){this.receive(e,r,t,n,o)}.bind(this);t.load(e,s)}else setTimeout(function(){this.receive(e,r,{error:"href must be specified"},null)}.bind(this),0)},receive:function(e,t,n,r,o){this.cache[e]=r;for(var i,a=this.pending[e],s=0,d=a.length;d>s&&(i=a[s]);s++)this.onload(e,i,r,n,o),this.tail();this.pending[e]=null},tail:function(){--this.inflight,this.checkDone()},checkDone:function(){this.inflight||this.oncomplete()}},e.Loader=r}),window.HTMLImports.addModule(function(e){var t=function(e){this.addCallback=e,this.mo=new MutationObserver(this.handler.bind(this))};t.prototype={handler:function(e){for(var t,n=0,r=e.length;r>n&&(t=e[n]);n++)"childList"===t.type&&t.addedNodes.length&&this.addedNodes(t.addedNodes)},addedNodes:function(e){this.addCallback&&this.addCallback(e);for(var t,n=0,r=e.length;r>n&&(t=e[n]);n++)t.children&&t.children.length&&this.addedNodes(t.children)},observe:function(e){this.mo.observe(e,{childList:!0,subtree:!0})}},e.Observer=t}),window.HTMLImports.addModule(function(e){function t(e){return"link"===e.localName&&e.rel===u}function n(e){var t=r(e);return"data:text/javascript;charset=utf-8,"+encodeURIComponent(t)}function r(e){return e.textContent+o(e)}function o(e){var t=e.ownerDocument;t.__importedScripts=t.__importedScripts||0;var n=e.ownerDocument.baseURI,r=t.__importedScripts?"-"+t.__importedScripts:"";return t.__importedScripts++,"\n//# sourceURL="+n+r+".js\n"}function i(e){var t=e.ownerDocument.createElement("style");return t.textContent=e.textContent,a.resolveUrlsInStyle(t),t}var a=e.path,s=e.rootDocument,d=e.flags,c=e.isIE,u=e.IMPORT_LINK_TYPE,l="link[rel="+u+"]",h={documentSelectors:l,importsSelectors:[l,"link[rel=stylesheet]","style","script:not([type])",'script[type="application/javascript"]','script[type="text/javascript"]'].join(","),map:{link:"parseLink",script:"parseScript",style:"parseStyle"},dynamicElements:[],parseNext:function(){var e=this.nextToParse();e&&this.parse(e)},parse:function(e){if(this.isParsed(e))return void(d.parse&&console.log("[%s] is already parsed",e.localName));var t=this[this.map[e.localName]];t&&(this.markParsing(e),t.call(this,e))},parseDynamic:function(e,t){this.dynamicElements.push(e),t||this.parseNext()},markParsing:function(e){d.parse&&console.log("parsing",e),this.parsingElement=e},markParsingComplete:function(e){e.__importParsed=!0,this.markDynamicParsingComplete(e),e.__importElement&&(e.__importElement.__importParsed=!0,this.markDynamicParsingComplete(e.__importElement)),this.parsingElement=null,d.parse&&console.log("completed",e)},markDynamicParsingComplete:function(e){var t=this.dynamicElements.indexOf(e);t>=0&&this.dynamicElements.splice(t,1)},parseImport:function(e){if(window.HTMLImports.__importsParsingHook&&window.HTMLImports.__importsParsingHook(e),e["import"]&&(e["import"].__importParsed=!0),this.markParsingComplete(e),e.dispatchEvent(e.__resource&&!e.__error?new CustomEvent("load",{bubbles:!1}):new CustomEvent("error",{bubbles:!1})),e.__pending)for(var t;e.__pending.length;)t=e.__pending.shift(),t&&t({target:e});this.parseNext()},parseLink:function(e){t(e)?this.parseImport(e):(e.href=e.href,this.parseGeneric(e))},parseStyle:function(e){var t=e;e=i(e),t.__appliedElement=e,e.__importElement=t,this.parseGeneric(e)},parseGeneric:function(e){this.trackElement(e),this.addElementToDocument(e)},rootImportForElement:function(e){for(var t=e;t.ownerDocument.__importLink;)t=t.ownerDocument.__importLink;return t},addElementToDocument:function(e){var t=this.rootImportForElement(e.__importElement||e);t.parentNode.insertBefore(e,t)},trackElement:function(e,t){var n=this,r=function(r){t&&t(r),n.markParsingComplete(e),n.parseNext()};if(e.addEventListener("load",r),e.addEventListener("error",r),c&&"style"===e.localName){var o=!1;if(-1==e.textContent.indexOf("@import"))o=!0;else if(e.sheet){o=!0;for(var i,a=e.sheet.cssRules,s=a?a.length:0,d=0;s>d&&(i=a[d]);d++)i.type===CSSRule.IMPORT_RULE&&(o=o&&Boolean(i.styleSheet))}o&&setTimeout(function(){e.dispatchEvent(new CustomEvent("load",{bubbles:!1}))})}},parseScript:function(t){var r=document.createElement("script");r.__importElement=t,r.src=t.src?t.src:n(t),e.currentScript=t,this.trackElement(r,function(t){r.parentNode.removeChild(r),e.currentScript=null}),this.addElementToDocument(r)},nextToParse:function(){return this._mayParse=[],!this.parsingElement&&(this.nextToParseInDoc(s)||this.nextToParseDynamic())},nextToParseInDoc:function(e,n){if(e&&this._mayParse.indexOf(e)<0){this._mayParse.push(e);for(var r,o=e.querySelectorAll(this.parseSelectorsForNode(e)),i=0,a=o.length;a>i&&(r=o[i]);i++)if(!this.isParsed(r))return this.hasResource(r)?t(r)?this.nextToParseInDoc(r["import"],r):r:void 0}return n},nextToParseDynamic:function(){return this.dynamicElements[0]},parseSelectorsForNode:function(e){var t=e.ownerDocument||e;return t===s?this.documentSelectors:this.importsSelectors},isParsed:function(e){return e.__importParsed},needsDynamicParsing:function(e){return this.dynamicElements.indexOf(e)>=0},hasResource:function(e){return t(e)&&void 0===e["import"]?!1:!0}};e.parser=h,e.IMPORT_SELECTOR=l}),window.HTMLImports.addModule(function(e){function t(e){return n(e,a)}function n(e,t){return"link"===e.localName&&e.getAttribute("rel")===t}function r(e){return!!Object.getOwnPropertyDescriptor(e,"baseURI")}function o(e,t){var n=document.implementation.createHTMLDocument(a);n._URL=t;var o=n.createElement("base");o.setAttribute("href",t),n.baseURI||r(n)||Object.defineProperty(n,"baseURI",{value:t});var i=n.createElement("meta");return i.setAttribute("charset","utf-8"),n.head.appendChild(i),n.head.appendChild(o),n.body.innerHTML=e,window.HTMLTemplateElement&&HTMLTemplateElement.bootstrap&&HTMLTemplateElement.bootstrap(n),n}var i=e.flags,a=e.IMPORT_LINK_TYPE,s=e.IMPORT_SELECTOR,d=e.rootDocument,c=e.Loader,u=e.Observer,l=e.parser,h={documents:{},documentPreloadSelectors:s,importsPreloadSelectors:[s].join(","),loadNode:function(e){m.addNode(e)},loadSubtree:function(e){var t=this.marshalNodes(e);m.addNodes(t)},marshalNodes:function(e){return e.querySelectorAll(this.loadSelectorsForNode(e))},loadSelectorsForNode:function(e){var t=e.ownerDocument||e;return t===d?this.documentPreloadSelectors:this.importsPreloadSelectors},loaded:function(e,n,r,a,s){if(i.load&&console.log("loaded",e,n),n.__resource=r,n.__error=a,t(n)){var d=this.documents[e];void 0===d&&(d=a?null:o(r,s||e),d&&(d.__importLink=n,this.bootDocument(d)),this.documents[e]=d),n["import"]=d}l.parseNext()},bootDocument:function(e){this.loadSubtree(e),this.observer.observe(e),l.parseNext()},loadedAll:function(){l.parseNext()}},m=new c(h.loaded.bind(h),h.loadedAll.bind(h));if(h.observer=new u,!document.baseURI){var p={get:function(){var e=document.querySelector("base");return e?e.href:window.location.href},configurable:!0};Object.defineProperty(document,"baseURI",p),Object.defineProperty(d,"baseURI",p)}e.importer=h,e.importLoader=m}),window.HTMLImports.addModule(function(e){var t=e.parser,n=e.importer,r={added:function(e){for(var r,o,i,a,s=0,d=e.length;d>s&&(a=e[s]);s++)r||(r=a.ownerDocument,o=t.isParsed(r)),i=this.shouldLoadNode(a),i&&n.loadNode(a),this.shouldParseNode(a)&&o&&t.parseDynamic(a,i)},shouldLoadNode:function(e){return 1===e.nodeType&&o.call(e,n.loadSelectorsForNode(e))},shouldParseNode:function(e){return 1===e.nodeType&&o.call(e,t.parseSelectorsForNode(e))}};n.observer.addCallback=r.added.bind(r);var o=HTMLElement.prototype.matches||HTMLElement.prototype.matchesSelector||HTMLElement.prototype.webkitMatchesSelector||HTMLElement.prototype.mozMatchesSelector||HTMLElement.prototype.msMatchesSelector}),function(e){function t(){window.HTMLImports.importer.bootDocument(o)}var n=e.initializeModules,r=e.isIE;if(!e.useNative){r&&"function"!=typeof window.CustomEvent&&(window.CustomEvent=function(e,t){t=t||{};var n=document.createEvent("CustomEvent");return n.initCustomEvent(e,Boolean(t.bubbles),Boolean(t.cancelable),t.detail),n.preventDefault=function(){Object.defineProperty(this,"defaultPrevented",{get:function(){return!0}})},n},window.CustomEvent.prototype=window.Event.prototype),n();var o=e.rootDocument;"complete"===document.readyState||"interactive"===document.readyState&&!window.attachEvent?t():document.addEventListener("DOMContentLoaded",t)}}(window.HTMLImports); \ No newline at end of file diff --git a/static/bower_components/webcomponentsjs/MutationObserver.js b/static/bower_components/webcomponentsjs/MutationObserver.js new file mode 100644 index 0000000..b8fb3cf --- /dev/null +++ b/static/bower_components/webcomponentsjs/MutationObserver.js @@ -0,0 +1,344 @@ +/** + * @license + * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt + */ +// @version 0.7.5 +if (typeof WeakMap === "undefined") { + (function() { + var defineProperty = Object.defineProperty; + var counter = Date.now() % 1e9; + var WeakMap = function() { + this.name = "__st" + (Math.random() * 1e9 >>> 0) + (counter++ + "__"); + }; + WeakMap.prototype = { + set: function(key, value) { + var entry = key[this.name]; + if (entry && entry[0] === key) entry[1] = value; else defineProperty(key, this.name, { + value: [ key, value ], + writable: true + }); + return this; + }, + get: function(key) { + var entry; + return (entry = key[this.name]) && entry[0] === key ? entry[1] : undefined; + }, + "delete": function(key) { + var entry = key[this.name]; + if (!entry || entry[0] !== key) return false; + entry[0] = entry[1] = undefined; + return true; + }, + has: function(key) { + var entry = key[this.name]; + if (!entry) return false; + return entry[0] === key; + } + }; + window.WeakMap = WeakMap; + })(); +} + +(function(global) { + var registrationsTable = new WeakMap(); + var setImmediate; + if (/Trident|Edge/.test(navigator.userAgent)) { + setImmediate = setTimeout; + } else if (window.setImmediate) { + setImmediate = window.setImmediate; + } else { + var setImmediateQueue = []; + var sentinel = String(Math.random()); + window.addEventListener("message", function(e) { + if (e.data === sentinel) { + var queue = setImmediateQueue; + setImmediateQueue = []; + queue.forEach(function(func) { + func(); + }); + } + }); + setImmediate = function(func) { + setImmediateQueue.push(func); + window.postMessage(sentinel, "*"); + }; + } + var isScheduled = false; + var scheduledObservers = []; + function scheduleCallback(observer) { + scheduledObservers.push(observer); + if (!isScheduled) { + isScheduled = true; + setImmediate(dispatchCallbacks); + } + } + function wrapIfNeeded(node) { + return window.ShadowDOMPolyfill && window.ShadowDOMPolyfill.wrapIfNeeded(node) || node; + } + function dispatchCallbacks() { + isScheduled = false; + var observers = scheduledObservers; + scheduledObservers = []; + observers.sort(function(o1, o2) { + return o1.uid_ - o2.uid_; + }); + var anyNonEmpty = false; + observers.forEach(function(observer) { + var queue = observer.takeRecords(); + removeTransientObserversFor(observer); + if (queue.length) { + observer.callback_(queue, observer); + anyNonEmpty = true; + } + }); + if (anyNonEmpty) dispatchCallbacks(); + } + function removeTransientObserversFor(observer) { + observer.nodes_.forEach(function(node) { + var registrations = registrationsTable.get(node); + if (!registrations) return; + registrations.forEach(function(registration) { + if (registration.observer === observer) registration.removeTransientObservers(); + }); + }); + } + function forEachAncestorAndObserverEnqueueRecord(target, callback) { + for (var node = target; node; node = node.parentNode) { + var registrations = registrationsTable.get(node); + if (registrations) { + for (var j = 0; j < registrations.length; j++) { + var registration = registrations[j]; + var options = registration.options; + if (node !== target && !options.subtree) continue; + var record = callback(options); + if (record) registration.enqueue(record); + } + } + } + } + var uidCounter = 0; + function JsMutationObserver(callback) { + this.callback_ = callback; + this.nodes_ = []; + this.records_ = []; + this.uid_ = ++uidCounter; + } + JsMutationObserver.prototype = { + observe: function(target, options) { + target = wrapIfNeeded(target); + if (!options.childList && !options.attributes && !options.characterData || options.attributeOldValue && !options.attributes || options.attributeFilter && options.attributeFilter.length && !options.attributes || options.characterDataOldValue && !options.characterData) { + throw new SyntaxError(); + } + var registrations = registrationsTable.get(target); + if (!registrations) registrationsTable.set(target, registrations = []); + var registration; + for (var i = 0; i < registrations.length; i++) { + if (registrations[i].observer === this) { + registration = registrations[i]; + registration.removeListeners(); + registration.options = options; + break; + } + } + if (!registration) { + registration = new Registration(this, target, options); + registrations.push(registration); + this.nodes_.push(target); + } + registration.addListeners(); + }, + disconnect: function() { + this.nodes_.forEach(function(node) { + var registrations = registrationsTable.get(node); + for (var i = 0; i < registrations.length; i++) { + var registration = registrations[i]; + if (registration.observer === this) { + registration.removeListeners(); + registrations.splice(i, 1); + break; + } + } + }, this); + this.records_ = []; + }, + takeRecords: function() { + var copyOfRecords = this.records_; + this.records_ = []; + return copyOfRecords; + } + }; + function MutationRecord(type, target) { + this.type = type; + this.target = target; + this.addedNodes = []; + this.removedNodes = []; + this.previousSibling = null; + this.nextSibling = null; + this.attributeName = null; + this.attributeNamespace = null; + this.oldValue = null; + } + function copyMutationRecord(original) { + var record = new MutationRecord(original.type, original.target); + record.addedNodes = original.addedNodes.slice(); + record.removedNodes = original.removedNodes.slice(); + record.previousSibling = original.previousSibling; + record.nextSibling = original.nextSibling; + record.attributeName = original.attributeName; + record.attributeNamespace = original.attributeNamespace; + record.oldValue = original.oldValue; + return record; + } + var currentRecord, recordWithOldValue; + function getRecord(type, target) { + return currentRecord = new MutationRecord(type, target); + } + function getRecordWithOldValue(oldValue) { + if (recordWithOldValue) return recordWithOldValue; + recordWithOldValue = copyMutationRecord(currentRecord); + recordWithOldValue.oldValue = oldValue; + return recordWithOldValue; + } + function clearRecords() { + currentRecord = recordWithOldValue = undefined; + } + function recordRepresentsCurrentMutation(record) { + return record === recordWithOldValue || record === currentRecord; + } + function selectRecord(lastRecord, newRecord) { + if (lastRecord === newRecord) return lastRecord; + if (recordWithOldValue && recordRepresentsCurrentMutation(lastRecord)) return recordWithOldValue; + return null; + } + function Registration(observer, target, options) { + this.observer = observer; + this.target = target; + this.options = options; + this.transientObservedNodes = []; + } + Registration.prototype = { + enqueue: function(record) { + var records = this.observer.records_; + var length = records.length; + if (records.length > 0) { + var lastRecord = records[length - 1]; + var recordToReplaceLast = selectRecord(lastRecord, record); + if (recordToReplaceLast) { + records[length - 1] = recordToReplaceLast; + return; + } + } else { + scheduleCallback(this.observer); + } + records[length] = record; + }, + addListeners: function() { + this.addListeners_(this.target); + }, + addListeners_: function(node) { + var options = this.options; + if (options.attributes) node.addEventListener("DOMAttrModified", this, true); + if (options.characterData) node.addEventListener("DOMCharacterDataModified", this, true); + if (options.childList) node.addEventListener("DOMNodeInserted", this, true); + if (options.childList || options.subtree) node.addEventListener("DOMNodeRemoved", this, true); + }, + removeListeners: function() { + this.removeListeners_(this.target); + }, + removeListeners_: function(node) { + var options = this.options; + if (options.attributes) node.removeEventListener("DOMAttrModified", this, true); + if (options.characterData) node.removeEventListener("DOMCharacterDataModified", this, true); + if (options.childList) node.removeEventListener("DOMNodeInserted", this, true); + if (options.childList || options.subtree) node.removeEventListener("DOMNodeRemoved", this, true); + }, + addTransientObserver: function(node) { + if (node === this.target) return; + this.addListeners_(node); + this.transientObservedNodes.push(node); + var registrations = registrationsTable.get(node); + if (!registrations) registrationsTable.set(node, registrations = []); + registrations.push(this); + }, + removeTransientObservers: function() { + var transientObservedNodes = this.transientObservedNodes; + this.transientObservedNodes = []; + transientObservedNodes.forEach(function(node) { + this.removeListeners_(node); + var registrations = registrationsTable.get(node); + for (var i = 0; i < registrations.length; i++) { + if (registrations[i] === this) { + registrations.splice(i, 1); + break; + } + } + }, this); + }, + handleEvent: function(e) { + e.stopImmediatePropagation(); + switch (e.type) { + case "DOMAttrModified": + var name = e.attrName; + var namespace = e.relatedNode.namespaceURI; + var target = e.target; + var record = new getRecord("attributes", target); + record.attributeName = name; + record.attributeNamespace = namespace; + var oldValue = e.attrChange === MutationEvent.ADDITION ? null : e.prevValue; + forEachAncestorAndObserverEnqueueRecord(target, function(options) { + if (!options.attributes) return; + if (options.attributeFilter && options.attributeFilter.length && options.attributeFilter.indexOf(name) === -1 && options.attributeFilter.indexOf(namespace) === -1) { + return; + } + if (options.attributeOldValue) return getRecordWithOldValue(oldValue); + return record; + }); + break; + + case "DOMCharacterDataModified": + var target = e.target; + var record = getRecord("characterData", target); + var oldValue = e.prevValue; + forEachAncestorAndObserverEnqueueRecord(target, function(options) { + if (!options.characterData) return; + if (options.characterDataOldValue) return getRecordWithOldValue(oldValue); + return record; + }); + break; + + case "DOMNodeRemoved": + this.addTransientObserver(e.target); + + case "DOMNodeInserted": + var changedNode = e.target; + var addedNodes, removedNodes; + if (e.type === "DOMNodeInserted") { + addedNodes = [ changedNode ]; + removedNodes = []; + } else { + addedNodes = []; + removedNodes = [ changedNode ]; + } + var previousSibling = changedNode.previousSibling; + var nextSibling = changedNode.nextSibling; + var record = getRecord("childList", e.target.parentNode); + record.addedNodes = addedNodes; + record.removedNodes = removedNodes; + record.previousSibling = previousSibling; + record.nextSibling = nextSibling; + forEachAncestorAndObserverEnqueueRecord(e.relatedNode, function(options) { + if (!options.childList) return; + return record; + }); + } + clearRecords(); + } + }; + global.JsMutationObserver = JsMutationObserver; + if (!global.MutationObserver) global.MutationObserver = JsMutationObserver; +})(this); \ No newline at end of file diff --git a/static/bower_components/webcomponentsjs/MutationObserver.min.js b/static/bower_components/webcomponentsjs/MutationObserver.min.js new file mode 100644 index 0000000..45b4cbf --- /dev/null +++ b/static/bower_components/webcomponentsjs/MutationObserver.min.js @@ -0,0 +1,11 @@ +/** + * @license + * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt + */ +// @version 0.7.5 +"undefined"==typeof WeakMap&&!function(){var e=Object.defineProperty,t=Date.now()%1e9,r=function(){this.name="__st"+(1e9*Math.random()>>>0)+(t++ +"__")};r.prototype={set:function(t,r){var i=t[this.name];return i&&i[0]===t?i[1]=r:e(t,this.name,{value:[t,r],writable:!0}),this},get:function(e){var t;return(t=e[this.name])&&t[0]===e?t[1]:void 0},"delete":function(e){var t=e[this.name];return t&&t[0]===e?(t[0]=t[1]=void 0,!0):!1},has:function(e){var t=e[this.name];return t?t[0]===e:!1}},window.WeakMap=r}(),function(e){function t(e){O.push(e),N||(N=!0,b(i))}function r(e){return window.ShadowDOMPolyfill&&window.ShadowDOMPolyfill.wrapIfNeeded(e)||e}function i(){N=!1;var e=O;O=[],e.sort(function(e,t){return e.uid_-t.uid_});var t=!1;e.forEach(function(e){var r=e.takeRecords();n(e),r.length&&(e.callback_(r,e),t=!0)}),t&&i()}function n(e){e.nodes_.forEach(function(t){var r=p.get(t);r&&r.forEach(function(t){t.observer===e&&t.removeTransientObservers()})})}function a(e,t){for(var r=e;r;r=r.parentNode){var i=p.get(r);if(i)for(var n=0;n0){var n=r[i-1],a=l(n,e);if(a)return void(r[i-1]=a)}else t(this.observer);r[i]=e},addListeners:function(){this.addListeners_(this.target)},addListeners_:function(e){var t=this.options;t.attributes&&e.addEventListener("DOMAttrModified",this,!0),t.characterData&&e.addEventListener("DOMCharacterDataModified",this,!0),t.childList&&e.addEventListener("DOMNodeInserted",this,!0),(t.childList||t.subtree)&&e.addEventListener("DOMNodeRemoved",this,!0)},removeListeners:function(){this.removeListeners_(this.target)},removeListeners_:function(e){var t=this.options;t.attributes&&e.removeEventListener("DOMAttrModified",this,!0),t.characterData&&e.removeEventListener("DOMCharacterDataModified",this,!0),t.childList&&e.removeEventListener("DOMNodeInserted",this,!0),(t.childList||t.subtree)&&e.removeEventListener("DOMNodeRemoved",this,!0)},addTransientObserver:function(e){if(e!==this.target){this.addListeners_(e),this.transientObservedNodes.push(e);var t=p.get(e);t||p.set(e,t=[]),t.push(this)}},removeTransientObservers:function(){var e=this.transientObservedNodes;this.transientObservedNodes=[],e.forEach(function(e){this.removeListeners_(e);for(var t=p.get(e),r=0;r` tags in the main document block the loading of such imports. This is to ensure the imports have loaded and any registered elements in them have been upgraded. + +The webcomponents.js and webcomponents-lite.js polyfills parse element definitions and handle their upgrade asynchronously. If prematurely fetching the element from the DOM before it has an opportunity to upgrade, you'll be working with an `HTMLUnknownElement`. + +For these situations (or when you need an approximate replacement for the Polymer 0.5 `polymer-ready` behavior), you can use the `WebComponentsReady` event as a signal before interacting with the element. The criteria for this event to fire is all Custom Elements with definitions registered by the time HTML Imports available at load time have loaded have upgraded. + +```js +window.addEventListener('WebComponentsReady', function(e) { + // imports are loaded and elements have been registered + console.log('Components are ready'); +}); +``` + +## Known Issues + + * [Custom element's constructor property is unreliable](#constructor) + * [Contenteditable elements do not trigger MutationObserver](#contentedit) + * [ShadowCSS: :host-context(...):host(...) doesn't work](#hostcontext) + * [execCommand isn't supported under Shadow DOM](#execcommand) + +### Custom element's constructor property is unreliable +See [#215](https://github.com/webcomponents/webcomponentsjs/issues/215) for background. + +In Safari and IE, instances of Custom Elements have a `constructor` property of `HTMLUnknownElementConstructor` and `HTMLUnknownElement`, respectively. It's unsafe to rely on this property for checking element types. + +It's worth noting that `customElement.__proto__.__proto__.constructor` is `HTMLElementPrototype` and that the prototype chain isn't modified by the polyfills(onto `ElementPrototype`, etc.) + +### Contenteditable elements do not trigger MutationObserver +Using the MutationObserver polyfill, it isn't possible to monitor mutations of an element marked `contenteditable`. +See [the mailing list](https://groups.google.com/forum/#!msg/polymer-dev/LHdtRVXXVsA/v1sGoiTYWUkJ) + +### ShadowCSS: :host-context(...):host(...) doesn't work +See [#16](https://github.com/webcomponents/webcomponentsjs/issues/16) for background. + +Under the shadow DOM polyfill, rules like: +``` +:host-context(.foo):host(.bar) {...} +``` +don't work, despite working under native Shadow DOM. The solution is to use `polyfill-next-selector` like: + +``` +polyfill-next-selector { content: '.foo :host.bar, :host.foo.bar'; } +``` + +### execCommand and contenteditable isn't supported under Shadow DOM +See [#212](https://github.com/webcomponents/webcomponentsjs/issues/212) + +`execCommand`, and `contenteditable` aren't supported under the ShadowDOM polyfill, with commands that insert or remove nodes being especially prone to failure. diff --git a/static/bower_components/webcomponentsjs/ShadowDOM.js b/static/bower_components/webcomponentsjs/ShadowDOM.js new file mode 100644 index 0000000..dc67ad9 --- /dev/null +++ b/static/bower_components/webcomponentsjs/ShadowDOM.js @@ -0,0 +1,4414 @@ +/** + * @license + * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt + */ +// @version 0.7.5 +if (typeof WeakMap === "undefined") { + (function() { + var defineProperty = Object.defineProperty; + var counter = Date.now() % 1e9; + var WeakMap = function() { + this.name = "__st" + (Math.random() * 1e9 >>> 0) + (counter++ + "__"); + }; + WeakMap.prototype = { + set: function(key, value) { + var entry = key[this.name]; + if (entry && entry[0] === key) entry[1] = value; else defineProperty(key, this.name, { + value: [ key, value ], + writable: true + }); + return this; + }, + get: function(key) { + var entry; + return (entry = key[this.name]) && entry[0] === key ? entry[1] : undefined; + }, + "delete": function(key) { + var entry = key[this.name]; + if (!entry || entry[0] !== key) return false; + entry[0] = entry[1] = undefined; + return true; + }, + has: function(key) { + var entry = key[this.name]; + if (!entry) return false; + return entry[0] === key; + } + }; + window.WeakMap = WeakMap; + })(); +} + +window.ShadowDOMPolyfill = {}; + +(function(scope) { + "use strict"; + var constructorTable = new WeakMap(); + var nativePrototypeTable = new WeakMap(); + var wrappers = Object.create(null); + function detectEval() { + if (typeof chrome !== "undefined" && chrome.app && chrome.app.runtime) { + return false; + } + if (navigator.getDeviceStorage) { + return false; + } + try { + var f = new Function("return true;"); + return f(); + } catch (ex) { + return false; + } + } + var hasEval = detectEval(); + function assert(b) { + if (!b) throw new Error("Assertion failed"); + } + var defineProperty = Object.defineProperty; + var getOwnPropertyNames = Object.getOwnPropertyNames; + var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + function mixin(to, from) { + var names = getOwnPropertyNames(from); + for (var i = 0; i < names.length; i++) { + var name = names[i]; + defineProperty(to, name, getOwnPropertyDescriptor(from, name)); + } + return to; + } + function mixinStatics(to, from) { + var names = getOwnPropertyNames(from); + for (var i = 0; i < names.length; i++) { + var name = names[i]; + switch (name) { + case "arguments": + case "caller": + case "length": + case "name": + case "prototype": + case "toString": + continue; + } + defineProperty(to, name, getOwnPropertyDescriptor(from, name)); + } + return to; + } + function oneOf(object, propertyNames) { + for (var i = 0; i < propertyNames.length; i++) { + if (propertyNames[i] in object) return propertyNames[i]; + } + } + var nonEnumerableDataDescriptor = { + value: undefined, + configurable: true, + enumerable: false, + writable: true + }; + function defineNonEnumerableDataProperty(object, name, value) { + nonEnumerableDataDescriptor.value = value; + defineProperty(object, name, nonEnumerableDataDescriptor); + } + getOwnPropertyNames(window); + function getWrapperConstructor(node, opt_instance) { + var nativePrototype = node.__proto__ || Object.getPrototypeOf(node); + if (isFirefox) { + try { + getOwnPropertyNames(nativePrototype); + } catch (error) { + nativePrototype = nativePrototype.__proto__; + } + } + var wrapperConstructor = constructorTable.get(nativePrototype); + if (wrapperConstructor) return wrapperConstructor; + var parentWrapperConstructor = getWrapperConstructor(nativePrototype); + var GeneratedWrapper = createWrapperConstructor(parentWrapperConstructor); + registerInternal(nativePrototype, GeneratedWrapper, opt_instance); + return GeneratedWrapper; + } + function addForwardingProperties(nativePrototype, wrapperPrototype) { + installProperty(nativePrototype, wrapperPrototype, true); + } + function registerInstanceProperties(wrapperPrototype, instanceObject) { + installProperty(instanceObject, wrapperPrototype, false); + } + var isFirefox = /Firefox/.test(navigator.userAgent); + var dummyDescriptor = { + get: function() {}, + set: function(v) {}, + configurable: true, + enumerable: true + }; + function isEventHandlerName(name) { + return /^on[a-z]+$/.test(name); + } + function isIdentifierName(name) { + return /^[a-zA-Z_$][a-zA-Z_$0-9]*$/.test(name); + } + function getGetter(name) { + return hasEval && isIdentifierName(name) ? new Function("return this.__impl4cf1e782hg__." + name) : function() { + return this.__impl4cf1e782hg__[name]; + }; + } + function getSetter(name) { + return hasEval && isIdentifierName(name) ? new Function("v", "this.__impl4cf1e782hg__." + name + " = v") : function(v) { + this.__impl4cf1e782hg__[name] = v; + }; + } + function getMethod(name) { + return hasEval && isIdentifierName(name) ? new Function("return this.__impl4cf1e782hg__." + name + ".apply(this.__impl4cf1e782hg__, arguments)") : function() { + return this.__impl4cf1e782hg__[name].apply(this.__impl4cf1e782hg__, arguments); + }; + } + function getDescriptor(source, name) { + try { + return Object.getOwnPropertyDescriptor(source, name); + } catch (ex) { + return dummyDescriptor; + } + } + var isBrokenSafari = function() { + var descr = Object.getOwnPropertyDescriptor(Node.prototype, "nodeType"); + return descr && !descr.get && !descr.set; + }(); + function installProperty(source, target, allowMethod, opt_blacklist) { + var names = getOwnPropertyNames(source); + for (var i = 0; i < names.length; i++) { + var name = names[i]; + if (name === "polymerBlackList_") continue; + if (name in target) continue; + if (source.polymerBlackList_ && source.polymerBlackList_[name]) continue; + if (isFirefox) { + source.__lookupGetter__(name); + } + var descriptor = getDescriptor(source, name); + var getter, setter; + if (typeof descriptor.value === "function") { + if (allowMethod) { + target[name] = getMethod(name); + } + continue; + } + var isEvent = isEventHandlerName(name); + if (isEvent) getter = scope.getEventHandlerGetter(name); else getter = getGetter(name); + if (descriptor.writable || descriptor.set || isBrokenSafari) { + if (isEvent) setter = scope.getEventHandlerSetter(name); else setter = getSetter(name); + } + var configurable = isBrokenSafari || descriptor.configurable; + defineProperty(target, name, { + get: getter, + set: setter, + configurable: configurable, + enumerable: descriptor.enumerable + }); + } + } + function register(nativeConstructor, wrapperConstructor, opt_instance) { + if (nativeConstructor == null) { + return; + } + var nativePrototype = nativeConstructor.prototype; + registerInternal(nativePrototype, wrapperConstructor, opt_instance); + mixinStatics(wrapperConstructor, nativeConstructor); + } + function registerInternal(nativePrototype, wrapperConstructor, opt_instance) { + var wrapperPrototype = wrapperConstructor.prototype; + assert(constructorTable.get(nativePrototype) === undefined); + constructorTable.set(nativePrototype, wrapperConstructor); + nativePrototypeTable.set(wrapperPrototype, nativePrototype); + addForwardingProperties(nativePrototype, wrapperPrototype); + if (opt_instance) registerInstanceProperties(wrapperPrototype, opt_instance); + defineNonEnumerableDataProperty(wrapperPrototype, "constructor", wrapperConstructor); + wrapperConstructor.prototype = wrapperPrototype; + } + function isWrapperFor(wrapperConstructor, nativeConstructor) { + return constructorTable.get(nativeConstructor.prototype) === wrapperConstructor; + } + function registerObject(object) { + var nativePrototype = Object.getPrototypeOf(object); + var superWrapperConstructor = getWrapperConstructor(nativePrototype); + var GeneratedWrapper = createWrapperConstructor(superWrapperConstructor); + registerInternal(nativePrototype, GeneratedWrapper, object); + return GeneratedWrapper; + } + function createWrapperConstructor(superWrapperConstructor) { + function GeneratedWrapper(node) { + superWrapperConstructor.call(this, node); + } + var p = Object.create(superWrapperConstructor.prototype); + p.constructor = GeneratedWrapper; + GeneratedWrapper.prototype = p; + return GeneratedWrapper; + } + function isWrapper(object) { + return object && object.__impl4cf1e782hg__; + } + function isNative(object) { + return !isWrapper(object); + } + function wrap(impl) { + if (impl === null) return null; + assert(isNative(impl)); + var wrapper = impl.__wrapper8e3dd93a60__; + if (wrapper != null) { + return wrapper; + } + return impl.__wrapper8e3dd93a60__ = new (getWrapperConstructor(impl, impl))(impl); + } + function unwrap(wrapper) { + if (wrapper === null) return null; + assert(isWrapper(wrapper)); + return wrapper.__impl4cf1e782hg__; + } + function unsafeUnwrap(wrapper) { + return wrapper.__impl4cf1e782hg__; + } + function setWrapper(impl, wrapper) { + wrapper.__impl4cf1e782hg__ = impl; + impl.__wrapper8e3dd93a60__ = wrapper; + } + function unwrapIfNeeded(object) { + return object && isWrapper(object) ? unwrap(object) : object; + } + function wrapIfNeeded(object) { + return object && !isWrapper(object) ? wrap(object) : object; + } + function rewrap(node, wrapper) { + if (wrapper === null) return; + assert(isNative(node)); + assert(wrapper === undefined || isWrapper(wrapper)); + node.__wrapper8e3dd93a60__ = wrapper; + } + var getterDescriptor = { + get: undefined, + configurable: true, + enumerable: true + }; + function defineGetter(constructor, name, getter) { + getterDescriptor.get = getter; + defineProperty(constructor.prototype, name, getterDescriptor); + } + function defineWrapGetter(constructor, name) { + defineGetter(constructor, name, function() { + return wrap(this.__impl4cf1e782hg__[name]); + }); + } + function forwardMethodsToWrapper(constructors, names) { + constructors.forEach(function(constructor) { + names.forEach(function(name) { + constructor.prototype[name] = function() { + var w = wrapIfNeeded(this); + return w[name].apply(w, arguments); + }; + }); + }); + } + scope.assert = assert; + scope.constructorTable = constructorTable; + scope.defineGetter = defineGetter; + scope.defineWrapGetter = defineWrapGetter; + scope.forwardMethodsToWrapper = forwardMethodsToWrapper; + scope.isIdentifierName = isIdentifierName; + scope.isWrapper = isWrapper; + scope.isWrapperFor = isWrapperFor; + scope.mixin = mixin; + scope.nativePrototypeTable = nativePrototypeTable; + scope.oneOf = oneOf; + scope.registerObject = registerObject; + scope.registerWrapper = register; + scope.rewrap = rewrap; + scope.setWrapper = setWrapper; + scope.unsafeUnwrap = unsafeUnwrap; + scope.unwrap = unwrap; + scope.unwrapIfNeeded = unwrapIfNeeded; + scope.wrap = wrap; + scope.wrapIfNeeded = wrapIfNeeded; + scope.wrappers = wrappers; +})(window.ShadowDOMPolyfill); + +(function(scope) { + "use strict"; + function newSplice(index, removed, addedCount) { + return { + index: index, + removed: removed, + addedCount: addedCount + }; + } + var EDIT_LEAVE = 0; + var EDIT_UPDATE = 1; + var EDIT_ADD = 2; + var EDIT_DELETE = 3; + function ArraySplice() {} + ArraySplice.prototype = { + calcEditDistances: function(current, currentStart, currentEnd, old, oldStart, oldEnd) { + var rowCount = oldEnd - oldStart + 1; + var columnCount = currentEnd - currentStart + 1; + var distances = new Array(rowCount); + for (var i = 0; i < rowCount; i++) { + distances[i] = new Array(columnCount); + distances[i][0] = i; + } + for (var j = 0; j < columnCount; j++) distances[0][j] = j; + for (var i = 1; i < rowCount; i++) { + for (var j = 1; j < columnCount; j++) { + if (this.equals(current[currentStart + j - 1], old[oldStart + i - 1])) distances[i][j] = distances[i - 1][j - 1]; else { + var north = distances[i - 1][j] + 1; + var west = distances[i][j - 1] + 1; + distances[i][j] = north < west ? north : west; + } + } + } + return distances; + }, + spliceOperationsFromEditDistances: function(distances) { + var i = distances.length - 1; + var j = distances[0].length - 1; + var current = distances[i][j]; + var edits = []; + while (i > 0 || j > 0) { + if (i == 0) { + edits.push(EDIT_ADD); + j--; + continue; + } + if (j == 0) { + edits.push(EDIT_DELETE); + i--; + continue; + } + var northWest = distances[i - 1][j - 1]; + var west = distances[i - 1][j]; + var north = distances[i][j - 1]; + var min; + if (west < north) min = west < northWest ? west : northWest; else min = north < northWest ? north : northWest; + if (min == northWest) { + if (northWest == current) { + edits.push(EDIT_LEAVE); + } else { + edits.push(EDIT_UPDATE); + current = northWest; + } + i--; + j--; + } else if (min == west) { + edits.push(EDIT_DELETE); + i--; + current = west; + } else { + edits.push(EDIT_ADD); + j--; + current = north; + } + } + edits.reverse(); + return edits; + }, + calcSplices: function(current, currentStart, currentEnd, old, oldStart, oldEnd) { + var prefixCount = 0; + var suffixCount = 0; + var minLength = Math.min(currentEnd - currentStart, oldEnd - oldStart); + if (currentStart == 0 && oldStart == 0) prefixCount = this.sharedPrefix(current, old, minLength); + if (currentEnd == current.length && oldEnd == old.length) suffixCount = this.sharedSuffix(current, old, minLength - prefixCount); + currentStart += prefixCount; + oldStart += prefixCount; + currentEnd -= suffixCount; + oldEnd -= suffixCount; + if (currentEnd - currentStart == 0 && oldEnd - oldStart == 0) return []; + if (currentStart == currentEnd) { + var splice = newSplice(currentStart, [], 0); + while (oldStart < oldEnd) splice.removed.push(old[oldStart++]); + return [ splice ]; + } else if (oldStart == oldEnd) return [ newSplice(currentStart, [], currentEnd - currentStart) ]; + var ops = this.spliceOperationsFromEditDistances(this.calcEditDistances(current, currentStart, currentEnd, old, oldStart, oldEnd)); + var splice = undefined; + var splices = []; + var index = currentStart; + var oldIndex = oldStart; + for (var i = 0; i < ops.length; i++) { + switch (ops[i]) { + case EDIT_LEAVE: + if (splice) { + splices.push(splice); + splice = undefined; + } + index++; + oldIndex++; + break; + + case EDIT_UPDATE: + if (!splice) splice = newSplice(index, [], 0); + splice.addedCount++; + index++; + splice.removed.push(old[oldIndex]); + oldIndex++; + break; + + case EDIT_ADD: + if (!splice) splice = newSplice(index, [], 0); + splice.addedCount++; + index++; + break; + + case EDIT_DELETE: + if (!splice) splice = newSplice(index, [], 0); + splice.removed.push(old[oldIndex]); + oldIndex++; + break; + } + } + if (splice) { + splices.push(splice); + } + return splices; + }, + sharedPrefix: function(current, old, searchLength) { + for (var i = 0; i < searchLength; i++) if (!this.equals(current[i], old[i])) return i; + return searchLength; + }, + sharedSuffix: function(current, old, searchLength) { + var index1 = current.length; + var index2 = old.length; + var count = 0; + while (count < searchLength && this.equals(current[--index1], old[--index2])) count++; + return count; + }, + calculateSplices: function(current, previous) { + return this.calcSplices(current, 0, current.length, previous, 0, previous.length); + }, + equals: function(currentValue, previousValue) { + return currentValue === previousValue; + } + }; + scope.ArraySplice = ArraySplice; +})(window.ShadowDOMPolyfill); + +(function(context) { + "use strict"; + var OriginalMutationObserver = window.MutationObserver; + var callbacks = []; + var pending = false; + var timerFunc; + function handle() { + pending = false; + var copies = callbacks.slice(0); + callbacks = []; + for (var i = 0; i < copies.length; i++) { + (0, copies[i])(); + } + } + if (OriginalMutationObserver) { + var counter = 1; + var observer = new OriginalMutationObserver(handle); + var textNode = document.createTextNode(counter); + observer.observe(textNode, { + characterData: true + }); + timerFunc = function() { + counter = (counter + 1) % 2; + textNode.data = counter; + }; + } else { + timerFunc = window.setTimeout; + } + function setEndOfMicrotask(func) { + callbacks.push(func); + if (pending) return; + pending = true; + timerFunc(handle, 0); + } + context.setEndOfMicrotask = setEndOfMicrotask; +})(window.ShadowDOMPolyfill); + +(function(scope) { + "use strict"; + var setEndOfMicrotask = scope.setEndOfMicrotask; + var wrapIfNeeded = scope.wrapIfNeeded; + var wrappers = scope.wrappers; + var registrationsTable = new WeakMap(); + var globalMutationObservers = []; + var isScheduled = false; + function scheduleCallback(observer) { + if (observer.scheduled_) return; + observer.scheduled_ = true; + globalMutationObservers.push(observer); + if (isScheduled) return; + setEndOfMicrotask(notifyObservers); + isScheduled = true; + } + function notifyObservers() { + isScheduled = false; + while (globalMutationObservers.length) { + var notifyList = globalMutationObservers; + globalMutationObservers = []; + notifyList.sort(function(x, y) { + return x.uid_ - y.uid_; + }); + for (var i = 0; i < notifyList.length; i++) { + var mo = notifyList[i]; + mo.scheduled_ = false; + var queue = mo.takeRecords(); + removeTransientObserversFor(mo); + if (queue.length) { + mo.callback_(queue, mo); + } + } + } + } + function MutationRecord(type, target) { + this.type = type; + this.target = target; + this.addedNodes = new wrappers.NodeList(); + this.removedNodes = new wrappers.NodeList(); + this.previousSibling = null; + this.nextSibling = null; + this.attributeName = null; + this.attributeNamespace = null; + this.oldValue = null; + } + function registerTransientObservers(ancestor, node) { + for (;ancestor; ancestor = ancestor.parentNode) { + var registrations = registrationsTable.get(ancestor); + if (!registrations) continue; + for (var i = 0; i < registrations.length; i++) { + var registration = registrations[i]; + if (registration.options.subtree) registration.addTransientObserver(node); + } + } + } + function removeTransientObserversFor(observer) { + for (var i = 0; i < observer.nodes_.length; i++) { + var node = observer.nodes_[i]; + var registrations = registrationsTable.get(node); + if (!registrations) return; + for (var j = 0; j < registrations.length; j++) { + var registration = registrations[j]; + if (registration.observer === observer) registration.removeTransientObservers(); + } + } + } + function enqueueMutation(target, type, data) { + var interestedObservers = Object.create(null); + var associatedStrings = Object.create(null); + for (var node = target; node; node = node.parentNode) { + var registrations = registrationsTable.get(node); + if (!registrations) continue; + for (var j = 0; j < registrations.length; j++) { + var registration = registrations[j]; + var options = registration.options; + if (node !== target && !options.subtree) continue; + if (type === "attributes" && !options.attributes) continue; + if (type === "attributes" && options.attributeFilter && (data.namespace !== null || options.attributeFilter.indexOf(data.name) === -1)) { + continue; + } + if (type === "characterData" && !options.characterData) continue; + if (type === "childList" && !options.childList) continue; + var observer = registration.observer; + interestedObservers[observer.uid_] = observer; + if (type === "attributes" && options.attributeOldValue || type === "characterData" && options.characterDataOldValue) { + associatedStrings[observer.uid_] = data.oldValue; + } + } + } + for (var uid in interestedObservers) { + var observer = interestedObservers[uid]; + var record = new MutationRecord(type, target); + if ("name" in data && "namespace" in data) { + record.attributeName = data.name; + record.attributeNamespace = data.namespace; + } + if (data.addedNodes) record.addedNodes = data.addedNodes; + if (data.removedNodes) record.removedNodes = data.removedNodes; + if (data.previousSibling) record.previousSibling = data.previousSibling; + if (data.nextSibling) record.nextSibling = data.nextSibling; + if (associatedStrings[uid] !== undefined) record.oldValue = associatedStrings[uid]; + scheduleCallback(observer); + observer.records_.push(record); + } + } + var slice = Array.prototype.slice; + function MutationObserverOptions(options) { + this.childList = !!options.childList; + this.subtree = !!options.subtree; + if (!("attributes" in options) && ("attributeOldValue" in options || "attributeFilter" in options)) { + this.attributes = true; + } else { + this.attributes = !!options.attributes; + } + if ("characterDataOldValue" in options && !("characterData" in options)) this.characterData = true; else this.characterData = !!options.characterData; + if (!this.attributes && (options.attributeOldValue || "attributeFilter" in options) || !this.characterData && options.characterDataOldValue) { + throw new TypeError(); + } + this.characterData = !!options.characterData; + this.attributeOldValue = !!options.attributeOldValue; + this.characterDataOldValue = !!options.characterDataOldValue; + if ("attributeFilter" in options) { + if (options.attributeFilter == null || typeof options.attributeFilter !== "object") { + throw new TypeError(); + } + this.attributeFilter = slice.call(options.attributeFilter); + } else { + this.attributeFilter = null; + } + } + var uidCounter = 0; + function MutationObserver(callback) { + this.callback_ = callback; + this.nodes_ = []; + this.records_ = []; + this.uid_ = ++uidCounter; + this.scheduled_ = false; + } + MutationObserver.prototype = { + constructor: MutationObserver, + observe: function(target, options) { + target = wrapIfNeeded(target); + var newOptions = new MutationObserverOptions(options); + var registration; + var registrations = registrationsTable.get(target); + if (!registrations) registrationsTable.set(target, registrations = []); + for (var i = 0; i < registrations.length; i++) { + if (registrations[i].observer === this) { + registration = registrations[i]; + registration.removeTransientObservers(); + registration.options = newOptions; + } + } + if (!registration) { + registration = new Registration(this, target, newOptions); + registrations.push(registration); + this.nodes_.push(target); + } + }, + disconnect: function() { + this.nodes_.forEach(function(node) { + var registrations = registrationsTable.get(node); + for (var i = 0; i < registrations.length; i++) { + var registration = registrations[i]; + if (registration.observer === this) { + registrations.splice(i, 1); + break; + } + } + }, this); + this.records_ = []; + }, + takeRecords: function() { + var copyOfRecords = this.records_; + this.records_ = []; + return copyOfRecords; + } + }; + function Registration(observer, target, options) { + this.observer = observer; + this.target = target; + this.options = options; + this.transientObservedNodes = []; + } + Registration.prototype = { + addTransientObserver: function(node) { + if (node === this.target) return; + scheduleCallback(this.observer); + this.transientObservedNodes.push(node); + var registrations = registrationsTable.get(node); + if (!registrations) registrationsTable.set(node, registrations = []); + registrations.push(this); + }, + removeTransientObservers: function() { + var transientObservedNodes = this.transientObservedNodes; + this.transientObservedNodes = []; + for (var i = 0; i < transientObservedNodes.length; i++) { + var node = transientObservedNodes[i]; + var registrations = registrationsTable.get(node); + for (var j = 0; j < registrations.length; j++) { + if (registrations[j] === this) { + registrations.splice(j, 1); + break; + } + } + } + } + }; + scope.enqueueMutation = enqueueMutation; + scope.registerTransientObservers = registerTransientObservers; + scope.wrappers.MutationObserver = MutationObserver; + scope.wrappers.MutationRecord = MutationRecord; +})(window.ShadowDOMPolyfill); + +(function(scope) { + "use strict"; + function TreeScope(root, parent) { + this.root = root; + this.parent = parent; + } + TreeScope.prototype = { + get renderer() { + if (this.root instanceof scope.wrappers.ShadowRoot) { + return scope.getRendererForHost(this.root.host); + } + return null; + }, + contains: function(treeScope) { + for (;treeScope; treeScope = treeScope.parent) { + if (treeScope === this) return true; + } + return false; + } + }; + function setTreeScope(node, treeScope) { + if (node.treeScope_ !== treeScope) { + node.treeScope_ = treeScope; + for (var sr = node.shadowRoot; sr; sr = sr.olderShadowRoot) { + sr.treeScope_.parent = treeScope; + } + for (var child = node.firstChild; child; child = child.nextSibling) { + setTreeScope(child, treeScope); + } + } + } + function getTreeScope(node) { + if (node instanceof scope.wrappers.Window) { + debugger; + } + if (node.treeScope_) return node.treeScope_; + var parent = node.parentNode; + var treeScope; + if (parent) treeScope = getTreeScope(parent); else treeScope = new TreeScope(node, null); + return node.treeScope_ = treeScope; + } + scope.TreeScope = TreeScope; + scope.getTreeScope = getTreeScope; + scope.setTreeScope = setTreeScope; +})(window.ShadowDOMPolyfill); + +(function(scope) { + "use strict"; + var forwardMethodsToWrapper = scope.forwardMethodsToWrapper; + var getTreeScope = scope.getTreeScope; + var mixin = scope.mixin; + var registerWrapper = scope.registerWrapper; + var setWrapper = scope.setWrapper; + var unsafeUnwrap = scope.unsafeUnwrap; + var unwrap = scope.unwrap; + var wrap = scope.wrap; + var wrappers = scope.wrappers; + var wrappedFuns = new WeakMap(); + var listenersTable = new WeakMap(); + var handledEventsTable = new WeakMap(); + var currentlyDispatchingEvents = new WeakMap(); + var targetTable = new WeakMap(); + var currentTargetTable = new WeakMap(); + var relatedTargetTable = new WeakMap(); + var eventPhaseTable = new WeakMap(); + var stopPropagationTable = new WeakMap(); + var stopImmediatePropagationTable = new WeakMap(); + var eventHandlersTable = new WeakMap(); + var eventPathTable = new WeakMap(); + function isShadowRoot(node) { + return node instanceof wrappers.ShadowRoot; + } + function rootOfNode(node) { + return getTreeScope(node).root; + } + function getEventPath(node, event) { + var path = []; + var current = node; + path.push(current); + while (current) { + var destinationInsertionPoints = getDestinationInsertionPoints(current); + if (destinationInsertionPoints && destinationInsertionPoints.length > 0) { + for (var i = 0; i < destinationInsertionPoints.length; i++) { + var insertionPoint = destinationInsertionPoints[i]; + if (isShadowInsertionPoint(insertionPoint)) { + var shadowRoot = rootOfNode(insertionPoint); + var olderShadowRoot = shadowRoot.olderShadowRoot; + if (olderShadowRoot) path.push(olderShadowRoot); + } + path.push(insertionPoint); + } + current = destinationInsertionPoints[destinationInsertionPoints.length - 1]; + } else { + if (isShadowRoot(current)) { + if (inSameTree(node, current) && eventMustBeStopped(event)) { + break; + } + current = current.host; + path.push(current); + } else { + current = current.parentNode; + if (current) path.push(current); + } + } + } + return path; + } + function eventMustBeStopped(event) { + if (!event) return false; + switch (event.type) { + case "abort": + case "error": + case "select": + case "change": + case "load": + case "reset": + case "resize": + case "scroll": + case "selectstart": + return true; + } + return false; + } + function isShadowInsertionPoint(node) { + return node instanceof HTMLShadowElement; + } + function getDestinationInsertionPoints(node) { + return scope.getDestinationInsertionPoints(node); + } + function eventRetargetting(path, currentTarget) { + if (path.length === 0) return currentTarget; + if (currentTarget instanceof wrappers.Window) currentTarget = currentTarget.document; + var currentTargetTree = getTreeScope(currentTarget); + var originalTarget = path[0]; + var originalTargetTree = getTreeScope(originalTarget); + var relativeTargetTree = lowestCommonInclusiveAncestor(currentTargetTree, originalTargetTree); + for (var i = 0; i < path.length; i++) { + var node = path[i]; + if (getTreeScope(node) === relativeTargetTree) return node; + } + return path[path.length - 1]; + } + function getTreeScopeAncestors(treeScope) { + var ancestors = []; + for (;treeScope; treeScope = treeScope.parent) { + ancestors.push(treeScope); + } + return ancestors; + } + function lowestCommonInclusiveAncestor(tsA, tsB) { + var ancestorsA = getTreeScopeAncestors(tsA); + var ancestorsB = getTreeScopeAncestors(tsB); + var result = null; + while (ancestorsA.length > 0 && ancestorsB.length > 0) { + var a = ancestorsA.pop(); + var b = ancestorsB.pop(); + if (a === b) result = a; else break; + } + return result; + } + function getTreeScopeRoot(ts) { + if (!ts.parent) return ts; + return getTreeScopeRoot(ts.parent); + } + function relatedTargetResolution(event, currentTarget, relatedTarget) { + if (currentTarget instanceof wrappers.Window) currentTarget = currentTarget.document; + var currentTargetTree = getTreeScope(currentTarget); + var relatedTargetTree = getTreeScope(relatedTarget); + var relatedTargetEventPath = getEventPath(relatedTarget, event); + var lowestCommonAncestorTree; + var lowestCommonAncestorTree = lowestCommonInclusiveAncestor(currentTargetTree, relatedTargetTree); + if (!lowestCommonAncestorTree) lowestCommonAncestorTree = relatedTargetTree.root; + for (var commonAncestorTree = lowestCommonAncestorTree; commonAncestorTree; commonAncestorTree = commonAncestorTree.parent) { + var adjustedRelatedTarget; + for (var i = 0; i < relatedTargetEventPath.length; i++) { + var node = relatedTargetEventPath[i]; + if (getTreeScope(node) === commonAncestorTree) return node; + } + } + return null; + } + function inSameTree(a, b) { + return getTreeScope(a) === getTreeScope(b); + } + var NONE = 0; + var CAPTURING_PHASE = 1; + var AT_TARGET = 2; + var BUBBLING_PHASE = 3; + var pendingError; + function dispatchOriginalEvent(originalEvent) { + if (handledEventsTable.get(originalEvent)) return; + handledEventsTable.set(originalEvent, true); + dispatchEvent(wrap(originalEvent), wrap(originalEvent.target)); + if (pendingError) { + var err = pendingError; + pendingError = null; + throw err; + } + } + function isLoadLikeEvent(event) { + switch (event.type) { + case "load": + case "beforeunload": + case "unload": + return true; + } + return false; + } + function dispatchEvent(event, originalWrapperTarget) { + if (currentlyDispatchingEvents.get(event)) throw new Error("InvalidStateError"); + currentlyDispatchingEvents.set(event, true); + scope.renderAllPending(); + var eventPath; + var overrideTarget; + var win; + if (isLoadLikeEvent(event) && !event.bubbles) { + var doc = originalWrapperTarget; + if (doc instanceof wrappers.Document && (win = doc.defaultView)) { + overrideTarget = doc; + eventPath = []; + } + } + if (!eventPath) { + if (originalWrapperTarget instanceof wrappers.Window) { + win = originalWrapperTarget; + eventPath = []; + } else { + eventPath = getEventPath(originalWrapperTarget, event); + if (!isLoadLikeEvent(event)) { + var doc = eventPath[eventPath.length - 1]; + if (doc instanceof wrappers.Document) win = doc.defaultView; + } + } + } + eventPathTable.set(event, eventPath); + if (dispatchCapturing(event, eventPath, win, overrideTarget)) { + if (dispatchAtTarget(event, eventPath, win, overrideTarget)) { + dispatchBubbling(event, eventPath, win, overrideTarget); + } + } + eventPhaseTable.set(event, NONE); + currentTargetTable.delete(event, null); + currentlyDispatchingEvents.delete(event); + return event.defaultPrevented; + } + function dispatchCapturing(event, eventPath, win, overrideTarget) { + var phase = CAPTURING_PHASE; + if (win) { + if (!invoke(win, event, phase, eventPath, overrideTarget)) return false; + } + for (var i = eventPath.length - 1; i > 0; i--) { + if (!invoke(eventPath[i], event, phase, eventPath, overrideTarget)) return false; + } + return true; + } + function dispatchAtTarget(event, eventPath, win, overrideTarget) { + var phase = AT_TARGET; + var currentTarget = eventPath[0] || win; + return invoke(currentTarget, event, phase, eventPath, overrideTarget); + } + function dispatchBubbling(event, eventPath, win, overrideTarget) { + var phase = BUBBLING_PHASE; + for (var i = 1; i < eventPath.length; i++) { + if (!invoke(eventPath[i], event, phase, eventPath, overrideTarget)) return; + } + if (win && eventPath.length > 0) { + invoke(win, event, phase, eventPath, overrideTarget); + } + } + function invoke(currentTarget, event, phase, eventPath, overrideTarget) { + var listeners = listenersTable.get(currentTarget); + if (!listeners) return true; + var target = overrideTarget || eventRetargetting(eventPath, currentTarget); + if (target === currentTarget) { + if (phase === CAPTURING_PHASE) return true; + if (phase === BUBBLING_PHASE) phase = AT_TARGET; + } else if (phase === BUBBLING_PHASE && !event.bubbles) { + return true; + } + if ("relatedTarget" in event) { + var originalEvent = unwrap(event); + var unwrappedRelatedTarget = originalEvent.relatedTarget; + if (unwrappedRelatedTarget) { + if (unwrappedRelatedTarget instanceof Object && unwrappedRelatedTarget.addEventListener) { + var relatedTarget = wrap(unwrappedRelatedTarget); + var adjusted = relatedTargetResolution(event, currentTarget, relatedTarget); + if (adjusted === target) return true; + } else { + adjusted = null; + } + relatedTargetTable.set(event, adjusted); + } + } + eventPhaseTable.set(event, phase); + var type = event.type; + var anyRemoved = false; + targetTable.set(event, target); + currentTargetTable.set(event, currentTarget); + listeners.depth++; + for (var i = 0, len = listeners.length; i < len; i++) { + var listener = listeners[i]; + if (listener.removed) { + anyRemoved = true; + continue; + } + if (listener.type !== type || !listener.capture && phase === CAPTURING_PHASE || listener.capture && phase === BUBBLING_PHASE) { + continue; + } + try { + if (typeof listener.handler === "function") listener.handler.call(currentTarget, event); else listener.handler.handleEvent(event); + if (stopImmediatePropagationTable.get(event)) return false; + } catch (ex) { + if (!pendingError) pendingError = ex; + } + } + listeners.depth--; + if (anyRemoved && listeners.depth === 0) { + var copy = listeners.slice(); + listeners.length = 0; + for (var i = 0; i < copy.length; i++) { + if (!copy[i].removed) listeners.push(copy[i]); + } + } + return !stopPropagationTable.get(event); + } + function Listener(type, handler, capture) { + this.type = type; + this.handler = handler; + this.capture = Boolean(capture); + } + Listener.prototype = { + equals: function(that) { + return this.handler === that.handler && this.type === that.type && this.capture === that.capture; + }, + get removed() { + return this.handler === null; + }, + remove: function() { + this.handler = null; + } + }; + var OriginalEvent = window.Event; + OriginalEvent.prototype.polymerBlackList_ = { + returnValue: true, + keyLocation: true + }; + function Event(type, options) { + if (type instanceof OriginalEvent) { + var impl = type; + if (!OriginalBeforeUnloadEvent && impl.type === "beforeunload" && !(this instanceof BeforeUnloadEvent)) { + return new BeforeUnloadEvent(impl); + } + setWrapper(impl, this); + } else { + return wrap(constructEvent(OriginalEvent, "Event", type, options)); + } + } + Event.prototype = { + get target() { + return targetTable.get(this); + }, + get currentTarget() { + return currentTargetTable.get(this); + }, + get eventPhase() { + return eventPhaseTable.get(this); + }, + get path() { + var eventPath = eventPathTable.get(this); + if (!eventPath) return []; + return eventPath.slice(); + }, + stopPropagation: function() { + stopPropagationTable.set(this, true); + }, + stopImmediatePropagation: function() { + stopPropagationTable.set(this, true); + stopImmediatePropagationTable.set(this, true); + } + }; + registerWrapper(OriginalEvent, Event, document.createEvent("Event")); + function unwrapOptions(options) { + if (!options || !options.relatedTarget) return options; + return Object.create(options, { + relatedTarget: { + value: unwrap(options.relatedTarget) + } + }); + } + function registerGenericEvent(name, SuperEvent, prototype) { + var OriginalEvent = window[name]; + var GenericEvent = function(type, options) { + if (type instanceof OriginalEvent) setWrapper(type, this); else return wrap(constructEvent(OriginalEvent, name, type, options)); + }; + GenericEvent.prototype = Object.create(SuperEvent.prototype); + if (prototype) mixin(GenericEvent.prototype, prototype); + if (OriginalEvent) { + try { + registerWrapper(OriginalEvent, GenericEvent, new OriginalEvent("temp")); + } catch (ex) { + registerWrapper(OriginalEvent, GenericEvent, document.createEvent(name)); + } + } + return GenericEvent; + } + var UIEvent = registerGenericEvent("UIEvent", Event); + var CustomEvent = registerGenericEvent("CustomEvent", Event); + var relatedTargetProto = { + get relatedTarget() { + var relatedTarget = relatedTargetTable.get(this); + if (relatedTarget !== undefined) return relatedTarget; + return wrap(unwrap(this).relatedTarget); + } + }; + function getInitFunction(name, relatedTargetIndex) { + return function() { + arguments[relatedTargetIndex] = unwrap(arguments[relatedTargetIndex]); + var impl = unwrap(this); + impl[name].apply(impl, arguments); + }; + } + var mouseEventProto = mixin({ + initMouseEvent: getInitFunction("initMouseEvent", 14) + }, relatedTargetProto); + var focusEventProto = mixin({ + initFocusEvent: getInitFunction("initFocusEvent", 5) + }, relatedTargetProto); + var MouseEvent = registerGenericEvent("MouseEvent", UIEvent, mouseEventProto); + var FocusEvent = registerGenericEvent("FocusEvent", UIEvent, focusEventProto); + var defaultInitDicts = Object.create(null); + var supportsEventConstructors = function() { + try { + new window.FocusEvent("focus"); + } catch (ex) { + return false; + } + return true; + }(); + function constructEvent(OriginalEvent, name, type, options) { + if (supportsEventConstructors) return new OriginalEvent(type, unwrapOptions(options)); + var event = unwrap(document.createEvent(name)); + var defaultDict = defaultInitDicts[name]; + var args = [ type ]; + Object.keys(defaultDict).forEach(function(key) { + var v = options != null && key in options ? options[key] : defaultDict[key]; + if (key === "relatedTarget") v = unwrap(v); + args.push(v); + }); + event["init" + name].apply(event, args); + return event; + } + if (!supportsEventConstructors) { + var configureEventConstructor = function(name, initDict, superName) { + if (superName) { + var superDict = defaultInitDicts[superName]; + initDict = mixin(mixin({}, superDict), initDict); + } + defaultInitDicts[name] = initDict; + }; + configureEventConstructor("Event", { + bubbles: false, + cancelable: false + }); + configureEventConstructor("CustomEvent", { + detail: null + }, "Event"); + configureEventConstructor("UIEvent", { + view: null, + detail: 0 + }, "Event"); + configureEventConstructor("MouseEvent", { + screenX: 0, + screenY: 0, + clientX: 0, + clientY: 0, + ctrlKey: false, + altKey: false, + shiftKey: false, + metaKey: false, + button: 0, + relatedTarget: null + }, "UIEvent"); + configureEventConstructor("FocusEvent", { + relatedTarget: null + }, "UIEvent"); + } + var OriginalBeforeUnloadEvent = window.BeforeUnloadEvent; + function BeforeUnloadEvent(impl) { + Event.call(this, impl); + } + BeforeUnloadEvent.prototype = Object.create(Event.prototype); + mixin(BeforeUnloadEvent.prototype, { + get returnValue() { + return unsafeUnwrap(this).returnValue; + }, + set returnValue(v) { + unsafeUnwrap(this).returnValue = v; + } + }); + if (OriginalBeforeUnloadEvent) registerWrapper(OriginalBeforeUnloadEvent, BeforeUnloadEvent); + function isValidListener(fun) { + if (typeof fun === "function") return true; + return fun && fun.handleEvent; + } + function isMutationEvent(type) { + switch (type) { + case "DOMAttrModified": + case "DOMAttributeNameChanged": + case "DOMCharacterDataModified": + case "DOMElementNameChanged": + case "DOMNodeInserted": + case "DOMNodeInsertedIntoDocument": + case "DOMNodeRemoved": + case "DOMNodeRemovedFromDocument": + case "DOMSubtreeModified": + return true; + } + return false; + } + var OriginalEventTarget = window.EventTarget; + function EventTarget(impl) { + setWrapper(impl, this); + } + var methodNames = [ "addEventListener", "removeEventListener", "dispatchEvent" ]; + [ Node, Window ].forEach(function(constructor) { + var p = constructor.prototype; + methodNames.forEach(function(name) { + Object.defineProperty(p, name + "_", { + value: p[name] + }); + }); + }); + function getTargetToListenAt(wrapper) { + if (wrapper instanceof wrappers.ShadowRoot) wrapper = wrapper.host; + return unwrap(wrapper); + } + EventTarget.prototype = { + addEventListener: function(type, fun, capture) { + if (!isValidListener(fun) || isMutationEvent(type)) return; + var listener = new Listener(type, fun, capture); + var listeners = listenersTable.get(this); + if (!listeners) { + listeners = []; + listeners.depth = 0; + listenersTable.set(this, listeners); + } else { + for (var i = 0; i < listeners.length; i++) { + if (listener.equals(listeners[i])) return; + } + } + listeners.push(listener); + var target = getTargetToListenAt(this); + target.addEventListener_(type, dispatchOriginalEvent, true); + }, + removeEventListener: function(type, fun, capture) { + capture = Boolean(capture); + var listeners = listenersTable.get(this); + if (!listeners) return; + var count = 0, found = false; + for (var i = 0; i < listeners.length; i++) { + if (listeners[i].type === type && listeners[i].capture === capture) { + count++; + if (listeners[i].handler === fun) { + found = true; + listeners[i].remove(); + } + } + } + if (found && count === 1) { + var target = getTargetToListenAt(this); + target.removeEventListener_(type, dispatchOriginalEvent, true); + } + }, + dispatchEvent: function(event) { + var nativeEvent = unwrap(event); + var eventType = nativeEvent.type; + handledEventsTable.set(nativeEvent, false); + scope.renderAllPending(); + var tempListener; + if (!hasListenerInAncestors(this, eventType)) { + tempListener = function() {}; + this.addEventListener(eventType, tempListener, true); + } + try { + return unwrap(this).dispatchEvent_(nativeEvent); + } finally { + if (tempListener) this.removeEventListener(eventType, tempListener, true); + } + } + }; + function hasListener(node, type) { + var listeners = listenersTable.get(node); + if (listeners) { + for (var i = 0; i < listeners.length; i++) { + if (!listeners[i].removed && listeners[i].type === type) return true; + } + } + return false; + } + function hasListenerInAncestors(target, type) { + for (var node = unwrap(target); node; node = node.parentNode) { + if (hasListener(wrap(node), type)) return true; + } + return false; + } + if (OriginalEventTarget) registerWrapper(OriginalEventTarget, EventTarget); + function wrapEventTargetMethods(constructors) { + forwardMethodsToWrapper(constructors, methodNames); + } + var originalElementFromPoint = document.elementFromPoint; + function elementFromPoint(self, document, x, y) { + scope.renderAllPending(); + var element = wrap(originalElementFromPoint.call(unsafeUnwrap(document), x, y)); + if (!element) return null; + var path = getEventPath(element, null); + var idx = path.lastIndexOf(self); + if (idx == -1) return null; else path = path.slice(0, idx); + return eventRetargetting(path, self); + } + function getEventHandlerGetter(name) { + return function() { + var inlineEventHandlers = eventHandlersTable.get(this); + return inlineEventHandlers && inlineEventHandlers[name] && inlineEventHandlers[name].value || null; + }; + } + function getEventHandlerSetter(name) { + var eventType = name.slice(2); + return function(value) { + var inlineEventHandlers = eventHandlersTable.get(this); + if (!inlineEventHandlers) { + inlineEventHandlers = Object.create(null); + eventHandlersTable.set(this, inlineEventHandlers); + } + var old = inlineEventHandlers[name]; + if (old) this.removeEventListener(eventType, old.wrapped, false); + if (typeof value === "function") { + var wrapped = function(e) { + var rv = value.call(this, e); + if (rv === false) e.preventDefault(); else if (name === "onbeforeunload" && typeof rv === "string") e.returnValue = rv; + }; + this.addEventListener(eventType, wrapped, false); + inlineEventHandlers[name] = { + value: value, + wrapped: wrapped + }; + } + }; + } + scope.elementFromPoint = elementFromPoint; + scope.getEventHandlerGetter = getEventHandlerGetter; + scope.getEventHandlerSetter = getEventHandlerSetter; + scope.wrapEventTargetMethods = wrapEventTargetMethods; + scope.wrappers.BeforeUnloadEvent = BeforeUnloadEvent; + scope.wrappers.CustomEvent = CustomEvent; + scope.wrappers.Event = Event; + scope.wrappers.EventTarget = EventTarget; + scope.wrappers.FocusEvent = FocusEvent; + scope.wrappers.MouseEvent = MouseEvent; + scope.wrappers.UIEvent = UIEvent; +})(window.ShadowDOMPolyfill); + +(function(scope) { + "use strict"; + var UIEvent = scope.wrappers.UIEvent; + var mixin = scope.mixin; + var registerWrapper = scope.registerWrapper; + var setWrapper = scope.setWrapper; + var unsafeUnwrap = scope.unsafeUnwrap; + var wrap = scope.wrap; + var OriginalTouchEvent = window.TouchEvent; + if (!OriginalTouchEvent) return; + var nativeEvent; + try { + nativeEvent = document.createEvent("TouchEvent"); + } catch (ex) { + return; + } + var nonEnumDescriptor = { + enumerable: false + }; + function nonEnum(obj, prop) { + Object.defineProperty(obj, prop, nonEnumDescriptor); + } + function Touch(impl) { + setWrapper(impl, this); + } + Touch.prototype = { + get target() { + return wrap(unsafeUnwrap(this).target); + } + }; + var descr = { + configurable: true, + enumerable: true, + get: null + }; + [ "clientX", "clientY", "screenX", "screenY", "pageX", "pageY", "identifier", "webkitRadiusX", "webkitRadiusY", "webkitRotationAngle", "webkitForce" ].forEach(function(name) { + descr.get = function() { + return unsafeUnwrap(this)[name]; + }; + Object.defineProperty(Touch.prototype, name, descr); + }); + function TouchList() { + this.length = 0; + nonEnum(this, "length"); + } + TouchList.prototype = { + item: function(index) { + return this[index]; + } + }; + function wrapTouchList(nativeTouchList) { + var list = new TouchList(); + for (var i = 0; i < nativeTouchList.length; i++) { + list[i] = new Touch(nativeTouchList[i]); + } + list.length = i; + return list; + } + function TouchEvent(impl) { + UIEvent.call(this, impl); + } + TouchEvent.prototype = Object.create(UIEvent.prototype); + mixin(TouchEvent.prototype, { + get touches() { + return wrapTouchList(unsafeUnwrap(this).touches); + }, + get targetTouches() { + return wrapTouchList(unsafeUnwrap(this).targetTouches); + }, + get changedTouches() { + return wrapTouchList(unsafeUnwrap(this).changedTouches); + }, + initTouchEvent: function() { + throw new Error("Not implemented"); + } + }); + registerWrapper(OriginalTouchEvent, TouchEvent, nativeEvent); + scope.wrappers.Touch = Touch; + scope.wrappers.TouchEvent = TouchEvent; + scope.wrappers.TouchList = TouchList; +})(window.ShadowDOMPolyfill); + +(function(scope) { + "use strict"; + var unsafeUnwrap = scope.unsafeUnwrap; + var wrap = scope.wrap; + var nonEnumDescriptor = { + enumerable: false + }; + function nonEnum(obj, prop) { + Object.defineProperty(obj, prop, nonEnumDescriptor); + } + function NodeList() { + this.length = 0; + nonEnum(this, "length"); + } + NodeList.prototype = { + item: function(index) { + return this[index]; + } + }; + nonEnum(NodeList.prototype, "item"); + function wrapNodeList(list) { + if (list == null) return list; + var wrapperList = new NodeList(); + for (var i = 0, length = list.length; i < length; i++) { + wrapperList[i] = wrap(list[i]); + } + wrapperList.length = length; + return wrapperList; + } + function addWrapNodeListMethod(wrapperConstructor, name) { + wrapperConstructor.prototype[name] = function() { + return wrapNodeList(unsafeUnwrap(this)[name].apply(unsafeUnwrap(this), arguments)); + }; + } + scope.wrappers.NodeList = NodeList; + scope.addWrapNodeListMethod = addWrapNodeListMethod; + scope.wrapNodeList = wrapNodeList; +})(window.ShadowDOMPolyfill); + +(function(scope) { + "use strict"; + scope.wrapHTMLCollection = scope.wrapNodeList; + scope.wrappers.HTMLCollection = scope.wrappers.NodeList; +})(window.ShadowDOMPolyfill); + +(function(scope) { + "use strict"; + var EventTarget = scope.wrappers.EventTarget; + var NodeList = scope.wrappers.NodeList; + var TreeScope = scope.TreeScope; + var assert = scope.assert; + var defineWrapGetter = scope.defineWrapGetter; + var enqueueMutation = scope.enqueueMutation; + var getTreeScope = scope.getTreeScope; + var isWrapper = scope.isWrapper; + var mixin = scope.mixin; + var registerTransientObservers = scope.registerTransientObservers; + var registerWrapper = scope.registerWrapper; + var setTreeScope = scope.setTreeScope; + var unsafeUnwrap = scope.unsafeUnwrap; + var unwrap = scope.unwrap; + var unwrapIfNeeded = scope.unwrapIfNeeded; + var wrap = scope.wrap; + var wrapIfNeeded = scope.wrapIfNeeded; + var wrappers = scope.wrappers; + function assertIsNodeWrapper(node) { + assert(node instanceof Node); + } + function createOneElementNodeList(node) { + var nodes = new NodeList(); + nodes[0] = node; + nodes.length = 1; + return nodes; + } + var surpressMutations = false; + function enqueueRemovalForInsertedNodes(node, parent, nodes) { + enqueueMutation(parent, "childList", { + removedNodes: nodes, + previousSibling: node.previousSibling, + nextSibling: node.nextSibling + }); + } + function enqueueRemovalForInsertedDocumentFragment(df, nodes) { + enqueueMutation(df, "childList", { + removedNodes: nodes + }); + } + function collectNodes(node, parentNode, previousNode, nextNode) { + if (node instanceof DocumentFragment) { + var nodes = collectNodesForDocumentFragment(node); + surpressMutations = true; + for (var i = nodes.length - 1; i >= 0; i--) { + node.removeChild(nodes[i]); + nodes[i].parentNode_ = parentNode; + } + surpressMutations = false; + for (var i = 0; i < nodes.length; i++) { + nodes[i].previousSibling_ = nodes[i - 1] || previousNode; + nodes[i].nextSibling_ = nodes[i + 1] || nextNode; + } + if (previousNode) previousNode.nextSibling_ = nodes[0]; + if (nextNode) nextNode.previousSibling_ = nodes[nodes.length - 1]; + return nodes; + } + var nodes = createOneElementNodeList(node); + var oldParent = node.parentNode; + if (oldParent) { + oldParent.removeChild(node); + } + node.parentNode_ = parentNode; + node.previousSibling_ = previousNode; + node.nextSibling_ = nextNode; + if (previousNode) previousNode.nextSibling_ = node; + if (nextNode) nextNode.previousSibling_ = node; + return nodes; + } + function collectNodesNative(node) { + if (node instanceof DocumentFragment) return collectNodesForDocumentFragment(node); + var nodes = createOneElementNodeList(node); + var oldParent = node.parentNode; + if (oldParent) enqueueRemovalForInsertedNodes(node, oldParent, nodes); + return nodes; + } + function collectNodesForDocumentFragment(node) { + var nodes = new NodeList(); + var i = 0; + for (var child = node.firstChild; child; child = child.nextSibling) { + nodes[i++] = child; + } + nodes.length = i; + enqueueRemovalForInsertedDocumentFragment(node, nodes); + return nodes; + } + function snapshotNodeList(nodeList) { + return nodeList; + } + function nodeWasAdded(node, treeScope) { + setTreeScope(node, treeScope); + node.nodeIsInserted_(); + } + function nodesWereAdded(nodes, parent) { + var treeScope = getTreeScope(parent); + for (var i = 0; i < nodes.length; i++) { + nodeWasAdded(nodes[i], treeScope); + } + } + function nodeWasRemoved(node) { + setTreeScope(node, new TreeScope(node, null)); + } + function nodesWereRemoved(nodes) { + for (var i = 0; i < nodes.length; i++) { + nodeWasRemoved(nodes[i]); + } + } + function ensureSameOwnerDocument(parent, child) { + var ownerDoc = parent.nodeType === Node.DOCUMENT_NODE ? parent : parent.ownerDocument; + if (ownerDoc !== child.ownerDocument) ownerDoc.adoptNode(child); + } + function adoptNodesIfNeeded(owner, nodes) { + if (!nodes.length) return; + var ownerDoc = owner.ownerDocument; + if (ownerDoc === nodes[0].ownerDocument) return; + for (var i = 0; i < nodes.length; i++) { + scope.adoptNodeNoRemove(nodes[i], ownerDoc); + } + } + function unwrapNodesForInsertion(owner, nodes) { + adoptNodesIfNeeded(owner, nodes); + var length = nodes.length; + if (length === 1) return unwrap(nodes[0]); + var df = unwrap(owner.ownerDocument.createDocumentFragment()); + for (var i = 0; i < length; i++) { + df.appendChild(unwrap(nodes[i])); + } + return df; + } + function clearChildNodes(wrapper) { + if (wrapper.firstChild_ !== undefined) { + var child = wrapper.firstChild_; + while (child) { + var tmp = child; + child = child.nextSibling_; + tmp.parentNode_ = tmp.previousSibling_ = tmp.nextSibling_ = undefined; + } + } + wrapper.firstChild_ = wrapper.lastChild_ = undefined; + } + function removeAllChildNodes(wrapper) { + if (wrapper.invalidateShadowRenderer()) { + var childWrapper = wrapper.firstChild; + while (childWrapper) { + assert(childWrapper.parentNode === wrapper); + var nextSibling = childWrapper.nextSibling; + var childNode = unwrap(childWrapper); + var parentNode = childNode.parentNode; + if (parentNode) originalRemoveChild.call(parentNode, childNode); + childWrapper.previousSibling_ = childWrapper.nextSibling_ = childWrapper.parentNode_ = null; + childWrapper = nextSibling; + } + wrapper.firstChild_ = wrapper.lastChild_ = null; + } else { + var node = unwrap(wrapper); + var child = node.firstChild; + var nextSibling; + while (child) { + nextSibling = child.nextSibling; + originalRemoveChild.call(node, child); + child = nextSibling; + } + } + } + function invalidateParent(node) { + var p = node.parentNode; + return p && p.invalidateShadowRenderer(); + } + function cleanupNodes(nodes) { + for (var i = 0, n; i < nodes.length; i++) { + n = nodes[i]; + n.parentNode.removeChild(n); + } + } + var originalImportNode = document.importNode; + var originalCloneNode = window.Node.prototype.cloneNode; + function cloneNode(node, deep, opt_doc) { + var clone; + if (opt_doc) clone = wrap(originalImportNode.call(opt_doc, unsafeUnwrap(node), false)); else clone = wrap(originalCloneNode.call(unsafeUnwrap(node), false)); + if (deep) { + for (var child = node.firstChild; child; child = child.nextSibling) { + clone.appendChild(cloneNode(child, true, opt_doc)); + } + if (node instanceof wrappers.HTMLTemplateElement) { + var cloneContent = clone.content; + for (var child = node.content.firstChild; child; child = child.nextSibling) { + cloneContent.appendChild(cloneNode(child, true, opt_doc)); + } + } + } + return clone; + } + function contains(self, child) { + if (!child || getTreeScope(self) !== getTreeScope(child)) return false; + for (var node = child; node; node = node.parentNode) { + if (node === self) return true; + } + return false; + } + var OriginalNode = window.Node; + function Node(original) { + assert(original instanceof OriginalNode); + EventTarget.call(this, original); + this.parentNode_ = undefined; + this.firstChild_ = undefined; + this.lastChild_ = undefined; + this.nextSibling_ = undefined; + this.previousSibling_ = undefined; + this.treeScope_ = undefined; + } + var OriginalDocumentFragment = window.DocumentFragment; + var originalAppendChild = OriginalNode.prototype.appendChild; + var originalCompareDocumentPosition = OriginalNode.prototype.compareDocumentPosition; + var originalIsEqualNode = OriginalNode.prototype.isEqualNode; + var originalInsertBefore = OriginalNode.prototype.insertBefore; + var originalRemoveChild = OriginalNode.prototype.removeChild; + var originalReplaceChild = OriginalNode.prototype.replaceChild; + var isIe = /Trident|Edge/.test(navigator.userAgent); + var removeChildOriginalHelper = isIe ? function(parent, child) { + try { + originalRemoveChild.call(parent, child); + } catch (ex) { + if (!(parent instanceof OriginalDocumentFragment)) throw ex; + } + } : function(parent, child) { + originalRemoveChild.call(parent, child); + }; + Node.prototype = Object.create(EventTarget.prototype); + mixin(Node.prototype, { + appendChild: function(childWrapper) { + return this.insertBefore(childWrapper, null); + }, + insertBefore: function(childWrapper, refWrapper) { + assertIsNodeWrapper(childWrapper); + var refNode; + if (refWrapper) { + if (isWrapper(refWrapper)) { + refNode = unwrap(refWrapper); + } else { + refNode = refWrapper; + refWrapper = wrap(refNode); + } + } else { + refWrapper = null; + refNode = null; + } + refWrapper && assert(refWrapper.parentNode === this); + var nodes; + var previousNode = refWrapper ? refWrapper.previousSibling : this.lastChild; + var useNative = !this.invalidateShadowRenderer() && !invalidateParent(childWrapper); + if (useNative) nodes = collectNodesNative(childWrapper); else nodes = collectNodes(childWrapper, this, previousNode, refWrapper); + if (useNative) { + ensureSameOwnerDocument(this, childWrapper); + clearChildNodes(this); + originalInsertBefore.call(unsafeUnwrap(this), unwrap(childWrapper), refNode); + } else { + if (!previousNode) this.firstChild_ = nodes[0]; + if (!refWrapper) { + this.lastChild_ = nodes[nodes.length - 1]; + if (this.firstChild_ === undefined) this.firstChild_ = this.firstChild; + } + var parentNode = refNode ? refNode.parentNode : unsafeUnwrap(this); + if (parentNode) { + originalInsertBefore.call(parentNode, unwrapNodesForInsertion(this, nodes), refNode); + } else { + adoptNodesIfNeeded(this, nodes); + } + } + enqueueMutation(this, "childList", { + addedNodes: nodes, + nextSibling: refWrapper, + previousSibling: previousNode + }); + nodesWereAdded(nodes, this); + return childWrapper; + }, + removeChild: function(childWrapper) { + assertIsNodeWrapper(childWrapper); + if (childWrapper.parentNode !== this) { + var found = false; + var childNodes = this.childNodes; + for (var ieChild = this.firstChild; ieChild; ieChild = ieChild.nextSibling) { + if (ieChild === childWrapper) { + found = true; + break; + } + } + if (!found) { + throw new Error("NotFoundError"); + } + } + var childNode = unwrap(childWrapper); + var childWrapperNextSibling = childWrapper.nextSibling; + var childWrapperPreviousSibling = childWrapper.previousSibling; + if (this.invalidateShadowRenderer()) { + var thisFirstChild = this.firstChild; + var thisLastChild = this.lastChild; + var parentNode = childNode.parentNode; + if (parentNode) removeChildOriginalHelper(parentNode, childNode); + if (thisFirstChild === childWrapper) this.firstChild_ = childWrapperNextSibling; + if (thisLastChild === childWrapper) this.lastChild_ = childWrapperPreviousSibling; + if (childWrapperPreviousSibling) childWrapperPreviousSibling.nextSibling_ = childWrapperNextSibling; + if (childWrapperNextSibling) { + childWrapperNextSibling.previousSibling_ = childWrapperPreviousSibling; + } + childWrapper.previousSibling_ = childWrapper.nextSibling_ = childWrapper.parentNode_ = undefined; + } else { + clearChildNodes(this); + removeChildOriginalHelper(unsafeUnwrap(this), childNode); + } + if (!surpressMutations) { + enqueueMutation(this, "childList", { + removedNodes: createOneElementNodeList(childWrapper), + nextSibling: childWrapperNextSibling, + previousSibling: childWrapperPreviousSibling + }); + } + registerTransientObservers(this, childWrapper); + return childWrapper; + }, + replaceChild: function(newChildWrapper, oldChildWrapper) { + assertIsNodeWrapper(newChildWrapper); + var oldChildNode; + if (isWrapper(oldChildWrapper)) { + oldChildNode = unwrap(oldChildWrapper); + } else { + oldChildNode = oldChildWrapper; + oldChildWrapper = wrap(oldChildNode); + } + if (oldChildWrapper.parentNode !== this) { + throw new Error("NotFoundError"); + } + var nextNode = oldChildWrapper.nextSibling; + var previousNode = oldChildWrapper.previousSibling; + var nodes; + var useNative = !this.invalidateShadowRenderer() && !invalidateParent(newChildWrapper); + if (useNative) { + nodes = collectNodesNative(newChildWrapper); + } else { + if (nextNode === newChildWrapper) nextNode = newChildWrapper.nextSibling; + nodes = collectNodes(newChildWrapper, this, previousNode, nextNode); + } + if (!useNative) { + if (this.firstChild === oldChildWrapper) this.firstChild_ = nodes[0]; + if (this.lastChild === oldChildWrapper) this.lastChild_ = nodes[nodes.length - 1]; + oldChildWrapper.previousSibling_ = oldChildWrapper.nextSibling_ = oldChildWrapper.parentNode_ = undefined; + if (oldChildNode.parentNode) { + originalReplaceChild.call(oldChildNode.parentNode, unwrapNodesForInsertion(this, nodes), oldChildNode); + } + } else { + ensureSameOwnerDocument(this, newChildWrapper); + clearChildNodes(this); + originalReplaceChild.call(unsafeUnwrap(this), unwrap(newChildWrapper), oldChildNode); + } + enqueueMutation(this, "childList", { + addedNodes: nodes, + removedNodes: createOneElementNodeList(oldChildWrapper), + nextSibling: nextNode, + previousSibling: previousNode + }); + nodeWasRemoved(oldChildWrapper); + nodesWereAdded(nodes, this); + return oldChildWrapper; + }, + nodeIsInserted_: function() { + for (var child = this.firstChild; child; child = child.nextSibling) { + child.nodeIsInserted_(); + } + }, + hasChildNodes: function() { + return this.firstChild !== null; + }, + get parentNode() { + return this.parentNode_ !== undefined ? this.parentNode_ : wrap(unsafeUnwrap(this).parentNode); + }, + get firstChild() { + return this.firstChild_ !== undefined ? this.firstChild_ : wrap(unsafeUnwrap(this).firstChild); + }, + get lastChild() { + return this.lastChild_ !== undefined ? this.lastChild_ : wrap(unsafeUnwrap(this).lastChild); + }, + get nextSibling() { + return this.nextSibling_ !== undefined ? this.nextSibling_ : wrap(unsafeUnwrap(this).nextSibling); + }, + get previousSibling() { + return this.previousSibling_ !== undefined ? this.previousSibling_ : wrap(unsafeUnwrap(this).previousSibling); + }, + get parentElement() { + var p = this.parentNode; + while (p && p.nodeType !== Node.ELEMENT_NODE) { + p = p.parentNode; + } + return p; + }, + get textContent() { + var s = ""; + for (var child = this.firstChild; child; child = child.nextSibling) { + if (child.nodeType != Node.COMMENT_NODE) { + s += child.textContent; + } + } + return s; + }, + set textContent(textContent) { + if (textContent == null) textContent = ""; + var removedNodes = snapshotNodeList(this.childNodes); + if (this.invalidateShadowRenderer()) { + removeAllChildNodes(this); + if (textContent !== "") { + var textNode = unsafeUnwrap(this).ownerDocument.createTextNode(textContent); + this.appendChild(textNode); + } + } else { + clearChildNodes(this); + unsafeUnwrap(this).textContent = textContent; + } + var addedNodes = snapshotNodeList(this.childNodes); + enqueueMutation(this, "childList", { + addedNodes: addedNodes, + removedNodes: removedNodes + }); + nodesWereRemoved(removedNodes); + nodesWereAdded(addedNodes, this); + }, + get childNodes() { + var wrapperList = new NodeList(); + var i = 0; + for (var child = this.firstChild; child; child = child.nextSibling) { + wrapperList[i++] = child; + } + wrapperList.length = i; + return wrapperList; + }, + cloneNode: function(deep) { + return cloneNode(this, deep); + }, + contains: function(child) { + return contains(this, wrapIfNeeded(child)); + }, + compareDocumentPosition: function(otherNode) { + return originalCompareDocumentPosition.call(unsafeUnwrap(this), unwrapIfNeeded(otherNode)); + }, + isEqualNode: function(otherNode) { + return originalIsEqualNode.call(unsafeUnwrap(this), unwrapIfNeeded(otherNode)); + }, + normalize: function() { + var nodes = snapshotNodeList(this.childNodes); + var remNodes = []; + var s = ""; + var modNode; + for (var i = 0, n; i < nodes.length; i++) { + n = nodes[i]; + if (n.nodeType === Node.TEXT_NODE) { + if (!modNode && !n.data.length) this.removeChild(n); else if (!modNode) modNode = n; else { + s += n.data; + remNodes.push(n); + } + } else { + if (modNode && remNodes.length) { + modNode.data += s; + cleanupNodes(remNodes); + } + remNodes = []; + s = ""; + modNode = null; + if (n.childNodes.length) n.normalize(); + } + } + if (modNode && remNodes.length) { + modNode.data += s; + cleanupNodes(remNodes); + } + } + }); + defineWrapGetter(Node, "ownerDocument"); + registerWrapper(OriginalNode, Node, document.createDocumentFragment()); + delete Node.prototype.querySelector; + delete Node.prototype.querySelectorAll; + Node.prototype = mixin(Object.create(EventTarget.prototype), Node.prototype); + scope.cloneNode = cloneNode; + scope.nodeWasAdded = nodeWasAdded; + scope.nodeWasRemoved = nodeWasRemoved; + scope.nodesWereAdded = nodesWereAdded; + scope.nodesWereRemoved = nodesWereRemoved; + scope.originalInsertBefore = originalInsertBefore; + scope.originalRemoveChild = originalRemoveChild; + scope.snapshotNodeList = snapshotNodeList; + scope.wrappers.Node = Node; +})(window.ShadowDOMPolyfill); + +(function(scope) { + "use strict"; + var HTMLCollection = scope.wrappers.HTMLCollection; + var NodeList = scope.wrappers.NodeList; + var getTreeScope = scope.getTreeScope; + var unsafeUnwrap = scope.unsafeUnwrap; + var wrap = scope.wrap; + var originalDocumentQuerySelector = document.querySelector; + var originalElementQuerySelector = document.documentElement.querySelector; + var originalDocumentQuerySelectorAll = document.querySelectorAll; + var originalElementQuerySelectorAll = document.documentElement.querySelectorAll; + var originalDocumentGetElementsByTagName = document.getElementsByTagName; + var originalElementGetElementsByTagName = document.documentElement.getElementsByTagName; + var originalDocumentGetElementsByTagNameNS = document.getElementsByTagNameNS; + var originalElementGetElementsByTagNameNS = document.documentElement.getElementsByTagNameNS; + var OriginalElement = window.Element; + var OriginalDocument = window.HTMLDocument || window.Document; + function filterNodeList(list, index, result, deep) { + var wrappedItem = null; + var root = null; + for (var i = 0, length = list.length; i < length; i++) { + wrappedItem = wrap(list[i]); + if (!deep && (root = getTreeScope(wrappedItem).root)) { + if (root instanceof scope.wrappers.ShadowRoot) { + continue; + } + } + result[index++] = wrappedItem; + } + return index; + } + function shimSelector(selector) { + return String(selector).replace(/\/deep\/|::shadow|>>>/g, " "); + } + function shimMatchesSelector(selector) { + return String(selector).replace(/:host\(([^\s]+)\)/g, "$1").replace(/([^\s]):host/g, "$1").replace(":host", "*").replace(/\^|\/shadow\/|\/shadow-deep\/|::shadow|\/deep\/|::content|>>>/g, " "); + } + function findOne(node, selector) { + var m, el = node.firstElementChild; + while (el) { + if (el.matches(selector)) return el; + m = findOne(el, selector); + if (m) return m; + el = el.nextElementSibling; + } + return null; + } + function matchesSelector(el, selector) { + return el.matches(selector); + } + var XHTML_NS = "http://www.w3.org/1999/xhtml"; + function matchesTagName(el, localName, localNameLowerCase) { + var ln = el.localName; + return ln === localName || ln === localNameLowerCase && el.namespaceURI === XHTML_NS; + } + function matchesEveryThing() { + return true; + } + function matchesLocalNameOnly(el, ns, localName) { + return el.localName === localName; + } + function matchesNameSpace(el, ns) { + return el.namespaceURI === ns; + } + function matchesLocalNameNS(el, ns, localName) { + return el.namespaceURI === ns && el.localName === localName; + } + function findElements(node, index, result, p, arg0, arg1) { + var el = node.firstElementChild; + while (el) { + if (p(el, arg0, arg1)) result[index++] = el; + index = findElements(el, index, result, p, arg0, arg1); + el = el.nextElementSibling; + } + return index; + } + function querySelectorAllFiltered(p, index, result, selector, deep) { + var target = unsafeUnwrap(this); + var list; + var root = getTreeScope(this).root; + if (root instanceof scope.wrappers.ShadowRoot) { + return findElements(this, index, result, p, selector, null); + } else if (target instanceof OriginalElement) { + list = originalElementQuerySelectorAll.call(target, selector); + } else if (target instanceof OriginalDocument) { + list = originalDocumentQuerySelectorAll.call(target, selector); + } else { + return findElements(this, index, result, p, selector, null); + } + return filterNodeList(list, index, result, deep); + } + var SelectorsInterface = { + querySelector: function(selector) { + var shimmed = shimSelector(selector); + var deep = shimmed !== selector; + selector = shimmed; + var target = unsafeUnwrap(this); + var wrappedItem; + var root = getTreeScope(this).root; + if (root instanceof scope.wrappers.ShadowRoot) { + return findOne(this, selector); + } else if (target instanceof OriginalElement) { + wrappedItem = wrap(originalElementQuerySelector.call(target, selector)); + } else if (target instanceof OriginalDocument) { + wrappedItem = wrap(originalDocumentQuerySelector.call(target, selector)); + } else { + return findOne(this, selector); + } + if (!wrappedItem) { + return wrappedItem; + } else if (!deep && (root = getTreeScope(wrappedItem).root)) { + if (root instanceof scope.wrappers.ShadowRoot) { + return findOne(this, selector); + } + } + return wrappedItem; + }, + querySelectorAll: function(selector) { + var shimmed = shimSelector(selector); + var deep = shimmed !== selector; + selector = shimmed; + var result = new NodeList(); + result.length = querySelectorAllFiltered.call(this, matchesSelector, 0, result, selector, deep); + return result; + } + }; + var MatchesInterface = { + matches: function(selector) { + selector = shimMatchesSelector(selector); + return scope.originalMatches.call(unsafeUnwrap(this), selector); + } + }; + function getElementsByTagNameFiltered(p, index, result, localName, lowercase) { + var target = unsafeUnwrap(this); + var list; + var root = getTreeScope(this).root; + if (root instanceof scope.wrappers.ShadowRoot) { + return findElements(this, index, result, p, localName, lowercase); + } else if (target instanceof OriginalElement) { + list = originalElementGetElementsByTagName.call(target, localName, lowercase); + } else if (target instanceof OriginalDocument) { + list = originalDocumentGetElementsByTagName.call(target, localName, lowercase); + } else { + return findElements(this, index, result, p, localName, lowercase); + } + return filterNodeList(list, index, result, false); + } + function getElementsByTagNameNSFiltered(p, index, result, ns, localName) { + var target = unsafeUnwrap(this); + var list; + var root = getTreeScope(this).root; + if (root instanceof scope.wrappers.ShadowRoot) { + return findElements(this, index, result, p, ns, localName); + } else if (target instanceof OriginalElement) { + list = originalElementGetElementsByTagNameNS.call(target, ns, localName); + } else if (target instanceof OriginalDocument) { + list = originalDocumentGetElementsByTagNameNS.call(target, ns, localName); + } else { + return findElements(this, index, result, p, ns, localName); + } + return filterNodeList(list, index, result, false); + } + var GetElementsByInterface = { + getElementsByTagName: function(localName) { + var result = new HTMLCollection(); + var match = localName === "*" ? matchesEveryThing : matchesTagName; + result.length = getElementsByTagNameFiltered.call(this, match, 0, result, localName, localName.toLowerCase()); + return result; + }, + getElementsByClassName: function(className) { + return this.querySelectorAll("." + className); + }, + getElementsByTagNameNS: function(ns, localName) { + var result = new HTMLCollection(); + var match = null; + if (ns === "*") { + match = localName === "*" ? matchesEveryThing : matchesLocalNameOnly; + } else { + match = localName === "*" ? matchesNameSpace : matchesLocalNameNS; + } + result.length = getElementsByTagNameNSFiltered.call(this, match, 0, result, ns || null, localName); + return result; + } + }; + scope.GetElementsByInterface = GetElementsByInterface; + scope.SelectorsInterface = SelectorsInterface; + scope.MatchesInterface = MatchesInterface; +})(window.ShadowDOMPolyfill); + +(function(scope) { + "use strict"; + var NodeList = scope.wrappers.NodeList; + function forwardElement(node) { + while (node && node.nodeType !== Node.ELEMENT_NODE) { + node = node.nextSibling; + } + return node; + } + function backwardsElement(node) { + while (node && node.nodeType !== Node.ELEMENT_NODE) { + node = node.previousSibling; + } + return node; + } + var ParentNodeInterface = { + get firstElementChild() { + return forwardElement(this.firstChild); + }, + get lastElementChild() { + return backwardsElement(this.lastChild); + }, + get childElementCount() { + var count = 0; + for (var child = this.firstElementChild; child; child = child.nextElementSibling) { + count++; + } + return count; + }, + get children() { + var wrapperList = new NodeList(); + var i = 0; + for (var child = this.firstElementChild; child; child = child.nextElementSibling) { + wrapperList[i++] = child; + } + wrapperList.length = i; + return wrapperList; + }, + remove: function() { + var p = this.parentNode; + if (p) p.removeChild(this); + } + }; + var ChildNodeInterface = { + get nextElementSibling() { + return forwardElement(this.nextSibling); + }, + get previousElementSibling() { + return backwardsElement(this.previousSibling); + } + }; + var NonElementParentNodeInterface = { + getElementById: function(id) { + if (/[ \t\n\r\f]/.test(id)) return null; + return this.querySelector('[id="' + id + '"]'); + } + }; + scope.ChildNodeInterface = ChildNodeInterface; + scope.NonElementParentNodeInterface = NonElementParentNodeInterface; + scope.ParentNodeInterface = ParentNodeInterface; +})(window.ShadowDOMPolyfill); + +(function(scope) { + "use strict"; + var ChildNodeInterface = scope.ChildNodeInterface; + var Node = scope.wrappers.Node; + var enqueueMutation = scope.enqueueMutation; + var mixin = scope.mixin; + var registerWrapper = scope.registerWrapper; + var unsafeUnwrap = scope.unsafeUnwrap; + var OriginalCharacterData = window.CharacterData; + function CharacterData(node) { + Node.call(this, node); + } + CharacterData.prototype = Object.create(Node.prototype); + mixin(CharacterData.prototype, { + get nodeValue() { + return this.data; + }, + set nodeValue(data) { + this.data = data; + }, + get textContent() { + return this.data; + }, + set textContent(value) { + this.data = value; + }, + get data() { + return unsafeUnwrap(this).data; + }, + set data(value) { + var oldValue = unsafeUnwrap(this).data; + enqueueMutation(this, "characterData", { + oldValue: oldValue + }); + unsafeUnwrap(this).data = value; + } + }); + mixin(CharacterData.prototype, ChildNodeInterface); + registerWrapper(OriginalCharacterData, CharacterData, document.createTextNode("")); + scope.wrappers.CharacterData = CharacterData; +})(window.ShadowDOMPolyfill); + +(function(scope) { + "use strict"; + var CharacterData = scope.wrappers.CharacterData; + var enqueueMutation = scope.enqueueMutation; + var mixin = scope.mixin; + var registerWrapper = scope.registerWrapper; + function toUInt32(x) { + return x >>> 0; + } + var OriginalText = window.Text; + function Text(node) { + CharacterData.call(this, node); + } + Text.prototype = Object.create(CharacterData.prototype); + mixin(Text.prototype, { + splitText: function(offset) { + offset = toUInt32(offset); + var s = this.data; + if (offset > s.length) throw new Error("IndexSizeError"); + var head = s.slice(0, offset); + var tail = s.slice(offset); + this.data = head; + var newTextNode = this.ownerDocument.createTextNode(tail); + if (this.parentNode) this.parentNode.insertBefore(newTextNode, this.nextSibling); + return newTextNode; + } + }); + registerWrapper(OriginalText, Text, document.createTextNode("")); + scope.wrappers.Text = Text; +})(window.ShadowDOMPolyfill); + +(function(scope) { + "use strict"; + if (!window.DOMTokenList) { + console.warn("Missing DOMTokenList prototype, please include a " + "compatible classList polyfill such as http://goo.gl/uTcepH."); + return; + } + var unsafeUnwrap = scope.unsafeUnwrap; + var enqueueMutation = scope.enqueueMutation; + function getClass(el) { + return unsafeUnwrap(el).getAttribute("class"); + } + function enqueueClassAttributeChange(el, oldValue) { + enqueueMutation(el, "attributes", { + name: "class", + namespace: null, + oldValue: oldValue + }); + } + function invalidateClass(el) { + scope.invalidateRendererBasedOnAttribute(el, "class"); + } + function changeClass(tokenList, method, args) { + var ownerElement = tokenList.ownerElement_; + if (ownerElement == null) { + return method.apply(tokenList, args); + } + var oldValue = getClass(ownerElement); + var retv = method.apply(tokenList, args); + if (getClass(ownerElement) !== oldValue) { + enqueueClassAttributeChange(ownerElement, oldValue); + invalidateClass(ownerElement); + } + return retv; + } + var oldAdd = DOMTokenList.prototype.add; + DOMTokenList.prototype.add = function() { + changeClass(this, oldAdd, arguments); + }; + var oldRemove = DOMTokenList.prototype.remove; + DOMTokenList.prototype.remove = function() { + changeClass(this, oldRemove, arguments); + }; + var oldToggle = DOMTokenList.prototype.toggle; + DOMTokenList.prototype.toggle = function() { + return changeClass(this, oldToggle, arguments); + }; +})(window.ShadowDOMPolyfill); + +(function(scope) { + "use strict"; + var ChildNodeInterface = scope.ChildNodeInterface; + var GetElementsByInterface = scope.GetElementsByInterface; + var Node = scope.wrappers.Node; + var ParentNodeInterface = scope.ParentNodeInterface; + var SelectorsInterface = scope.SelectorsInterface; + var MatchesInterface = scope.MatchesInterface; + var addWrapNodeListMethod = scope.addWrapNodeListMethod; + var enqueueMutation = scope.enqueueMutation; + var mixin = scope.mixin; + var oneOf = scope.oneOf; + var registerWrapper = scope.registerWrapper; + var unsafeUnwrap = scope.unsafeUnwrap; + var wrappers = scope.wrappers; + var OriginalElement = window.Element; + var matchesNames = [ "matches", "mozMatchesSelector", "msMatchesSelector", "webkitMatchesSelector" ].filter(function(name) { + return OriginalElement.prototype[name]; + }); + var matchesName = matchesNames[0]; + var originalMatches = OriginalElement.prototype[matchesName]; + function invalidateRendererBasedOnAttribute(element, name) { + var p = element.parentNode; + if (!p || !p.shadowRoot) return; + var renderer = scope.getRendererForHost(p); + if (renderer.dependsOnAttribute(name)) renderer.invalidate(); + } + function enqueAttributeChange(element, name, oldValue) { + enqueueMutation(element, "attributes", { + name: name, + namespace: null, + oldValue: oldValue + }); + } + var classListTable = new WeakMap(); + function Element(node) { + Node.call(this, node); + } + Element.prototype = Object.create(Node.prototype); + mixin(Element.prototype, { + createShadowRoot: function() { + var newShadowRoot = new wrappers.ShadowRoot(this); + unsafeUnwrap(this).polymerShadowRoot_ = newShadowRoot; + var renderer = scope.getRendererForHost(this); + renderer.invalidate(); + return newShadowRoot; + }, + get shadowRoot() { + return unsafeUnwrap(this).polymerShadowRoot_ || null; + }, + setAttribute: function(name, value) { + var oldValue = unsafeUnwrap(this).getAttribute(name); + unsafeUnwrap(this).setAttribute(name, value); + enqueAttributeChange(this, name, oldValue); + invalidateRendererBasedOnAttribute(this, name); + }, + removeAttribute: function(name) { + var oldValue = unsafeUnwrap(this).getAttribute(name); + unsafeUnwrap(this).removeAttribute(name); + enqueAttributeChange(this, name, oldValue); + invalidateRendererBasedOnAttribute(this, name); + }, + get classList() { + var list = classListTable.get(this); + if (!list) { + list = unsafeUnwrap(this).classList; + if (!list) return; + list.ownerElement_ = this; + classListTable.set(this, list); + } + return list; + }, + get className() { + return unsafeUnwrap(this).className; + }, + set className(v) { + this.setAttribute("class", v); + }, + get id() { + return unsafeUnwrap(this).id; + }, + set id(v) { + this.setAttribute("id", v); + } + }); + matchesNames.forEach(function(name) { + if (name !== "matches") { + Element.prototype[name] = function(selector) { + return this.matches(selector); + }; + } + }); + if (OriginalElement.prototype.webkitCreateShadowRoot) { + Element.prototype.webkitCreateShadowRoot = Element.prototype.createShadowRoot; + } + mixin(Element.prototype, ChildNodeInterface); + mixin(Element.prototype, GetElementsByInterface); + mixin(Element.prototype, ParentNodeInterface); + mixin(Element.prototype, SelectorsInterface); + mixin(Element.prototype, MatchesInterface); + registerWrapper(OriginalElement, Element, document.createElementNS(null, "x")); + scope.invalidateRendererBasedOnAttribute = invalidateRendererBasedOnAttribute; + scope.matchesNames = matchesNames; + scope.originalMatches = originalMatches; + scope.wrappers.Element = Element; +})(window.ShadowDOMPolyfill); + +(function(scope) { + "use strict"; + var Element = scope.wrappers.Element; + var defineGetter = scope.defineGetter; + var enqueueMutation = scope.enqueueMutation; + var mixin = scope.mixin; + var nodesWereAdded = scope.nodesWereAdded; + var nodesWereRemoved = scope.nodesWereRemoved; + var registerWrapper = scope.registerWrapper; + var snapshotNodeList = scope.snapshotNodeList; + var unsafeUnwrap = scope.unsafeUnwrap; + var unwrap = scope.unwrap; + var wrap = scope.wrap; + var wrappers = scope.wrappers; + var escapeAttrRegExp = /[&\u00A0"]/g; + var escapeDataRegExp = /[&\u00A0<>]/g; + function escapeReplace(c) { + switch (c) { + case "&": + return "&"; + + case "<": + return "<"; + + case ">": + return ">"; + + case '"': + return """; + + case " ": + return " "; + } + } + function escapeAttr(s) { + return s.replace(escapeAttrRegExp, escapeReplace); + } + function escapeData(s) { + return s.replace(escapeDataRegExp, escapeReplace); + } + function makeSet(arr) { + var set = {}; + for (var i = 0; i < arr.length; i++) { + set[arr[i]] = true; + } + return set; + } + var voidElements = makeSet([ "area", "base", "br", "col", "command", "embed", "hr", "img", "input", "keygen", "link", "meta", "param", "source", "track", "wbr" ]); + var plaintextParents = makeSet([ "style", "script", "xmp", "iframe", "noembed", "noframes", "plaintext", "noscript" ]); + var XHTML_NS = "http://www.w3.org/1999/xhtml"; + function needsSelfClosingSlash(node) { + if (node.namespaceURI !== XHTML_NS) return true; + var doctype = node.ownerDocument.doctype; + return doctype && doctype.publicId && doctype.systemId; + } + function getOuterHTML(node, parentNode) { + switch (node.nodeType) { + case Node.ELEMENT_NODE: + var tagName = node.tagName.toLowerCase(); + var s = "<" + tagName; + var attrs = node.attributes; + for (var i = 0, attr; attr = attrs[i]; i++) { + s += " " + attr.name + '="' + escapeAttr(attr.value) + '"'; + } + if (voidElements[tagName]) { + if (needsSelfClosingSlash(node)) s += "/"; + return s + ">"; + } + return s + ">" + getInnerHTML(node) + ""; + + case Node.TEXT_NODE: + var data = node.data; + if (parentNode && plaintextParents[parentNode.localName]) return data; + return escapeData(data); + + case Node.COMMENT_NODE: + return ""; + + default: + console.error(node); + throw new Error("not implemented"); + } + } + function getInnerHTML(node) { + if (node instanceof wrappers.HTMLTemplateElement) node = node.content; + var s = ""; + for (var child = node.firstChild; child; child = child.nextSibling) { + s += getOuterHTML(child, node); + } + return s; + } + function setInnerHTML(node, value, opt_tagName) { + var tagName = opt_tagName || "div"; + node.textContent = ""; + var tempElement = unwrap(node.ownerDocument.createElement(tagName)); + tempElement.innerHTML = value; + var firstChild; + while (firstChild = tempElement.firstChild) { + node.appendChild(wrap(firstChild)); + } + } + var oldIe = /MSIE/.test(navigator.userAgent); + var OriginalHTMLElement = window.HTMLElement; + var OriginalHTMLTemplateElement = window.HTMLTemplateElement; + function HTMLElement(node) { + Element.call(this, node); + } + HTMLElement.prototype = Object.create(Element.prototype); + mixin(HTMLElement.prototype, { + get innerHTML() { + return getInnerHTML(this); + }, + set innerHTML(value) { + if (oldIe && plaintextParents[this.localName]) { + this.textContent = value; + return; + } + var removedNodes = snapshotNodeList(this.childNodes); + if (this.invalidateShadowRenderer()) { + if (this instanceof wrappers.HTMLTemplateElement) setInnerHTML(this.content, value); else setInnerHTML(this, value, this.tagName); + } else if (!OriginalHTMLTemplateElement && this instanceof wrappers.HTMLTemplateElement) { + setInnerHTML(this.content, value); + } else { + unsafeUnwrap(this).innerHTML = value; + } + var addedNodes = snapshotNodeList(this.childNodes); + enqueueMutation(this, "childList", { + addedNodes: addedNodes, + removedNodes: removedNodes + }); + nodesWereRemoved(removedNodes); + nodesWereAdded(addedNodes, this); + }, + get outerHTML() { + return getOuterHTML(this, this.parentNode); + }, + set outerHTML(value) { + var p = this.parentNode; + if (p) { + p.invalidateShadowRenderer(); + var df = frag(p, value); + p.replaceChild(df, this); + } + }, + insertAdjacentHTML: function(position, text) { + var contextElement, refNode; + switch (String(position).toLowerCase()) { + case "beforebegin": + contextElement = this.parentNode; + refNode = this; + break; + + case "afterend": + contextElement = this.parentNode; + refNode = this.nextSibling; + break; + + case "afterbegin": + contextElement = this; + refNode = this.firstChild; + break; + + case "beforeend": + contextElement = this; + refNode = null; + break; + + default: + return; + } + var df = frag(contextElement, text); + contextElement.insertBefore(df, refNode); + }, + get hidden() { + return this.hasAttribute("hidden"); + }, + set hidden(v) { + if (v) { + this.setAttribute("hidden", ""); + } else { + this.removeAttribute("hidden"); + } + } + }); + function frag(contextElement, html) { + var p = unwrap(contextElement.cloneNode(false)); + p.innerHTML = html; + var df = unwrap(document.createDocumentFragment()); + var c; + while (c = p.firstChild) { + df.appendChild(c); + } + return wrap(df); + } + function getter(name) { + return function() { + scope.renderAllPending(); + return unsafeUnwrap(this)[name]; + }; + } + function getterRequiresRendering(name) { + defineGetter(HTMLElement, name, getter(name)); + } + [ "clientHeight", "clientLeft", "clientTop", "clientWidth", "offsetHeight", "offsetLeft", "offsetTop", "offsetWidth", "scrollHeight", "scrollWidth" ].forEach(getterRequiresRendering); + function getterAndSetterRequiresRendering(name) { + Object.defineProperty(HTMLElement.prototype, name, { + get: getter(name), + set: function(v) { + scope.renderAllPending(); + unsafeUnwrap(this)[name] = v; + }, + configurable: true, + enumerable: true + }); + } + [ "scrollLeft", "scrollTop" ].forEach(getterAndSetterRequiresRendering); + function methodRequiresRendering(name) { + Object.defineProperty(HTMLElement.prototype, name, { + value: function() { + scope.renderAllPending(); + return unsafeUnwrap(this)[name].apply(unsafeUnwrap(this), arguments); + }, + configurable: true, + enumerable: true + }); + } + [ "getBoundingClientRect", "getClientRects", "scrollIntoView" ].forEach(methodRequiresRendering); + registerWrapper(OriginalHTMLElement, HTMLElement, document.createElement("b")); + scope.wrappers.HTMLElement = HTMLElement; + scope.getInnerHTML = getInnerHTML; + scope.setInnerHTML = setInnerHTML; +})(window.ShadowDOMPolyfill); + +(function(scope) { + "use strict"; + var HTMLElement = scope.wrappers.HTMLElement; + var mixin = scope.mixin; + var registerWrapper = scope.registerWrapper; + var unsafeUnwrap = scope.unsafeUnwrap; + var wrap = scope.wrap; + var OriginalHTMLCanvasElement = window.HTMLCanvasElement; + function HTMLCanvasElement(node) { + HTMLElement.call(this, node); + } + HTMLCanvasElement.prototype = Object.create(HTMLElement.prototype); + mixin(HTMLCanvasElement.prototype, { + getContext: function() { + var context = unsafeUnwrap(this).getContext.apply(unsafeUnwrap(this), arguments); + return context && wrap(context); + } + }); + registerWrapper(OriginalHTMLCanvasElement, HTMLCanvasElement, document.createElement("canvas")); + scope.wrappers.HTMLCanvasElement = HTMLCanvasElement; +})(window.ShadowDOMPolyfill); + +(function(scope) { + "use strict"; + var HTMLElement = scope.wrappers.HTMLElement; + var mixin = scope.mixin; + var registerWrapper = scope.registerWrapper; + var OriginalHTMLContentElement = window.HTMLContentElement; + function HTMLContentElement(node) { + HTMLElement.call(this, node); + } + HTMLContentElement.prototype = Object.create(HTMLElement.prototype); + mixin(HTMLContentElement.prototype, { + constructor: HTMLContentElement, + get select() { + return this.getAttribute("select"); + }, + set select(value) { + this.setAttribute("select", value); + }, + setAttribute: function(n, v) { + HTMLElement.prototype.setAttribute.call(this, n, v); + if (String(n).toLowerCase() === "select") this.invalidateShadowRenderer(true); + } + }); + if (OriginalHTMLContentElement) registerWrapper(OriginalHTMLContentElement, HTMLContentElement); + scope.wrappers.HTMLContentElement = HTMLContentElement; +})(window.ShadowDOMPolyfill); + +(function(scope) { + "use strict"; + var HTMLElement = scope.wrappers.HTMLElement; + var mixin = scope.mixin; + var registerWrapper = scope.registerWrapper; + var wrapHTMLCollection = scope.wrapHTMLCollection; + var unwrap = scope.unwrap; + var OriginalHTMLFormElement = window.HTMLFormElement; + function HTMLFormElement(node) { + HTMLElement.call(this, node); + } + HTMLFormElement.prototype = Object.create(HTMLElement.prototype); + mixin(HTMLFormElement.prototype, { + get elements() { + return wrapHTMLCollection(unwrap(this).elements); + } + }); + registerWrapper(OriginalHTMLFormElement, HTMLFormElement, document.createElement("form")); + scope.wrappers.HTMLFormElement = HTMLFormElement; +})(window.ShadowDOMPolyfill); + +(function(scope) { + "use strict"; + var HTMLElement = scope.wrappers.HTMLElement; + var registerWrapper = scope.registerWrapper; + var unwrap = scope.unwrap; + var rewrap = scope.rewrap; + var OriginalHTMLImageElement = window.HTMLImageElement; + function HTMLImageElement(node) { + HTMLElement.call(this, node); + } + HTMLImageElement.prototype = Object.create(HTMLElement.prototype); + registerWrapper(OriginalHTMLImageElement, HTMLImageElement, document.createElement("img")); + function Image(width, height) { + if (!(this instanceof Image)) { + throw new TypeError("DOM object constructor cannot be called as a function."); + } + var node = unwrap(document.createElement("img")); + HTMLElement.call(this, node); + rewrap(node, this); + if (width !== undefined) node.width = width; + if (height !== undefined) node.height = height; + } + Image.prototype = HTMLImageElement.prototype; + scope.wrappers.HTMLImageElement = HTMLImageElement; + scope.wrappers.Image = Image; +})(window.ShadowDOMPolyfill); + +(function(scope) { + "use strict"; + var HTMLElement = scope.wrappers.HTMLElement; + var mixin = scope.mixin; + var NodeList = scope.wrappers.NodeList; + var registerWrapper = scope.registerWrapper; + var OriginalHTMLShadowElement = window.HTMLShadowElement; + function HTMLShadowElement(node) { + HTMLElement.call(this, node); + } + HTMLShadowElement.prototype = Object.create(HTMLElement.prototype); + HTMLShadowElement.prototype.constructor = HTMLShadowElement; + if (OriginalHTMLShadowElement) registerWrapper(OriginalHTMLShadowElement, HTMLShadowElement); + scope.wrappers.HTMLShadowElement = HTMLShadowElement; +})(window.ShadowDOMPolyfill); + +(function(scope) { + "use strict"; + var HTMLElement = scope.wrappers.HTMLElement; + var mixin = scope.mixin; + var registerWrapper = scope.registerWrapper; + var unsafeUnwrap = scope.unsafeUnwrap; + var unwrap = scope.unwrap; + var wrap = scope.wrap; + var contentTable = new WeakMap(); + var templateContentsOwnerTable = new WeakMap(); + function getTemplateContentsOwner(doc) { + if (!doc.defaultView) return doc; + var d = templateContentsOwnerTable.get(doc); + if (!d) { + d = doc.implementation.createHTMLDocument(""); + while (d.lastChild) { + d.removeChild(d.lastChild); + } + templateContentsOwnerTable.set(doc, d); + } + return d; + } + function extractContent(templateElement) { + var doc = getTemplateContentsOwner(templateElement.ownerDocument); + var df = unwrap(doc.createDocumentFragment()); + var child; + while (child = templateElement.firstChild) { + df.appendChild(child); + } + return df; + } + var OriginalHTMLTemplateElement = window.HTMLTemplateElement; + function HTMLTemplateElement(node) { + HTMLElement.call(this, node); + if (!OriginalHTMLTemplateElement) { + var content = extractContent(node); + contentTable.set(this, wrap(content)); + } + } + HTMLTemplateElement.prototype = Object.create(HTMLElement.prototype); + mixin(HTMLTemplateElement.prototype, { + constructor: HTMLTemplateElement, + get content() { + if (OriginalHTMLTemplateElement) return wrap(unsafeUnwrap(this).content); + return contentTable.get(this); + } + }); + if (OriginalHTMLTemplateElement) registerWrapper(OriginalHTMLTemplateElement, HTMLTemplateElement); + scope.wrappers.HTMLTemplateElement = HTMLTemplateElement; +})(window.ShadowDOMPolyfill); + +(function(scope) { + "use strict"; + var HTMLElement = scope.wrappers.HTMLElement; + var registerWrapper = scope.registerWrapper; + var OriginalHTMLMediaElement = window.HTMLMediaElement; + if (!OriginalHTMLMediaElement) return; + function HTMLMediaElement(node) { + HTMLElement.call(this, node); + } + HTMLMediaElement.prototype = Object.create(HTMLElement.prototype); + registerWrapper(OriginalHTMLMediaElement, HTMLMediaElement, document.createElement("audio")); + scope.wrappers.HTMLMediaElement = HTMLMediaElement; +})(window.ShadowDOMPolyfill); + +(function(scope) { + "use strict"; + var HTMLMediaElement = scope.wrappers.HTMLMediaElement; + var registerWrapper = scope.registerWrapper; + var unwrap = scope.unwrap; + var rewrap = scope.rewrap; + var OriginalHTMLAudioElement = window.HTMLAudioElement; + if (!OriginalHTMLAudioElement) return; + function HTMLAudioElement(node) { + HTMLMediaElement.call(this, node); + } + HTMLAudioElement.prototype = Object.create(HTMLMediaElement.prototype); + registerWrapper(OriginalHTMLAudioElement, HTMLAudioElement, document.createElement("audio")); + function Audio(src) { + if (!(this instanceof Audio)) { + throw new TypeError("DOM object constructor cannot be called as a function."); + } + var node = unwrap(document.createElement("audio")); + HTMLMediaElement.call(this, node); + rewrap(node, this); + node.setAttribute("preload", "auto"); + if (src !== undefined) node.setAttribute("src", src); + } + Audio.prototype = HTMLAudioElement.prototype; + scope.wrappers.HTMLAudioElement = HTMLAudioElement; + scope.wrappers.Audio = Audio; +})(window.ShadowDOMPolyfill); + +(function(scope) { + "use strict"; + var HTMLElement = scope.wrappers.HTMLElement; + var mixin = scope.mixin; + var registerWrapper = scope.registerWrapper; + var rewrap = scope.rewrap; + var unwrap = scope.unwrap; + var wrap = scope.wrap; + var OriginalHTMLOptionElement = window.HTMLOptionElement; + function trimText(s) { + return s.replace(/\s+/g, " ").trim(); + } + function HTMLOptionElement(node) { + HTMLElement.call(this, node); + } + HTMLOptionElement.prototype = Object.create(HTMLElement.prototype); + mixin(HTMLOptionElement.prototype, { + get text() { + return trimText(this.textContent); + }, + set text(value) { + this.textContent = trimText(String(value)); + }, + get form() { + return wrap(unwrap(this).form); + } + }); + registerWrapper(OriginalHTMLOptionElement, HTMLOptionElement, document.createElement("option")); + function Option(text, value, defaultSelected, selected) { + if (!(this instanceof Option)) { + throw new TypeError("DOM object constructor cannot be called as a function."); + } + var node = unwrap(document.createElement("option")); + HTMLElement.call(this, node); + rewrap(node, this); + if (text !== undefined) node.text = text; + if (value !== undefined) node.setAttribute("value", value); + if (defaultSelected === true) node.setAttribute("selected", ""); + node.selected = selected === true; + } + Option.prototype = HTMLOptionElement.prototype; + scope.wrappers.HTMLOptionElement = HTMLOptionElement; + scope.wrappers.Option = Option; +})(window.ShadowDOMPolyfill); + +(function(scope) { + "use strict"; + var HTMLElement = scope.wrappers.HTMLElement; + var mixin = scope.mixin; + var registerWrapper = scope.registerWrapper; + var unwrap = scope.unwrap; + var wrap = scope.wrap; + var OriginalHTMLSelectElement = window.HTMLSelectElement; + function HTMLSelectElement(node) { + HTMLElement.call(this, node); + } + HTMLSelectElement.prototype = Object.create(HTMLElement.prototype); + mixin(HTMLSelectElement.prototype, { + add: function(element, before) { + if (typeof before === "object") before = unwrap(before); + unwrap(this).add(unwrap(element), before); + }, + remove: function(indexOrNode) { + if (indexOrNode === undefined) { + HTMLElement.prototype.remove.call(this); + return; + } + if (typeof indexOrNode === "object") indexOrNode = unwrap(indexOrNode); + unwrap(this).remove(indexOrNode); + }, + get form() { + return wrap(unwrap(this).form); + } + }); + registerWrapper(OriginalHTMLSelectElement, HTMLSelectElement, document.createElement("select")); + scope.wrappers.HTMLSelectElement = HTMLSelectElement; +})(window.ShadowDOMPolyfill); + +(function(scope) { + "use strict"; + var HTMLElement = scope.wrappers.HTMLElement; + var mixin = scope.mixin; + var registerWrapper = scope.registerWrapper; + var unwrap = scope.unwrap; + var wrap = scope.wrap; + var wrapHTMLCollection = scope.wrapHTMLCollection; + var OriginalHTMLTableElement = window.HTMLTableElement; + function HTMLTableElement(node) { + HTMLElement.call(this, node); + } + HTMLTableElement.prototype = Object.create(HTMLElement.prototype); + mixin(HTMLTableElement.prototype, { + get caption() { + return wrap(unwrap(this).caption); + }, + createCaption: function() { + return wrap(unwrap(this).createCaption()); + }, + get tHead() { + return wrap(unwrap(this).tHead); + }, + createTHead: function() { + return wrap(unwrap(this).createTHead()); + }, + createTFoot: function() { + return wrap(unwrap(this).createTFoot()); + }, + get tFoot() { + return wrap(unwrap(this).tFoot); + }, + get tBodies() { + return wrapHTMLCollection(unwrap(this).tBodies); + }, + createTBody: function() { + return wrap(unwrap(this).createTBody()); + }, + get rows() { + return wrapHTMLCollection(unwrap(this).rows); + }, + insertRow: function(index) { + return wrap(unwrap(this).insertRow(index)); + } + }); + registerWrapper(OriginalHTMLTableElement, HTMLTableElement, document.createElement("table")); + scope.wrappers.HTMLTableElement = HTMLTableElement; +})(window.ShadowDOMPolyfill); + +(function(scope) { + "use strict"; + var HTMLElement = scope.wrappers.HTMLElement; + var mixin = scope.mixin; + var registerWrapper = scope.registerWrapper; + var wrapHTMLCollection = scope.wrapHTMLCollection; + var unwrap = scope.unwrap; + var wrap = scope.wrap; + var OriginalHTMLTableSectionElement = window.HTMLTableSectionElement; + function HTMLTableSectionElement(node) { + HTMLElement.call(this, node); + } + HTMLTableSectionElement.prototype = Object.create(HTMLElement.prototype); + mixin(HTMLTableSectionElement.prototype, { + constructor: HTMLTableSectionElement, + get rows() { + return wrapHTMLCollection(unwrap(this).rows); + }, + insertRow: function(index) { + return wrap(unwrap(this).insertRow(index)); + } + }); + registerWrapper(OriginalHTMLTableSectionElement, HTMLTableSectionElement, document.createElement("thead")); + scope.wrappers.HTMLTableSectionElement = HTMLTableSectionElement; +})(window.ShadowDOMPolyfill); + +(function(scope) { + "use strict"; + var HTMLElement = scope.wrappers.HTMLElement; + var mixin = scope.mixin; + var registerWrapper = scope.registerWrapper; + var wrapHTMLCollection = scope.wrapHTMLCollection; + var unwrap = scope.unwrap; + var wrap = scope.wrap; + var OriginalHTMLTableRowElement = window.HTMLTableRowElement; + function HTMLTableRowElement(node) { + HTMLElement.call(this, node); + } + HTMLTableRowElement.prototype = Object.create(HTMLElement.prototype); + mixin(HTMLTableRowElement.prototype, { + get cells() { + return wrapHTMLCollection(unwrap(this).cells); + }, + insertCell: function(index) { + return wrap(unwrap(this).insertCell(index)); + } + }); + registerWrapper(OriginalHTMLTableRowElement, HTMLTableRowElement, document.createElement("tr")); + scope.wrappers.HTMLTableRowElement = HTMLTableRowElement; +})(window.ShadowDOMPolyfill); + +(function(scope) { + "use strict"; + var HTMLContentElement = scope.wrappers.HTMLContentElement; + var HTMLElement = scope.wrappers.HTMLElement; + var HTMLShadowElement = scope.wrappers.HTMLShadowElement; + var HTMLTemplateElement = scope.wrappers.HTMLTemplateElement; + var mixin = scope.mixin; + var registerWrapper = scope.registerWrapper; + var OriginalHTMLUnknownElement = window.HTMLUnknownElement; + function HTMLUnknownElement(node) { + switch (node.localName) { + case "content": + return new HTMLContentElement(node); + + case "shadow": + return new HTMLShadowElement(node); + + case "template": + return new HTMLTemplateElement(node); + } + HTMLElement.call(this, node); + } + HTMLUnknownElement.prototype = Object.create(HTMLElement.prototype); + registerWrapper(OriginalHTMLUnknownElement, HTMLUnknownElement); + scope.wrappers.HTMLUnknownElement = HTMLUnknownElement; +})(window.ShadowDOMPolyfill); + +(function(scope) { + "use strict"; + var Element = scope.wrappers.Element; + var HTMLElement = scope.wrappers.HTMLElement; + var registerObject = scope.registerObject; + var defineWrapGetter = scope.defineWrapGetter; + var SVG_NS = "http://www.w3.org/2000/svg"; + var svgTitleElement = document.createElementNS(SVG_NS, "title"); + var SVGTitleElement = registerObject(svgTitleElement); + var SVGElement = Object.getPrototypeOf(SVGTitleElement.prototype).constructor; + if (!("classList" in svgTitleElement)) { + var descr = Object.getOwnPropertyDescriptor(Element.prototype, "classList"); + Object.defineProperty(HTMLElement.prototype, "classList", descr); + delete Element.prototype.classList; + } + defineWrapGetter(SVGElement, "ownerSVGElement"); + scope.wrappers.SVGElement = SVGElement; +})(window.ShadowDOMPolyfill); + +(function(scope) { + "use strict"; + var mixin = scope.mixin; + var registerWrapper = scope.registerWrapper; + var unwrap = scope.unwrap; + var wrap = scope.wrap; + var OriginalSVGUseElement = window.SVGUseElement; + var SVG_NS = "http://www.w3.org/2000/svg"; + var gWrapper = wrap(document.createElementNS(SVG_NS, "g")); + var useElement = document.createElementNS(SVG_NS, "use"); + var SVGGElement = gWrapper.constructor; + var parentInterfacePrototype = Object.getPrototypeOf(SVGGElement.prototype); + var parentInterface = parentInterfacePrototype.constructor; + function SVGUseElement(impl) { + parentInterface.call(this, impl); + } + SVGUseElement.prototype = Object.create(parentInterfacePrototype); + if ("instanceRoot" in useElement) { + mixin(SVGUseElement.prototype, { + get instanceRoot() { + return wrap(unwrap(this).instanceRoot); + }, + get animatedInstanceRoot() { + return wrap(unwrap(this).animatedInstanceRoot); + } + }); + } + registerWrapper(OriginalSVGUseElement, SVGUseElement, useElement); + scope.wrappers.SVGUseElement = SVGUseElement; +})(window.ShadowDOMPolyfill); + +(function(scope) { + "use strict"; + var EventTarget = scope.wrappers.EventTarget; + var mixin = scope.mixin; + var registerWrapper = scope.registerWrapper; + var unsafeUnwrap = scope.unsafeUnwrap; + var wrap = scope.wrap; + var OriginalSVGElementInstance = window.SVGElementInstance; + if (!OriginalSVGElementInstance) return; + function SVGElementInstance(impl) { + EventTarget.call(this, impl); + } + SVGElementInstance.prototype = Object.create(EventTarget.prototype); + mixin(SVGElementInstance.prototype, { + get correspondingElement() { + return wrap(unsafeUnwrap(this).correspondingElement); + }, + get correspondingUseElement() { + return wrap(unsafeUnwrap(this).correspondingUseElement); + }, + get parentNode() { + return wrap(unsafeUnwrap(this).parentNode); + }, + get childNodes() { + throw new Error("Not implemented"); + }, + get firstChild() { + return wrap(unsafeUnwrap(this).firstChild); + }, + get lastChild() { + return wrap(unsafeUnwrap(this).lastChild); + }, + get previousSibling() { + return wrap(unsafeUnwrap(this).previousSibling); + }, + get nextSibling() { + return wrap(unsafeUnwrap(this).nextSibling); + } + }); + registerWrapper(OriginalSVGElementInstance, SVGElementInstance); + scope.wrappers.SVGElementInstance = SVGElementInstance; +})(window.ShadowDOMPolyfill); + +(function(scope) { + "use strict"; + var mixin = scope.mixin; + var registerWrapper = scope.registerWrapper; + var setWrapper = scope.setWrapper; + var unsafeUnwrap = scope.unsafeUnwrap; + var unwrap = scope.unwrap; + var unwrapIfNeeded = scope.unwrapIfNeeded; + var wrap = scope.wrap; + var OriginalCanvasRenderingContext2D = window.CanvasRenderingContext2D; + function CanvasRenderingContext2D(impl) { + setWrapper(impl, this); + } + mixin(CanvasRenderingContext2D.prototype, { + get canvas() { + return wrap(unsafeUnwrap(this).canvas); + }, + drawImage: function() { + arguments[0] = unwrapIfNeeded(arguments[0]); + unsafeUnwrap(this).drawImage.apply(unsafeUnwrap(this), arguments); + }, + createPattern: function() { + arguments[0] = unwrap(arguments[0]); + return unsafeUnwrap(this).createPattern.apply(unsafeUnwrap(this), arguments); + } + }); + registerWrapper(OriginalCanvasRenderingContext2D, CanvasRenderingContext2D, document.createElement("canvas").getContext("2d")); + scope.wrappers.CanvasRenderingContext2D = CanvasRenderingContext2D; +})(window.ShadowDOMPolyfill); + +(function(scope) { + "use strict"; + var mixin = scope.mixin; + var registerWrapper = scope.registerWrapper; + var setWrapper = scope.setWrapper; + var unsafeUnwrap = scope.unsafeUnwrap; + var unwrapIfNeeded = scope.unwrapIfNeeded; + var wrap = scope.wrap; + var OriginalWebGLRenderingContext = window.WebGLRenderingContext; + if (!OriginalWebGLRenderingContext) return; + function WebGLRenderingContext(impl) { + setWrapper(impl, this); + } + mixin(WebGLRenderingContext.prototype, { + get canvas() { + return wrap(unsafeUnwrap(this).canvas); + }, + texImage2D: function() { + arguments[5] = unwrapIfNeeded(arguments[5]); + unsafeUnwrap(this).texImage2D.apply(unsafeUnwrap(this), arguments); + }, + texSubImage2D: function() { + arguments[6] = unwrapIfNeeded(arguments[6]); + unsafeUnwrap(this).texSubImage2D.apply(unsafeUnwrap(this), arguments); + } + }); + var instanceProperties = /WebKit/.test(navigator.userAgent) ? { + drawingBufferHeight: null, + drawingBufferWidth: null + } : {}; + registerWrapper(OriginalWebGLRenderingContext, WebGLRenderingContext, instanceProperties); + scope.wrappers.WebGLRenderingContext = WebGLRenderingContext; +})(window.ShadowDOMPolyfill); + +(function(scope) { + "use strict"; + var GetElementsByInterface = scope.GetElementsByInterface; + var NonElementParentNodeInterface = scope.NonElementParentNodeInterface; + var ParentNodeInterface = scope.ParentNodeInterface; + var SelectorsInterface = scope.SelectorsInterface; + var mixin = scope.mixin; + var registerObject = scope.registerObject; + var DocumentFragment = registerObject(document.createDocumentFragment()); + mixin(DocumentFragment.prototype, ParentNodeInterface); + mixin(DocumentFragment.prototype, SelectorsInterface); + mixin(DocumentFragment.prototype, GetElementsByInterface); + mixin(DocumentFragment.prototype, NonElementParentNodeInterface); + var Comment = registerObject(document.createComment("")); + scope.wrappers.Comment = Comment; + scope.wrappers.DocumentFragment = DocumentFragment; +})(window.ShadowDOMPolyfill); + +(function(scope) { + "use strict"; + var DocumentFragment = scope.wrappers.DocumentFragment; + var TreeScope = scope.TreeScope; + var elementFromPoint = scope.elementFromPoint; + var getInnerHTML = scope.getInnerHTML; + var getTreeScope = scope.getTreeScope; + var mixin = scope.mixin; + var rewrap = scope.rewrap; + var setInnerHTML = scope.setInnerHTML; + var unsafeUnwrap = scope.unsafeUnwrap; + var unwrap = scope.unwrap; + var shadowHostTable = new WeakMap(); + var nextOlderShadowTreeTable = new WeakMap(); + function ShadowRoot(hostWrapper) { + var node = unwrap(unsafeUnwrap(hostWrapper).ownerDocument.createDocumentFragment()); + DocumentFragment.call(this, node); + rewrap(node, this); + var oldShadowRoot = hostWrapper.shadowRoot; + nextOlderShadowTreeTable.set(this, oldShadowRoot); + this.treeScope_ = new TreeScope(this, getTreeScope(oldShadowRoot || hostWrapper)); + shadowHostTable.set(this, hostWrapper); + } + ShadowRoot.prototype = Object.create(DocumentFragment.prototype); + mixin(ShadowRoot.prototype, { + constructor: ShadowRoot, + get innerHTML() { + return getInnerHTML(this); + }, + set innerHTML(value) { + setInnerHTML(this, value); + this.invalidateShadowRenderer(); + }, + get olderShadowRoot() { + return nextOlderShadowTreeTable.get(this) || null; + }, + get host() { + return shadowHostTable.get(this) || null; + }, + invalidateShadowRenderer: function() { + return shadowHostTable.get(this).invalidateShadowRenderer(); + }, + elementFromPoint: function(x, y) { + return elementFromPoint(this, this.ownerDocument, x, y); + } + }); + scope.wrappers.ShadowRoot = ShadowRoot; +})(window.ShadowDOMPolyfill); + +(function(scope) { + "use strict"; + var registerWrapper = scope.registerWrapper; + var setWrapper = scope.setWrapper; + var unsafeUnwrap = scope.unsafeUnwrap; + var unwrap = scope.unwrap; + var unwrapIfNeeded = scope.unwrapIfNeeded; + var wrap = scope.wrap; + var getTreeScope = scope.getTreeScope; + var OriginalRange = window.Range; + var ShadowRoot = scope.wrappers.ShadowRoot; + function getHost(node) { + var root = getTreeScope(node).root; + if (root instanceof ShadowRoot) { + return root.host; + } + return null; + } + function hostNodeToShadowNode(refNode, offset) { + if (refNode.shadowRoot) { + offset = Math.min(refNode.childNodes.length - 1, offset); + var child = refNode.childNodes[offset]; + if (child) { + var insertionPoint = scope.getDestinationInsertionPoints(child); + if (insertionPoint.length > 0) { + var parentNode = insertionPoint[0].parentNode; + if (parentNode.nodeType == Node.ELEMENT_NODE) { + refNode = parentNode; + } + } + } + } + return refNode; + } + function shadowNodeToHostNode(node) { + node = wrap(node); + return getHost(node) || node; + } + function Range(impl) { + setWrapper(impl, this); + } + Range.prototype = { + get startContainer() { + return shadowNodeToHostNode(unsafeUnwrap(this).startContainer); + }, + get endContainer() { + return shadowNodeToHostNode(unsafeUnwrap(this).endContainer); + }, + get commonAncestorContainer() { + return shadowNodeToHostNode(unsafeUnwrap(this).commonAncestorContainer); + }, + setStart: function(refNode, offset) { + refNode = hostNodeToShadowNode(refNode, offset); + unsafeUnwrap(this).setStart(unwrapIfNeeded(refNode), offset); + }, + setEnd: function(refNode, offset) { + refNode = hostNodeToShadowNode(refNode, offset); + unsafeUnwrap(this).setEnd(unwrapIfNeeded(refNode), offset); + }, + setStartBefore: function(refNode) { + unsafeUnwrap(this).setStartBefore(unwrapIfNeeded(refNode)); + }, + setStartAfter: function(refNode) { + unsafeUnwrap(this).setStartAfter(unwrapIfNeeded(refNode)); + }, + setEndBefore: function(refNode) { + unsafeUnwrap(this).setEndBefore(unwrapIfNeeded(refNode)); + }, + setEndAfter: function(refNode) { + unsafeUnwrap(this).setEndAfter(unwrapIfNeeded(refNode)); + }, + selectNode: function(refNode) { + unsafeUnwrap(this).selectNode(unwrapIfNeeded(refNode)); + }, + selectNodeContents: function(refNode) { + unsafeUnwrap(this).selectNodeContents(unwrapIfNeeded(refNode)); + }, + compareBoundaryPoints: function(how, sourceRange) { + return unsafeUnwrap(this).compareBoundaryPoints(how, unwrap(sourceRange)); + }, + extractContents: function() { + return wrap(unsafeUnwrap(this).extractContents()); + }, + cloneContents: function() { + return wrap(unsafeUnwrap(this).cloneContents()); + }, + insertNode: function(node) { + unsafeUnwrap(this).insertNode(unwrapIfNeeded(node)); + }, + surroundContents: function(newParent) { + unsafeUnwrap(this).surroundContents(unwrapIfNeeded(newParent)); + }, + cloneRange: function() { + return wrap(unsafeUnwrap(this).cloneRange()); + }, + isPointInRange: function(node, offset) { + return unsafeUnwrap(this).isPointInRange(unwrapIfNeeded(node), offset); + }, + comparePoint: function(node, offset) { + return unsafeUnwrap(this).comparePoint(unwrapIfNeeded(node), offset); + }, + intersectsNode: function(node) { + return unsafeUnwrap(this).intersectsNode(unwrapIfNeeded(node)); + }, + toString: function() { + return unsafeUnwrap(this).toString(); + } + }; + if (OriginalRange.prototype.createContextualFragment) { + Range.prototype.createContextualFragment = function(html) { + return wrap(unsafeUnwrap(this).createContextualFragment(html)); + }; + } + registerWrapper(window.Range, Range, document.createRange()); + scope.wrappers.Range = Range; +})(window.ShadowDOMPolyfill); + +(function(scope) { + "use strict"; + var Element = scope.wrappers.Element; + var HTMLContentElement = scope.wrappers.HTMLContentElement; + var HTMLShadowElement = scope.wrappers.HTMLShadowElement; + var Node = scope.wrappers.Node; + var ShadowRoot = scope.wrappers.ShadowRoot; + var assert = scope.assert; + var getTreeScope = scope.getTreeScope; + var mixin = scope.mixin; + var oneOf = scope.oneOf; + var unsafeUnwrap = scope.unsafeUnwrap; + var unwrap = scope.unwrap; + var wrap = scope.wrap; + var ArraySplice = scope.ArraySplice; + function updateWrapperUpAndSideways(wrapper) { + wrapper.previousSibling_ = wrapper.previousSibling; + wrapper.nextSibling_ = wrapper.nextSibling; + wrapper.parentNode_ = wrapper.parentNode; + } + function updateWrapperDown(wrapper) { + wrapper.firstChild_ = wrapper.firstChild; + wrapper.lastChild_ = wrapper.lastChild; + } + function updateAllChildNodes(parentNodeWrapper) { + assert(parentNodeWrapper instanceof Node); + for (var childWrapper = parentNodeWrapper.firstChild; childWrapper; childWrapper = childWrapper.nextSibling) { + updateWrapperUpAndSideways(childWrapper); + } + updateWrapperDown(parentNodeWrapper); + } + function insertBefore(parentNodeWrapper, newChildWrapper, refChildWrapper) { + var parentNode = unwrap(parentNodeWrapper); + var newChild = unwrap(newChildWrapper); + var refChild = refChildWrapper ? unwrap(refChildWrapper) : null; + remove(newChildWrapper); + updateWrapperUpAndSideways(newChildWrapper); + if (!refChildWrapper) { + parentNodeWrapper.lastChild_ = parentNodeWrapper.lastChild; + if (parentNodeWrapper.lastChild === parentNodeWrapper.firstChild) parentNodeWrapper.firstChild_ = parentNodeWrapper.firstChild; + var lastChildWrapper = wrap(parentNode.lastChild); + if (lastChildWrapper) lastChildWrapper.nextSibling_ = lastChildWrapper.nextSibling; + } else { + if (parentNodeWrapper.firstChild === refChildWrapper) parentNodeWrapper.firstChild_ = refChildWrapper; + refChildWrapper.previousSibling_ = refChildWrapper.previousSibling; + } + scope.originalInsertBefore.call(parentNode, newChild, refChild); + } + function remove(nodeWrapper) { + var node = unwrap(nodeWrapper); + var parentNode = node.parentNode; + if (!parentNode) return; + var parentNodeWrapper = wrap(parentNode); + updateWrapperUpAndSideways(nodeWrapper); + if (nodeWrapper.previousSibling) nodeWrapper.previousSibling.nextSibling_ = nodeWrapper; + if (nodeWrapper.nextSibling) nodeWrapper.nextSibling.previousSibling_ = nodeWrapper; + if (parentNodeWrapper.lastChild === nodeWrapper) parentNodeWrapper.lastChild_ = nodeWrapper; + if (parentNodeWrapper.firstChild === nodeWrapper) parentNodeWrapper.firstChild_ = nodeWrapper; + scope.originalRemoveChild.call(parentNode, node); + } + var distributedNodesTable = new WeakMap(); + var destinationInsertionPointsTable = new WeakMap(); + var rendererForHostTable = new WeakMap(); + function resetDistributedNodes(insertionPoint) { + distributedNodesTable.set(insertionPoint, []); + } + function getDistributedNodes(insertionPoint) { + var rv = distributedNodesTable.get(insertionPoint); + if (!rv) distributedNodesTable.set(insertionPoint, rv = []); + return rv; + } + function getChildNodesSnapshot(node) { + var result = [], i = 0; + for (var child = node.firstChild; child; child = child.nextSibling) { + result[i++] = child; + } + return result; + } + var request = oneOf(window, [ "requestAnimationFrame", "mozRequestAnimationFrame", "webkitRequestAnimationFrame", "setTimeout" ]); + var pendingDirtyRenderers = []; + var renderTimer; + function renderAllPending() { + for (var i = 0; i < pendingDirtyRenderers.length; i++) { + var renderer = pendingDirtyRenderers[i]; + var parentRenderer = renderer.parentRenderer; + if (parentRenderer && parentRenderer.dirty) continue; + renderer.render(); + } + pendingDirtyRenderers = []; + } + function handleRequestAnimationFrame() { + renderTimer = null; + renderAllPending(); + } + function getRendererForHost(host) { + var renderer = rendererForHostTable.get(host); + if (!renderer) { + renderer = new ShadowRenderer(host); + rendererForHostTable.set(host, renderer); + } + return renderer; + } + function getShadowRootAncestor(node) { + var root = getTreeScope(node).root; + if (root instanceof ShadowRoot) return root; + return null; + } + function getRendererForShadowRoot(shadowRoot) { + return getRendererForHost(shadowRoot.host); + } + var spliceDiff = new ArraySplice(); + spliceDiff.equals = function(renderNode, rawNode) { + return unwrap(renderNode.node) === rawNode; + }; + function RenderNode(node) { + this.skip = false; + this.node = node; + this.childNodes = []; + } + RenderNode.prototype = { + append: function(node) { + var rv = new RenderNode(node); + this.childNodes.push(rv); + return rv; + }, + sync: function(opt_added) { + if (this.skip) return; + var nodeWrapper = this.node; + var newChildren = this.childNodes; + var oldChildren = getChildNodesSnapshot(unwrap(nodeWrapper)); + var added = opt_added || new WeakMap(); + var splices = spliceDiff.calculateSplices(newChildren, oldChildren); + var newIndex = 0, oldIndex = 0; + var lastIndex = 0; + for (var i = 0; i < splices.length; i++) { + var splice = splices[i]; + for (;lastIndex < splice.index; lastIndex++) { + oldIndex++; + newChildren[newIndex++].sync(added); + } + var removedCount = splice.removed.length; + for (var j = 0; j < removedCount; j++) { + var wrapper = wrap(oldChildren[oldIndex++]); + if (!added.get(wrapper)) remove(wrapper); + } + var addedCount = splice.addedCount; + var refNode = oldChildren[oldIndex] && wrap(oldChildren[oldIndex]); + for (var j = 0; j < addedCount; j++) { + var newChildRenderNode = newChildren[newIndex++]; + var newChildWrapper = newChildRenderNode.node; + insertBefore(nodeWrapper, newChildWrapper, refNode); + added.set(newChildWrapper, true); + newChildRenderNode.sync(added); + } + lastIndex += addedCount; + } + for (var i = lastIndex; i < newChildren.length; i++) { + newChildren[i].sync(added); + } + } + }; + function ShadowRenderer(host) { + this.host = host; + this.dirty = false; + this.invalidateAttributes(); + this.associateNode(host); + } + ShadowRenderer.prototype = { + render: function(opt_renderNode) { + if (!this.dirty) return; + this.invalidateAttributes(); + var host = this.host; + this.distribution(host); + var renderNode = opt_renderNode || new RenderNode(host); + this.buildRenderTree(renderNode, host); + var topMostRenderer = !opt_renderNode; + if (topMostRenderer) renderNode.sync(); + this.dirty = false; + }, + get parentRenderer() { + return getTreeScope(this.host).renderer; + }, + invalidate: function() { + if (!this.dirty) { + this.dirty = true; + var parentRenderer = this.parentRenderer; + if (parentRenderer) parentRenderer.invalidate(); + pendingDirtyRenderers.push(this); + if (renderTimer) return; + renderTimer = window[request](handleRequestAnimationFrame, 0); + } + }, + distribution: function(root) { + this.resetAllSubtrees(root); + this.distributionResolution(root); + }, + resetAll: function(node) { + if (isInsertionPoint(node)) resetDistributedNodes(node); else resetDestinationInsertionPoints(node); + this.resetAllSubtrees(node); + }, + resetAllSubtrees: function(node) { + for (var child = node.firstChild; child; child = child.nextSibling) { + this.resetAll(child); + } + if (node.shadowRoot) this.resetAll(node.shadowRoot); + if (node.olderShadowRoot) this.resetAll(node.olderShadowRoot); + }, + distributionResolution: function(node) { + if (isShadowHost(node)) { + var shadowHost = node; + var pool = poolPopulation(shadowHost); + var shadowTrees = getShadowTrees(shadowHost); + for (var i = 0; i < shadowTrees.length; i++) { + this.poolDistribution(shadowTrees[i], pool); + } + for (var i = shadowTrees.length - 1; i >= 0; i--) { + var shadowTree = shadowTrees[i]; + var shadow = getShadowInsertionPoint(shadowTree); + if (shadow) { + var olderShadowRoot = shadowTree.olderShadowRoot; + if (olderShadowRoot) { + pool = poolPopulation(olderShadowRoot); + } + for (var j = 0; j < pool.length; j++) { + destributeNodeInto(pool[j], shadow); + } + } + this.distributionResolution(shadowTree); + } + } + for (var child = node.firstChild; child; child = child.nextSibling) { + this.distributionResolution(child); + } + }, + poolDistribution: function(node, pool) { + if (node instanceof HTMLShadowElement) return; + if (node instanceof HTMLContentElement) { + var content = node; + this.updateDependentAttributes(content.getAttribute("select")); + var anyDistributed = false; + for (var i = 0; i < pool.length; i++) { + var node = pool[i]; + if (!node) continue; + if (matches(node, content)) { + destributeNodeInto(node, content); + pool[i] = undefined; + anyDistributed = true; + } + } + if (!anyDistributed) { + for (var child = content.firstChild; child; child = child.nextSibling) { + destributeNodeInto(child, content); + } + } + return; + } + for (var child = node.firstChild; child; child = child.nextSibling) { + this.poolDistribution(child, pool); + } + }, + buildRenderTree: function(renderNode, node) { + var children = this.compose(node); + for (var i = 0; i < children.length; i++) { + var child = children[i]; + var childRenderNode = renderNode.append(child); + this.buildRenderTree(childRenderNode, child); + } + if (isShadowHost(node)) { + var renderer = getRendererForHost(node); + renderer.dirty = false; + } + }, + compose: function(node) { + var children = []; + var p = node.shadowRoot || node; + for (var child = p.firstChild; child; child = child.nextSibling) { + if (isInsertionPoint(child)) { + this.associateNode(p); + var distributedNodes = getDistributedNodes(child); + for (var j = 0; j < distributedNodes.length; j++) { + var distributedNode = distributedNodes[j]; + if (isFinalDestination(child, distributedNode)) children.push(distributedNode); + } + } else { + children.push(child); + } + } + return children; + }, + invalidateAttributes: function() { + this.attributes = Object.create(null); + }, + updateDependentAttributes: function(selector) { + if (!selector) return; + var attributes = this.attributes; + if (/\.\w+/.test(selector)) attributes["class"] = true; + if (/#\w+/.test(selector)) attributes["id"] = true; + selector.replace(/\[\s*([^\s=\|~\]]+)/g, function(_, name) { + attributes[name] = true; + }); + }, + dependsOnAttribute: function(name) { + return this.attributes[name]; + }, + associateNode: function(node) { + unsafeUnwrap(node).polymerShadowRenderer_ = this; + } + }; + function poolPopulation(node) { + var pool = []; + for (var child = node.firstChild; child; child = child.nextSibling) { + if (isInsertionPoint(child)) { + pool.push.apply(pool, getDistributedNodes(child)); + } else { + pool.push(child); + } + } + return pool; + } + function getShadowInsertionPoint(node) { + if (node instanceof HTMLShadowElement) return node; + if (node instanceof HTMLContentElement) return null; + for (var child = node.firstChild; child; child = child.nextSibling) { + var res = getShadowInsertionPoint(child); + if (res) return res; + } + return null; + } + function destributeNodeInto(child, insertionPoint) { + getDistributedNodes(insertionPoint).push(child); + var points = destinationInsertionPointsTable.get(child); + if (!points) destinationInsertionPointsTable.set(child, [ insertionPoint ]); else points.push(insertionPoint); + } + function getDestinationInsertionPoints(node) { + return destinationInsertionPointsTable.get(node); + } + function resetDestinationInsertionPoints(node) { + destinationInsertionPointsTable.set(node, undefined); + } + var selectorStartCharRe = /^(:not\()?[*.#[a-zA-Z_|]/; + function matches(node, contentElement) { + var select = contentElement.getAttribute("select"); + if (!select) return true; + select = select.trim(); + if (!select) return true; + if (!(node instanceof Element)) return false; + if (!selectorStartCharRe.test(select)) return false; + try { + return node.matches(select); + } catch (ex) { + return false; + } + } + function isFinalDestination(insertionPoint, node) { + var points = getDestinationInsertionPoints(node); + return points && points[points.length - 1] === insertionPoint; + } + function isInsertionPoint(node) { + return node instanceof HTMLContentElement || node instanceof HTMLShadowElement; + } + function isShadowHost(shadowHost) { + return shadowHost.shadowRoot; + } + function getShadowTrees(host) { + var trees = []; + for (var tree = host.shadowRoot; tree; tree = tree.olderShadowRoot) { + trees.push(tree); + } + return trees; + } + function render(host) { + new ShadowRenderer(host).render(); + } + Node.prototype.invalidateShadowRenderer = function(force) { + var renderer = unsafeUnwrap(this).polymerShadowRenderer_; + if (renderer) { + renderer.invalidate(); + return true; + } + return false; + }; + HTMLContentElement.prototype.getDistributedNodes = HTMLShadowElement.prototype.getDistributedNodes = function() { + renderAllPending(); + return getDistributedNodes(this); + }; + Element.prototype.getDestinationInsertionPoints = function() { + renderAllPending(); + return getDestinationInsertionPoints(this) || []; + }; + HTMLContentElement.prototype.nodeIsInserted_ = HTMLShadowElement.prototype.nodeIsInserted_ = function() { + this.invalidateShadowRenderer(); + var shadowRoot = getShadowRootAncestor(this); + var renderer; + if (shadowRoot) renderer = getRendererForShadowRoot(shadowRoot); + unsafeUnwrap(this).polymerShadowRenderer_ = renderer; + if (renderer) renderer.invalidate(); + }; + scope.getRendererForHost = getRendererForHost; + scope.getShadowTrees = getShadowTrees; + scope.renderAllPending = renderAllPending; + scope.getDestinationInsertionPoints = getDestinationInsertionPoints; + scope.visual = { + insertBefore: insertBefore, + remove: remove + }; +})(window.ShadowDOMPolyfill); + +(function(scope) { + "use strict"; + var HTMLElement = scope.wrappers.HTMLElement; + var assert = scope.assert; + var mixin = scope.mixin; + var registerWrapper = scope.registerWrapper; + var unwrap = scope.unwrap; + var wrap = scope.wrap; + var elementsWithFormProperty = [ "HTMLButtonElement", "HTMLFieldSetElement", "HTMLInputElement", "HTMLKeygenElement", "HTMLLabelElement", "HTMLLegendElement", "HTMLObjectElement", "HTMLOutputElement", "HTMLTextAreaElement" ]; + function createWrapperConstructor(name) { + if (!window[name]) return; + assert(!scope.wrappers[name]); + var GeneratedWrapper = function(node) { + HTMLElement.call(this, node); + }; + GeneratedWrapper.prototype = Object.create(HTMLElement.prototype); + mixin(GeneratedWrapper.prototype, { + get form() { + return wrap(unwrap(this).form); + } + }); + registerWrapper(window[name], GeneratedWrapper, document.createElement(name.slice(4, -7))); + scope.wrappers[name] = GeneratedWrapper; + } + elementsWithFormProperty.forEach(createWrapperConstructor); +})(window.ShadowDOMPolyfill); + +(function(scope) { + "use strict"; + var registerWrapper = scope.registerWrapper; + var setWrapper = scope.setWrapper; + var unsafeUnwrap = scope.unsafeUnwrap; + var unwrap = scope.unwrap; + var unwrapIfNeeded = scope.unwrapIfNeeded; + var wrap = scope.wrap; + var OriginalSelection = window.Selection; + function Selection(impl) { + setWrapper(impl, this); + } + Selection.prototype = { + get anchorNode() { + return wrap(unsafeUnwrap(this).anchorNode); + }, + get focusNode() { + return wrap(unsafeUnwrap(this).focusNode); + }, + addRange: function(range) { + unsafeUnwrap(this).addRange(unwrapIfNeeded(range)); + }, + collapse: function(node, index) { + unsafeUnwrap(this).collapse(unwrapIfNeeded(node), index); + }, + containsNode: function(node, allowPartial) { + return unsafeUnwrap(this).containsNode(unwrapIfNeeded(node), allowPartial); + }, + getRangeAt: function(index) { + return wrap(unsafeUnwrap(this).getRangeAt(index)); + }, + removeRange: function(range) { + unsafeUnwrap(this).removeRange(unwrap(range)); + }, + selectAllChildren: function(node) { + unsafeUnwrap(this).selectAllChildren(unwrapIfNeeded(node)); + }, + toString: function() { + return unsafeUnwrap(this).toString(); + } + }; + if (OriginalSelection.prototype.extend) { + Selection.prototype.extend = function(node, offset) { + unsafeUnwrap(this).extend(unwrapIfNeeded(node), offset); + }; + } + registerWrapper(window.Selection, Selection, window.getSelection()); + scope.wrappers.Selection = Selection; +})(window.ShadowDOMPolyfill); + +(function(scope) { + "use strict"; + var registerWrapper = scope.registerWrapper; + var setWrapper = scope.setWrapper; + var unsafeUnwrap = scope.unsafeUnwrap; + var unwrapIfNeeded = scope.unwrapIfNeeded; + var wrap = scope.wrap; + var OriginalTreeWalker = window.TreeWalker; + function TreeWalker(impl) { + setWrapper(impl, this); + } + TreeWalker.prototype = { + get root() { + return wrap(unsafeUnwrap(this).root); + }, + get currentNode() { + return wrap(unsafeUnwrap(this).currentNode); + }, + set currentNode(node) { + unsafeUnwrap(this).currentNode = unwrapIfNeeded(node); + }, + get filter() { + return unsafeUnwrap(this).filter; + }, + parentNode: function() { + return wrap(unsafeUnwrap(this).parentNode()); + }, + firstChild: function() { + return wrap(unsafeUnwrap(this).firstChild()); + }, + lastChild: function() { + return wrap(unsafeUnwrap(this).lastChild()); + }, + previousSibling: function() { + return wrap(unsafeUnwrap(this).previousSibling()); + }, + previousNode: function() { + return wrap(unsafeUnwrap(this).previousNode()); + }, + nextNode: function() { + return wrap(unsafeUnwrap(this).nextNode()); + } + }; + registerWrapper(OriginalTreeWalker, TreeWalker); + scope.wrappers.TreeWalker = TreeWalker; +})(window.ShadowDOMPolyfill); + +(function(scope) { + "use strict"; + var GetElementsByInterface = scope.GetElementsByInterface; + var Node = scope.wrappers.Node; + var ParentNodeInterface = scope.ParentNodeInterface; + var NonElementParentNodeInterface = scope.NonElementParentNodeInterface; + var Selection = scope.wrappers.Selection; + var SelectorsInterface = scope.SelectorsInterface; + var ShadowRoot = scope.wrappers.ShadowRoot; + var TreeScope = scope.TreeScope; + var cloneNode = scope.cloneNode; + var defineWrapGetter = scope.defineWrapGetter; + var elementFromPoint = scope.elementFromPoint; + var forwardMethodsToWrapper = scope.forwardMethodsToWrapper; + var matchesNames = scope.matchesNames; + var mixin = scope.mixin; + var registerWrapper = scope.registerWrapper; + var renderAllPending = scope.renderAllPending; + var rewrap = scope.rewrap; + var setWrapper = scope.setWrapper; + var unsafeUnwrap = scope.unsafeUnwrap; + var unwrap = scope.unwrap; + var wrap = scope.wrap; + var wrapEventTargetMethods = scope.wrapEventTargetMethods; + var wrapNodeList = scope.wrapNodeList; + var implementationTable = new WeakMap(); + function Document(node) { + Node.call(this, node); + this.treeScope_ = new TreeScope(this, null); + } + Document.prototype = Object.create(Node.prototype); + defineWrapGetter(Document, "documentElement"); + defineWrapGetter(Document, "body"); + defineWrapGetter(Document, "head"); + function wrapMethod(name) { + var original = document[name]; + Document.prototype[name] = function() { + return wrap(original.apply(unsafeUnwrap(this), arguments)); + }; + } + [ "createComment", "createDocumentFragment", "createElement", "createElementNS", "createEvent", "createEventNS", "createRange", "createTextNode" ].forEach(wrapMethod); + var originalAdoptNode = document.adoptNode; + function adoptNodeNoRemove(node, doc) { + originalAdoptNode.call(unsafeUnwrap(doc), unwrap(node)); + adoptSubtree(node, doc); + } + function adoptSubtree(node, doc) { + if (node.shadowRoot) doc.adoptNode(node.shadowRoot); + if (node instanceof ShadowRoot) adoptOlderShadowRoots(node, doc); + for (var child = node.firstChild; child; child = child.nextSibling) { + adoptSubtree(child, doc); + } + } + function adoptOlderShadowRoots(shadowRoot, doc) { + var oldShadowRoot = shadowRoot.olderShadowRoot; + if (oldShadowRoot) doc.adoptNode(oldShadowRoot); + } + var originalGetSelection = document.getSelection; + mixin(Document.prototype, { + adoptNode: function(node) { + if (node.parentNode) node.parentNode.removeChild(node); + adoptNodeNoRemove(node, this); + return node; + }, + elementFromPoint: function(x, y) { + return elementFromPoint(this, this, x, y); + }, + importNode: function(node, deep) { + return cloneNode(node, deep, unsafeUnwrap(this)); + }, + getSelection: function() { + renderAllPending(); + return new Selection(originalGetSelection.call(unwrap(this))); + }, + getElementsByName: function(name) { + return SelectorsInterface.querySelectorAll.call(this, "[name=" + JSON.stringify(String(name)) + "]"); + } + }); + var originalCreateTreeWalker = document.createTreeWalker; + var TreeWalkerWrapper = scope.wrappers.TreeWalker; + Document.prototype.createTreeWalker = function(root, whatToShow, filter, expandEntityReferences) { + var newFilter = null; + if (filter) { + if (filter.acceptNode && typeof filter.acceptNode === "function") { + newFilter = { + acceptNode: function(node) { + return filter.acceptNode(wrap(node)); + } + }; + } else if (typeof filter === "function") { + newFilter = function(node) { + return filter(wrap(node)); + }; + } + } + return new TreeWalkerWrapper(originalCreateTreeWalker.call(unwrap(this), unwrap(root), whatToShow, newFilter, expandEntityReferences)); + }; + if (document.registerElement) { + var originalRegisterElement = document.registerElement; + Document.prototype.registerElement = function(tagName, object) { + var prototype, extendsOption; + if (object !== undefined) { + prototype = object.prototype; + extendsOption = object.extends; + } + if (!prototype) prototype = Object.create(HTMLElement.prototype); + if (scope.nativePrototypeTable.get(prototype)) { + throw new Error("NotSupportedError"); + } + var proto = Object.getPrototypeOf(prototype); + var nativePrototype; + var prototypes = []; + while (proto) { + nativePrototype = scope.nativePrototypeTable.get(proto); + if (nativePrototype) break; + prototypes.push(proto); + proto = Object.getPrototypeOf(proto); + } + if (!nativePrototype) { + throw new Error("NotSupportedError"); + } + var newPrototype = Object.create(nativePrototype); + for (var i = prototypes.length - 1; i >= 0; i--) { + newPrototype = Object.create(newPrototype); + } + [ "createdCallback", "attachedCallback", "detachedCallback", "attributeChangedCallback" ].forEach(function(name) { + var f = prototype[name]; + if (!f) return; + newPrototype[name] = function() { + if (!(wrap(this) instanceof CustomElementConstructor)) { + rewrap(this); + } + f.apply(wrap(this), arguments); + }; + }); + var p = { + prototype: newPrototype + }; + if (extendsOption) p.extends = extendsOption; + function CustomElementConstructor(node) { + if (!node) { + if (extendsOption) { + return document.createElement(extendsOption, tagName); + } else { + return document.createElement(tagName); + } + } + setWrapper(node, this); + } + CustomElementConstructor.prototype = prototype; + CustomElementConstructor.prototype.constructor = CustomElementConstructor; + scope.constructorTable.set(newPrototype, CustomElementConstructor); + scope.nativePrototypeTable.set(prototype, newPrototype); + var nativeConstructor = originalRegisterElement.call(unwrap(this), tagName, p); + return CustomElementConstructor; + }; + forwardMethodsToWrapper([ window.HTMLDocument || window.Document ], [ "registerElement" ]); + } + forwardMethodsToWrapper([ window.HTMLBodyElement, window.HTMLDocument || window.Document, window.HTMLHeadElement, window.HTMLHtmlElement ], [ "appendChild", "compareDocumentPosition", "contains", "getElementsByClassName", "getElementsByTagName", "getElementsByTagNameNS", "insertBefore", "querySelector", "querySelectorAll", "removeChild", "replaceChild" ]); + forwardMethodsToWrapper([ window.HTMLBodyElement, window.HTMLHeadElement, window.HTMLHtmlElement ], matchesNames); + forwardMethodsToWrapper([ window.HTMLDocument || window.Document ], [ "adoptNode", "importNode", "contains", "createComment", "createDocumentFragment", "createElement", "createElementNS", "createEvent", "createEventNS", "createRange", "createTextNode", "createTreeWalker", "elementFromPoint", "getElementById", "getElementsByName", "getSelection" ]); + mixin(Document.prototype, GetElementsByInterface); + mixin(Document.prototype, ParentNodeInterface); + mixin(Document.prototype, SelectorsInterface); + mixin(Document.prototype, NonElementParentNodeInterface); + mixin(Document.prototype, { + get implementation() { + var implementation = implementationTable.get(this); + if (implementation) return implementation; + implementation = new DOMImplementation(unwrap(this).implementation); + implementationTable.set(this, implementation); + return implementation; + }, + get defaultView() { + return wrap(unwrap(this).defaultView); + } + }); + registerWrapper(window.Document, Document, document.implementation.createHTMLDocument("")); + if (window.HTMLDocument) registerWrapper(window.HTMLDocument, Document); + wrapEventTargetMethods([ window.HTMLBodyElement, window.HTMLDocument || window.Document, window.HTMLHeadElement ]); + function DOMImplementation(impl) { + setWrapper(impl, this); + } + var originalCreateDocument = document.implementation.createDocument; + DOMImplementation.prototype.createDocument = function() { + arguments[2] = unwrap(arguments[2]); + return wrap(originalCreateDocument.apply(unsafeUnwrap(this), arguments)); + }; + function wrapImplMethod(constructor, name) { + var original = document.implementation[name]; + constructor.prototype[name] = function() { + return wrap(original.apply(unsafeUnwrap(this), arguments)); + }; + } + function forwardImplMethod(constructor, name) { + var original = document.implementation[name]; + constructor.prototype[name] = function() { + return original.apply(unsafeUnwrap(this), arguments); + }; + } + wrapImplMethod(DOMImplementation, "createDocumentType"); + wrapImplMethod(DOMImplementation, "createHTMLDocument"); + forwardImplMethod(DOMImplementation, "hasFeature"); + registerWrapper(window.DOMImplementation, DOMImplementation); + forwardMethodsToWrapper([ window.DOMImplementation ], [ "createDocument", "createDocumentType", "createHTMLDocument", "hasFeature" ]); + scope.adoptNodeNoRemove = adoptNodeNoRemove; + scope.wrappers.DOMImplementation = DOMImplementation; + scope.wrappers.Document = Document; +})(window.ShadowDOMPolyfill); + +(function(scope) { + "use strict"; + var EventTarget = scope.wrappers.EventTarget; + var Selection = scope.wrappers.Selection; + var mixin = scope.mixin; + var registerWrapper = scope.registerWrapper; + var renderAllPending = scope.renderAllPending; + var unwrap = scope.unwrap; + var unwrapIfNeeded = scope.unwrapIfNeeded; + var wrap = scope.wrap; + var OriginalWindow = window.Window; + var originalGetComputedStyle = window.getComputedStyle; + var originalGetDefaultComputedStyle = window.getDefaultComputedStyle; + var originalGetSelection = window.getSelection; + function Window(impl) { + EventTarget.call(this, impl); + } + Window.prototype = Object.create(EventTarget.prototype); + OriginalWindow.prototype.getComputedStyle = function(el, pseudo) { + return wrap(this || window).getComputedStyle(unwrapIfNeeded(el), pseudo); + }; + if (originalGetDefaultComputedStyle) { + OriginalWindow.prototype.getDefaultComputedStyle = function(el, pseudo) { + return wrap(this || window).getDefaultComputedStyle(unwrapIfNeeded(el), pseudo); + }; + } + OriginalWindow.prototype.getSelection = function() { + return wrap(this || window).getSelection(); + }; + delete window.getComputedStyle; + delete window.getDefaultComputedStyle; + delete window.getSelection; + [ "addEventListener", "removeEventListener", "dispatchEvent" ].forEach(function(name) { + OriginalWindow.prototype[name] = function() { + var w = wrap(this || window); + return w[name].apply(w, arguments); + }; + delete window[name]; + }); + mixin(Window.prototype, { + getComputedStyle: function(el, pseudo) { + renderAllPending(); + return originalGetComputedStyle.call(unwrap(this), unwrapIfNeeded(el), pseudo); + }, + getSelection: function() { + renderAllPending(); + return new Selection(originalGetSelection.call(unwrap(this))); + }, + get document() { + return wrap(unwrap(this).document); + } + }); + if (originalGetDefaultComputedStyle) { + Window.prototype.getDefaultComputedStyle = function(el, pseudo) { + renderAllPending(); + return originalGetDefaultComputedStyle.call(unwrap(this), unwrapIfNeeded(el), pseudo); + }; + } + registerWrapper(OriginalWindow, Window, window); + scope.wrappers.Window = Window; +})(window.ShadowDOMPolyfill); + +(function(scope) { + "use strict"; + var unwrap = scope.unwrap; + var OriginalDataTransfer = window.DataTransfer || window.Clipboard; + var OriginalDataTransferSetDragImage = OriginalDataTransfer.prototype.setDragImage; + if (OriginalDataTransferSetDragImage) { + OriginalDataTransfer.prototype.setDragImage = function(image, x, y) { + OriginalDataTransferSetDragImage.call(this, unwrap(image), x, y); + }; + } +})(window.ShadowDOMPolyfill); + +(function(scope) { + "use strict"; + var registerWrapper = scope.registerWrapper; + var setWrapper = scope.setWrapper; + var unwrap = scope.unwrap; + var OriginalFormData = window.FormData; + if (!OriginalFormData) return; + function FormData(formElement) { + var impl; + if (formElement instanceof OriginalFormData) { + impl = formElement; + } else { + impl = new OriginalFormData(formElement && unwrap(formElement)); + } + setWrapper(impl, this); + } + registerWrapper(OriginalFormData, FormData, new OriginalFormData()); + scope.wrappers.FormData = FormData; +})(window.ShadowDOMPolyfill); + +(function(scope) { + "use strict"; + var unwrapIfNeeded = scope.unwrapIfNeeded; + var originalSend = XMLHttpRequest.prototype.send; + XMLHttpRequest.prototype.send = function(obj) { + return originalSend.call(this, unwrapIfNeeded(obj)); + }; +})(window.ShadowDOMPolyfill); + +(function(scope) { + "use strict"; + var isWrapperFor = scope.isWrapperFor; + var elements = { + a: "HTMLAnchorElement", + area: "HTMLAreaElement", + audio: "HTMLAudioElement", + base: "HTMLBaseElement", + body: "HTMLBodyElement", + br: "HTMLBRElement", + button: "HTMLButtonElement", + canvas: "HTMLCanvasElement", + caption: "HTMLTableCaptionElement", + col: "HTMLTableColElement", + content: "HTMLContentElement", + data: "HTMLDataElement", + datalist: "HTMLDataListElement", + del: "HTMLModElement", + dir: "HTMLDirectoryElement", + div: "HTMLDivElement", + dl: "HTMLDListElement", + embed: "HTMLEmbedElement", + fieldset: "HTMLFieldSetElement", + font: "HTMLFontElement", + form: "HTMLFormElement", + frame: "HTMLFrameElement", + frameset: "HTMLFrameSetElement", + h1: "HTMLHeadingElement", + head: "HTMLHeadElement", + hr: "HTMLHRElement", + html: "HTMLHtmlElement", + iframe: "HTMLIFrameElement", + img: "HTMLImageElement", + input: "HTMLInputElement", + keygen: "HTMLKeygenElement", + label: "HTMLLabelElement", + legend: "HTMLLegendElement", + li: "HTMLLIElement", + link: "HTMLLinkElement", + map: "HTMLMapElement", + marquee: "HTMLMarqueeElement", + menu: "HTMLMenuElement", + menuitem: "HTMLMenuItemElement", + meta: "HTMLMetaElement", + meter: "HTMLMeterElement", + object: "HTMLObjectElement", + ol: "HTMLOListElement", + optgroup: "HTMLOptGroupElement", + option: "HTMLOptionElement", + output: "HTMLOutputElement", + p: "HTMLParagraphElement", + param: "HTMLParamElement", + pre: "HTMLPreElement", + progress: "HTMLProgressElement", + q: "HTMLQuoteElement", + script: "HTMLScriptElement", + select: "HTMLSelectElement", + shadow: "HTMLShadowElement", + source: "HTMLSourceElement", + span: "HTMLSpanElement", + style: "HTMLStyleElement", + table: "HTMLTableElement", + tbody: "HTMLTableSectionElement", + template: "HTMLTemplateElement", + textarea: "HTMLTextAreaElement", + thead: "HTMLTableSectionElement", + time: "HTMLTimeElement", + title: "HTMLTitleElement", + tr: "HTMLTableRowElement", + track: "HTMLTrackElement", + ul: "HTMLUListElement", + video: "HTMLVideoElement" + }; + function overrideConstructor(tagName) { + var nativeConstructorName = elements[tagName]; + var nativeConstructor = window[nativeConstructorName]; + if (!nativeConstructor) return; + var element = document.createElement(tagName); + var wrapperConstructor = element.constructor; + window[nativeConstructorName] = wrapperConstructor; + } + Object.keys(elements).forEach(overrideConstructor); + Object.getOwnPropertyNames(scope.wrappers).forEach(function(name) { + window[name] = scope.wrappers[name]; + }); +})(window.ShadowDOMPolyfill); \ No newline at end of file diff --git a/static/bower_components/webcomponentsjs/ShadowDOM.min.js b/static/bower_components/webcomponentsjs/ShadowDOM.min.js new file mode 100644 index 0000000..1380d54 --- /dev/null +++ b/static/bower_components/webcomponentsjs/ShadowDOM.min.js @@ -0,0 +1,15 @@ +/** + * @license + * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt + */ +// @version 0.7.5 +"undefined"==typeof WeakMap&&!function(){var e=Object.defineProperty,t=Date.now()%1e9,n=function(){this.name="__st"+(1e9*Math.random()>>>0)+(t++ +"__")};n.prototype={set:function(t,n){var r=t[this.name];return r&&r[0]===t?r[1]=n:e(t,this.name,{value:[t,n],writable:!0}),this},get:function(e){var t;return(t=e[this.name])&&t[0]===e?t[1]:void 0},"delete":function(e){var t=e[this.name];return t&&t[0]===e?(t[0]=t[1]=void 0,!0):!1},has:function(e){var t=e[this.name];return t?t[0]===e:!1}},window.WeakMap=n}(),window.ShadowDOMPolyfill={},function(e){"use strict";function t(){if("undefined"!=typeof chrome&&chrome.app&&chrome.app.runtime)return!1;if(navigator.getDeviceStorage)return!1;try{var e=new Function("return true;");return e()}catch(t){return!1}}function n(e){if(!e)throw new Error("Assertion failed")}function r(e,t){for(var n=k(t),r=0;ru;u++)c[u]=new Array(s),c[u][0]=u;for(var l=0;s>l;l++)c[0][l]=l;for(var u=1;a>u;u++)for(var l=1;s>l;l++)if(this.equals(e[t+l-1],r[o+u-1]))c[u][l]=c[u-1][l-1];else{var p=c[u-1][l]+1,d=c[u][l-1]+1;c[u][l]=d>p?p:d}return c},spliceOperationsFromEditDistances:function(e){for(var t=e.length-1,n=e[0].length-1,s=e[t][n],c=[];t>0||n>0;)if(0!=t)if(0!=n){var u,l=e[t-1][n-1],p=e[t-1][n],d=e[t][n-1];u=d>p?l>p?p:l:l>d?d:l,u==l?(l==s?c.push(r):(c.push(o),s=l),t--,n--):u==p?(c.push(a),t--,s=p):(c.push(i),n--,s=d)}else c.push(a),t--;else c.push(i),n--;return c.reverse(),c},calcSplices:function(e,n,s,c,u,l){var p=0,d=0,f=Math.min(s-n,l-u);if(0==n&&0==u&&(p=this.sharedPrefix(e,c,f)),s==e.length&&l==c.length&&(d=this.sharedSuffix(e,c,f-p)),n+=p,u+=p,s-=d,l-=d,s-n==0&&l-u==0)return[];if(n==s){for(var h=t(n,[],0);l>u;)h.removed.push(c[u++]);return[h]}if(u==l)return[t(n,[],s-n)];for(var w=this.spliceOperationsFromEditDistances(this.calcEditDistances(e,n,s,c,u,l)),h=void 0,m=[],g=n,v=u,b=0;br;r++)if(!this.equals(e[r],t[r]))return r;return n},sharedSuffix:function(e,t,n){for(var r=e.length,o=t.length,i=0;n>i&&this.equals(e[--r],t[--o]);)i++;return i},calculateSplices:function(e,t){return this.calcSplices(e,0,e.length,t,0,t.length)},equals:function(e,t){return e===t}},e.ArraySplice=n}(window.ShadowDOMPolyfill),function(e){"use strict";function t(){a=!1;var e=i.slice(0);i=[];for(var t=0;t0){for(var l=0;l0&&r.length>0;){var i=n.pop(),a=r.pop();if(i!==a)break;o=i}return o}function l(e,t,n){t instanceof G.Window&&(t=t.document);var o,i=A(t),a=A(n),s=r(n,e),o=u(i,a);o||(o=a.root);for(var c=o;c;c=c.parent)for(var l=0;l0;i--)if(!v(t[i],e,o,t,r))return!1;return!0}function m(e,t,n,r){var o=ie,i=t[0]||n;return v(i,e,o,t,r)}function g(e,t,n,r){for(var o=ae,i=1;i0&&v(n,e,o,t,r)}function v(e,t,n,r,o){var i=z.get(e);if(!i)return!0;var a=o||s(r,e);if(a===e){if(n===oe)return!0;n===ae&&(n=ie)}else if(n===ae&&!t.bubbles)return!0;if("relatedTarget"in t){var c=q(t),u=c.relatedTarget;if(u){if(u instanceof Object&&u.addEventListener){var p=V(u),d=l(t,e,p);if(d===a)return!0}else d=null;Z.set(t,d)}}J.set(t,n);var f=t.type,h=!1;Y.set(t,a),$.set(t,e),i.depth++;for(var w=0,m=i.length;m>w;w++){var g=i[w];if(g.removed)h=!0;else if(!(g.type!==f||!g.capture&&n===oe||g.capture&&n===ae))try{if("function"==typeof g.handler?g.handler.call(e,t):g.handler.handleEvent(t),ee.get(t))return!1}catch(v){W||(W=v)}}if(i.depth--,h&&0===i.depth){var b=i.slice();i.length=0;for(var w=0;wr;r++)t[r]=a(e[r]);return t.length=o,t}function o(e,t){e.prototype[t]=function(){return r(i(this)[t].apply(i(this),arguments))}}var i=e.unsafeUnwrap,a=e.wrap,s={enumerable:!1};n.prototype={item:function(e){return this[e]}},t(n.prototype,"item"),e.wrappers.NodeList=n,e.addWrapNodeListMethod=o,e.wrapNodeList=r}(window.ShadowDOMPolyfill),function(e){"use strict";e.wrapHTMLCollection=e.wrapNodeList,e.wrappers.HTMLCollection=e.wrappers.NodeList}(window.ShadowDOMPolyfill),function(e){"use strict";function t(e){N(e instanceof S)}function n(e){var t=new T;return t[0]=e,t.length=1,t}function r(e,t,n){L(t,"childList",{removedNodes:n,previousSibling:e.previousSibling,nextSibling:e.nextSibling})}function o(e,t){L(e,"childList",{removedNodes:t})}function i(e,t,r,o){if(e instanceof DocumentFragment){var i=s(e);B=!0;for(var a=i.length-1;a>=0;a--)e.removeChild(i[a]),i[a].parentNode_=t;B=!1;for(var a=0;ao;o++)r.appendChild(W(t[o]));return r}function m(e){if(void 0!==e.firstChild_)for(var t=e.firstChild_;t;){var n=t;t=t.nextSibling_,n.parentNode_=n.previousSibling_=n.nextSibling_=void 0}e.firstChild_=e.lastChild_=void 0}function g(e){if(e.invalidateShadowRenderer()){for(var t=e.firstChild;t;){N(t.parentNode===e);var n=t.nextSibling,r=W(t),o=r.parentNode;o&&Y.call(o,r),t.previousSibling_=t.nextSibling_=t.parentNode_=null,t=n}e.firstChild_=e.lastChild_=null}else for(var n,i=W(e),a=i.firstChild;a;)n=a.nextSibling,Y.call(i,a),a=n}function v(e){var t=e.parentNode;return t&&t.invalidateShadowRenderer()}function b(e){for(var t,n=0;ns;s++)i=b(t[s]),!o&&(a=g(i).root)&&a instanceof e.wrappers.ShadowRoot||(r[n++]=i);return n}function n(e){return String(e).replace(/\/deep\/|::shadow|>>>/g," ")}function r(e){return String(e).replace(/:host\(([^\s]+)\)/g,"$1").replace(/([^\s]):host/g,"$1").replace(":host","*").replace(/\^|\/shadow\/|\/shadow-deep\/|::shadow|\/deep\/|::content|>>>/g," ")}function o(e,t){for(var n,r=e.firstElementChild;r;){if(r.matches(t))return r;if(n=o(r,t))return n;r=r.nextElementSibling}return null}function i(e,t){return e.matches(t)}function a(e,t,n){var r=e.localName;return r===t||r===n&&e.namespaceURI===C}function s(){return!0}function c(e,t,n){return e.localName===n}function u(e,t){return e.namespaceURI===t}function l(e,t,n){return e.namespaceURI===t&&e.localName===n}function p(e,t,n,r,o,i){for(var a=e.firstElementChild;a;)r(a,o,i)&&(n[t++]=a),t=p(a,t,n,r,o,i),a=a.nextElementSibling;return t}function d(n,r,o,i,a){var s,c=v(this),u=g(this).root;if(u instanceof e.wrappers.ShadowRoot)return p(this,r,o,n,i,null);if(c instanceof L)s=M.call(c,i);else{if(!(c instanceof _))return p(this,r,o,n,i,null);s=S.call(c,i)}return t(s,r,o,a)}function f(n,r,o,i,a){var s,c=v(this),u=g(this).root;if(u instanceof e.wrappers.ShadowRoot)return p(this,r,o,n,i,a);if(c instanceof L)s=O.call(c,i,a);else{if(!(c instanceof _))return p(this,r,o,n,i,a);s=T.call(c,i,a)}return t(s,r,o,!1)}function h(n,r,o,i,a){var s,c=v(this),u=g(this).root;if(u instanceof e.wrappers.ShadowRoot)return p(this,r,o,n,i,a);if(c instanceof L)s=j.call(c,i,a);else{if(!(c instanceof _))return p(this,r,o,n,i,a);s=N.call(c,i,a)}return t(s,r,o,!1)}var w=e.wrappers.HTMLCollection,m=e.wrappers.NodeList,g=e.getTreeScope,v=e.unsafeUnwrap,b=e.wrap,y=document.querySelector,E=document.documentElement.querySelector,S=document.querySelectorAll,M=document.documentElement.querySelectorAll,T=document.getElementsByTagName,O=document.documentElement.getElementsByTagName,N=document.getElementsByTagNameNS,j=document.documentElement.getElementsByTagNameNS,L=window.Element,_=window.HTMLDocument||window.Document,C="http://www.w3.org/1999/xhtml",D={querySelector:function(t){var r=n(t),i=r!==t;t=r;var a,s=v(this),c=g(this).root;if(c instanceof e.wrappers.ShadowRoot)return o(this,t);if(s instanceof L)a=b(E.call(s,t));else{if(!(s instanceof _))return o(this,t);a=b(y.call(s,t))}return a&&!i&&(c=g(a).root)&&c instanceof e.wrappers.ShadowRoot?o(this,t):a},querySelectorAll:function(e){var t=n(e),r=t!==e;e=t;var o=new m;return o.length=d.call(this,i,0,o,e,r),o}},H={matches:function(t){return t=r(t),e.originalMatches.call(v(this),t)}},x={getElementsByTagName:function(e){var t=new w,n="*"===e?s:a;return t.length=f.call(this,n,0,t,e,e.toLowerCase()),t},getElementsByClassName:function(e){return this.querySelectorAll("."+e)},getElementsByTagNameNS:function(e,t){var n=new w,r=null;return r="*"===e?"*"===t?s:c:"*"===t?u:l,n.length=h.call(this,r,0,n,e||null,t),n}};e.GetElementsByInterface=x,e.SelectorsInterface=D,e.MatchesInterface=H}(window.ShadowDOMPolyfill),function(e){"use strict";function t(e){for(;e&&e.nodeType!==Node.ELEMENT_NODE;)e=e.nextSibling; + +return e}function n(e){for(;e&&e.nodeType!==Node.ELEMENT_NODE;)e=e.previousSibling;return e}var r=e.wrappers.NodeList,o={get firstElementChild(){return t(this.firstChild)},get lastElementChild(){return n(this.lastChild)},get childElementCount(){for(var e=0,t=this.firstElementChild;t;t=t.nextElementSibling)e++;return e},get children(){for(var e=new r,t=0,n=this.firstElementChild;n;n=n.nextElementSibling)e[t++]=n;return e.length=t,e},remove:function(){var e=this.parentNode;e&&e.removeChild(this)}},i={get nextElementSibling(){return t(this.nextSibling)},get previousElementSibling(){return n(this.previousSibling)}},a={getElementById:function(e){return/[ \t\n\r\f]/.test(e)?null:this.querySelector('[id="'+e+'"]')}};e.ChildNodeInterface=i,e.NonElementParentNodeInterface=a,e.ParentNodeInterface=o}(window.ShadowDOMPolyfill),function(e){"use strict";function t(e){r.call(this,e)}var n=e.ChildNodeInterface,r=e.wrappers.Node,o=e.enqueueMutation,i=e.mixin,a=e.registerWrapper,s=e.unsafeUnwrap,c=window.CharacterData;t.prototype=Object.create(r.prototype),i(t.prototype,{get nodeValue(){return this.data},set nodeValue(e){this.data=e},get textContent(){return this.data},set textContent(e){this.data=e},get data(){return s(this).data},set data(e){var t=s(this).data;o(this,"characterData",{oldValue:t}),s(this).data=e}}),i(t.prototype,n),a(c,t,document.createTextNode("")),e.wrappers.CharacterData=t}(window.ShadowDOMPolyfill),function(e){"use strict";function t(e){return e>>>0}function n(e){r.call(this,e)}var r=e.wrappers.CharacterData,o=(e.enqueueMutation,e.mixin),i=e.registerWrapper,a=window.Text;n.prototype=Object.create(r.prototype),o(n.prototype,{splitText:function(e){e=t(e);var n=this.data;if(e>n.length)throw new Error("IndexSizeError");var r=n.slice(0,e),o=n.slice(e);this.data=r;var i=this.ownerDocument.createTextNode(o);return this.parentNode&&this.parentNode.insertBefore(i,this.nextSibling),i}}),i(a,n,document.createTextNode("")),e.wrappers.Text=n}(window.ShadowDOMPolyfill),function(e){"use strict";function t(e){return i(e).getAttribute("class")}function n(e,t){a(e,"attributes",{name:"class",namespace:null,oldValue:t})}function r(t){e.invalidateRendererBasedOnAttribute(t,"class")}function o(e,o,i){var a=e.ownerElement_;if(null==a)return o.apply(e,i);var s=t(a),c=o.apply(e,i);return t(a)!==s&&(n(a,s),r(a)),c}if(!window.DOMTokenList)return void console.warn("Missing DOMTokenList prototype, please include a compatible classList polyfill such as http://goo.gl/uTcepH.");var i=e.unsafeUnwrap,a=e.enqueueMutation,s=DOMTokenList.prototype.add;DOMTokenList.prototype.add=function(){o(this,s,arguments)};var c=DOMTokenList.prototype.remove;DOMTokenList.prototype.remove=function(){o(this,c,arguments)};var u=DOMTokenList.prototype.toggle;DOMTokenList.prototype.toggle=function(){return o(this,u,arguments)}}(window.ShadowDOMPolyfill),function(e){"use strict";function t(t,n){var r=t.parentNode;if(r&&r.shadowRoot){var o=e.getRendererForHost(r);o.dependsOnAttribute(n)&&o.invalidate()}}function n(e,t,n){l(e,"attributes",{name:t,namespace:null,oldValue:n})}function r(e){a.call(this,e)}var o=e.ChildNodeInterface,i=e.GetElementsByInterface,a=e.wrappers.Node,s=e.ParentNodeInterface,c=e.SelectorsInterface,u=e.MatchesInterface,l=(e.addWrapNodeListMethod,e.enqueueMutation),p=e.mixin,d=(e.oneOf,e.registerWrapper),f=e.unsafeUnwrap,h=e.wrappers,w=window.Element,m=["matches","mozMatchesSelector","msMatchesSelector","webkitMatchesSelector"].filter(function(e){return w.prototype[e]}),g=m[0],v=w.prototype[g],b=new WeakMap;r.prototype=Object.create(a.prototype),p(r.prototype,{createShadowRoot:function(){var t=new h.ShadowRoot(this);f(this).polymerShadowRoot_=t;var n=e.getRendererForHost(this);return n.invalidate(),t},get shadowRoot(){return f(this).polymerShadowRoot_||null},setAttribute:function(e,r){var o=f(this).getAttribute(e);f(this).setAttribute(e,r),n(this,e,o),t(this,e)},removeAttribute:function(e){var r=f(this).getAttribute(e);f(this).removeAttribute(e),n(this,e,r),t(this,e)},get classList(){var e=b.get(this);if(!e){if(e=f(this).classList,!e)return;e.ownerElement_=this,b.set(this,e)}return e},get className(){return f(this).className},set className(e){this.setAttribute("class",e)},get id(){return f(this).id},set id(e){this.setAttribute("id",e)}}),m.forEach(function(e){"matches"!==e&&(r.prototype[e]=function(e){return this.matches(e)})}),w.prototype.webkitCreateShadowRoot&&(r.prototype.webkitCreateShadowRoot=r.prototype.createShadowRoot),p(r.prototype,o),p(r.prototype,i),p(r.prototype,s),p(r.prototype,c),p(r.prototype,u),d(w,r,document.createElementNS(null,"x")),e.invalidateRendererBasedOnAttribute=t,e.matchesNames=m,e.originalMatches=v,e.wrappers.Element=r}(window.ShadowDOMPolyfill),function(e){"use strict";function t(e){switch(e){case"&":return"&";case"<":return"<";case">":return">";case'"':return""";case" ":return" "}}function n(e){return e.replace(j,t)}function r(e){return e.replace(L,t)}function o(e){for(var t={},n=0;n"):c+">"+s(e)+"";case Node.TEXT_NODE:var p=e.data;return t&&C[t.localName]?p:r(p);case Node.COMMENT_NODE:return"";default:throw console.error(e),new Error("not implemented")}}function s(e){e instanceof N.HTMLTemplateElement&&(e=e.content);for(var t="",n=e.firstChild;n;n=n.nextSibling)t+=a(n,e);return t}function c(e,t,n){var r=n||"div";e.textContent="";var o=T(e.ownerDocument.createElement(r));o.innerHTML=t;for(var i;i=o.firstChild;)e.appendChild(O(i))}function u(e){w.call(this,e)}function l(e,t){var n=T(e.cloneNode(!1));n.innerHTML=t;for(var r,o=T(document.createDocumentFragment());r=n.firstChild;)o.appendChild(r);return O(o)}function p(t){return function(){return e.renderAllPending(),M(this)[t]}}function d(e){m(u,e,p(e))}function f(t){Object.defineProperty(u.prototype,t,{get:p(t),set:function(n){e.renderAllPending(),M(this)[t]=n},configurable:!0,enumerable:!0})}function h(t){Object.defineProperty(u.prototype,t,{value:function(){return e.renderAllPending(),M(this)[t].apply(M(this),arguments)},configurable:!0,enumerable:!0})}var w=e.wrappers.Element,m=e.defineGetter,g=e.enqueueMutation,v=e.mixin,b=e.nodesWereAdded,y=e.nodesWereRemoved,E=e.registerWrapper,S=e.snapshotNodeList,M=e.unsafeUnwrap,T=e.unwrap,O=e.wrap,N=e.wrappers,j=/[&\u00A0"]/g,L=/[&\u00A0<>]/g,_=o(["area","base","br","col","command","embed","hr","img","input","keygen","link","meta","param","source","track","wbr"]),C=o(["style","script","xmp","iframe","noembed","noframes","plaintext","noscript"]),D="http://www.w3.org/1999/xhtml",H=/MSIE/.test(navigator.userAgent),x=window.HTMLElement,R=window.HTMLTemplateElement;u.prototype=Object.create(w.prototype),v(u.prototype,{get innerHTML(){return s(this)},set innerHTML(e){if(H&&C[this.localName])return void(this.textContent=e);var t=S(this.childNodes);this.invalidateShadowRenderer()?this instanceof N.HTMLTemplateElement?c(this.content,e):c(this,e,this.tagName):!R&&this instanceof N.HTMLTemplateElement?c(this.content,e):M(this).innerHTML=e;var n=S(this.childNodes);g(this,"childList",{addedNodes:n,removedNodes:t}),y(t),b(n,this)},get outerHTML(){return a(this,this.parentNode)},set outerHTML(e){var t=this.parentNode;if(t){t.invalidateShadowRenderer();var n=l(t,e);t.replaceChild(n,this)}},insertAdjacentHTML:function(e,t){var n,r;switch(String(e).toLowerCase()){case"beforebegin":n=this.parentNode,r=this;break;case"afterend":n=this.parentNode,r=this.nextSibling;break;case"afterbegin":n=this,r=this.firstChild;break;case"beforeend":n=this,r=null;break;default:return}var o=l(n,t);n.insertBefore(o,r)},get hidden(){return this.hasAttribute("hidden")},set hidden(e){e?this.setAttribute("hidden",""):this.removeAttribute("hidden")}}),["clientHeight","clientLeft","clientTop","clientWidth","offsetHeight","offsetLeft","offsetTop","offsetWidth","scrollHeight","scrollWidth"].forEach(d),["scrollLeft","scrollTop"].forEach(f),["getBoundingClientRect","getClientRects","scrollIntoView"].forEach(h),E(x,u,document.createElement("b")),e.wrappers.HTMLElement=u,e.getInnerHTML=s,e.setInnerHTML=c}(window.ShadowDOMPolyfill),function(e){"use strict";function t(e){n.call(this,e)}var n=e.wrappers.HTMLElement,r=e.mixin,o=e.registerWrapper,i=e.unsafeUnwrap,a=e.wrap,s=window.HTMLCanvasElement;t.prototype=Object.create(n.prototype),r(t.prototype,{getContext:function(){var e=i(this).getContext.apply(i(this),arguments);return e&&a(e)}}),o(s,t,document.createElement("canvas")),e.wrappers.HTMLCanvasElement=t}(window.ShadowDOMPolyfill),function(e){"use strict";function t(e){n.call(this,e)}var n=e.wrappers.HTMLElement,r=e.mixin,o=e.registerWrapper,i=window.HTMLContentElement;t.prototype=Object.create(n.prototype),r(t.prototype,{constructor:t,get select(){return this.getAttribute("select")},set select(e){this.setAttribute("select",e)},setAttribute:function(e,t){n.prototype.setAttribute.call(this,e,t),"select"===String(e).toLowerCase()&&this.invalidateShadowRenderer(!0)}}),i&&o(i,t),e.wrappers.HTMLContentElement=t}(window.ShadowDOMPolyfill),function(e){"use strict";function t(e){n.call(this,e)}var n=e.wrappers.HTMLElement,r=e.mixin,o=e.registerWrapper,i=e.wrapHTMLCollection,a=e.unwrap,s=window.HTMLFormElement;t.prototype=Object.create(n.prototype),r(t.prototype,{get elements(){return i(a(this).elements)}}),o(s,t,document.createElement("form")),e.wrappers.HTMLFormElement=t}(window.ShadowDOMPolyfill),function(e){"use strict";function t(e){r.call(this,e)}function n(e,t){if(!(this instanceof n))throw new TypeError("DOM object constructor cannot be called as a function.");var o=i(document.createElement("img"));r.call(this,o),a(o,this),void 0!==e&&(o.width=e),void 0!==t&&(o.height=t)}var r=e.wrappers.HTMLElement,o=e.registerWrapper,i=e.unwrap,a=e.rewrap,s=window.HTMLImageElement;t.prototype=Object.create(r.prototype),o(s,t,document.createElement("img")),n.prototype=t.prototype,e.wrappers.HTMLImageElement=t,e.wrappers.Image=n}(window.ShadowDOMPolyfill),function(e){"use strict";function t(e){n.call(this,e)}var n=e.wrappers.HTMLElement,r=(e.mixin,e.wrappers.NodeList,e.registerWrapper),o=window.HTMLShadowElement;t.prototype=Object.create(n.prototype),t.prototype.constructor=t,o&&r(o,t),e.wrappers.HTMLShadowElement=t}(window.ShadowDOMPolyfill),function(e){"use strict";function t(e){if(!e.defaultView)return e;var t=p.get(e);if(!t){for(t=e.implementation.createHTMLDocument("");t.lastChild;)t.removeChild(t.lastChild);p.set(e,t)}return t}function n(e){for(var n,r=t(e.ownerDocument),o=c(r.createDocumentFragment());n=e.firstChild;)o.appendChild(n);return o}function r(e){if(o.call(this,e),!d){var t=n(e);l.set(this,u(t))}}var o=e.wrappers.HTMLElement,i=e.mixin,a=e.registerWrapper,s=e.unsafeUnwrap,c=e.unwrap,u=e.wrap,l=new WeakMap,p=new WeakMap,d=window.HTMLTemplateElement;r.prototype=Object.create(o.prototype),i(r.prototype,{constructor:r,get content(){return d?u(s(this).content):l.get(this)}}),d&&a(d,r),e.wrappers.HTMLTemplateElement=r}(window.ShadowDOMPolyfill),function(e){"use strict";function t(e){n.call(this,e)}var n=e.wrappers.HTMLElement,r=e.registerWrapper,o=window.HTMLMediaElement;o&&(t.prototype=Object.create(n.prototype),r(o,t,document.createElement("audio")),e.wrappers.HTMLMediaElement=t)}(window.ShadowDOMPolyfill),function(e){"use strict";function t(e){r.call(this,e)}function n(e){if(!(this instanceof n))throw new TypeError("DOM object constructor cannot be called as a function.");var t=i(document.createElement("audio"));r.call(this,t),a(t,this),t.setAttribute("preload","auto"),void 0!==e&&t.setAttribute("src",e)}var r=e.wrappers.HTMLMediaElement,o=e.registerWrapper,i=e.unwrap,a=e.rewrap,s=window.HTMLAudioElement;s&&(t.prototype=Object.create(r.prototype),o(s,t,document.createElement("audio")),n.prototype=t.prototype,e.wrappers.HTMLAudioElement=t,e.wrappers.Audio=n)}(window.ShadowDOMPolyfill),function(e){"use strict";function t(e){return e.replace(/\s+/g," ").trim()}function n(e){o.call(this,e)}function r(e,t,n,i){if(!(this instanceof r))throw new TypeError("DOM object constructor cannot be called as a function.");var a=c(document.createElement("option"));o.call(this,a),s(a,this),void 0!==e&&(a.text=e),void 0!==t&&a.setAttribute("value",t),n===!0&&a.setAttribute("selected",""),a.selected=i===!0}var o=e.wrappers.HTMLElement,i=e.mixin,a=e.registerWrapper,s=e.rewrap,c=e.unwrap,u=e.wrap,l=window.HTMLOptionElement;n.prototype=Object.create(o.prototype),i(n.prototype,{get text(){return t(this.textContent)},set text(e){this.textContent=t(String(e))},get form(){return u(c(this).form)}}),a(l,n,document.createElement("option")),r.prototype=n.prototype,e.wrappers.HTMLOptionElement=n,e.wrappers.Option=r}(window.ShadowDOMPolyfill),function(e){"use strict";function t(e){n.call(this,e)}var n=e.wrappers.HTMLElement,r=e.mixin,o=e.registerWrapper,i=e.unwrap,a=e.wrap,s=window.HTMLSelectElement;t.prototype=Object.create(n.prototype),r(t.prototype,{add:function(e,t){"object"==typeof t&&(t=i(t)),i(this).add(i(e),t)},remove:function(e){return void 0===e?void n.prototype.remove.call(this):("object"==typeof e&&(e=i(e)),void i(this).remove(e))},get form(){return a(i(this).form)}}),o(s,t,document.createElement("select")),e.wrappers.HTMLSelectElement=t}(window.ShadowDOMPolyfill),function(e){"use strict";function t(e){n.call(this,e)}var n=e.wrappers.HTMLElement,r=e.mixin,o=e.registerWrapper,i=e.unwrap,a=e.wrap,s=e.wrapHTMLCollection,c=window.HTMLTableElement;t.prototype=Object.create(n.prototype),r(t.prototype,{get caption(){return a(i(this).caption)},createCaption:function(){return a(i(this).createCaption())},get tHead(){return a(i(this).tHead)},createTHead:function(){return a(i(this).createTHead())},createTFoot:function(){return a(i(this).createTFoot())},get tFoot(){return a(i(this).tFoot)},get tBodies(){return s(i(this).tBodies)},createTBody:function(){return a(i(this).createTBody())},get rows(){return s(i(this).rows)},insertRow:function(e){return a(i(this).insertRow(e))}}),o(c,t,document.createElement("table")),e.wrappers.HTMLTableElement=t}(window.ShadowDOMPolyfill),function(e){"use strict";function t(e){n.call(this,e)}var n=e.wrappers.HTMLElement,r=e.mixin,o=e.registerWrapper,i=e.wrapHTMLCollection,a=e.unwrap,s=e.wrap,c=window.HTMLTableSectionElement;t.prototype=Object.create(n.prototype),r(t.prototype,{constructor:t,get rows(){return i(a(this).rows)},insertRow:function(e){return s(a(this).insertRow(e))}}),o(c,t,document.createElement("thead")),e.wrappers.HTMLTableSectionElement=t}(window.ShadowDOMPolyfill),function(e){"use strict";function t(e){n.call(this,e)}var n=e.wrappers.HTMLElement,r=e.mixin,o=e.registerWrapper,i=e.wrapHTMLCollection,a=e.unwrap,s=e.wrap,c=window.HTMLTableRowElement;t.prototype=Object.create(n.prototype),r(t.prototype,{get cells(){return i(a(this).cells)},insertCell:function(e){return s(a(this).insertCell(e))}}),o(c,t,document.createElement("tr")),e.wrappers.HTMLTableRowElement=t}(window.ShadowDOMPolyfill),function(e){"use strict";function t(e){switch(e.localName){case"content":return new n(e);case"shadow":return new o(e);case"template":return new i(e)}r.call(this,e)}var n=e.wrappers.HTMLContentElement,r=e.wrappers.HTMLElement,o=e.wrappers.HTMLShadowElement,i=e.wrappers.HTMLTemplateElement,a=(e.mixin,e.registerWrapper),s=window.HTMLUnknownElement;t.prototype=Object.create(r.prototype),a(s,t),e.wrappers.HTMLUnknownElement=t}(window.ShadowDOMPolyfill),function(e){"use strict";var t=e.wrappers.Element,n=e.wrappers.HTMLElement,r=e.registerObject,o=e.defineWrapGetter,i="http://www.w3.org/2000/svg",a=document.createElementNS(i,"title"),s=r(a),c=Object.getPrototypeOf(s.prototype).constructor;if(!("classList"in a)){var u=Object.getOwnPropertyDescriptor(t.prototype,"classList");Object.defineProperty(n.prototype,"classList",u),delete t.prototype.classList}o(c,"ownerSVGElement"),e.wrappers.SVGElement=c}(window.ShadowDOMPolyfill),function(e){"use strict";function t(e){d.call(this,e)}var n=e.mixin,r=e.registerWrapper,o=e.unwrap,i=e.wrap,a=window.SVGUseElement,s="http://www.w3.org/2000/svg",c=i(document.createElementNS(s,"g")),u=document.createElementNS(s,"use"),l=c.constructor,p=Object.getPrototypeOf(l.prototype),d=p.constructor;t.prototype=Object.create(p),"instanceRoot"in u&&n(t.prototype,{get instanceRoot(){return i(o(this).instanceRoot)},get animatedInstanceRoot(){return i(o(this).animatedInstanceRoot)}}),r(a,t,u),e.wrappers.SVGUseElement=t}(window.ShadowDOMPolyfill),function(e){"use strict";function t(e){n.call(this,e)}var n=e.wrappers.EventTarget,r=e.mixin,o=e.registerWrapper,i=e.unsafeUnwrap,a=e.wrap,s=window.SVGElementInstance;s&&(t.prototype=Object.create(n.prototype),r(t.prototype,{get correspondingElement(){return a(i(this).correspondingElement)},get correspondingUseElement(){return a(i(this).correspondingUseElement)},get parentNode(){return a(i(this).parentNode)},get childNodes(){throw new Error("Not implemented")},get firstChild(){return a(i(this).firstChild)},get lastChild(){return a(i(this).lastChild)},get previousSibling(){return a(i(this).previousSibling)},get nextSibling(){return a(i(this).nextSibling)}}),o(s,t),e.wrappers.SVGElementInstance=t)}(window.ShadowDOMPolyfill),function(e){"use strict";function t(e){o(e,this)}var n=e.mixin,r=e.registerWrapper,o=e.setWrapper,i=e.unsafeUnwrap,a=e.unwrap,s=e.unwrapIfNeeded,c=e.wrap,u=window.CanvasRenderingContext2D;n(t.prototype,{get canvas(){return c(i(this).canvas)},drawImage:function(){arguments[0]=s(arguments[0]),i(this).drawImage.apply(i(this),arguments)},createPattern:function(){return arguments[0]=a(arguments[0]),i(this).createPattern.apply(i(this),arguments)}}),r(u,t,document.createElement("canvas").getContext("2d")),e.wrappers.CanvasRenderingContext2D=t}(window.ShadowDOMPolyfill),function(e){"use strict";function t(e){o(e,this)}var n=e.mixin,r=e.registerWrapper,o=e.setWrapper,i=e.unsafeUnwrap,a=e.unwrapIfNeeded,s=e.wrap,c=window.WebGLRenderingContext;if(c){n(t.prototype,{get canvas(){return s(i(this).canvas)},texImage2D:function(){arguments[5]=a(arguments[5]),i(this).texImage2D.apply(i(this),arguments)},texSubImage2D:function(){arguments[6]=a(arguments[6]),i(this).texSubImage2D.apply(i(this),arguments)}});var u=/WebKit/.test(navigator.userAgent)?{drawingBufferHeight:null,drawingBufferWidth:null}:{};r(c,t,u),e.wrappers.WebGLRenderingContext=t}}(window.ShadowDOMPolyfill),function(e){"use strict";var t=e.GetElementsByInterface,n=e.NonElementParentNodeInterface,r=e.ParentNodeInterface,o=e.SelectorsInterface,i=e.mixin,a=e.registerObject,s=a(document.createDocumentFragment());i(s.prototype,r),i(s.prototype,o),i(s.prototype,t),i(s.prototype,n);var c=a(document.createComment(""));e.wrappers.Comment=c,e.wrappers.DocumentFragment=s}(window.ShadowDOMPolyfill),function(e){"use strict";function t(e){var t=p(l(e).ownerDocument.createDocumentFragment());n.call(this,t),c(t,this);var o=e.shadowRoot;f.set(this,o),this.treeScope_=new r(this,a(o||e)),d.set(this,e)}var n=e.wrappers.DocumentFragment,r=e.TreeScope,o=e.elementFromPoint,i=e.getInnerHTML,a=e.getTreeScope,s=e.mixin,c=e.rewrap,u=e.setInnerHTML,l=e.unsafeUnwrap,p=e.unwrap,d=new WeakMap,f=new WeakMap;t.prototype=Object.create(n.prototype),s(t.prototype,{constructor:t,get innerHTML(){return i(this)},set innerHTML(e){u(this,e),this.invalidateShadowRenderer()},get olderShadowRoot(){return f.get(this)||null},get host(){return d.get(this)||null},invalidateShadowRenderer:function(){return d.get(this).invalidateShadowRenderer()},elementFromPoint:function(e,t){return o(this,this.ownerDocument,e,t)}}),e.wrappers.ShadowRoot=t}(window.ShadowDOMPolyfill),function(e){"use strict";function t(e){var t=p(e).root;return t instanceof f?t.host:null}function n(t,n){if(t.shadowRoot){n=Math.min(t.childNodes.length-1,n);var r=t.childNodes[n];if(r){var o=e.getDestinationInsertionPoints(r);if(o.length>0){var i=o[0].parentNode;i.nodeType==Node.ELEMENT_NODE&&(t=i)}}}return t}function r(e){return e=l(e),t(e)||e}function o(e){a(e,this)}var i=e.registerWrapper,a=e.setWrapper,s=e.unsafeUnwrap,c=e.unwrap,u=e.unwrapIfNeeded,l=e.wrap,p=e.getTreeScope,d=window.Range,f=e.wrappers.ShadowRoot;o.prototype={get startContainer(){return r(s(this).startContainer)},get endContainer(){return r(s(this).endContainer)},get commonAncestorContainer(){return r(s(this).commonAncestorContainer)},setStart:function(e,t){e=n(e,t),s(this).setStart(u(e),t)},setEnd:function(e,t){e=n(e,t),s(this).setEnd(u(e),t)},setStartBefore:function(e){s(this).setStartBefore(u(e))},setStartAfter:function(e){s(this).setStartAfter(u(e))},setEndBefore:function(e){s(this).setEndBefore(u(e))},setEndAfter:function(e){s(this).setEndAfter(u(e))},selectNode:function(e){s(this).selectNode(u(e))},selectNodeContents:function(e){s(this).selectNodeContents(u(e))},compareBoundaryPoints:function(e,t){return s(this).compareBoundaryPoints(e,c(t))},extractContents:function(){return l(s(this).extractContents())},cloneContents:function(){return l(s(this).cloneContents())},insertNode:function(e){s(this).insertNode(u(e))},surroundContents:function(e){s(this).surroundContents(u(e))},cloneRange:function(){return l(s(this).cloneRange())},isPointInRange:function(e,t){return s(this).isPointInRange(u(e),t)},comparePoint:function(e,t){return s(this).comparePoint(u(e),t)},intersectsNode:function(e){return s(this).intersectsNode(u(e))},toString:function(){return s(this).toString()}},d.prototype.createContextualFragment&&(o.prototype.createContextualFragment=function(e){return l(s(this).createContextualFragment(e))}),i(window.Range,o,document.createRange()),e.wrappers.Range=o}(window.ShadowDOMPolyfill),function(e){"use strict";function t(e){e.previousSibling_=e.previousSibling,e.nextSibling_=e.nextSibling,e.parentNode_=e.parentNode}function n(n,o,i){var a=x(n),s=x(o),c=i?x(i):null;if(r(o),t(o),i)n.firstChild===i&&(n.firstChild_=i),i.previousSibling_=i.previousSibling;else{n.lastChild_=n.lastChild,n.lastChild===n.firstChild&&(n.firstChild_=n.firstChild);var u=R(a.lastChild);u&&(u.nextSibling_=u.nextSibling)}e.originalInsertBefore.call(a,s,c)}function r(n){var r=x(n),o=r.parentNode;if(o){var i=R(o);t(n),n.previousSibling&&(n.previousSibling.nextSibling_=n),n.nextSibling&&(n.nextSibling.previousSibling_=n),i.lastChild===n&&(i.lastChild_=n),i.firstChild===n&&(i.firstChild_=n),e.originalRemoveChild.call(o,r)}}function o(e){W.set(e,[])}function i(e){var t=W.get(e);return t||W.set(e,t=[]),t}function a(e){for(var t=[],n=0,r=e.firstChild;r;r=r.nextSibling)t[n++]=r;return t}function s(){for(var e=0;ew;w++){var m=R(i[l++]);s.get(m)||r(m)}for(var g=f.addedCount,v=i[l]&&R(i[l]),w=0;g>w;w++){var b=o[u++],y=b.node;n(t,y,v),s.set(y,!0),b.sync(s)}p+=g}for(var d=p;d=0;o--){var i=r[o],a=w(i);if(a){var s=i.olderShadowRoot;s&&(n=h(s));for(var c=0;c=0;l--)u=Object.create(u);["createdCallback","attachedCallback","detachedCallback","attributeChangedCallback"].forEach(function(e){var t=o[e];t&&(u[e]=function(){_(this)instanceof r||O(this),t.apply(_(this),arguments)})});var p={prototype:u};i&&(p["extends"]=i),r.prototype=o,r.prototype.constructor=r,e.constructorTable.set(u,r),e.nativePrototypeTable.set(o,u);W.call(L(this),t,p);return r},y([window.HTMLDocument||window.Document],["registerElement"])}y([window.HTMLBodyElement,window.HTMLDocument||window.Document,window.HTMLHeadElement,window.HTMLHtmlElement],["appendChild","compareDocumentPosition","contains","getElementsByClassName","getElementsByTagName","getElementsByTagNameNS","insertBefore","querySelector","querySelectorAll","removeChild","replaceChild"]),y([window.HTMLBodyElement,window.HTMLHeadElement,window.HTMLHtmlElement],E),y([window.HTMLDocument||window.Document],["adoptNode","importNode","contains","createComment","createDocumentFragment","createElement","createElementNS","createEvent","createEventNS","createRange","createTextNode","createTreeWalker","elementFromPoint","getElementById","getElementsByName","getSelection"]),S(t.prototype,u),S(t.prototype,p),S(t.prototype,h),S(t.prototype,d),S(t.prototype,{get implementation(){var e=D.get(this);return e?e:(e=new a(L(this).implementation),D.set(this,e),e)},get defaultView(){return _(L(this).defaultView)}}),M(window.Document,t,document.implementation.createHTMLDocument("")),window.HTMLDocument&&M(window.HTMLDocument,t),C([window.HTMLBodyElement,window.HTMLDocument||window.Document,window.HTMLHeadElement]);var I=document.implementation.createDocument;a.prototype.createDocument=function(){return arguments[2]=L(arguments[2]),_(I.apply(j(this),arguments))},s(a,"createDocumentType"),s(a,"createHTMLDocument"),c(a,"hasFeature"),M(window.DOMImplementation,a),y([window.DOMImplementation],["createDocument","createDocumentType","createHTMLDocument","hasFeature"]),e.adoptNodeNoRemove=r,e.wrappers.DOMImplementation=a,e.wrappers.Document=t}(window.ShadowDOMPolyfill),function(e){"use strict";function t(e){n.call(this,e)}var n=e.wrappers.EventTarget,r=e.wrappers.Selection,o=e.mixin,i=e.registerWrapper,a=e.renderAllPending,s=e.unwrap,c=e.unwrapIfNeeded,u=e.wrap,l=window.Window,p=window.getComputedStyle,d=window.getDefaultComputedStyle,f=window.getSelection;t.prototype=Object.create(n.prototype),l.prototype.getComputedStyle=function(e,t){return u(this||window).getComputedStyle(c(e),t)},d&&(l.prototype.getDefaultComputedStyle=function(e,t){return u(this||window).getDefaultComputedStyle(c(e),t)}),l.prototype.getSelection=function(){return u(this||window).getSelection()},delete window.getComputedStyle,delete window.getDefaultComputedStyle,delete window.getSelection,["addEventListener","removeEventListener","dispatchEvent"].forEach(function(e){l.prototype[e]=function(){var t=u(this||window);return t[e].apply(t,arguments)},delete window[e]}),o(t.prototype,{getComputedStyle:function(e,t){return a(),p.call(s(this),c(e),t)},getSelection:function(){return a(),new r(f.call(s(this)))},get document(){return u(s(this).document)}}),d&&(t.prototype.getDefaultComputedStyle=function(e,t){return a(),d.call(s(this),c(e),t)}),i(l,t,window),e.wrappers.Window=t}(window.ShadowDOMPolyfill),function(e){"use strict";var t=e.unwrap,n=window.DataTransfer||window.Clipboard,r=n.prototype.setDragImage;r&&(n.prototype.setDragImage=function(e,n,o){r.call(this,t(e),n,o)})}(window.ShadowDOMPolyfill),function(e){"use strict";function t(e){var t;t=e instanceof i?e:new i(e&&o(e)),r(t,this)}var n=e.registerWrapper,r=e.setWrapper,o=e.unwrap,i=window.FormData;i&&(n(i,t,new i),e.wrappers.FormData=t)}(window.ShadowDOMPolyfill),function(e){"use strict";var t=e.unwrapIfNeeded,n=XMLHttpRequest.prototype.send;XMLHttpRequest.prototype.send=function(e){return n.call(this,t(e))}}(window.ShadowDOMPolyfill),function(e){"use strict";function t(e){var t=n[e],r=window[t];if(r){var o=document.createElement(e),i=o.constructor;window[t]=i}}var n=(e.isWrapperFor,{a:"HTMLAnchorElement",area:"HTMLAreaElement",audio:"HTMLAudioElement",base:"HTMLBaseElement",body:"HTMLBodyElement",br:"HTMLBRElement",button:"HTMLButtonElement",canvas:"HTMLCanvasElement",caption:"HTMLTableCaptionElement",col:"HTMLTableColElement",content:"HTMLContentElement",data:"HTMLDataElement",datalist:"HTMLDataListElement",del:"HTMLModElement",dir:"HTMLDirectoryElement",div:"HTMLDivElement",dl:"HTMLDListElement",embed:"HTMLEmbedElement",fieldset:"HTMLFieldSetElement",font:"HTMLFontElement",form:"HTMLFormElement",frame:"HTMLFrameElement",frameset:"HTMLFrameSetElement",h1:"HTMLHeadingElement",head:"HTMLHeadElement",hr:"HTMLHRElement",html:"HTMLHtmlElement",iframe:"HTMLIFrameElement",img:"HTMLImageElement",input:"HTMLInputElement",keygen:"HTMLKeygenElement",label:"HTMLLabelElement",legend:"HTMLLegendElement",li:"HTMLLIElement",link:"HTMLLinkElement",map:"HTMLMapElement",marquee:"HTMLMarqueeElement",menu:"HTMLMenuElement",menuitem:"HTMLMenuItemElement",meta:"HTMLMetaElement",meter:"HTMLMeterElement",object:"HTMLObjectElement",ol:"HTMLOListElement",optgroup:"HTMLOptGroupElement",option:"HTMLOptionElement",output:"HTMLOutputElement",p:"HTMLParagraphElement",param:"HTMLParamElement",pre:"HTMLPreElement",progress:"HTMLProgressElement",q:"HTMLQuoteElement",script:"HTMLScriptElement",select:"HTMLSelectElement",shadow:"HTMLShadowElement",source:"HTMLSourceElement",span:"HTMLSpanElement",style:"HTMLStyleElement",table:"HTMLTableElement",tbody:"HTMLTableSectionElement",template:"HTMLTemplateElement",textarea:"HTMLTextAreaElement",thead:"HTMLTableSectionElement",time:"HTMLTimeElement",title:"HTMLTitleElement",tr:"HTMLTableRowElement",track:"HTMLTrackElement",ul:"HTMLUListElement",video:"HTMLVideoElement"});Object.keys(n).forEach(t),Object.getOwnPropertyNames(e.wrappers).forEach(function(t){window[t]=e.wrappers[t]})}(window.ShadowDOMPolyfill); \ No newline at end of file diff --git a/static/bower_components/webcomponentsjs/bower.json b/static/bower_components/webcomponentsjs/bower.json new file mode 100644 index 0000000..aede49c --- /dev/null +++ b/static/bower_components/webcomponentsjs/bower.json @@ -0,0 +1,18 @@ +{ + "name": "webcomponentsjs", + "main": "webcomponents.js", + "version": "0.7.5", + "homepage": "http://webcomponents.org", + "authors": [ + "The Polymer Authors" + ], + "repository": { + "type": "git", + "url": "https://github.com/webcomponents/webcomponentsjs.git" + }, + "keywords": [ + "webcomponents" + ], + "license": "BSD", + "ignore": [] +} diff --git a/static/bower_components/webcomponentsjs/build.log b/static/bower_components/webcomponentsjs/build.log new file mode 100644 index 0000000..722c9f7 --- /dev/null +++ b/static/bower_components/webcomponentsjs/build.log @@ -0,0 +1,33 @@ +BUILD LOG +--------- +Build Time: 2015-06-17T19:01:18-0700 + +NODEJS INFORMATION +================== +nodejs: v2.3.0 +gulp: 3.9.0 +gulp-audit: 1.0.0 +gulp-concat: 2.5.2 +gulp-header: 1.2.2 +gulp-uglify: 1.2.0 +run-sequence: 1.1.1 +web-component-tester: 3.2.0 + +REPO REVISIONS +============== +webcomponentsjs: 1ee61faca40f109f2f5b6ddc8fa15de0319a6e61 + +BUILD HASHES +============ +CustomElements.js: f3f0c7f3c65aeb5cc56c64300fe89003a4c7fa31 +CustomElements.min.js: 557ccd338ab463c9bcd1e3c0fc4102455432214a +HTMLImports.js: 8c1f33a777d7ff8ee3a22fce8d35e5b927285724 +HTMLImports.min.js: f4ba44076c40f408c661caa8baf81f9e3740689b +MutationObserver.js: 81934731acd4175701d678dbef11aaefa7d701f5 +MutationObserver.min.js: 6202537174240ba28bf71e22cddf90ce80cf73f8 +ShadowDOM.js: 5e901cfe7eb384f15a39b1bf4e510a06ae03b43e +ShadowDOM.min.js: 397715836fdd0cfe15a5e966f5ab187ccc1bec15 +webcomponents-lite.js: 5c38f87a645eea9d282de74340c101e5531cb2c0 +webcomponents-lite.min.js: 2a744443fbfba6b30fde7b17606f68cae6036e52 +webcomponents.js: 637cf33c1ee108fb376891eed0b5b47deed8c238 +webcomponents.min.js: c2841b948265560478872747618cad207a693c4f \ No newline at end of file diff --git a/static/bower_components/webcomponentsjs/package.json b/static/bower_components/webcomponentsjs/package.json new file mode 100644 index 0000000..493782f --- /dev/null +++ b/static/bower_components/webcomponentsjs/package.json @@ -0,0 +1,31 @@ +{ + "name": "webcomponents.js", + "version": "0.7.5", + "description": "webcomponents.js", + "main": "webcomponents.js", + "directories": { + "test": "tests" + }, + "repository": { + "type": "git", + "url": "https://github.com/webcomponents/webcomponentsjs.git" + }, + "author": "The Polymer Authors", + "license": { + "type": "BSD-3-Clause", + "url": "http://polymer.github.io/LICENSE.txt" + }, + "bugs": { + "url": "https://github.com/webcomponents/webcomponentsjs/issues" + }, + "homepage": "http://webcomponents.org", + "devDependencies": { + "gulp": "^3.8.8", + "gulp-audit": "^1.0.0", + "gulp-concat": "^2.4.1", + "gulp-header": "^1.1.1", + "gulp-uglify": "^1.0.1", + "run-sequence": "^1.0.1", + "web-component-tester": "*" + } +} diff --git a/static/bower_components/webcomponentsjs/webcomponents-lite.js b/static/bower_components/webcomponentsjs/webcomponents-lite.js new file mode 100644 index 0000000..47a7d9d --- /dev/null +++ b/static/bower_components/webcomponentsjs/webcomponents-lite.js @@ -0,0 +1,2314 @@ +/** + * @license + * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt + */ +// @version 0.7.5 +window.WebComponents = window.WebComponents || {}; + +(function(scope) { + var flags = scope.flags || {}; + var file = "webcomponents-lite.js"; + var script = document.querySelector('script[src*="' + file + '"]'); + if (!flags.noOpts) { + location.search.slice(1).split("&").forEach(function(option) { + var parts = option.split("="); + var match; + if (parts[0] && (match = parts[0].match(/wc-(.+)/))) { + flags[match[1]] = parts[1] || true; + } + }); + if (script) { + for (var i = 0, a; a = script.attributes[i]; i++) { + if (a.name !== "src") { + flags[a.name] = a.value || true; + } + } + } + if (flags.log) { + var parts = flags.log.split(","); + flags.log = {}; + parts.forEach(function(f) { + flags.log[f] = true; + }); + } else { + flags.log = {}; + } + } + flags.shadow = flags.shadow || flags.shadowdom || flags.polyfill; + if (flags.shadow === "native") { + flags.shadow = false; + } else { + flags.shadow = flags.shadow || !HTMLElement.prototype.createShadowRoot; + } + if (flags.register) { + window.CustomElements = window.CustomElements || { + flags: {} + }; + window.CustomElements.flags.register = flags.register; + } + scope.flags = flags; +})(window.WebComponents); + +(function(scope) { + "use strict"; + var hasWorkingUrl = false; + if (!scope.forceJURL) { + try { + var u = new URL("b", "http://a"); + u.pathname = "c%20d"; + hasWorkingUrl = u.href === "http://a/c%20d"; + } catch (e) {} + } + if (hasWorkingUrl) return; + var relative = Object.create(null); + relative["ftp"] = 21; + relative["file"] = 0; + relative["gopher"] = 70; + relative["http"] = 80; + relative["https"] = 443; + relative["ws"] = 80; + relative["wss"] = 443; + var relativePathDotMapping = Object.create(null); + relativePathDotMapping["%2e"] = "."; + relativePathDotMapping[".%2e"] = ".."; + relativePathDotMapping["%2e."] = ".."; + relativePathDotMapping["%2e%2e"] = ".."; + function isRelativeScheme(scheme) { + return relative[scheme] !== undefined; + } + function invalid() { + clear.call(this); + this._isInvalid = true; + } + function IDNAToASCII(h) { + if ("" == h) { + invalid.call(this); + } + return h.toLowerCase(); + } + function percentEscape(c) { + var unicode = c.charCodeAt(0); + if (unicode > 32 && unicode < 127 && [ 34, 35, 60, 62, 63, 96 ].indexOf(unicode) == -1) { + return c; + } + return encodeURIComponent(c); + } + function percentEscapeQuery(c) { + var unicode = c.charCodeAt(0); + if (unicode > 32 && unicode < 127 && [ 34, 35, 60, 62, 96 ].indexOf(unicode) == -1) { + return c; + } + return encodeURIComponent(c); + } + var EOF = undefined, ALPHA = /[a-zA-Z]/, ALPHANUMERIC = /[a-zA-Z0-9\+\-\.]/; + function parse(input, stateOverride, base) { + function err(message) { + errors.push(message); + } + var state = stateOverride || "scheme start", cursor = 0, buffer = "", seenAt = false, seenBracket = false, errors = []; + loop: while ((input[cursor - 1] != EOF || cursor == 0) && !this._isInvalid) { + var c = input[cursor]; + switch (state) { + case "scheme start": + if (c && ALPHA.test(c)) { + buffer += c.toLowerCase(); + state = "scheme"; + } else if (!stateOverride) { + buffer = ""; + state = "no scheme"; + continue; + } else { + err("Invalid scheme."); + break loop; + } + break; + + case "scheme": + if (c && ALPHANUMERIC.test(c)) { + buffer += c.toLowerCase(); + } else if (":" == c) { + this._scheme = buffer; + buffer = ""; + if (stateOverride) { + break loop; + } + if (isRelativeScheme(this._scheme)) { + this._isRelative = true; + } + if ("file" == this._scheme) { + state = "relative"; + } else if (this._isRelative && base && base._scheme == this._scheme) { + state = "relative or authority"; + } else if (this._isRelative) { + state = "authority first slash"; + } else { + state = "scheme data"; + } + } else if (!stateOverride) { + buffer = ""; + cursor = 0; + state = "no scheme"; + continue; + } else if (EOF == c) { + break loop; + } else { + err("Code point not allowed in scheme: " + c); + break loop; + } + break; + + case "scheme data": + if ("?" == c) { + this._query = "?"; + state = "query"; + } else if ("#" == c) { + this._fragment = "#"; + state = "fragment"; + } else { + if (EOF != c && " " != c && "\n" != c && "\r" != c) { + this._schemeData += percentEscape(c); + } + } + break; + + case "no scheme": + if (!base || !isRelativeScheme(base._scheme)) { + err("Missing scheme."); + invalid.call(this); + } else { + state = "relative"; + continue; + } + break; + + case "relative or authority": + if ("/" == c && "/" == input[cursor + 1]) { + state = "authority ignore slashes"; + } else { + err("Expected /, got: " + c); + state = "relative"; + continue; + } + break; + + case "relative": + this._isRelative = true; + if ("file" != this._scheme) this._scheme = base._scheme; + if (EOF == c) { + this._host = base._host; + this._port = base._port; + this._path = base._path.slice(); + this._query = base._query; + this._username = base._username; + this._password = base._password; + break loop; + } else if ("/" == c || "\\" == c) { + if ("\\" == c) err("\\ is an invalid code point."); + state = "relative slash"; + } else if ("?" == c) { + this._host = base._host; + this._port = base._port; + this._path = base._path.slice(); + this._query = "?"; + this._username = base._username; + this._password = base._password; + state = "query"; + } else if ("#" == c) { + this._host = base._host; + this._port = base._port; + this._path = base._path.slice(); + this._query = base._query; + this._fragment = "#"; + this._username = base._username; + this._password = base._password; + state = "fragment"; + } else { + var nextC = input[cursor + 1]; + var nextNextC = input[cursor + 2]; + if ("file" != this._scheme || !ALPHA.test(c) || nextC != ":" && nextC != "|" || EOF != nextNextC && "/" != nextNextC && "\\" != nextNextC && "?" != nextNextC && "#" != nextNextC) { + this._host = base._host; + this._port = base._port; + this._username = base._username; + this._password = base._password; + this._path = base._path.slice(); + this._path.pop(); + } + state = "relative path"; + continue; + } + break; + + case "relative slash": + if ("/" == c || "\\" == c) { + if ("\\" == c) { + err("\\ is an invalid code point."); + } + if ("file" == this._scheme) { + state = "file host"; + } else { + state = "authority ignore slashes"; + } + } else { + if ("file" != this._scheme) { + this._host = base._host; + this._port = base._port; + this._username = base._username; + this._password = base._password; + } + state = "relative path"; + continue; + } + break; + + case "authority first slash": + if ("/" == c) { + state = "authority second slash"; + } else { + err("Expected '/', got: " + c); + state = "authority ignore slashes"; + continue; + } + break; + + case "authority second slash": + state = "authority ignore slashes"; + if ("/" != c) { + err("Expected '/', got: " + c); + continue; + } + break; + + case "authority ignore slashes": + if ("/" != c && "\\" != c) { + state = "authority"; + continue; + } else { + err("Expected authority, got: " + c); + } + break; + + case "authority": + if ("@" == c) { + if (seenAt) { + err("@ already seen."); + buffer += "%40"; + } + seenAt = true; + for (var i = 0; i < buffer.length; i++) { + var cp = buffer[i]; + if (" " == cp || "\n" == cp || "\r" == cp) { + err("Invalid whitespace in authority."); + continue; + } + if (":" == cp && null === this._password) { + this._password = ""; + continue; + } + var tempC = percentEscape(cp); + null !== this._password ? this._password += tempC : this._username += tempC; + } + buffer = ""; + } else if (EOF == c || "/" == c || "\\" == c || "?" == c || "#" == c) { + cursor -= buffer.length; + buffer = ""; + state = "host"; + continue; + } else { + buffer += c; + } + break; + + case "file host": + if (EOF == c || "/" == c || "\\" == c || "?" == c || "#" == c) { + if (buffer.length == 2 && ALPHA.test(buffer[0]) && (buffer[1] == ":" || buffer[1] == "|")) { + state = "relative path"; + } else if (buffer.length == 0) { + state = "relative path start"; + } else { + this._host = IDNAToASCII.call(this, buffer); + buffer = ""; + state = "relative path start"; + } + continue; + } else if (" " == c || "\n" == c || "\r" == c) { + err("Invalid whitespace in file host."); + } else { + buffer += c; + } + break; + + case "host": + case "hostname": + if (":" == c && !seenBracket) { + this._host = IDNAToASCII.call(this, buffer); + buffer = ""; + state = "port"; + if ("hostname" == stateOverride) { + break loop; + } + } else if (EOF == c || "/" == c || "\\" == c || "?" == c || "#" == c) { + this._host = IDNAToASCII.call(this, buffer); + buffer = ""; + state = "relative path start"; + if (stateOverride) { + break loop; + } + continue; + } else if (" " != c && "\n" != c && "\r" != c) { + if ("[" == c) { + seenBracket = true; + } else if ("]" == c) { + seenBracket = false; + } + buffer += c; + } else { + err("Invalid code point in host/hostname: " + c); + } + break; + + case "port": + if (/[0-9]/.test(c)) { + buffer += c; + } else if (EOF == c || "/" == c || "\\" == c || "?" == c || "#" == c || stateOverride) { + if ("" != buffer) { + var temp = parseInt(buffer, 10); + if (temp != relative[this._scheme]) { + this._port = temp + ""; + } + buffer = ""; + } + if (stateOverride) { + break loop; + } + state = "relative path start"; + continue; + } else if (" " == c || "\n" == c || "\r" == c) { + err("Invalid code point in port: " + c); + } else { + invalid.call(this); + } + break; + + case "relative path start": + if ("\\" == c) err("'\\' not allowed in path."); + state = "relative path"; + if ("/" != c && "\\" != c) { + continue; + } + break; + + case "relative path": + if (EOF == c || "/" == c || "\\" == c || !stateOverride && ("?" == c || "#" == c)) { + if ("\\" == c) { + err("\\ not allowed in relative path."); + } + var tmp; + if (tmp = relativePathDotMapping[buffer.toLowerCase()]) { + buffer = tmp; + } + if (".." == buffer) { + this._path.pop(); + if ("/" != c && "\\" != c) { + this._path.push(""); + } + } else if ("." == buffer && "/" != c && "\\" != c) { + this._path.push(""); + } else if ("." != buffer) { + if ("file" == this._scheme && this._path.length == 0 && buffer.length == 2 && ALPHA.test(buffer[0]) && buffer[1] == "|") { + buffer = buffer[0] + ":"; + } + this._path.push(buffer); + } + buffer = ""; + if ("?" == c) { + this._query = "?"; + state = "query"; + } else if ("#" == c) { + this._fragment = "#"; + state = "fragment"; + } + } else if (" " != c && "\n" != c && "\r" != c) { + buffer += percentEscape(c); + } + break; + + case "query": + if (!stateOverride && "#" == c) { + this._fragment = "#"; + state = "fragment"; + } else if (EOF != c && " " != c && "\n" != c && "\r" != c) { + this._query += percentEscapeQuery(c); + } + break; + + case "fragment": + if (EOF != c && " " != c && "\n" != c && "\r" != c) { + this._fragment += c; + } + break; + } + cursor++; + } + } + function clear() { + this._scheme = ""; + this._schemeData = ""; + this._username = ""; + this._password = null; + this._host = ""; + this._port = ""; + this._path = []; + this._query = ""; + this._fragment = ""; + this._isInvalid = false; + this._isRelative = false; + } + function jURL(url, base) { + if (base !== undefined && !(base instanceof jURL)) base = new jURL(String(base)); + this._url = url; + clear.call(this); + var input = url.replace(/^[ \t\r\n\f]+|[ \t\r\n\f]+$/g, ""); + parse.call(this, input, null, base); + } + jURL.prototype = { + toString: function() { + return this.href; + }, + get href() { + if (this._isInvalid) return this._url; + var authority = ""; + if ("" != this._username || null != this._password) { + authority = this._username + (null != this._password ? ":" + this._password : "") + "@"; + } + return this.protocol + (this._isRelative ? "//" + authority + this.host : "") + this.pathname + this._query + this._fragment; + }, + set href(href) { + clear.call(this); + parse.call(this, href); + }, + get protocol() { + return this._scheme + ":"; + }, + set protocol(protocol) { + if (this._isInvalid) return; + parse.call(this, protocol + ":", "scheme start"); + }, + get host() { + return this._isInvalid ? "" : this._port ? this._host + ":" + this._port : this._host; + }, + set host(host) { + if (this._isInvalid || !this._isRelative) return; + parse.call(this, host, "host"); + }, + get hostname() { + return this._host; + }, + set hostname(hostname) { + if (this._isInvalid || !this._isRelative) return; + parse.call(this, hostname, "hostname"); + }, + get port() { + return this._port; + }, + set port(port) { + if (this._isInvalid || !this._isRelative) return; + parse.call(this, port, "port"); + }, + get pathname() { + return this._isInvalid ? "" : this._isRelative ? "/" + this._path.join("/") : this._schemeData; + }, + set pathname(pathname) { + if (this._isInvalid || !this._isRelative) return; + this._path = []; + parse.call(this, pathname, "relative path start"); + }, + get search() { + return this._isInvalid || !this._query || "?" == this._query ? "" : this._query; + }, + set search(search) { + if (this._isInvalid || !this._isRelative) return; + this._query = "?"; + if ("?" == search[0]) search = search.slice(1); + parse.call(this, search, "query"); + }, + get hash() { + return this._isInvalid || !this._fragment || "#" == this._fragment ? "" : this._fragment; + }, + set hash(hash) { + if (this._isInvalid) return; + this._fragment = "#"; + if ("#" == hash[0]) hash = hash.slice(1); + parse.call(this, hash, "fragment"); + }, + get origin() { + var host; + if (this._isInvalid || !this._scheme) { + return ""; + } + switch (this._scheme) { + case "data": + case "file": + case "javascript": + case "mailto": + return "null"; + } + host = this.host; + if (!host) { + return ""; + } + return this._scheme + "://" + host; + } + }; + var OriginalURL = scope.URL; + if (OriginalURL) { + jURL.createObjectURL = function(blob) { + return OriginalURL.createObjectURL.apply(OriginalURL, arguments); + }; + jURL.revokeObjectURL = function(url) { + OriginalURL.revokeObjectURL(url); + }; + } + scope.URL = jURL; +})(this); + +if (typeof WeakMap === "undefined") { + (function() { + var defineProperty = Object.defineProperty; + var counter = Date.now() % 1e9; + var WeakMap = function() { + this.name = "__st" + (Math.random() * 1e9 >>> 0) + (counter++ + "__"); + }; + WeakMap.prototype = { + set: function(key, value) { + var entry = key[this.name]; + if (entry && entry[0] === key) entry[1] = value; else defineProperty(key, this.name, { + value: [ key, value ], + writable: true + }); + return this; + }, + get: function(key) { + var entry; + return (entry = key[this.name]) && entry[0] === key ? entry[1] : undefined; + }, + "delete": function(key) { + var entry = key[this.name]; + if (!entry || entry[0] !== key) return false; + entry[0] = entry[1] = undefined; + return true; + }, + has: function(key) { + var entry = key[this.name]; + if (!entry) return false; + return entry[0] === key; + } + }; + window.WeakMap = WeakMap; + })(); +} + +(function(global) { + var registrationsTable = new WeakMap(); + var setImmediate; + if (/Trident|Edge/.test(navigator.userAgent)) { + setImmediate = setTimeout; + } else if (window.setImmediate) { + setImmediate = window.setImmediate; + } else { + var setImmediateQueue = []; + var sentinel = String(Math.random()); + window.addEventListener("message", function(e) { + if (e.data === sentinel) { + var queue = setImmediateQueue; + setImmediateQueue = []; + queue.forEach(function(func) { + func(); + }); + } + }); + setImmediate = function(func) { + setImmediateQueue.push(func); + window.postMessage(sentinel, "*"); + }; + } + var isScheduled = false; + var scheduledObservers = []; + function scheduleCallback(observer) { + scheduledObservers.push(observer); + if (!isScheduled) { + isScheduled = true; + setImmediate(dispatchCallbacks); + } + } + function wrapIfNeeded(node) { + return window.ShadowDOMPolyfill && window.ShadowDOMPolyfill.wrapIfNeeded(node) || node; + } + function dispatchCallbacks() { + isScheduled = false; + var observers = scheduledObservers; + scheduledObservers = []; + observers.sort(function(o1, o2) { + return o1.uid_ - o2.uid_; + }); + var anyNonEmpty = false; + observers.forEach(function(observer) { + var queue = observer.takeRecords(); + removeTransientObserversFor(observer); + if (queue.length) { + observer.callback_(queue, observer); + anyNonEmpty = true; + } + }); + if (anyNonEmpty) dispatchCallbacks(); + } + function removeTransientObserversFor(observer) { + observer.nodes_.forEach(function(node) { + var registrations = registrationsTable.get(node); + if (!registrations) return; + registrations.forEach(function(registration) { + if (registration.observer === observer) registration.removeTransientObservers(); + }); + }); + } + function forEachAncestorAndObserverEnqueueRecord(target, callback) { + for (var node = target; node; node = node.parentNode) { + var registrations = registrationsTable.get(node); + if (registrations) { + for (var j = 0; j < registrations.length; j++) { + var registration = registrations[j]; + var options = registration.options; + if (node !== target && !options.subtree) continue; + var record = callback(options); + if (record) registration.enqueue(record); + } + } + } + } + var uidCounter = 0; + function JsMutationObserver(callback) { + this.callback_ = callback; + this.nodes_ = []; + this.records_ = []; + this.uid_ = ++uidCounter; + } + JsMutationObserver.prototype = { + observe: function(target, options) { + target = wrapIfNeeded(target); + if (!options.childList && !options.attributes && !options.characterData || options.attributeOldValue && !options.attributes || options.attributeFilter && options.attributeFilter.length && !options.attributes || options.characterDataOldValue && !options.characterData) { + throw new SyntaxError(); + } + var registrations = registrationsTable.get(target); + if (!registrations) registrationsTable.set(target, registrations = []); + var registration; + for (var i = 0; i < registrations.length; i++) { + if (registrations[i].observer === this) { + registration = registrations[i]; + registration.removeListeners(); + registration.options = options; + break; + } + } + if (!registration) { + registration = new Registration(this, target, options); + registrations.push(registration); + this.nodes_.push(target); + } + registration.addListeners(); + }, + disconnect: function() { + this.nodes_.forEach(function(node) { + var registrations = registrationsTable.get(node); + for (var i = 0; i < registrations.length; i++) { + var registration = registrations[i]; + if (registration.observer === this) { + registration.removeListeners(); + registrations.splice(i, 1); + break; + } + } + }, this); + this.records_ = []; + }, + takeRecords: function() { + var copyOfRecords = this.records_; + this.records_ = []; + return copyOfRecords; + } + }; + function MutationRecord(type, target) { + this.type = type; + this.target = target; + this.addedNodes = []; + this.removedNodes = []; + this.previousSibling = null; + this.nextSibling = null; + this.attributeName = null; + this.attributeNamespace = null; + this.oldValue = null; + } + function copyMutationRecord(original) { + var record = new MutationRecord(original.type, original.target); + record.addedNodes = original.addedNodes.slice(); + record.removedNodes = original.removedNodes.slice(); + record.previousSibling = original.previousSibling; + record.nextSibling = original.nextSibling; + record.attributeName = original.attributeName; + record.attributeNamespace = original.attributeNamespace; + record.oldValue = original.oldValue; + return record; + } + var currentRecord, recordWithOldValue; + function getRecord(type, target) { + return currentRecord = new MutationRecord(type, target); + } + function getRecordWithOldValue(oldValue) { + if (recordWithOldValue) return recordWithOldValue; + recordWithOldValue = copyMutationRecord(currentRecord); + recordWithOldValue.oldValue = oldValue; + return recordWithOldValue; + } + function clearRecords() { + currentRecord = recordWithOldValue = undefined; + } + function recordRepresentsCurrentMutation(record) { + return record === recordWithOldValue || record === currentRecord; + } + function selectRecord(lastRecord, newRecord) { + if (lastRecord === newRecord) return lastRecord; + if (recordWithOldValue && recordRepresentsCurrentMutation(lastRecord)) return recordWithOldValue; + return null; + } + function Registration(observer, target, options) { + this.observer = observer; + this.target = target; + this.options = options; + this.transientObservedNodes = []; + } + Registration.prototype = { + enqueue: function(record) { + var records = this.observer.records_; + var length = records.length; + if (records.length > 0) { + var lastRecord = records[length - 1]; + var recordToReplaceLast = selectRecord(lastRecord, record); + if (recordToReplaceLast) { + records[length - 1] = recordToReplaceLast; + return; + } + } else { + scheduleCallback(this.observer); + } + records[length] = record; + }, + addListeners: function() { + this.addListeners_(this.target); + }, + addListeners_: function(node) { + var options = this.options; + if (options.attributes) node.addEventListener("DOMAttrModified", this, true); + if (options.characterData) node.addEventListener("DOMCharacterDataModified", this, true); + if (options.childList) node.addEventListener("DOMNodeInserted", this, true); + if (options.childList || options.subtree) node.addEventListener("DOMNodeRemoved", this, true); + }, + removeListeners: function() { + this.removeListeners_(this.target); + }, + removeListeners_: function(node) { + var options = this.options; + if (options.attributes) node.removeEventListener("DOMAttrModified", this, true); + if (options.characterData) node.removeEventListener("DOMCharacterDataModified", this, true); + if (options.childList) node.removeEventListener("DOMNodeInserted", this, true); + if (options.childList || options.subtree) node.removeEventListener("DOMNodeRemoved", this, true); + }, + addTransientObserver: function(node) { + if (node === this.target) return; + this.addListeners_(node); + this.transientObservedNodes.push(node); + var registrations = registrationsTable.get(node); + if (!registrations) registrationsTable.set(node, registrations = []); + registrations.push(this); + }, + removeTransientObservers: function() { + var transientObservedNodes = this.transientObservedNodes; + this.transientObservedNodes = []; + transientObservedNodes.forEach(function(node) { + this.removeListeners_(node); + var registrations = registrationsTable.get(node); + for (var i = 0; i < registrations.length; i++) { + if (registrations[i] === this) { + registrations.splice(i, 1); + break; + } + } + }, this); + }, + handleEvent: function(e) { + e.stopImmediatePropagation(); + switch (e.type) { + case "DOMAttrModified": + var name = e.attrName; + var namespace = e.relatedNode.namespaceURI; + var target = e.target; + var record = new getRecord("attributes", target); + record.attributeName = name; + record.attributeNamespace = namespace; + var oldValue = e.attrChange === MutationEvent.ADDITION ? null : e.prevValue; + forEachAncestorAndObserverEnqueueRecord(target, function(options) { + if (!options.attributes) return; + if (options.attributeFilter && options.attributeFilter.length && options.attributeFilter.indexOf(name) === -1 && options.attributeFilter.indexOf(namespace) === -1) { + return; + } + if (options.attributeOldValue) return getRecordWithOldValue(oldValue); + return record; + }); + break; + + case "DOMCharacterDataModified": + var target = e.target; + var record = getRecord("characterData", target); + var oldValue = e.prevValue; + forEachAncestorAndObserverEnqueueRecord(target, function(options) { + if (!options.characterData) return; + if (options.characterDataOldValue) return getRecordWithOldValue(oldValue); + return record; + }); + break; + + case "DOMNodeRemoved": + this.addTransientObserver(e.target); + + case "DOMNodeInserted": + var changedNode = e.target; + var addedNodes, removedNodes; + if (e.type === "DOMNodeInserted") { + addedNodes = [ changedNode ]; + removedNodes = []; + } else { + addedNodes = []; + removedNodes = [ changedNode ]; + } + var previousSibling = changedNode.previousSibling; + var nextSibling = changedNode.nextSibling; + var record = getRecord("childList", e.target.parentNode); + record.addedNodes = addedNodes; + record.removedNodes = removedNodes; + record.previousSibling = previousSibling; + record.nextSibling = nextSibling; + forEachAncestorAndObserverEnqueueRecord(e.relatedNode, function(options) { + if (!options.childList) return; + return record; + }); + } + clearRecords(); + } + }; + global.JsMutationObserver = JsMutationObserver; + if (!global.MutationObserver) global.MutationObserver = JsMutationObserver; +})(this); + +window.HTMLImports = window.HTMLImports || { + flags: {} +}; + +(function(scope) { + var IMPORT_LINK_TYPE = "import"; + var useNative = Boolean(IMPORT_LINK_TYPE in document.createElement("link")); + var hasShadowDOMPolyfill = Boolean(window.ShadowDOMPolyfill); + var wrap = function(node) { + return hasShadowDOMPolyfill ? window.ShadowDOMPolyfill.wrapIfNeeded(node) : node; + }; + var rootDocument = wrap(document); + var currentScriptDescriptor = { + get: function() { + var script = window.HTMLImports.currentScript || document.currentScript || (document.readyState !== "complete" ? document.scripts[document.scripts.length - 1] : null); + return wrap(script); + }, + configurable: true + }; + Object.defineProperty(document, "_currentScript", currentScriptDescriptor); + Object.defineProperty(rootDocument, "_currentScript", currentScriptDescriptor); + var isIE = /Trident/.test(navigator.userAgent); + function whenReady(callback, doc) { + doc = doc || rootDocument; + whenDocumentReady(function() { + watchImportsLoad(callback, doc); + }, doc); + } + var requiredReadyState = isIE ? "complete" : "interactive"; + var READY_EVENT = "readystatechange"; + function isDocumentReady(doc) { + return doc.readyState === "complete" || doc.readyState === requiredReadyState; + } + function whenDocumentReady(callback, doc) { + if (!isDocumentReady(doc)) { + var checkReady = function() { + if (doc.readyState === "complete" || doc.readyState === requiredReadyState) { + doc.removeEventListener(READY_EVENT, checkReady); + whenDocumentReady(callback, doc); + } + }; + doc.addEventListener(READY_EVENT, checkReady); + } else if (callback) { + callback(); + } + } + function markTargetLoaded(event) { + event.target.__loaded = true; + } + function watchImportsLoad(callback, doc) { + var imports = doc.querySelectorAll("link[rel=import]"); + var parsedCount = 0, importCount = imports.length, newImports = [], errorImports = []; + function checkDone() { + if (parsedCount == importCount && callback) { + callback({ + allImports: imports, + loadedImports: newImports, + errorImports: errorImports + }); + } + } + function loadedImport(e) { + markTargetLoaded(e); + newImports.push(this); + parsedCount++; + checkDone(); + } + function errorLoadingImport(e) { + errorImports.push(this); + parsedCount++; + checkDone(); + } + if (importCount) { + for (var i = 0, imp; i < importCount && (imp = imports[i]); i++) { + if (isImportLoaded(imp)) { + parsedCount++; + checkDone(); + } else { + imp.addEventListener("load", loadedImport); + imp.addEventListener("error", errorLoadingImport); + } + } + } else { + checkDone(); + } + } + function isImportLoaded(link) { + return useNative ? link.__loaded || link.import && link.import.readyState !== "loading" : link.__importParsed; + } + if (useNative) { + new MutationObserver(function(mxns) { + for (var i = 0, l = mxns.length, m; i < l && (m = mxns[i]); i++) { + if (m.addedNodes) { + handleImports(m.addedNodes); + } + } + }).observe(document.head, { + childList: true + }); + function handleImports(nodes) { + for (var i = 0, l = nodes.length, n; i < l && (n = nodes[i]); i++) { + if (isImport(n)) { + handleImport(n); + } + } + } + function isImport(element) { + return element.localName === "link" && element.rel === "import"; + } + function handleImport(element) { + var loaded = element.import; + if (loaded) { + markTargetLoaded({ + target: element + }); + } else { + element.addEventListener("load", markTargetLoaded); + element.addEventListener("error", markTargetLoaded); + } + } + (function() { + if (document.readyState === "loading") { + var imports = document.querySelectorAll("link[rel=import]"); + for (var i = 0, l = imports.length, imp; i < l && (imp = imports[i]); i++) { + handleImport(imp); + } + } + })(); + } + whenReady(function(detail) { + window.HTMLImports.ready = true; + window.HTMLImports.readyTime = new Date().getTime(); + var evt = rootDocument.createEvent("CustomEvent"); + evt.initCustomEvent("HTMLImportsLoaded", true, true, detail); + rootDocument.dispatchEvent(evt); + }); + scope.IMPORT_LINK_TYPE = IMPORT_LINK_TYPE; + scope.useNative = useNative; + scope.rootDocument = rootDocument; + scope.whenReady = whenReady; + scope.isIE = isIE; +})(window.HTMLImports); + +(function(scope) { + var modules = []; + var addModule = function(module) { + modules.push(module); + }; + var initializeModules = function() { + modules.forEach(function(module) { + module(scope); + }); + }; + scope.addModule = addModule; + scope.initializeModules = initializeModules; +})(window.HTMLImports); + +window.HTMLImports.addModule(function(scope) { + var CSS_URL_REGEXP = /(url\()([^)]*)(\))/g; + var CSS_IMPORT_REGEXP = /(@import[\s]+(?!url\())([^;]*)(;)/g; + var path = { + resolveUrlsInStyle: function(style, linkUrl) { + var doc = style.ownerDocument; + var resolver = doc.createElement("a"); + style.textContent = this.resolveUrlsInCssText(style.textContent, linkUrl, resolver); + return style; + }, + resolveUrlsInCssText: function(cssText, linkUrl, urlObj) { + var r = this.replaceUrls(cssText, urlObj, linkUrl, CSS_URL_REGEXP); + r = this.replaceUrls(r, urlObj, linkUrl, CSS_IMPORT_REGEXP); + return r; + }, + replaceUrls: function(text, urlObj, linkUrl, regexp) { + return text.replace(regexp, function(m, pre, url, post) { + var urlPath = url.replace(/["']/g, ""); + if (linkUrl) { + urlPath = new URL(urlPath, linkUrl).href; + } + urlObj.href = urlPath; + urlPath = urlObj.href; + return pre + "'" + urlPath + "'" + post; + }); + } + }; + scope.path = path; +}); + +window.HTMLImports.addModule(function(scope) { + var xhr = { + async: true, + ok: function(request) { + return request.status >= 200 && request.status < 300 || request.status === 304 || request.status === 0; + }, + load: function(url, next, nextContext) { + var request = new XMLHttpRequest(); + if (scope.flags.debug || scope.flags.bust) { + url += "?" + Math.random(); + } + request.open("GET", url, xhr.async); + request.addEventListener("readystatechange", function(e) { + if (request.readyState === 4) { + var locationHeader = request.getResponseHeader("Location"); + var redirectedUrl = null; + if (locationHeader) { + var redirectedUrl = locationHeader.substr(0, 1) === "/" ? location.origin + locationHeader : locationHeader; + } + next.call(nextContext, !xhr.ok(request) && request, request.response || request.responseText, redirectedUrl); + } + }); + request.send(); + return request; + }, + loadDocument: function(url, next, nextContext) { + this.load(url, next, nextContext).responseType = "document"; + } + }; + scope.xhr = xhr; +}); + +window.HTMLImports.addModule(function(scope) { + var xhr = scope.xhr; + var flags = scope.flags; + var Loader = function(onLoad, onComplete) { + this.cache = {}; + this.onload = onLoad; + this.oncomplete = onComplete; + this.inflight = 0; + this.pending = {}; + }; + Loader.prototype = { + addNodes: function(nodes) { + this.inflight += nodes.length; + for (var i = 0, l = nodes.length, n; i < l && (n = nodes[i]); i++) { + this.require(n); + } + this.checkDone(); + }, + addNode: function(node) { + this.inflight++; + this.require(node); + this.checkDone(); + }, + require: function(elt) { + var url = elt.src || elt.href; + elt.__nodeUrl = url; + if (!this.dedupe(url, elt)) { + this.fetch(url, elt); + } + }, + dedupe: function(url, elt) { + if (this.pending[url]) { + this.pending[url].push(elt); + return true; + } + var resource; + if (this.cache[url]) { + this.onload(url, elt, this.cache[url]); + this.tail(); + return true; + } + this.pending[url] = [ elt ]; + return false; + }, + fetch: function(url, elt) { + flags.load && console.log("fetch", url, elt); + if (!url) { + setTimeout(function() { + this.receive(url, elt, { + error: "href must be specified" + }, null); + }.bind(this), 0); + } else if (url.match(/^data:/)) { + var pieces = url.split(","); + var header = pieces[0]; + var body = pieces[1]; + if (header.indexOf(";base64") > -1) { + body = atob(body); + } else { + body = decodeURIComponent(body); + } + setTimeout(function() { + this.receive(url, elt, null, body); + }.bind(this), 0); + } else { + var receiveXhr = function(err, resource, redirectedUrl) { + this.receive(url, elt, err, resource, redirectedUrl); + }.bind(this); + xhr.load(url, receiveXhr); + } + }, + receive: function(url, elt, err, resource, redirectedUrl) { + this.cache[url] = resource; + var $p = this.pending[url]; + for (var i = 0, l = $p.length, p; i < l && (p = $p[i]); i++) { + this.onload(url, p, resource, err, redirectedUrl); + this.tail(); + } + this.pending[url] = null; + }, + tail: function() { + --this.inflight; + this.checkDone(); + }, + checkDone: function() { + if (!this.inflight) { + this.oncomplete(); + } + } + }; + scope.Loader = Loader; +}); + +window.HTMLImports.addModule(function(scope) { + var Observer = function(addCallback) { + this.addCallback = addCallback; + this.mo = new MutationObserver(this.handler.bind(this)); + }; + Observer.prototype = { + handler: function(mutations) { + for (var i = 0, l = mutations.length, m; i < l && (m = mutations[i]); i++) { + if (m.type === "childList" && m.addedNodes.length) { + this.addedNodes(m.addedNodes); + } + } + }, + addedNodes: function(nodes) { + if (this.addCallback) { + this.addCallback(nodes); + } + for (var i = 0, l = nodes.length, n, loading; i < l && (n = nodes[i]); i++) { + if (n.children && n.children.length) { + this.addedNodes(n.children); + } + } + }, + observe: function(root) { + this.mo.observe(root, { + childList: true, + subtree: true + }); + } + }; + scope.Observer = Observer; +}); + +window.HTMLImports.addModule(function(scope) { + var path = scope.path; + var rootDocument = scope.rootDocument; + var flags = scope.flags; + var isIE = scope.isIE; + var IMPORT_LINK_TYPE = scope.IMPORT_LINK_TYPE; + var IMPORT_SELECTOR = "link[rel=" + IMPORT_LINK_TYPE + "]"; + var importParser = { + documentSelectors: IMPORT_SELECTOR, + importsSelectors: [ IMPORT_SELECTOR, "link[rel=stylesheet]", "style", "script:not([type])", 'script[type="application/javascript"]', 'script[type="text/javascript"]' ].join(","), + map: { + link: "parseLink", + script: "parseScript", + style: "parseStyle" + }, + dynamicElements: [], + parseNext: function() { + var next = this.nextToParse(); + if (next) { + this.parse(next); + } + }, + parse: function(elt) { + if (this.isParsed(elt)) { + flags.parse && console.log("[%s] is already parsed", elt.localName); + return; + } + var fn = this[this.map[elt.localName]]; + if (fn) { + this.markParsing(elt); + fn.call(this, elt); + } + }, + parseDynamic: function(elt, quiet) { + this.dynamicElements.push(elt); + if (!quiet) { + this.parseNext(); + } + }, + markParsing: function(elt) { + flags.parse && console.log("parsing", elt); + this.parsingElement = elt; + }, + markParsingComplete: function(elt) { + elt.__importParsed = true; + this.markDynamicParsingComplete(elt); + if (elt.__importElement) { + elt.__importElement.__importParsed = true; + this.markDynamicParsingComplete(elt.__importElement); + } + this.parsingElement = null; + flags.parse && console.log("completed", elt); + }, + markDynamicParsingComplete: function(elt) { + var i = this.dynamicElements.indexOf(elt); + if (i >= 0) { + this.dynamicElements.splice(i, 1); + } + }, + parseImport: function(elt) { + if (window.HTMLImports.__importsParsingHook) { + window.HTMLImports.__importsParsingHook(elt); + } + if (elt.import) { + elt.import.__importParsed = true; + } + this.markParsingComplete(elt); + if (elt.__resource && !elt.__error) { + elt.dispatchEvent(new CustomEvent("load", { + bubbles: false + })); + } else { + elt.dispatchEvent(new CustomEvent("error", { + bubbles: false + })); + } + if (elt.__pending) { + var fn; + while (elt.__pending.length) { + fn = elt.__pending.shift(); + if (fn) { + fn({ + target: elt + }); + } + } + } + this.parseNext(); + }, + parseLink: function(linkElt) { + if (nodeIsImport(linkElt)) { + this.parseImport(linkElt); + } else { + linkElt.href = linkElt.href; + this.parseGeneric(linkElt); + } + }, + parseStyle: function(elt) { + var src = elt; + elt = cloneStyle(elt); + src.__appliedElement = elt; + elt.__importElement = src; + this.parseGeneric(elt); + }, + parseGeneric: function(elt) { + this.trackElement(elt); + this.addElementToDocument(elt); + }, + rootImportForElement: function(elt) { + var n = elt; + while (n.ownerDocument.__importLink) { + n = n.ownerDocument.__importLink; + } + return n; + }, + addElementToDocument: function(elt) { + var port = this.rootImportForElement(elt.__importElement || elt); + port.parentNode.insertBefore(elt, port); + }, + trackElement: function(elt, callback) { + var self = this; + var done = function(e) { + if (callback) { + callback(e); + } + self.markParsingComplete(elt); + self.parseNext(); + }; + elt.addEventListener("load", done); + elt.addEventListener("error", done); + if (isIE && elt.localName === "style") { + var fakeLoad = false; + if (elt.textContent.indexOf("@import") == -1) { + fakeLoad = true; + } else if (elt.sheet) { + fakeLoad = true; + var csr = elt.sheet.cssRules; + var len = csr ? csr.length : 0; + for (var i = 0, r; i < len && (r = csr[i]); i++) { + if (r.type === CSSRule.IMPORT_RULE) { + fakeLoad = fakeLoad && Boolean(r.styleSheet); + } + } + } + if (fakeLoad) { + setTimeout(function() { + elt.dispatchEvent(new CustomEvent("load", { + bubbles: false + })); + }); + } + } + }, + parseScript: function(scriptElt) { + var script = document.createElement("script"); + script.__importElement = scriptElt; + script.src = scriptElt.src ? scriptElt.src : generateScriptDataUrl(scriptElt); + scope.currentScript = scriptElt; + this.trackElement(script, function(e) { + script.parentNode.removeChild(script); + scope.currentScript = null; + }); + this.addElementToDocument(script); + }, + nextToParse: function() { + this._mayParse = []; + return !this.parsingElement && (this.nextToParseInDoc(rootDocument) || this.nextToParseDynamic()); + }, + nextToParseInDoc: function(doc, link) { + if (doc && this._mayParse.indexOf(doc) < 0) { + this._mayParse.push(doc); + var nodes = doc.querySelectorAll(this.parseSelectorsForNode(doc)); + for (var i = 0, l = nodes.length, p = 0, n; i < l && (n = nodes[i]); i++) { + if (!this.isParsed(n)) { + if (this.hasResource(n)) { + return nodeIsImport(n) ? this.nextToParseInDoc(n.import, n) : n; + } else { + return; + } + } + } + } + return link; + }, + nextToParseDynamic: function() { + return this.dynamicElements[0]; + }, + parseSelectorsForNode: function(node) { + var doc = node.ownerDocument || node; + return doc === rootDocument ? this.documentSelectors : this.importsSelectors; + }, + isParsed: function(node) { + return node.__importParsed; + }, + needsDynamicParsing: function(elt) { + return this.dynamicElements.indexOf(elt) >= 0; + }, + hasResource: function(node) { + if (nodeIsImport(node) && node.import === undefined) { + return false; + } + return true; + } + }; + function nodeIsImport(elt) { + return elt.localName === "link" && elt.rel === IMPORT_LINK_TYPE; + } + function generateScriptDataUrl(script) { + var scriptContent = generateScriptContent(script); + return "data:text/javascript;charset=utf-8," + encodeURIComponent(scriptContent); + } + function generateScriptContent(script) { + return script.textContent + generateSourceMapHint(script); + } + function generateSourceMapHint(script) { + var owner = script.ownerDocument; + owner.__importedScripts = owner.__importedScripts || 0; + var moniker = script.ownerDocument.baseURI; + var num = owner.__importedScripts ? "-" + owner.__importedScripts : ""; + owner.__importedScripts++; + return "\n//# sourceURL=" + moniker + num + ".js\n"; + } + function cloneStyle(style) { + var clone = style.ownerDocument.createElement("style"); + clone.textContent = style.textContent; + path.resolveUrlsInStyle(clone); + return clone; + } + scope.parser = importParser; + scope.IMPORT_SELECTOR = IMPORT_SELECTOR; +}); + +window.HTMLImports.addModule(function(scope) { + var flags = scope.flags; + var IMPORT_LINK_TYPE = scope.IMPORT_LINK_TYPE; + var IMPORT_SELECTOR = scope.IMPORT_SELECTOR; + var rootDocument = scope.rootDocument; + var Loader = scope.Loader; + var Observer = scope.Observer; + var parser = scope.parser; + var importer = { + documents: {}, + documentPreloadSelectors: IMPORT_SELECTOR, + importsPreloadSelectors: [ IMPORT_SELECTOR ].join(","), + loadNode: function(node) { + importLoader.addNode(node); + }, + loadSubtree: function(parent) { + var nodes = this.marshalNodes(parent); + importLoader.addNodes(nodes); + }, + marshalNodes: function(parent) { + return parent.querySelectorAll(this.loadSelectorsForNode(parent)); + }, + loadSelectorsForNode: function(node) { + var doc = node.ownerDocument || node; + return doc === rootDocument ? this.documentPreloadSelectors : this.importsPreloadSelectors; + }, + loaded: function(url, elt, resource, err, redirectedUrl) { + flags.load && console.log("loaded", url, elt); + elt.__resource = resource; + elt.__error = err; + if (isImportLink(elt)) { + var doc = this.documents[url]; + if (doc === undefined) { + doc = err ? null : makeDocument(resource, redirectedUrl || url); + if (doc) { + doc.__importLink = elt; + this.bootDocument(doc); + } + this.documents[url] = doc; + } + elt.import = doc; + } + parser.parseNext(); + }, + bootDocument: function(doc) { + this.loadSubtree(doc); + this.observer.observe(doc); + parser.parseNext(); + }, + loadedAll: function() { + parser.parseNext(); + } + }; + var importLoader = new Loader(importer.loaded.bind(importer), importer.loadedAll.bind(importer)); + importer.observer = new Observer(); + function isImportLink(elt) { + return isLinkRel(elt, IMPORT_LINK_TYPE); + } + function isLinkRel(elt, rel) { + return elt.localName === "link" && elt.getAttribute("rel") === rel; + } + function hasBaseURIAccessor(doc) { + return !!Object.getOwnPropertyDescriptor(doc, "baseURI"); + } + function makeDocument(resource, url) { + var doc = document.implementation.createHTMLDocument(IMPORT_LINK_TYPE); + doc._URL = url; + var base = doc.createElement("base"); + base.setAttribute("href", url); + if (!doc.baseURI && !hasBaseURIAccessor(doc)) { + Object.defineProperty(doc, "baseURI", { + value: url + }); + } + var meta = doc.createElement("meta"); + meta.setAttribute("charset", "utf-8"); + doc.head.appendChild(meta); + doc.head.appendChild(base); + doc.body.innerHTML = resource; + if (window.HTMLTemplateElement && HTMLTemplateElement.bootstrap) { + HTMLTemplateElement.bootstrap(doc); + } + return doc; + } + if (!document.baseURI) { + var baseURIDescriptor = { + get: function() { + var base = document.querySelector("base"); + return base ? base.href : window.location.href; + }, + configurable: true + }; + Object.defineProperty(document, "baseURI", baseURIDescriptor); + Object.defineProperty(rootDocument, "baseURI", baseURIDescriptor); + } + scope.importer = importer; + scope.importLoader = importLoader; +}); + +window.HTMLImports.addModule(function(scope) { + var parser = scope.parser; + var importer = scope.importer; + var dynamic = { + added: function(nodes) { + var owner, parsed, loading; + for (var i = 0, l = nodes.length, n; i < l && (n = nodes[i]); i++) { + if (!owner) { + owner = n.ownerDocument; + parsed = parser.isParsed(owner); + } + loading = this.shouldLoadNode(n); + if (loading) { + importer.loadNode(n); + } + if (this.shouldParseNode(n) && parsed) { + parser.parseDynamic(n, loading); + } + } + }, + shouldLoadNode: function(node) { + return node.nodeType === 1 && matches.call(node, importer.loadSelectorsForNode(node)); + }, + shouldParseNode: function(node) { + return node.nodeType === 1 && matches.call(node, parser.parseSelectorsForNode(node)); + } + }; + importer.observer.addCallback = dynamic.added.bind(dynamic); + var matches = HTMLElement.prototype.matches || HTMLElement.prototype.matchesSelector || HTMLElement.prototype.webkitMatchesSelector || HTMLElement.prototype.mozMatchesSelector || HTMLElement.prototype.msMatchesSelector; +}); + +(function(scope) { + var initializeModules = scope.initializeModules; + var isIE = scope.isIE; + if (scope.useNative) { + return; + } + if (isIE && typeof window.CustomEvent !== "function") { + window.CustomEvent = function(inType, params) { + params = params || {}; + var e = document.createEvent("CustomEvent"); + e.initCustomEvent(inType, Boolean(params.bubbles), Boolean(params.cancelable), params.detail); + e.preventDefault = function() { + Object.defineProperty(this, "defaultPrevented", { + get: function() { + return true; + } + }); + }; + return e; + }; + window.CustomEvent.prototype = window.Event.prototype; + } + initializeModules(); + var rootDocument = scope.rootDocument; + function bootstrap() { + window.HTMLImports.importer.bootDocument(rootDocument); + } + if (document.readyState === "complete" || document.readyState === "interactive" && !window.attachEvent) { + bootstrap(); + } else { + document.addEventListener("DOMContentLoaded", bootstrap); + } +})(window.HTMLImports); + +window.CustomElements = window.CustomElements || { + flags: {} +}; + +(function(scope) { + var flags = scope.flags; + var modules = []; + var addModule = function(module) { + modules.push(module); + }; + var initializeModules = function() { + modules.forEach(function(module) { + module(scope); + }); + }; + scope.addModule = addModule; + scope.initializeModules = initializeModules; + scope.hasNative = Boolean(document.registerElement); + scope.useNative = !flags.register && scope.hasNative && !window.ShadowDOMPolyfill && (!window.HTMLImports || window.HTMLImports.useNative); +})(window.CustomElements); + +window.CustomElements.addModule(function(scope) { + var IMPORT_LINK_TYPE = window.HTMLImports ? window.HTMLImports.IMPORT_LINK_TYPE : "none"; + function forSubtree(node, cb) { + findAllElements(node, function(e) { + if (cb(e)) { + return true; + } + forRoots(e, cb); + }); + forRoots(node, cb); + } + function findAllElements(node, find, data) { + var e = node.firstElementChild; + if (!e) { + e = node.firstChild; + while (e && e.nodeType !== Node.ELEMENT_NODE) { + e = e.nextSibling; + } + } + while (e) { + if (find(e, data) !== true) { + findAllElements(e, find, data); + } + e = e.nextElementSibling; + } + return null; + } + function forRoots(node, cb) { + var root = node.shadowRoot; + while (root) { + forSubtree(root, cb); + root = root.olderShadowRoot; + } + } + function forDocumentTree(doc, cb) { + _forDocumentTree(doc, cb, []); + } + function _forDocumentTree(doc, cb, processingDocuments) { + doc = window.wrap(doc); + if (processingDocuments.indexOf(doc) >= 0) { + return; + } + processingDocuments.push(doc); + var imports = doc.querySelectorAll("link[rel=" + IMPORT_LINK_TYPE + "]"); + for (var i = 0, l = imports.length, n; i < l && (n = imports[i]); i++) { + if (n.import) { + _forDocumentTree(n.import, cb, processingDocuments); + } + } + cb(doc); + } + scope.forDocumentTree = forDocumentTree; + scope.forSubtree = forSubtree; +}); + +window.CustomElements.addModule(function(scope) { + var flags = scope.flags; + var forSubtree = scope.forSubtree; + var forDocumentTree = scope.forDocumentTree; + function addedNode(node) { + return added(node) || addedSubtree(node); + } + function added(node) { + if (scope.upgrade(node)) { + return true; + } + attached(node); + } + function addedSubtree(node) { + forSubtree(node, function(e) { + if (added(e)) { + return true; + } + }); + } + function attachedNode(node) { + attached(node); + if (inDocument(node)) { + forSubtree(node, function(e) { + attached(e); + }); + } + } + var hasPolyfillMutations = !window.MutationObserver || window.MutationObserver === window.JsMutationObserver; + scope.hasPolyfillMutations = hasPolyfillMutations; + var isPendingMutations = false; + var pendingMutations = []; + function deferMutation(fn) { + pendingMutations.push(fn); + if (!isPendingMutations) { + isPendingMutations = true; + setTimeout(takeMutations); + } + } + function takeMutations() { + isPendingMutations = false; + var $p = pendingMutations; + for (var i = 0, l = $p.length, p; i < l && (p = $p[i]); i++) { + p(); + } + pendingMutations = []; + } + function attached(element) { + if (hasPolyfillMutations) { + deferMutation(function() { + _attached(element); + }); + } else { + _attached(element); + } + } + function _attached(element) { + if (element.__upgraded__ && (element.attachedCallback || element.detachedCallback)) { + if (!element.__attached && inDocument(element)) { + element.__attached = true; + if (element.attachedCallback) { + element.attachedCallback(); + } + } + } + } + function detachedNode(node) { + detached(node); + forSubtree(node, function(e) { + detached(e); + }); + } + function detached(element) { + if (hasPolyfillMutations) { + deferMutation(function() { + _detached(element); + }); + } else { + _detached(element); + } + } + function _detached(element) { + if (element.__upgraded__ && (element.attachedCallback || element.detachedCallback)) { + if (element.__attached && !inDocument(element)) { + element.__attached = false; + if (element.detachedCallback) { + element.detachedCallback(); + } + } + } + } + function inDocument(element) { + var p = element; + var doc = wrap(document); + while (p) { + if (p == doc) { + return true; + } + p = p.parentNode || p.nodeType === Node.DOCUMENT_FRAGMENT_NODE && p.host; + } + } + function watchShadow(node) { + if (node.shadowRoot && !node.shadowRoot.__watched) { + flags.dom && console.log("watching shadow-root for: ", node.localName); + var root = node.shadowRoot; + while (root) { + observe(root); + root = root.olderShadowRoot; + } + } + } + function handler(mutations) { + if (flags.dom) { + var mx = mutations[0]; + if (mx && mx.type === "childList" && mx.addedNodes) { + if (mx.addedNodes) { + var d = mx.addedNodes[0]; + while (d && d !== document && !d.host) { + d = d.parentNode; + } + var u = d && (d.URL || d._URL || d.host && d.host.localName) || ""; + u = u.split("/?").shift().split("/").pop(); + } + } + console.group("mutations (%d) [%s]", mutations.length, u || ""); + } + mutations.forEach(function(mx) { + if (mx.type === "childList") { + forEach(mx.addedNodes, function(n) { + if (!n.localName) { + return; + } + addedNode(n); + }); + forEach(mx.removedNodes, function(n) { + if (!n.localName) { + return; + } + detachedNode(n); + }); + } + }); + flags.dom && console.groupEnd(); + } + function takeRecords(node) { + node = window.wrap(node); + if (!node) { + node = window.wrap(document); + } + while (node.parentNode) { + node = node.parentNode; + } + var observer = node.__observer; + if (observer) { + handler(observer.takeRecords()); + takeMutations(); + } + } + var forEach = Array.prototype.forEach.call.bind(Array.prototype.forEach); + function observe(inRoot) { + if (inRoot.__observer) { + return; + } + var observer = new MutationObserver(handler); + observer.observe(inRoot, { + childList: true, + subtree: true + }); + inRoot.__observer = observer; + } + function upgradeDocument(doc) { + doc = window.wrap(doc); + flags.dom && console.group("upgradeDocument: ", doc.baseURI.split("/").pop()); + addedNode(doc); + observe(doc); + flags.dom && console.groupEnd(); + } + function upgradeDocumentTree(doc) { + forDocumentTree(doc, upgradeDocument); + } + var originalCreateShadowRoot = Element.prototype.createShadowRoot; + if (originalCreateShadowRoot) { + Element.prototype.createShadowRoot = function() { + var root = originalCreateShadowRoot.call(this); + window.CustomElements.watchShadow(this); + return root; + }; + } + scope.watchShadow = watchShadow; + scope.upgradeDocumentTree = upgradeDocumentTree; + scope.upgradeSubtree = addedSubtree; + scope.upgradeAll = addedNode; + scope.attachedNode = attachedNode; + scope.takeRecords = takeRecords; +}); + +window.CustomElements.addModule(function(scope) { + var flags = scope.flags; + function upgrade(node) { + if (!node.__upgraded__ && node.nodeType === Node.ELEMENT_NODE) { + var is = node.getAttribute("is"); + var definition = scope.getRegisteredDefinition(is || node.localName); + if (definition) { + if (is && definition.tag == node.localName) { + return upgradeWithDefinition(node, definition); + } else if (!is && !definition.extends) { + return upgradeWithDefinition(node, definition); + } + } + } + } + function upgradeWithDefinition(element, definition) { + flags.upgrade && console.group("upgrade:", element.localName); + if (definition.is) { + element.setAttribute("is", definition.is); + } + implementPrototype(element, definition); + element.__upgraded__ = true; + created(element); + scope.attachedNode(element); + scope.upgradeSubtree(element); + flags.upgrade && console.groupEnd(); + return element; + } + function implementPrototype(element, definition) { + if (Object.__proto__) { + element.__proto__ = definition.prototype; + } else { + customMixin(element, definition.prototype, definition.native); + element.__proto__ = definition.prototype; + } + } + function customMixin(inTarget, inSrc, inNative) { + var used = {}; + var p = inSrc; + while (p !== inNative && p !== HTMLElement.prototype) { + var keys = Object.getOwnPropertyNames(p); + for (var i = 0, k; k = keys[i]; i++) { + if (!used[k]) { + Object.defineProperty(inTarget, k, Object.getOwnPropertyDescriptor(p, k)); + used[k] = 1; + } + } + p = Object.getPrototypeOf(p); + } + } + function created(element) { + if (element.createdCallback) { + element.createdCallback(); + } + } + scope.upgrade = upgrade; + scope.upgradeWithDefinition = upgradeWithDefinition; + scope.implementPrototype = implementPrototype; +}); + +window.CustomElements.addModule(function(scope) { + var isIE11OrOlder = scope.isIE11OrOlder; + var upgradeDocumentTree = scope.upgradeDocumentTree; + var upgradeAll = scope.upgradeAll; + var upgradeWithDefinition = scope.upgradeWithDefinition; + var implementPrototype = scope.implementPrototype; + var useNative = scope.useNative; + function register(name, options) { + var definition = options || {}; + if (!name) { + throw new Error("document.registerElement: first argument `name` must not be empty"); + } + if (name.indexOf("-") < 0) { + throw new Error("document.registerElement: first argument ('name') must contain a dash ('-'). Argument provided was '" + String(name) + "'."); + } + if (isReservedTag(name)) { + throw new Error("Failed to execute 'registerElement' on 'Document': Registration failed for type '" + String(name) + "'. The type name is invalid."); + } + if (getRegisteredDefinition(name)) { + throw new Error("DuplicateDefinitionError: a type with name '" + String(name) + "' is already registered"); + } + if (!definition.prototype) { + definition.prototype = Object.create(HTMLElement.prototype); + } + definition.__name = name.toLowerCase(); + definition.lifecycle = definition.lifecycle || {}; + definition.ancestry = ancestry(definition.extends); + resolveTagName(definition); + resolvePrototypeChain(definition); + overrideAttributeApi(definition.prototype); + registerDefinition(definition.__name, definition); + definition.ctor = generateConstructor(definition); + definition.ctor.prototype = definition.prototype; + definition.prototype.constructor = definition.ctor; + if (scope.ready) { + upgradeDocumentTree(document); + } + return definition.ctor; + } + function overrideAttributeApi(prototype) { + if (prototype.setAttribute._polyfilled) { + return; + } + var setAttribute = prototype.setAttribute; + prototype.setAttribute = function(name, value) { + changeAttribute.call(this, name, value, setAttribute); + }; + var removeAttribute = prototype.removeAttribute; + prototype.removeAttribute = function(name) { + changeAttribute.call(this, name, null, removeAttribute); + }; + prototype.setAttribute._polyfilled = true; + } + function changeAttribute(name, value, operation) { + name = name.toLowerCase(); + var oldValue = this.getAttribute(name); + operation.apply(this, arguments); + var newValue = this.getAttribute(name); + if (this.attributeChangedCallback && newValue !== oldValue) { + this.attributeChangedCallback(name, oldValue, newValue); + } + } + function isReservedTag(name) { + for (var i = 0; i < reservedTagList.length; i++) { + if (name === reservedTagList[i]) { + return true; + } + } + } + var reservedTagList = [ "annotation-xml", "color-profile", "font-face", "font-face-src", "font-face-uri", "font-face-format", "font-face-name", "missing-glyph" ]; + function ancestry(extnds) { + var extendee = getRegisteredDefinition(extnds); + if (extendee) { + return ancestry(extendee.extends).concat([ extendee ]); + } + return []; + } + function resolveTagName(definition) { + var baseTag = definition.extends; + for (var i = 0, a; a = definition.ancestry[i]; i++) { + baseTag = a.is && a.tag; + } + definition.tag = baseTag || definition.__name; + if (baseTag) { + definition.is = definition.__name; + } + } + function resolvePrototypeChain(definition) { + if (!Object.__proto__) { + var nativePrototype = HTMLElement.prototype; + if (definition.is) { + var inst = document.createElement(definition.tag); + var expectedPrototype = Object.getPrototypeOf(inst); + if (expectedPrototype === definition.prototype) { + nativePrototype = expectedPrototype; + } + } + var proto = definition.prototype, ancestor; + while (proto && proto !== nativePrototype) { + ancestor = Object.getPrototypeOf(proto); + proto.__proto__ = ancestor; + proto = ancestor; + } + definition.native = nativePrototype; + } + } + function instantiate(definition) { + return upgradeWithDefinition(domCreateElement(definition.tag), definition); + } + var registry = {}; + function getRegisteredDefinition(name) { + if (name) { + return registry[name.toLowerCase()]; + } + } + function registerDefinition(name, definition) { + registry[name] = definition; + } + function generateConstructor(definition) { + return function() { + return instantiate(definition); + }; + } + var HTML_NAMESPACE = "http://www.w3.org/1999/xhtml"; + function createElementNS(namespace, tag, typeExtension) { + if (namespace === HTML_NAMESPACE) { + return createElement(tag, typeExtension); + } else { + return domCreateElementNS(namespace, tag); + } + } + function createElement(tag, typeExtension) { + if (tag) { + tag = tag.toLowerCase(); + } + if (typeExtension) { + typeExtension = typeExtension.toLowerCase(); + } + var definition = getRegisteredDefinition(typeExtension || tag); + if (definition) { + if (tag == definition.tag && typeExtension == definition.is) { + return new definition.ctor(); + } + if (!typeExtension && !definition.is) { + return new definition.ctor(); + } + } + var element; + if (typeExtension) { + element = createElement(tag); + element.setAttribute("is", typeExtension); + return element; + } + element = domCreateElement(tag); + if (tag.indexOf("-") >= 0) { + implementPrototype(element, HTMLElement); + } + return element; + } + var domCreateElement = document.createElement.bind(document); + var domCreateElementNS = document.createElementNS.bind(document); + var isInstance; + if (!Object.__proto__ && !useNative) { + isInstance = function(obj, ctor) { + var p = obj; + while (p) { + if (p === ctor.prototype) { + return true; + } + p = p.__proto__; + } + return false; + }; + } else { + isInstance = function(obj, base) { + return obj instanceof base; + }; + } + function wrapDomMethodToForceUpgrade(obj, methodName) { + var orig = obj[methodName]; + obj[methodName] = function() { + var n = orig.apply(this, arguments); + upgradeAll(n); + return n; + }; + } + wrapDomMethodToForceUpgrade(Node.prototype, "cloneNode"); + wrapDomMethodToForceUpgrade(document, "importNode"); + if (isIE11OrOlder) { + (function() { + var importNode = document.importNode; + document.importNode = function() { + var n = importNode.apply(document, arguments); + if (n.nodeType == n.DOCUMENT_FRAGMENT_NODE) { + var f = document.createDocumentFragment(); + f.appendChild(n); + return f; + } else { + return n; + } + }; + })(); + } + document.registerElement = register; + document.createElement = createElement; + document.createElementNS = createElementNS; + scope.registry = registry; + scope.instanceof = isInstance; + scope.reservedTagList = reservedTagList; + scope.getRegisteredDefinition = getRegisteredDefinition; + document.register = document.registerElement; +}); + +(function(scope) { + var useNative = scope.useNative; + var initializeModules = scope.initializeModules; + var isIE11OrOlder = /Trident/.test(navigator.userAgent); + if (useNative) { + var nop = function() {}; + scope.watchShadow = nop; + scope.upgrade = nop; + scope.upgradeAll = nop; + scope.upgradeDocumentTree = nop; + scope.upgradeSubtree = nop; + scope.takeRecords = nop; + scope.instanceof = function(obj, base) { + return obj instanceof base; + }; + } else { + initializeModules(); + } + var upgradeDocumentTree = scope.upgradeDocumentTree; + if (!window.wrap) { + if (window.ShadowDOMPolyfill) { + window.wrap = window.ShadowDOMPolyfill.wrapIfNeeded; + window.unwrap = window.ShadowDOMPolyfill.unwrapIfNeeded; + } else { + window.wrap = window.unwrap = function(node) { + return node; + }; + } + } + function bootstrap() { + upgradeDocumentTree(window.wrap(document)); + if (window.HTMLImports) { + window.HTMLImports.__importsParsingHook = function(elt) { + upgradeDocumentTree(wrap(elt.import)); + }; + } + window.CustomElements.ready = true; + setTimeout(function() { + window.CustomElements.readyTime = Date.now(); + if (window.HTMLImports) { + window.CustomElements.elapsed = window.CustomElements.readyTime - window.HTMLImports.readyTime; + } + document.dispatchEvent(new CustomEvent("WebComponentsReady", { + bubbles: true + })); + }); + } + if (isIE11OrOlder && typeof window.CustomEvent !== "function") { + window.CustomEvent = function(inType, params) { + params = params || {}; + var e = document.createEvent("CustomEvent"); + e.initCustomEvent(inType, Boolean(params.bubbles), Boolean(params.cancelable), params.detail); + e.preventDefault = function() { + Object.defineProperty(this, "defaultPrevented", { + get: function() { + return true; + } + }); + }; + return e; + }; + window.CustomEvent.prototype = window.Event.prototype; + } + if (document.readyState === "complete" || scope.flags.eager) { + bootstrap(); + } else if (document.readyState === "interactive" && !window.attachEvent && (!window.HTMLImports || window.HTMLImports.ready)) { + bootstrap(); + } else { + var loadEvent = window.HTMLImports && !window.HTMLImports.ready ? "HTMLImportsLoaded" : "DOMContentLoaded"; + window.addEventListener(loadEvent, bootstrap); + } + scope.isIE11OrOlder = isIE11OrOlder; +})(window.CustomElements); + +if (typeof HTMLTemplateElement === "undefined") { + (function() { + var TEMPLATE_TAG = "template"; + HTMLTemplateElement = function() {}; + HTMLTemplateElement.prototype = Object.create(HTMLElement.prototype); + HTMLTemplateElement.decorate = function(template) { + if (!template.content) { + template.content = template.ownerDocument.createDocumentFragment(); + } + var child; + while (child = template.firstChild) { + template.content.appendChild(child); + } + }; + HTMLTemplateElement.bootstrap = function(doc) { + var templates = doc.querySelectorAll(TEMPLATE_TAG); + for (var i = 0, l = templates.length, t; i < l && (t = templates[i]); i++) { + HTMLTemplateElement.decorate(t); + } + }; + window.addEventListener("DOMContentLoaded", function() { + HTMLTemplateElement.bootstrap(document); + }); + var createElement = document.createElement; + document.createElement = function() { + "use strict"; + var el = createElement.apply(document, arguments); + if (el.localName == "template") { + HTMLTemplateElement.decorate(el); + } + return el; + }; + })(); +} + +(function(scope) { + var style = document.createElement("style"); + style.textContent = "" + "body {" + "transition: opacity ease-in 0.2s;" + " } \n" + "body[unresolved] {" + "opacity: 0; display: block; overflow: hidden; position: relative;" + " } \n"; + var head = document.querySelector("head"); + head.insertBefore(style, head.firstChild); +})(window.WebComponents); \ No newline at end of file diff --git a/static/bower_components/webcomponentsjs/webcomponents-lite.min.js b/static/bower_components/webcomponentsjs/webcomponents-lite.min.js new file mode 100644 index 0000000..abb6ff6 --- /dev/null +++ b/static/bower_components/webcomponentsjs/webcomponents-lite.min.js @@ -0,0 +1,13 @@ +/** + * @license + * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt + */ +// @version 0.7.5 +window.WebComponents=window.WebComponents||{},function(e){var t=e.flags||{},n="webcomponents-lite.js",r=document.querySelector('script[src*="'+n+'"]');if(!t.noOpts){if(location.search.slice(1).split("&").forEach(function(e){var n,r=e.split("=");r[0]&&(n=r[0].match(/wc-(.+)/))&&(t[n[1]]=r[1]||!0)}),r)for(var o,i=0;o=r.attributes[i];i++)"src"!==o.name&&(t[o.name]=o.value||!0);if(t.log){var a=t.log.split(",");t.log={},a.forEach(function(e){t.log[e]=!0})}else t.log={}}t.shadow=t.shadow||t.shadowdom||t.polyfill,t.shadow="native"===t.shadow?!1:t.shadow||!HTMLElement.prototype.createShadowRoot,t.register&&(window.CustomElements=window.CustomElements||{flags:{}},window.CustomElements.flags.register=t.register),e.flags=t}(window.WebComponents),function(e){"use strict";function t(e){return void 0!==h[e]}function n(){s.call(this),this._isInvalid=!0}function r(e){return""==e&&n.call(this),e.toLowerCase()}function o(e){var t=e.charCodeAt(0);return t>32&&127>t&&-1==[34,35,60,62,63,96].indexOf(t)?e:encodeURIComponent(e)}function i(e){var t=e.charCodeAt(0);return t>32&&127>t&&-1==[34,35,60,62,96].indexOf(t)?e:encodeURIComponent(e)}function a(e,a,s){function c(e){b.push(e)}var d=a||"scheme start",u=0,l="",_=!1,w=!1,b=[];e:for(;(e[u-1]!=f||0==u)&&!this._isInvalid;){var g=e[u];switch(d){case"scheme start":if(!g||!m.test(g)){if(a){c("Invalid scheme.");break e}l="",d="no scheme";continue}l+=g.toLowerCase(),d="scheme";break;case"scheme":if(g&&v.test(g))l+=g.toLowerCase();else{if(":"!=g){if(a){if(f==g)break e;c("Code point not allowed in scheme: "+g);break e}l="",u=0,d="no scheme";continue}if(this._scheme=l,l="",a)break e;t(this._scheme)&&(this._isRelative=!0),d="file"==this._scheme?"relative":this._isRelative&&s&&s._scheme==this._scheme?"relative or authority":this._isRelative?"authority first slash":"scheme data"}break;case"scheme data":"?"==g?(this._query="?",d="query"):"#"==g?(this._fragment="#",d="fragment"):f!=g&&" "!=g&&"\n"!=g&&"\r"!=g&&(this._schemeData+=o(g));break;case"no scheme":if(s&&t(s._scheme)){d="relative";continue}c("Missing scheme."),n.call(this);break;case"relative or authority":if("/"!=g||"/"!=e[u+1]){c("Expected /, got: "+g),d="relative";continue}d="authority ignore slashes";break;case"relative":if(this._isRelative=!0,"file"!=this._scheme&&(this._scheme=s._scheme),f==g){this._host=s._host,this._port=s._port,this._path=s._path.slice(),this._query=s._query,this._username=s._username,this._password=s._password;break e}if("/"==g||"\\"==g)"\\"==g&&c("\\ is an invalid code point."),d="relative slash";else if("?"==g)this._host=s._host,this._port=s._port,this._path=s._path.slice(),this._query="?",this._username=s._username,this._password=s._password,d="query";else{if("#"!=g){var y=e[u+1],E=e[u+2];("file"!=this._scheme||!m.test(g)||":"!=y&&"|"!=y||f!=E&&"/"!=E&&"\\"!=E&&"?"!=E&&"#"!=E)&&(this._host=s._host,this._port=s._port,this._username=s._username,this._password=s._password,this._path=s._path.slice(),this._path.pop()),d="relative path";continue}this._host=s._host,this._port=s._port,this._path=s._path.slice(),this._query=s._query,this._fragment="#",this._username=s._username,this._password=s._password,d="fragment"}break;case"relative slash":if("/"!=g&&"\\"!=g){"file"!=this._scheme&&(this._host=s._host,this._port=s._port,this._username=s._username,this._password=s._password),d="relative path";continue}"\\"==g&&c("\\ is an invalid code point."),d="file"==this._scheme?"file host":"authority ignore slashes";break;case"authority first slash":if("/"!=g){c("Expected '/', got: "+g),d="authority ignore slashes";continue}d="authority second slash";break;case"authority second slash":if(d="authority ignore slashes","/"!=g){c("Expected '/', got: "+g);continue}break;case"authority ignore slashes":if("/"!=g&&"\\"!=g){d="authority";continue}c("Expected authority, got: "+g);break;case"authority":if("@"==g){_&&(c("@ already seen."),l+="%40"),_=!0;for(var L=0;L>>0)+(t++ +"__")};n.prototype={set:function(t,n){var r=t[this.name];return r&&r[0]===t?r[1]=n:e(t,this.name,{value:[t,n],writable:!0}),this},get:function(e){var t;return(t=e[this.name])&&t[0]===e?t[1]:void 0},"delete":function(e){var t=e[this.name];return t&&t[0]===e?(t[0]=t[1]=void 0,!0):!1},has:function(e){var t=e[this.name];return t?t[0]===e:!1}},window.WeakMap=n}(),function(e){function t(e){g.push(e),b||(b=!0,m(r))}function n(e){return window.ShadowDOMPolyfill&&window.ShadowDOMPolyfill.wrapIfNeeded(e)||e}function r(){b=!1;var e=g;g=[],e.sort(function(e,t){return e.uid_-t.uid_});var t=!1;e.forEach(function(e){var n=e.takeRecords();o(e),n.length&&(e.callback_(n,e),t=!0)}),t&&r()}function o(e){e.nodes_.forEach(function(t){var n=v.get(t);n&&n.forEach(function(t){t.observer===e&&t.removeTransientObservers()})})}function i(e,t){for(var n=e;n;n=n.parentNode){var r=v.get(n);if(r)for(var o=0;o0){var o=n[r-1],i=p(o,e);if(i)return void(n[r-1]=i)}else t(this.observer);n[r]=e},addListeners:function(){this.addListeners_(this.target)},addListeners_:function(e){var t=this.options;t.attributes&&e.addEventListener("DOMAttrModified",this,!0),t.characterData&&e.addEventListener("DOMCharacterDataModified",this,!0),t.childList&&e.addEventListener("DOMNodeInserted",this,!0),(t.childList||t.subtree)&&e.addEventListener("DOMNodeRemoved",this,!0)},removeListeners:function(){this.removeListeners_(this.target)},removeListeners_:function(e){var t=this.options;t.attributes&&e.removeEventListener("DOMAttrModified",this,!0),t.characterData&&e.removeEventListener("DOMCharacterDataModified",this,!0),t.childList&&e.removeEventListener("DOMNodeInserted",this,!0),(t.childList||t.subtree)&&e.removeEventListener("DOMNodeRemoved",this,!0)},addTransientObserver:function(e){if(e!==this.target){this.addListeners_(e),this.transientObservedNodes.push(e);var t=v.get(e);t||v.set(e,t=[]),t.push(this)}},removeTransientObservers:function(){var e=this.transientObservedNodes;this.transientObservedNodes=[],e.forEach(function(e){this.removeListeners_(e);for(var t=v.get(e),n=0;np&&(h=s[p]);p++)a(h)?(c++,n()):(h.addEventListener("load",r),h.addEventListener("error",i));else n()}function a(e){return l?e.__loaded||e["import"]&&"loading"!==e["import"].readyState:e.__importParsed}function s(e){for(var t,n=0,r=e.length;r>n&&(t=e[n]);n++)c(t)&&d(t)}function c(e){return"link"===e.localName&&"import"===e.rel}function d(e){var t=e["import"];t?o({target:e}):(e.addEventListener("load",o),e.addEventListener("error",o))}var u="import",l=Boolean(u in document.createElement("link")),h=Boolean(window.ShadowDOMPolyfill),p=function(e){return h?window.ShadowDOMPolyfill.wrapIfNeeded(e):e},f=p(document),m={get:function(){var e=window.HTMLImports.currentScript||document.currentScript||("complete"!==document.readyState?document.scripts[document.scripts.length-1]:null);return p(e)},configurable:!0};Object.defineProperty(document,"_currentScript",m),Object.defineProperty(f,"_currentScript",m);var v=/Trident/.test(navigator.userAgent),_=v?"complete":"interactive",w="readystatechange";l&&(new MutationObserver(function(e){for(var t,n=0,r=e.length;r>n&&(t=e[n]);n++)t.addedNodes&&s(t.addedNodes)}).observe(document.head,{childList:!0}),function(){if("loading"===document.readyState)for(var e,t=document.querySelectorAll("link[rel=import]"),n=0,r=t.length;r>n&&(e=t[n]);n++)d(e)}()),t(function(e){window.HTMLImports.ready=!0,window.HTMLImports.readyTime=(new Date).getTime();var t=f.createEvent("CustomEvent");t.initCustomEvent("HTMLImportsLoaded",!0,!0,e),f.dispatchEvent(t)}),e.IMPORT_LINK_TYPE=u,e.useNative=l,e.rootDocument=f,e.whenReady=t,e.isIE=v}(window.HTMLImports),function(e){var t=[],n=function(e){t.push(e)},r=function(){t.forEach(function(t){t(e)})};e.addModule=n,e.initializeModules=r}(window.HTMLImports),window.HTMLImports.addModule(function(e){var t=/(url\()([^)]*)(\))/g,n=/(@import[\s]+(?!url\())([^;]*)(;)/g,r={resolveUrlsInStyle:function(e,t){var n=e.ownerDocument,r=n.createElement("a");return e.textContent=this.resolveUrlsInCssText(e.textContent,t,r),e},resolveUrlsInCssText:function(e,r,o){var i=this.replaceUrls(e,o,r,t);return i=this.replaceUrls(i,o,r,n)},replaceUrls:function(e,t,n,r){return e.replace(r,function(e,r,o,i){var a=o.replace(/["']/g,"");return n&&(a=new URL(a,n).href),t.href=a,a=t.href,r+"'"+a+"'"+i})}};e.path=r}),window.HTMLImports.addModule(function(e){var t={async:!0,ok:function(e){return e.status>=200&&e.status<300||304===e.status||0===e.status},load:function(n,r,o){var i=new XMLHttpRequest;return(e.flags.debug||e.flags.bust)&&(n+="?"+Math.random()),i.open("GET",n,t.async),i.addEventListener("readystatechange",function(e){if(4===i.readyState){var n=i.getResponseHeader("Location"),a=null;if(n)var a="/"===n.substr(0,1)?location.origin+n:n;r.call(o,!t.ok(i)&&i,i.response||i.responseText,a)}}),i.send(),i},loadDocument:function(e,t,n){this.load(e,t,n).responseType="document"}};e.xhr=t}),window.HTMLImports.addModule(function(e){var t=e.xhr,n=e.flags,r=function(e,t){this.cache={},this.onload=e,this.oncomplete=t,this.inflight=0,this.pending={}};r.prototype={addNodes:function(e){this.inflight+=e.length;for(var t,n=0,r=e.length;r>n&&(t=e[n]);n++)this.require(t);this.checkDone()},addNode:function(e){this.inflight++,this.require(e),this.checkDone()},require:function(e){var t=e.src||e.href;e.__nodeUrl=t,this.dedupe(t,e)||this.fetch(t,e)},dedupe:function(e,t){if(this.pending[e])return this.pending[e].push(t),!0;return this.cache[e]?(this.onload(e,t,this.cache[e]),this.tail(),!0):(this.pending[e]=[t],!1)},fetch:function(e,r){if(n.load&&console.log("fetch",e,r),e)if(e.match(/^data:/)){var o=e.split(","),i=o[0],a=o[1];a=i.indexOf(";base64")>-1?atob(a):decodeURIComponent(a),setTimeout(function(){this.receive(e,r,null,a)}.bind(this),0)}else{var s=function(t,n,o){this.receive(e,r,t,n,o)}.bind(this);t.load(e,s)}else setTimeout(function(){this.receive(e,r,{error:"href must be specified"},null)}.bind(this),0)},receive:function(e,t,n,r,o){this.cache[e]=r;for(var i,a=this.pending[e],s=0,c=a.length;c>s&&(i=a[s]);s++)this.onload(e,i,r,n,o),this.tail();this.pending[e]=null},tail:function(){--this.inflight,this.checkDone()},checkDone:function(){this.inflight||this.oncomplete()}},e.Loader=r}),window.HTMLImports.addModule(function(e){var t=function(e){this.addCallback=e,this.mo=new MutationObserver(this.handler.bind(this))};t.prototype={handler:function(e){for(var t,n=0,r=e.length;r>n&&(t=e[n]);n++)"childList"===t.type&&t.addedNodes.length&&this.addedNodes(t.addedNodes)},addedNodes:function(e){this.addCallback&&this.addCallback(e);for(var t,n=0,r=e.length;r>n&&(t=e[n]);n++)t.children&&t.children.length&&this.addedNodes(t.children)},observe:function(e){this.mo.observe(e,{childList:!0,subtree:!0})}},e.Observer=t}),window.HTMLImports.addModule(function(e){function t(e){return"link"===e.localName&&e.rel===u}function n(e){var t=r(e);return"data:text/javascript;charset=utf-8,"+encodeURIComponent(t)}function r(e){return e.textContent+o(e)}function o(e){var t=e.ownerDocument;t.__importedScripts=t.__importedScripts||0;var n=e.ownerDocument.baseURI,r=t.__importedScripts?"-"+t.__importedScripts:"";return t.__importedScripts++,"\n//# sourceURL="+n+r+".js\n"}function i(e){var t=e.ownerDocument.createElement("style");return t.textContent=e.textContent,a.resolveUrlsInStyle(t),t}var a=e.path,s=e.rootDocument,c=e.flags,d=e.isIE,u=e.IMPORT_LINK_TYPE,l="link[rel="+u+"]",h={documentSelectors:l,importsSelectors:[l,"link[rel=stylesheet]","style","script:not([type])",'script[type="application/javascript"]','script[type="text/javascript"]'].join(","),map:{link:"parseLink",script:"parseScript",style:"parseStyle"},dynamicElements:[],parseNext:function(){var e=this.nextToParse();e&&this.parse(e)},parse:function(e){if(this.isParsed(e))return void(c.parse&&console.log("[%s] is already parsed",e.localName));var t=this[this.map[e.localName]];t&&(this.markParsing(e),t.call(this,e))},parseDynamic:function(e,t){this.dynamicElements.push(e),t||this.parseNext()},markParsing:function(e){c.parse&&console.log("parsing",e),this.parsingElement=e},markParsingComplete:function(e){e.__importParsed=!0,this.markDynamicParsingComplete(e),e.__importElement&&(e.__importElement.__importParsed=!0,this.markDynamicParsingComplete(e.__importElement)),this.parsingElement=null,c.parse&&console.log("completed",e)},markDynamicParsingComplete:function(e){var t=this.dynamicElements.indexOf(e);t>=0&&this.dynamicElements.splice(t,1)},parseImport:function(e){if(window.HTMLImports.__importsParsingHook&&window.HTMLImports.__importsParsingHook(e),e["import"]&&(e["import"].__importParsed=!0),this.markParsingComplete(e),e.dispatchEvent(e.__resource&&!e.__error?new CustomEvent("load",{bubbles:!1}):new CustomEvent("error",{bubbles:!1})),e.__pending)for(var t;e.__pending.length;)t=e.__pending.shift(),t&&t({target:e});this.parseNext()},parseLink:function(e){t(e)?this.parseImport(e):(e.href=e.href,this.parseGeneric(e))},parseStyle:function(e){var t=e;e=i(e),t.__appliedElement=e,e.__importElement=t,this.parseGeneric(e)},parseGeneric:function(e){this.trackElement(e),this.addElementToDocument(e)},rootImportForElement:function(e){for(var t=e;t.ownerDocument.__importLink;)t=t.ownerDocument.__importLink;return t},addElementToDocument:function(e){var t=this.rootImportForElement(e.__importElement||e);t.parentNode.insertBefore(e,t)},trackElement:function(e,t){var n=this,r=function(r){t&&t(r),n.markParsingComplete(e),n.parseNext()};if(e.addEventListener("load",r),e.addEventListener("error",r),d&&"style"===e.localName){var o=!1;if(-1==e.textContent.indexOf("@import"))o=!0;else if(e.sheet){o=!0;for(var i,a=e.sheet.cssRules,s=a?a.length:0,c=0;s>c&&(i=a[c]);c++)i.type===CSSRule.IMPORT_RULE&&(o=o&&Boolean(i.styleSheet))}o&&setTimeout(function(){e.dispatchEvent(new CustomEvent("load",{bubbles:!1}))})}},parseScript:function(t){var r=document.createElement("script");r.__importElement=t,r.src=t.src?t.src:n(t),e.currentScript=t,this.trackElement(r,function(t){r.parentNode.removeChild(r),e.currentScript=null}),this.addElementToDocument(r)},nextToParse:function(){return this._mayParse=[],!this.parsingElement&&(this.nextToParseInDoc(s)||this.nextToParseDynamic())},nextToParseInDoc:function(e,n){if(e&&this._mayParse.indexOf(e)<0){this._mayParse.push(e);for(var r,o=e.querySelectorAll(this.parseSelectorsForNode(e)),i=0,a=o.length;a>i&&(r=o[i]);i++)if(!this.isParsed(r))return this.hasResource(r)?t(r)?this.nextToParseInDoc(r["import"],r):r:void 0}return n},nextToParseDynamic:function(){return this.dynamicElements[0]},parseSelectorsForNode:function(e){var t=e.ownerDocument||e;return t===s?this.documentSelectors:this.importsSelectors},isParsed:function(e){return e.__importParsed},needsDynamicParsing:function(e){return this.dynamicElements.indexOf(e)>=0},hasResource:function(e){return t(e)&&void 0===e["import"]?!1:!0}};e.parser=h,e.IMPORT_SELECTOR=l}),window.HTMLImports.addModule(function(e){function t(e){return n(e,a)}function n(e,t){return"link"===e.localName&&e.getAttribute("rel")===t}function r(e){return!!Object.getOwnPropertyDescriptor(e,"baseURI")}function o(e,t){var n=document.implementation.createHTMLDocument(a);n._URL=t;var o=n.createElement("base");o.setAttribute("href",t),n.baseURI||r(n)||Object.defineProperty(n,"baseURI",{value:t});var i=n.createElement("meta");return i.setAttribute("charset","utf-8"),n.head.appendChild(i),n.head.appendChild(o),n.body.innerHTML=e,window.HTMLTemplateElement&&HTMLTemplateElement.bootstrap&&HTMLTemplateElement.bootstrap(n),n}var i=e.flags,a=e.IMPORT_LINK_TYPE,s=e.IMPORT_SELECTOR,c=e.rootDocument,d=e.Loader,u=e.Observer,l=e.parser,h={documents:{},documentPreloadSelectors:s,importsPreloadSelectors:[s].join(","),loadNode:function(e){p.addNode(e)},loadSubtree:function(e){var t=this.marshalNodes(e);p.addNodes(t)},marshalNodes:function(e){return e.querySelectorAll(this.loadSelectorsForNode(e))},loadSelectorsForNode:function(e){var t=e.ownerDocument||e;return t===c?this.documentPreloadSelectors:this.importsPreloadSelectors},loaded:function(e,n,r,a,s){if(i.load&&console.log("loaded",e,n),n.__resource=r,n.__error=a,t(n)){var c=this.documents[e];void 0===c&&(c=a?null:o(r,s||e),c&&(c.__importLink=n,this.bootDocument(c)),this.documents[e]=c),n["import"]=c}l.parseNext()},bootDocument:function(e){this.loadSubtree(e),this.observer.observe(e),l.parseNext()},loadedAll:function(){l.parseNext()}},p=new d(h.loaded.bind(h),h.loadedAll.bind(h));if(h.observer=new u,!document.baseURI){var f={get:function(){var e=document.querySelector("base");return e?e.href:window.location.href},configurable:!0};Object.defineProperty(document,"baseURI",f),Object.defineProperty(c,"baseURI",f)}e.importer=h,e.importLoader=p}),window.HTMLImports.addModule(function(e){var t=e.parser,n=e.importer,r={added:function(e){for(var r,o,i,a,s=0,c=e.length;c>s&&(a=e[s]);s++)r||(r=a.ownerDocument,o=t.isParsed(r)),i=this.shouldLoadNode(a),i&&n.loadNode(a),this.shouldParseNode(a)&&o&&t.parseDynamic(a,i)},shouldLoadNode:function(e){return 1===e.nodeType&&o.call(e,n.loadSelectorsForNode(e))},shouldParseNode:function(e){return 1===e.nodeType&&o.call(e,t.parseSelectorsForNode(e))}};n.observer.addCallback=r.added.bind(r);var o=HTMLElement.prototype.matches||HTMLElement.prototype.matchesSelector||HTMLElement.prototype.webkitMatchesSelector||HTMLElement.prototype.mozMatchesSelector||HTMLElement.prototype.msMatchesSelector}),function(e){function t(){window.HTMLImports.importer.bootDocument(o)}var n=e.initializeModules,r=e.isIE;if(!e.useNative){r&&"function"!=typeof window.CustomEvent&&(window.CustomEvent=function(e,t){t=t||{};var n=document.createEvent("CustomEvent");return n.initCustomEvent(e,Boolean(t.bubbles),Boolean(t.cancelable),t.detail),n.preventDefault=function(){Object.defineProperty(this,"defaultPrevented",{get:function(){return!0}})},n},window.CustomEvent.prototype=window.Event.prototype),n();var o=e.rootDocument;"complete"===document.readyState||"interactive"===document.readyState&&!window.attachEvent?t():document.addEventListener("DOMContentLoaded",t)}}(window.HTMLImports),window.CustomElements=window.CustomElements||{flags:{}},function(e){var t=e.flags,n=[],r=function(e){n.push(e)},o=function(){n.forEach(function(t){t(e)})};e.addModule=r,e.initializeModules=o,e.hasNative=Boolean(document.registerElement),e.useNative=!t.register&&e.hasNative&&!window.ShadowDOMPolyfill&&(!window.HTMLImports||window.HTMLImports.useNative)}(window.CustomElements),window.CustomElements.addModule(function(e){function t(e,t){n(e,function(e){return t(e)?!0:void r(e,t)}),r(e,t)}function n(e,t,r){var o=e.firstElementChild;if(!o)for(o=e.firstChild;o&&o.nodeType!==Node.ELEMENT_NODE;)o=o.nextSibling;for(;o;)t(o,r)!==!0&&n(o,t,r),o=o.nextElementSibling;return null}function r(e,n){for(var r=e.shadowRoot;r;)t(r,n),r=r.olderShadowRoot}function o(e,t){i(e,t,[])}function i(e,t,n){if(e=window.wrap(e),!(n.indexOf(e)>=0)){n.push(e);for(var r,o=e.querySelectorAll("link[rel="+a+"]"),s=0,c=o.length;c>s&&(r=o[s]);s++)r["import"]&&i(r["import"],t,n);t(e)}}var a=window.HTMLImports?window.HTMLImports.IMPORT_LINK_TYPE:"none";e.forDocumentTree=o,e.forSubtree=t}),window.CustomElements.addModule(function(e){function t(e){return n(e)||r(e)}function n(t){return e.upgrade(t)?!0:void s(t)}function r(e){g(e,function(e){return n(e)?!0:void 0})}function o(e){s(e),h(e)&&g(e,function(e){s(e)})}function i(e){M.push(e),L||(L=!0,setTimeout(a))}function a(){L=!1;for(var e,t=M,n=0,r=t.length;r>n&&(e=t[n]);n++)e();M=[]}function s(e){E?i(function(){c(e)}):c(e)}function c(e){e.__upgraded__&&(e.attachedCallback||e.detachedCallback)&&!e.__attached&&h(e)&&(e.__attached=!0,e.attachedCallback&&e.attachedCallback())}function d(e){u(e),g(e,function(e){u(e)})}function u(e){E?i(function(){l(e)}):l(e)}function l(e){e.__upgraded__&&(e.attachedCallback||e.detachedCallback)&&e.__attached&&!h(e)&&(e.__attached=!1,e.detachedCallback&&e.detachedCallback())}function h(e){for(var t=e,n=wrap(document);t;){if(t==n)return!0;t=t.parentNode||t.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&t.host}}function p(e){if(e.shadowRoot&&!e.shadowRoot.__watched){b.dom&&console.log("watching shadow-root for: ",e.localName);for(var t=e.shadowRoot;t;)v(t),t=t.olderShadowRoot}}function f(e){if(b.dom){var n=e[0];if(n&&"childList"===n.type&&n.addedNodes&&n.addedNodes){for(var r=n.addedNodes[0];r&&r!==document&&!r.host;)r=r.parentNode;var o=r&&(r.URL||r._URL||r.host&&r.host.localName)||"";o=o.split("/?").shift().split("/").pop()}console.group("mutations (%d) [%s]",e.length,o||"")}e.forEach(function(e){"childList"===e.type&&(T(e.addedNodes,function(e){e.localName&&t(e)}),T(e.removedNodes,function(e){e.localName&&d(e)}))}),b.dom&&console.groupEnd()}function m(e){for(e=window.wrap(e),e||(e=window.wrap(document));e.parentNode;)e=e.parentNode;var t=e.__observer;t&&(f(t.takeRecords()),a())}function v(e){if(!e.__observer){var t=new MutationObserver(f);t.observe(e,{childList:!0,subtree:!0}),e.__observer=t}}function _(e){e=window.wrap(e),b.dom&&console.group("upgradeDocument: ",e.baseURI.split("/").pop()),t(e),v(e),b.dom&&console.groupEnd()}function w(e){y(e,_)}var b=e.flags,g=e.forSubtree,y=e.forDocumentTree,E=!window.MutationObserver||window.MutationObserver===window.JsMutationObserver;e.hasPolyfillMutations=E;var L=!1,M=[],T=Array.prototype.forEach.call.bind(Array.prototype.forEach),N=Element.prototype.createShadowRoot;N&&(Element.prototype.createShadowRoot=function(){var e=N.call(this);return window.CustomElements.watchShadow(this),e}),e.watchShadow=p,e.upgradeDocumentTree=w,e.upgradeSubtree=r,e.upgradeAll=t,e.attachedNode=o,e.takeRecords=m}),window.CustomElements.addModule(function(e){function t(t){if(!t.__upgraded__&&t.nodeType===Node.ELEMENT_NODE){var r=t.getAttribute("is"),o=e.getRegisteredDefinition(r||t.localName);if(o){if(r&&o.tag==t.localName)return n(t,o);if(!r&&!o["extends"])return n(t,o)}}}function n(t,n){return a.upgrade&&console.group("upgrade:",t.localName),n.is&&t.setAttribute("is",n.is),r(t,n),t.__upgraded__=!0,i(t),e.attachedNode(t),e.upgradeSubtree(t),a.upgrade&&console.groupEnd(),t}function r(e,t){Object.__proto__?e.__proto__=t.prototype:(o(e,t.prototype,t["native"]),e.__proto__=t.prototype)}function o(e,t,n){for(var r={},o=t;o!==n&&o!==HTMLElement.prototype;){for(var i,a=Object.getOwnPropertyNames(o),s=0;i=a[s];s++)r[i]||(Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(o,i)),r[i]=1);o=Object.getPrototypeOf(o)}}function i(e){e.createdCallback&&e.createdCallback()}var a=e.flags;e.upgrade=t,e.upgradeWithDefinition=n,e.implementPrototype=r}),window.CustomElements.addModule(function(e){function t(t,r){var c=r||{};if(!t)throw new Error("document.registerElement: first argument `name` must not be empty");if(t.indexOf("-")<0)throw new Error("document.registerElement: first argument ('name') must contain a dash ('-'). Argument provided was '"+String(t)+"'.");if(o(t))throw new Error("Failed to execute 'registerElement' on 'Document': Registration failed for type '"+String(t)+"'. The type name is invalid.");if(d(t))throw new Error("DuplicateDefinitionError: a type with name '"+String(t)+"' is already registered");return c.prototype||(c.prototype=Object.create(HTMLElement.prototype)),c.__name=t.toLowerCase(),c.lifecycle=c.lifecycle||{},c.ancestry=i(c["extends"]),a(c),s(c),n(c.prototype),u(c.__name,c),c.ctor=l(c),c.ctor.prototype=c.prototype,c.prototype.constructor=c.ctor,e.ready&&_(document),c.ctor}function n(e){if(!e.setAttribute._polyfilled){var t=e.setAttribute;e.setAttribute=function(e,n){r.call(this,e,n,t)};var n=e.removeAttribute;e.removeAttribute=function(e){r.call(this,e,null,n); + +},e.setAttribute._polyfilled=!0}}function r(e,t,n){e=e.toLowerCase();var r=this.getAttribute(e);n.apply(this,arguments);var o=this.getAttribute(e);this.attributeChangedCallback&&o!==r&&this.attributeChangedCallback(e,r,o)}function o(e){for(var t=0;t=0&&g(r,HTMLElement),r)}function f(e,t){var n=e[t];e[t]=function(){var e=n.apply(this,arguments);return w(e),e}}var m,v=e.isIE11OrOlder,_=e.upgradeDocumentTree,w=e.upgradeAll,b=e.upgradeWithDefinition,g=e.implementPrototype,y=e.useNative,E=["annotation-xml","color-profile","font-face","font-face-src","font-face-uri","font-face-format","font-face-name","missing-glyph"],L={},M="http://www.w3.org/1999/xhtml",T=document.createElement.bind(document),N=document.createElementNS.bind(document);m=Object.__proto__||y?function(e,t){return e instanceof t}:function(e,t){for(var n=e;n;){if(n===t.prototype)return!0;n=n.__proto__}return!1},f(Node.prototype,"cloneNode"),f(document,"importNode"),v&&!function(){var e=document.importNode;document.importNode=function(){var t=e.apply(document,arguments);if(t.nodeType==t.DOCUMENT_FRAGMENT_NODE){var n=document.createDocumentFragment();return n.appendChild(t),n}return t}}(),document.registerElement=t,document.createElement=p,document.createElementNS=h,e.registry=L,e["instanceof"]=m,e.reservedTagList=E,e.getRegisteredDefinition=d,document.register=document.registerElement}),function(e){function t(){a(window.wrap(document)),window.HTMLImports&&(window.HTMLImports.__importsParsingHook=function(e){a(wrap(e["import"]))}),window.CustomElements.ready=!0,setTimeout(function(){window.CustomElements.readyTime=Date.now(),window.HTMLImports&&(window.CustomElements.elapsed=window.CustomElements.readyTime-window.HTMLImports.readyTime),document.dispatchEvent(new CustomEvent("WebComponentsReady",{bubbles:!0}))})}var n=e.useNative,r=e.initializeModules,o=/Trident/.test(navigator.userAgent);if(n){var i=function(){};e.watchShadow=i,e.upgrade=i,e.upgradeAll=i,e.upgradeDocumentTree=i,e.upgradeSubtree=i,e.takeRecords=i,e["instanceof"]=function(e,t){return e instanceof t}}else r();var a=e.upgradeDocumentTree;if(window.wrap||(window.ShadowDOMPolyfill?(window.wrap=window.ShadowDOMPolyfill.wrapIfNeeded,window.unwrap=window.ShadowDOMPolyfill.unwrapIfNeeded):window.wrap=window.unwrap=function(e){return e}),o&&"function"!=typeof window.CustomEvent&&(window.CustomEvent=function(e,t){t=t||{};var n=document.createEvent("CustomEvent");return n.initCustomEvent(e,Boolean(t.bubbles),Boolean(t.cancelable),t.detail),n.preventDefault=function(){Object.defineProperty(this,"defaultPrevented",{get:function(){return!0}})},n},window.CustomEvent.prototype=window.Event.prototype),"complete"===document.readyState||e.flags.eager)t();else if("interactive"!==document.readyState||window.attachEvent||window.HTMLImports&&!window.HTMLImports.ready){var s=window.HTMLImports&&!window.HTMLImports.ready?"HTMLImportsLoaded":"DOMContentLoaded";window.addEventListener(s,t)}else t();e.isIE11OrOlder=o}(window.CustomElements),"undefined"==typeof HTMLTemplateElement&&!function(){var e="template";HTMLTemplateElement=function(){},HTMLTemplateElement.prototype=Object.create(HTMLElement.prototype),HTMLTemplateElement.decorate=function(e){e.content||(e.content=e.ownerDocument.createDocumentFragment());for(var t;t=e.firstChild;)e.content.appendChild(t)},HTMLTemplateElement.bootstrap=function(t){for(var n,r=t.querySelectorAll(e),o=0,i=r.length;i>o&&(n=r[o]);o++)HTMLTemplateElement.decorate(n)},window.addEventListener("DOMContentLoaded",function(){HTMLTemplateElement.bootstrap(document)});var t=document.createElement;document.createElement=function(){"use strict";var e=t.apply(document,arguments);return"template"==e.localName&&HTMLTemplateElement.decorate(e),e}}(),function(e){var t=document.createElement("style");t.textContent="body {transition: opacity ease-in 0.2s; } \nbody[unresolved] {opacity: 0; display: block; overflow: hidden; position: relative; } \n";var n=document.querySelector("head");n.insertBefore(t,n.firstChild)}(window.WebComponents); \ No newline at end of file diff --git a/static/bower_components/webcomponentsjs/webcomponents.js b/static/bower_components/webcomponentsjs/webcomponents.js new file mode 100644 index 0000000..6d71541 --- /dev/null +++ b/static/bower_components/webcomponentsjs/webcomponents.js @@ -0,0 +1,7126 @@ +/** + * @license + * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt + */ +// @version 0.7.5 +window.WebComponents = window.WebComponents || {}; + +(function(scope) { + var flags = scope.flags || {}; + var file = "webcomponents.js"; + var script = document.querySelector('script[src*="' + file + '"]'); + if (!flags.noOpts) { + location.search.slice(1).split("&").forEach(function(option) { + var parts = option.split("="); + var match; + if (parts[0] && (match = parts[0].match(/wc-(.+)/))) { + flags[match[1]] = parts[1] || true; + } + }); + if (script) { + for (var i = 0, a; a = script.attributes[i]; i++) { + if (a.name !== "src") { + flags[a.name] = a.value || true; + } + } + } + if (flags.log && flags.log.split) { + var parts = flags.log.split(","); + flags.log = {}; + parts.forEach(function(f) { + flags.log[f] = true; + }); + } else { + flags.log = {}; + } + } + flags.shadow = flags.shadow || flags.shadowdom || flags.polyfill; + if (flags.shadow === "native") { + flags.shadow = false; + } else { + flags.shadow = flags.shadow || !HTMLElement.prototype.createShadowRoot; + } + if (flags.register) { + window.CustomElements = window.CustomElements || { + flags: {} + }; + window.CustomElements.flags.register = flags.register; + } + scope.flags = flags; +})(WebComponents); + +if (WebComponents.flags.shadow) { + if (typeof WeakMap === "undefined") { + (function() { + var defineProperty = Object.defineProperty; + var counter = Date.now() % 1e9; + var WeakMap = function() { + this.name = "__st" + (Math.random() * 1e9 >>> 0) + (counter++ + "__"); + }; + WeakMap.prototype = { + set: function(key, value) { + var entry = key[this.name]; + if (entry && entry[0] === key) entry[1] = value; else defineProperty(key, this.name, { + value: [ key, value ], + writable: true + }); + return this; + }, + get: function(key) { + var entry; + return (entry = key[this.name]) && entry[0] === key ? entry[1] : undefined; + }, + "delete": function(key) { + var entry = key[this.name]; + if (!entry || entry[0] !== key) return false; + entry[0] = entry[1] = undefined; + return true; + }, + has: function(key) { + var entry = key[this.name]; + if (!entry) return false; + return entry[0] === key; + } + }; + window.WeakMap = WeakMap; + })(); + } + window.ShadowDOMPolyfill = {}; + (function(scope) { + "use strict"; + var constructorTable = new WeakMap(); + var nativePrototypeTable = new WeakMap(); + var wrappers = Object.create(null); + function detectEval() { + if (typeof chrome !== "undefined" && chrome.app && chrome.app.runtime) { + return false; + } + if (navigator.getDeviceStorage) { + return false; + } + try { + var f = new Function("return true;"); + return f(); + } catch (ex) { + return false; + } + } + var hasEval = detectEval(); + function assert(b) { + if (!b) throw new Error("Assertion failed"); + } + var defineProperty = Object.defineProperty; + var getOwnPropertyNames = Object.getOwnPropertyNames; + var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + function mixin(to, from) { + var names = getOwnPropertyNames(from); + for (var i = 0; i < names.length; i++) { + var name = names[i]; + defineProperty(to, name, getOwnPropertyDescriptor(from, name)); + } + return to; + } + function mixinStatics(to, from) { + var names = getOwnPropertyNames(from); + for (var i = 0; i < names.length; i++) { + var name = names[i]; + switch (name) { + case "arguments": + case "caller": + case "length": + case "name": + case "prototype": + case "toString": + continue; + } + defineProperty(to, name, getOwnPropertyDescriptor(from, name)); + } + return to; + } + function oneOf(object, propertyNames) { + for (var i = 0; i < propertyNames.length; i++) { + if (propertyNames[i] in object) return propertyNames[i]; + } + } + var nonEnumerableDataDescriptor = { + value: undefined, + configurable: true, + enumerable: false, + writable: true + }; + function defineNonEnumerableDataProperty(object, name, value) { + nonEnumerableDataDescriptor.value = value; + defineProperty(object, name, nonEnumerableDataDescriptor); + } + getOwnPropertyNames(window); + function getWrapperConstructor(node, opt_instance) { + var nativePrototype = node.__proto__ || Object.getPrototypeOf(node); + if (isFirefox) { + try { + getOwnPropertyNames(nativePrototype); + } catch (error) { + nativePrototype = nativePrototype.__proto__; + } + } + var wrapperConstructor = constructorTable.get(nativePrototype); + if (wrapperConstructor) return wrapperConstructor; + var parentWrapperConstructor = getWrapperConstructor(nativePrototype); + var GeneratedWrapper = createWrapperConstructor(parentWrapperConstructor); + registerInternal(nativePrototype, GeneratedWrapper, opt_instance); + return GeneratedWrapper; + } + function addForwardingProperties(nativePrototype, wrapperPrototype) { + installProperty(nativePrototype, wrapperPrototype, true); + } + function registerInstanceProperties(wrapperPrototype, instanceObject) { + installProperty(instanceObject, wrapperPrototype, false); + } + var isFirefox = /Firefox/.test(navigator.userAgent); + var dummyDescriptor = { + get: function() {}, + set: function(v) {}, + configurable: true, + enumerable: true + }; + function isEventHandlerName(name) { + return /^on[a-z]+$/.test(name); + } + function isIdentifierName(name) { + return /^[a-zA-Z_$][a-zA-Z_$0-9]*$/.test(name); + } + function getGetter(name) { + return hasEval && isIdentifierName(name) ? new Function("return this.__impl4cf1e782hg__." + name) : function() { + return this.__impl4cf1e782hg__[name]; + }; + } + function getSetter(name) { + return hasEval && isIdentifierName(name) ? new Function("v", "this.__impl4cf1e782hg__." + name + " = v") : function(v) { + this.__impl4cf1e782hg__[name] = v; + }; + } + function getMethod(name) { + return hasEval && isIdentifierName(name) ? new Function("return this.__impl4cf1e782hg__." + name + ".apply(this.__impl4cf1e782hg__, arguments)") : function() { + return this.__impl4cf1e782hg__[name].apply(this.__impl4cf1e782hg__, arguments); + }; + } + function getDescriptor(source, name) { + try { + return Object.getOwnPropertyDescriptor(source, name); + } catch (ex) { + return dummyDescriptor; + } + } + var isBrokenSafari = function() { + var descr = Object.getOwnPropertyDescriptor(Node.prototype, "nodeType"); + return descr && !descr.get && !descr.set; + }(); + function installProperty(source, target, allowMethod, opt_blacklist) { + var names = getOwnPropertyNames(source); + for (var i = 0; i < names.length; i++) { + var name = names[i]; + if (name === "polymerBlackList_") continue; + if (name in target) continue; + if (source.polymerBlackList_ && source.polymerBlackList_[name]) continue; + if (isFirefox) { + source.__lookupGetter__(name); + } + var descriptor = getDescriptor(source, name); + var getter, setter; + if (typeof descriptor.value === "function") { + if (allowMethod) { + target[name] = getMethod(name); + } + continue; + } + var isEvent = isEventHandlerName(name); + if (isEvent) getter = scope.getEventHandlerGetter(name); else getter = getGetter(name); + if (descriptor.writable || descriptor.set || isBrokenSafari) { + if (isEvent) setter = scope.getEventHandlerSetter(name); else setter = getSetter(name); + } + var configurable = isBrokenSafari || descriptor.configurable; + defineProperty(target, name, { + get: getter, + set: setter, + configurable: configurable, + enumerable: descriptor.enumerable + }); + } + } + function register(nativeConstructor, wrapperConstructor, opt_instance) { + if (nativeConstructor == null) { + return; + } + var nativePrototype = nativeConstructor.prototype; + registerInternal(nativePrototype, wrapperConstructor, opt_instance); + mixinStatics(wrapperConstructor, nativeConstructor); + } + function registerInternal(nativePrototype, wrapperConstructor, opt_instance) { + var wrapperPrototype = wrapperConstructor.prototype; + assert(constructorTable.get(nativePrototype) === undefined); + constructorTable.set(nativePrototype, wrapperConstructor); + nativePrototypeTable.set(wrapperPrototype, nativePrototype); + addForwardingProperties(nativePrototype, wrapperPrototype); + if (opt_instance) registerInstanceProperties(wrapperPrototype, opt_instance); + defineNonEnumerableDataProperty(wrapperPrototype, "constructor", wrapperConstructor); + wrapperConstructor.prototype = wrapperPrototype; + } + function isWrapperFor(wrapperConstructor, nativeConstructor) { + return constructorTable.get(nativeConstructor.prototype) === wrapperConstructor; + } + function registerObject(object) { + var nativePrototype = Object.getPrototypeOf(object); + var superWrapperConstructor = getWrapperConstructor(nativePrototype); + var GeneratedWrapper = createWrapperConstructor(superWrapperConstructor); + registerInternal(nativePrototype, GeneratedWrapper, object); + return GeneratedWrapper; + } + function createWrapperConstructor(superWrapperConstructor) { + function GeneratedWrapper(node) { + superWrapperConstructor.call(this, node); + } + var p = Object.create(superWrapperConstructor.prototype); + p.constructor = GeneratedWrapper; + GeneratedWrapper.prototype = p; + return GeneratedWrapper; + } + function isWrapper(object) { + return object && object.__impl4cf1e782hg__; + } + function isNative(object) { + return !isWrapper(object); + } + function wrap(impl) { + if (impl === null) return null; + assert(isNative(impl)); + var wrapper = impl.__wrapper8e3dd93a60__; + if (wrapper != null) { + return wrapper; + } + return impl.__wrapper8e3dd93a60__ = new (getWrapperConstructor(impl, impl))(impl); + } + function unwrap(wrapper) { + if (wrapper === null) return null; + assert(isWrapper(wrapper)); + return wrapper.__impl4cf1e782hg__; + } + function unsafeUnwrap(wrapper) { + return wrapper.__impl4cf1e782hg__; + } + function setWrapper(impl, wrapper) { + wrapper.__impl4cf1e782hg__ = impl; + impl.__wrapper8e3dd93a60__ = wrapper; + } + function unwrapIfNeeded(object) { + return object && isWrapper(object) ? unwrap(object) : object; + } + function wrapIfNeeded(object) { + return object && !isWrapper(object) ? wrap(object) : object; + } + function rewrap(node, wrapper) { + if (wrapper === null) return; + assert(isNative(node)); + assert(wrapper === undefined || isWrapper(wrapper)); + node.__wrapper8e3dd93a60__ = wrapper; + } + var getterDescriptor = { + get: undefined, + configurable: true, + enumerable: true + }; + function defineGetter(constructor, name, getter) { + getterDescriptor.get = getter; + defineProperty(constructor.prototype, name, getterDescriptor); + } + function defineWrapGetter(constructor, name) { + defineGetter(constructor, name, function() { + return wrap(this.__impl4cf1e782hg__[name]); + }); + } + function forwardMethodsToWrapper(constructors, names) { + constructors.forEach(function(constructor) { + names.forEach(function(name) { + constructor.prototype[name] = function() { + var w = wrapIfNeeded(this); + return w[name].apply(w, arguments); + }; + }); + }); + } + scope.assert = assert; + scope.constructorTable = constructorTable; + scope.defineGetter = defineGetter; + scope.defineWrapGetter = defineWrapGetter; + scope.forwardMethodsToWrapper = forwardMethodsToWrapper; + scope.isIdentifierName = isIdentifierName; + scope.isWrapper = isWrapper; + scope.isWrapperFor = isWrapperFor; + scope.mixin = mixin; + scope.nativePrototypeTable = nativePrototypeTable; + scope.oneOf = oneOf; + scope.registerObject = registerObject; + scope.registerWrapper = register; + scope.rewrap = rewrap; + scope.setWrapper = setWrapper; + scope.unsafeUnwrap = unsafeUnwrap; + scope.unwrap = unwrap; + scope.unwrapIfNeeded = unwrapIfNeeded; + scope.wrap = wrap; + scope.wrapIfNeeded = wrapIfNeeded; + scope.wrappers = wrappers; + })(window.ShadowDOMPolyfill); + (function(scope) { + "use strict"; + function newSplice(index, removed, addedCount) { + return { + index: index, + removed: removed, + addedCount: addedCount + }; + } + var EDIT_LEAVE = 0; + var EDIT_UPDATE = 1; + var EDIT_ADD = 2; + var EDIT_DELETE = 3; + function ArraySplice() {} + ArraySplice.prototype = { + calcEditDistances: function(current, currentStart, currentEnd, old, oldStart, oldEnd) { + var rowCount = oldEnd - oldStart + 1; + var columnCount = currentEnd - currentStart + 1; + var distances = new Array(rowCount); + for (var i = 0; i < rowCount; i++) { + distances[i] = new Array(columnCount); + distances[i][0] = i; + } + for (var j = 0; j < columnCount; j++) distances[0][j] = j; + for (var i = 1; i < rowCount; i++) { + for (var j = 1; j < columnCount; j++) { + if (this.equals(current[currentStart + j - 1], old[oldStart + i - 1])) distances[i][j] = distances[i - 1][j - 1]; else { + var north = distances[i - 1][j] + 1; + var west = distances[i][j - 1] + 1; + distances[i][j] = north < west ? north : west; + } + } + } + return distances; + }, + spliceOperationsFromEditDistances: function(distances) { + var i = distances.length - 1; + var j = distances[0].length - 1; + var current = distances[i][j]; + var edits = []; + while (i > 0 || j > 0) { + if (i == 0) { + edits.push(EDIT_ADD); + j--; + continue; + } + if (j == 0) { + edits.push(EDIT_DELETE); + i--; + continue; + } + var northWest = distances[i - 1][j - 1]; + var west = distances[i - 1][j]; + var north = distances[i][j - 1]; + var min; + if (west < north) min = west < northWest ? west : northWest; else min = north < northWest ? north : northWest; + if (min == northWest) { + if (northWest == current) { + edits.push(EDIT_LEAVE); + } else { + edits.push(EDIT_UPDATE); + current = northWest; + } + i--; + j--; + } else if (min == west) { + edits.push(EDIT_DELETE); + i--; + current = west; + } else { + edits.push(EDIT_ADD); + j--; + current = north; + } + } + edits.reverse(); + return edits; + }, + calcSplices: function(current, currentStart, currentEnd, old, oldStart, oldEnd) { + var prefixCount = 0; + var suffixCount = 0; + var minLength = Math.min(currentEnd - currentStart, oldEnd - oldStart); + if (currentStart == 0 && oldStart == 0) prefixCount = this.sharedPrefix(current, old, minLength); + if (currentEnd == current.length && oldEnd == old.length) suffixCount = this.sharedSuffix(current, old, minLength - prefixCount); + currentStart += prefixCount; + oldStart += prefixCount; + currentEnd -= suffixCount; + oldEnd -= suffixCount; + if (currentEnd - currentStart == 0 && oldEnd - oldStart == 0) return []; + if (currentStart == currentEnd) { + var splice = newSplice(currentStart, [], 0); + while (oldStart < oldEnd) splice.removed.push(old[oldStart++]); + return [ splice ]; + } else if (oldStart == oldEnd) return [ newSplice(currentStart, [], currentEnd - currentStart) ]; + var ops = this.spliceOperationsFromEditDistances(this.calcEditDistances(current, currentStart, currentEnd, old, oldStart, oldEnd)); + var splice = undefined; + var splices = []; + var index = currentStart; + var oldIndex = oldStart; + for (var i = 0; i < ops.length; i++) { + switch (ops[i]) { + case EDIT_LEAVE: + if (splice) { + splices.push(splice); + splice = undefined; + } + index++; + oldIndex++; + break; + + case EDIT_UPDATE: + if (!splice) splice = newSplice(index, [], 0); + splice.addedCount++; + index++; + splice.removed.push(old[oldIndex]); + oldIndex++; + break; + + case EDIT_ADD: + if (!splice) splice = newSplice(index, [], 0); + splice.addedCount++; + index++; + break; + + case EDIT_DELETE: + if (!splice) splice = newSplice(index, [], 0); + splice.removed.push(old[oldIndex]); + oldIndex++; + break; + } + } + if (splice) { + splices.push(splice); + } + return splices; + }, + sharedPrefix: function(current, old, searchLength) { + for (var i = 0; i < searchLength; i++) if (!this.equals(current[i], old[i])) return i; + return searchLength; + }, + sharedSuffix: function(current, old, searchLength) { + var index1 = current.length; + var index2 = old.length; + var count = 0; + while (count < searchLength && this.equals(current[--index1], old[--index2])) count++; + return count; + }, + calculateSplices: function(current, previous) { + return this.calcSplices(current, 0, current.length, previous, 0, previous.length); + }, + equals: function(currentValue, previousValue) { + return currentValue === previousValue; + } + }; + scope.ArraySplice = ArraySplice; + })(window.ShadowDOMPolyfill); + (function(context) { + "use strict"; + var OriginalMutationObserver = window.MutationObserver; + var callbacks = []; + var pending = false; + var timerFunc; + function handle() { + pending = false; + var copies = callbacks.slice(0); + callbacks = []; + for (var i = 0; i < copies.length; i++) { + (0, copies[i])(); + } + } + if (OriginalMutationObserver) { + var counter = 1; + var observer = new OriginalMutationObserver(handle); + var textNode = document.createTextNode(counter); + observer.observe(textNode, { + characterData: true + }); + timerFunc = function() { + counter = (counter + 1) % 2; + textNode.data = counter; + }; + } else { + timerFunc = window.setTimeout; + } + function setEndOfMicrotask(func) { + callbacks.push(func); + if (pending) return; + pending = true; + timerFunc(handle, 0); + } + context.setEndOfMicrotask = setEndOfMicrotask; + })(window.ShadowDOMPolyfill); + (function(scope) { + "use strict"; + var setEndOfMicrotask = scope.setEndOfMicrotask; + var wrapIfNeeded = scope.wrapIfNeeded; + var wrappers = scope.wrappers; + var registrationsTable = new WeakMap(); + var globalMutationObservers = []; + var isScheduled = false; + function scheduleCallback(observer) { + if (observer.scheduled_) return; + observer.scheduled_ = true; + globalMutationObservers.push(observer); + if (isScheduled) return; + setEndOfMicrotask(notifyObservers); + isScheduled = true; + } + function notifyObservers() { + isScheduled = false; + while (globalMutationObservers.length) { + var notifyList = globalMutationObservers; + globalMutationObservers = []; + notifyList.sort(function(x, y) { + return x.uid_ - y.uid_; + }); + for (var i = 0; i < notifyList.length; i++) { + var mo = notifyList[i]; + mo.scheduled_ = false; + var queue = mo.takeRecords(); + removeTransientObserversFor(mo); + if (queue.length) { + mo.callback_(queue, mo); + } + } + } + } + function MutationRecord(type, target) { + this.type = type; + this.target = target; + this.addedNodes = new wrappers.NodeList(); + this.removedNodes = new wrappers.NodeList(); + this.previousSibling = null; + this.nextSibling = null; + this.attributeName = null; + this.attributeNamespace = null; + this.oldValue = null; + } + function registerTransientObservers(ancestor, node) { + for (;ancestor; ancestor = ancestor.parentNode) { + var registrations = registrationsTable.get(ancestor); + if (!registrations) continue; + for (var i = 0; i < registrations.length; i++) { + var registration = registrations[i]; + if (registration.options.subtree) registration.addTransientObserver(node); + } + } + } + function removeTransientObserversFor(observer) { + for (var i = 0; i < observer.nodes_.length; i++) { + var node = observer.nodes_[i]; + var registrations = registrationsTable.get(node); + if (!registrations) return; + for (var j = 0; j < registrations.length; j++) { + var registration = registrations[j]; + if (registration.observer === observer) registration.removeTransientObservers(); + } + } + } + function enqueueMutation(target, type, data) { + var interestedObservers = Object.create(null); + var associatedStrings = Object.create(null); + for (var node = target; node; node = node.parentNode) { + var registrations = registrationsTable.get(node); + if (!registrations) continue; + for (var j = 0; j < registrations.length; j++) { + var registration = registrations[j]; + var options = registration.options; + if (node !== target && !options.subtree) continue; + if (type === "attributes" && !options.attributes) continue; + if (type === "attributes" && options.attributeFilter && (data.namespace !== null || options.attributeFilter.indexOf(data.name) === -1)) { + continue; + } + if (type === "characterData" && !options.characterData) continue; + if (type === "childList" && !options.childList) continue; + var observer = registration.observer; + interestedObservers[observer.uid_] = observer; + if (type === "attributes" && options.attributeOldValue || type === "characterData" && options.characterDataOldValue) { + associatedStrings[observer.uid_] = data.oldValue; + } + } + } + for (var uid in interestedObservers) { + var observer = interestedObservers[uid]; + var record = new MutationRecord(type, target); + if ("name" in data && "namespace" in data) { + record.attributeName = data.name; + record.attributeNamespace = data.namespace; + } + if (data.addedNodes) record.addedNodes = data.addedNodes; + if (data.removedNodes) record.removedNodes = data.removedNodes; + if (data.previousSibling) record.previousSibling = data.previousSibling; + if (data.nextSibling) record.nextSibling = data.nextSibling; + if (associatedStrings[uid] !== undefined) record.oldValue = associatedStrings[uid]; + scheduleCallback(observer); + observer.records_.push(record); + } + } + var slice = Array.prototype.slice; + function MutationObserverOptions(options) { + this.childList = !!options.childList; + this.subtree = !!options.subtree; + if (!("attributes" in options) && ("attributeOldValue" in options || "attributeFilter" in options)) { + this.attributes = true; + } else { + this.attributes = !!options.attributes; + } + if ("characterDataOldValue" in options && !("characterData" in options)) this.characterData = true; else this.characterData = !!options.characterData; + if (!this.attributes && (options.attributeOldValue || "attributeFilter" in options) || !this.characterData && options.characterDataOldValue) { + throw new TypeError(); + } + this.characterData = !!options.characterData; + this.attributeOldValue = !!options.attributeOldValue; + this.characterDataOldValue = !!options.characterDataOldValue; + if ("attributeFilter" in options) { + if (options.attributeFilter == null || typeof options.attributeFilter !== "object") { + throw new TypeError(); + } + this.attributeFilter = slice.call(options.attributeFilter); + } else { + this.attributeFilter = null; + } + } + var uidCounter = 0; + function MutationObserver(callback) { + this.callback_ = callback; + this.nodes_ = []; + this.records_ = []; + this.uid_ = ++uidCounter; + this.scheduled_ = false; + } + MutationObserver.prototype = { + constructor: MutationObserver, + observe: function(target, options) { + target = wrapIfNeeded(target); + var newOptions = new MutationObserverOptions(options); + var registration; + var registrations = registrationsTable.get(target); + if (!registrations) registrationsTable.set(target, registrations = []); + for (var i = 0; i < registrations.length; i++) { + if (registrations[i].observer === this) { + registration = registrations[i]; + registration.removeTransientObservers(); + registration.options = newOptions; + } + } + if (!registration) { + registration = new Registration(this, target, newOptions); + registrations.push(registration); + this.nodes_.push(target); + } + }, + disconnect: function() { + this.nodes_.forEach(function(node) { + var registrations = registrationsTable.get(node); + for (var i = 0; i < registrations.length; i++) { + var registration = registrations[i]; + if (registration.observer === this) { + registrations.splice(i, 1); + break; + } + } + }, this); + this.records_ = []; + }, + takeRecords: function() { + var copyOfRecords = this.records_; + this.records_ = []; + return copyOfRecords; + } + }; + function Registration(observer, target, options) { + this.observer = observer; + this.target = target; + this.options = options; + this.transientObservedNodes = []; + } + Registration.prototype = { + addTransientObserver: function(node) { + if (node === this.target) return; + scheduleCallback(this.observer); + this.transientObservedNodes.push(node); + var registrations = registrationsTable.get(node); + if (!registrations) registrationsTable.set(node, registrations = []); + registrations.push(this); + }, + removeTransientObservers: function() { + var transientObservedNodes = this.transientObservedNodes; + this.transientObservedNodes = []; + for (var i = 0; i < transientObservedNodes.length; i++) { + var node = transientObservedNodes[i]; + var registrations = registrationsTable.get(node); + for (var j = 0; j < registrations.length; j++) { + if (registrations[j] === this) { + registrations.splice(j, 1); + break; + } + } + } + } + }; + scope.enqueueMutation = enqueueMutation; + scope.registerTransientObservers = registerTransientObservers; + scope.wrappers.MutationObserver = MutationObserver; + scope.wrappers.MutationRecord = MutationRecord; + })(window.ShadowDOMPolyfill); + (function(scope) { + "use strict"; + function TreeScope(root, parent) { + this.root = root; + this.parent = parent; + } + TreeScope.prototype = { + get renderer() { + if (this.root instanceof scope.wrappers.ShadowRoot) { + return scope.getRendererForHost(this.root.host); + } + return null; + }, + contains: function(treeScope) { + for (;treeScope; treeScope = treeScope.parent) { + if (treeScope === this) return true; + } + return false; + } + }; + function setTreeScope(node, treeScope) { + if (node.treeScope_ !== treeScope) { + node.treeScope_ = treeScope; + for (var sr = node.shadowRoot; sr; sr = sr.olderShadowRoot) { + sr.treeScope_.parent = treeScope; + } + for (var child = node.firstChild; child; child = child.nextSibling) { + setTreeScope(child, treeScope); + } + } + } + function getTreeScope(node) { + if (node instanceof scope.wrappers.Window) { + debugger; + } + if (node.treeScope_) return node.treeScope_; + var parent = node.parentNode; + var treeScope; + if (parent) treeScope = getTreeScope(parent); else treeScope = new TreeScope(node, null); + return node.treeScope_ = treeScope; + } + scope.TreeScope = TreeScope; + scope.getTreeScope = getTreeScope; + scope.setTreeScope = setTreeScope; + })(window.ShadowDOMPolyfill); + (function(scope) { + "use strict"; + var forwardMethodsToWrapper = scope.forwardMethodsToWrapper; + var getTreeScope = scope.getTreeScope; + var mixin = scope.mixin; + var registerWrapper = scope.registerWrapper; + var setWrapper = scope.setWrapper; + var unsafeUnwrap = scope.unsafeUnwrap; + var unwrap = scope.unwrap; + var wrap = scope.wrap; + var wrappers = scope.wrappers; + var wrappedFuns = new WeakMap(); + var listenersTable = new WeakMap(); + var handledEventsTable = new WeakMap(); + var currentlyDispatchingEvents = new WeakMap(); + var targetTable = new WeakMap(); + var currentTargetTable = new WeakMap(); + var relatedTargetTable = new WeakMap(); + var eventPhaseTable = new WeakMap(); + var stopPropagationTable = new WeakMap(); + var stopImmediatePropagationTable = new WeakMap(); + var eventHandlersTable = new WeakMap(); + var eventPathTable = new WeakMap(); + function isShadowRoot(node) { + return node instanceof wrappers.ShadowRoot; + } + function rootOfNode(node) { + return getTreeScope(node).root; + } + function getEventPath(node, event) { + var path = []; + var current = node; + path.push(current); + while (current) { + var destinationInsertionPoints = getDestinationInsertionPoints(current); + if (destinationInsertionPoints && destinationInsertionPoints.length > 0) { + for (var i = 0; i < destinationInsertionPoints.length; i++) { + var insertionPoint = destinationInsertionPoints[i]; + if (isShadowInsertionPoint(insertionPoint)) { + var shadowRoot = rootOfNode(insertionPoint); + var olderShadowRoot = shadowRoot.olderShadowRoot; + if (olderShadowRoot) path.push(olderShadowRoot); + } + path.push(insertionPoint); + } + current = destinationInsertionPoints[destinationInsertionPoints.length - 1]; + } else { + if (isShadowRoot(current)) { + if (inSameTree(node, current) && eventMustBeStopped(event)) { + break; + } + current = current.host; + path.push(current); + } else { + current = current.parentNode; + if (current) path.push(current); + } + } + } + return path; + } + function eventMustBeStopped(event) { + if (!event) return false; + switch (event.type) { + case "abort": + case "error": + case "select": + case "change": + case "load": + case "reset": + case "resize": + case "scroll": + case "selectstart": + return true; + } + return false; + } + function isShadowInsertionPoint(node) { + return node instanceof HTMLShadowElement; + } + function getDestinationInsertionPoints(node) { + return scope.getDestinationInsertionPoints(node); + } + function eventRetargetting(path, currentTarget) { + if (path.length === 0) return currentTarget; + if (currentTarget instanceof wrappers.Window) currentTarget = currentTarget.document; + var currentTargetTree = getTreeScope(currentTarget); + var originalTarget = path[0]; + var originalTargetTree = getTreeScope(originalTarget); + var relativeTargetTree = lowestCommonInclusiveAncestor(currentTargetTree, originalTargetTree); + for (var i = 0; i < path.length; i++) { + var node = path[i]; + if (getTreeScope(node) === relativeTargetTree) return node; + } + return path[path.length - 1]; + } + function getTreeScopeAncestors(treeScope) { + var ancestors = []; + for (;treeScope; treeScope = treeScope.parent) { + ancestors.push(treeScope); + } + return ancestors; + } + function lowestCommonInclusiveAncestor(tsA, tsB) { + var ancestorsA = getTreeScopeAncestors(tsA); + var ancestorsB = getTreeScopeAncestors(tsB); + var result = null; + while (ancestorsA.length > 0 && ancestorsB.length > 0) { + var a = ancestorsA.pop(); + var b = ancestorsB.pop(); + if (a === b) result = a; else break; + } + return result; + } + function getTreeScopeRoot(ts) { + if (!ts.parent) return ts; + return getTreeScopeRoot(ts.parent); + } + function relatedTargetResolution(event, currentTarget, relatedTarget) { + if (currentTarget instanceof wrappers.Window) currentTarget = currentTarget.document; + var currentTargetTree = getTreeScope(currentTarget); + var relatedTargetTree = getTreeScope(relatedTarget); + var relatedTargetEventPath = getEventPath(relatedTarget, event); + var lowestCommonAncestorTree; + var lowestCommonAncestorTree = lowestCommonInclusiveAncestor(currentTargetTree, relatedTargetTree); + if (!lowestCommonAncestorTree) lowestCommonAncestorTree = relatedTargetTree.root; + for (var commonAncestorTree = lowestCommonAncestorTree; commonAncestorTree; commonAncestorTree = commonAncestorTree.parent) { + var adjustedRelatedTarget; + for (var i = 0; i < relatedTargetEventPath.length; i++) { + var node = relatedTargetEventPath[i]; + if (getTreeScope(node) === commonAncestorTree) return node; + } + } + return null; + } + function inSameTree(a, b) { + return getTreeScope(a) === getTreeScope(b); + } + var NONE = 0; + var CAPTURING_PHASE = 1; + var AT_TARGET = 2; + var BUBBLING_PHASE = 3; + var pendingError; + function dispatchOriginalEvent(originalEvent) { + if (handledEventsTable.get(originalEvent)) return; + handledEventsTable.set(originalEvent, true); + dispatchEvent(wrap(originalEvent), wrap(originalEvent.target)); + if (pendingError) { + var err = pendingError; + pendingError = null; + throw err; + } + } + function isLoadLikeEvent(event) { + switch (event.type) { + case "load": + case "beforeunload": + case "unload": + return true; + } + return false; + } + function dispatchEvent(event, originalWrapperTarget) { + if (currentlyDispatchingEvents.get(event)) throw new Error("InvalidStateError"); + currentlyDispatchingEvents.set(event, true); + scope.renderAllPending(); + var eventPath; + var overrideTarget; + var win; + if (isLoadLikeEvent(event) && !event.bubbles) { + var doc = originalWrapperTarget; + if (doc instanceof wrappers.Document && (win = doc.defaultView)) { + overrideTarget = doc; + eventPath = []; + } + } + if (!eventPath) { + if (originalWrapperTarget instanceof wrappers.Window) { + win = originalWrapperTarget; + eventPath = []; + } else { + eventPath = getEventPath(originalWrapperTarget, event); + if (!isLoadLikeEvent(event)) { + var doc = eventPath[eventPath.length - 1]; + if (doc instanceof wrappers.Document) win = doc.defaultView; + } + } + } + eventPathTable.set(event, eventPath); + if (dispatchCapturing(event, eventPath, win, overrideTarget)) { + if (dispatchAtTarget(event, eventPath, win, overrideTarget)) { + dispatchBubbling(event, eventPath, win, overrideTarget); + } + } + eventPhaseTable.set(event, NONE); + currentTargetTable.delete(event, null); + currentlyDispatchingEvents.delete(event); + return event.defaultPrevented; + } + function dispatchCapturing(event, eventPath, win, overrideTarget) { + var phase = CAPTURING_PHASE; + if (win) { + if (!invoke(win, event, phase, eventPath, overrideTarget)) return false; + } + for (var i = eventPath.length - 1; i > 0; i--) { + if (!invoke(eventPath[i], event, phase, eventPath, overrideTarget)) return false; + } + return true; + } + function dispatchAtTarget(event, eventPath, win, overrideTarget) { + var phase = AT_TARGET; + var currentTarget = eventPath[0] || win; + return invoke(currentTarget, event, phase, eventPath, overrideTarget); + } + function dispatchBubbling(event, eventPath, win, overrideTarget) { + var phase = BUBBLING_PHASE; + for (var i = 1; i < eventPath.length; i++) { + if (!invoke(eventPath[i], event, phase, eventPath, overrideTarget)) return; + } + if (win && eventPath.length > 0) { + invoke(win, event, phase, eventPath, overrideTarget); + } + } + function invoke(currentTarget, event, phase, eventPath, overrideTarget) { + var listeners = listenersTable.get(currentTarget); + if (!listeners) return true; + var target = overrideTarget || eventRetargetting(eventPath, currentTarget); + if (target === currentTarget) { + if (phase === CAPTURING_PHASE) return true; + if (phase === BUBBLING_PHASE) phase = AT_TARGET; + } else if (phase === BUBBLING_PHASE && !event.bubbles) { + return true; + } + if ("relatedTarget" in event) { + var originalEvent = unwrap(event); + var unwrappedRelatedTarget = originalEvent.relatedTarget; + if (unwrappedRelatedTarget) { + if (unwrappedRelatedTarget instanceof Object && unwrappedRelatedTarget.addEventListener) { + var relatedTarget = wrap(unwrappedRelatedTarget); + var adjusted = relatedTargetResolution(event, currentTarget, relatedTarget); + if (adjusted === target) return true; + } else { + adjusted = null; + } + relatedTargetTable.set(event, adjusted); + } + } + eventPhaseTable.set(event, phase); + var type = event.type; + var anyRemoved = false; + targetTable.set(event, target); + currentTargetTable.set(event, currentTarget); + listeners.depth++; + for (var i = 0, len = listeners.length; i < len; i++) { + var listener = listeners[i]; + if (listener.removed) { + anyRemoved = true; + continue; + } + if (listener.type !== type || !listener.capture && phase === CAPTURING_PHASE || listener.capture && phase === BUBBLING_PHASE) { + continue; + } + try { + if (typeof listener.handler === "function") listener.handler.call(currentTarget, event); else listener.handler.handleEvent(event); + if (stopImmediatePropagationTable.get(event)) return false; + } catch (ex) { + if (!pendingError) pendingError = ex; + } + } + listeners.depth--; + if (anyRemoved && listeners.depth === 0) { + var copy = listeners.slice(); + listeners.length = 0; + for (var i = 0; i < copy.length; i++) { + if (!copy[i].removed) listeners.push(copy[i]); + } + } + return !stopPropagationTable.get(event); + } + function Listener(type, handler, capture) { + this.type = type; + this.handler = handler; + this.capture = Boolean(capture); + } + Listener.prototype = { + equals: function(that) { + return this.handler === that.handler && this.type === that.type && this.capture === that.capture; + }, + get removed() { + return this.handler === null; + }, + remove: function() { + this.handler = null; + } + }; + var OriginalEvent = window.Event; + OriginalEvent.prototype.polymerBlackList_ = { + returnValue: true, + keyLocation: true + }; + function Event(type, options) { + if (type instanceof OriginalEvent) { + var impl = type; + if (!OriginalBeforeUnloadEvent && impl.type === "beforeunload" && !(this instanceof BeforeUnloadEvent)) { + return new BeforeUnloadEvent(impl); + } + setWrapper(impl, this); + } else { + return wrap(constructEvent(OriginalEvent, "Event", type, options)); + } + } + Event.prototype = { + get target() { + return targetTable.get(this); + }, + get currentTarget() { + return currentTargetTable.get(this); + }, + get eventPhase() { + return eventPhaseTable.get(this); + }, + get path() { + var eventPath = eventPathTable.get(this); + if (!eventPath) return []; + return eventPath.slice(); + }, + stopPropagation: function() { + stopPropagationTable.set(this, true); + }, + stopImmediatePropagation: function() { + stopPropagationTable.set(this, true); + stopImmediatePropagationTable.set(this, true); + } + }; + registerWrapper(OriginalEvent, Event, document.createEvent("Event")); + function unwrapOptions(options) { + if (!options || !options.relatedTarget) return options; + return Object.create(options, { + relatedTarget: { + value: unwrap(options.relatedTarget) + } + }); + } + function registerGenericEvent(name, SuperEvent, prototype) { + var OriginalEvent = window[name]; + var GenericEvent = function(type, options) { + if (type instanceof OriginalEvent) setWrapper(type, this); else return wrap(constructEvent(OriginalEvent, name, type, options)); + }; + GenericEvent.prototype = Object.create(SuperEvent.prototype); + if (prototype) mixin(GenericEvent.prototype, prototype); + if (OriginalEvent) { + try { + registerWrapper(OriginalEvent, GenericEvent, new OriginalEvent("temp")); + } catch (ex) { + registerWrapper(OriginalEvent, GenericEvent, document.createEvent(name)); + } + } + return GenericEvent; + } + var UIEvent = registerGenericEvent("UIEvent", Event); + var CustomEvent = registerGenericEvent("CustomEvent", Event); + var relatedTargetProto = { + get relatedTarget() { + var relatedTarget = relatedTargetTable.get(this); + if (relatedTarget !== undefined) return relatedTarget; + return wrap(unwrap(this).relatedTarget); + } + }; + function getInitFunction(name, relatedTargetIndex) { + return function() { + arguments[relatedTargetIndex] = unwrap(arguments[relatedTargetIndex]); + var impl = unwrap(this); + impl[name].apply(impl, arguments); + }; + } + var mouseEventProto = mixin({ + initMouseEvent: getInitFunction("initMouseEvent", 14) + }, relatedTargetProto); + var focusEventProto = mixin({ + initFocusEvent: getInitFunction("initFocusEvent", 5) + }, relatedTargetProto); + var MouseEvent = registerGenericEvent("MouseEvent", UIEvent, mouseEventProto); + var FocusEvent = registerGenericEvent("FocusEvent", UIEvent, focusEventProto); + var defaultInitDicts = Object.create(null); + var supportsEventConstructors = function() { + try { + new window.FocusEvent("focus"); + } catch (ex) { + return false; + } + return true; + }(); + function constructEvent(OriginalEvent, name, type, options) { + if (supportsEventConstructors) return new OriginalEvent(type, unwrapOptions(options)); + var event = unwrap(document.createEvent(name)); + var defaultDict = defaultInitDicts[name]; + var args = [ type ]; + Object.keys(defaultDict).forEach(function(key) { + var v = options != null && key in options ? options[key] : defaultDict[key]; + if (key === "relatedTarget") v = unwrap(v); + args.push(v); + }); + event["init" + name].apply(event, args); + return event; + } + if (!supportsEventConstructors) { + var configureEventConstructor = function(name, initDict, superName) { + if (superName) { + var superDict = defaultInitDicts[superName]; + initDict = mixin(mixin({}, superDict), initDict); + } + defaultInitDicts[name] = initDict; + }; + configureEventConstructor("Event", { + bubbles: false, + cancelable: false + }); + configureEventConstructor("CustomEvent", { + detail: null + }, "Event"); + configureEventConstructor("UIEvent", { + view: null, + detail: 0 + }, "Event"); + configureEventConstructor("MouseEvent", { + screenX: 0, + screenY: 0, + clientX: 0, + clientY: 0, + ctrlKey: false, + altKey: false, + shiftKey: false, + metaKey: false, + button: 0, + relatedTarget: null + }, "UIEvent"); + configureEventConstructor("FocusEvent", { + relatedTarget: null + }, "UIEvent"); + } + var OriginalBeforeUnloadEvent = window.BeforeUnloadEvent; + function BeforeUnloadEvent(impl) { + Event.call(this, impl); + } + BeforeUnloadEvent.prototype = Object.create(Event.prototype); + mixin(BeforeUnloadEvent.prototype, { + get returnValue() { + return unsafeUnwrap(this).returnValue; + }, + set returnValue(v) { + unsafeUnwrap(this).returnValue = v; + } + }); + if (OriginalBeforeUnloadEvent) registerWrapper(OriginalBeforeUnloadEvent, BeforeUnloadEvent); + function isValidListener(fun) { + if (typeof fun === "function") return true; + return fun && fun.handleEvent; + } + function isMutationEvent(type) { + switch (type) { + case "DOMAttrModified": + case "DOMAttributeNameChanged": + case "DOMCharacterDataModified": + case "DOMElementNameChanged": + case "DOMNodeInserted": + case "DOMNodeInsertedIntoDocument": + case "DOMNodeRemoved": + case "DOMNodeRemovedFromDocument": + case "DOMSubtreeModified": + return true; + } + return false; + } + var OriginalEventTarget = window.EventTarget; + function EventTarget(impl) { + setWrapper(impl, this); + } + var methodNames = [ "addEventListener", "removeEventListener", "dispatchEvent" ]; + [ Node, Window ].forEach(function(constructor) { + var p = constructor.prototype; + methodNames.forEach(function(name) { + Object.defineProperty(p, name + "_", { + value: p[name] + }); + }); + }); + function getTargetToListenAt(wrapper) { + if (wrapper instanceof wrappers.ShadowRoot) wrapper = wrapper.host; + return unwrap(wrapper); + } + EventTarget.prototype = { + addEventListener: function(type, fun, capture) { + if (!isValidListener(fun) || isMutationEvent(type)) return; + var listener = new Listener(type, fun, capture); + var listeners = listenersTable.get(this); + if (!listeners) { + listeners = []; + listeners.depth = 0; + listenersTable.set(this, listeners); + } else { + for (var i = 0; i < listeners.length; i++) { + if (listener.equals(listeners[i])) return; + } + } + listeners.push(listener); + var target = getTargetToListenAt(this); + target.addEventListener_(type, dispatchOriginalEvent, true); + }, + removeEventListener: function(type, fun, capture) { + capture = Boolean(capture); + var listeners = listenersTable.get(this); + if (!listeners) return; + var count = 0, found = false; + for (var i = 0; i < listeners.length; i++) { + if (listeners[i].type === type && listeners[i].capture === capture) { + count++; + if (listeners[i].handler === fun) { + found = true; + listeners[i].remove(); + } + } + } + if (found && count === 1) { + var target = getTargetToListenAt(this); + target.removeEventListener_(type, dispatchOriginalEvent, true); + } + }, + dispatchEvent: function(event) { + var nativeEvent = unwrap(event); + var eventType = nativeEvent.type; + handledEventsTable.set(nativeEvent, false); + scope.renderAllPending(); + var tempListener; + if (!hasListenerInAncestors(this, eventType)) { + tempListener = function() {}; + this.addEventListener(eventType, tempListener, true); + } + try { + return unwrap(this).dispatchEvent_(nativeEvent); + } finally { + if (tempListener) this.removeEventListener(eventType, tempListener, true); + } + } + }; + function hasListener(node, type) { + var listeners = listenersTable.get(node); + if (listeners) { + for (var i = 0; i < listeners.length; i++) { + if (!listeners[i].removed && listeners[i].type === type) return true; + } + } + return false; + } + function hasListenerInAncestors(target, type) { + for (var node = unwrap(target); node; node = node.parentNode) { + if (hasListener(wrap(node), type)) return true; + } + return false; + } + if (OriginalEventTarget) registerWrapper(OriginalEventTarget, EventTarget); + function wrapEventTargetMethods(constructors) { + forwardMethodsToWrapper(constructors, methodNames); + } + var originalElementFromPoint = document.elementFromPoint; + function elementFromPoint(self, document, x, y) { + scope.renderAllPending(); + var element = wrap(originalElementFromPoint.call(unsafeUnwrap(document), x, y)); + if (!element) return null; + var path = getEventPath(element, null); + var idx = path.lastIndexOf(self); + if (idx == -1) return null; else path = path.slice(0, idx); + return eventRetargetting(path, self); + } + function getEventHandlerGetter(name) { + return function() { + var inlineEventHandlers = eventHandlersTable.get(this); + return inlineEventHandlers && inlineEventHandlers[name] && inlineEventHandlers[name].value || null; + }; + } + function getEventHandlerSetter(name) { + var eventType = name.slice(2); + return function(value) { + var inlineEventHandlers = eventHandlersTable.get(this); + if (!inlineEventHandlers) { + inlineEventHandlers = Object.create(null); + eventHandlersTable.set(this, inlineEventHandlers); + } + var old = inlineEventHandlers[name]; + if (old) this.removeEventListener(eventType, old.wrapped, false); + if (typeof value === "function") { + var wrapped = function(e) { + var rv = value.call(this, e); + if (rv === false) e.preventDefault(); else if (name === "onbeforeunload" && typeof rv === "string") e.returnValue = rv; + }; + this.addEventListener(eventType, wrapped, false); + inlineEventHandlers[name] = { + value: value, + wrapped: wrapped + }; + } + }; + } + scope.elementFromPoint = elementFromPoint; + scope.getEventHandlerGetter = getEventHandlerGetter; + scope.getEventHandlerSetter = getEventHandlerSetter; + scope.wrapEventTargetMethods = wrapEventTargetMethods; + scope.wrappers.BeforeUnloadEvent = BeforeUnloadEvent; + scope.wrappers.CustomEvent = CustomEvent; + scope.wrappers.Event = Event; + scope.wrappers.EventTarget = EventTarget; + scope.wrappers.FocusEvent = FocusEvent; + scope.wrappers.MouseEvent = MouseEvent; + scope.wrappers.UIEvent = UIEvent; + })(window.ShadowDOMPolyfill); + (function(scope) { + "use strict"; + var UIEvent = scope.wrappers.UIEvent; + var mixin = scope.mixin; + var registerWrapper = scope.registerWrapper; + var setWrapper = scope.setWrapper; + var unsafeUnwrap = scope.unsafeUnwrap; + var wrap = scope.wrap; + var OriginalTouchEvent = window.TouchEvent; + if (!OriginalTouchEvent) return; + var nativeEvent; + try { + nativeEvent = document.createEvent("TouchEvent"); + } catch (ex) { + return; + } + var nonEnumDescriptor = { + enumerable: false + }; + function nonEnum(obj, prop) { + Object.defineProperty(obj, prop, nonEnumDescriptor); + } + function Touch(impl) { + setWrapper(impl, this); + } + Touch.prototype = { + get target() { + return wrap(unsafeUnwrap(this).target); + } + }; + var descr = { + configurable: true, + enumerable: true, + get: null + }; + [ "clientX", "clientY", "screenX", "screenY", "pageX", "pageY", "identifier", "webkitRadiusX", "webkitRadiusY", "webkitRotationAngle", "webkitForce" ].forEach(function(name) { + descr.get = function() { + return unsafeUnwrap(this)[name]; + }; + Object.defineProperty(Touch.prototype, name, descr); + }); + function TouchList() { + this.length = 0; + nonEnum(this, "length"); + } + TouchList.prototype = { + item: function(index) { + return this[index]; + } + }; + function wrapTouchList(nativeTouchList) { + var list = new TouchList(); + for (var i = 0; i < nativeTouchList.length; i++) { + list[i] = new Touch(nativeTouchList[i]); + } + list.length = i; + return list; + } + function TouchEvent(impl) { + UIEvent.call(this, impl); + } + TouchEvent.prototype = Object.create(UIEvent.prototype); + mixin(TouchEvent.prototype, { + get touches() { + return wrapTouchList(unsafeUnwrap(this).touches); + }, + get targetTouches() { + return wrapTouchList(unsafeUnwrap(this).targetTouches); + }, + get changedTouches() { + return wrapTouchList(unsafeUnwrap(this).changedTouches); + }, + initTouchEvent: function() { + throw new Error("Not implemented"); + } + }); + registerWrapper(OriginalTouchEvent, TouchEvent, nativeEvent); + scope.wrappers.Touch = Touch; + scope.wrappers.TouchEvent = TouchEvent; + scope.wrappers.TouchList = TouchList; + })(window.ShadowDOMPolyfill); + (function(scope) { + "use strict"; + var unsafeUnwrap = scope.unsafeUnwrap; + var wrap = scope.wrap; + var nonEnumDescriptor = { + enumerable: false + }; + function nonEnum(obj, prop) { + Object.defineProperty(obj, prop, nonEnumDescriptor); + } + function NodeList() { + this.length = 0; + nonEnum(this, "length"); + } + NodeList.prototype = { + item: function(index) { + return this[index]; + } + }; + nonEnum(NodeList.prototype, "item"); + function wrapNodeList(list) { + if (list == null) return list; + var wrapperList = new NodeList(); + for (var i = 0, length = list.length; i < length; i++) { + wrapperList[i] = wrap(list[i]); + } + wrapperList.length = length; + return wrapperList; + } + function addWrapNodeListMethod(wrapperConstructor, name) { + wrapperConstructor.prototype[name] = function() { + return wrapNodeList(unsafeUnwrap(this)[name].apply(unsafeUnwrap(this), arguments)); + }; + } + scope.wrappers.NodeList = NodeList; + scope.addWrapNodeListMethod = addWrapNodeListMethod; + scope.wrapNodeList = wrapNodeList; + })(window.ShadowDOMPolyfill); + (function(scope) { + "use strict"; + scope.wrapHTMLCollection = scope.wrapNodeList; + scope.wrappers.HTMLCollection = scope.wrappers.NodeList; + })(window.ShadowDOMPolyfill); + (function(scope) { + "use strict"; + var EventTarget = scope.wrappers.EventTarget; + var NodeList = scope.wrappers.NodeList; + var TreeScope = scope.TreeScope; + var assert = scope.assert; + var defineWrapGetter = scope.defineWrapGetter; + var enqueueMutation = scope.enqueueMutation; + var getTreeScope = scope.getTreeScope; + var isWrapper = scope.isWrapper; + var mixin = scope.mixin; + var registerTransientObservers = scope.registerTransientObservers; + var registerWrapper = scope.registerWrapper; + var setTreeScope = scope.setTreeScope; + var unsafeUnwrap = scope.unsafeUnwrap; + var unwrap = scope.unwrap; + var unwrapIfNeeded = scope.unwrapIfNeeded; + var wrap = scope.wrap; + var wrapIfNeeded = scope.wrapIfNeeded; + var wrappers = scope.wrappers; + function assertIsNodeWrapper(node) { + assert(node instanceof Node); + } + function createOneElementNodeList(node) { + var nodes = new NodeList(); + nodes[0] = node; + nodes.length = 1; + return nodes; + } + var surpressMutations = false; + function enqueueRemovalForInsertedNodes(node, parent, nodes) { + enqueueMutation(parent, "childList", { + removedNodes: nodes, + previousSibling: node.previousSibling, + nextSibling: node.nextSibling + }); + } + function enqueueRemovalForInsertedDocumentFragment(df, nodes) { + enqueueMutation(df, "childList", { + removedNodes: nodes + }); + } + function collectNodes(node, parentNode, previousNode, nextNode) { + if (node instanceof DocumentFragment) { + var nodes = collectNodesForDocumentFragment(node); + surpressMutations = true; + for (var i = nodes.length - 1; i >= 0; i--) { + node.removeChild(nodes[i]); + nodes[i].parentNode_ = parentNode; + } + surpressMutations = false; + for (var i = 0; i < nodes.length; i++) { + nodes[i].previousSibling_ = nodes[i - 1] || previousNode; + nodes[i].nextSibling_ = nodes[i + 1] || nextNode; + } + if (previousNode) previousNode.nextSibling_ = nodes[0]; + if (nextNode) nextNode.previousSibling_ = nodes[nodes.length - 1]; + return nodes; + } + var nodes = createOneElementNodeList(node); + var oldParent = node.parentNode; + if (oldParent) { + oldParent.removeChild(node); + } + node.parentNode_ = parentNode; + node.previousSibling_ = previousNode; + node.nextSibling_ = nextNode; + if (previousNode) previousNode.nextSibling_ = node; + if (nextNode) nextNode.previousSibling_ = node; + return nodes; + } + function collectNodesNative(node) { + if (node instanceof DocumentFragment) return collectNodesForDocumentFragment(node); + var nodes = createOneElementNodeList(node); + var oldParent = node.parentNode; + if (oldParent) enqueueRemovalForInsertedNodes(node, oldParent, nodes); + return nodes; + } + function collectNodesForDocumentFragment(node) { + var nodes = new NodeList(); + var i = 0; + for (var child = node.firstChild; child; child = child.nextSibling) { + nodes[i++] = child; + } + nodes.length = i; + enqueueRemovalForInsertedDocumentFragment(node, nodes); + return nodes; + } + function snapshotNodeList(nodeList) { + return nodeList; + } + function nodeWasAdded(node, treeScope) { + setTreeScope(node, treeScope); + node.nodeIsInserted_(); + } + function nodesWereAdded(nodes, parent) { + var treeScope = getTreeScope(parent); + for (var i = 0; i < nodes.length; i++) { + nodeWasAdded(nodes[i], treeScope); + } + } + function nodeWasRemoved(node) { + setTreeScope(node, new TreeScope(node, null)); + } + function nodesWereRemoved(nodes) { + for (var i = 0; i < nodes.length; i++) { + nodeWasRemoved(nodes[i]); + } + } + function ensureSameOwnerDocument(parent, child) { + var ownerDoc = parent.nodeType === Node.DOCUMENT_NODE ? parent : parent.ownerDocument; + if (ownerDoc !== child.ownerDocument) ownerDoc.adoptNode(child); + } + function adoptNodesIfNeeded(owner, nodes) { + if (!nodes.length) return; + var ownerDoc = owner.ownerDocument; + if (ownerDoc === nodes[0].ownerDocument) return; + for (var i = 0; i < nodes.length; i++) { + scope.adoptNodeNoRemove(nodes[i], ownerDoc); + } + } + function unwrapNodesForInsertion(owner, nodes) { + adoptNodesIfNeeded(owner, nodes); + var length = nodes.length; + if (length === 1) return unwrap(nodes[0]); + var df = unwrap(owner.ownerDocument.createDocumentFragment()); + for (var i = 0; i < length; i++) { + df.appendChild(unwrap(nodes[i])); + } + return df; + } + function clearChildNodes(wrapper) { + if (wrapper.firstChild_ !== undefined) { + var child = wrapper.firstChild_; + while (child) { + var tmp = child; + child = child.nextSibling_; + tmp.parentNode_ = tmp.previousSibling_ = tmp.nextSibling_ = undefined; + } + } + wrapper.firstChild_ = wrapper.lastChild_ = undefined; + } + function removeAllChildNodes(wrapper) { + if (wrapper.invalidateShadowRenderer()) { + var childWrapper = wrapper.firstChild; + while (childWrapper) { + assert(childWrapper.parentNode === wrapper); + var nextSibling = childWrapper.nextSibling; + var childNode = unwrap(childWrapper); + var parentNode = childNode.parentNode; + if (parentNode) originalRemoveChild.call(parentNode, childNode); + childWrapper.previousSibling_ = childWrapper.nextSibling_ = childWrapper.parentNode_ = null; + childWrapper = nextSibling; + } + wrapper.firstChild_ = wrapper.lastChild_ = null; + } else { + var node = unwrap(wrapper); + var child = node.firstChild; + var nextSibling; + while (child) { + nextSibling = child.nextSibling; + originalRemoveChild.call(node, child); + child = nextSibling; + } + } + } + function invalidateParent(node) { + var p = node.parentNode; + return p && p.invalidateShadowRenderer(); + } + function cleanupNodes(nodes) { + for (var i = 0, n; i < nodes.length; i++) { + n = nodes[i]; + n.parentNode.removeChild(n); + } + } + var originalImportNode = document.importNode; + var originalCloneNode = window.Node.prototype.cloneNode; + function cloneNode(node, deep, opt_doc) { + var clone; + if (opt_doc) clone = wrap(originalImportNode.call(opt_doc, unsafeUnwrap(node), false)); else clone = wrap(originalCloneNode.call(unsafeUnwrap(node), false)); + if (deep) { + for (var child = node.firstChild; child; child = child.nextSibling) { + clone.appendChild(cloneNode(child, true, opt_doc)); + } + if (node instanceof wrappers.HTMLTemplateElement) { + var cloneContent = clone.content; + for (var child = node.content.firstChild; child; child = child.nextSibling) { + cloneContent.appendChild(cloneNode(child, true, opt_doc)); + } + } + } + return clone; + } + function contains(self, child) { + if (!child || getTreeScope(self) !== getTreeScope(child)) return false; + for (var node = child; node; node = node.parentNode) { + if (node === self) return true; + } + return false; + } + var OriginalNode = window.Node; + function Node(original) { + assert(original instanceof OriginalNode); + EventTarget.call(this, original); + this.parentNode_ = undefined; + this.firstChild_ = undefined; + this.lastChild_ = undefined; + this.nextSibling_ = undefined; + this.previousSibling_ = undefined; + this.treeScope_ = undefined; + } + var OriginalDocumentFragment = window.DocumentFragment; + var originalAppendChild = OriginalNode.prototype.appendChild; + var originalCompareDocumentPosition = OriginalNode.prototype.compareDocumentPosition; + var originalIsEqualNode = OriginalNode.prototype.isEqualNode; + var originalInsertBefore = OriginalNode.prototype.insertBefore; + var originalRemoveChild = OriginalNode.prototype.removeChild; + var originalReplaceChild = OriginalNode.prototype.replaceChild; + var isIe = /Trident|Edge/.test(navigator.userAgent); + var removeChildOriginalHelper = isIe ? function(parent, child) { + try { + originalRemoveChild.call(parent, child); + } catch (ex) { + if (!(parent instanceof OriginalDocumentFragment)) throw ex; + } + } : function(parent, child) { + originalRemoveChild.call(parent, child); + }; + Node.prototype = Object.create(EventTarget.prototype); + mixin(Node.prototype, { + appendChild: function(childWrapper) { + return this.insertBefore(childWrapper, null); + }, + insertBefore: function(childWrapper, refWrapper) { + assertIsNodeWrapper(childWrapper); + var refNode; + if (refWrapper) { + if (isWrapper(refWrapper)) { + refNode = unwrap(refWrapper); + } else { + refNode = refWrapper; + refWrapper = wrap(refNode); + } + } else { + refWrapper = null; + refNode = null; + } + refWrapper && assert(refWrapper.parentNode === this); + var nodes; + var previousNode = refWrapper ? refWrapper.previousSibling : this.lastChild; + var useNative = !this.invalidateShadowRenderer() && !invalidateParent(childWrapper); + if (useNative) nodes = collectNodesNative(childWrapper); else nodes = collectNodes(childWrapper, this, previousNode, refWrapper); + if (useNative) { + ensureSameOwnerDocument(this, childWrapper); + clearChildNodes(this); + originalInsertBefore.call(unsafeUnwrap(this), unwrap(childWrapper), refNode); + } else { + if (!previousNode) this.firstChild_ = nodes[0]; + if (!refWrapper) { + this.lastChild_ = nodes[nodes.length - 1]; + if (this.firstChild_ === undefined) this.firstChild_ = this.firstChild; + } + var parentNode = refNode ? refNode.parentNode : unsafeUnwrap(this); + if (parentNode) { + originalInsertBefore.call(parentNode, unwrapNodesForInsertion(this, nodes), refNode); + } else { + adoptNodesIfNeeded(this, nodes); + } + } + enqueueMutation(this, "childList", { + addedNodes: nodes, + nextSibling: refWrapper, + previousSibling: previousNode + }); + nodesWereAdded(nodes, this); + return childWrapper; + }, + removeChild: function(childWrapper) { + assertIsNodeWrapper(childWrapper); + if (childWrapper.parentNode !== this) { + var found = false; + var childNodes = this.childNodes; + for (var ieChild = this.firstChild; ieChild; ieChild = ieChild.nextSibling) { + if (ieChild === childWrapper) { + found = true; + break; + } + } + if (!found) { + throw new Error("NotFoundError"); + } + } + var childNode = unwrap(childWrapper); + var childWrapperNextSibling = childWrapper.nextSibling; + var childWrapperPreviousSibling = childWrapper.previousSibling; + if (this.invalidateShadowRenderer()) { + var thisFirstChild = this.firstChild; + var thisLastChild = this.lastChild; + var parentNode = childNode.parentNode; + if (parentNode) removeChildOriginalHelper(parentNode, childNode); + if (thisFirstChild === childWrapper) this.firstChild_ = childWrapperNextSibling; + if (thisLastChild === childWrapper) this.lastChild_ = childWrapperPreviousSibling; + if (childWrapperPreviousSibling) childWrapperPreviousSibling.nextSibling_ = childWrapperNextSibling; + if (childWrapperNextSibling) { + childWrapperNextSibling.previousSibling_ = childWrapperPreviousSibling; + } + childWrapper.previousSibling_ = childWrapper.nextSibling_ = childWrapper.parentNode_ = undefined; + } else { + clearChildNodes(this); + removeChildOriginalHelper(unsafeUnwrap(this), childNode); + } + if (!surpressMutations) { + enqueueMutation(this, "childList", { + removedNodes: createOneElementNodeList(childWrapper), + nextSibling: childWrapperNextSibling, + previousSibling: childWrapperPreviousSibling + }); + } + registerTransientObservers(this, childWrapper); + return childWrapper; + }, + replaceChild: function(newChildWrapper, oldChildWrapper) { + assertIsNodeWrapper(newChildWrapper); + var oldChildNode; + if (isWrapper(oldChildWrapper)) { + oldChildNode = unwrap(oldChildWrapper); + } else { + oldChildNode = oldChildWrapper; + oldChildWrapper = wrap(oldChildNode); + } + if (oldChildWrapper.parentNode !== this) { + throw new Error("NotFoundError"); + } + var nextNode = oldChildWrapper.nextSibling; + var previousNode = oldChildWrapper.previousSibling; + var nodes; + var useNative = !this.invalidateShadowRenderer() && !invalidateParent(newChildWrapper); + if (useNative) { + nodes = collectNodesNative(newChildWrapper); + } else { + if (nextNode === newChildWrapper) nextNode = newChildWrapper.nextSibling; + nodes = collectNodes(newChildWrapper, this, previousNode, nextNode); + } + if (!useNative) { + if (this.firstChild === oldChildWrapper) this.firstChild_ = nodes[0]; + if (this.lastChild === oldChildWrapper) this.lastChild_ = nodes[nodes.length - 1]; + oldChildWrapper.previousSibling_ = oldChildWrapper.nextSibling_ = oldChildWrapper.parentNode_ = undefined; + if (oldChildNode.parentNode) { + originalReplaceChild.call(oldChildNode.parentNode, unwrapNodesForInsertion(this, nodes), oldChildNode); + } + } else { + ensureSameOwnerDocument(this, newChildWrapper); + clearChildNodes(this); + originalReplaceChild.call(unsafeUnwrap(this), unwrap(newChildWrapper), oldChildNode); + } + enqueueMutation(this, "childList", { + addedNodes: nodes, + removedNodes: createOneElementNodeList(oldChildWrapper), + nextSibling: nextNode, + previousSibling: previousNode + }); + nodeWasRemoved(oldChildWrapper); + nodesWereAdded(nodes, this); + return oldChildWrapper; + }, + nodeIsInserted_: function() { + for (var child = this.firstChild; child; child = child.nextSibling) { + child.nodeIsInserted_(); + } + }, + hasChildNodes: function() { + return this.firstChild !== null; + }, + get parentNode() { + return this.parentNode_ !== undefined ? this.parentNode_ : wrap(unsafeUnwrap(this).parentNode); + }, + get firstChild() { + return this.firstChild_ !== undefined ? this.firstChild_ : wrap(unsafeUnwrap(this).firstChild); + }, + get lastChild() { + return this.lastChild_ !== undefined ? this.lastChild_ : wrap(unsafeUnwrap(this).lastChild); + }, + get nextSibling() { + return this.nextSibling_ !== undefined ? this.nextSibling_ : wrap(unsafeUnwrap(this).nextSibling); + }, + get previousSibling() { + return this.previousSibling_ !== undefined ? this.previousSibling_ : wrap(unsafeUnwrap(this).previousSibling); + }, + get parentElement() { + var p = this.parentNode; + while (p && p.nodeType !== Node.ELEMENT_NODE) { + p = p.parentNode; + } + return p; + }, + get textContent() { + var s = ""; + for (var child = this.firstChild; child; child = child.nextSibling) { + if (child.nodeType != Node.COMMENT_NODE) { + s += child.textContent; + } + } + return s; + }, + set textContent(textContent) { + if (textContent == null) textContent = ""; + var removedNodes = snapshotNodeList(this.childNodes); + if (this.invalidateShadowRenderer()) { + removeAllChildNodes(this); + if (textContent !== "") { + var textNode = unsafeUnwrap(this).ownerDocument.createTextNode(textContent); + this.appendChild(textNode); + } + } else { + clearChildNodes(this); + unsafeUnwrap(this).textContent = textContent; + } + var addedNodes = snapshotNodeList(this.childNodes); + enqueueMutation(this, "childList", { + addedNodes: addedNodes, + removedNodes: removedNodes + }); + nodesWereRemoved(removedNodes); + nodesWereAdded(addedNodes, this); + }, + get childNodes() { + var wrapperList = new NodeList(); + var i = 0; + for (var child = this.firstChild; child; child = child.nextSibling) { + wrapperList[i++] = child; + } + wrapperList.length = i; + return wrapperList; + }, + cloneNode: function(deep) { + return cloneNode(this, deep); + }, + contains: function(child) { + return contains(this, wrapIfNeeded(child)); + }, + compareDocumentPosition: function(otherNode) { + return originalCompareDocumentPosition.call(unsafeUnwrap(this), unwrapIfNeeded(otherNode)); + }, + isEqualNode: function(otherNode) { + return originalIsEqualNode.call(unsafeUnwrap(this), unwrapIfNeeded(otherNode)); + }, + normalize: function() { + var nodes = snapshotNodeList(this.childNodes); + var remNodes = []; + var s = ""; + var modNode; + for (var i = 0, n; i < nodes.length; i++) { + n = nodes[i]; + if (n.nodeType === Node.TEXT_NODE) { + if (!modNode && !n.data.length) this.removeChild(n); else if (!modNode) modNode = n; else { + s += n.data; + remNodes.push(n); + } + } else { + if (modNode && remNodes.length) { + modNode.data += s; + cleanupNodes(remNodes); + } + remNodes = []; + s = ""; + modNode = null; + if (n.childNodes.length) n.normalize(); + } + } + if (modNode && remNodes.length) { + modNode.data += s; + cleanupNodes(remNodes); + } + } + }); + defineWrapGetter(Node, "ownerDocument"); + registerWrapper(OriginalNode, Node, document.createDocumentFragment()); + delete Node.prototype.querySelector; + delete Node.prototype.querySelectorAll; + Node.prototype = mixin(Object.create(EventTarget.prototype), Node.prototype); + scope.cloneNode = cloneNode; + scope.nodeWasAdded = nodeWasAdded; + scope.nodeWasRemoved = nodeWasRemoved; + scope.nodesWereAdded = nodesWereAdded; + scope.nodesWereRemoved = nodesWereRemoved; + scope.originalInsertBefore = originalInsertBefore; + scope.originalRemoveChild = originalRemoveChild; + scope.snapshotNodeList = snapshotNodeList; + scope.wrappers.Node = Node; + })(window.ShadowDOMPolyfill); + (function(scope) { + "use strict"; + var HTMLCollection = scope.wrappers.HTMLCollection; + var NodeList = scope.wrappers.NodeList; + var getTreeScope = scope.getTreeScope; + var unsafeUnwrap = scope.unsafeUnwrap; + var wrap = scope.wrap; + var originalDocumentQuerySelector = document.querySelector; + var originalElementQuerySelector = document.documentElement.querySelector; + var originalDocumentQuerySelectorAll = document.querySelectorAll; + var originalElementQuerySelectorAll = document.documentElement.querySelectorAll; + var originalDocumentGetElementsByTagName = document.getElementsByTagName; + var originalElementGetElementsByTagName = document.documentElement.getElementsByTagName; + var originalDocumentGetElementsByTagNameNS = document.getElementsByTagNameNS; + var originalElementGetElementsByTagNameNS = document.documentElement.getElementsByTagNameNS; + var OriginalElement = window.Element; + var OriginalDocument = window.HTMLDocument || window.Document; + function filterNodeList(list, index, result, deep) { + var wrappedItem = null; + var root = null; + for (var i = 0, length = list.length; i < length; i++) { + wrappedItem = wrap(list[i]); + if (!deep && (root = getTreeScope(wrappedItem).root)) { + if (root instanceof scope.wrappers.ShadowRoot) { + continue; + } + } + result[index++] = wrappedItem; + } + return index; + } + function shimSelector(selector) { + return String(selector).replace(/\/deep\/|::shadow|>>>/g, " "); + } + function shimMatchesSelector(selector) { + return String(selector).replace(/:host\(([^\s]+)\)/g, "$1").replace(/([^\s]):host/g, "$1").replace(":host", "*").replace(/\^|\/shadow\/|\/shadow-deep\/|::shadow|\/deep\/|::content|>>>/g, " "); + } + function findOne(node, selector) { + var m, el = node.firstElementChild; + while (el) { + if (el.matches(selector)) return el; + m = findOne(el, selector); + if (m) return m; + el = el.nextElementSibling; + } + return null; + } + function matchesSelector(el, selector) { + return el.matches(selector); + } + var XHTML_NS = "http://www.w3.org/1999/xhtml"; + function matchesTagName(el, localName, localNameLowerCase) { + var ln = el.localName; + return ln === localName || ln === localNameLowerCase && el.namespaceURI === XHTML_NS; + } + function matchesEveryThing() { + return true; + } + function matchesLocalNameOnly(el, ns, localName) { + return el.localName === localName; + } + function matchesNameSpace(el, ns) { + return el.namespaceURI === ns; + } + function matchesLocalNameNS(el, ns, localName) { + return el.namespaceURI === ns && el.localName === localName; + } + function findElements(node, index, result, p, arg0, arg1) { + var el = node.firstElementChild; + while (el) { + if (p(el, arg0, arg1)) result[index++] = el; + index = findElements(el, index, result, p, arg0, arg1); + el = el.nextElementSibling; + } + return index; + } + function querySelectorAllFiltered(p, index, result, selector, deep) { + var target = unsafeUnwrap(this); + var list; + var root = getTreeScope(this).root; + if (root instanceof scope.wrappers.ShadowRoot) { + return findElements(this, index, result, p, selector, null); + } else if (target instanceof OriginalElement) { + list = originalElementQuerySelectorAll.call(target, selector); + } else if (target instanceof OriginalDocument) { + list = originalDocumentQuerySelectorAll.call(target, selector); + } else { + return findElements(this, index, result, p, selector, null); + } + return filterNodeList(list, index, result, deep); + } + var SelectorsInterface = { + querySelector: function(selector) { + var shimmed = shimSelector(selector); + var deep = shimmed !== selector; + selector = shimmed; + var target = unsafeUnwrap(this); + var wrappedItem; + var root = getTreeScope(this).root; + if (root instanceof scope.wrappers.ShadowRoot) { + return findOne(this, selector); + } else if (target instanceof OriginalElement) { + wrappedItem = wrap(originalElementQuerySelector.call(target, selector)); + } else if (target instanceof OriginalDocument) { + wrappedItem = wrap(originalDocumentQuerySelector.call(target, selector)); + } else { + return findOne(this, selector); + } + if (!wrappedItem) { + return wrappedItem; + } else if (!deep && (root = getTreeScope(wrappedItem).root)) { + if (root instanceof scope.wrappers.ShadowRoot) { + return findOne(this, selector); + } + } + return wrappedItem; + }, + querySelectorAll: function(selector) { + var shimmed = shimSelector(selector); + var deep = shimmed !== selector; + selector = shimmed; + var result = new NodeList(); + result.length = querySelectorAllFiltered.call(this, matchesSelector, 0, result, selector, deep); + return result; + } + }; + var MatchesInterface = { + matches: function(selector) { + selector = shimMatchesSelector(selector); + return scope.originalMatches.call(unsafeUnwrap(this), selector); + } + }; + function getElementsByTagNameFiltered(p, index, result, localName, lowercase) { + var target = unsafeUnwrap(this); + var list; + var root = getTreeScope(this).root; + if (root instanceof scope.wrappers.ShadowRoot) { + return findElements(this, index, result, p, localName, lowercase); + } else if (target instanceof OriginalElement) { + list = originalElementGetElementsByTagName.call(target, localName, lowercase); + } else if (target instanceof OriginalDocument) { + list = originalDocumentGetElementsByTagName.call(target, localName, lowercase); + } else { + return findElements(this, index, result, p, localName, lowercase); + } + return filterNodeList(list, index, result, false); + } + function getElementsByTagNameNSFiltered(p, index, result, ns, localName) { + var target = unsafeUnwrap(this); + var list; + var root = getTreeScope(this).root; + if (root instanceof scope.wrappers.ShadowRoot) { + return findElements(this, index, result, p, ns, localName); + } else if (target instanceof OriginalElement) { + list = originalElementGetElementsByTagNameNS.call(target, ns, localName); + } else if (target instanceof OriginalDocument) { + list = originalDocumentGetElementsByTagNameNS.call(target, ns, localName); + } else { + return findElements(this, index, result, p, ns, localName); + } + return filterNodeList(list, index, result, false); + } + var GetElementsByInterface = { + getElementsByTagName: function(localName) { + var result = new HTMLCollection(); + var match = localName === "*" ? matchesEveryThing : matchesTagName; + result.length = getElementsByTagNameFiltered.call(this, match, 0, result, localName, localName.toLowerCase()); + return result; + }, + getElementsByClassName: function(className) { + return this.querySelectorAll("." + className); + }, + getElementsByTagNameNS: function(ns, localName) { + var result = new HTMLCollection(); + var match = null; + if (ns === "*") { + match = localName === "*" ? matchesEveryThing : matchesLocalNameOnly; + } else { + match = localName === "*" ? matchesNameSpace : matchesLocalNameNS; + } + result.length = getElementsByTagNameNSFiltered.call(this, match, 0, result, ns || null, localName); + return result; + } + }; + scope.GetElementsByInterface = GetElementsByInterface; + scope.SelectorsInterface = SelectorsInterface; + scope.MatchesInterface = MatchesInterface; + })(window.ShadowDOMPolyfill); + (function(scope) { + "use strict"; + var NodeList = scope.wrappers.NodeList; + function forwardElement(node) { + while (node && node.nodeType !== Node.ELEMENT_NODE) { + node = node.nextSibling; + } + return node; + } + function backwardsElement(node) { + while (node && node.nodeType !== Node.ELEMENT_NODE) { + node = node.previousSibling; + } + return node; + } + var ParentNodeInterface = { + get firstElementChild() { + return forwardElement(this.firstChild); + }, + get lastElementChild() { + return backwardsElement(this.lastChild); + }, + get childElementCount() { + var count = 0; + for (var child = this.firstElementChild; child; child = child.nextElementSibling) { + count++; + } + return count; + }, + get children() { + var wrapperList = new NodeList(); + var i = 0; + for (var child = this.firstElementChild; child; child = child.nextElementSibling) { + wrapperList[i++] = child; + } + wrapperList.length = i; + return wrapperList; + }, + remove: function() { + var p = this.parentNode; + if (p) p.removeChild(this); + } + }; + var ChildNodeInterface = { + get nextElementSibling() { + return forwardElement(this.nextSibling); + }, + get previousElementSibling() { + return backwardsElement(this.previousSibling); + } + }; + var NonElementParentNodeInterface = { + getElementById: function(id) { + if (/[ \t\n\r\f]/.test(id)) return null; + return this.querySelector('[id="' + id + '"]'); + } + }; + scope.ChildNodeInterface = ChildNodeInterface; + scope.NonElementParentNodeInterface = NonElementParentNodeInterface; + scope.ParentNodeInterface = ParentNodeInterface; + })(window.ShadowDOMPolyfill); + (function(scope) { + "use strict"; + var ChildNodeInterface = scope.ChildNodeInterface; + var Node = scope.wrappers.Node; + var enqueueMutation = scope.enqueueMutation; + var mixin = scope.mixin; + var registerWrapper = scope.registerWrapper; + var unsafeUnwrap = scope.unsafeUnwrap; + var OriginalCharacterData = window.CharacterData; + function CharacterData(node) { + Node.call(this, node); + } + CharacterData.prototype = Object.create(Node.prototype); + mixin(CharacterData.prototype, { + get nodeValue() { + return this.data; + }, + set nodeValue(data) { + this.data = data; + }, + get textContent() { + return this.data; + }, + set textContent(value) { + this.data = value; + }, + get data() { + return unsafeUnwrap(this).data; + }, + set data(value) { + var oldValue = unsafeUnwrap(this).data; + enqueueMutation(this, "characterData", { + oldValue: oldValue + }); + unsafeUnwrap(this).data = value; + } + }); + mixin(CharacterData.prototype, ChildNodeInterface); + registerWrapper(OriginalCharacterData, CharacterData, document.createTextNode("")); + scope.wrappers.CharacterData = CharacterData; + })(window.ShadowDOMPolyfill); + (function(scope) { + "use strict"; + var CharacterData = scope.wrappers.CharacterData; + var enqueueMutation = scope.enqueueMutation; + var mixin = scope.mixin; + var registerWrapper = scope.registerWrapper; + function toUInt32(x) { + return x >>> 0; + } + var OriginalText = window.Text; + function Text(node) { + CharacterData.call(this, node); + } + Text.prototype = Object.create(CharacterData.prototype); + mixin(Text.prototype, { + splitText: function(offset) { + offset = toUInt32(offset); + var s = this.data; + if (offset > s.length) throw new Error("IndexSizeError"); + var head = s.slice(0, offset); + var tail = s.slice(offset); + this.data = head; + var newTextNode = this.ownerDocument.createTextNode(tail); + if (this.parentNode) this.parentNode.insertBefore(newTextNode, this.nextSibling); + return newTextNode; + } + }); + registerWrapper(OriginalText, Text, document.createTextNode("")); + scope.wrappers.Text = Text; + })(window.ShadowDOMPolyfill); + (function(scope) { + "use strict"; + if (!window.DOMTokenList) { + console.warn("Missing DOMTokenList prototype, please include a " + "compatible classList polyfill such as http://goo.gl/uTcepH."); + return; + } + var unsafeUnwrap = scope.unsafeUnwrap; + var enqueueMutation = scope.enqueueMutation; + function getClass(el) { + return unsafeUnwrap(el).getAttribute("class"); + } + function enqueueClassAttributeChange(el, oldValue) { + enqueueMutation(el, "attributes", { + name: "class", + namespace: null, + oldValue: oldValue + }); + } + function invalidateClass(el) { + scope.invalidateRendererBasedOnAttribute(el, "class"); + } + function changeClass(tokenList, method, args) { + var ownerElement = tokenList.ownerElement_; + if (ownerElement == null) { + return method.apply(tokenList, args); + } + var oldValue = getClass(ownerElement); + var retv = method.apply(tokenList, args); + if (getClass(ownerElement) !== oldValue) { + enqueueClassAttributeChange(ownerElement, oldValue); + invalidateClass(ownerElement); + } + return retv; + } + var oldAdd = DOMTokenList.prototype.add; + DOMTokenList.prototype.add = function() { + changeClass(this, oldAdd, arguments); + }; + var oldRemove = DOMTokenList.prototype.remove; + DOMTokenList.prototype.remove = function() { + changeClass(this, oldRemove, arguments); + }; + var oldToggle = DOMTokenList.prototype.toggle; + DOMTokenList.prototype.toggle = function() { + return changeClass(this, oldToggle, arguments); + }; + })(window.ShadowDOMPolyfill); + (function(scope) { + "use strict"; + var ChildNodeInterface = scope.ChildNodeInterface; + var GetElementsByInterface = scope.GetElementsByInterface; + var Node = scope.wrappers.Node; + var ParentNodeInterface = scope.ParentNodeInterface; + var SelectorsInterface = scope.SelectorsInterface; + var MatchesInterface = scope.MatchesInterface; + var addWrapNodeListMethod = scope.addWrapNodeListMethod; + var enqueueMutation = scope.enqueueMutation; + var mixin = scope.mixin; + var oneOf = scope.oneOf; + var registerWrapper = scope.registerWrapper; + var unsafeUnwrap = scope.unsafeUnwrap; + var wrappers = scope.wrappers; + var OriginalElement = window.Element; + var matchesNames = [ "matches", "mozMatchesSelector", "msMatchesSelector", "webkitMatchesSelector" ].filter(function(name) { + return OriginalElement.prototype[name]; + }); + var matchesName = matchesNames[0]; + var originalMatches = OriginalElement.prototype[matchesName]; + function invalidateRendererBasedOnAttribute(element, name) { + var p = element.parentNode; + if (!p || !p.shadowRoot) return; + var renderer = scope.getRendererForHost(p); + if (renderer.dependsOnAttribute(name)) renderer.invalidate(); + } + function enqueAttributeChange(element, name, oldValue) { + enqueueMutation(element, "attributes", { + name: name, + namespace: null, + oldValue: oldValue + }); + } + var classListTable = new WeakMap(); + function Element(node) { + Node.call(this, node); + } + Element.prototype = Object.create(Node.prototype); + mixin(Element.prototype, { + createShadowRoot: function() { + var newShadowRoot = new wrappers.ShadowRoot(this); + unsafeUnwrap(this).polymerShadowRoot_ = newShadowRoot; + var renderer = scope.getRendererForHost(this); + renderer.invalidate(); + return newShadowRoot; + }, + get shadowRoot() { + return unsafeUnwrap(this).polymerShadowRoot_ || null; + }, + setAttribute: function(name, value) { + var oldValue = unsafeUnwrap(this).getAttribute(name); + unsafeUnwrap(this).setAttribute(name, value); + enqueAttributeChange(this, name, oldValue); + invalidateRendererBasedOnAttribute(this, name); + }, + removeAttribute: function(name) { + var oldValue = unsafeUnwrap(this).getAttribute(name); + unsafeUnwrap(this).removeAttribute(name); + enqueAttributeChange(this, name, oldValue); + invalidateRendererBasedOnAttribute(this, name); + }, + get classList() { + var list = classListTable.get(this); + if (!list) { + list = unsafeUnwrap(this).classList; + if (!list) return; + list.ownerElement_ = this; + classListTable.set(this, list); + } + return list; + }, + get className() { + return unsafeUnwrap(this).className; + }, + set className(v) { + this.setAttribute("class", v); + }, + get id() { + return unsafeUnwrap(this).id; + }, + set id(v) { + this.setAttribute("id", v); + } + }); + matchesNames.forEach(function(name) { + if (name !== "matches") { + Element.prototype[name] = function(selector) { + return this.matches(selector); + }; + } + }); + if (OriginalElement.prototype.webkitCreateShadowRoot) { + Element.prototype.webkitCreateShadowRoot = Element.prototype.createShadowRoot; + } + mixin(Element.prototype, ChildNodeInterface); + mixin(Element.prototype, GetElementsByInterface); + mixin(Element.prototype, ParentNodeInterface); + mixin(Element.prototype, SelectorsInterface); + mixin(Element.prototype, MatchesInterface); + registerWrapper(OriginalElement, Element, document.createElementNS(null, "x")); + scope.invalidateRendererBasedOnAttribute = invalidateRendererBasedOnAttribute; + scope.matchesNames = matchesNames; + scope.originalMatches = originalMatches; + scope.wrappers.Element = Element; + })(window.ShadowDOMPolyfill); + (function(scope) { + "use strict"; + var Element = scope.wrappers.Element; + var defineGetter = scope.defineGetter; + var enqueueMutation = scope.enqueueMutation; + var mixin = scope.mixin; + var nodesWereAdded = scope.nodesWereAdded; + var nodesWereRemoved = scope.nodesWereRemoved; + var registerWrapper = scope.registerWrapper; + var snapshotNodeList = scope.snapshotNodeList; + var unsafeUnwrap = scope.unsafeUnwrap; + var unwrap = scope.unwrap; + var wrap = scope.wrap; + var wrappers = scope.wrappers; + var escapeAttrRegExp = /[&\u00A0"]/g; + var escapeDataRegExp = /[&\u00A0<>]/g; + function escapeReplace(c) { + switch (c) { + case "&": + return "&"; + + case "<": + return "<"; + + case ">": + return ">"; + + case '"': + return """; + + case " ": + return " "; + } + } + function escapeAttr(s) { + return s.replace(escapeAttrRegExp, escapeReplace); + } + function escapeData(s) { + return s.replace(escapeDataRegExp, escapeReplace); + } + function makeSet(arr) { + var set = {}; + for (var i = 0; i < arr.length; i++) { + set[arr[i]] = true; + } + return set; + } + var voidElements = makeSet([ "area", "base", "br", "col", "command", "embed", "hr", "img", "input", "keygen", "link", "meta", "param", "source", "track", "wbr" ]); + var plaintextParents = makeSet([ "style", "script", "xmp", "iframe", "noembed", "noframes", "plaintext", "noscript" ]); + var XHTML_NS = "http://www.w3.org/1999/xhtml"; + function needsSelfClosingSlash(node) { + if (node.namespaceURI !== XHTML_NS) return true; + var doctype = node.ownerDocument.doctype; + return doctype && doctype.publicId && doctype.systemId; + } + function getOuterHTML(node, parentNode) { + switch (node.nodeType) { + case Node.ELEMENT_NODE: + var tagName = node.tagName.toLowerCase(); + var s = "<" + tagName; + var attrs = node.attributes; + for (var i = 0, attr; attr = attrs[i]; i++) { + s += " " + attr.name + '="' + escapeAttr(attr.value) + '"'; + } + if (voidElements[tagName]) { + if (needsSelfClosingSlash(node)) s += "/"; + return s + ">"; + } + return s + ">" + getInnerHTML(node) + ""; + + case Node.TEXT_NODE: + var data = node.data; + if (parentNode && plaintextParents[parentNode.localName]) return data; + return escapeData(data); + + case Node.COMMENT_NODE: + return ""; + + default: + console.error(node); + throw new Error("not implemented"); + } + } + function getInnerHTML(node) { + if (node instanceof wrappers.HTMLTemplateElement) node = node.content; + var s = ""; + for (var child = node.firstChild; child; child = child.nextSibling) { + s += getOuterHTML(child, node); + } + return s; + } + function setInnerHTML(node, value, opt_tagName) { + var tagName = opt_tagName || "div"; + node.textContent = ""; + var tempElement = unwrap(node.ownerDocument.createElement(tagName)); + tempElement.innerHTML = value; + var firstChild; + while (firstChild = tempElement.firstChild) { + node.appendChild(wrap(firstChild)); + } + } + var oldIe = /MSIE/.test(navigator.userAgent); + var OriginalHTMLElement = window.HTMLElement; + var OriginalHTMLTemplateElement = window.HTMLTemplateElement; + function HTMLElement(node) { + Element.call(this, node); + } + HTMLElement.prototype = Object.create(Element.prototype); + mixin(HTMLElement.prototype, { + get innerHTML() { + return getInnerHTML(this); + }, + set innerHTML(value) { + if (oldIe && plaintextParents[this.localName]) { + this.textContent = value; + return; + } + var removedNodes = snapshotNodeList(this.childNodes); + if (this.invalidateShadowRenderer()) { + if (this instanceof wrappers.HTMLTemplateElement) setInnerHTML(this.content, value); else setInnerHTML(this, value, this.tagName); + } else if (!OriginalHTMLTemplateElement && this instanceof wrappers.HTMLTemplateElement) { + setInnerHTML(this.content, value); + } else { + unsafeUnwrap(this).innerHTML = value; + } + var addedNodes = snapshotNodeList(this.childNodes); + enqueueMutation(this, "childList", { + addedNodes: addedNodes, + removedNodes: removedNodes + }); + nodesWereRemoved(removedNodes); + nodesWereAdded(addedNodes, this); + }, + get outerHTML() { + return getOuterHTML(this, this.parentNode); + }, + set outerHTML(value) { + var p = this.parentNode; + if (p) { + p.invalidateShadowRenderer(); + var df = frag(p, value); + p.replaceChild(df, this); + } + }, + insertAdjacentHTML: function(position, text) { + var contextElement, refNode; + switch (String(position).toLowerCase()) { + case "beforebegin": + contextElement = this.parentNode; + refNode = this; + break; + + case "afterend": + contextElement = this.parentNode; + refNode = this.nextSibling; + break; + + case "afterbegin": + contextElement = this; + refNode = this.firstChild; + break; + + case "beforeend": + contextElement = this; + refNode = null; + break; + + default: + return; + } + var df = frag(contextElement, text); + contextElement.insertBefore(df, refNode); + }, + get hidden() { + return this.hasAttribute("hidden"); + }, + set hidden(v) { + if (v) { + this.setAttribute("hidden", ""); + } else { + this.removeAttribute("hidden"); + } + } + }); + function frag(contextElement, html) { + var p = unwrap(contextElement.cloneNode(false)); + p.innerHTML = html; + var df = unwrap(document.createDocumentFragment()); + var c; + while (c = p.firstChild) { + df.appendChild(c); + } + return wrap(df); + } + function getter(name) { + return function() { + scope.renderAllPending(); + return unsafeUnwrap(this)[name]; + }; + } + function getterRequiresRendering(name) { + defineGetter(HTMLElement, name, getter(name)); + } + [ "clientHeight", "clientLeft", "clientTop", "clientWidth", "offsetHeight", "offsetLeft", "offsetTop", "offsetWidth", "scrollHeight", "scrollWidth" ].forEach(getterRequiresRendering); + function getterAndSetterRequiresRendering(name) { + Object.defineProperty(HTMLElement.prototype, name, { + get: getter(name), + set: function(v) { + scope.renderAllPending(); + unsafeUnwrap(this)[name] = v; + }, + configurable: true, + enumerable: true + }); + } + [ "scrollLeft", "scrollTop" ].forEach(getterAndSetterRequiresRendering); + function methodRequiresRendering(name) { + Object.defineProperty(HTMLElement.prototype, name, { + value: function() { + scope.renderAllPending(); + return unsafeUnwrap(this)[name].apply(unsafeUnwrap(this), arguments); + }, + configurable: true, + enumerable: true + }); + } + [ "getBoundingClientRect", "getClientRects", "scrollIntoView" ].forEach(methodRequiresRendering); + registerWrapper(OriginalHTMLElement, HTMLElement, document.createElement("b")); + scope.wrappers.HTMLElement = HTMLElement; + scope.getInnerHTML = getInnerHTML; + scope.setInnerHTML = setInnerHTML; + })(window.ShadowDOMPolyfill); + (function(scope) { + "use strict"; + var HTMLElement = scope.wrappers.HTMLElement; + var mixin = scope.mixin; + var registerWrapper = scope.registerWrapper; + var unsafeUnwrap = scope.unsafeUnwrap; + var wrap = scope.wrap; + var OriginalHTMLCanvasElement = window.HTMLCanvasElement; + function HTMLCanvasElement(node) { + HTMLElement.call(this, node); + } + HTMLCanvasElement.prototype = Object.create(HTMLElement.prototype); + mixin(HTMLCanvasElement.prototype, { + getContext: function() { + var context = unsafeUnwrap(this).getContext.apply(unsafeUnwrap(this), arguments); + return context && wrap(context); + } + }); + registerWrapper(OriginalHTMLCanvasElement, HTMLCanvasElement, document.createElement("canvas")); + scope.wrappers.HTMLCanvasElement = HTMLCanvasElement; + })(window.ShadowDOMPolyfill); + (function(scope) { + "use strict"; + var HTMLElement = scope.wrappers.HTMLElement; + var mixin = scope.mixin; + var registerWrapper = scope.registerWrapper; + var OriginalHTMLContentElement = window.HTMLContentElement; + function HTMLContentElement(node) { + HTMLElement.call(this, node); + } + HTMLContentElement.prototype = Object.create(HTMLElement.prototype); + mixin(HTMLContentElement.prototype, { + constructor: HTMLContentElement, + get select() { + return this.getAttribute("select"); + }, + set select(value) { + this.setAttribute("select", value); + }, + setAttribute: function(n, v) { + HTMLElement.prototype.setAttribute.call(this, n, v); + if (String(n).toLowerCase() === "select") this.invalidateShadowRenderer(true); + } + }); + if (OriginalHTMLContentElement) registerWrapper(OriginalHTMLContentElement, HTMLContentElement); + scope.wrappers.HTMLContentElement = HTMLContentElement; + })(window.ShadowDOMPolyfill); + (function(scope) { + "use strict"; + var HTMLElement = scope.wrappers.HTMLElement; + var mixin = scope.mixin; + var registerWrapper = scope.registerWrapper; + var wrapHTMLCollection = scope.wrapHTMLCollection; + var unwrap = scope.unwrap; + var OriginalHTMLFormElement = window.HTMLFormElement; + function HTMLFormElement(node) { + HTMLElement.call(this, node); + } + HTMLFormElement.prototype = Object.create(HTMLElement.prototype); + mixin(HTMLFormElement.prototype, { + get elements() { + return wrapHTMLCollection(unwrap(this).elements); + } + }); + registerWrapper(OriginalHTMLFormElement, HTMLFormElement, document.createElement("form")); + scope.wrappers.HTMLFormElement = HTMLFormElement; + })(window.ShadowDOMPolyfill); + (function(scope) { + "use strict"; + var HTMLElement = scope.wrappers.HTMLElement; + var registerWrapper = scope.registerWrapper; + var unwrap = scope.unwrap; + var rewrap = scope.rewrap; + var OriginalHTMLImageElement = window.HTMLImageElement; + function HTMLImageElement(node) { + HTMLElement.call(this, node); + } + HTMLImageElement.prototype = Object.create(HTMLElement.prototype); + registerWrapper(OriginalHTMLImageElement, HTMLImageElement, document.createElement("img")); + function Image(width, height) { + if (!(this instanceof Image)) { + throw new TypeError("DOM object constructor cannot be called as a function."); + } + var node = unwrap(document.createElement("img")); + HTMLElement.call(this, node); + rewrap(node, this); + if (width !== undefined) node.width = width; + if (height !== undefined) node.height = height; + } + Image.prototype = HTMLImageElement.prototype; + scope.wrappers.HTMLImageElement = HTMLImageElement; + scope.wrappers.Image = Image; + })(window.ShadowDOMPolyfill); + (function(scope) { + "use strict"; + var HTMLElement = scope.wrappers.HTMLElement; + var mixin = scope.mixin; + var NodeList = scope.wrappers.NodeList; + var registerWrapper = scope.registerWrapper; + var OriginalHTMLShadowElement = window.HTMLShadowElement; + function HTMLShadowElement(node) { + HTMLElement.call(this, node); + } + HTMLShadowElement.prototype = Object.create(HTMLElement.prototype); + HTMLShadowElement.prototype.constructor = HTMLShadowElement; + if (OriginalHTMLShadowElement) registerWrapper(OriginalHTMLShadowElement, HTMLShadowElement); + scope.wrappers.HTMLShadowElement = HTMLShadowElement; + })(window.ShadowDOMPolyfill); + (function(scope) { + "use strict"; + var HTMLElement = scope.wrappers.HTMLElement; + var mixin = scope.mixin; + var registerWrapper = scope.registerWrapper; + var unsafeUnwrap = scope.unsafeUnwrap; + var unwrap = scope.unwrap; + var wrap = scope.wrap; + var contentTable = new WeakMap(); + var templateContentsOwnerTable = new WeakMap(); + function getTemplateContentsOwner(doc) { + if (!doc.defaultView) return doc; + var d = templateContentsOwnerTable.get(doc); + if (!d) { + d = doc.implementation.createHTMLDocument(""); + while (d.lastChild) { + d.removeChild(d.lastChild); + } + templateContentsOwnerTable.set(doc, d); + } + return d; + } + function extractContent(templateElement) { + var doc = getTemplateContentsOwner(templateElement.ownerDocument); + var df = unwrap(doc.createDocumentFragment()); + var child; + while (child = templateElement.firstChild) { + df.appendChild(child); + } + return df; + } + var OriginalHTMLTemplateElement = window.HTMLTemplateElement; + function HTMLTemplateElement(node) { + HTMLElement.call(this, node); + if (!OriginalHTMLTemplateElement) { + var content = extractContent(node); + contentTable.set(this, wrap(content)); + } + } + HTMLTemplateElement.prototype = Object.create(HTMLElement.prototype); + mixin(HTMLTemplateElement.prototype, { + constructor: HTMLTemplateElement, + get content() { + if (OriginalHTMLTemplateElement) return wrap(unsafeUnwrap(this).content); + return contentTable.get(this); + } + }); + if (OriginalHTMLTemplateElement) registerWrapper(OriginalHTMLTemplateElement, HTMLTemplateElement); + scope.wrappers.HTMLTemplateElement = HTMLTemplateElement; + })(window.ShadowDOMPolyfill); + (function(scope) { + "use strict"; + var HTMLElement = scope.wrappers.HTMLElement; + var registerWrapper = scope.registerWrapper; + var OriginalHTMLMediaElement = window.HTMLMediaElement; + if (!OriginalHTMLMediaElement) return; + function HTMLMediaElement(node) { + HTMLElement.call(this, node); + } + HTMLMediaElement.prototype = Object.create(HTMLElement.prototype); + registerWrapper(OriginalHTMLMediaElement, HTMLMediaElement, document.createElement("audio")); + scope.wrappers.HTMLMediaElement = HTMLMediaElement; + })(window.ShadowDOMPolyfill); + (function(scope) { + "use strict"; + var HTMLMediaElement = scope.wrappers.HTMLMediaElement; + var registerWrapper = scope.registerWrapper; + var unwrap = scope.unwrap; + var rewrap = scope.rewrap; + var OriginalHTMLAudioElement = window.HTMLAudioElement; + if (!OriginalHTMLAudioElement) return; + function HTMLAudioElement(node) { + HTMLMediaElement.call(this, node); + } + HTMLAudioElement.prototype = Object.create(HTMLMediaElement.prototype); + registerWrapper(OriginalHTMLAudioElement, HTMLAudioElement, document.createElement("audio")); + function Audio(src) { + if (!(this instanceof Audio)) { + throw new TypeError("DOM object constructor cannot be called as a function."); + } + var node = unwrap(document.createElement("audio")); + HTMLMediaElement.call(this, node); + rewrap(node, this); + node.setAttribute("preload", "auto"); + if (src !== undefined) node.setAttribute("src", src); + } + Audio.prototype = HTMLAudioElement.prototype; + scope.wrappers.HTMLAudioElement = HTMLAudioElement; + scope.wrappers.Audio = Audio; + })(window.ShadowDOMPolyfill); + (function(scope) { + "use strict"; + var HTMLElement = scope.wrappers.HTMLElement; + var mixin = scope.mixin; + var registerWrapper = scope.registerWrapper; + var rewrap = scope.rewrap; + var unwrap = scope.unwrap; + var wrap = scope.wrap; + var OriginalHTMLOptionElement = window.HTMLOptionElement; + function trimText(s) { + return s.replace(/\s+/g, " ").trim(); + } + function HTMLOptionElement(node) { + HTMLElement.call(this, node); + } + HTMLOptionElement.prototype = Object.create(HTMLElement.prototype); + mixin(HTMLOptionElement.prototype, { + get text() { + return trimText(this.textContent); + }, + set text(value) { + this.textContent = trimText(String(value)); + }, + get form() { + return wrap(unwrap(this).form); + } + }); + registerWrapper(OriginalHTMLOptionElement, HTMLOptionElement, document.createElement("option")); + function Option(text, value, defaultSelected, selected) { + if (!(this instanceof Option)) { + throw new TypeError("DOM object constructor cannot be called as a function."); + } + var node = unwrap(document.createElement("option")); + HTMLElement.call(this, node); + rewrap(node, this); + if (text !== undefined) node.text = text; + if (value !== undefined) node.setAttribute("value", value); + if (defaultSelected === true) node.setAttribute("selected", ""); + node.selected = selected === true; + } + Option.prototype = HTMLOptionElement.prototype; + scope.wrappers.HTMLOptionElement = HTMLOptionElement; + scope.wrappers.Option = Option; + })(window.ShadowDOMPolyfill); + (function(scope) { + "use strict"; + var HTMLElement = scope.wrappers.HTMLElement; + var mixin = scope.mixin; + var registerWrapper = scope.registerWrapper; + var unwrap = scope.unwrap; + var wrap = scope.wrap; + var OriginalHTMLSelectElement = window.HTMLSelectElement; + function HTMLSelectElement(node) { + HTMLElement.call(this, node); + } + HTMLSelectElement.prototype = Object.create(HTMLElement.prototype); + mixin(HTMLSelectElement.prototype, { + add: function(element, before) { + if (typeof before === "object") before = unwrap(before); + unwrap(this).add(unwrap(element), before); + }, + remove: function(indexOrNode) { + if (indexOrNode === undefined) { + HTMLElement.prototype.remove.call(this); + return; + } + if (typeof indexOrNode === "object") indexOrNode = unwrap(indexOrNode); + unwrap(this).remove(indexOrNode); + }, + get form() { + return wrap(unwrap(this).form); + } + }); + registerWrapper(OriginalHTMLSelectElement, HTMLSelectElement, document.createElement("select")); + scope.wrappers.HTMLSelectElement = HTMLSelectElement; + })(window.ShadowDOMPolyfill); + (function(scope) { + "use strict"; + var HTMLElement = scope.wrappers.HTMLElement; + var mixin = scope.mixin; + var registerWrapper = scope.registerWrapper; + var unwrap = scope.unwrap; + var wrap = scope.wrap; + var wrapHTMLCollection = scope.wrapHTMLCollection; + var OriginalHTMLTableElement = window.HTMLTableElement; + function HTMLTableElement(node) { + HTMLElement.call(this, node); + } + HTMLTableElement.prototype = Object.create(HTMLElement.prototype); + mixin(HTMLTableElement.prototype, { + get caption() { + return wrap(unwrap(this).caption); + }, + createCaption: function() { + return wrap(unwrap(this).createCaption()); + }, + get tHead() { + return wrap(unwrap(this).tHead); + }, + createTHead: function() { + return wrap(unwrap(this).createTHead()); + }, + createTFoot: function() { + return wrap(unwrap(this).createTFoot()); + }, + get tFoot() { + return wrap(unwrap(this).tFoot); + }, + get tBodies() { + return wrapHTMLCollection(unwrap(this).tBodies); + }, + createTBody: function() { + return wrap(unwrap(this).createTBody()); + }, + get rows() { + return wrapHTMLCollection(unwrap(this).rows); + }, + insertRow: function(index) { + return wrap(unwrap(this).insertRow(index)); + } + }); + registerWrapper(OriginalHTMLTableElement, HTMLTableElement, document.createElement("table")); + scope.wrappers.HTMLTableElement = HTMLTableElement; + })(window.ShadowDOMPolyfill); + (function(scope) { + "use strict"; + var HTMLElement = scope.wrappers.HTMLElement; + var mixin = scope.mixin; + var registerWrapper = scope.registerWrapper; + var wrapHTMLCollection = scope.wrapHTMLCollection; + var unwrap = scope.unwrap; + var wrap = scope.wrap; + var OriginalHTMLTableSectionElement = window.HTMLTableSectionElement; + function HTMLTableSectionElement(node) { + HTMLElement.call(this, node); + } + HTMLTableSectionElement.prototype = Object.create(HTMLElement.prototype); + mixin(HTMLTableSectionElement.prototype, { + constructor: HTMLTableSectionElement, + get rows() { + return wrapHTMLCollection(unwrap(this).rows); + }, + insertRow: function(index) { + return wrap(unwrap(this).insertRow(index)); + } + }); + registerWrapper(OriginalHTMLTableSectionElement, HTMLTableSectionElement, document.createElement("thead")); + scope.wrappers.HTMLTableSectionElement = HTMLTableSectionElement; + })(window.ShadowDOMPolyfill); + (function(scope) { + "use strict"; + var HTMLElement = scope.wrappers.HTMLElement; + var mixin = scope.mixin; + var registerWrapper = scope.registerWrapper; + var wrapHTMLCollection = scope.wrapHTMLCollection; + var unwrap = scope.unwrap; + var wrap = scope.wrap; + var OriginalHTMLTableRowElement = window.HTMLTableRowElement; + function HTMLTableRowElement(node) { + HTMLElement.call(this, node); + } + HTMLTableRowElement.prototype = Object.create(HTMLElement.prototype); + mixin(HTMLTableRowElement.prototype, { + get cells() { + return wrapHTMLCollection(unwrap(this).cells); + }, + insertCell: function(index) { + return wrap(unwrap(this).insertCell(index)); + } + }); + registerWrapper(OriginalHTMLTableRowElement, HTMLTableRowElement, document.createElement("tr")); + scope.wrappers.HTMLTableRowElement = HTMLTableRowElement; + })(window.ShadowDOMPolyfill); + (function(scope) { + "use strict"; + var HTMLContentElement = scope.wrappers.HTMLContentElement; + var HTMLElement = scope.wrappers.HTMLElement; + var HTMLShadowElement = scope.wrappers.HTMLShadowElement; + var HTMLTemplateElement = scope.wrappers.HTMLTemplateElement; + var mixin = scope.mixin; + var registerWrapper = scope.registerWrapper; + var OriginalHTMLUnknownElement = window.HTMLUnknownElement; + function HTMLUnknownElement(node) { + switch (node.localName) { + case "content": + return new HTMLContentElement(node); + + case "shadow": + return new HTMLShadowElement(node); + + case "template": + return new HTMLTemplateElement(node); + } + HTMLElement.call(this, node); + } + HTMLUnknownElement.prototype = Object.create(HTMLElement.prototype); + registerWrapper(OriginalHTMLUnknownElement, HTMLUnknownElement); + scope.wrappers.HTMLUnknownElement = HTMLUnknownElement; + })(window.ShadowDOMPolyfill); + (function(scope) { + "use strict"; + var Element = scope.wrappers.Element; + var HTMLElement = scope.wrappers.HTMLElement; + var registerObject = scope.registerObject; + var defineWrapGetter = scope.defineWrapGetter; + var SVG_NS = "http://www.w3.org/2000/svg"; + var svgTitleElement = document.createElementNS(SVG_NS, "title"); + var SVGTitleElement = registerObject(svgTitleElement); + var SVGElement = Object.getPrototypeOf(SVGTitleElement.prototype).constructor; + if (!("classList" in svgTitleElement)) { + var descr = Object.getOwnPropertyDescriptor(Element.prototype, "classList"); + Object.defineProperty(HTMLElement.prototype, "classList", descr); + delete Element.prototype.classList; + } + defineWrapGetter(SVGElement, "ownerSVGElement"); + scope.wrappers.SVGElement = SVGElement; + })(window.ShadowDOMPolyfill); + (function(scope) { + "use strict"; + var mixin = scope.mixin; + var registerWrapper = scope.registerWrapper; + var unwrap = scope.unwrap; + var wrap = scope.wrap; + var OriginalSVGUseElement = window.SVGUseElement; + var SVG_NS = "http://www.w3.org/2000/svg"; + var gWrapper = wrap(document.createElementNS(SVG_NS, "g")); + var useElement = document.createElementNS(SVG_NS, "use"); + var SVGGElement = gWrapper.constructor; + var parentInterfacePrototype = Object.getPrototypeOf(SVGGElement.prototype); + var parentInterface = parentInterfacePrototype.constructor; + function SVGUseElement(impl) { + parentInterface.call(this, impl); + } + SVGUseElement.prototype = Object.create(parentInterfacePrototype); + if ("instanceRoot" in useElement) { + mixin(SVGUseElement.prototype, { + get instanceRoot() { + return wrap(unwrap(this).instanceRoot); + }, + get animatedInstanceRoot() { + return wrap(unwrap(this).animatedInstanceRoot); + } + }); + } + registerWrapper(OriginalSVGUseElement, SVGUseElement, useElement); + scope.wrappers.SVGUseElement = SVGUseElement; + })(window.ShadowDOMPolyfill); + (function(scope) { + "use strict"; + var EventTarget = scope.wrappers.EventTarget; + var mixin = scope.mixin; + var registerWrapper = scope.registerWrapper; + var unsafeUnwrap = scope.unsafeUnwrap; + var wrap = scope.wrap; + var OriginalSVGElementInstance = window.SVGElementInstance; + if (!OriginalSVGElementInstance) return; + function SVGElementInstance(impl) { + EventTarget.call(this, impl); + } + SVGElementInstance.prototype = Object.create(EventTarget.prototype); + mixin(SVGElementInstance.prototype, { + get correspondingElement() { + return wrap(unsafeUnwrap(this).correspondingElement); + }, + get correspondingUseElement() { + return wrap(unsafeUnwrap(this).correspondingUseElement); + }, + get parentNode() { + return wrap(unsafeUnwrap(this).parentNode); + }, + get childNodes() { + throw new Error("Not implemented"); + }, + get firstChild() { + return wrap(unsafeUnwrap(this).firstChild); + }, + get lastChild() { + return wrap(unsafeUnwrap(this).lastChild); + }, + get previousSibling() { + return wrap(unsafeUnwrap(this).previousSibling); + }, + get nextSibling() { + return wrap(unsafeUnwrap(this).nextSibling); + } + }); + registerWrapper(OriginalSVGElementInstance, SVGElementInstance); + scope.wrappers.SVGElementInstance = SVGElementInstance; + })(window.ShadowDOMPolyfill); + (function(scope) { + "use strict"; + var mixin = scope.mixin; + var registerWrapper = scope.registerWrapper; + var setWrapper = scope.setWrapper; + var unsafeUnwrap = scope.unsafeUnwrap; + var unwrap = scope.unwrap; + var unwrapIfNeeded = scope.unwrapIfNeeded; + var wrap = scope.wrap; + var OriginalCanvasRenderingContext2D = window.CanvasRenderingContext2D; + function CanvasRenderingContext2D(impl) { + setWrapper(impl, this); + } + mixin(CanvasRenderingContext2D.prototype, { + get canvas() { + return wrap(unsafeUnwrap(this).canvas); + }, + drawImage: function() { + arguments[0] = unwrapIfNeeded(arguments[0]); + unsafeUnwrap(this).drawImage.apply(unsafeUnwrap(this), arguments); + }, + createPattern: function() { + arguments[0] = unwrap(arguments[0]); + return unsafeUnwrap(this).createPattern.apply(unsafeUnwrap(this), arguments); + } + }); + registerWrapper(OriginalCanvasRenderingContext2D, CanvasRenderingContext2D, document.createElement("canvas").getContext("2d")); + scope.wrappers.CanvasRenderingContext2D = CanvasRenderingContext2D; + })(window.ShadowDOMPolyfill); + (function(scope) { + "use strict"; + var mixin = scope.mixin; + var registerWrapper = scope.registerWrapper; + var setWrapper = scope.setWrapper; + var unsafeUnwrap = scope.unsafeUnwrap; + var unwrapIfNeeded = scope.unwrapIfNeeded; + var wrap = scope.wrap; + var OriginalWebGLRenderingContext = window.WebGLRenderingContext; + if (!OriginalWebGLRenderingContext) return; + function WebGLRenderingContext(impl) { + setWrapper(impl, this); + } + mixin(WebGLRenderingContext.prototype, { + get canvas() { + return wrap(unsafeUnwrap(this).canvas); + }, + texImage2D: function() { + arguments[5] = unwrapIfNeeded(arguments[5]); + unsafeUnwrap(this).texImage2D.apply(unsafeUnwrap(this), arguments); + }, + texSubImage2D: function() { + arguments[6] = unwrapIfNeeded(arguments[6]); + unsafeUnwrap(this).texSubImage2D.apply(unsafeUnwrap(this), arguments); + } + }); + var instanceProperties = /WebKit/.test(navigator.userAgent) ? { + drawingBufferHeight: null, + drawingBufferWidth: null + } : {}; + registerWrapper(OriginalWebGLRenderingContext, WebGLRenderingContext, instanceProperties); + scope.wrappers.WebGLRenderingContext = WebGLRenderingContext; + })(window.ShadowDOMPolyfill); + (function(scope) { + "use strict"; + var GetElementsByInterface = scope.GetElementsByInterface; + var NonElementParentNodeInterface = scope.NonElementParentNodeInterface; + var ParentNodeInterface = scope.ParentNodeInterface; + var SelectorsInterface = scope.SelectorsInterface; + var mixin = scope.mixin; + var registerObject = scope.registerObject; + var DocumentFragment = registerObject(document.createDocumentFragment()); + mixin(DocumentFragment.prototype, ParentNodeInterface); + mixin(DocumentFragment.prototype, SelectorsInterface); + mixin(DocumentFragment.prototype, GetElementsByInterface); + mixin(DocumentFragment.prototype, NonElementParentNodeInterface); + var Comment = registerObject(document.createComment("")); + scope.wrappers.Comment = Comment; + scope.wrappers.DocumentFragment = DocumentFragment; + })(window.ShadowDOMPolyfill); + (function(scope) { + "use strict"; + var DocumentFragment = scope.wrappers.DocumentFragment; + var TreeScope = scope.TreeScope; + var elementFromPoint = scope.elementFromPoint; + var getInnerHTML = scope.getInnerHTML; + var getTreeScope = scope.getTreeScope; + var mixin = scope.mixin; + var rewrap = scope.rewrap; + var setInnerHTML = scope.setInnerHTML; + var unsafeUnwrap = scope.unsafeUnwrap; + var unwrap = scope.unwrap; + var shadowHostTable = new WeakMap(); + var nextOlderShadowTreeTable = new WeakMap(); + function ShadowRoot(hostWrapper) { + var node = unwrap(unsafeUnwrap(hostWrapper).ownerDocument.createDocumentFragment()); + DocumentFragment.call(this, node); + rewrap(node, this); + var oldShadowRoot = hostWrapper.shadowRoot; + nextOlderShadowTreeTable.set(this, oldShadowRoot); + this.treeScope_ = new TreeScope(this, getTreeScope(oldShadowRoot || hostWrapper)); + shadowHostTable.set(this, hostWrapper); + } + ShadowRoot.prototype = Object.create(DocumentFragment.prototype); + mixin(ShadowRoot.prototype, { + constructor: ShadowRoot, + get innerHTML() { + return getInnerHTML(this); + }, + set innerHTML(value) { + setInnerHTML(this, value); + this.invalidateShadowRenderer(); + }, + get olderShadowRoot() { + return nextOlderShadowTreeTable.get(this) || null; + }, + get host() { + return shadowHostTable.get(this) || null; + }, + invalidateShadowRenderer: function() { + return shadowHostTable.get(this).invalidateShadowRenderer(); + }, + elementFromPoint: function(x, y) { + return elementFromPoint(this, this.ownerDocument, x, y); + } + }); + scope.wrappers.ShadowRoot = ShadowRoot; + })(window.ShadowDOMPolyfill); + (function(scope) { + "use strict"; + var registerWrapper = scope.registerWrapper; + var setWrapper = scope.setWrapper; + var unsafeUnwrap = scope.unsafeUnwrap; + var unwrap = scope.unwrap; + var unwrapIfNeeded = scope.unwrapIfNeeded; + var wrap = scope.wrap; + var getTreeScope = scope.getTreeScope; + var OriginalRange = window.Range; + var ShadowRoot = scope.wrappers.ShadowRoot; + function getHost(node) { + var root = getTreeScope(node).root; + if (root instanceof ShadowRoot) { + return root.host; + } + return null; + } + function hostNodeToShadowNode(refNode, offset) { + if (refNode.shadowRoot) { + offset = Math.min(refNode.childNodes.length - 1, offset); + var child = refNode.childNodes[offset]; + if (child) { + var insertionPoint = scope.getDestinationInsertionPoints(child); + if (insertionPoint.length > 0) { + var parentNode = insertionPoint[0].parentNode; + if (parentNode.nodeType == Node.ELEMENT_NODE) { + refNode = parentNode; + } + } + } + } + return refNode; + } + function shadowNodeToHostNode(node) { + node = wrap(node); + return getHost(node) || node; + } + function Range(impl) { + setWrapper(impl, this); + } + Range.prototype = { + get startContainer() { + return shadowNodeToHostNode(unsafeUnwrap(this).startContainer); + }, + get endContainer() { + return shadowNodeToHostNode(unsafeUnwrap(this).endContainer); + }, + get commonAncestorContainer() { + return shadowNodeToHostNode(unsafeUnwrap(this).commonAncestorContainer); + }, + setStart: function(refNode, offset) { + refNode = hostNodeToShadowNode(refNode, offset); + unsafeUnwrap(this).setStart(unwrapIfNeeded(refNode), offset); + }, + setEnd: function(refNode, offset) { + refNode = hostNodeToShadowNode(refNode, offset); + unsafeUnwrap(this).setEnd(unwrapIfNeeded(refNode), offset); + }, + setStartBefore: function(refNode) { + unsafeUnwrap(this).setStartBefore(unwrapIfNeeded(refNode)); + }, + setStartAfter: function(refNode) { + unsafeUnwrap(this).setStartAfter(unwrapIfNeeded(refNode)); + }, + setEndBefore: function(refNode) { + unsafeUnwrap(this).setEndBefore(unwrapIfNeeded(refNode)); + }, + setEndAfter: function(refNode) { + unsafeUnwrap(this).setEndAfter(unwrapIfNeeded(refNode)); + }, + selectNode: function(refNode) { + unsafeUnwrap(this).selectNode(unwrapIfNeeded(refNode)); + }, + selectNodeContents: function(refNode) { + unsafeUnwrap(this).selectNodeContents(unwrapIfNeeded(refNode)); + }, + compareBoundaryPoints: function(how, sourceRange) { + return unsafeUnwrap(this).compareBoundaryPoints(how, unwrap(sourceRange)); + }, + extractContents: function() { + return wrap(unsafeUnwrap(this).extractContents()); + }, + cloneContents: function() { + return wrap(unsafeUnwrap(this).cloneContents()); + }, + insertNode: function(node) { + unsafeUnwrap(this).insertNode(unwrapIfNeeded(node)); + }, + surroundContents: function(newParent) { + unsafeUnwrap(this).surroundContents(unwrapIfNeeded(newParent)); + }, + cloneRange: function() { + return wrap(unsafeUnwrap(this).cloneRange()); + }, + isPointInRange: function(node, offset) { + return unsafeUnwrap(this).isPointInRange(unwrapIfNeeded(node), offset); + }, + comparePoint: function(node, offset) { + return unsafeUnwrap(this).comparePoint(unwrapIfNeeded(node), offset); + }, + intersectsNode: function(node) { + return unsafeUnwrap(this).intersectsNode(unwrapIfNeeded(node)); + }, + toString: function() { + return unsafeUnwrap(this).toString(); + } + }; + if (OriginalRange.prototype.createContextualFragment) { + Range.prototype.createContextualFragment = function(html) { + return wrap(unsafeUnwrap(this).createContextualFragment(html)); + }; + } + registerWrapper(window.Range, Range, document.createRange()); + scope.wrappers.Range = Range; + })(window.ShadowDOMPolyfill); + (function(scope) { + "use strict"; + var Element = scope.wrappers.Element; + var HTMLContentElement = scope.wrappers.HTMLContentElement; + var HTMLShadowElement = scope.wrappers.HTMLShadowElement; + var Node = scope.wrappers.Node; + var ShadowRoot = scope.wrappers.ShadowRoot; + var assert = scope.assert; + var getTreeScope = scope.getTreeScope; + var mixin = scope.mixin; + var oneOf = scope.oneOf; + var unsafeUnwrap = scope.unsafeUnwrap; + var unwrap = scope.unwrap; + var wrap = scope.wrap; + var ArraySplice = scope.ArraySplice; + function updateWrapperUpAndSideways(wrapper) { + wrapper.previousSibling_ = wrapper.previousSibling; + wrapper.nextSibling_ = wrapper.nextSibling; + wrapper.parentNode_ = wrapper.parentNode; + } + function updateWrapperDown(wrapper) { + wrapper.firstChild_ = wrapper.firstChild; + wrapper.lastChild_ = wrapper.lastChild; + } + function updateAllChildNodes(parentNodeWrapper) { + assert(parentNodeWrapper instanceof Node); + for (var childWrapper = parentNodeWrapper.firstChild; childWrapper; childWrapper = childWrapper.nextSibling) { + updateWrapperUpAndSideways(childWrapper); + } + updateWrapperDown(parentNodeWrapper); + } + function insertBefore(parentNodeWrapper, newChildWrapper, refChildWrapper) { + var parentNode = unwrap(parentNodeWrapper); + var newChild = unwrap(newChildWrapper); + var refChild = refChildWrapper ? unwrap(refChildWrapper) : null; + remove(newChildWrapper); + updateWrapperUpAndSideways(newChildWrapper); + if (!refChildWrapper) { + parentNodeWrapper.lastChild_ = parentNodeWrapper.lastChild; + if (parentNodeWrapper.lastChild === parentNodeWrapper.firstChild) parentNodeWrapper.firstChild_ = parentNodeWrapper.firstChild; + var lastChildWrapper = wrap(parentNode.lastChild); + if (lastChildWrapper) lastChildWrapper.nextSibling_ = lastChildWrapper.nextSibling; + } else { + if (parentNodeWrapper.firstChild === refChildWrapper) parentNodeWrapper.firstChild_ = refChildWrapper; + refChildWrapper.previousSibling_ = refChildWrapper.previousSibling; + } + scope.originalInsertBefore.call(parentNode, newChild, refChild); + } + function remove(nodeWrapper) { + var node = unwrap(nodeWrapper); + var parentNode = node.parentNode; + if (!parentNode) return; + var parentNodeWrapper = wrap(parentNode); + updateWrapperUpAndSideways(nodeWrapper); + if (nodeWrapper.previousSibling) nodeWrapper.previousSibling.nextSibling_ = nodeWrapper; + if (nodeWrapper.nextSibling) nodeWrapper.nextSibling.previousSibling_ = nodeWrapper; + if (parentNodeWrapper.lastChild === nodeWrapper) parentNodeWrapper.lastChild_ = nodeWrapper; + if (parentNodeWrapper.firstChild === nodeWrapper) parentNodeWrapper.firstChild_ = nodeWrapper; + scope.originalRemoveChild.call(parentNode, node); + } + var distributedNodesTable = new WeakMap(); + var destinationInsertionPointsTable = new WeakMap(); + var rendererForHostTable = new WeakMap(); + function resetDistributedNodes(insertionPoint) { + distributedNodesTable.set(insertionPoint, []); + } + function getDistributedNodes(insertionPoint) { + var rv = distributedNodesTable.get(insertionPoint); + if (!rv) distributedNodesTable.set(insertionPoint, rv = []); + return rv; + } + function getChildNodesSnapshot(node) { + var result = [], i = 0; + for (var child = node.firstChild; child; child = child.nextSibling) { + result[i++] = child; + } + return result; + } + var request = oneOf(window, [ "requestAnimationFrame", "mozRequestAnimationFrame", "webkitRequestAnimationFrame", "setTimeout" ]); + var pendingDirtyRenderers = []; + var renderTimer; + function renderAllPending() { + for (var i = 0; i < pendingDirtyRenderers.length; i++) { + var renderer = pendingDirtyRenderers[i]; + var parentRenderer = renderer.parentRenderer; + if (parentRenderer && parentRenderer.dirty) continue; + renderer.render(); + } + pendingDirtyRenderers = []; + } + function handleRequestAnimationFrame() { + renderTimer = null; + renderAllPending(); + } + function getRendererForHost(host) { + var renderer = rendererForHostTable.get(host); + if (!renderer) { + renderer = new ShadowRenderer(host); + rendererForHostTable.set(host, renderer); + } + return renderer; + } + function getShadowRootAncestor(node) { + var root = getTreeScope(node).root; + if (root instanceof ShadowRoot) return root; + return null; + } + function getRendererForShadowRoot(shadowRoot) { + return getRendererForHost(shadowRoot.host); + } + var spliceDiff = new ArraySplice(); + spliceDiff.equals = function(renderNode, rawNode) { + return unwrap(renderNode.node) === rawNode; + }; + function RenderNode(node) { + this.skip = false; + this.node = node; + this.childNodes = []; + } + RenderNode.prototype = { + append: function(node) { + var rv = new RenderNode(node); + this.childNodes.push(rv); + return rv; + }, + sync: function(opt_added) { + if (this.skip) return; + var nodeWrapper = this.node; + var newChildren = this.childNodes; + var oldChildren = getChildNodesSnapshot(unwrap(nodeWrapper)); + var added = opt_added || new WeakMap(); + var splices = spliceDiff.calculateSplices(newChildren, oldChildren); + var newIndex = 0, oldIndex = 0; + var lastIndex = 0; + for (var i = 0; i < splices.length; i++) { + var splice = splices[i]; + for (;lastIndex < splice.index; lastIndex++) { + oldIndex++; + newChildren[newIndex++].sync(added); + } + var removedCount = splice.removed.length; + for (var j = 0; j < removedCount; j++) { + var wrapper = wrap(oldChildren[oldIndex++]); + if (!added.get(wrapper)) remove(wrapper); + } + var addedCount = splice.addedCount; + var refNode = oldChildren[oldIndex] && wrap(oldChildren[oldIndex]); + for (var j = 0; j < addedCount; j++) { + var newChildRenderNode = newChildren[newIndex++]; + var newChildWrapper = newChildRenderNode.node; + insertBefore(nodeWrapper, newChildWrapper, refNode); + added.set(newChildWrapper, true); + newChildRenderNode.sync(added); + } + lastIndex += addedCount; + } + for (var i = lastIndex; i < newChildren.length; i++) { + newChildren[i].sync(added); + } + } + }; + function ShadowRenderer(host) { + this.host = host; + this.dirty = false; + this.invalidateAttributes(); + this.associateNode(host); + } + ShadowRenderer.prototype = { + render: function(opt_renderNode) { + if (!this.dirty) return; + this.invalidateAttributes(); + var host = this.host; + this.distribution(host); + var renderNode = opt_renderNode || new RenderNode(host); + this.buildRenderTree(renderNode, host); + var topMostRenderer = !opt_renderNode; + if (topMostRenderer) renderNode.sync(); + this.dirty = false; + }, + get parentRenderer() { + return getTreeScope(this.host).renderer; + }, + invalidate: function() { + if (!this.dirty) { + this.dirty = true; + var parentRenderer = this.parentRenderer; + if (parentRenderer) parentRenderer.invalidate(); + pendingDirtyRenderers.push(this); + if (renderTimer) return; + renderTimer = window[request](handleRequestAnimationFrame, 0); + } + }, + distribution: function(root) { + this.resetAllSubtrees(root); + this.distributionResolution(root); + }, + resetAll: function(node) { + if (isInsertionPoint(node)) resetDistributedNodes(node); else resetDestinationInsertionPoints(node); + this.resetAllSubtrees(node); + }, + resetAllSubtrees: function(node) { + for (var child = node.firstChild; child; child = child.nextSibling) { + this.resetAll(child); + } + if (node.shadowRoot) this.resetAll(node.shadowRoot); + if (node.olderShadowRoot) this.resetAll(node.olderShadowRoot); + }, + distributionResolution: function(node) { + if (isShadowHost(node)) { + var shadowHost = node; + var pool = poolPopulation(shadowHost); + var shadowTrees = getShadowTrees(shadowHost); + for (var i = 0; i < shadowTrees.length; i++) { + this.poolDistribution(shadowTrees[i], pool); + } + for (var i = shadowTrees.length - 1; i >= 0; i--) { + var shadowTree = shadowTrees[i]; + var shadow = getShadowInsertionPoint(shadowTree); + if (shadow) { + var olderShadowRoot = shadowTree.olderShadowRoot; + if (olderShadowRoot) { + pool = poolPopulation(olderShadowRoot); + } + for (var j = 0; j < pool.length; j++) { + destributeNodeInto(pool[j], shadow); + } + } + this.distributionResolution(shadowTree); + } + } + for (var child = node.firstChild; child; child = child.nextSibling) { + this.distributionResolution(child); + } + }, + poolDistribution: function(node, pool) { + if (node instanceof HTMLShadowElement) return; + if (node instanceof HTMLContentElement) { + var content = node; + this.updateDependentAttributes(content.getAttribute("select")); + var anyDistributed = false; + for (var i = 0; i < pool.length; i++) { + var node = pool[i]; + if (!node) continue; + if (matches(node, content)) { + destributeNodeInto(node, content); + pool[i] = undefined; + anyDistributed = true; + } + } + if (!anyDistributed) { + for (var child = content.firstChild; child; child = child.nextSibling) { + destributeNodeInto(child, content); + } + } + return; + } + for (var child = node.firstChild; child; child = child.nextSibling) { + this.poolDistribution(child, pool); + } + }, + buildRenderTree: function(renderNode, node) { + var children = this.compose(node); + for (var i = 0; i < children.length; i++) { + var child = children[i]; + var childRenderNode = renderNode.append(child); + this.buildRenderTree(childRenderNode, child); + } + if (isShadowHost(node)) { + var renderer = getRendererForHost(node); + renderer.dirty = false; + } + }, + compose: function(node) { + var children = []; + var p = node.shadowRoot || node; + for (var child = p.firstChild; child; child = child.nextSibling) { + if (isInsertionPoint(child)) { + this.associateNode(p); + var distributedNodes = getDistributedNodes(child); + for (var j = 0; j < distributedNodes.length; j++) { + var distributedNode = distributedNodes[j]; + if (isFinalDestination(child, distributedNode)) children.push(distributedNode); + } + } else { + children.push(child); + } + } + return children; + }, + invalidateAttributes: function() { + this.attributes = Object.create(null); + }, + updateDependentAttributes: function(selector) { + if (!selector) return; + var attributes = this.attributes; + if (/\.\w+/.test(selector)) attributes["class"] = true; + if (/#\w+/.test(selector)) attributes["id"] = true; + selector.replace(/\[\s*([^\s=\|~\]]+)/g, function(_, name) { + attributes[name] = true; + }); + }, + dependsOnAttribute: function(name) { + return this.attributes[name]; + }, + associateNode: function(node) { + unsafeUnwrap(node).polymerShadowRenderer_ = this; + } + }; + function poolPopulation(node) { + var pool = []; + for (var child = node.firstChild; child; child = child.nextSibling) { + if (isInsertionPoint(child)) { + pool.push.apply(pool, getDistributedNodes(child)); + } else { + pool.push(child); + } + } + return pool; + } + function getShadowInsertionPoint(node) { + if (node instanceof HTMLShadowElement) return node; + if (node instanceof HTMLContentElement) return null; + for (var child = node.firstChild; child; child = child.nextSibling) { + var res = getShadowInsertionPoint(child); + if (res) return res; + } + return null; + } + function destributeNodeInto(child, insertionPoint) { + getDistributedNodes(insertionPoint).push(child); + var points = destinationInsertionPointsTable.get(child); + if (!points) destinationInsertionPointsTable.set(child, [ insertionPoint ]); else points.push(insertionPoint); + } + function getDestinationInsertionPoints(node) { + return destinationInsertionPointsTable.get(node); + } + function resetDestinationInsertionPoints(node) { + destinationInsertionPointsTable.set(node, undefined); + } + var selectorStartCharRe = /^(:not\()?[*.#[a-zA-Z_|]/; + function matches(node, contentElement) { + var select = contentElement.getAttribute("select"); + if (!select) return true; + select = select.trim(); + if (!select) return true; + if (!(node instanceof Element)) return false; + if (!selectorStartCharRe.test(select)) return false; + try { + return node.matches(select); + } catch (ex) { + return false; + } + } + function isFinalDestination(insertionPoint, node) { + var points = getDestinationInsertionPoints(node); + return points && points[points.length - 1] === insertionPoint; + } + function isInsertionPoint(node) { + return node instanceof HTMLContentElement || node instanceof HTMLShadowElement; + } + function isShadowHost(shadowHost) { + return shadowHost.shadowRoot; + } + function getShadowTrees(host) { + var trees = []; + for (var tree = host.shadowRoot; tree; tree = tree.olderShadowRoot) { + trees.push(tree); + } + return trees; + } + function render(host) { + new ShadowRenderer(host).render(); + } + Node.prototype.invalidateShadowRenderer = function(force) { + var renderer = unsafeUnwrap(this).polymerShadowRenderer_; + if (renderer) { + renderer.invalidate(); + return true; + } + return false; + }; + HTMLContentElement.prototype.getDistributedNodes = HTMLShadowElement.prototype.getDistributedNodes = function() { + renderAllPending(); + return getDistributedNodes(this); + }; + Element.prototype.getDestinationInsertionPoints = function() { + renderAllPending(); + return getDestinationInsertionPoints(this) || []; + }; + HTMLContentElement.prototype.nodeIsInserted_ = HTMLShadowElement.prototype.nodeIsInserted_ = function() { + this.invalidateShadowRenderer(); + var shadowRoot = getShadowRootAncestor(this); + var renderer; + if (shadowRoot) renderer = getRendererForShadowRoot(shadowRoot); + unsafeUnwrap(this).polymerShadowRenderer_ = renderer; + if (renderer) renderer.invalidate(); + }; + scope.getRendererForHost = getRendererForHost; + scope.getShadowTrees = getShadowTrees; + scope.renderAllPending = renderAllPending; + scope.getDestinationInsertionPoints = getDestinationInsertionPoints; + scope.visual = { + insertBefore: insertBefore, + remove: remove + }; + })(window.ShadowDOMPolyfill); + (function(scope) { + "use strict"; + var HTMLElement = scope.wrappers.HTMLElement; + var assert = scope.assert; + var mixin = scope.mixin; + var registerWrapper = scope.registerWrapper; + var unwrap = scope.unwrap; + var wrap = scope.wrap; + var elementsWithFormProperty = [ "HTMLButtonElement", "HTMLFieldSetElement", "HTMLInputElement", "HTMLKeygenElement", "HTMLLabelElement", "HTMLLegendElement", "HTMLObjectElement", "HTMLOutputElement", "HTMLTextAreaElement" ]; + function createWrapperConstructor(name) { + if (!window[name]) return; + assert(!scope.wrappers[name]); + var GeneratedWrapper = function(node) { + HTMLElement.call(this, node); + }; + GeneratedWrapper.prototype = Object.create(HTMLElement.prototype); + mixin(GeneratedWrapper.prototype, { + get form() { + return wrap(unwrap(this).form); + } + }); + registerWrapper(window[name], GeneratedWrapper, document.createElement(name.slice(4, -7))); + scope.wrappers[name] = GeneratedWrapper; + } + elementsWithFormProperty.forEach(createWrapperConstructor); + })(window.ShadowDOMPolyfill); + (function(scope) { + "use strict"; + var registerWrapper = scope.registerWrapper; + var setWrapper = scope.setWrapper; + var unsafeUnwrap = scope.unsafeUnwrap; + var unwrap = scope.unwrap; + var unwrapIfNeeded = scope.unwrapIfNeeded; + var wrap = scope.wrap; + var OriginalSelection = window.Selection; + function Selection(impl) { + setWrapper(impl, this); + } + Selection.prototype = { + get anchorNode() { + return wrap(unsafeUnwrap(this).anchorNode); + }, + get focusNode() { + return wrap(unsafeUnwrap(this).focusNode); + }, + addRange: function(range) { + unsafeUnwrap(this).addRange(unwrapIfNeeded(range)); + }, + collapse: function(node, index) { + unsafeUnwrap(this).collapse(unwrapIfNeeded(node), index); + }, + containsNode: function(node, allowPartial) { + return unsafeUnwrap(this).containsNode(unwrapIfNeeded(node), allowPartial); + }, + getRangeAt: function(index) { + return wrap(unsafeUnwrap(this).getRangeAt(index)); + }, + removeRange: function(range) { + unsafeUnwrap(this).removeRange(unwrap(range)); + }, + selectAllChildren: function(node) { + unsafeUnwrap(this).selectAllChildren(unwrapIfNeeded(node)); + }, + toString: function() { + return unsafeUnwrap(this).toString(); + } + }; + if (OriginalSelection.prototype.extend) { + Selection.prototype.extend = function(node, offset) { + unsafeUnwrap(this).extend(unwrapIfNeeded(node), offset); + }; + } + registerWrapper(window.Selection, Selection, window.getSelection()); + scope.wrappers.Selection = Selection; + })(window.ShadowDOMPolyfill); + (function(scope) { + "use strict"; + var registerWrapper = scope.registerWrapper; + var setWrapper = scope.setWrapper; + var unsafeUnwrap = scope.unsafeUnwrap; + var unwrapIfNeeded = scope.unwrapIfNeeded; + var wrap = scope.wrap; + var OriginalTreeWalker = window.TreeWalker; + function TreeWalker(impl) { + setWrapper(impl, this); + } + TreeWalker.prototype = { + get root() { + return wrap(unsafeUnwrap(this).root); + }, + get currentNode() { + return wrap(unsafeUnwrap(this).currentNode); + }, + set currentNode(node) { + unsafeUnwrap(this).currentNode = unwrapIfNeeded(node); + }, + get filter() { + return unsafeUnwrap(this).filter; + }, + parentNode: function() { + return wrap(unsafeUnwrap(this).parentNode()); + }, + firstChild: function() { + return wrap(unsafeUnwrap(this).firstChild()); + }, + lastChild: function() { + return wrap(unsafeUnwrap(this).lastChild()); + }, + previousSibling: function() { + return wrap(unsafeUnwrap(this).previousSibling()); + }, + previousNode: function() { + return wrap(unsafeUnwrap(this).previousNode()); + }, + nextNode: function() { + return wrap(unsafeUnwrap(this).nextNode()); + } + }; + registerWrapper(OriginalTreeWalker, TreeWalker); + scope.wrappers.TreeWalker = TreeWalker; + })(window.ShadowDOMPolyfill); + (function(scope) { + "use strict"; + var GetElementsByInterface = scope.GetElementsByInterface; + var Node = scope.wrappers.Node; + var ParentNodeInterface = scope.ParentNodeInterface; + var NonElementParentNodeInterface = scope.NonElementParentNodeInterface; + var Selection = scope.wrappers.Selection; + var SelectorsInterface = scope.SelectorsInterface; + var ShadowRoot = scope.wrappers.ShadowRoot; + var TreeScope = scope.TreeScope; + var cloneNode = scope.cloneNode; + var defineWrapGetter = scope.defineWrapGetter; + var elementFromPoint = scope.elementFromPoint; + var forwardMethodsToWrapper = scope.forwardMethodsToWrapper; + var matchesNames = scope.matchesNames; + var mixin = scope.mixin; + var registerWrapper = scope.registerWrapper; + var renderAllPending = scope.renderAllPending; + var rewrap = scope.rewrap; + var setWrapper = scope.setWrapper; + var unsafeUnwrap = scope.unsafeUnwrap; + var unwrap = scope.unwrap; + var wrap = scope.wrap; + var wrapEventTargetMethods = scope.wrapEventTargetMethods; + var wrapNodeList = scope.wrapNodeList; + var implementationTable = new WeakMap(); + function Document(node) { + Node.call(this, node); + this.treeScope_ = new TreeScope(this, null); + } + Document.prototype = Object.create(Node.prototype); + defineWrapGetter(Document, "documentElement"); + defineWrapGetter(Document, "body"); + defineWrapGetter(Document, "head"); + function wrapMethod(name) { + var original = document[name]; + Document.prototype[name] = function() { + return wrap(original.apply(unsafeUnwrap(this), arguments)); + }; + } + [ "createComment", "createDocumentFragment", "createElement", "createElementNS", "createEvent", "createEventNS", "createRange", "createTextNode" ].forEach(wrapMethod); + var originalAdoptNode = document.adoptNode; + function adoptNodeNoRemove(node, doc) { + originalAdoptNode.call(unsafeUnwrap(doc), unwrap(node)); + adoptSubtree(node, doc); + } + function adoptSubtree(node, doc) { + if (node.shadowRoot) doc.adoptNode(node.shadowRoot); + if (node instanceof ShadowRoot) adoptOlderShadowRoots(node, doc); + for (var child = node.firstChild; child; child = child.nextSibling) { + adoptSubtree(child, doc); + } + } + function adoptOlderShadowRoots(shadowRoot, doc) { + var oldShadowRoot = shadowRoot.olderShadowRoot; + if (oldShadowRoot) doc.adoptNode(oldShadowRoot); + } + var originalGetSelection = document.getSelection; + mixin(Document.prototype, { + adoptNode: function(node) { + if (node.parentNode) node.parentNode.removeChild(node); + adoptNodeNoRemove(node, this); + return node; + }, + elementFromPoint: function(x, y) { + return elementFromPoint(this, this, x, y); + }, + importNode: function(node, deep) { + return cloneNode(node, deep, unsafeUnwrap(this)); + }, + getSelection: function() { + renderAllPending(); + return new Selection(originalGetSelection.call(unwrap(this))); + }, + getElementsByName: function(name) { + return SelectorsInterface.querySelectorAll.call(this, "[name=" + JSON.stringify(String(name)) + "]"); + } + }); + var originalCreateTreeWalker = document.createTreeWalker; + var TreeWalkerWrapper = scope.wrappers.TreeWalker; + Document.prototype.createTreeWalker = function(root, whatToShow, filter, expandEntityReferences) { + var newFilter = null; + if (filter) { + if (filter.acceptNode && typeof filter.acceptNode === "function") { + newFilter = { + acceptNode: function(node) { + return filter.acceptNode(wrap(node)); + } + }; + } else if (typeof filter === "function") { + newFilter = function(node) { + return filter(wrap(node)); + }; + } + } + return new TreeWalkerWrapper(originalCreateTreeWalker.call(unwrap(this), unwrap(root), whatToShow, newFilter, expandEntityReferences)); + }; + if (document.registerElement) { + var originalRegisterElement = document.registerElement; + Document.prototype.registerElement = function(tagName, object) { + var prototype, extendsOption; + if (object !== undefined) { + prototype = object.prototype; + extendsOption = object.extends; + } + if (!prototype) prototype = Object.create(HTMLElement.prototype); + if (scope.nativePrototypeTable.get(prototype)) { + throw new Error("NotSupportedError"); + } + var proto = Object.getPrototypeOf(prototype); + var nativePrototype; + var prototypes = []; + while (proto) { + nativePrototype = scope.nativePrototypeTable.get(proto); + if (nativePrototype) break; + prototypes.push(proto); + proto = Object.getPrototypeOf(proto); + } + if (!nativePrototype) { + throw new Error("NotSupportedError"); + } + var newPrototype = Object.create(nativePrototype); + for (var i = prototypes.length - 1; i >= 0; i--) { + newPrototype = Object.create(newPrototype); + } + [ "createdCallback", "attachedCallback", "detachedCallback", "attributeChangedCallback" ].forEach(function(name) { + var f = prototype[name]; + if (!f) return; + newPrototype[name] = function() { + if (!(wrap(this) instanceof CustomElementConstructor)) { + rewrap(this); + } + f.apply(wrap(this), arguments); + }; + }); + var p = { + prototype: newPrototype + }; + if (extendsOption) p.extends = extendsOption; + function CustomElementConstructor(node) { + if (!node) { + if (extendsOption) { + return document.createElement(extendsOption, tagName); + } else { + return document.createElement(tagName); + } + } + setWrapper(node, this); + } + CustomElementConstructor.prototype = prototype; + CustomElementConstructor.prototype.constructor = CustomElementConstructor; + scope.constructorTable.set(newPrototype, CustomElementConstructor); + scope.nativePrototypeTable.set(prototype, newPrototype); + var nativeConstructor = originalRegisterElement.call(unwrap(this), tagName, p); + return CustomElementConstructor; + }; + forwardMethodsToWrapper([ window.HTMLDocument || window.Document ], [ "registerElement" ]); + } + forwardMethodsToWrapper([ window.HTMLBodyElement, window.HTMLDocument || window.Document, window.HTMLHeadElement, window.HTMLHtmlElement ], [ "appendChild", "compareDocumentPosition", "contains", "getElementsByClassName", "getElementsByTagName", "getElementsByTagNameNS", "insertBefore", "querySelector", "querySelectorAll", "removeChild", "replaceChild" ]); + forwardMethodsToWrapper([ window.HTMLBodyElement, window.HTMLHeadElement, window.HTMLHtmlElement ], matchesNames); + forwardMethodsToWrapper([ window.HTMLDocument || window.Document ], [ "adoptNode", "importNode", "contains", "createComment", "createDocumentFragment", "createElement", "createElementNS", "createEvent", "createEventNS", "createRange", "createTextNode", "createTreeWalker", "elementFromPoint", "getElementById", "getElementsByName", "getSelection" ]); + mixin(Document.prototype, GetElementsByInterface); + mixin(Document.prototype, ParentNodeInterface); + mixin(Document.prototype, SelectorsInterface); + mixin(Document.prototype, NonElementParentNodeInterface); + mixin(Document.prototype, { + get implementation() { + var implementation = implementationTable.get(this); + if (implementation) return implementation; + implementation = new DOMImplementation(unwrap(this).implementation); + implementationTable.set(this, implementation); + return implementation; + }, + get defaultView() { + return wrap(unwrap(this).defaultView); + } + }); + registerWrapper(window.Document, Document, document.implementation.createHTMLDocument("")); + if (window.HTMLDocument) registerWrapper(window.HTMLDocument, Document); + wrapEventTargetMethods([ window.HTMLBodyElement, window.HTMLDocument || window.Document, window.HTMLHeadElement ]); + function DOMImplementation(impl) { + setWrapper(impl, this); + } + var originalCreateDocument = document.implementation.createDocument; + DOMImplementation.prototype.createDocument = function() { + arguments[2] = unwrap(arguments[2]); + return wrap(originalCreateDocument.apply(unsafeUnwrap(this), arguments)); + }; + function wrapImplMethod(constructor, name) { + var original = document.implementation[name]; + constructor.prototype[name] = function() { + return wrap(original.apply(unsafeUnwrap(this), arguments)); + }; + } + function forwardImplMethod(constructor, name) { + var original = document.implementation[name]; + constructor.prototype[name] = function() { + return original.apply(unsafeUnwrap(this), arguments); + }; + } + wrapImplMethod(DOMImplementation, "createDocumentType"); + wrapImplMethod(DOMImplementation, "createHTMLDocument"); + forwardImplMethod(DOMImplementation, "hasFeature"); + registerWrapper(window.DOMImplementation, DOMImplementation); + forwardMethodsToWrapper([ window.DOMImplementation ], [ "createDocument", "createDocumentType", "createHTMLDocument", "hasFeature" ]); + scope.adoptNodeNoRemove = adoptNodeNoRemove; + scope.wrappers.DOMImplementation = DOMImplementation; + scope.wrappers.Document = Document; + })(window.ShadowDOMPolyfill); + (function(scope) { + "use strict"; + var EventTarget = scope.wrappers.EventTarget; + var Selection = scope.wrappers.Selection; + var mixin = scope.mixin; + var registerWrapper = scope.registerWrapper; + var renderAllPending = scope.renderAllPending; + var unwrap = scope.unwrap; + var unwrapIfNeeded = scope.unwrapIfNeeded; + var wrap = scope.wrap; + var OriginalWindow = window.Window; + var originalGetComputedStyle = window.getComputedStyle; + var originalGetDefaultComputedStyle = window.getDefaultComputedStyle; + var originalGetSelection = window.getSelection; + function Window(impl) { + EventTarget.call(this, impl); + } + Window.prototype = Object.create(EventTarget.prototype); + OriginalWindow.prototype.getComputedStyle = function(el, pseudo) { + return wrap(this || window).getComputedStyle(unwrapIfNeeded(el), pseudo); + }; + if (originalGetDefaultComputedStyle) { + OriginalWindow.prototype.getDefaultComputedStyle = function(el, pseudo) { + return wrap(this || window).getDefaultComputedStyle(unwrapIfNeeded(el), pseudo); + }; + } + OriginalWindow.prototype.getSelection = function() { + return wrap(this || window).getSelection(); + }; + delete window.getComputedStyle; + delete window.getDefaultComputedStyle; + delete window.getSelection; + [ "addEventListener", "removeEventListener", "dispatchEvent" ].forEach(function(name) { + OriginalWindow.prototype[name] = function() { + var w = wrap(this || window); + return w[name].apply(w, arguments); + }; + delete window[name]; + }); + mixin(Window.prototype, { + getComputedStyle: function(el, pseudo) { + renderAllPending(); + return originalGetComputedStyle.call(unwrap(this), unwrapIfNeeded(el), pseudo); + }, + getSelection: function() { + renderAllPending(); + return new Selection(originalGetSelection.call(unwrap(this))); + }, + get document() { + return wrap(unwrap(this).document); + } + }); + if (originalGetDefaultComputedStyle) { + Window.prototype.getDefaultComputedStyle = function(el, pseudo) { + renderAllPending(); + return originalGetDefaultComputedStyle.call(unwrap(this), unwrapIfNeeded(el), pseudo); + }; + } + registerWrapper(OriginalWindow, Window, window); + scope.wrappers.Window = Window; + })(window.ShadowDOMPolyfill); + (function(scope) { + "use strict"; + var unwrap = scope.unwrap; + var OriginalDataTransfer = window.DataTransfer || window.Clipboard; + var OriginalDataTransferSetDragImage = OriginalDataTransfer.prototype.setDragImage; + if (OriginalDataTransferSetDragImage) { + OriginalDataTransfer.prototype.setDragImage = function(image, x, y) { + OriginalDataTransferSetDragImage.call(this, unwrap(image), x, y); + }; + } + })(window.ShadowDOMPolyfill); + (function(scope) { + "use strict"; + var registerWrapper = scope.registerWrapper; + var setWrapper = scope.setWrapper; + var unwrap = scope.unwrap; + var OriginalFormData = window.FormData; + if (!OriginalFormData) return; + function FormData(formElement) { + var impl; + if (formElement instanceof OriginalFormData) { + impl = formElement; + } else { + impl = new OriginalFormData(formElement && unwrap(formElement)); + } + setWrapper(impl, this); + } + registerWrapper(OriginalFormData, FormData, new OriginalFormData()); + scope.wrappers.FormData = FormData; + })(window.ShadowDOMPolyfill); + (function(scope) { + "use strict"; + var unwrapIfNeeded = scope.unwrapIfNeeded; + var originalSend = XMLHttpRequest.prototype.send; + XMLHttpRequest.prototype.send = function(obj) { + return originalSend.call(this, unwrapIfNeeded(obj)); + }; + })(window.ShadowDOMPolyfill); + (function(scope) { + "use strict"; + var isWrapperFor = scope.isWrapperFor; + var elements = { + a: "HTMLAnchorElement", + area: "HTMLAreaElement", + audio: "HTMLAudioElement", + base: "HTMLBaseElement", + body: "HTMLBodyElement", + br: "HTMLBRElement", + button: "HTMLButtonElement", + canvas: "HTMLCanvasElement", + caption: "HTMLTableCaptionElement", + col: "HTMLTableColElement", + content: "HTMLContentElement", + data: "HTMLDataElement", + datalist: "HTMLDataListElement", + del: "HTMLModElement", + dir: "HTMLDirectoryElement", + div: "HTMLDivElement", + dl: "HTMLDListElement", + embed: "HTMLEmbedElement", + fieldset: "HTMLFieldSetElement", + font: "HTMLFontElement", + form: "HTMLFormElement", + frame: "HTMLFrameElement", + frameset: "HTMLFrameSetElement", + h1: "HTMLHeadingElement", + head: "HTMLHeadElement", + hr: "HTMLHRElement", + html: "HTMLHtmlElement", + iframe: "HTMLIFrameElement", + img: "HTMLImageElement", + input: "HTMLInputElement", + keygen: "HTMLKeygenElement", + label: "HTMLLabelElement", + legend: "HTMLLegendElement", + li: "HTMLLIElement", + link: "HTMLLinkElement", + map: "HTMLMapElement", + marquee: "HTMLMarqueeElement", + menu: "HTMLMenuElement", + menuitem: "HTMLMenuItemElement", + meta: "HTMLMetaElement", + meter: "HTMLMeterElement", + object: "HTMLObjectElement", + ol: "HTMLOListElement", + optgroup: "HTMLOptGroupElement", + option: "HTMLOptionElement", + output: "HTMLOutputElement", + p: "HTMLParagraphElement", + param: "HTMLParamElement", + pre: "HTMLPreElement", + progress: "HTMLProgressElement", + q: "HTMLQuoteElement", + script: "HTMLScriptElement", + select: "HTMLSelectElement", + shadow: "HTMLShadowElement", + source: "HTMLSourceElement", + span: "HTMLSpanElement", + style: "HTMLStyleElement", + table: "HTMLTableElement", + tbody: "HTMLTableSectionElement", + template: "HTMLTemplateElement", + textarea: "HTMLTextAreaElement", + thead: "HTMLTableSectionElement", + time: "HTMLTimeElement", + title: "HTMLTitleElement", + tr: "HTMLTableRowElement", + track: "HTMLTrackElement", + ul: "HTMLUListElement", + video: "HTMLVideoElement" + }; + function overrideConstructor(tagName) { + var nativeConstructorName = elements[tagName]; + var nativeConstructor = window[nativeConstructorName]; + if (!nativeConstructor) return; + var element = document.createElement(tagName); + var wrapperConstructor = element.constructor; + window[nativeConstructorName] = wrapperConstructor; + } + Object.keys(elements).forEach(overrideConstructor); + Object.getOwnPropertyNames(scope.wrappers).forEach(function(name) { + window[name] = scope.wrappers[name]; + }); + })(window.ShadowDOMPolyfill); + (function(scope) { + var ShadowCSS = { + strictStyling: false, + registry: {}, + shimStyling: function(root, name, extendsName) { + var scopeStyles = this.prepareRoot(root, name, extendsName); + var typeExtension = this.isTypeExtension(extendsName); + var scopeSelector = this.makeScopeSelector(name, typeExtension); + var cssText = stylesToCssText(scopeStyles, true); + cssText = this.scopeCssText(cssText, scopeSelector); + if (root) { + root.shimmedStyle = cssText; + } + this.addCssToDocument(cssText, name); + }, + shimStyle: function(style, selector) { + return this.shimCssText(style.textContent, selector); + }, + shimCssText: function(cssText, selector) { + cssText = this.insertDirectives(cssText); + return this.scopeCssText(cssText, selector); + }, + makeScopeSelector: function(name, typeExtension) { + if (name) { + return typeExtension ? "[is=" + name + "]" : name; + } + return ""; + }, + isTypeExtension: function(extendsName) { + return extendsName && extendsName.indexOf("-") < 0; + }, + prepareRoot: function(root, name, extendsName) { + var def = this.registerRoot(root, name, extendsName); + this.replaceTextInStyles(def.rootStyles, this.insertDirectives); + this.removeStyles(root, def.rootStyles); + if (this.strictStyling) { + this.applyScopeToContent(root, name); + } + return def.scopeStyles; + }, + removeStyles: function(root, styles) { + for (var i = 0, l = styles.length, s; i < l && (s = styles[i]); i++) { + s.parentNode.removeChild(s); + } + }, + registerRoot: function(root, name, extendsName) { + var def = this.registry[name] = { + root: root, + name: name, + extendsName: extendsName + }; + var styles = this.findStyles(root); + def.rootStyles = styles; + def.scopeStyles = def.rootStyles; + var extendee = this.registry[def.extendsName]; + if (extendee) { + def.scopeStyles = extendee.scopeStyles.concat(def.scopeStyles); + } + return def; + }, + findStyles: function(root) { + if (!root) { + return []; + } + var styles = root.querySelectorAll("style"); + return Array.prototype.filter.call(styles, function(s) { + return !s.hasAttribute(NO_SHIM_ATTRIBUTE); + }); + }, + applyScopeToContent: function(root, name) { + if (root) { + Array.prototype.forEach.call(root.querySelectorAll("*"), function(node) { + node.setAttribute(name, ""); + }); + Array.prototype.forEach.call(root.querySelectorAll("template"), function(template) { + this.applyScopeToContent(template.content, name); + }, this); + } + }, + insertDirectives: function(cssText) { + cssText = this.insertPolyfillDirectivesInCssText(cssText); + return this.insertPolyfillRulesInCssText(cssText); + }, + insertPolyfillDirectivesInCssText: function(cssText) { + cssText = cssText.replace(cssCommentNextSelectorRe, function(match, p1) { + return p1.slice(0, -2) + "{"; + }); + return cssText.replace(cssContentNextSelectorRe, function(match, p1) { + return p1 + " {"; + }); + }, + insertPolyfillRulesInCssText: function(cssText) { + cssText = cssText.replace(cssCommentRuleRe, function(match, p1) { + return p1.slice(0, -1); + }); + return cssText.replace(cssContentRuleRe, function(match, p1, p2, p3) { + var rule = match.replace(p1, "").replace(p2, ""); + return p3 + rule; + }); + }, + scopeCssText: function(cssText, scopeSelector) { + var unscoped = this.extractUnscopedRulesFromCssText(cssText); + cssText = this.insertPolyfillHostInCssText(cssText); + cssText = this.convertColonHost(cssText); + cssText = this.convertColonHostContext(cssText); + cssText = this.convertShadowDOMSelectors(cssText); + if (scopeSelector) { + var self = this, cssText; + withCssRules(cssText, function(rules) { + cssText = self.scopeRules(rules, scopeSelector); + }); + } + cssText = cssText + "\n" + unscoped; + return cssText.trim(); + }, + extractUnscopedRulesFromCssText: function(cssText) { + var r = "", m; + while (m = cssCommentUnscopedRuleRe.exec(cssText)) { + r += m[1].slice(0, -1) + "\n\n"; + } + while (m = cssContentUnscopedRuleRe.exec(cssText)) { + r += m[0].replace(m[2], "").replace(m[1], m[3]) + "\n\n"; + } + return r; + }, + convertColonHost: function(cssText) { + return this.convertColonRule(cssText, cssColonHostRe, this.colonHostPartReplacer); + }, + convertColonHostContext: function(cssText) { + return this.convertColonRule(cssText, cssColonHostContextRe, this.colonHostContextPartReplacer); + }, + convertColonRule: function(cssText, regExp, partReplacer) { + return cssText.replace(regExp, function(m, p1, p2, p3) { + p1 = polyfillHostNoCombinator; + if (p2) { + var parts = p2.split(","), r = []; + for (var i = 0, l = parts.length, p; i < l && (p = parts[i]); i++) { + p = p.trim(); + r.push(partReplacer(p1, p, p3)); + } + return r.join(","); + } else { + return p1 + p3; + } + }); + }, + colonHostContextPartReplacer: function(host, part, suffix) { + if (part.match(polyfillHost)) { + return this.colonHostPartReplacer(host, part, suffix); + } else { + return host + part + suffix + ", " + part + " " + host + suffix; + } + }, + colonHostPartReplacer: function(host, part, suffix) { + return host + part.replace(polyfillHost, "") + suffix; + }, + convertShadowDOMSelectors: function(cssText) { + for (var i = 0; i < shadowDOMSelectorsRe.length; i++) { + cssText = cssText.replace(shadowDOMSelectorsRe[i], " "); + } + return cssText; + }, + scopeRules: function(cssRules, scopeSelector) { + var cssText = ""; + if (cssRules) { + Array.prototype.forEach.call(cssRules, function(rule) { + if (rule.selectorText && (rule.style && rule.style.cssText !== undefined)) { + cssText += this.scopeSelector(rule.selectorText, scopeSelector, this.strictStyling) + " {\n "; + cssText += this.propertiesFromRule(rule) + "\n}\n\n"; + } else if (rule.type === CSSRule.MEDIA_RULE) { + cssText += "@media " + rule.media.mediaText + " {\n"; + cssText += this.scopeRules(rule.cssRules, scopeSelector); + cssText += "\n}\n\n"; + } else { + try { + if (rule.cssText) { + cssText += rule.cssText + "\n\n"; + } + } catch (x) { + if (rule.type === CSSRule.KEYFRAMES_RULE && rule.cssRules) { + cssText += this.ieSafeCssTextFromKeyFrameRule(rule); + } + } + } + }, this); + } + return cssText; + }, + ieSafeCssTextFromKeyFrameRule: function(rule) { + var cssText = "@keyframes " + rule.name + " {"; + Array.prototype.forEach.call(rule.cssRules, function(rule) { + cssText += " " + rule.keyText + " {" + rule.style.cssText + "}"; + }); + cssText += " }"; + return cssText; + }, + scopeSelector: function(selector, scopeSelector, strict) { + var r = [], parts = selector.split(","); + parts.forEach(function(p) { + p = p.trim(); + if (this.selectorNeedsScoping(p, scopeSelector)) { + p = strict && !p.match(polyfillHostNoCombinator) ? this.applyStrictSelectorScope(p, scopeSelector) : this.applySelectorScope(p, scopeSelector); + } + r.push(p); + }, this); + return r.join(", "); + }, + selectorNeedsScoping: function(selector, scopeSelector) { + if (Array.isArray(scopeSelector)) { + return true; + } + var re = this.makeScopeMatcher(scopeSelector); + return !selector.match(re); + }, + makeScopeMatcher: function(scopeSelector) { + scopeSelector = scopeSelector.replace(/\[/g, "\\[").replace(/\]/g, "\\]"); + return new RegExp("^(" + scopeSelector + ")" + selectorReSuffix, "m"); + }, + applySelectorScope: function(selector, selectorScope) { + return Array.isArray(selectorScope) ? this.applySelectorScopeList(selector, selectorScope) : this.applySimpleSelectorScope(selector, selectorScope); + }, + applySelectorScopeList: function(selector, scopeSelectorList) { + var r = []; + for (var i = 0, s; s = scopeSelectorList[i]; i++) { + r.push(this.applySimpleSelectorScope(selector, s)); + } + return r.join(", "); + }, + applySimpleSelectorScope: function(selector, scopeSelector) { + if (selector.match(polyfillHostRe)) { + selector = selector.replace(polyfillHostNoCombinator, scopeSelector); + return selector.replace(polyfillHostRe, scopeSelector + " "); + } else { + return scopeSelector + " " + selector; + } + }, + applyStrictSelectorScope: function(selector, scopeSelector) { + scopeSelector = scopeSelector.replace(/\[is=([^\]]*)\]/g, "$1"); + var splits = [ " ", ">", "+", "~" ], scoped = selector, attrName = "[" + scopeSelector + "]"; + splits.forEach(function(sep) { + var parts = scoped.split(sep); + scoped = parts.map(function(p) { + var t = p.trim().replace(polyfillHostRe, ""); + if (t && splits.indexOf(t) < 0 && t.indexOf(attrName) < 0) { + p = t.replace(/([^:]*)(:*)(.*)/, "$1" + attrName + "$2$3"); + } + return p; + }).join(sep); + }); + return scoped; + }, + insertPolyfillHostInCssText: function(selector) { + return selector.replace(colonHostContextRe, polyfillHostContext).replace(colonHostRe, polyfillHost); + }, + propertiesFromRule: function(rule) { + var cssText = rule.style.cssText; + if (rule.style.content && !rule.style.content.match(/['"]+|attr/)) { + cssText = cssText.replace(/content:[^;]*;/g, "content: '" + rule.style.content + "';"); + } + var style = rule.style; + for (var i in style) { + if (style[i] === "initial") { + cssText += i + ": initial; "; + } + } + return cssText; + }, + replaceTextInStyles: function(styles, action) { + if (styles && action) { + if (!(styles instanceof Array)) { + styles = [ styles ]; + } + Array.prototype.forEach.call(styles, function(s) { + s.textContent = action.call(this, s.textContent); + }, this); + } + }, + addCssToDocument: function(cssText, name) { + if (cssText.match("@import")) { + addOwnSheet(cssText, name); + } else { + addCssToDocument(cssText); + } + } + }; + var selectorRe = /([^{]*)({[\s\S]*?})/gim, cssCommentRe = /\/\*[^*]*\*+([^\/*][^*]*\*+)*\//gim, cssCommentNextSelectorRe = /\/\*\s*@polyfill ([^*]*\*+([^\/*][^*]*\*+)*\/)([^{]*?){/gim, cssContentNextSelectorRe = /polyfill-next-selector[^}]*content\:[\s]*?['"](.*?)['"][;\s]*}([^{]*?){/gim, cssCommentRuleRe = /\/\*\s@polyfill-rule([^*]*\*+([^\/*][^*]*\*+)*)\//gim, cssContentRuleRe = /(polyfill-rule)[^}]*(content\:[\s]*['"](.*?)['"])[;\s]*[^}]*}/gim, cssCommentUnscopedRuleRe = /\/\*\s@polyfill-unscoped-rule([^*]*\*+([^\/*][^*]*\*+)*)\//gim, cssContentUnscopedRuleRe = /(polyfill-unscoped-rule)[^}]*(content\:[\s]*['"](.*?)['"])[;\s]*[^}]*}/gim, cssPseudoRe = /::(x-[^\s{,(]*)/gim, cssPartRe = /::part\(([^)]*)\)/gim, polyfillHost = "-shadowcsshost", polyfillHostContext = "-shadowcsscontext", parenSuffix = ")(?:\\((" + "(?:\\([^)(]*\\)|[^)(]*)+?" + ")\\))?([^,{]*)"; + var cssColonHostRe = new RegExp("(" + polyfillHost + parenSuffix, "gim"), cssColonHostContextRe = new RegExp("(" + polyfillHostContext + parenSuffix, "gim"), selectorReSuffix = "([>\\s~+[.,{:][\\s\\S]*)?$", colonHostRe = /\:host/gim, colonHostContextRe = /\:host-context/gim, polyfillHostNoCombinator = polyfillHost + "-no-combinator", polyfillHostRe = new RegExp(polyfillHost, "gim"), polyfillHostContextRe = new RegExp(polyfillHostContext, "gim"), shadowDOMSelectorsRe = [ />>>/g, /::shadow/g, /::content/g, /\/deep\//g, /\/shadow\//g, /\/shadow-deep\//g, /\^\^/g, /\^/g ]; + function stylesToCssText(styles, preserveComments) { + var cssText = ""; + Array.prototype.forEach.call(styles, function(s) { + cssText += s.textContent + "\n\n"; + }); + if (!preserveComments) { + cssText = cssText.replace(cssCommentRe, ""); + } + return cssText; + } + function cssTextToStyle(cssText) { + var style = document.createElement("style"); + style.textContent = cssText; + return style; + } + function cssToRules(cssText) { + var style = cssTextToStyle(cssText); + document.head.appendChild(style); + var rules = []; + if (style.sheet) { + try { + rules = style.sheet.cssRules; + } catch (e) {} + } else { + console.warn("sheet not found", style); + } + style.parentNode.removeChild(style); + return rules; + } + var frame = document.createElement("iframe"); + frame.style.display = "none"; + function initFrame() { + frame.initialized = true; + document.body.appendChild(frame); + var doc = frame.contentDocument; + var base = doc.createElement("base"); + base.href = document.baseURI; + doc.head.appendChild(base); + } + function inFrame(fn) { + if (!frame.initialized) { + initFrame(); + } + document.body.appendChild(frame); + fn(frame.contentDocument); + document.body.removeChild(frame); + } + var isChrome = navigator.userAgent.match("Chrome"); + function withCssRules(cssText, callback) { + if (!callback) { + return; + } + var rules; + if (cssText.match("@import") && isChrome) { + var style = cssTextToStyle(cssText); + inFrame(function(doc) { + doc.head.appendChild(style.impl); + rules = Array.prototype.slice.call(style.sheet.cssRules, 0); + callback(rules); + }); + } else { + rules = cssToRules(cssText); + callback(rules); + } + } + function rulesToCss(cssRules) { + for (var i = 0, css = []; i < cssRules.length; i++) { + css.push(cssRules[i].cssText); + } + return css.join("\n\n"); + } + function addCssToDocument(cssText) { + if (cssText) { + getSheet().appendChild(document.createTextNode(cssText)); + } + } + function addOwnSheet(cssText, name) { + var style = cssTextToStyle(cssText); + style.setAttribute(name, ""); + style.setAttribute(SHIMMED_ATTRIBUTE, ""); + document.head.appendChild(style); + } + var SHIM_ATTRIBUTE = "shim-shadowdom"; + var SHIMMED_ATTRIBUTE = "shim-shadowdom-css"; + var NO_SHIM_ATTRIBUTE = "no-shim"; + var sheet; + function getSheet() { + if (!sheet) { + sheet = document.createElement("style"); + sheet.setAttribute(SHIMMED_ATTRIBUTE, ""); + sheet[SHIMMED_ATTRIBUTE] = true; + } + return sheet; + } + if (window.ShadowDOMPolyfill) { + addCssToDocument("style { display: none !important; }\n"); + var doc = ShadowDOMPolyfill.wrap(document); + var head = doc.querySelector("head"); + head.insertBefore(getSheet(), head.childNodes[0]); + document.addEventListener("DOMContentLoaded", function() { + var urlResolver = scope.urlResolver; + if (window.HTMLImports && !HTMLImports.useNative) { + var SHIM_SHEET_SELECTOR = "link[rel=stylesheet]" + "[" + SHIM_ATTRIBUTE + "]"; + var SHIM_STYLE_SELECTOR = "style[" + SHIM_ATTRIBUTE + "]"; + HTMLImports.importer.documentPreloadSelectors += "," + SHIM_SHEET_SELECTOR; + HTMLImports.importer.importsPreloadSelectors += "," + SHIM_SHEET_SELECTOR; + HTMLImports.parser.documentSelectors = [ HTMLImports.parser.documentSelectors, SHIM_SHEET_SELECTOR, SHIM_STYLE_SELECTOR ].join(","); + var originalParseGeneric = HTMLImports.parser.parseGeneric; + HTMLImports.parser.parseGeneric = function(elt) { + if (elt[SHIMMED_ATTRIBUTE]) { + return; + } + var style = elt.__importElement || elt; + if (!style.hasAttribute(SHIM_ATTRIBUTE)) { + originalParseGeneric.call(this, elt); + return; + } + if (elt.__resource) { + style = elt.ownerDocument.createElement("style"); + style.textContent = elt.__resource; + } + HTMLImports.path.resolveUrlsInStyle(style, elt.href); + style.textContent = ShadowCSS.shimStyle(style); + style.removeAttribute(SHIM_ATTRIBUTE, ""); + style.setAttribute(SHIMMED_ATTRIBUTE, ""); + style[SHIMMED_ATTRIBUTE] = true; + if (style.parentNode !== head) { + if (elt.parentNode === head) { + head.replaceChild(style, elt); + } else { + this.addElementToDocument(style); + } + } + style.__importParsed = true; + this.markParsingComplete(elt); + this.parseNext(); + }; + var hasResource = HTMLImports.parser.hasResource; + HTMLImports.parser.hasResource = function(node) { + if (node.localName === "link" && node.rel === "stylesheet" && node.hasAttribute(SHIM_ATTRIBUTE)) { + return node.__resource; + } else { + return hasResource.call(this, node); + } + }; + } + }); + } + scope.ShadowCSS = ShadowCSS; + })(window.WebComponents); +} + +(function(scope) { + if (window.ShadowDOMPolyfill) { + window.wrap = ShadowDOMPolyfill.wrapIfNeeded; + window.unwrap = ShadowDOMPolyfill.unwrapIfNeeded; + } else { + window.wrap = window.unwrap = function(n) { + return n; + }; + } +})(window.WebComponents); + +(function(scope) { + "use strict"; + var hasWorkingUrl = false; + if (!scope.forceJURL) { + try { + var u = new URL("b", "http://a"); + u.pathname = "c%20d"; + hasWorkingUrl = u.href === "http://a/c%20d"; + } catch (e) {} + } + if (hasWorkingUrl) return; + var relative = Object.create(null); + relative["ftp"] = 21; + relative["file"] = 0; + relative["gopher"] = 70; + relative["http"] = 80; + relative["https"] = 443; + relative["ws"] = 80; + relative["wss"] = 443; + var relativePathDotMapping = Object.create(null); + relativePathDotMapping["%2e"] = "."; + relativePathDotMapping[".%2e"] = ".."; + relativePathDotMapping["%2e."] = ".."; + relativePathDotMapping["%2e%2e"] = ".."; + function isRelativeScheme(scheme) { + return relative[scheme] !== undefined; + } + function invalid() { + clear.call(this); + this._isInvalid = true; + } + function IDNAToASCII(h) { + if ("" == h) { + invalid.call(this); + } + return h.toLowerCase(); + } + function percentEscape(c) { + var unicode = c.charCodeAt(0); + if (unicode > 32 && unicode < 127 && [ 34, 35, 60, 62, 63, 96 ].indexOf(unicode) == -1) { + return c; + } + return encodeURIComponent(c); + } + function percentEscapeQuery(c) { + var unicode = c.charCodeAt(0); + if (unicode > 32 && unicode < 127 && [ 34, 35, 60, 62, 96 ].indexOf(unicode) == -1) { + return c; + } + return encodeURIComponent(c); + } + var EOF = undefined, ALPHA = /[a-zA-Z]/, ALPHANUMERIC = /[a-zA-Z0-9\+\-\.]/; + function parse(input, stateOverride, base) { + function err(message) { + errors.push(message); + } + var state = stateOverride || "scheme start", cursor = 0, buffer = "", seenAt = false, seenBracket = false, errors = []; + loop: while ((input[cursor - 1] != EOF || cursor == 0) && !this._isInvalid) { + var c = input[cursor]; + switch (state) { + case "scheme start": + if (c && ALPHA.test(c)) { + buffer += c.toLowerCase(); + state = "scheme"; + } else if (!stateOverride) { + buffer = ""; + state = "no scheme"; + continue; + } else { + err("Invalid scheme."); + break loop; + } + break; + + case "scheme": + if (c && ALPHANUMERIC.test(c)) { + buffer += c.toLowerCase(); + } else if (":" == c) { + this._scheme = buffer; + buffer = ""; + if (stateOverride) { + break loop; + } + if (isRelativeScheme(this._scheme)) { + this._isRelative = true; + } + if ("file" == this._scheme) { + state = "relative"; + } else if (this._isRelative && base && base._scheme == this._scheme) { + state = "relative or authority"; + } else if (this._isRelative) { + state = "authority first slash"; + } else { + state = "scheme data"; + } + } else if (!stateOverride) { + buffer = ""; + cursor = 0; + state = "no scheme"; + continue; + } else if (EOF == c) { + break loop; + } else { + err("Code point not allowed in scheme: " + c); + break loop; + } + break; + + case "scheme data": + if ("?" == c) { + this._query = "?"; + state = "query"; + } else if ("#" == c) { + this._fragment = "#"; + state = "fragment"; + } else { + if (EOF != c && " " != c && "\n" != c && "\r" != c) { + this._schemeData += percentEscape(c); + } + } + break; + + case "no scheme": + if (!base || !isRelativeScheme(base._scheme)) { + err("Missing scheme."); + invalid.call(this); + } else { + state = "relative"; + continue; + } + break; + + case "relative or authority": + if ("/" == c && "/" == input[cursor + 1]) { + state = "authority ignore slashes"; + } else { + err("Expected /, got: " + c); + state = "relative"; + continue; + } + break; + + case "relative": + this._isRelative = true; + if ("file" != this._scheme) this._scheme = base._scheme; + if (EOF == c) { + this._host = base._host; + this._port = base._port; + this._path = base._path.slice(); + this._query = base._query; + this._username = base._username; + this._password = base._password; + break loop; + } else if ("/" == c || "\\" == c) { + if ("\\" == c) err("\\ is an invalid code point."); + state = "relative slash"; + } else if ("?" == c) { + this._host = base._host; + this._port = base._port; + this._path = base._path.slice(); + this._query = "?"; + this._username = base._username; + this._password = base._password; + state = "query"; + } else if ("#" == c) { + this._host = base._host; + this._port = base._port; + this._path = base._path.slice(); + this._query = base._query; + this._fragment = "#"; + this._username = base._username; + this._password = base._password; + state = "fragment"; + } else { + var nextC = input[cursor + 1]; + var nextNextC = input[cursor + 2]; + if ("file" != this._scheme || !ALPHA.test(c) || nextC != ":" && nextC != "|" || EOF != nextNextC && "/" != nextNextC && "\\" != nextNextC && "?" != nextNextC && "#" != nextNextC) { + this._host = base._host; + this._port = base._port; + this._username = base._username; + this._password = base._password; + this._path = base._path.slice(); + this._path.pop(); + } + state = "relative path"; + continue; + } + break; + + case "relative slash": + if ("/" == c || "\\" == c) { + if ("\\" == c) { + err("\\ is an invalid code point."); + } + if ("file" == this._scheme) { + state = "file host"; + } else { + state = "authority ignore slashes"; + } + } else { + if ("file" != this._scheme) { + this._host = base._host; + this._port = base._port; + this._username = base._username; + this._password = base._password; + } + state = "relative path"; + continue; + } + break; + + case "authority first slash": + if ("/" == c) { + state = "authority second slash"; + } else { + err("Expected '/', got: " + c); + state = "authority ignore slashes"; + continue; + } + break; + + case "authority second slash": + state = "authority ignore slashes"; + if ("/" != c) { + err("Expected '/', got: " + c); + continue; + } + break; + + case "authority ignore slashes": + if ("/" != c && "\\" != c) { + state = "authority"; + continue; + } else { + err("Expected authority, got: " + c); + } + break; + + case "authority": + if ("@" == c) { + if (seenAt) { + err("@ already seen."); + buffer += "%40"; + } + seenAt = true; + for (var i = 0; i < buffer.length; i++) { + var cp = buffer[i]; + if (" " == cp || "\n" == cp || "\r" == cp) { + err("Invalid whitespace in authority."); + continue; + } + if (":" == cp && null === this._password) { + this._password = ""; + continue; + } + var tempC = percentEscape(cp); + null !== this._password ? this._password += tempC : this._username += tempC; + } + buffer = ""; + } else if (EOF == c || "/" == c || "\\" == c || "?" == c || "#" == c) { + cursor -= buffer.length; + buffer = ""; + state = "host"; + continue; + } else { + buffer += c; + } + break; + + case "file host": + if (EOF == c || "/" == c || "\\" == c || "?" == c || "#" == c) { + if (buffer.length == 2 && ALPHA.test(buffer[0]) && (buffer[1] == ":" || buffer[1] == "|")) { + state = "relative path"; + } else if (buffer.length == 0) { + state = "relative path start"; + } else { + this._host = IDNAToASCII.call(this, buffer); + buffer = ""; + state = "relative path start"; + } + continue; + } else if (" " == c || "\n" == c || "\r" == c) { + err("Invalid whitespace in file host."); + } else { + buffer += c; + } + break; + + case "host": + case "hostname": + if (":" == c && !seenBracket) { + this._host = IDNAToASCII.call(this, buffer); + buffer = ""; + state = "port"; + if ("hostname" == stateOverride) { + break loop; + } + } else if (EOF == c || "/" == c || "\\" == c || "?" == c || "#" == c) { + this._host = IDNAToASCII.call(this, buffer); + buffer = ""; + state = "relative path start"; + if (stateOverride) { + break loop; + } + continue; + } else if (" " != c && "\n" != c && "\r" != c) { + if ("[" == c) { + seenBracket = true; + } else if ("]" == c) { + seenBracket = false; + } + buffer += c; + } else { + err("Invalid code point in host/hostname: " + c); + } + break; + + case "port": + if (/[0-9]/.test(c)) { + buffer += c; + } else if (EOF == c || "/" == c || "\\" == c || "?" == c || "#" == c || stateOverride) { + if ("" != buffer) { + var temp = parseInt(buffer, 10); + if (temp != relative[this._scheme]) { + this._port = temp + ""; + } + buffer = ""; + } + if (stateOverride) { + break loop; + } + state = "relative path start"; + continue; + } else if (" " == c || "\n" == c || "\r" == c) { + err("Invalid code point in port: " + c); + } else { + invalid.call(this); + } + break; + + case "relative path start": + if ("\\" == c) err("'\\' not allowed in path."); + state = "relative path"; + if ("/" != c && "\\" != c) { + continue; + } + break; + + case "relative path": + if (EOF == c || "/" == c || "\\" == c || !stateOverride && ("?" == c || "#" == c)) { + if ("\\" == c) { + err("\\ not allowed in relative path."); + } + var tmp; + if (tmp = relativePathDotMapping[buffer.toLowerCase()]) { + buffer = tmp; + } + if (".." == buffer) { + this._path.pop(); + if ("/" != c && "\\" != c) { + this._path.push(""); + } + } else if ("." == buffer && "/" != c && "\\" != c) { + this._path.push(""); + } else if ("." != buffer) { + if ("file" == this._scheme && this._path.length == 0 && buffer.length == 2 && ALPHA.test(buffer[0]) && buffer[1] == "|") { + buffer = buffer[0] + ":"; + } + this._path.push(buffer); + } + buffer = ""; + if ("?" == c) { + this._query = "?"; + state = "query"; + } else if ("#" == c) { + this._fragment = "#"; + state = "fragment"; + } + } else if (" " != c && "\n" != c && "\r" != c) { + buffer += percentEscape(c); + } + break; + + case "query": + if (!stateOverride && "#" == c) { + this._fragment = "#"; + state = "fragment"; + } else if (EOF != c && " " != c && "\n" != c && "\r" != c) { + this._query += percentEscapeQuery(c); + } + break; + + case "fragment": + if (EOF != c && " " != c && "\n" != c && "\r" != c) { + this._fragment += c; + } + break; + } + cursor++; + } + } + function clear() { + this._scheme = ""; + this._schemeData = ""; + this._username = ""; + this._password = null; + this._host = ""; + this._port = ""; + this._path = []; + this._query = ""; + this._fragment = ""; + this._isInvalid = false; + this._isRelative = false; + } + function jURL(url, base) { + if (base !== undefined && !(base instanceof jURL)) base = new jURL(String(base)); + this._url = url; + clear.call(this); + var input = url.replace(/^[ \t\r\n\f]+|[ \t\r\n\f]+$/g, ""); + parse.call(this, input, null, base); + } + jURL.prototype = { + toString: function() { + return this.href; + }, + get href() { + if (this._isInvalid) return this._url; + var authority = ""; + if ("" != this._username || null != this._password) { + authority = this._username + (null != this._password ? ":" + this._password : "") + "@"; + } + return this.protocol + (this._isRelative ? "//" + authority + this.host : "") + this.pathname + this._query + this._fragment; + }, + set href(href) { + clear.call(this); + parse.call(this, href); + }, + get protocol() { + return this._scheme + ":"; + }, + set protocol(protocol) { + if (this._isInvalid) return; + parse.call(this, protocol + ":", "scheme start"); + }, + get host() { + return this._isInvalid ? "" : this._port ? this._host + ":" + this._port : this._host; + }, + set host(host) { + if (this._isInvalid || !this._isRelative) return; + parse.call(this, host, "host"); + }, + get hostname() { + return this._host; + }, + set hostname(hostname) { + if (this._isInvalid || !this._isRelative) return; + parse.call(this, hostname, "hostname"); + }, + get port() { + return this._port; + }, + set port(port) { + if (this._isInvalid || !this._isRelative) return; + parse.call(this, port, "port"); + }, + get pathname() { + return this._isInvalid ? "" : this._isRelative ? "/" + this._path.join("/") : this._schemeData; + }, + set pathname(pathname) { + if (this._isInvalid || !this._isRelative) return; + this._path = []; + parse.call(this, pathname, "relative path start"); + }, + get search() { + return this._isInvalid || !this._query || "?" == this._query ? "" : this._query; + }, + set search(search) { + if (this._isInvalid || !this._isRelative) return; + this._query = "?"; + if ("?" == search[0]) search = search.slice(1); + parse.call(this, search, "query"); + }, + get hash() { + return this._isInvalid || !this._fragment || "#" == this._fragment ? "" : this._fragment; + }, + set hash(hash) { + if (this._isInvalid) return; + this._fragment = "#"; + if ("#" == hash[0]) hash = hash.slice(1); + parse.call(this, hash, "fragment"); + }, + get origin() { + var host; + if (this._isInvalid || !this._scheme) { + return ""; + } + switch (this._scheme) { + case "data": + case "file": + case "javascript": + case "mailto": + return "null"; + } + host = this.host; + if (!host) { + return ""; + } + return this._scheme + "://" + host; + } + }; + var OriginalURL = scope.URL; + if (OriginalURL) { + jURL.createObjectURL = function(blob) { + return OriginalURL.createObjectURL.apply(OriginalURL, arguments); + }; + jURL.revokeObjectURL = function(url) { + OriginalURL.revokeObjectURL(url); + }; + } + scope.URL = jURL; +})(this); + +(function(global) { + var registrationsTable = new WeakMap(); + var setImmediate; + if (/Trident|Edge/.test(navigator.userAgent)) { + setImmediate = setTimeout; + } else if (window.setImmediate) { + setImmediate = window.setImmediate; + } else { + var setImmediateQueue = []; + var sentinel = String(Math.random()); + window.addEventListener("message", function(e) { + if (e.data === sentinel) { + var queue = setImmediateQueue; + setImmediateQueue = []; + queue.forEach(function(func) { + func(); + }); + } + }); + setImmediate = function(func) { + setImmediateQueue.push(func); + window.postMessage(sentinel, "*"); + }; + } + var isScheduled = false; + var scheduledObservers = []; + function scheduleCallback(observer) { + scheduledObservers.push(observer); + if (!isScheduled) { + isScheduled = true; + setImmediate(dispatchCallbacks); + } + } + function wrapIfNeeded(node) { + return window.ShadowDOMPolyfill && window.ShadowDOMPolyfill.wrapIfNeeded(node) || node; + } + function dispatchCallbacks() { + isScheduled = false; + var observers = scheduledObservers; + scheduledObservers = []; + observers.sort(function(o1, o2) { + return o1.uid_ - o2.uid_; + }); + var anyNonEmpty = false; + observers.forEach(function(observer) { + var queue = observer.takeRecords(); + removeTransientObserversFor(observer); + if (queue.length) { + observer.callback_(queue, observer); + anyNonEmpty = true; + } + }); + if (anyNonEmpty) dispatchCallbacks(); + } + function removeTransientObserversFor(observer) { + observer.nodes_.forEach(function(node) { + var registrations = registrationsTable.get(node); + if (!registrations) return; + registrations.forEach(function(registration) { + if (registration.observer === observer) registration.removeTransientObservers(); + }); + }); + } + function forEachAncestorAndObserverEnqueueRecord(target, callback) { + for (var node = target; node; node = node.parentNode) { + var registrations = registrationsTable.get(node); + if (registrations) { + for (var j = 0; j < registrations.length; j++) { + var registration = registrations[j]; + var options = registration.options; + if (node !== target && !options.subtree) continue; + var record = callback(options); + if (record) registration.enqueue(record); + } + } + } + } + var uidCounter = 0; + function JsMutationObserver(callback) { + this.callback_ = callback; + this.nodes_ = []; + this.records_ = []; + this.uid_ = ++uidCounter; + } + JsMutationObserver.prototype = { + observe: function(target, options) { + target = wrapIfNeeded(target); + if (!options.childList && !options.attributes && !options.characterData || options.attributeOldValue && !options.attributes || options.attributeFilter && options.attributeFilter.length && !options.attributes || options.characterDataOldValue && !options.characterData) { + throw new SyntaxError(); + } + var registrations = registrationsTable.get(target); + if (!registrations) registrationsTable.set(target, registrations = []); + var registration; + for (var i = 0; i < registrations.length; i++) { + if (registrations[i].observer === this) { + registration = registrations[i]; + registration.removeListeners(); + registration.options = options; + break; + } + } + if (!registration) { + registration = new Registration(this, target, options); + registrations.push(registration); + this.nodes_.push(target); + } + registration.addListeners(); + }, + disconnect: function() { + this.nodes_.forEach(function(node) { + var registrations = registrationsTable.get(node); + for (var i = 0; i < registrations.length; i++) { + var registration = registrations[i]; + if (registration.observer === this) { + registration.removeListeners(); + registrations.splice(i, 1); + break; + } + } + }, this); + this.records_ = []; + }, + takeRecords: function() { + var copyOfRecords = this.records_; + this.records_ = []; + return copyOfRecords; + } + }; + function MutationRecord(type, target) { + this.type = type; + this.target = target; + this.addedNodes = []; + this.removedNodes = []; + this.previousSibling = null; + this.nextSibling = null; + this.attributeName = null; + this.attributeNamespace = null; + this.oldValue = null; + } + function copyMutationRecord(original) { + var record = new MutationRecord(original.type, original.target); + record.addedNodes = original.addedNodes.slice(); + record.removedNodes = original.removedNodes.slice(); + record.previousSibling = original.previousSibling; + record.nextSibling = original.nextSibling; + record.attributeName = original.attributeName; + record.attributeNamespace = original.attributeNamespace; + record.oldValue = original.oldValue; + return record; + } + var currentRecord, recordWithOldValue; + function getRecord(type, target) { + return currentRecord = new MutationRecord(type, target); + } + function getRecordWithOldValue(oldValue) { + if (recordWithOldValue) return recordWithOldValue; + recordWithOldValue = copyMutationRecord(currentRecord); + recordWithOldValue.oldValue = oldValue; + return recordWithOldValue; + } + function clearRecords() { + currentRecord = recordWithOldValue = undefined; + } + function recordRepresentsCurrentMutation(record) { + return record === recordWithOldValue || record === currentRecord; + } + function selectRecord(lastRecord, newRecord) { + if (lastRecord === newRecord) return lastRecord; + if (recordWithOldValue && recordRepresentsCurrentMutation(lastRecord)) return recordWithOldValue; + return null; + } + function Registration(observer, target, options) { + this.observer = observer; + this.target = target; + this.options = options; + this.transientObservedNodes = []; + } + Registration.prototype = { + enqueue: function(record) { + var records = this.observer.records_; + var length = records.length; + if (records.length > 0) { + var lastRecord = records[length - 1]; + var recordToReplaceLast = selectRecord(lastRecord, record); + if (recordToReplaceLast) { + records[length - 1] = recordToReplaceLast; + return; + } + } else { + scheduleCallback(this.observer); + } + records[length] = record; + }, + addListeners: function() { + this.addListeners_(this.target); + }, + addListeners_: function(node) { + var options = this.options; + if (options.attributes) node.addEventListener("DOMAttrModified", this, true); + if (options.characterData) node.addEventListener("DOMCharacterDataModified", this, true); + if (options.childList) node.addEventListener("DOMNodeInserted", this, true); + if (options.childList || options.subtree) node.addEventListener("DOMNodeRemoved", this, true); + }, + removeListeners: function() { + this.removeListeners_(this.target); + }, + removeListeners_: function(node) { + var options = this.options; + if (options.attributes) node.removeEventListener("DOMAttrModified", this, true); + if (options.characterData) node.removeEventListener("DOMCharacterDataModified", this, true); + if (options.childList) node.removeEventListener("DOMNodeInserted", this, true); + if (options.childList || options.subtree) node.removeEventListener("DOMNodeRemoved", this, true); + }, + addTransientObserver: function(node) { + if (node === this.target) return; + this.addListeners_(node); + this.transientObservedNodes.push(node); + var registrations = registrationsTable.get(node); + if (!registrations) registrationsTable.set(node, registrations = []); + registrations.push(this); + }, + removeTransientObservers: function() { + var transientObservedNodes = this.transientObservedNodes; + this.transientObservedNodes = []; + transientObservedNodes.forEach(function(node) { + this.removeListeners_(node); + var registrations = registrationsTable.get(node); + for (var i = 0; i < registrations.length; i++) { + if (registrations[i] === this) { + registrations.splice(i, 1); + break; + } + } + }, this); + }, + handleEvent: function(e) { + e.stopImmediatePropagation(); + switch (e.type) { + case "DOMAttrModified": + var name = e.attrName; + var namespace = e.relatedNode.namespaceURI; + var target = e.target; + var record = new getRecord("attributes", target); + record.attributeName = name; + record.attributeNamespace = namespace; + var oldValue = e.attrChange === MutationEvent.ADDITION ? null : e.prevValue; + forEachAncestorAndObserverEnqueueRecord(target, function(options) { + if (!options.attributes) return; + if (options.attributeFilter && options.attributeFilter.length && options.attributeFilter.indexOf(name) === -1 && options.attributeFilter.indexOf(namespace) === -1) { + return; + } + if (options.attributeOldValue) return getRecordWithOldValue(oldValue); + return record; + }); + break; + + case "DOMCharacterDataModified": + var target = e.target; + var record = getRecord("characterData", target); + var oldValue = e.prevValue; + forEachAncestorAndObserverEnqueueRecord(target, function(options) { + if (!options.characterData) return; + if (options.characterDataOldValue) return getRecordWithOldValue(oldValue); + return record; + }); + break; + + case "DOMNodeRemoved": + this.addTransientObserver(e.target); + + case "DOMNodeInserted": + var changedNode = e.target; + var addedNodes, removedNodes; + if (e.type === "DOMNodeInserted") { + addedNodes = [ changedNode ]; + removedNodes = []; + } else { + addedNodes = []; + removedNodes = [ changedNode ]; + } + var previousSibling = changedNode.previousSibling; + var nextSibling = changedNode.nextSibling; + var record = getRecord("childList", e.target.parentNode); + record.addedNodes = addedNodes; + record.removedNodes = removedNodes; + record.previousSibling = previousSibling; + record.nextSibling = nextSibling; + forEachAncestorAndObserverEnqueueRecord(e.relatedNode, function(options) { + if (!options.childList) return; + return record; + }); + } + clearRecords(); + } + }; + global.JsMutationObserver = JsMutationObserver; + if (!global.MutationObserver) global.MutationObserver = JsMutationObserver; +})(this); + +window.HTMLImports = window.HTMLImports || { + flags: {} +}; + +(function(scope) { + var IMPORT_LINK_TYPE = "import"; + var useNative = Boolean(IMPORT_LINK_TYPE in document.createElement("link")); + var hasShadowDOMPolyfill = Boolean(window.ShadowDOMPolyfill); + var wrap = function(node) { + return hasShadowDOMPolyfill ? window.ShadowDOMPolyfill.wrapIfNeeded(node) : node; + }; + var rootDocument = wrap(document); + var currentScriptDescriptor = { + get: function() { + var script = window.HTMLImports.currentScript || document.currentScript || (document.readyState !== "complete" ? document.scripts[document.scripts.length - 1] : null); + return wrap(script); + }, + configurable: true + }; + Object.defineProperty(document, "_currentScript", currentScriptDescriptor); + Object.defineProperty(rootDocument, "_currentScript", currentScriptDescriptor); + var isIE = /Trident/.test(navigator.userAgent); + function whenReady(callback, doc) { + doc = doc || rootDocument; + whenDocumentReady(function() { + watchImportsLoad(callback, doc); + }, doc); + } + var requiredReadyState = isIE ? "complete" : "interactive"; + var READY_EVENT = "readystatechange"; + function isDocumentReady(doc) { + return doc.readyState === "complete" || doc.readyState === requiredReadyState; + } + function whenDocumentReady(callback, doc) { + if (!isDocumentReady(doc)) { + var checkReady = function() { + if (doc.readyState === "complete" || doc.readyState === requiredReadyState) { + doc.removeEventListener(READY_EVENT, checkReady); + whenDocumentReady(callback, doc); + } + }; + doc.addEventListener(READY_EVENT, checkReady); + } else if (callback) { + callback(); + } + } + function markTargetLoaded(event) { + event.target.__loaded = true; + } + function watchImportsLoad(callback, doc) { + var imports = doc.querySelectorAll("link[rel=import]"); + var parsedCount = 0, importCount = imports.length, newImports = [], errorImports = []; + function checkDone() { + if (parsedCount == importCount && callback) { + callback({ + allImports: imports, + loadedImports: newImports, + errorImports: errorImports + }); + } + } + function loadedImport(e) { + markTargetLoaded(e); + newImports.push(this); + parsedCount++; + checkDone(); + } + function errorLoadingImport(e) { + errorImports.push(this); + parsedCount++; + checkDone(); + } + if (importCount) { + for (var i = 0, imp; i < importCount && (imp = imports[i]); i++) { + if (isImportLoaded(imp)) { + parsedCount++; + checkDone(); + } else { + imp.addEventListener("load", loadedImport); + imp.addEventListener("error", errorLoadingImport); + } + } + } else { + checkDone(); + } + } + function isImportLoaded(link) { + return useNative ? link.__loaded || link.import && link.import.readyState !== "loading" : link.__importParsed; + } + if (useNative) { + new MutationObserver(function(mxns) { + for (var i = 0, l = mxns.length, m; i < l && (m = mxns[i]); i++) { + if (m.addedNodes) { + handleImports(m.addedNodes); + } + } + }).observe(document.head, { + childList: true + }); + function handleImports(nodes) { + for (var i = 0, l = nodes.length, n; i < l && (n = nodes[i]); i++) { + if (isImport(n)) { + handleImport(n); + } + } + } + function isImport(element) { + return element.localName === "link" && element.rel === "import"; + } + function handleImport(element) { + var loaded = element.import; + if (loaded) { + markTargetLoaded({ + target: element + }); + } else { + element.addEventListener("load", markTargetLoaded); + element.addEventListener("error", markTargetLoaded); + } + } + (function() { + if (document.readyState === "loading") { + var imports = document.querySelectorAll("link[rel=import]"); + for (var i = 0, l = imports.length, imp; i < l && (imp = imports[i]); i++) { + handleImport(imp); + } + } + })(); + } + whenReady(function(detail) { + window.HTMLImports.ready = true; + window.HTMLImports.readyTime = new Date().getTime(); + var evt = rootDocument.createEvent("CustomEvent"); + evt.initCustomEvent("HTMLImportsLoaded", true, true, detail); + rootDocument.dispatchEvent(evt); + }); + scope.IMPORT_LINK_TYPE = IMPORT_LINK_TYPE; + scope.useNative = useNative; + scope.rootDocument = rootDocument; + scope.whenReady = whenReady; + scope.isIE = isIE; +})(window.HTMLImports); + +(function(scope) { + var modules = []; + var addModule = function(module) { + modules.push(module); + }; + var initializeModules = function() { + modules.forEach(function(module) { + module(scope); + }); + }; + scope.addModule = addModule; + scope.initializeModules = initializeModules; +})(window.HTMLImports); + +window.HTMLImports.addModule(function(scope) { + var CSS_URL_REGEXP = /(url\()([^)]*)(\))/g; + var CSS_IMPORT_REGEXP = /(@import[\s]+(?!url\())([^;]*)(;)/g; + var path = { + resolveUrlsInStyle: function(style, linkUrl) { + var doc = style.ownerDocument; + var resolver = doc.createElement("a"); + style.textContent = this.resolveUrlsInCssText(style.textContent, linkUrl, resolver); + return style; + }, + resolveUrlsInCssText: function(cssText, linkUrl, urlObj) { + var r = this.replaceUrls(cssText, urlObj, linkUrl, CSS_URL_REGEXP); + r = this.replaceUrls(r, urlObj, linkUrl, CSS_IMPORT_REGEXP); + return r; + }, + replaceUrls: function(text, urlObj, linkUrl, regexp) { + return text.replace(regexp, function(m, pre, url, post) { + var urlPath = url.replace(/["']/g, ""); + if (linkUrl) { + urlPath = new URL(urlPath, linkUrl).href; + } + urlObj.href = urlPath; + urlPath = urlObj.href; + return pre + "'" + urlPath + "'" + post; + }); + } + }; + scope.path = path; +}); + +window.HTMLImports.addModule(function(scope) { + var xhr = { + async: true, + ok: function(request) { + return request.status >= 200 && request.status < 300 || request.status === 304 || request.status === 0; + }, + load: function(url, next, nextContext) { + var request = new XMLHttpRequest(); + if (scope.flags.debug || scope.flags.bust) { + url += "?" + Math.random(); + } + request.open("GET", url, xhr.async); + request.addEventListener("readystatechange", function(e) { + if (request.readyState === 4) { + var locationHeader = request.getResponseHeader("Location"); + var redirectedUrl = null; + if (locationHeader) { + var redirectedUrl = locationHeader.substr(0, 1) === "/" ? location.origin + locationHeader : locationHeader; + } + next.call(nextContext, !xhr.ok(request) && request, request.response || request.responseText, redirectedUrl); + } + }); + request.send(); + return request; + }, + loadDocument: function(url, next, nextContext) { + this.load(url, next, nextContext).responseType = "document"; + } + }; + scope.xhr = xhr; +}); + +window.HTMLImports.addModule(function(scope) { + var xhr = scope.xhr; + var flags = scope.flags; + var Loader = function(onLoad, onComplete) { + this.cache = {}; + this.onload = onLoad; + this.oncomplete = onComplete; + this.inflight = 0; + this.pending = {}; + }; + Loader.prototype = { + addNodes: function(nodes) { + this.inflight += nodes.length; + for (var i = 0, l = nodes.length, n; i < l && (n = nodes[i]); i++) { + this.require(n); + } + this.checkDone(); + }, + addNode: function(node) { + this.inflight++; + this.require(node); + this.checkDone(); + }, + require: function(elt) { + var url = elt.src || elt.href; + elt.__nodeUrl = url; + if (!this.dedupe(url, elt)) { + this.fetch(url, elt); + } + }, + dedupe: function(url, elt) { + if (this.pending[url]) { + this.pending[url].push(elt); + return true; + } + var resource; + if (this.cache[url]) { + this.onload(url, elt, this.cache[url]); + this.tail(); + return true; + } + this.pending[url] = [ elt ]; + return false; + }, + fetch: function(url, elt) { + flags.load && console.log("fetch", url, elt); + if (!url) { + setTimeout(function() { + this.receive(url, elt, { + error: "href must be specified" + }, null); + }.bind(this), 0); + } else if (url.match(/^data:/)) { + var pieces = url.split(","); + var header = pieces[0]; + var body = pieces[1]; + if (header.indexOf(";base64") > -1) { + body = atob(body); + } else { + body = decodeURIComponent(body); + } + setTimeout(function() { + this.receive(url, elt, null, body); + }.bind(this), 0); + } else { + var receiveXhr = function(err, resource, redirectedUrl) { + this.receive(url, elt, err, resource, redirectedUrl); + }.bind(this); + xhr.load(url, receiveXhr); + } + }, + receive: function(url, elt, err, resource, redirectedUrl) { + this.cache[url] = resource; + var $p = this.pending[url]; + for (var i = 0, l = $p.length, p; i < l && (p = $p[i]); i++) { + this.onload(url, p, resource, err, redirectedUrl); + this.tail(); + } + this.pending[url] = null; + }, + tail: function() { + --this.inflight; + this.checkDone(); + }, + checkDone: function() { + if (!this.inflight) { + this.oncomplete(); + } + } + }; + scope.Loader = Loader; +}); + +window.HTMLImports.addModule(function(scope) { + var Observer = function(addCallback) { + this.addCallback = addCallback; + this.mo = new MutationObserver(this.handler.bind(this)); + }; + Observer.prototype = { + handler: function(mutations) { + for (var i = 0, l = mutations.length, m; i < l && (m = mutations[i]); i++) { + if (m.type === "childList" && m.addedNodes.length) { + this.addedNodes(m.addedNodes); + } + } + }, + addedNodes: function(nodes) { + if (this.addCallback) { + this.addCallback(nodes); + } + for (var i = 0, l = nodes.length, n, loading; i < l && (n = nodes[i]); i++) { + if (n.children && n.children.length) { + this.addedNodes(n.children); + } + } + }, + observe: function(root) { + this.mo.observe(root, { + childList: true, + subtree: true + }); + } + }; + scope.Observer = Observer; +}); + +window.HTMLImports.addModule(function(scope) { + var path = scope.path; + var rootDocument = scope.rootDocument; + var flags = scope.flags; + var isIE = scope.isIE; + var IMPORT_LINK_TYPE = scope.IMPORT_LINK_TYPE; + var IMPORT_SELECTOR = "link[rel=" + IMPORT_LINK_TYPE + "]"; + var importParser = { + documentSelectors: IMPORT_SELECTOR, + importsSelectors: [ IMPORT_SELECTOR, "link[rel=stylesheet]", "style", "script:not([type])", 'script[type="application/javascript"]', 'script[type="text/javascript"]' ].join(","), + map: { + link: "parseLink", + script: "parseScript", + style: "parseStyle" + }, + dynamicElements: [], + parseNext: function() { + var next = this.nextToParse(); + if (next) { + this.parse(next); + } + }, + parse: function(elt) { + if (this.isParsed(elt)) { + flags.parse && console.log("[%s] is already parsed", elt.localName); + return; + } + var fn = this[this.map[elt.localName]]; + if (fn) { + this.markParsing(elt); + fn.call(this, elt); + } + }, + parseDynamic: function(elt, quiet) { + this.dynamicElements.push(elt); + if (!quiet) { + this.parseNext(); + } + }, + markParsing: function(elt) { + flags.parse && console.log("parsing", elt); + this.parsingElement = elt; + }, + markParsingComplete: function(elt) { + elt.__importParsed = true; + this.markDynamicParsingComplete(elt); + if (elt.__importElement) { + elt.__importElement.__importParsed = true; + this.markDynamicParsingComplete(elt.__importElement); + } + this.parsingElement = null; + flags.parse && console.log("completed", elt); + }, + markDynamicParsingComplete: function(elt) { + var i = this.dynamicElements.indexOf(elt); + if (i >= 0) { + this.dynamicElements.splice(i, 1); + } + }, + parseImport: function(elt) { + if (window.HTMLImports.__importsParsingHook) { + window.HTMLImports.__importsParsingHook(elt); + } + if (elt.import) { + elt.import.__importParsed = true; + } + this.markParsingComplete(elt); + if (elt.__resource && !elt.__error) { + elt.dispatchEvent(new CustomEvent("load", { + bubbles: false + })); + } else { + elt.dispatchEvent(new CustomEvent("error", { + bubbles: false + })); + } + if (elt.__pending) { + var fn; + while (elt.__pending.length) { + fn = elt.__pending.shift(); + if (fn) { + fn({ + target: elt + }); + } + } + } + this.parseNext(); + }, + parseLink: function(linkElt) { + if (nodeIsImport(linkElt)) { + this.parseImport(linkElt); + } else { + linkElt.href = linkElt.href; + this.parseGeneric(linkElt); + } + }, + parseStyle: function(elt) { + var src = elt; + elt = cloneStyle(elt); + src.__appliedElement = elt; + elt.__importElement = src; + this.parseGeneric(elt); + }, + parseGeneric: function(elt) { + this.trackElement(elt); + this.addElementToDocument(elt); + }, + rootImportForElement: function(elt) { + var n = elt; + while (n.ownerDocument.__importLink) { + n = n.ownerDocument.__importLink; + } + return n; + }, + addElementToDocument: function(elt) { + var port = this.rootImportForElement(elt.__importElement || elt); + port.parentNode.insertBefore(elt, port); + }, + trackElement: function(elt, callback) { + var self = this; + var done = function(e) { + if (callback) { + callback(e); + } + self.markParsingComplete(elt); + self.parseNext(); + }; + elt.addEventListener("load", done); + elt.addEventListener("error", done); + if (isIE && elt.localName === "style") { + var fakeLoad = false; + if (elt.textContent.indexOf("@import") == -1) { + fakeLoad = true; + } else if (elt.sheet) { + fakeLoad = true; + var csr = elt.sheet.cssRules; + var len = csr ? csr.length : 0; + for (var i = 0, r; i < len && (r = csr[i]); i++) { + if (r.type === CSSRule.IMPORT_RULE) { + fakeLoad = fakeLoad && Boolean(r.styleSheet); + } + } + } + if (fakeLoad) { + setTimeout(function() { + elt.dispatchEvent(new CustomEvent("load", { + bubbles: false + })); + }); + } + } + }, + parseScript: function(scriptElt) { + var script = document.createElement("script"); + script.__importElement = scriptElt; + script.src = scriptElt.src ? scriptElt.src : generateScriptDataUrl(scriptElt); + scope.currentScript = scriptElt; + this.trackElement(script, function(e) { + script.parentNode.removeChild(script); + scope.currentScript = null; + }); + this.addElementToDocument(script); + }, + nextToParse: function() { + this._mayParse = []; + return !this.parsingElement && (this.nextToParseInDoc(rootDocument) || this.nextToParseDynamic()); + }, + nextToParseInDoc: function(doc, link) { + if (doc && this._mayParse.indexOf(doc) < 0) { + this._mayParse.push(doc); + var nodes = doc.querySelectorAll(this.parseSelectorsForNode(doc)); + for (var i = 0, l = nodes.length, p = 0, n; i < l && (n = nodes[i]); i++) { + if (!this.isParsed(n)) { + if (this.hasResource(n)) { + return nodeIsImport(n) ? this.nextToParseInDoc(n.import, n) : n; + } else { + return; + } + } + } + } + return link; + }, + nextToParseDynamic: function() { + return this.dynamicElements[0]; + }, + parseSelectorsForNode: function(node) { + var doc = node.ownerDocument || node; + return doc === rootDocument ? this.documentSelectors : this.importsSelectors; + }, + isParsed: function(node) { + return node.__importParsed; + }, + needsDynamicParsing: function(elt) { + return this.dynamicElements.indexOf(elt) >= 0; + }, + hasResource: function(node) { + if (nodeIsImport(node) && node.import === undefined) { + return false; + } + return true; + } + }; + function nodeIsImport(elt) { + return elt.localName === "link" && elt.rel === IMPORT_LINK_TYPE; + } + function generateScriptDataUrl(script) { + var scriptContent = generateScriptContent(script); + return "data:text/javascript;charset=utf-8," + encodeURIComponent(scriptContent); + } + function generateScriptContent(script) { + return script.textContent + generateSourceMapHint(script); + } + function generateSourceMapHint(script) { + var owner = script.ownerDocument; + owner.__importedScripts = owner.__importedScripts || 0; + var moniker = script.ownerDocument.baseURI; + var num = owner.__importedScripts ? "-" + owner.__importedScripts : ""; + owner.__importedScripts++; + return "\n//# sourceURL=" + moniker + num + ".js\n"; + } + function cloneStyle(style) { + var clone = style.ownerDocument.createElement("style"); + clone.textContent = style.textContent; + path.resolveUrlsInStyle(clone); + return clone; + } + scope.parser = importParser; + scope.IMPORT_SELECTOR = IMPORT_SELECTOR; +}); + +window.HTMLImports.addModule(function(scope) { + var flags = scope.flags; + var IMPORT_LINK_TYPE = scope.IMPORT_LINK_TYPE; + var IMPORT_SELECTOR = scope.IMPORT_SELECTOR; + var rootDocument = scope.rootDocument; + var Loader = scope.Loader; + var Observer = scope.Observer; + var parser = scope.parser; + var importer = { + documents: {}, + documentPreloadSelectors: IMPORT_SELECTOR, + importsPreloadSelectors: [ IMPORT_SELECTOR ].join(","), + loadNode: function(node) { + importLoader.addNode(node); + }, + loadSubtree: function(parent) { + var nodes = this.marshalNodes(parent); + importLoader.addNodes(nodes); + }, + marshalNodes: function(parent) { + return parent.querySelectorAll(this.loadSelectorsForNode(parent)); + }, + loadSelectorsForNode: function(node) { + var doc = node.ownerDocument || node; + return doc === rootDocument ? this.documentPreloadSelectors : this.importsPreloadSelectors; + }, + loaded: function(url, elt, resource, err, redirectedUrl) { + flags.load && console.log("loaded", url, elt); + elt.__resource = resource; + elt.__error = err; + if (isImportLink(elt)) { + var doc = this.documents[url]; + if (doc === undefined) { + doc = err ? null : makeDocument(resource, redirectedUrl || url); + if (doc) { + doc.__importLink = elt; + this.bootDocument(doc); + } + this.documents[url] = doc; + } + elt.import = doc; + } + parser.parseNext(); + }, + bootDocument: function(doc) { + this.loadSubtree(doc); + this.observer.observe(doc); + parser.parseNext(); + }, + loadedAll: function() { + parser.parseNext(); + } + }; + var importLoader = new Loader(importer.loaded.bind(importer), importer.loadedAll.bind(importer)); + importer.observer = new Observer(); + function isImportLink(elt) { + return isLinkRel(elt, IMPORT_LINK_TYPE); + } + function isLinkRel(elt, rel) { + return elt.localName === "link" && elt.getAttribute("rel") === rel; + } + function hasBaseURIAccessor(doc) { + return !!Object.getOwnPropertyDescriptor(doc, "baseURI"); + } + function makeDocument(resource, url) { + var doc = document.implementation.createHTMLDocument(IMPORT_LINK_TYPE); + doc._URL = url; + var base = doc.createElement("base"); + base.setAttribute("href", url); + if (!doc.baseURI && !hasBaseURIAccessor(doc)) { + Object.defineProperty(doc, "baseURI", { + value: url + }); + } + var meta = doc.createElement("meta"); + meta.setAttribute("charset", "utf-8"); + doc.head.appendChild(meta); + doc.head.appendChild(base); + doc.body.innerHTML = resource; + if (window.HTMLTemplateElement && HTMLTemplateElement.bootstrap) { + HTMLTemplateElement.bootstrap(doc); + } + return doc; + } + if (!document.baseURI) { + var baseURIDescriptor = { + get: function() { + var base = document.querySelector("base"); + return base ? base.href : window.location.href; + }, + configurable: true + }; + Object.defineProperty(document, "baseURI", baseURIDescriptor); + Object.defineProperty(rootDocument, "baseURI", baseURIDescriptor); + } + scope.importer = importer; + scope.importLoader = importLoader; +}); + +window.HTMLImports.addModule(function(scope) { + var parser = scope.parser; + var importer = scope.importer; + var dynamic = { + added: function(nodes) { + var owner, parsed, loading; + for (var i = 0, l = nodes.length, n; i < l && (n = nodes[i]); i++) { + if (!owner) { + owner = n.ownerDocument; + parsed = parser.isParsed(owner); + } + loading = this.shouldLoadNode(n); + if (loading) { + importer.loadNode(n); + } + if (this.shouldParseNode(n) && parsed) { + parser.parseDynamic(n, loading); + } + } + }, + shouldLoadNode: function(node) { + return node.nodeType === 1 && matches.call(node, importer.loadSelectorsForNode(node)); + }, + shouldParseNode: function(node) { + return node.nodeType === 1 && matches.call(node, parser.parseSelectorsForNode(node)); + } + }; + importer.observer.addCallback = dynamic.added.bind(dynamic); + var matches = HTMLElement.prototype.matches || HTMLElement.prototype.matchesSelector || HTMLElement.prototype.webkitMatchesSelector || HTMLElement.prototype.mozMatchesSelector || HTMLElement.prototype.msMatchesSelector; +}); + +(function(scope) { + var initializeModules = scope.initializeModules; + var isIE = scope.isIE; + if (scope.useNative) { + return; + } + if (isIE && typeof window.CustomEvent !== "function") { + window.CustomEvent = function(inType, params) { + params = params || {}; + var e = document.createEvent("CustomEvent"); + e.initCustomEvent(inType, Boolean(params.bubbles), Boolean(params.cancelable), params.detail); + e.preventDefault = function() { + Object.defineProperty(this, "defaultPrevented", { + get: function() { + return true; + } + }); + }; + return e; + }; + window.CustomEvent.prototype = window.Event.prototype; + } + initializeModules(); + var rootDocument = scope.rootDocument; + function bootstrap() { + window.HTMLImports.importer.bootDocument(rootDocument); + } + if (document.readyState === "complete" || document.readyState === "interactive" && !window.attachEvent) { + bootstrap(); + } else { + document.addEventListener("DOMContentLoaded", bootstrap); + } +})(window.HTMLImports); + +window.CustomElements = window.CustomElements || { + flags: {} +}; + +(function(scope) { + var flags = scope.flags; + var modules = []; + var addModule = function(module) { + modules.push(module); + }; + var initializeModules = function() { + modules.forEach(function(module) { + module(scope); + }); + }; + scope.addModule = addModule; + scope.initializeModules = initializeModules; + scope.hasNative = Boolean(document.registerElement); + scope.useNative = !flags.register && scope.hasNative && !window.ShadowDOMPolyfill && (!window.HTMLImports || window.HTMLImports.useNative); +})(window.CustomElements); + +window.CustomElements.addModule(function(scope) { + var IMPORT_LINK_TYPE = window.HTMLImports ? window.HTMLImports.IMPORT_LINK_TYPE : "none"; + function forSubtree(node, cb) { + findAllElements(node, function(e) { + if (cb(e)) { + return true; + } + forRoots(e, cb); + }); + forRoots(node, cb); + } + function findAllElements(node, find, data) { + var e = node.firstElementChild; + if (!e) { + e = node.firstChild; + while (e && e.nodeType !== Node.ELEMENT_NODE) { + e = e.nextSibling; + } + } + while (e) { + if (find(e, data) !== true) { + findAllElements(e, find, data); + } + e = e.nextElementSibling; + } + return null; + } + function forRoots(node, cb) { + var root = node.shadowRoot; + while (root) { + forSubtree(root, cb); + root = root.olderShadowRoot; + } + } + function forDocumentTree(doc, cb) { + _forDocumentTree(doc, cb, []); + } + function _forDocumentTree(doc, cb, processingDocuments) { + doc = window.wrap(doc); + if (processingDocuments.indexOf(doc) >= 0) { + return; + } + processingDocuments.push(doc); + var imports = doc.querySelectorAll("link[rel=" + IMPORT_LINK_TYPE + "]"); + for (var i = 0, l = imports.length, n; i < l && (n = imports[i]); i++) { + if (n.import) { + _forDocumentTree(n.import, cb, processingDocuments); + } + } + cb(doc); + } + scope.forDocumentTree = forDocumentTree; + scope.forSubtree = forSubtree; +}); + +window.CustomElements.addModule(function(scope) { + var flags = scope.flags; + var forSubtree = scope.forSubtree; + var forDocumentTree = scope.forDocumentTree; + function addedNode(node) { + return added(node) || addedSubtree(node); + } + function added(node) { + if (scope.upgrade(node)) { + return true; + } + attached(node); + } + function addedSubtree(node) { + forSubtree(node, function(e) { + if (added(e)) { + return true; + } + }); + } + function attachedNode(node) { + attached(node); + if (inDocument(node)) { + forSubtree(node, function(e) { + attached(e); + }); + } + } + var hasPolyfillMutations = !window.MutationObserver || window.MutationObserver === window.JsMutationObserver; + scope.hasPolyfillMutations = hasPolyfillMutations; + var isPendingMutations = false; + var pendingMutations = []; + function deferMutation(fn) { + pendingMutations.push(fn); + if (!isPendingMutations) { + isPendingMutations = true; + setTimeout(takeMutations); + } + } + function takeMutations() { + isPendingMutations = false; + var $p = pendingMutations; + for (var i = 0, l = $p.length, p; i < l && (p = $p[i]); i++) { + p(); + } + pendingMutations = []; + } + function attached(element) { + if (hasPolyfillMutations) { + deferMutation(function() { + _attached(element); + }); + } else { + _attached(element); + } + } + function _attached(element) { + if (element.__upgraded__ && (element.attachedCallback || element.detachedCallback)) { + if (!element.__attached && inDocument(element)) { + element.__attached = true; + if (element.attachedCallback) { + element.attachedCallback(); + } + } + } + } + function detachedNode(node) { + detached(node); + forSubtree(node, function(e) { + detached(e); + }); + } + function detached(element) { + if (hasPolyfillMutations) { + deferMutation(function() { + _detached(element); + }); + } else { + _detached(element); + } + } + function _detached(element) { + if (element.__upgraded__ && (element.attachedCallback || element.detachedCallback)) { + if (element.__attached && !inDocument(element)) { + element.__attached = false; + if (element.detachedCallback) { + element.detachedCallback(); + } + } + } + } + function inDocument(element) { + var p = element; + var doc = wrap(document); + while (p) { + if (p == doc) { + return true; + } + p = p.parentNode || p.nodeType === Node.DOCUMENT_FRAGMENT_NODE && p.host; + } + } + function watchShadow(node) { + if (node.shadowRoot && !node.shadowRoot.__watched) { + flags.dom && console.log("watching shadow-root for: ", node.localName); + var root = node.shadowRoot; + while (root) { + observe(root); + root = root.olderShadowRoot; + } + } + } + function handler(mutations) { + if (flags.dom) { + var mx = mutations[0]; + if (mx && mx.type === "childList" && mx.addedNodes) { + if (mx.addedNodes) { + var d = mx.addedNodes[0]; + while (d && d !== document && !d.host) { + d = d.parentNode; + } + var u = d && (d.URL || d._URL || d.host && d.host.localName) || ""; + u = u.split("/?").shift().split("/").pop(); + } + } + console.group("mutations (%d) [%s]", mutations.length, u || ""); + } + mutations.forEach(function(mx) { + if (mx.type === "childList") { + forEach(mx.addedNodes, function(n) { + if (!n.localName) { + return; + } + addedNode(n); + }); + forEach(mx.removedNodes, function(n) { + if (!n.localName) { + return; + } + detachedNode(n); + }); + } + }); + flags.dom && console.groupEnd(); + } + function takeRecords(node) { + node = window.wrap(node); + if (!node) { + node = window.wrap(document); + } + while (node.parentNode) { + node = node.parentNode; + } + var observer = node.__observer; + if (observer) { + handler(observer.takeRecords()); + takeMutations(); + } + } + var forEach = Array.prototype.forEach.call.bind(Array.prototype.forEach); + function observe(inRoot) { + if (inRoot.__observer) { + return; + } + var observer = new MutationObserver(handler); + observer.observe(inRoot, { + childList: true, + subtree: true + }); + inRoot.__observer = observer; + } + function upgradeDocument(doc) { + doc = window.wrap(doc); + flags.dom && console.group("upgradeDocument: ", doc.baseURI.split("/").pop()); + addedNode(doc); + observe(doc); + flags.dom && console.groupEnd(); + } + function upgradeDocumentTree(doc) { + forDocumentTree(doc, upgradeDocument); + } + var originalCreateShadowRoot = Element.prototype.createShadowRoot; + if (originalCreateShadowRoot) { + Element.prototype.createShadowRoot = function() { + var root = originalCreateShadowRoot.call(this); + window.CustomElements.watchShadow(this); + return root; + }; + } + scope.watchShadow = watchShadow; + scope.upgradeDocumentTree = upgradeDocumentTree; + scope.upgradeSubtree = addedSubtree; + scope.upgradeAll = addedNode; + scope.attachedNode = attachedNode; + scope.takeRecords = takeRecords; +}); + +window.CustomElements.addModule(function(scope) { + var flags = scope.flags; + function upgrade(node) { + if (!node.__upgraded__ && node.nodeType === Node.ELEMENT_NODE) { + var is = node.getAttribute("is"); + var definition = scope.getRegisteredDefinition(is || node.localName); + if (definition) { + if (is && definition.tag == node.localName) { + return upgradeWithDefinition(node, definition); + } else if (!is && !definition.extends) { + return upgradeWithDefinition(node, definition); + } + } + } + } + function upgradeWithDefinition(element, definition) { + flags.upgrade && console.group("upgrade:", element.localName); + if (definition.is) { + element.setAttribute("is", definition.is); + } + implementPrototype(element, definition); + element.__upgraded__ = true; + created(element); + scope.attachedNode(element); + scope.upgradeSubtree(element); + flags.upgrade && console.groupEnd(); + return element; + } + function implementPrototype(element, definition) { + if (Object.__proto__) { + element.__proto__ = definition.prototype; + } else { + customMixin(element, definition.prototype, definition.native); + element.__proto__ = definition.prototype; + } + } + function customMixin(inTarget, inSrc, inNative) { + var used = {}; + var p = inSrc; + while (p !== inNative && p !== HTMLElement.prototype) { + var keys = Object.getOwnPropertyNames(p); + for (var i = 0, k; k = keys[i]; i++) { + if (!used[k]) { + Object.defineProperty(inTarget, k, Object.getOwnPropertyDescriptor(p, k)); + used[k] = 1; + } + } + p = Object.getPrototypeOf(p); + } + } + function created(element) { + if (element.createdCallback) { + element.createdCallback(); + } + } + scope.upgrade = upgrade; + scope.upgradeWithDefinition = upgradeWithDefinition; + scope.implementPrototype = implementPrototype; +}); + +window.CustomElements.addModule(function(scope) { + var isIE11OrOlder = scope.isIE11OrOlder; + var upgradeDocumentTree = scope.upgradeDocumentTree; + var upgradeAll = scope.upgradeAll; + var upgradeWithDefinition = scope.upgradeWithDefinition; + var implementPrototype = scope.implementPrototype; + var useNative = scope.useNative; + function register(name, options) { + var definition = options || {}; + if (!name) { + throw new Error("document.registerElement: first argument `name` must not be empty"); + } + if (name.indexOf("-") < 0) { + throw new Error("document.registerElement: first argument ('name') must contain a dash ('-'). Argument provided was '" + String(name) + "'."); + } + if (isReservedTag(name)) { + throw new Error("Failed to execute 'registerElement' on 'Document': Registration failed for type '" + String(name) + "'. The type name is invalid."); + } + if (getRegisteredDefinition(name)) { + throw new Error("DuplicateDefinitionError: a type with name '" + String(name) + "' is already registered"); + } + if (!definition.prototype) { + definition.prototype = Object.create(HTMLElement.prototype); + } + definition.__name = name.toLowerCase(); + definition.lifecycle = definition.lifecycle || {}; + definition.ancestry = ancestry(definition.extends); + resolveTagName(definition); + resolvePrototypeChain(definition); + overrideAttributeApi(definition.prototype); + registerDefinition(definition.__name, definition); + definition.ctor = generateConstructor(definition); + definition.ctor.prototype = definition.prototype; + definition.prototype.constructor = definition.ctor; + if (scope.ready) { + upgradeDocumentTree(document); + } + return definition.ctor; + } + function overrideAttributeApi(prototype) { + if (prototype.setAttribute._polyfilled) { + return; + } + var setAttribute = prototype.setAttribute; + prototype.setAttribute = function(name, value) { + changeAttribute.call(this, name, value, setAttribute); + }; + var removeAttribute = prototype.removeAttribute; + prototype.removeAttribute = function(name) { + changeAttribute.call(this, name, null, removeAttribute); + }; + prototype.setAttribute._polyfilled = true; + } + function changeAttribute(name, value, operation) { + name = name.toLowerCase(); + var oldValue = this.getAttribute(name); + operation.apply(this, arguments); + var newValue = this.getAttribute(name); + if (this.attributeChangedCallback && newValue !== oldValue) { + this.attributeChangedCallback(name, oldValue, newValue); + } + } + function isReservedTag(name) { + for (var i = 0; i < reservedTagList.length; i++) { + if (name === reservedTagList[i]) { + return true; + } + } + } + var reservedTagList = [ "annotation-xml", "color-profile", "font-face", "font-face-src", "font-face-uri", "font-face-format", "font-face-name", "missing-glyph" ]; + function ancestry(extnds) { + var extendee = getRegisteredDefinition(extnds); + if (extendee) { + return ancestry(extendee.extends).concat([ extendee ]); + } + return []; + } + function resolveTagName(definition) { + var baseTag = definition.extends; + for (var i = 0, a; a = definition.ancestry[i]; i++) { + baseTag = a.is && a.tag; + } + definition.tag = baseTag || definition.__name; + if (baseTag) { + definition.is = definition.__name; + } + } + function resolvePrototypeChain(definition) { + if (!Object.__proto__) { + var nativePrototype = HTMLElement.prototype; + if (definition.is) { + var inst = document.createElement(definition.tag); + var expectedPrototype = Object.getPrototypeOf(inst); + if (expectedPrototype === definition.prototype) { + nativePrototype = expectedPrototype; + } + } + var proto = definition.prototype, ancestor; + while (proto && proto !== nativePrototype) { + ancestor = Object.getPrototypeOf(proto); + proto.__proto__ = ancestor; + proto = ancestor; + } + definition.native = nativePrototype; + } + } + function instantiate(definition) { + return upgradeWithDefinition(domCreateElement(definition.tag), definition); + } + var registry = {}; + function getRegisteredDefinition(name) { + if (name) { + return registry[name.toLowerCase()]; + } + } + function registerDefinition(name, definition) { + registry[name] = definition; + } + function generateConstructor(definition) { + return function() { + return instantiate(definition); + }; + } + var HTML_NAMESPACE = "http://www.w3.org/1999/xhtml"; + function createElementNS(namespace, tag, typeExtension) { + if (namespace === HTML_NAMESPACE) { + return createElement(tag, typeExtension); + } else { + return domCreateElementNS(namespace, tag); + } + } + function createElement(tag, typeExtension) { + if (tag) { + tag = tag.toLowerCase(); + } + if (typeExtension) { + typeExtension = typeExtension.toLowerCase(); + } + var definition = getRegisteredDefinition(typeExtension || tag); + if (definition) { + if (tag == definition.tag && typeExtension == definition.is) { + return new definition.ctor(); + } + if (!typeExtension && !definition.is) { + return new definition.ctor(); + } + } + var element; + if (typeExtension) { + element = createElement(tag); + element.setAttribute("is", typeExtension); + return element; + } + element = domCreateElement(tag); + if (tag.indexOf("-") >= 0) { + implementPrototype(element, HTMLElement); + } + return element; + } + var domCreateElement = document.createElement.bind(document); + var domCreateElementNS = document.createElementNS.bind(document); + var isInstance; + if (!Object.__proto__ && !useNative) { + isInstance = function(obj, ctor) { + var p = obj; + while (p) { + if (p === ctor.prototype) { + return true; + } + p = p.__proto__; + } + return false; + }; + } else { + isInstance = function(obj, base) { + return obj instanceof base; + }; + } + function wrapDomMethodToForceUpgrade(obj, methodName) { + var orig = obj[methodName]; + obj[methodName] = function() { + var n = orig.apply(this, arguments); + upgradeAll(n); + return n; + }; + } + wrapDomMethodToForceUpgrade(Node.prototype, "cloneNode"); + wrapDomMethodToForceUpgrade(document, "importNode"); + if (isIE11OrOlder) { + (function() { + var importNode = document.importNode; + document.importNode = function() { + var n = importNode.apply(document, arguments); + if (n.nodeType == n.DOCUMENT_FRAGMENT_NODE) { + var f = document.createDocumentFragment(); + f.appendChild(n); + return f; + } else { + return n; + } + }; + })(); + } + document.registerElement = register; + document.createElement = createElement; + document.createElementNS = createElementNS; + scope.registry = registry; + scope.instanceof = isInstance; + scope.reservedTagList = reservedTagList; + scope.getRegisteredDefinition = getRegisteredDefinition; + document.register = document.registerElement; +}); + +(function(scope) { + var useNative = scope.useNative; + var initializeModules = scope.initializeModules; + var isIE11OrOlder = /Trident/.test(navigator.userAgent); + if (useNative) { + var nop = function() {}; + scope.watchShadow = nop; + scope.upgrade = nop; + scope.upgradeAll = nop; + scope.upgradeDocumentTree = nop; + scope.upgradeSubtree = nop; + scope.takeRecords = nop; + scope.instanceof = function(obj, base) { + return obj instanceof base; + }; + } else { + initializeModules(); + } + var upgradeDocumentTree = scope.upgradeDocumentTree; + if (!window.wrap) { + if (window.ShadowDOMPolyfill) { + window.wrap = window.ShadowDOMPolyfill.wrapIfNeeded; + window.unwrap = window.ShadowDOMPolyfill.unwrapIfNeeded; + } else { + window.wrap = window.unwrap = function(node) { + return node; + }; + } + } + function bootstrap() { + upgradeDocumentTree(window.wrap(document)); + if (window.HTMLImports) { + window.HTMLImports.__importsParsingHook = function(elt) { + upgradeDocumentTree(wrap(elt.import)); + }; + } + window.CustomElements.ready = true; + setTimeout(function() { + window.CustomElements.readyTime = Date.now(); + if (window.HTMLImports) { + window.CustomElements.elapsed = window.CustomElements.readyTime - window.HTMLImports.readyTime; + } + document.dispatchEvent(new CustomEvent("WebComponentsReady", { + bubbles: true + })); + }); + } + if (isIE11OrOlder && typeof window.CustomEvent !== "function") { + window.CustomEvent = function(inType, params) { + params = params || {}; + var e = document.createEvent("CustomEvent"); + e.initCustomEvent(inType, Boolean(params.bubbles), Boolean(params.cancelable), params.detail); + e.preventDefault = function() { + Object.defineProperty(this, "defaultPrevented", { + get: function() { + return true; + } + }); + }; + return e; + }; + window.CustomEvent.prototype = window.Event.prototype; + } + if (document.readyState === "complete" || scope.flags.eager) { + bootstrap(); + } else if (document.readyState === "interactive" && !window.attachEvent && (!window.HTMLImports || window.HTMLImports.ready)) { + bootstrap(); + } else { + var loadEvent = window.HTMLImports && !window.HTMLImports.ready ? "HTMLImportsLoaded" : "DOMContentLoaded"; + window.addEventListener(loadEvent, bootstrap); + } + scope.isIE11OrOlder = isIE11OrOlder; +})(window.CustomElements); + +(function(scope) { + if (!Function.prototype.bind) { + Function.prototype.bind = function(scope) { + var self = this; + var args = Array.prototype.slice.call(arguments, 1); + return function() { + var args2 = args.slice(); + args2.push.apply(args2, arguments); + return self.apply(scope, args2); + }; + }; + } +})(window.WebComponents); + +(function(scope) { + "use strict"; + if (!window.performance) { + var start = Date.now(); + window.performance = { + now: function() { + return Date.now() - start; + } + }; + } + if (!window.requestAnimationFrame) { + window.requestAnimationFrame = function() { + var nativeRaf = window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame; + return nativeRaf ? function(callback) { + return nativeRaf(function() { + callback(performance.now()); + }); + } : function(callback) { + return window.setTimeout(callback, 1e3 / 60); + }; + }(); + } + if (!window.cancelAnimationFrame) { + window.cancelAnimationFrame = function() { + return window.webkitCancelAnimationFrame || window.mozCancelAnimationFrame || function(id) { + clearTimeout(id); + }; + }(); + } + var elementDeclarations = []; + var polymerStub = function(name, dictionary) { + if (typeof name !== "string" && arguments.length === 1) { + Array.prototype.push.call(arguments, document._currentScript); + } + elementDeclarations.push(arguments); + }; + window.Polymer = polymerStub; + scope.consumeDeclarations = function(callback) { + scope.consumeDeclarations = function() { + throw "Possible attempt to load Polymer twice"; + }; + if (callback) { + callback(elementDeclarations); + } + elementDeclarations = null; + }; + function installPolymerWarning() { + if (window.Polymer === polymerStub) { + window.Polymer = function() { + throw new Error("You tried to use polymer without loading it first. To " + 'load polymer, '); + }; + } + } + if (HTMLImports.useNative) { + installPolymerWarning(); + } else { + window.addEventListener("DOMContentLoaded", installPolymerWarning); + } +})(window.WebComponents); + +(function(scope) { + var style = document.createElement("style"); + style.textContent = "" + "body {" + "transition: opacity ease-in 0.2s;" + " } \n" + "body[unresolved] {" + "opacity: 0; display: block; overflow: hidden; position: relative;" + " } \n"; + var head = document.querySelector("head"); + head.insertBefore(style, head.firstChild); +})(window.WebComponents); + +(function(scope) { + window.Platform = scope; +})(window.WebComponents); \ No newline at end of file diff --git a/static/bower_components/webcomponentsjs/webcomponents.min.js b/static/bower_components/webcomponentsjs/webcomponents.min.js new file mode 100644 index 0000000..4870c72 --- /dev/null +++ b/static/bower_components/webcomponentsjs/webcomponents.min.js @@ -0,0 +1,15 @@ +/** + * @license + * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt + * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt + * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt + * Code distributed by Google as part of the polymer project is also + * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt + */ +// @version 0.7.5 +window.WebComponents=window.WebComponents||{},function(e){var t=e.flags||{},n="webcomponents.js",r=document.querySelector('script[src*="'+n+'"]');if(!t.noOpts){if(location.search.slice(1).split("&").forEach(function(e){var n,r=e.split("=");r[0]&&(n=r[0].match(/wc-(.+)/))&&(t[n[1]]=r[1]||!0)}),r)for(var o,i=0;o=r.attributes[i];i++)"src"!==o.name&&(t[o.name]=o.value||!0);if(t.log&&t.log.split){var a=t.log.split(",");t.log={},a.forEach(function(e){t.log[e]=!0})}else t.log={}}t.shadow=t.shadow||t.shadowdom||t.polyfill,t.shadow="native"===t.shadow?!1:t.shadow||!HTMLElement.prototype.createShadowRoot,t.register&&(window.CustomElements=window.CustomElements||{flags:{}},window.CustomElements.flags.register=t.register),e.flags=t}(WebComponents),WebComponents.flags.shadow&&("undefined"==typeof WeakMap&&!function(){var e=Object.defineProperty,t=Date.now()%1e9,n=function(){this.name="__st"+(1e9*Math.random()>>>0)+(t++ +"__")};n.prototype={set:function(t,n){var r=t[this.name];return r&&r[0]===t?r[1]=n:e(t,this.name,{value:[t,n],writable:!0}),this},get:function(e){var t;return(t=e[this.name])&&t[0]===e?t[1]:void 0},"delete":function(e){var t=e[this.name];return t&&t[0]===e?(t[0]=t[1]=void 0,!0):!1},has:function(e){var t=e[this.name];return t?t[0]===e:!1}},window.WeakMap=n}(),window.ShadowDOMPolyfill={},function(e){"use strict";function t(){if("undefined"!=typeof chrome&&chrome.app&&chrome.app.runtime)return!1;if(navigator.getDeviceStorage)return!1;try{var e=new Function("return true;");return e()}catch(t){return!1}}function n(e){if(!e)throw new Error("Assertion failed")}function r(e,t){for(var n=W(t),r=0;rl;l++)c[l]=new Array(s),c[l][0]=l;for(var u=0;s>u;u++)c[0][u]=u;for(var l=1;a>l;l++)for(var u=1;s>u;u++)if(this.equals(e[t+u-1],r[o+l-1]))c[l][u]=c[l-1][u-1];else{var d=c[l-1][u]+1,p=c[l][u-1]+1;c[l][u]=p>d?d:p}return c},spliceOperationsFromEditDistances:function(e){for(var t=e.length-1,n=e[0].length-1,s=e[t][n],c=[];t>0||n>0;)if(0!=t)if(0!=n){var l,u=e[t-1][n-1],d=e[t-1][n],p=e[t][n-1];l=p>d?u>d?d:u:u>p?p:u,l==u?(u==s?c.push(r):(c.push(o),s=u),t--,n--):l==d?(c.push(a),t--,s=d):(c.push(i),n--,s=p)}else c.push(a),t--;else c.push(i),n--;return c.reverse(),c},calcSplices:function(e,n,s,c,l,u){var d=0,p=0,h=Math.min(s-n,u-l);if(0==n&&0==l&&(d=this.sharedPrefix(e,c,h)),s==e.length&&u==c.length&&(p=this.sharedSuffix(e,c,h-d)),n+=d,l+=d,s-=p,u-=p,s-n==0&&u-l==0)return[];if(n==s){for(var f=t(n,[],0);u>l;)f.removed.push(c[l++]);return[f]}if(l==u)return[t(n,[],s-n)];for(var m=this.spliceOperationsFromEditDistances(this.calcEditDistances(e,n,s,c,l,u)),f=void 0,w=[],v=n,g=l,b=0;br;r++)if(!this.equals(e[r],t[r]))return r;return n},sharedSuffix:function(e,t,n){for(var r=e.length,o=t.length,i=0;n>i&&this.equals(e[--r],t[--o]);)i++;return i},calculateSplices:function(e,t){return this.calcSplices(e,0,e.length,t,0,t.length)},equals:function(e,t){return e===t}},e.ArraySplice=n}(window.ShadowDOMPolyfill),function(e){"use strict";function t(){a=!1;var e=i.slice(0);i=[];for(var t=0;t0){for(var u=0;u0&&r.length>0;){var i=n.pop(),a=r.pop();if(i!==a)break;o=i}return o}function u(e,t,n){t instanceof G.Window&&(t=t.document);var o,i=A(t),a=A(n),s=r(n,e),o=l(i,a);o||(o=a.root);for(var c=o;c;c=c.parent)for(var u=0;u0;i--)if(!g(t[i],e,o,t,r))return!1;return!0}function w(e,t,n,r){var o=ie,i=t[0]||n;return g(i,e,o,t,r)}function v(e,t,n,r){for(var o=ae,i=1;i0&&g(n,e,o,t,r)}function g(e,t,n,r,o){var i=z.get(e);if(!i)return!0;var a=o||s(r,e);if(a===e){if(n===oe)return!0;n===ae&&(n=ie)}else if(n===ae&&!t.bubbles)return!0;if("relatedTarget"in t){var c=B(t),l=c.relatedTarget;if(l){if(l instanceof Object&&l.addEventListener){var d=V(l),p=u(t,e,d);if(p===a)return!0}else p=null;Z.set(t,p)}}J.set(t,n);var h=t.type,f=!1;$.set(t,a),X.set(t,e),i.depth++;for(var m=0,w=i.length;w>m;m++){var v=i[m];if(v.removed)f=!0;else if(!(v.type!==h||!v.capture&&n===oe||v.capture&&n===ae))try{if("function"==typeof v.handler?v.handler.call(e,t):v.handler.handleEvent(t),ee.get(t))return!1}catch(g){P||(P=g)}}if(i.depth--,f&&0===i.depth){var b=i.slice();i.length=0;for(var m=0;mr;r++)t[r]=a(e[r]);return t.length=o,t}function o(e,t){e.prototype[t]=function(){return r(i(this)[t].apply(i(this),arguments))}}var i=e.unsafeUnwrap,a=e.wrap,s={enumerable:!1};n.prototype={item:function(e){return this[e]}},t(n.prototype,"item"),e.wrappers.NodeList=n,e.addWrapNodeListMethod=o,e.wrapNodeList=r}(window.ShadowDOMPolyfill),function(e){"use strict";e.wrapHTMLCollection=e.wrapNodeList,e.wrappers.HTMLCollection=e.wrappers.NodeList}(window.ShadowDOMPolyfill),function(e){"use strict";function t(e){O(e instanceof _)}function n(e){var t=new T;return t[0]=e,t.length=1,t}function r(e,t,n){N(t,"childList",{removedNodes:n,previousSibling:e.previousSibling,nextSibling:e.nextSibling})}function o(e,t){N(e,"childList",{removedNodes:t})}function i(e,t,r,o){if(e instanceof DocumentFragment){var i=s(e);U=!0;for(var a=i.length-1;a>=0;a--)e.removeChild(i[a]),i[a].parentNode_=t;U=!1;for(var a=0;ao;o++)r.appendChild(P(t[o]));return r}function w(e){if(void 0!==e.firstChild_)for(var t=e.firstChild_;t;){var n=t;t=t.nextSibling_,n.parentNode_=n.previousSibling_=n.nextSibling_=void 0}e.firstChild_=e.lastChild_=void 0}function v(e){if(e.invalidateShadowRenderer()){for(var t=e.firstChild;t;){O(t.parentNode===e);var n=t.nextSibling,r=P(t),o=r.parentNode;o&&$.call(o,r),t.previousSibling_=t.nextSibling_=t.parentNode_=null,t=n}e.firstChild_=e.lastChild_=null}else for(var n,i=P(e),a=i.firstChild;a;)n=a.nextSibling,$.call(i,a),a=n}function g(e){var t=e.parentNode;return t&&t.invalidateShadowRenderer()}function b(e){for(var t,n=0;ns;s++)i=b(t[s]),!o&&(a=v(i).root)&&a instanceof e.wrappers.ShadowRoot||(r[n++]=i);return n}function n(e){return String(e).replace(/\/deep\/|::shadow|>>>/g," ")}function r(e){return String(e).replace(/:host\(([^\s]+)\)/g,"$1").replace(/([^\s]):host/g,"$1").replace(":host","*").replace(/\^|\/shadow\/|\/shadow-deep\/|::shadow|\/deep\/|::content|>>>/g," ")}function o(e,t){for(var n,r=e.firstElementChild;r;){if(r.matches(t))return r;if(n=o(r,t))return n;r=r.nextElementSibling}return null}function i(e,t){return e.matches(t)}function a(e,t,n){var r=e.localName;return r===t||r===n&&e.namespaceURI===j}function s(){return!0}function c(e,t,n){return e.localName===n}function l(e,t){return e.namespaceURI===t}function u(e,t,n){return e.namespaceURI===t&&e.localName===n}function d(e,t,n,r,o,i){for(var a=e.firstElementChild;a;)r(a,o,i)&&(n[t++]=a),t=d(a,t,n,r,o,i),a=a.nextElementSibling;return t}function p(n,r,o,i,a){var s,c=g(this),l=v(this).root;if(l instanceof e.wrappers.ShadowRoot)return d(this,r,o,n,i,null);if(c instanceof N)s=S.call(c,i);else{if(!(c instanceof C))return d(this,r,o,n,i,null);s=_.call(c,i)}return t(s,r,o,a)}function h(n,r,o,i,a){var s,c=g(this),l=v(this).root;if(l instanceof e.wrappers.ShadowRoot)return d(this,r,o,n,i,a);if(c instanceof N)s=M.call(c,i,a);else{if(!(c instanceof C))return d(this,r,o,n,i,a);s=T.call(c,i,a)}return t(s,r,o,!1)}function f(n,r,o,i,a){var s,c=g(this),l=v(this).root;if(l instanceof e.wrappers.ShadowRoot)return d(this,r,o,n,i,a);if(c instanceof N)s=L.call(c,i,a);else{if(!(c instanceof C))return d(this,r,o,n,i,a);s=O.call(c,i,a)}return t(s,r,o,!1)}var m=e.wrappers.HTMLCollection,w=e.wrappers.NodeList,v=e.getTreeScope,g=e.unsafeUnwrap,b=e.wrap,y=document.querySelector,E=document.documentElement.querySelector,_=document.querySelectorAll,S=document.documentElement.querySelectorAll,T=document.getElementsByTagName,M=document.documentElement.getElementsByTagName,O=document.getElementsByTagNameNS,L=document.documentElement.getElementsByTagNameNS,N=window.Element,C=window.HTMLDocument||window.Document,j="http://www.w3.org/1999/xhtml",D={querySelector:function(t){var r=n(t),i=r!==t;t=r;var a,s=g(this),c=v(this).root;if(c instanceof e.wrappers.ShadowRoot)return o(this,t);if(s instanceof N)a=b(E.call(s,t));else{if(!(s instanceof C))return o(this,t); + +a=b(y.call(s,t))}return a&&!i&&(c=v(a).root)&&c instanceof e.wrappers.ShadowRoot?o(this,t):a},querySelectorAll:function(e){var t=n(e),r=t!==e;e=t;var o=new w;return o.length=p.call(this,i,0,o,e,r),o}},H={matches:function(t){return t=r(t),e.originalMatches.call(g(this),t)}},x={getElementsByTagName:function(e){var t=new m,n="*"===e?s:a;return t.length=h.call(this,n,0,t,e,e.toLowerCase()),t},getElementsByClassName:function(e){return this.querySelectorAll("."+e)},getElementsByTagNameNS:function(e,t){var n=new m,r=null;return r="*"===e?"*"===t?s:c:"*"===t?l:u,n.length=f.call(this,r,0,n,e||null,t),n}};e.GetElementsByInterface=x,e.SelectorsInterface=D,e.MatchesInterface=H}(window.ShadowDOMPolyfill),function(e){"use strict";function t(e){for(;e&&e.nodeType!==Node.ELEMENT_NODE;)e=e.nextSibling;return e}function n(e){for(;e&&e.nodeType!==Node.ELEMENT_NODE;)e=e.previousSibling;return e}var r=e.wrappers.NodeList,o={get firstElementChild(){return t(this.firstChild)},get lastElementChild(){return n(this.lastChild)},get childElementCount(){for(var e=0,t=this.firstElementChild;t;t=t.nextElementSibling)e++;return e},get children(){for(var e=new r,t=0,n=this.firstElementChild;n;n=n.nextElementSibling)e[t++]=n;return e.length=t,e},remove:function(){var e=this.parentNode;e&&e.removeChild(this)}},i={get nextElementSibling(){return t(this.nextSibling)},get previousElementSibling(){return n(this.previousSibling)}},a={getElementById:function(e){return/[ \t\n\r\f]/.test(e)?null:this.querySelector('[id="'+e+'"]')}};e.ChildNodeInterface=i,e.NonElementParentNodeInterface=a,e.ParentNodeInterface=o}(window.ShadowDOMPolyfill),function(e){"use strict";function t(e){r.call(this,e)}var n=e.ChildNodeInterface,r=e.wrappers.Node,o=e.enqueueMutation,i=e.mixin,a=e.registerWrapper,s=e.unsafeUnwrap,c=window.CharacterData;t.prototype=Object.create(r.prototype),i(t.prototype,{get nodeValue(){return this.data},set nodeValue(e){this.data=e},get textContent(){return this.data},set textContent(e){this.data=e},get data(){return s(this).data},set data(e){var t=s(this).data;o(this,"characterData",{oldValue:t}),s(this).data=e}}),i(t.prototype,n),a(c,t,document.createTextNode("")),e.wrappers.CharacterData=t}(window.ShadowDOMPolyfill),function(e){"use strict";function t(e){return e>>>0}function n(e){r.call(this,e)}var r=e.wrappers.CharacterData,o=(e.enqueueMutation,e.mixin),i=e.registerWrapper,a=window.Text;n.prototype=Object.create(r.prototype),o(n.prototype,{splitText:function(e){e=t(e);var n=this.data;if(e>n.length)throw new Error("IndexSizeError");var r=n.slice(0,e),o=n.slice(e);this.data=r;var i=this.ownerDocument.createTextNode(o);return this.parentNode&&this.parentNode.insertBefore(i,this.nextSibling),i}}),i(a,n,document.createTextNode("")),e.wrappers.Text=n}(window.ShadowDOMPolyfill),function(e){"use strict";function t(e){return i(e).getAttribute("class")}function n(e,t){a(e,"attributes",{name:"class",namespace:null,oldValue:t})}function r(t){e.invalidateRendererBasedOnAttribute(t,"class")}function o(e,o,i){var a=e.ownerElement_;if(null==a)return o.apply(e,i);var s=t(a),c=o.apply(e,i);return t(a)!==s&&(n(a,s),r(a)),c}if(!window.DOMTokenList)return void console.warn("Missing DOMTokenList prototype, please include a compatible classList polyfill such as http://goo.gl/uTcepH.");var i=e.unsafeUnwrap,a=e.enqueueMutation,s=DOMTokenList.prototype.add;DOMTokenList.prototype.add=function(){o(this,s,arguments)};var c=DOMTokenList.prototype.remove;DOMTokenList.prototype.remove=function(){o(this,c,arguments)};var l=DOMTokenList.prototype.toggle;DOMTokenList.prototype.toggle=function(){return o(this,l,arguments)}}(window.ShadowDOMPolyfill),function(e){"use strict";function t(t,n){var r=t.parentNode;if(r&&r.shadowRoot){var o=e.getRendererForHost(r);o.dependsOnAttribute(n)&&o.invalidate()}}function n(e,t,n){u(e,"attributes",{name:t,namespace:null,oldValue:n})}function r(e){a.call(this,e)}var o=e.ChildNodeInterface,i=e.GetElementsByInterface,a=e.wrappers.Node,s=e.ParentNodeInterface,c=e.SelectorsInterface,l=e.MatchesInterface,u=(e.addWrapNodeListMethod,e.enqueueMutation),d=e.mixin,p=(e.oneOf,e.registerWrapper),h=e.unsafeUnwrap,f=e.wrappers,m=window.Element,w=["matches","mozMatchesSelector","msMatchesSelector","webkitMatchesSelector"].filter(function(e){return m.prototype[e]}),v=w[0],g=m.prototype[v],b=new WeakMap;r.prototype=Object.create(a.prototype),d(r.prototype,{createShadowRoot:function(){var t=new f.ShadowRoot(this);h(this).polymerShadowRoot_=t;var n=e.getRendererForHost(this);return n.invalidate(),t},get shadowRoot(){return h(this).polymerShadowRoot_||null},setAttribute:function(e,r){var o=h(this).getAttribute(e);h(this).setAttribute(e,r),n(this,e,o),t(this,e)},removeAttribute:function(e){var r=h(this).getAttribute(e);h(this).removeAttribute(e),n(this,e,r),t(this,e)},get classList(){var e=b.get(this);if(!e){if(e=h(this).classList,!e)return;e.ownerElement_=this,b.set(this,e)}return e},get className(){return h(this).className},set className(e){this.setAttribute("class",e)},get id(){return h(this).id},set id(e){this.setAttribute("id",e)}}),w.forEach(function(e){"matches"!==e&&(r.prototype[e]=function(e){return this.matches(e)})}),m.prototype.webkitCreateShadowRoot&&(r.prototype.webkitCreateShadowRoot=r.prototype.createShadowRoot),d(r.prototype,o),d(r.prototype,i),d(r.prototype,s),d(r.prototype,c),d(r.prototype,l),p(m,r,document.createElementNS(null,"x")),e.invalidateRendererBasedOnAttribute=t,e.matchesNames=w,e.originalMatches=g,e.wrappers.Element=r}(window.ShadowDOMPolyfill),function(e){"use strict";function t(e){switch(e){case"&":return"&";case"<":return"<";case">":return">";case'"':return""";case" ":return" "}}function n(e){return e.replace(L,t)}function r(e){return e.replace(N,t)}function o(e){for(var t={},n=0;n"):c+">"+s(e)+"";case Node.TEXT_NODE:var d=e.data;return t&&j[t.localName]?d:r(d);case Node.COMMENT_NODE:return"";default:throw console.error(e),new Error("not implemented")}}function s(e){e instanceof O.HTMLTemplateElement&&(e=e.content);for(var t="",n=e.firstChild;n;n=n.nextSibling)t+=a(n,e);return t}function c(e,t,n){var r=n||"div";e.textContent="";var o=T(e.ownerDocument.createElement(r));o.innerHTML=t;for(var i;i=o.firstChild;)e.appendChild(M(i))}function l(e){m.call(this,e)}function u(e,t){var n=T(e.cloneNode(!1));n.innerHTML=t;for(var r,o=T(document.createDocumentFragment());r=n.firstChild;)o.appendChild(r);return M(o)}function d(t){return function(){return e.renderAllPending(),S(this)[t]}}function p(e){w(l,e,d(e))}function h(t){Object.defineProperty(l.prototype,t,{get:d(t),set:function(n){e.renderAllPending(),S(this)[t]=n},configurable:!0,enumerable:!0})}function f(t){Object.defineProperty(l.prototype,t,{value:function(){return e.renderAllPending(),S(this)[t].apply(S(this),arguments)},configurable:!0,enumerable:!0})}var m=e.wrappers.Element,w=e.defineGetter,v=e.enqueueMutation,g=e.mixin,b=e.nodesWereAdded,y=e.nodesWereRemoved,E=e.registerWrapper,_=e.snapshotNodeList,S=e.unsafeUnwrap,T=e.unwrap,M=e.wrap,O=e.wrappers,L=/[&\u00A0"]/g,N=/[&\u00A0<>]/g,C=o(["area","base","br","col","command","embed","hr","img","input","keygen","link","meta","param","source","track","wbr"]),j=o(["style","script","xmp","iframe","noembed","noframes","plaintext","noscript"]),D="http://www.w3.org/1999/xhtml",H=/MSIE/.test(navigator.userAgent),x=window.HTMLElement,R=window.HTMLTemplateElement;l.prototype=Object.create(m.prototype),g(l.prototype,{get innerHTML(){return s(this)},set innerHTML(e){if(H&&j[this.localName])return void(this.textContent=e);var t=_(this.childNodes);this.invalidateShadowRenderer()?this instanceof O.HTMLTemplateElement?c(this.content,e):c(this,e,this.tagName):!R&&this instanceof O.HTMLTemplateElement?c(this.content,e):S(this).innerHTML=e;var n=_(this.childNodes);v(this,"childList",{addedNodes:n,removedNodes:t}),y(t),b(n,this)},get outerHTML(){return a(this,this.parentNode)},set outerHTML(e){var t=this.parentNode;if(t){t.invalidateShadowRenderer();var n=u(t,e);t.replaceChild(n,this)}},insertAdjacentHTML:function(e,t){var n,r;switch(String(e).toLowerCase()){case"beforebegin":n=this.parentNode,r=this;break;case"afterend":n=this.parentNode,r=this.nextSibling;break;case"afterbegin":n=this,r=this.firstChild;break;case"beforeend":n=this,r=null;break;default:return}var o=u(n,t);n.insertBefore(o,r)},get hidden(){return this.hasAttribute("hidden")},set hidden(e){e?this.setAttribute("hidden",""):this.removeAttribute("hidden")}}),["clientHeight","clientLeft","clientTop","clientWidth","offsetHeight","offsetLeft","offsetTop","offsetWidth","scrollHeight","scrollWidth"].forEach(p),["scrollLeft","scrollTop"].forEach(h),["getBoundingClientRect","getClientRects","scrollIntoView"].forEach(f),E(x,l,document.createElement("b")),e.wrappers.HTMLElement=l,e.getInnerHTML=s,e.setInnerHTML=c}(window.ShadowDOMPolyfill),function(e){"use strict";function t(e){n.call(this,e)}var n=e.wrappers.HTMLElement,r=e.mixin,o=e.registerWrapper,i=e.unsafeUnwrap,a=e.wrap,s=window.HTMLCanvasElement;t.prototype=Object.create(n.prototype),r(t.prototype,{getContext:function(){var e=i(this).getContext.apply(i(this),arguments);return e&&a(e)}}),o(s,t,document.createElement("canvas")),e.wrappers.HTMLCanvasElement=t}(window.ShadowDOMPolyfill),function(e){"use strict";function t(e){n.call(this,e)}var n=e.wrappers.HTMLElement,r=e.mixin,o=e.registerWrapper,i=window.HTMLContentElement;t.prototype=Object.create(n.prototype),r(t.prototype,{constructor:t,get select(){return this.getAttribute("select")},set select(e){this.setAttribute("select",e)},setAttribute:function(e,t){n.prototype.setAttribute.call(this,e,t),"select"===String(e).toLowerCase()&&this.invalidateShadowRenderer(!0)}}),i&&o(i,t),e.wrappers.HTMLContentElement=t}(window.ShadowDOMPolyfill),function(e){"use strict";function t(e){n.call(this,e)}var n=e.wrappers.HTMLElement,r=e.mixin,o=e.registerWrapper,i=e.wrapHTMLCollection,a=e.unwrap,s=window.HTMLFormElement;t.prototype=Object.create(n.prototype),r(t.prototype,{get elements(){return i(a(this).elements)}}),o(s,t,document.createElement("form")),e.wrappers.HTMLFormElement=t}(window.ShadowDOMPolyfill),function(e){"use strict";function t(e){r.call(this,e)}function n(e,t){if(!(this instanceof n))throw new TypeError("DOM object constructor cannot be called as a function.");var o=i(document.createElement("img"));r.call(this,o),a(o,this),void 0!==e&&(o.width=e),void 0!==t&&(o.height=t)}var r=e.wrappers.HTMLElement,o=e.registerWrapper,i=e.unwrap,a=e.rewrap,s=window.HTMLImageElement;t.prototype=Object.create(r.prototype),o(s,t,document.createElement("img")),n.prototype=t.prototype,e.wrappers.HTMLImageElement=t,e.wrappers.Image=n}(window.ShadowDOMPolyfill),function(e){"use strict";function t(e){n.call(this,e)}var n=e.wrappers.HTMLElement,r=(e.mixin,e.wrappers.NodeList,e.registerWrapper),o=window.HTMLShadowElement;t.prototype=Object.create(n.prototype),t.prototype.constructor=t,o&&r(o,t),e.wrappers.HTMLShadowElement=t}(window.ShadowDOMPolyfill),function(e){"use strict";function t(e){if(!e.defaultView)return e;var t=d.get(e);if(!t){for(t=e.implementation.createHTMLDocument("");t.lastChild;)t.removeChild(t.lastChild);d.set(e,t)}return t}function n(e){for(var n,r=t(e.ownerDocument),o=c(r.createDocumentFragment());n=e.firstChild;)o.appendChild(n);return o}function r(e){if(o.call(this,e),!p){var t=n(e);u.set(this,l(t))}}var o=e.wrappers.HTMLElement,i=e.mixin,a=e.registerWrapper,s=e.unsafeUnwrap,c=e.unwrap,l=e.wrap,u=new WeakMap,d=new WeakMap,p=window.HTMLTemplateElement;r.prototype=Object.create(o.prototype),i(r.prototype,{constructor:r,get content(){return p?l(s(this).content):u.get(this)}}),p&&a(p,r),e.wrappers.HTMLTemplateElement=r}(window.ShadowDOMPolyfill),function(e){"use strict";function t(e){n.call(this,e)}var n=e.wrappers.HTMLElement,r=e.registerWrapper,o=window.HTMLMediaElement;o&&(t.prototype=Object.create(n.prototype),r(o,t,document.createElement("audio")),e.wrappers.HTMLMediaElement=t)}(window.ShadowDOMPolyfill),function(e){"use strict";function t(e){r.call(this,e)}function n(e){if(!(this instanceof n))throw new TypeError("DOM object constructor cannot be called as a function.");var t=i(document.createElement("audio"));r.call(this,t),a(t,this),t.setAttribute("preload","auto"),void 0!==e&&t.setAttribute("src",e)}var r=e.wrappers.HTMLMediaElement,o=e.registerWrapper,i=e.unwrap,a=e.rewrap,s=window.HTMLAudioElement;s&&(t.prototype=Object.create(r.prototype),o(s,t,document.createElement("audio")),n.prototype=t.prototype,e.wrappers.HTMLAudioElement=t,e.wrappers.Audio=n)}(window.ShadowDOMPolyfill),function(e){"use strict";function t(e){return e.replace(/\s+/g," ").trim()}function n(e){o.call(this,e)}function r(e,t,n,i){if(!(this instanceof r))throw new TypeError("DOM object constructor cannot be called as a function.");var a=c(document.createElement("option"));o.call(this,a),s(a,this),void 0!==e&&(a.text=e),void 0!==t&&a.setAttribute("value",t),n===!0&&a.setAttribute("selected",""),a.selected=i===!0}var o=e.wrappers.HTMLElement,i=e.mixin,a=e.registerWrapper,s=e.rewrap,c=e.unwrap,l=e.wrap,u=window.HTMLOptionElement;n.prototype=Object.create(o.prototype),i(n.prototype,{get text(){return t(this.textContent)},set text(e){this.textContent=t(String(e))},get form(){return l(c(this).form)}}),a(u,n,document.createElement("option")),r.prototype=n.prototype,e.wrappers.HTMLOptionElement=n,e.wrappers.Option=r}(window.ShadowDOMPolyfill),function(e){"use strict";function t(e){n.call(this,e)}var n=e.wrappers.HTMLElement,r=e.mixin,o=e.registerWrapper,i=e.unwrap,a=e.wrap,s=window.HTMLSelectElement;t.prototype=Object.create(n.prototype),r(t.prototype,{add:function(e,t){"object"==typeof t&&(t=i(t)),i(this).add(i(e),t)},remove:function(e){return void 0===e?void n.prototype.remove.call(this):("object"==typeof e&&(e=i(e)),void i(this).remove(e))},get form(){return a(i(this).form)}}),o(s,t,document.createElement("select")),e.wrappers.HTMLSelectElement=t}(window.ShadowDOMPolyfill),function(e){"use strict";function t(e){n.call(this,e)}var n=e.wrappers.HTMLElement,r=e.mixin,o=e.registerWrapper,i=e.unwrap,a=e.wrap,s=e.wrapHTMLCollection,c=window.HTMLTableElement;t.prototype=Object.create(n.prototype),r(t.prototype,{get caption(){return a(i(this).caption)},createCaption:function(){return a(i(this).createCaption())},get tHead(){return a(i(this).tHead)},createTHead:function(){return a(i(this).createTHead())},createTFoot:function(){return a(i(this).createTFoot())},get tFoot(){return a(i(this).tFoot)},get tBodies(){return s(i(this).tBodies)},createTBody:function(){return a(i(this).createTBody())},get rows(){return s(i(this).rows)},insertRow:function(e){return a(i(this).insertRow(e))}}),o(c,t,document.createElement("table")),e.wrappers.HTMLTableElement=t}(window.ShadowDOMPolyfill),function(e){"use strict";function t(e){n.call(this,e)}var n=e.wrappers.HTMLElement,r=e.mixin,o=e.registerWrapper,i=e.wrapHTMLCollection,a=e.unwrap,s=e.wrap,c=window.HTMLTableSectionElement;t.prototype=Object.create(n.prototype),r(t.prototype,{constructor:t,get rows(){return i(a(this).rows)},insertRow:function(e){return s(a(this).insertRow(e))}}),o(c,t,document.createElement("thead")),e.wrappers.HTMLTableSectionElement=t}(window.ShadowDOMPolyfill),function(e){"use strict";function t(e){n.call(this,e)}var n=e.wrappers.HTMLElement,r=e.mixin,o=e.registerWrapper,i=e.wrapHTMLCollection,a=e.unwrap,s=e.wrap,c=window.HTMLTableRowElement;t.prototype=Object.create(n.prototype),r(t.prototype,{get cells(){return i(a(this).cells)},insertCell:function(e){return s(a(this).insertCell(e))}}),o(c,t,document.createElement("tr")),e.wrappers.HTMLTableRowElement=t}(window.ShadowDOMPolyfill),function(e){"use strict";function t(e){switch(e.localName){case"content":return new n(e);case"shadow":return new o(e);case"template":return new i(e)}r.call(this,e)}var n=e.wrappers.HTMLContentElement,r=e.wrappers.HTMLElement,o=e.wrappers.HTMLShadowElement,i=e.wrappers.HTMLTemplateElement,a=(e.mixin,e.registerWrapper),s=window.HTMLUnknownElement;t.prototype=Object.create(r.prototype),a(s,t),e.wrappers.HTMLUnknownElement=t}(window.ShadowDOMPolyfill),function(e){"use strict";var t=e.wrappers.Element,n=e.wrappers.HTMLElement,r=e.registerObject,o=e.defineWrapGetter,i="http://www.w3.org/2000/svg",a=document.createElementNS(i,"title"),s=r(a),c=Object.getPrototypeOf(s.prototype).constructor;if(!("classList"in a)){var l=Object.getOwnPropertyDescriptor(t.prototype,"classList");Object.defineProperty(n.prototype,"classList",l),delete t.prototype.classList}o(c,"ownerSVGElement"),e.wrappers.SVGElement=c}(window.ShadowDOMPolyfill),function(e){"use strict";function t(e){p.call(this,e)}var n=e.mixin,r=e.registerWrapper,o=e.unwrap,i=e.wrap,a=window.SVGUseElement,s="http://www.w3.org/2000/svg",c=i(document.createElementNS(s,"g")),l=document.createElementNS(s,"use"),u=c.constructor,d=Object.getPrototypeOf(u.prototype),p=d.constructor;t.prototype=Object.create(d),"instanceRoot"in l&&n(t.prototype,{get instanceRoot(){return i(o(this).instanceRoot)},get animatedInstanceRoot(){return i(o(this).animatedInstanceRoot)}}),r(a,t,l),e.wrappers.SVGUseElement=t}(window.ShadowDOMPolyfill),function(e){"use strict";function t(e){n.call(this,e)}var n=e.wrappers.EventTarget,r=e.mixin,o=e.registerWrapper,i=e.unsafeUnwrap,a=e.wrap,s=window.SVGElementInstance;s&&(t.prototype=Object.create(n.prototype),r(t.prototype,{get correspondingElement(){return a(i(this).correspondingElement)},get correspondingUseElement(){return a(i(this).correspondingUseElement)},get parentNode(){return a(i(this).parentNode)},get childNodes(){throw new Error("Not implemented")},get firstChild(){return a(i(this).firstChild)},get lastChild(){return a(i(this).lastChild)},get previousSibling(){return a(i(this).previousSibling)},get nextSibling(){return a(i(this).nextSibling)}}),o(s,t),e.wrappers.SVGElementInstance=t)}(window.ShadowDOMPolyfill),function(e){"use strict";function t(e){o(e,this)}var n=e.mixin,r=e.registerWrapper,o=e.setWrapper,i=e.unsafeUnwrap,a=e.unwrap,s=e.unwrapIfNeeded,c=e.wrap,l=window.CanvasRenderingContext2D;n(t.prototype,{get canvas(){return c(i(this).canvas)},drawImage:function(){arguments[0]=s(arguments[0]),i(this).drawImage.apply(i(this),arguments)},createPattern:function(){return arguments[0]=a(arguments[0]),i(this).createPattern.apply(i(this),arguments)}}),r(l,t,document.createElement("canvas").getContext("2d")),e.wrappers.CanvasRenderingContext2D=t}(window.ShadowDOMPolyfill),function(e){"use strict";function t(e){o(e,this)}var n=e.mixin,r=e.registerWrapper,o=e.setWrapper,i=e.unsafeUnwrap,a=e.unwrapIfNeeded,s=e.wrap,c=window.WebGLRenderingContext;if(c){n(t.prototype,{get canvas(){return s(i(this).canvas)},texImage2D:function(){arguments[5]=a(arguments[5]),i(this).texImage2D.apply(i(this),arguments)},texSubImage2D:function(){arguments[6]=a(arguments[6]),i(this).texSubImage2D.apply(i(this),arguments)}});var l=/WebKit/.test(navigator.userAgent)?{drawingBufferHeight:null,drawingBufferWidth:null}:{};r(c,t,l),e.wrappers.WebGLRenderingContext=t}}(window.ShadowDOMPolyfill),function(e){"use strict";var t=e.GetElementsByInterface,n=e.NonElementParentNodeInterface,r=e.ParentNodeInterface,o=e.SelectorsInterface,i=e.mixin,a=e.registerObject,s=a(document.createDocumentFragment());i(s.prototype,r),i(s.prototype,o),i(s.prototype,t),i(s.prototype,n);var c=a(document.createComment(""));e.wrappers.Comment=c,e.wrappers.DocumentFragment=s}(window.ShadowDOMPolyfill),function(e){"use strict";function t(e){var t=d(u(e).ownerDocument.createDocumentFragment());n.call(this,t),c(t,this);var o=e.shadowRoot;h.set(this,o),this.treeScope_=new r(this,a(o||e)),p.set(this,e)}var n=e.wrappers.DocumentFragment,r=e.TreeScope,o=e.elementFromPoint,i=e.getInnerHTML,a=e.getTreeScope,s=e.mixin,c=e.rewrap,l=e.setInnerHTML,u=e.unsafeUnwrap,d=e.unwrap,p=new WeakMap,h=new WeakMap;t.prototype=Object.create(n.prototype),s(t.prototype,{constructor:t,get innerHTML(){return i(this)},set innerHTML(e){l(this,e),this.invalidateShadowRenderer()},get olderShadowRoot(){return h.get(this)||null},get host(){return p.get(this)||null},invalidateShadowRenderer:function(){return p.get(this).invalidateShadowRenderer()},elementFromPoint:function(e,t){return o(this,this.ownerDocument,e,t)}}),e.wrappers.ShadowRoot=t}(window.ShadowDOMPolyfill),function(e){"use strict";function t(e){var t=d(e).root;return t instanceof h?t.host:null}function n(t,n){if(t.shadowRoot){n=Math.min(t.childNodes.length-1,n);var r=t.childNodes[n];if(r){var o=e.getDestinationInsertionPoints(r);if(o.length>0){var i=o[0].parentNode;i.nodeType==Node.ELEMENT_NODE&&(t=i)}}}return t}function r(e){return e=u(e),t(e)||e}function o(e){a(e,this)}var i=e.registerWrapper,a=e.setWrapper,s=e.unsafeUnwrap,c=e.unwrap,l=e.unwrapIfNeeded,u=e.wrap,d=e.getTreeScope,p=window.Range,h=e.wrappers.ShadowRoot;o.prototype={get startContainer(){return r(s(this).startContainer)},get endContainer(){return r(s(this).endContainer)},get commonAncestorContainer(){return r(s(this).commonAncestorContainer)},setStart:function(e,t){e=n(e,t),s(this).setStart(l(e),t)},setEnd:function(e,t){e=n(e,t),s(this).setEnd(l(e),t)},setStartBefore:function(e){s(this).setStartBefore(l(e))},setStartAfter:function(e){s(this).setStartAfter(l(e))},setEndBefore:function(e){s(this).setEndBefore(l(e))},setEndAfter:function(e){s(this).setEndAfter(l(e))},selectNode:function(e){s(this).selectNode(l(e))},selectNodeContents:function(e){s(this).selectNodeContents(l(e))},compareBoundaryPoints:function(e,t){return s(this).compareBoundaryPoints(e,c(t))},extractContents:function(){return u(s(this).extractContents())},cloneContents:function(){return u(s(this).cloneContents())},insertNode:function(e){s(this).insertNode(l(e))},surroundContents:function(e){s(this).surroundContents(l(e))},cloneRange:function(){return u(s(this).cloneRange())},isPointInRange:function(e,t){return s(this).isPointInRange(l(e),t)},comparePoint:function(e,t){return s(this).comparePoint(l(e),t)},intersectsNode:function(e){return s(this).intersectsNode(l(e))},toString:function(){return s(this).toString()}},p.prototype.createContextualFragment&&(o.prototype.createContextualFragment=function(e){return u(s(this).createContextualFragment(e))}),i(window.Range,o,document.createRange()),e.wrappers.Range=o}(window.ShadowDOMPolyfill),function(e){"use strict";function t(e){e.previousSibling_=e.previousSibling,e.nextSibling_=e.nextSibling,e.parentNode_=e.parentNode}function n(n,o,i){var a=x(n),s=x(o),c=i?x(i):null;if(r(o),t(o),i)n.firstChild===i&&(n.firstChild_=i),i.previousSibling_=i.previousSibling;else{n.lastChild_=n.lastChild,n.lastChild===n.firstChild&&(n.firstChild_=n.firstChild);var l=R(a.lastChild);l&&(l.nextSibling_=l.nextSibling)}e.originalInsertBefore.call(a,s,c)}function r(n){var r=x(n),o=r.parentNode;if(o){var i=R(o);t(n),n.previousSibling&&(n.previousSibling.nextSibling_=n),n.nextSibling&&(n.nextSibling.previousSibling_=n),i.lastChild===n&&(i.lastChild_=n),i.firstChild===n&&(i.firstChild_=n),e.originalRemoveChild.call(o,r)}}function o(e){P.set(e,[])}function i(e){var t=P.get(e);return t||P.set(e,t=[]),t}function a(e){for(var t=[],n=0,r=e.firstChild;r;r=r.nextSibling)t[n++]=r;return t}function s(){for(var e=0;em;m++){var w=R(i[u++]);s.get(w)||r(w)}for(var v=h.addedCount,g=i[u]&&R(i[u]),m=0;v>m;m++){var b=o[l++],y=b.node;n(t,y,g),s.set(y,!0),b.sync(s)}d+=v}for(var p=d;p=0;o--){var i=r[o],a=m(i);if(a){var s=i.olderShadowRoot;s&&(n=f(s));for(var c=0;c=0;u--)l=Object.create(l);["createdCallback","attachedCallback","detachedCallback","attributeChangedCallback"].forEach(function(e){var t=o[e];t&&(l[e]=function(){C(this)instanceof r||M(this),t.apply(C(this),arguments)})});var d={prototype:l};i&&(d["extends"]=i),r.prototype=o,r.prototype.constructor=r,e.constructorTable.set(l,r),e.nativePrototypeTable.set(o,l);P.call(N(this),t,d);return r},y([window.HTMLDocument||window.Document],["registerElement"])}y([window.HTMLBodyElement,window.HTMLDocument||window.Document,window.HTMLHeadElement,window.HTMLHtmlElement],["appendChild","compareDocumentPosition","contains","getElementsByClassName","getElementsByTagName","getElementsByTagNameNS","insertBefore","querySelector","querySelectorAll","removeChild","replaceChild"]),y([window.HTMLBodyElement,window.HTMLHeadElement,window.HTMLHtmlElement],E),y([window.HTMLDocument||window.Document],["adoptNode","importNode","contains","createComment","createDocumentFragment","createElement","createElementNS","createEvent","createEventNS","createRange","createTextNode","createTreeWalker","elementFromPoint","getElementById","getElementsByName","getSelection"]),_(t.prototype,l),_(t.prototype,d),_(t.prototype,f),_(t.prototype,p),_(t.prototype,{get implementation(){var e=D.get(this);return e?e:(e=new a(N(this).implementation),D.set(this,e),e)},get defaultView(){return C(N(this).defaultView)}}),S(window.Document,t,document.implementation.createHTMLDocument("")),window.HTMLDocument&&S(window.HTMLDocument,t),j([window.HTMLBodyElement,window.HTMLDocument||window.Document,window.HTMLHeadElement]);var k=document.implementation.createDocument;a.prototype.createDocument=function(){return arguments[2]=N(arguments[2]),C(k.apply(L(this),arguments))},s(a,"createDocumentType"),s(a,"createHTMLDocument"),c(a,"hasFeature"),S(window.DOMImplementation,a),y([window.DOMImplementation],["createDocument","createDocumentType","createHTMLDocument","hasFeature"]),e.adoptNodeNoRemove=r,e.wrappers.DOMImplementation=a,e.wrappers.Document=t}(window.ShadowDOMPolyfill),function(e){"use strict";function t(e){n.call(this,e)}var n=e.wrappers.EventTarget,r=e.wrappers.Selection,o=e.mixin,i=e.registerWrapper,a=e.renderAllPending,s=e.unwrap,c=e.unwrapIfNeeded,l=e.wrap,u=window.Window,d=window.getComputedStyle,p=window.getDefaultComputedStyle,h=window.getSelection;t.prototype=Object.create(n.prototype),u.prototype.getComputedStyle=function(e,t){return l(this||window).getComputedStyle(c(e),t)},p&&(u.prototype.getDefaultComputedStyle=function(e,t){return l(this||window).getDefaultComputedStyle(c(e),t)}),u.prototype.getSelection=function(){return l(this||window).getSelection()},delete window.getComputedStyle,delete window.getDefaultComputedStyle,delete window.getSelection,["addEventListener","removeEventListener","dispatchEvent"].forEach(function(e){u.prototype[e]=function(){var t=l(this||window);return t[e].apply(t,arguments)},delete window[e]}),o(t.prototype,{getComputedStyle:function(e,t){return a(),d.call(s(this),c(e),t)},getSelection:function(){return a(),new r(h.call(s(this)))},get document(){return l(s(this).document)}}),p&&(t.prototype.getDefaultComputedStyle=function(e,t){return a(),p.call(s(this),c(e),t)}),i(u,t,window),e.wrappers.Window=t}(window.ShadowDOMPolyfill),function(e){"use strict";var t=e.unwrap,n=window.DataTransfer||window.Clipboard,r=n.prototype.setDragImage;r&&(n.prototype.setDragImage=function(e,n,o){r.call(this,t(e),n,o)})}(window.ShadowDOMPolyfill),function(e){"use strict";function t(e){var t;t=e instanceof i?e:new i(e&&o(e)),r(t,this)}var n=e.registerWrapper,r=e.setWrapper,o=e.unwrap,i=window.FormData;i&&(n(i,t,new i),e.wrappers.FormData=t)}(window.ShadowDOMPolyfill),function(e){"use strict";var t=e.unwrapIfNeeded,n=XMLHttpRequest.prototype.send;XMLHttpRequest.prototype.send=function(e){return n.call(this,t(e))}}(window.ShadowDOMPolyfill),function(e){"use strict";function t(e){var t=n[e],r=window[t];if(r){var o=document.createElement(e),i=o.constructor;window[t]=i}}var n=(e.isWrapperFor,{a:"HTMLAnchorElement",area:"HTMLAreaElement",audio:"HTMLAudioElement",base:"HTMLBaseElement",body:"HTMLBodyElement",br:"HTMLBRElement",button:"HTMLButtonElement",canvas:"HTMLCanvasElement",caption:"HTMLTableCaptionElement",col:"HTMLTableColElement",content:"HTMLContentElement",data:"HTMLDataElement",datalist:"HTMLDataListElement",del:"HTMLModElement",dir:"HTMLDirectoryElement",div:"HTMLDivElement",dl:"HTMLDListElement",embed:"HTMLEmbedElement",fieldset:"HTMLFieldSetElement",font:"HTMLFontElement",form:"HTMLFormElement",frame:"HTMLFrameElement",frameset:"HTMLFrameSetElement",h1:"HTMLHeadingElement",head:"HTMLHeadElement",hr:"HTMLHRElement",html:"HTMLHtmlElement",iframe:"HTMLIFrameElement",img:"HTMLImageElement",input:"HTMLInputElement",keygen:"HTMLKeygenElement",label:"HTMLLabelElement",legend:"HTMLLegendElement",li:"HTMLLIElement",link:"HTMLLinkElement",map:"HTMLMapElement",marquee:"HTMLMarqueeElement",menu:"HTMLMenuElement",menuitem:"HTMLMenuItemElement",meta:"HTMLMetaElement",meter:"HTMLMeterElement",object:"HTMLObjectElement",ol:"HTMLOListElement",optgroup:"HTMLOptGroupElement",option:"HTMLOptionElement",output:"HTMLOutputElement",p:"HTMLParagraphElement",param:"HTMLParamElement",pre:"HTMLPreElement",progress:"HTMLProgressElement",q:"HTMLQuoteElement",script:"HTMLScriptElement",select:"HTMLSelectElement",shadow:"HTMLShadowElement",source:"HTMLSourceElement",span:"HTMLSpanElement",style:"HTMLStyleElement",table:"HTMLTableElement",tbody:"HTMLTableSectionElement",template:"HTMLTemplateElement",textarea:"HTMLTextAreaElement",thead:"HTMLTableSectionElement",time:"HTMLTimeElement",title:"HTMLTitleElement",tr:"HTMLTableRowElement",track:"HTMLTrackElement",ul:"HTMLUListElement",video:"HTMLVideoElement"});Object.keys(n).forEach(t),Object.getOwnPropertyNames(e.wrappers).forEach(function(t){window[t]=e.wrappers[t]})}(window.ShadowDOMPolyfill),function(e){function t(e,t){var n="";return Array.prototype.forEach.call(e,function(e){n+=e.textContent+"\n\n"}),t||(n=n.replace(d,"")),n}function n(e){var t=document.createElement("style");return t.textContent=e,t}function r(e){var t=n(e);document.head.appendChild(t);var r=[];if(t.sheet)try{r=t.sheet.cssRules}catch(o){}else console.warn("sheet not found",t);return t.parentNode.removeChild(t),r}function o(){C.initialized=!0,document.body.appendChild(C);var e=C.contentDocument,t=e.createElement("base");t.href=document.baseURI,e.head.appendChild(t)}function i(e){C.initialized||o(),document.body.appendChild(C),e(C.contentDocument),document.body.removeChild(C)}function a(e,t){if(t){var o;if(e.match("@import")&&D){var a=n(e);i(function(e){e.head.appendChild(a.impl),o=Array.prototype.slice.call(a.sheet.cssRules,0),t(o)})}else o=r(e),t(o)}}function s(e){e&&l().appendChild(document.createTextNode(e))}function c(e,t){var r=n(e);r.setAttribute(t,""),r.setAttribute(x,""),document.head.appendChild(r)}function l(){return j||(j=document.createElement("style"),j.setAttribute(x,""),j[x]=!0),j}var u={strictStyling:!1,registry:{},shimStyling:function(e,n,r){var o=this.prepareRoot(e,n,r),i=this.isTypeExtension(r),a=this.makeScopeSelector(n,i),s=t(o,!0);s=this.scopeCssText(s,a),e&&(e.shimmedStyle=s),this.addCssToDocument(s,n)},shimStyle:function(e,t){return this.shimCssText(e.textContent,t)},shimCssText:function(e,t){return e=this.insertDirectives(e),this.scopeCssText(e,t)},makeScopeSelector:function(e,t){return e?t?"[is="+e+"]":e:""},isTypeExtension:function(e){return e&&e.indexOf("-")<0},prepareRoot:function(e,t,n){var r=this.registerRoot(e,t,n);return this.replaceTextInStyles(r.rootStyles,this.insertDirectives),this.removeStyles(e,r.rootStyles),this.strictStyling&&this.applyScopeToContent(e,t),r.scopeStyles},removeStyles:function(e,t){for(var n,r=0,o=t.length;o>r&&(n=t[r]);r++)n.parentNode.removeChild(n)},registerRoot:function(e,t,n){var r=this.registry[t]={root:e,name:t,extendsName:n},o=this.findStyles(e);r.rootStyles=o,r.scopeStyles=r.rootStyles;var i=this.registry[r.extendsName];return i&&(r.scopeStyles=i.scopeStyles.concat(r.scopeStyles)),r},findStyles:function(e){if(!e)return[];var t=e.querySelectorAll("style");return Array.prototype.filter.call(t,function(e){return!e.hasAttribute(R)})},applyScopeToContent:function(e,t){e&&(Array.prototype.forEach.call(e.querySelectorAll("*"),function(e){e.setAttribute(t,"")}),Array.prototype.forEach.call(e.querySelectorAll("template"),function(e){this.applyScopeToContent(e.content,t)},this))},insertDirectives:function(e){return e=this.insertPolyfillDirectivesInCssText(e),this.insertPolyfillRulesInCssText(e)},insertPolyfillDirectivesInCssText:function(e){return e=e.replace(p,function(e,t){return t.slice(0,-2)+"{"}),e.replace(h,function(e,t){return t+" {"})},insertPolyfillRulesInCssText:function(e){return e=e.replace(f,function(e,t){return t.slice(0,-1)}),e.replace(m,function(e,t,n,r){var o=e.replace(t,"").replace(n,"");return r+o})},scopeCssText:function(e,t){var n=this.extractUnscopedRulesFromCssText(e);if(e=this.insertPolyfillHostInCssText(e),e=this.convertColonHost(e),e=this.convertColonHostContext(e),e=this.convertShadowDOMSelectors(e),t){var e,r=this;a(e,function(n){e=r.scopeRules(n,t)})}return e=e+"\n"+n,e.trim()},extractUnscopedRulesFromCssText:function(e){for(var t,n="";t=w.exec(e);)n+=t[1].slice(0,-1)+"\n\n";for(;t=v.exec(e);)n+=t[0].replace(t[2],"").replace(t[1],t[3])+"\n\n";return n},convertColonHost:function(e){return this.convertColonRule(e,E,this.colonHostPartReplacer)},convertColonHostContext:function(e){return this.convertColonRule(e,_,this.colonHostContextPartReplacer)},convertColonRule:function(e,t,n){return e.replace(t,function(e,t,r,o){if(t=O,r){for(var i,a=r.split(","),s=[],c=0,l=a.length;l>c&&(i=a[c]);c++)i=i.trim(),s.push(n(t,i,o));return s.join(",")}return t+o})},colonHostContextPartReplacer:function(e,t,n){return t.match(g)?this.colonHostPartReplacer(e,t,n):e+t+n+", "+t+" "+e+n},colonHostPartReplacer:function(e,t,n){return e+t.replace(g,"")+n},convertShadowDOMSelectors:function(e){for(var t=0;t","+","~"],r=e,o="["+t+"]";return n.forEach(function(e){var t=r.split(e);r=t.map(function(e){var t=e.trim().replace(L,"");return t&&n.indexOf(t)<0&&t.indexOf(o)<0&&(e=t.replace(/([^:]*)(:*)(.*)/,"$1"+o+"$2$3")),e}).join(e)}),r},insertPolyfillHostInCssText:function(e){return e.replace(M,b).replace(T,g)},propertiesFromRule:function(e){var t=e.style.cssText;e.style.content&&!e.style.content.match(/['"]+|attr/)&&(t=t.replace(/content:[^;]*;/g,"content: '"+e.style.content+"';"));var n=e.style;for(var r in n)"initial"===n[r]&&(t+=r+": initial; ");return t},replaceTextInStyles:function(e,t){e&&t&&(e instanceof Array||(e=[e]),Array.prototype.forEach.call(e,function(e){e.textContent=t.call(this,e.textContent)},this))},addCssToDocument:function(e,t){e.match("@import")?c(e,t):s(e)}},d=/\/\*[^*]*\*+([^\/*][^*]*\*+)*\//gim,p=/\/\*\s*@polyfill ([^*]*\*+([^\/*][^*]*\*+)*\/)([^{]*?){/gim,h=/polyfill-next-selector[^}]*content\:[\s]*?['"](.*?)['"][;\s]*}([^{]*?){/gim,f=/\/\*\s@polyfill-rule([^*]*\*+([^\/*][^*]*\*+)*)\//gim,m=/(polyfill-rule)[^}]*(content\:[\s]*['"](.*?)['"])[;\s]*[^}]*}/gim,w=/\/\*\s@polyfill-unscoped-rule([^*]*\*+([^\/*][^*]*\*+)*)\//gim,v=/(polyfill-unscoped-rule)[^}]*(content\:[\s]*['"](.*?)['"])[;\s]*[^}]*}/gim,g="-shadowcsshost",b="-shadowcsscontext",y=")(?:\\(((?:\\([^)(]*\\)|[^)(]*)+?)\\))?([^,{]*)",E=new RegExp("("+g+y,"gim"),_=new RegExp("("+b+y,"gim"),S="([>\\s~+[.,{:][\\s\\S]*)?$",T=/\:host/gim,M=/\:host-context/gim,O=g+"-no-combinator",L=new RegExp(g,"gim"),N=(new RegExp(b,"gim"),[/>>>/g,/::shadow/g,/::content/g,/\/deep\//g,/\/shadow\//g,/\/shadow-deep\//g,/\^\^/g,/\^/g]),C=document.createElement("iframe");C.style.display="none";var j,D=navigator.userAgent.match("Chrome"),H="shim-shadowdom",x="shim-shadowdom-css",R="no-shim";if(window.ShadowDOMPolyfill){s("style { display: none !important; }\n");var I=ShadowDOMPolyfill.wrap(document),P=I.querySelector("head");P.insertBefore(l(),P.childNodes[0]),document.addEventListener("DOMContentLoaded",function(){e.urlResolver;if(window.HTMLImports&&!HTMLImports.useNative){var t="link[rel=stylesheet]["+H+"]",n="style["+H+"]";HTMLImports.importer.documentPreloadSelectors+=","+t,HTMLImports.importer.importsPreloadSelectors+=","+t,HTMLImports.parser.documentSelectors=[HTMLImports.parser.documentSelectors,t,n].join(",");var r=HTMLImports.parser.parseGeneric;HTMLImports.parser.parseGeneric=function(e){if(!e[x]){var t=e.__importElement||e;if(!t.hasAttribute(H))return void r.call(this,e);e.__resource&&(t=e.ownerDocument.createElement("style"),t.textContent=e.__resource),HTMLImports.path.resolveUrlsInStyle(t,e.href),t.textContent=u.shimStyle(t),t.removeAttribute(H,""),t.setAttribute(x,""),t[x]=!0,t.parentNode!==P&&(e.parentNode===P?P.replaceChild(t,e):this.addElementToDocument(t)),t.__importParsed=!0,this.markParsingComplete(e),this.parseNext()}};var o=HTMLImports.parser.hasResource;HTMLImports.parser.hasResource=function(e){return"link"===e.localName&&"stylesheet"===e.rel&&e.hasAttribute(H)?e.__resource:o.call(this,e)}}})}e.ShadowCSS=u}(window.WebComponents)),function(e){window.ShadowDOMPolyfill?(window.wrap=ShadowDOMPolyfill.wrapIfNeeded,window.unwrap=ShadowDOMPolyfill.unwrapIfNeeded):window.wrap=window.unwrap=function(e){return e}}(window.WebComponents),function(e){"use strict";function t(e){return void 0!==p[e]}function n(){s.call(this),this._isInvalid=!0}function r(e){return""==e&&n.call(this),e.toLowerCase()}function o(e){var t=e.charCodeAt(0);return t>32&&127>t&&-1==[34,35,60,62,63,96].indexOf(t)?e:encodeURIComponent(e)}function i(e){var t=e.charCodeAt(0);return t>32&&127>t&&-1==[34,35,60,62,96].indexOf(t)?e:encodeURIComponent(e)}function a(e,a,s){function c(e){b.push(e)}var l=a||"scheme start",u=0,d="",v=!1,g=!1,b=[];e:for(;(e[u-1]!=f||0==u)&&!this._isInvalid;){var y=e[u];switch(l){case"scheme start":if(!y||!m.test(y)){if(a){c("Invalid scheme.");break e}d="",l="no scheme";continue}d+=y.toLowerCase(),l="scheme";break;case"scheme":if(y&&w.test(y))d+=y.toLowerCase();else{if(":"!=y){if(a){if(f==y)break e;c("Code point not allowed in scheme: "+y);break e}d="",u=0,l="no scheme";continue}if(this._scheme=d,d="",a)break e;t(this._scheme)&&(this._isRelative=!0),l="file"==this._scheme?"relative":this._isRelative&&s&&s._scheme==this._scheme?"relative or authority":this._isRelative?"authority first slash":"scheme data"}break;case"scheme data":"?"==y?(this._query="?",l="query"):"#"==y?(this._fragment="#",l="fragment"):f!=y&&" "!=y&&"\n"!=y&&"\r"!=y&&(this._schemeData+=o(y));break;case"no scheme":if(s&&t(s._scheme)){l="relative";continue}c("Missing scheme."),n.call(this);break;case"relative or authority":if("/"!=y||"/"!=e[u+1]){c("Expected /, got: "+y),l="relative";continue}l="authority ignore slashes";break;case"relative":if(this._isRelative=!0,"file"!=this._scheme&&(this._scheme=s._scheme),f==y){this._host=s._host,this._port=s._port,this._path=s._path.slice(),this._query=s._query,this._username=s._username,this._password=s._password;break e}if("/"==y||"\\"==y)"\\"==y&&c("\\ is an invalid code point."),l="relative slash";else if("?"==y)this._host=s._host,this._port=s._port,this._path=s._path.slice(),this._query="?",this._username=s._username,this._password=s._password,l="query";else{if("#"!=y){var E=e[u+1],_=e[u+2];("file"!=this._scheme||!m.test(y)||":"!=E&&"|"!=E||f!=_&&"/"!=_&&"\\"!=_&&"?"!=_&&"#"!=_)&&(this._host=s._host,this._port=s._port,this._username=s._username,this._password=s._password,this._path=s._path.slice(),this._path.pop()),l="relative path";continue}this._host=s._host,this._port=s._port,this._path=s._path.slice(),this._query=s._query,this._fragment="#",this._username=s._username,this._password=s._password,l="fragment"}break;case"relative slash":if("/"!=y&&"\\"!=y){"file"!=this._scheme&&(this._host=s._host,this._port=s._port,this._username=s._username,this._password=s._password),l="relative path";continue}"\\"==y&&c("\\ is an invalid code point."),l="file"==this._scheme?"file host":"authority ignore slashes";break;case"authority first slash":if("/"!=y){c("Expected '/', got: "+y),l="authority ignore slashes";continue}l="authority second slash";break;case"authority second slash":if(l="authority ignore slashes","/"!=y){c("Expected '/', got: "+y);continue}break;case"authority ignore slashes":if("/"!=y&&"\\"!=y){l="authority";continue}c("Expected authority, got: "+y);break;case"authority":if("@"==y){v&&(c("@ already seen."),d+="%40"),v=!0;for(var S=0;S0){var o=n[r-1],i=h(o,e);if(i)return void(n[r-1]=i)}else t(this.observer);n[r]=e},addListeners:function(){this.addListeners_(this.target)},addListeners_:function(e){var t=this.options;t.attributes&&e.addEventListener("DOMAttrModified",this,!0),t.characterData&&e.addEventListener("DOMCharacterDataModified",this,!0),t.childList&&e.addEventListener("DOMNodeInserted",this,!0),(t.childList||t.subtree)&&e.addEventListener("DOMNodeRemoved",this,!0)},removeListeners:function(){this.removeListeners_(this.target)},removeListeners_:function(e){var t=this.options;t.attributes&&e.removeEventListener("DOMAttrModified",this,!0),t.characterData&&e.removeEventListener("DOMCharacterDataModified",this,!0),t.childList&&e.removeEventListener("DOMNodeInserted",this,!0),(t.childList||t.subtree)&&e.removeEventListener("DOMNodeRemoved",this,!0)},addTransientObserver:function(e){if(e!==this.target){this.addListeners_(e),this.transientObservedNodes.push(e);var t=w.get(e);t||w.set(e,t=[]),t.push(this)}},removeTransientObservers:function(){var e=this.transientObservedNodes;this.transientObservedNodes=[],e.forEach(function(e){this.removeListeners_(e);for(var t=w.get(e),n=0;nh&&(p=s[h]);h++)a(p)?(c++,n()):(p.addEventListener("load",r),p.addEventListener("error",i));else n()}function a(e){return d?e.__loaded||e["import"]&&"loading"!==e["import"].readyState:e.__importParsed}function s(e){for(var t,n=0,r=e.length;r>n&&(t=e[n]);n++)c(t)&&l(t)}function c(e){return"link"===e.localName&&"import"===e.rel}function l(e){var t=e["import"];t?o({target:e}):(e.addEventListener("load",o),e.addEventListener("error",o))}var u="import",d=Boolean(u in document.createElement("link")),p=Boolean(window.ShadowDOMPolyfill),h=function(e){return p?window.ShadowDOMPolyfill.wrapIfNeeded(e):e},f=h(document),m={get:function(){var e=window.HTMLImports.currentScript||document.currentScript||("complete"!==document.readyState?document.scripts[document.scripts.length-1]:null);return h(e)},configurable:!0};Object.defineProperty(document,"_currentScript",m),Object.defineProperty(f,"_currentScript",m);var w=/Trident/.test(navigator.userAgent),v=w?"complete":"interactive",g="readystatechange";d&&(new MutationObserver(function(e){for(var t,n=0,r=e.length;r>n&&(t=e[n]);n++)t.addedNodes&&s(t.addedNodes)}).observe(document.head,{childList:!0}),function(){if("loading"===document.readyState)for(var e,t=document.querySelectorAll("link[rel=import]"),n=0,r=t.length;r>n&&(e=t[n]);n++)l(e)}()),t(function(e){window.HTMLImports.ready=!0,window.HTMLImports.readyTime=(new Date).getTime();var t=f.createEvent("CustomEvent");t.initCustomEvent("HTMLImportsLoaded",!0,!0,e),f.dispatchEvent(t)}),e.IMPORT_LINK_TYPE=u,e.useNative=d,e.rootDocument=f,e.whenReady=t,e.isIE=w}(window.HTMLImports),function(e){var t=[],n=function(e){t.push(e)},r=function(){t.forEach(function(t){t(e)})};e.addModule=n,e.initializeModules=r}(window.HTMLImports),window.HTMLImports.addModule(function(e){var t=/(url\()([^)]*)(\))/g,n=/(@import[\s]+(?!url\())([^;]*)(;)/g,r={resolveUrlsInStyle:function(e,t){var n=e.ownerDocument,r=n.createElement("a");return e.textContent=this.resolveUrlsInCssText(e.textContent,t,r),e},resolveUrlsInCssText:function(e,r,o){var i=this.replaceUrls(e,o,r,t);return i=this.replaceUrls(i,o,r,n)},replaceUrls:function(e,t,n,r){return e.replace(r,function(e,r,o,i){var a=o.replace(/["']/g,"");return n&&(a=new URL(a,n).href),t.href=a,a=t.href,r+"'"+a+"'"+i})}};e.path=r}),window.HTMLImports.addModule(function(e){var t={async:!0,ok:function(e){return e.status>=200&&e.status<300||304===e.status||0===e.status},load:function(n,r,o){var i=new XMLHttpRequest;return(e.flags.debug||e.flags.bust)&&(n+="?"+Math.random()),i.open("GET",n,t.async),i.addEventListener("readystatechange",function(e){ +if(4===i.readyState){var n=i.getResponseHeader("Location"),a=null;if(n)var a="/"===n.substr(0,1)?location.origin+n:n;r.call(o,!t.ok(i)&&i,i.response||i.responseText,a)}}),i.send(),i},loadDocument:function(e,t,n){this.load(e,t,n).responseType="document"}};e.xhr=t}),window.HTMLImports.addModule(function(e){var t=e.xhr,n=e.flags,r=function(e,t){this.cache={},this.onload=e,this.oncomplete=t,this.inflight=0,this.pending={}};r.prototype={addNodes:function(e){this.inflight+=e.length;for(var t,n=0,r=e.length;r>n&&(t=e[n]);n++)this.require(t);this.checkDone()},addNode:function(e){this.inflight++,this.require(e),this.checkDone()},require:function(e){var t=e.src||e.href;e.__nodeUrl=t,this.dedupe(t,e)||this.fetch(t,e)},dedupe:function(e,t){if(this.pending[e])return this.pending[e].push(t),!0;return this.cache[e]?(this.onload(e,t,this.cache[e]),this.tail(),!0):(this.pending[e]=[t],!1)},fetch:function(e,r){if(n.load&&console.log("fetch",e,r),e)if(e.match(/^data:/)){var o=e.split(","),i=o[0],a=o[1];a=i.indexOf(";base64")>-1?atob(a):decodeURIComponent(a),setTimeout(function(){this.receive(e,r,null,a)}.bind(this),0)}else{var s=function(t,n,o){this.receive(e,r,t,n,o)}.bind(this);t.load(e,s)}else setTimeout(function(){this.receive(e,r,{error:"href must be specified"},null)}.bind(this),0)},receive:function(e,t,n,r,o){this.cache[e]=r;for(var i,a=this.pending[e],s=0,c=a.length;c>s&&(i=a[s]);s++)this.onload(e,i,r,n,o),this.tail();this.pending[e]=null},tail:function(){--this.inflight,this.checkDone()},checkDone:function(){this.inflight||this.oncomplete()}},e.Loader=r}),window.HTMLImports.addModule(function(e){var t=function(e){this.addCallback=e,this.mo=new MutationObserver(this.handler.bind(this))};t.prototype={handler:function(e){for(var t,n=0,r=e.length;r>n&&(t=e[n]);n++)"childList"===t.type&&t.addedNodes.length&&this.addedNodes(t.addedNodes)},addedNodes:function(e){this.addCallback&&this.addCallback(e);for(var t,n=0,r=e.length;r>n&&(t=e[n]);n++)t.children&&t.children.length&&this.addedNodes(t.children)},observe:function(e){this.mo.observe(e,{childList:!0,subtree:!0})}},e.Observer=t}),window.HTMLImports.addModule(function(e){function t(e){return"link"===e.localName&&e.rel===u}function n(e){var t=r(e);return"data:text/javascript;charset=utf-8,"+encodeURIComponent(t)}function r(e){return e.textContent+o(e)}function o(e){var t=e.ownerDocument;t.__importedScripts=t.__importedScripts||0;var n=e.ownerDocument.baseURI,r=t.__importedScripts?"-"+t.__importedScripts:"";return t.__importedScripts++,"\n//# sourceURL="+n+r+".js\n"}function i(e){var t=e.ownerDocument.createElement("style");return t.textContent=e.textContent,a.resolveUrlsInStyle(t),t}var a=e.path,s=e.rootDocument,c=e.flags,l=e.isIE,u=e.IMPORT_LINK_TYPE,d="link[rel="+u+"]",p={documentSelectors:d,importsSelectors:[d,"link[rel=stylesheet]","style","script:not([type])",'script[type="application/javascript"]','script[type="text/javascript"]'].join(","),map:{link:"parseLink",script:"parseScript",style:"parseStyle"},dynamicElements:[],parseNext:function(){var e=this.nextToParse();e&&this.parse(e)},parse:function(e){if(this.isParsed(e))return void(c.parse&&console.log("[%s] is already parsed",e.localName));var t=this[this.map[e.localName]];t&&(this.markParsing(e),t.call(this,e))},parseDynamic:function(e,t){this.dynamicElements.push(e),t||this.parseNext()},markParsing:function(e){c.parse&&console.log("parsing",e),this.parsingElement=e},markParsingComplete:function(e){e.__importParsed=!0,this.markDynamicParsingComplete(e),e.__importElement&&(e.__importElement.__importParsed=!0,this.markDynamicParsingComplete(e.__importElement)),this.parsingElement=null,c.parse&&console.log("completed",e)},markDynamicParsingComplete:function(e){var t=this.dynamicElements.indexOf(e);t>=0&&this.dynamicElements.splice(t,1)},parseImport:function(e){if(window.HTMLImports.__importsParsingHook&&window.HTMLImports.__importsParsingHook(e),e["import"]&&(e["import"].__importParsed=!0),this.markParsingComplete(e),e.dispatchEvent(e.__resource&&!e.__error?new CustomEvent("load",{bubbles:!1}):new CustomEvent("error",{bubbles:!1})),e.__pending)for(var t;e.__pending.length;)t=e.__pending.shift(),t&&t({target:e});this.parseNext()},parseLink:function(e){t(e)?this.parseImport(e):(e.href=e.href,this.parseGeneric(e))},parseStyle:function(e){var t=e;e=i(e),t.__appliedElement=e,e.__importElement=t,this.parseGeneric(e)},parseGeneric:function(e){this.trackElement(e),this.addElementToDocument(e)},rootImportForElement:function(e){for(var t=e;t.ownerDocument.__importLink;)t=t.ownerDocument.__importLink;return t},addElementToDocument:function(e){var t=this.rootImportForElement(e.__importElement||e);t.parentNode.insertBefore(e,t)},trackElement:function(e,t){var n=this,r=function(r){t&&t(r),n.markParsingComplete(e),n.parseNext()};if(e.addEventListener("load",r),e.addEventListener("error",r),l&&"style"===e.localName){var o=!1;if(-1==e.textContent.indexOf("@import"))o=!0;else if(e.sheet){o=!0;for(var i,a=e.sheet.cssRules,s=a?a.length:0,c=0;s>c&&(i=a[c]);c++)i.type===CSSRule.IMPORT_RULE&&(o=o&&Boolean(i.styleSheet))}o&&setTimeout(function(){e.dispatchEvent(new CustomEvent("load",{bubbles:!1}))})}},parseScript:function(t){var r=document.createElement("script");r.__importElement=t,r.src=t.src?t.src:n(t),e.currentScript=t,this.trackElement(r,function(t){r.parentNode.removeChild(r),e.currentScript=null}),this.addElementToDocument(r)},nextToParse:function(){return this._mayParse=[],!this.parsingElement&&(this.nextToParseInDoc(s)||this.nextToParseDynamic())},nextToParseInDoc:function(e,n){if(e&&this._mayParse.indexOf(e)<0){this._mayParse.push(e);for(var r,o=e.querySelectorAll(this.parseSelectorsForNode(e)),i=0,a=o.length;a>i&&(r=o[i]);i++)if(!this.isParsed(r))return this.hasResource(r)?t(r)?this.nextToParseInDoc(r["import"],r):r:void 0}return n},nextToParseDynamic:function(){return this.dynamicElements[0]},parseSelectorsForNode:function(e){var t=e.ownerDocument||e;return t===s?this.documentSelectors:this.importsSelectors},isParsed:function(e){return e.__importParsed},needsDynamicParsing:function(e){return this.dynamicElements.indexOf(e)>=0},hasResource:function(e){return t(e)&&void 0===e["import"]?!1:!0}};e.parser=p,e.IMPORT_SELECTOR=d}),window.HTMLImports.addModule(function(e){function t(e){return n(e,a)}function n(e,t){return"link"===e.localName&&e.getAttribute("rel")===t}function r(e){return!!Object.getOwnPropertyDescriptor(e,"baseURI")}function o(e,t){var n=document.implementation.createHTMLDocument(a);n._URL=t;var o=n.createElement("base");o.setAttribute("href",t),n.baseURI||r(n)||Object.defineProperty(n,"baseURI",{value:t});var i=n.createElement("meta");return i.setAttribute("charset","utf-8"),n.head.appendChild(i),n.head.appendChild(o),n.body.innerHTML=e,window.HTMLTemplateElement&&HTMLTemplateElement.bootstrap&&HTMLTemplateElement.bootstrap(n),n}var i=e.flags,a=e.IMPORT_LINK_TYPE,s=e.IMPORT_SELECTOR,c=e.rootDocument,l=e.Loader,u=e.Observer,d=e.parser,p={documents:{},documentPreloadSelectors:s,importsPreloadSelectors:[s].join(","),loadNode:function(e){h.addNode(e)},loadSubtree:function(e){var t=this.marshalNodes(e);h.addNodes(t)},marshalNodes:function(e){return e.querySelectorAll(this.loadSelectorsForNode(e))},loadSelectorsForNode:function(e){var t=e.ownerDocument||e;return t===c?this.documentPreloadSelectors:this.importsPreloadSelectors},loaded:function(e,n,r,a,s){if(i.load&&console.log("loaded",e,n),n.__resource=r,n.__error=a,t(n)){var c=this.documents[e];void 0===c&&(c=a?null:o(r,s||e),c&&(c.__importLink=n,this.bootDocument(c)),this.documents[e]=c),n["import"]=c}d.parseNext()},bootDocument:function(e){this.loadSubtree(e),this.observer.observe(e),d.parseNext()},loadedAll:function(){d.parseNext()}},h=new l(p.loaded.bind(p),p.loadedAll.bind(p));if(p.observer=new u,!document.baseURI){var f={get:function(){var e=document.querySelector("base");return e?e.href:window.location.href},configurable:!0};Object.defineProperty(document,"baseURI",f),Object.defineProperty(c,"baseURI",f)}e.importer=p,e.importLoader=h}),window.HTMLImports.addModule(function(e){var t=e.parser,n=e.importer,r={added:function(e){for(var r,o,i,a,s=0,c=e.length;c>s&&(a=e[s]);s++)r||(r=a.ownerDocument,o=t.isParsed(r)),i=this.shouldLoadNode(a),i&&n.loadNode(a),this.shouldParseNode(a)&&o&&t.parseDynamic(a,i)},shouldLoadNode:function(e){return 1===e.nodeType&&o.call(e,n.loadSelectorsForNode(e))},shouldParseNode:function(e){return 1===e.nodeType&&o.call(e,t.parseSelectorsForNode(e))}};n.observer.addCallback=r.added.bind(r);var o=HTMLElement.prototype.matches||HTMLElement.prototype.matchesSelector||HTMLElement.prototype.webkitMatchesSelector||HTMLElement.prototype.mozMatchesSelector||HTMLElement.prototype.msMatchesSelector}),function(e){function t(){window.HTMLImports.importer.bootDocument(o)}var n=e.initializeModules,r=e.isIE;if(!e.useNative){r&&"function"!=typeof window.CustomEvent&&(window.CustomEvent=function(e,t){t=t||{};var n=document.createEvent("CustomEvent");return n.initCustomEvent(e,Boolean(t.bubbles),Boolean(t.cancelable),t.detail),n.preventDefault=function(){Object.defineProperty(this,"defaultPrevented",{get:function(){return!0}})},n},window.CustomEvent.prototype=window.Event.prototype),n();var o=e.rootDocument;"complete"===document.readyState||"interactive"===document.readyState&&!window.attachEvent?t():document.addEventListener("DOMContentLoaded",t)}}(window.HTMLImports),window.CustomElements=window.CustomElements||{flags:{}},function(e){var t=e.flags,n=[],r=function(e){n.push(e)},o=function(){n.forEach(function(t){t(e)})};e.addModule=r,e.initializeModules=o,e.hasNative=Boolean(document.registerElement),e.useNative=!t.register&&e.hasNative&&!window.ShadowDOMPolyfill&&(!window.HTMLImports||window.HTMLImports.useNative)}(window.CustomElements),window.CustomElements.addModule(function(e){function t(e,t){n(e,function(e){return t(e)?!0:void r(e,t)}),r(e,t)}function n(e,t,r){var o=e.firstElementChild;if(!o)for(o=e.firstChild;o&&o.nodeType!==Node.ELEMENT_NODE;)o=o.nextSibling;for(;o;)t(o,r)!==!0&&n(o,t,r),o=o.nextElementSibling;return null}function r(e,n){for(var r=e.shadowRoot;r;)t(r,n),r=r.olderShadowRoot}function o(e,t){i(e,t,[])}function i(e,t,n){if(e=window.wrap(e),!(n.indexOf(e)>=0)){n.push(e);for(var r,o=e.querySelectorAll("link[rel="+a+"]"),s=0,c=o.length;c>s&&(r=o[s]);s++)r["import"]&&i(r["import"],t,n);t(e)}}var a=window.HTMLImports?window.HTMLImports.IMPORT_LINK_TYPE:"none";e.forDocumentTree=o,e.forSubtree=t}),window.CustomElements.addModule(function(e){function t(e){return n(e)||r(e)}function n(t){return e.upgrade(t)?!0:void s(t)}function r(e){y(e,function(e){return n(e)?!0:void 0})}function o(e){s(e),p(e)&&y(e,function(e){s(e)})}function i(e){T.push(e),S||(S=!0,setTimeout(a))}function a(){S=!1;for(var e,t=T,n=0,r=t.length;r>n&&(e=t[n]);n++)e();T=[]}function s(e){_?i(function(){c(e)}):c(e)}function c(e){e.__upgraded__&&(e.attachedCallback||e.detachedCallback)&&!e.__attached&&p(e)&&(e.__attached=!0,e.attachedCallback&&e.attachedCallback())}function l(e){u(e),y(e,function(e){u(e)})}function u(e){_?i(function(){d(e)}):d(e)}function d(e){e.__upgraded__&&(e.attachedCallback||e.detachedCallback)&&e.__attached&&!p(e)&&(e.__attached=!1,e.detachedCallback&&e.detachedCallback())}function p(e){for(var t=e,n=wrap(document);t;){if(t==n)return!0;t=t.parentNode||t.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&t.host}}function h(e){if(e.shadowRoot&&!e.shadowRoot.__watched){b.dom&&console.log("watching shadow-root for: ",e.localName);for(var t=e.shadowRoot;t;)w(t),t=t.olderShadowRoot}}function f(e){if(b.dom){var n=e[0];if(n&&"childList"===n.type&&n.addedNodes&&n.addedNodes){for(var r=n.addedNodes[0];r&&r!==document&&!r.host;)r=r.parentNode;var o=r&&(r.URL||r._URL||r.host&&r.host.localName)||"";o=o.split("/?").shift().split("/").pop()}console.group("mutations (%d) [%s]",e.length,o||"")}e.forEach(function(e){"childList"===e.type&&(M(e.addedNodes,function(e){e.localName&&t(e)}),M(e.removedNodes,function(e){e.localName&&l(e)}))}),b.dom&&console.groupEnd()}function m(e){for(e=window.wrap(e),e||(e=window.wrap(document));e.parentNode;)e=e.parentNode;var t=e.__observer;t&&(f(t.takeRecords()),a())}function w(e){if(!e.__observer){var t=new MutationObserver(f);t.observe(e,{childList:!0,subtree:!0}),e.__observer=t}}function v(e){e=window.wrap(e),b.dom&&console.group("upgradeDocument: ",e.baseURI.split("/").pop()),t(e),w(e),b.dom&&console.groupEnd()}function g(e){E(e,v)}var b=e.flags,y=e.forSubtree,E=e.forDocumentTree,_=!window.MutationObserver||window.MutationObserver===window.JsMutationObserver;e.hasPolyfillMutations=_;var S=!1,T=[],M=Array.prototype.forEach.call.bind(Array.prototype.forEach),O=Element.prototype.createShadowRoot;O&&(Element.prototype.createShadowRoot=function(){var e=O.call(this);return window.CustomElements.watchShadow(this),e}),e.watchShadow=h,e.upgradeDocumentTree=g,e.upgradeSubtree=r,e.upgradeAll=t,e.attachedNode=o,e.takeRecords=m}),window.CustomElements.addModule(function(e){function t(t){if(!t.__upgraded__&&t.nodeType===Node.ELEMENT_NODE){var r=t.getAttribute("is"),o=e.getRegisteredDefinition(r||t.localName);if(o){if(r&&o.tag==t.localName)return n(t,o);if(!r&&!o["extends"])return n(t,o)}}}function n(t,n){return a.upgrade&&console.group("upgrade:",t.localName),n.is&&t.setAttribute("is",n.is),r(t,n),t.__upgraded__=!0,i(t),e.attachedNode(t),e.upgradeSubtree(t),a.upgrade&&console.groupEnd(),t}function r(e,t){Object.__proto__?e.__proto__=t.prototype:(o(e,t.prototype,t["native"]),e.__proto__=t.prototype)}function o(e,t,n){for(var r={},o=t;o!==n&&o!==HTMLElement.prototype;){for(var i,a=Object.getOwnPropertyNames(o),s=0;i=a[s];s++)r[i]||(Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(o,i)),r[i]=1);o=Object.getPrototypeOf(o)}}function i(e){e.createdCallback&&e.createdCallback()}var a=e.flags;e.upgrade=t,e.upgradeWithDefinition=n,e.implementPrototype=r}),window.CustomElements.addModule(function(e){function t(t,r){var c=r||{};if(!t)throw new Error("document.registerElement: first argument `name` must not be empty");if(t.indexOf("-")<0)throw new Error("document.registerElement: first argument ('name') must contain a dash ('-'). Argument provided was '"+String(t)+"'.");if(o(t))throw new Error("Failed to execute 'registerElement' on 'Document': Registration failed for type '"+String(t)+"'. The type name is invalid.");if(l(t))throw new Error("DuplicateDefinitionError: a type with name '"+String(t)+"' is already registered");return c.prototype||(c.prototype=Object.create(HTMLElement.prototype)),c.__name=t.toLowerCase(),c.lifecycle=c.lifecycle||{},c.ancestry=i(c["extends"]),a(c),s(c),n(c.prototype),u(c.__name,c),c.ctor=d(c),c.ctor.prototype=c.prototype,c.prototype.constructor=c.ctor,e.ready&&v(document),c.ctor}function n(e){if(!e.setAttribute._polyfilled){var t=e.setAttribute;e.setAttribute=function(e,n){r.call(this,e,n,t)};var n=e.removeAttribute;e.removeAttribute=function(e){r.call(this,e,null,n)},e.setAttribute._polyfilled=!0}}function r(e,t,n){e=e.toLowerCase();var r=this.getAttribute(e);n.apply(this,arguments);var o=this.getAttribute(e);this.attributeChangedCallback&&o!==r&&this.attributeChangedCallback(e,r,o)}function o(e){for(var t=0;t<_.length;t++)if(e===_[t])return!0}function i(e){var t=l(e);return t?i(t["extends"]).concat([t]):[]}function a(e){for(var t,n=e["extends"],r=0;t=e.ancestry[r];r++)n=t.is&&t.tag;e.tag=n||e.__name,n&&(e.is=e.__name)}function s(e){if(!Object.__proto__){var t=HTMLElement.prototype;if(e.is){var n=document.createElement(e.tag),r=Object.getPrototypeOf(n);r===e.prototype&&(t=r)}for(var o,i=e.prototype;i&&i!==t;)o=Object.getPrototypeOf(i),i.__proto__=o,i=o;e["native"]=t}}function c(e){return b(M(e.tag),e)}function l(e){return e?S[e.toLowerCase()]:void 0}function u(e,t){S[e]=t}function d(e){return function(){return c(e)}}function p(e,t,n){return e===T?h(t,n):O(e,t)}function h(e,t){e&&(e=e.toLowerCase()),t&&(t=t.toLowerCase());var n=l(t||e);if(n){if(e==n.tag&&t==n.is)return new n.ctor;if(!t&&!n.is)return new n.ctor}var r;return t?(r=h(e),r.setAttribute("is",t),r):(r=M(e),e.indexOf("-")>=0&&y(r,HTMLElement),r)}function f(e,t){var n=e[t];e[t]=function(){var e=n.apply(this,arguments);return g(e),e}}var m,w=e.isIE11OrOlder,v=e.upgradeDocumentTree,g=e.upgradeAll,b=e.upgradeWithDefinition,y=e.implementPrototype,E=e.useNative,_=["annotation-xml","color-profile","font-face","font-face-src","font-face-uri","font-face-format","font-face-name","missing-glyph"],S={},T="http://www.w3.org/1999/xhtml",M=document.createElement.bind(document),O=document.createElementNS.bind(document);m=Object.__proto__||E?function(e,t){return e instanceof t}:function(e,t){for(var n=e;n;){if(n===t.prototype)return!0;n=n.__proto__}return!1},f(Node.prototype,"cloneNode"),f(document,"importNode"),w&&!function(){var e=document.importNode;document.importNode=function(){var t=e.apply(document,arguments);if(t.nodeType==t.DOCUMENT_FRAGMENT_NODE){var n=document.createDocumentFragment();return n.appendChild(t),n}return t}}(),document.registerElement=t,document.createElement=h,document.createElementNS=p,e.registry=S,e["instanceof"]=m,e.reservedTagList=_,e.getRegisteredDefinition=l,document.register=document.registerElement}),function(e){function t(){a(window.wrap(document)),window.HTMLImports&&(window.HTMLImports.__importsParsingHook=function(e){a(wrap(e["import"]))}),window.CustomElements.ready=!0,setTimeout(function(){window.CustomElements.readyTime=Date.now(),window.HTMLImports&&(window.CustomElements.elapsed=window.CustomElements.readyTime-window.HTMLImports.readyTime),document.dispatchEvent(new CustomEvent("WebComponentsReady",{bubbles:!0}))})}var n=e.useNative,r=e.initializeModules,o=/Trident/.test(navigator.userAgent);if(n){var i=function(){};e.watchShadow=i,e.upgrade=i,e.upgradeAll=i,e.upgradeDocumentTree=i,e.upgradeSubtree=i,e.takeRecords=i,e["instanceof"]=function(e,t){return e instanceof t}}else r();var a=e.upgradeDocumentTree;if(window.wrap||(window.ShadowDOMPolyfill?(window.wrap=window.ShadowDOMPolyfill.wrapIfNeeded,window.unwrap=window.ShadowDOMPolyfill.unwrapIfNeeded):window.wrap=window.unwrap=function(e){return e}),o&&"function"!=typeof window.CustomEvent&&(window.CustomEvent=function(e,t){t=t||{};var n=document.createEvent("CustomEvent");return n.initCustomEvent(e,Boolean(t.bubbles),Boolean(t.cancelable),t.detail),n.preventDefault=function(){Object.defineProperty(this,"defaultPrevented",{get:function(){return!0}})},n},window.CustomEvent.prototype=window.Event.prototype),"complete"===document.readyState||e.flags.eager)t();else if("interactive"!==document.readyState||window.attachEvent||window.HTMLImports&&!window.HTMLImports.ready){var s=window.HTMLImports&&!window.HTMLImports.ready?"HTMLImportsLoaded":"DOMContentLoaded";window.addEventListener(s,t)}else t();e.isIE11OrOlder=o}(window.CustomElements),function(e){Function.prototype.bind||(Function.prototype.bind=function(e){var t=this,n=Array.prototype.slice.call(arguments,1);return function(){var r=n.slice();return r.push.apply(r,arguments),t.apply(e,r)}})}(window.WebComponents),function(e){"use strict";function t(){window.Polymer===o&&(window.Polymer=function(){throw new Error('You tried to use polymer without loading it first. To load polymer, ')})}if(!window.performance){var n=Date.now();window.performance={now:function(){return Date.now()-n}}}window.requestAnimationFrame||(window.requestAnimationFrame=function(){var e=window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame;return e?function(t){return e(function(){t(performance.now())})}:function(e){return window.setTimeout(e,1e3/60)}}()),window.cancelAnimationFrame||(window.cancelAnimationFrame=function(){return window.webkitCancelAnimationFrame||window.mozCancelAnimationFrame||function(e){clearTimeout(e)}}());var r=[],o=function(e,t){"string"!=typeof e&&1===arguments.length&&Array.prototype.push.call(arguments,document._currentScript),r.push(arguments)};window.Polymer=o,e.consumeDeclarations=function(t){e.consumeDeclarations=function(){throw"Possible attempt to load Polymer twice"},t&&t(r),r=null},HTMLImports.useNative?t():window.addEventListener("DOMContentLoaded",t)}(window.WebComponents),function(e){var t=document.createElement("style");t.textContent="body {transition: opacity ease-in 0.2s; } \nbody[unresolved] {opacity: 0; display: block; overflow: hidden; position: relative; } \n";var n=document.querySelector("head");n.insertBefore(t,n.firstChild)}(window.WebComponents),function(e){window.Platform=e}(window.WebComponents); \ No newline at end of file diff --git a/static/images/cover.png b/static/images/cover.png new file mode 100644 index 0000000..004414f Binary files /dev/null and b/static/images/cover.png differ diff --git a/static/images/facebook-dreamstale25.png b/static/images/facebook-dreamstale25.png new file mode 100644 index 0000000..911f3ae Binary files /dev/null and b/static/images/facebook-dreamstale25.png differ diff --git a/static/images/feed-dreamstale27.png b/static/images/feed-dreamstale27.png new file mode 100644 index 0000000..387361c Binary files /dev/null and b/static/images/feed-dreamstale27.png differ diff --git a/static/images/github2-dreamstale35.png b/static/images/github2-dreamstale35.png new file mode 100644 index 0000000..21216ec Binary files /dev/null and b/static/images/github2-dreamstale35.png differ diff --git a/static/images/google+-dreamstale37.png b/static/images/google+-dreamstale37.png new file mode 100644 index 0000000..17f985b Binary files /dev/null and b/static/images/google+-dreamstale37.png differ diff --git a/static/images/linkedin-dreamstale45.png b/static/images/linkedin-dreamstale45.png new file mode 100644 index 0000000..dfd9b2a Binary files /dev/null and b/static/images/linkedin-dreamstale45.png differ diff --git a/static/images/photo.png b/static/images/photo.png new file mode 100644 index 0000000..72c861c Binary files /dev/null and b/static/images/photo.png differ diff --git a/static/images/profile.png b/static/images/profile.png new file mode 100644 index 0000000..004414f Binary files /dev/null and b/static/images/profile.png differ diff --git a/static/images/twitter-dreamstale71.png b/static/images/twitter-dreamstale71.png new file mode 100644 index 0000000..27779fc Binary files /dev/null and b/static/images/twitter-dreamstale71.png differ diff --git a/theme.toml b/theme.toml new file mode 100644 index 0000000..a1f16a8 --- /dev/null +++ b/theme.toml @@ -0,0 +1,13 @@ +name = "Polymer" +license = "MIT" +licenselink = "https://github.com/pdevty/polymer/blob/master/LICENSE.md" +description = "Material Design theme by polymer (web components)" +homepage = "https://github.com/pdevty/polymer" +tags = ["blog"] +features = ["Polymer Material Design","Google Analytics","Pagination", +"Disqus","Tags","Categories","Highlighting source code","Cover image","Social links"] +min_version = 0.13 + +[author] + name = "pdevty" + homepage = "http://pdevty.github.io/blog/" -- cgit v1.2.3