easycomments 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +1 -0
- data/.rspec +2 -0
- data/Gemfile +14 -0
- data/LICENSE +21 -0
- data/README.md +92 -0
- data/Rakefile +49 -0
- data/_config.yml +28 -0
- data/bin/ec +45 -0
- data/config.ru +12 -0
- data/dashboard.rb +57 -0
- data/easycomments.gemspec +22 -0
- data/ec.rb +43 -0
- data/lib/easycomments/ec_configuration.rb +42 -0
- data/lib/easycomments/ec_dashboard_model.rb +70 -0
- data/lib/easycomments/ec_model.rb +47 -0
- data/lib/easycomments.rb +14 -0
- data/public/bower.json +32 -0
- data/public/bower_components/core-a11y-keys/.bower.json +28 -0
- data/public/bower_components/core-a11y-keys/README.md +4 -0
- data/public/bower_components/core-a11y-keys/bower.json +18 -0
- data/public/bower_components/core-a11y-keys/core-a11y-keys.html +335 -0
- data/public/bower_components/core-a11y-keys/demo.html +41 -0
- data/public/bower_components/core-a11y-keys/index.html +22 -0
- data/public/bower_components/core-ajax/.bower.json +22 -0
- data/public/bower_components/core-ajax/README.md +4 -0
- data/public/bower_components/core-ajax/bower.json +11 -0
- data/public/bower_components/core-ajax/core-ajax.html +434 -0
- data/public/bower_components/core-ajax/core-xhr.html +116 -0
- data/public/bower_components/core-ajax/demo-progress.html +65 -0
- data/public/bower_components/core-ajax/demo.html +43 -0
- data/public/bower_components/core-ajax/index.html +22 -0
- data/public/bower_components/core-ajax/metadata.html +23 -0
- data/public/bower_components/core-ajax/test/core-ajax-progress.html +108 -0
- data/public/bower_components/core-ajax/test/core-ajax-race.html +81 -0
- data/public/bower_components/core-ajax/test/core-ajax.html +287 -0
- data/public/bower_components/core-ajax/test/index.html +17 -0
- data/public/bower_components/core-collapse/.bower.json +21 -0
- data/public/bower_components/core-collapse/README.md +4 -0
- data/public/bower_components/core-collapse/bower.json +11 -0
- data/public/bower_components/core-collapse/core-collapse.css +16 -0
- data/public/bower_components/core-collapse/core-collapse.html +298 -0
- data/public/bower_components/core-collapse/demo.html +75 -0
- data/public/bower_components/core-collapse/index.html +22 -0
- data/public/bower_components/core-collapse/test/basic.html +85 -0
- data/public/bower_components/core-collapse/test/index.html +24 -0
- data/public/bower_components/core-component-page/.bower.json +19 -0
- data/public/bower_components/core-component-page/README.md +6 -0
- data/public/bower_components/core-component-page/bowager-logo.png +0 -0
- data/public/bower_components/core-component-page/bower.json +9 -0
- data/public/bower_components/core-component-page/core-component-page.html +37 -0
- data/public/bower_components/core-component-page/demo.html +23 -0
- data/public/bower_components/core-component-page/index.html +22 -0
- data/public/bower_components/core-drawer-panel/.bower.json +19 -0
- data/public/bower_components/core-drawer-panel/README.md +4 -0
- data/public/bower_components/core-drawer-panel/bower.json +9 -0
- data/public/bower_components/core-drawer-panel/core-drawer-panel.css +160 -0
- data/public/bower_components/core-drawer-panel/core-drawer-panel.html +418 -0
- data/public/bower_components/core-drawer-panel/demo.html +68 -0
- data/public/bower_components/core-drawer-panel/index.html +22 -0
- data/public/bower_components/core-drawer-panel/metadata.html +37 -0
- data/public/bower_components/core-focusable/.bower.json +18 -0
- data/public/bower_components/core-focusable/README.md +6 -0
- data/public/bower_components/core-focusable/bower.json +8 -0
- data/public/bower_components/core-focusable/core-focusable.html +4 -0
- data/public/bower_components/core-focusable/core-focusable.js +134 -0
- data/public/bower_components/core-focusable/demo.html +109 -0
- data/public/bower_components/core-focusable/polymer-mixin.js +35 -0
- data/public/bower_components/core-header-panel/.bower.json +18 -0
- data/public/bower_components/core-header-panel/README.md +4 -0
- data/public/bower_components/core-header-panel/bower.json +8 -0
- data/public/bower_components/core-header-panel/core-header-panel.css +78 -0
- data/public/bower_components/core-header-panel/core-header-panel.html +277 -0
- data/public/bower_components/core-header-panel/demo.html +100 -0
- data/public/bower_components/core-header-panel/index.html +23 -0
- data/public/bower_components/core-header-panel/metadata.html +37 -0
- data/public/bower_components/core-icon/.bower.json +19 -0
- data/public/bower_components/core-icon/README.md +4 -0
- data/public/bower_components/core-icon/bower.json +9 -0
- data/public/bower_components/core-icon/core-icon.css +16 -0
- data/public/bower_components/core-icon/core-icon.html +201 -0
- data/public/bower_components/core-icon/demo.html +44 -0
- data/public/bower_components/core-icon/index.html +22 -0
- data/public/bower_components/core-icon/metadata.html +21 -0
- data/public/bower_components/core-icon-button/.bower.json +18 -0
- data/public/bower_components/core-icon-button/README.md +4 -0
- data/public/bower_components/core-icon-button/bower.json +8 -0
- data/public/bower_components/core-icon-button/core-icon-button.css +75 -0
- data/public/bower_components/core-icon-button/core-icon-button.html +81 -0
- data/public/bower_components/core-icon-button/demo.html +35 -0
- data/public/bower_components/core-icon-button/index.html +22 -0
- data/public/bower_components/core-icon-button/metadata.html +20 -0
- data/public/bower_components/core-icons/.bower.json +24 -0
- data/public/bower_components/core-icons/.gitignore +2 -0
- data/public/bower_components/core-icons/README.md +8 -0
- data/public/bower_components/core-icons/av-icons.html +65 -0
- data/public/bower_components/core-icons/bower.json +14 -0
- data/public/bower_components/core-icons/communication-icons.html +54 -0
- data/public/bower_components/core-icons/core-icons.html +278 -0
- data/public/bower_components/core-icons/demo.html +98 -0
- data/public/bower_components/core-icons/device-icons.html +90 -0
- data/public/bower_components/core-icons/editor-icons.html +67 -0
- data/public/bower_components/core-icons/hardware-icons.html +56 -0
- data/public/bower_components/core-icons/image-icons.html +152 -0
- data/public/bower_components/core-icons/index.html +22 -0
- data/public/bower_components/core-icons/maps-icons.html +70 -0
- data/public/bower_components/core-icons/notification-icons.html +49 -0
- data/public/bower_components/core-icons/social-icons.html +39 -0
- data/public/bower_components/core-iconset/.bower.json +20 -0
- data/public/bower_components/core-iconset/README.md +4 -0
- data/public/bower_components/core-iconset/bower.json +10 -0
- data/public/bower_components/core-iconset/core-iconset.html +241 -0
- data/public/bower_components/core-iconset/demo.html +62 -0
- data/public/bower_components/core-iconset/index.html +22 -0
- data/public/bower_components/core-iconset/my-icons-big.png +0 -0
- data/public/bower_components/core-iconset/my-icons.png +0 -0
- data/public/bower_components/core-iconset-svg/.bower.json +19 -0
- data/public/bower_components/core-iconset-svg/README.md +4 -0
- data/public/bower_components/core-iconset-svg/bower.json +9 -0
- data/public/bower_components/core-iconset-svg/core-iconset-svg.html +168 -0
- data/public/bower_components/core-iconset-svg/demo.html +66 -0
- data/public/bower_components/core-iconset-svg/index.html +22 -0
- data/public/bower_components/core-iconset-svg/svg-sample-icons.html +68 -0
- data/public/bower_components/core-input/.bower.json +20 -0
- data/public/bower_components/core-input/README.md +2 -0
- data/public/bower_components/core-input/bower.json +10 -0
- data/public/bower_components/core-input/core-input.css +41 -0
- data/public/bower_components/core-input/core-input.html +148 -0
- data/public/bower_components/core-input/demo.html +62 -0
- data/public/bower_components/core-input/index.html +22 -0
- data/public/bower_components/core-input/metadata.html +23 -0
- data/public/bower_components/core-input/test/a11y.html +55 -0
- data/public/bower_components/core-input/test/basic.html +60 -0
- data/public/bower_components/core-input/test/index.html +25 -0
- data/public/bower_components/core-item/.bower.json +19 -0
- data/public/bower_components/core-item/README.md +4 -0
- data/public/bower_components/core-item/bower.json +9 -0
- data/public/bower_components/core-item/core-item.css +45 -0
- data/public/bower_components/core-item/core-item.html +73 -0
- data/public/bower_components/core-item/demo.html +92 -0
- data/public/bower_components/core-item/index.html +22 -0
- data/public/bower_components/core-item/metadata.html +24 -0
- data/public/bower_components/core-media-query/.bower.json +18 -0
- data/public/bower_components/core-media-query/README.md +4 -0
- data/public/bower_components/core-media-query/bower.json +8 -0
- data/public/bower_components/core-media-query/core-media-query.html +87 -0
- data/public/bower_components/core-media-query/demo.html +44 -0
- data/public/bower_components/core-media-query/index.html +22 -0
- data/public/bower_components/core-menu/.bower.json +22 -0
- data/public/bower_components/core-menu/README.md +4 -0
- data/public/bower_components/core-menu/bower.json +11 -0
- data/public/bower_components/core-menu/core-menu.css +18 -0
- data/public/bower_components/core-menu/core-menu.html +73 -0
- data/public/bower_components/core-menu/core-submenu.css +43 -0
- data/public/bower_components/core-menu/core-submenu.html +126 -0
- data/public/bower_components/core-menu/demo.html +101 -0
- data/public/bower_components/core-menu/index.html +22 -0
- data/public/bower_components/core-menu/metadata.html +62 -0
- data/public/bower_components/core-meta/.bower.json +18 -0
- data/public/bower_components/core-meta/README.md +4 -0
- data/public/bower_components/core-meta/bower.json +8 -0
- data/public/bower_components/core-meta/core-meta.html +145 -0
- data/public/bower_components/core-meta/demo.html +58 -0
- data/public/bower_components/core-meta/index.html +22 -0
- data/public/bower_components/core-overlay/.bower.json +20 -0
- data/public/bower_components/core-overlay/README.md +4 -0
- data/public/bower_components/core-overlay/bower.json +10 -0
- data/public/bower_components/core-overlay/core-key-helper.html +22 -0
- data/public/bower_components/core-overlay/core-overlay-layer.html +116 -0
- data/public/bower_components/core-overlay/core-overlay.html +776 -0
- data/public/bower_components/core-overlay/demo.html +155 -0
- data/public/bower_components/core-overlay/gulpfile.js +2 -0
- data/public/bower_components/core-overlay/index.html +22 -0
- data/public/bower_components/core-overlay/tests/html/core-overlay-basic.html +127 -0
- data/public/bower_components/core-overlay/tests/html/core-overlay-positioning-margin.html +153 -0
- data/public/bower_components/core-overlay/tests/html/core-overlay-positioning.html +167 -0
- data/public/bower_components/core-overlay/tests/html/core-overlay-quick-close.html +45 -0
- data/public/bower_components/core-overlay/tests/html/core-overlay-scroll.html +130 -0
- data/public/bower_components/core-overlay/tests/js/htmltests.js +7 -0
- data/public/bower_components/core-overlay/tests/runner.html +14 -0
- data/public/bower_components/core-overlay/tests/tests.json +6 -0
- data/public/bower_components/core-pages/.bower.json +19 -0
- data/public/bower_components/core-pages/README.md +4 -0
- data/public/bower_components/core-pages/bower.json +8 -0
- data/public/bower_components/core-pages/core-pages.css +30 -0
- data/public/bower_components/core-pages/core-pages.html +44 -0
- data/public/bower_components/core-pages/demo.html +136 -0
- data/public/bower_components/core-pages/index.html +22 -0
- data/public/bower_components/core-pages/metadata.html +25 -0
- data/public/bower_components/core-resizable/.bower.json +18 -0
- data/public/bower_components/core-resizable/README.md +4 -0
- data/public/bower_components/core-resizable/bower.json +8 -0
- data/public/bower_components/core-resizable/core-resizable.html +248 -0
- data/public/bower_components/core-resizable/index.html +22 -0
- data/public/bower_components/core-resizable/test/basic.html +504 -0
- data/public/bower_components/core-resizable/test/index.html +16 -0
- data/public/bower_components/core-resizable/test/test-elements.html +66 -0
- data/public/bower_components/core-scaffold/.bower.json +22 -0
- data/public/bower_components/core-scaffold/README.md +4 -0
- data/public/bower_components/core-scaffold/bower.json +11 -0
- data/public/bower_components/core-scaffold/core-scaffold.html +252 -0
- data/public/bower_components/core-scaffold/demo.html +82 -0
- data/public/bower_components/core-scaffold/index.html +22 -0
- data/public/bower_components/core-scaffold/metadata.html +52 -0
- data/public/bower_components/core-selection/.bower.json +21 -0
- data/public/bower_components/core-selection/README.md +4 -0
- data/public/bower_components/core-selection/bower.json +11 -0
- data/public/bower_components/core-selection/core-selection.html +149 -0
- data/public/bower_components/core-selection/demo.html +59 -0
- data/public/bower_components/core-selection/index.html +22 -0
- data/public/bower_components/core-selection/test/basic.html +62 -0
- data/public/bower_components/core-selection/test/index.html +25 -0
- data/public/bower_components/core-selection/test/multi.html +63 -0
- data/public/bower_components/core-selector/.bower.json +22 -0
- data/public/bower_components/core-selector/.gitignore +2 -0
- data/public/bower_components/core-selector/README.md +4 -0
- data/public/bower_components/core-selector/bower.json +12 -0
- data/public/bower_components/core-selector/core-selector.html +548 -0
- data/public/bower_components/core-selector/demo.html +106 -0
- data/public/bower_components/core-selector/index.html +22 -0
- data/public/bower_components/core-selector/metadata.html +20 -0
- data/public/bower_components/core-selector/test/activate-event.html +63 -0
- data/public/bower_components/core-selector/test/basic.html +126 -0
- data/public/bower_components/core-selector/test/content.html +101 -0
- data/public/bower_components/core-selector/test/index.html +30 -0
- data/public/bower_components/core-selector/test/multi.html +115 -0
- data/public/bower_components/core-selector/test/next-previous.html +113 -0
- data/public/bower_components/core-selector/test/selected-attr-prop.html +62 -0
- data/public/bower_components/core-selector/test/template-repeat.html +63 -0
- data/public/bower_components/core-style/.bower.json +18 -0
- data/public/bower_components/core-style/README.md +4 -0
- data/public/bower_components/core-style/bower.json +8 -0
- data/public/bower_components/core-style/core-style.html +387 -0
- data/public/bower_components/core-style/demo.html +58 -0
- data/public/bower_components/core-style/elements.html +55 -0
- data/public/bower_components/core-style/index.html +22 -0
- data/public/bower_components/core-style/my-theme.html +73 -0
- data/public/bower_components/core-toolbar/.bower.json +19 -0
- data/public/bower_components/core-toolbar/README.md +4 -0
- data/public/bower_components/core-toolbar/bower.json +9 -0
- data/public/bower_components/core-toolbar/core-toolbar.css +117 -0
- data/public/bower_components/core-toolbar/core-toolbar.html +155 -0
- data/public/bower_components/core-toolbar/demo.html +119 -0
- data/public/bower_components/core-toolbar/index.html +22 -0
- data/public/bower_components/core-toolbar/metadata.html +28 -0
- data/public/bower_components/core-toolbar/test/basic.html +86 -0
- data/public/bower_components/core-toolbar/test/index.html +24 -0
- data/public/bower_components/core-transition/.bower.json +19 -0
- data/public/bower_components/core-transition/README.md +2 -0
- data/public/bower_components/core-transition/bower.json +9 -0
- data/public/bower_components/core-transition/core-transition-css.html +220 -0
- data/public/bower_components/core-transition/core-transition-overlay.css +46 -0
- data/public/bower_components/core-transition/core-transition.html +140 -0
- data/public/bower_components/core-transition/demo.html +87 -0
- data/public/bower_components/core-transition/index.html +22 -0
- data/public/bower_components/font-roboto/.bower.json +15 -0
- data/public/bower_components/font-roboto/roboto.html +9 -0
- data/public/bower_components/paper-button/.bower.json +27 -0
- data/public/bower_components/paper-button/README.md +4 -0
- data/public/bower_components/paper-button/bower.json +16 -0
- data/public/bower_components/paper-button/demo.html +157 -0
- data/public/bower_components/paper-button/index.html +22 -0
- data/public/bower_components/paper-button/metadata.html +17 -0
- data/public/bower_components/paper-button/paper-button-base.html +164 -0
- data/public/bower_components/paper-button/paper-button.html +197 -0
- data/public/bower_components/paper-button/test/index.html +24 -0
- data/public/bower_components/paper-button/test/paper-button.html +112 -0
- data/public/bower_components/paper-icon-button/.bower.json +25 -0
- data/public/bower_components/paper-icon-button/README.md +4 -0
- data/public/bower_components/paper-icon-button/bower.json +15 -0
- data/public/bower_components/paper-icon-button/demo.html +150 -0
- data/public/bower_components/paper-icon-button/index.html +22 -0
- data/public/bower_components/paper-icon-button/metadata.html +21 -0
- data/public/bower_components/paper-icon-button/paper-icon-button.html +154 -0
- data/public/bower_components/paper-icon-button/test/a11y.html +68 -0
- data/public/bower_components/paper-icon-button/test/basic.html +50 -0
- data/public/bower_components/paper-icon-button/test/index.html +25 -0
- data/public/bower_components/paper-input/.bower.json +26 -0
- data/public/bower_components/paper-input/.gitignore +1 -0
- data/public/bower_components/paper-input/README.md +4 -0
- data/public/bower_components/paper-input/bower.json +15 -0
- data/public/bower_components/paper-input/demo.html +236 -0
- data/public/bower_components/paper-input/index.html +22 -0
- data/public/bower_components/paper-input/metadata.html +20 -0
- data/public/bower_components/paper-input/paper-autogrow-textarea.html +162 -0
- data/public/bower_components/paper-input/paper-char-counter.html +121 -0
- data/public/bower_components/paper-input/paper-input-decorator.css +132 -0
- data/public/bower_components/paper-input/paper-input-decorator.html +547 -0
- data/public/bower_components/paper-input/paper-input.html +145 -0
- data/public/bower_components/paper-input/test/index.html +26 -0
- data/public/bower_components/paper-input/test/paper-autogrow-textarea.html +146 -0
- data/public/bower_components/paper-input/test/paper-input-decorator.html +240 -0
- data/public/bower_components/paper-input/test/paper-input.html +68 -0
- data/public/bower_components/paper-input/test/util.js +15 -0
- data/public/bower_components/paper-radio-button/.bower.json +22 -0
- data/public/bower_components/paper-radio-button/README.md +4 -0
- data/public/bower_components/paper-radio-button/bower.json +12 -0
- data/public/bower_components/paper-radio-button/demo.html +84 -0
- data/public/bower_components/paper-radio-button/index.html +22 -0
- data/public/bower_components/paper-radio-button/metadata.html +17 -0
- data/public/bower_components/paper-radio-button/paper-radio-button.css +108 -0
- data/public/bower_components/paper-radio-button/paper-radio-button.html +166 -0
- data/public/bower_components/paper-ripple/.bower.json +23 -0
- data/public/bower_components/paper-ripple/README.md +4 -0
- data/public/bower_components/paper-ripple/bower.json +13 -0
- data/public/bower_components/paper-ripple/demo.html +414 -0
- data/public/bower_components/paper-ripple/index.html +22 -0
- data/public/bower_components/paper-ripple/metadata.html +20 -0
- data/public/bower_components/paper-ripple/paper-ripple.html +477 -0
- data/public/bower_components/paper-ripple/test/index.html +24 -0
- data/public/bower_components/paper-ripple/test/position.html +109 -0
- data/public/bower_components/paper-shadow/.bower.json +22 -0
- data/public/bower_components/paper-shadow/README.md +4 -0
- data/public/bower_components/paper-shadow/bower.json +11 -0
- data/public/bower_components/paper-shadow/demo.html +134 -0
- data/public/bower_components/paper-shadow/index.html +22 -0
- data/public/bower_components/paper-shadow/metadata.html +17 -0
- data/public/bower_components/paper-shadow/paper-shadow.css +66 -0
- data/public/bower_components/paper-shadow/paper-shadow.html +86 -0
- data/public/bower_components/paper-shadow/test/basic.html +62 -0
- data/public/bower_components/paper-shadow/test/index.html +24 -0
- data/public/bower_components/paper-tabs/.bower.json +26 -0
- data/public/bower_components/paper-tabs/README.md +4 -0
- data/public/bower_components/paper-tabs/bower.json +15 -0
- data/public/bower_components/paper-tabs/demo.html +242 -0
- data/public/bower_components/paper-tabs/index.html +22 -0
- data/public/bower_components/paper-tabs/metadata.html +58 -0
- data/public/bower_components/paper-tabs/paper-tab.css +59 -0
- data/public/bower_components/paper-tabs/paper-tab.html +82 -0
- data/public/bower_components/paper-tabs/paper-tabs.css +80 -0
- data/public/bower_components/paper-tabs/paper-tabs.html +353 -0
- data/public/bower_components/paper-toast/.bower.json +22 -0
- data/public/bower_components/paper-toast/README.md +4 -0
- data/public/bower_components/paper-toast/bower.json +11 -0
- data/public/bower_components/paper-toast/demo.html +63 -0
- data/public/bower_components/paper-toast/index.html +22 -0
- data/public/bower_components/paper-toast/metadata.html +20 -0
- data/public/bower_components/paper-toast/paper-toast.css +80 -0
- data/public/bower_components/paper-toast/paper-toast.html +296 -0
- data/public/bower_components/paper-toggle-button/.bower.json +20 -0
- data/public/bower_components/paper-toggle-button/README.md +4 -0
- data/public/bower_components/paper-toggle-button/bower.json +9 -0
- data/public/bower_components/paper-toggle-button/demo.html +97 -0
- data/public/bower_components/paper-toggle-button/index.html +22 -0
- data/public/bower_components/paper-toggle-button/metadata.html +17 -0
- data/public/bower_components/paper-toggle-button/paper-toggle-button.css +95 -0
- data/public/bower_components/paper-toggle-button/paper-toggle-button.html +179 -0
- data/public/bower_components/polymer/.bower.json +32 -0
- data/public/bower_components/polymer/README.md +21 -0
- data/public/bower_components/polymer/bower.json +23 -0
- data/public/bower_components/polymer/build.log +26 -0
- data/public/bower_components/polymer/layout.html +286 -0
- data/public/bower_components/polymer/polymer.html +12 -0
- data/public/bower_components/polymer/polymer.js +11859 -0
- data/public/bower_components/polymer/polymer.min.js +14 -0
- data/public/bower_components/webcomponentsjs/.bower.json +23 -0
- data/public/bower_components/webcomponentsjs/CustomElements.js +634 -0
- data/public/bower_components/webcomponentsjs/CustomElements.min.js +11 -0
- data/public/bower_components/webcomponentsjs/HTMLImports.js +764 -0
- data/public/bower_components/webcomponentsjs/HTMLImports.min.js +11 -0
- data/public/bower_components/webcomponentsjs/README.md +73 -0
- data/public/bower_components/webcomponentsjs/ShadowDOM.js +4277 -0
- data/public/bower_components/webcomponentsjs/ShadowDOM.min.js +13 -0
- data/public/bower_components/webcomponentsjs/bower.json +14 -0
- data/public/bower_components/webcomponentsjs/build.log +31 -0
- data/public/bower_components/webcomponentsjs/package.json +31 -0
- data/public/bower_components/webcomponentsjs/webcomponents-lite.js +1728 -0
- data/public/bower_components/webcomponentsjs/webcomponents-lite.min.js +11 -0
- data/public/bower_components/webcomponentsjs/webcomponents.js +6114 -0
- data/public/bower_components/webcomponentsjs/webcomponents.min.js +14 -0
- data/public/css/main.css +41 -0
- data/public/elements/ec-dashboard/ec-dashboard.html +269 -0
- data/public/polymer-loader.html +24 -0
- data/public/polymer-loader.vulcanized.html +19 -0
- data/spec/ec/ec_dashboard_spec.rb +78 -0
- data/spec/ec/ec_spec.rb +78 -0
- data/spec/spec_helper.rb +27 -0
- data/views/index.html +88 -0
- metadata +464 -0
|
@@ -0,0 +1,434 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
|
|
3
|
+
This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
|
|
4
|
+
The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
|
|
5
|
+
The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
|
|
6
|
+
Code distributed by Google as part of the polymer project is also
|
|
7
|
+
subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
|
|
8
|
+
-->
|
|
9
|
+
|
|
10
|
+
<!--
|
|
11
|
+
@group Polymer Core Elements
|
|
12
|
+
|
|
13
|
+
The `core-ajax` element exposes `XMLHttpRequest` functionality.
|
|
14
|
+
|
|
15
|
+
<core-ajax
|
|
16
|
+
auto
|
|
17
|
+
url="http://gdata.youtube.com/feeds/api/videos/"
|
|
18
|
+
params='{"alt":"json", "q":"chrome"}'
|
|
19
|
+
handleAs="json"
|
|
20
|
+
on-core-response="{{handleResponse}}"></core-ajax>
|
|
21
|
+
|
|
22
|
+
With `auto` set to `true`, the element performs a request whenever
|
|
23
|
+
its `url`, `params` or `body` properties are changed.
|
|
24
|
+
|
|
25
|
+
Note: The `params` attribute must be double quoted JSON.
|
|
26
|
+
|
|
27
|
+
You can trigger a request explicitly by calling `go` on the
|
|
28
|
+
element.
|
|
29
|
+
|
|
30
|
+
@element core-ajax
|
|
31
|
+
@status beta
|
|
32
|
+
@homepage github.io
|
|
33
|
+
-->
|
|
34
|
+
<link rel="import" href="core-xhr.html">
|
|
35
|
+
<polymer-element name="core-ajax" hidden attributes="url handleAs auto params response error method headers body contentType withCredentials progress loading">
|
|
36
|
+
<script>
|
|
37
|
+
|
|
38
|
+
Polymer('core-ajax', {
|
|
39
|
+
/**
|
|
40
|
+
* Fired when a response is received.
|
|
41
|
+
*
|
|
42
|
+
* @event core-response
|
|
43
|
+
*/
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Fired when an error is received.
|
|
47
|
+
*
|
|
48
|
+
* @event core-error
|
|
49
|
+
*/
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Fired whenever a response or an error is received.
|
|
53
|
+
*
|
|
54
|
+
* @event core-complete
|
|
55
|
+
*/
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* The URL target of the request.
|
|
59
|
+
*
|
|
60
|
+
* @attribute url
|
|
61
|
+
* @type string
|
|
62
|
+
* @default ''
|
|
63
|
+
*/
|
|
64
|
+
url: '',
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Specifies what data to store in the `response` property, and
|
|
68
|
+
* to deliver as `event.response` in `response` events.
|
|
69
|
+
*
|
|
70
|
+
* One of:
|
|
71
|
+
*
|
|
72
|
+
* `text`: uses `XHR.responseText`.
|
|
73
|
+
*
|
|
74
|
+
* `xml`: uses `XHR.responseXML`.
|
|
75
|
+
*
|
|
76
|
+
* `json`: uses `XHR.responseText` parsed as JSON.
|
|
77
|
+
*
|
|
78
|
+
* `arraybuffer`: uses `XHR.response`.
|
|
79
|
+
*
|
|
80
|
+
* `blob`: uses `XHR.response`.
|
|
81
|
+
*
|
|
82
|
+
* `document`: uses `XHR.response`.
|
|
83
|
+
*
|
|
84
|
+
* @attribute handleAs
|
|
85
|
+
* @type string
|
|
86
|
+
* @default 'text'
|
|
87
|
+
*/
|
|
88
|
+
handleAs: '',
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* If true, automatically performs an Ajax request when either `url` or `params` changes.
|
|
92
|
+
*
|
|
93
|
+
* @attribute auto
|
|
94
|
+
* @type boolean
|
|
95
|
+
* @default false
|
|
96
|
+
*/
|
|
97
|
+
auto: false,
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Parameters to send to the specified URL, as JSON.
|
|
101
|
+
*
|
|
102
|
+
* @attribute params
|
|
103
|
+
* @type string
|
|
104
|
+
* @default ''
|
|
105
|
+
*/
|
|
106
|
+
params: '',
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* The response for the current request, or null if it hasn't
|
|
110
|
+
* completed yet or the request resulted in error.
|
|
111
|
+
*
|
|
112
|
+
* @attribute response
|
|
113
|
+
* @type Object
|
|
114
|
+
* @default null
|
|
115
|
+
*/
|
|
116
|
+
response: null,
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* The error for the current request, or null if it hasn't
|
|
120
|
+
* completed yet or the request resulted in success.
|
|
121
|
+
*
|
|
122
|
+
* @attribute error
|
|
123
|
+
* @type Object
|
|
124
|
+
* @default null
|
|
125
|
+
*/
|
|
126
|
+
error: null,
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Whether the current request is currently loading.
|
|
130
|
+
*
|
|
131
|
+
* @attribute loading
|
|
132
|
+
* @type boolean
|
|
133
|
+
* @default false
|
|
134
|
+
*/
|
|
135
|
+
loading: false,
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* The progress of the current request.
|
|
139
|
+
*
|
|
140
|
+
* @attribute progress
|
|
141
|
+
* @type {loaded: number, total: number, lengthComputable: boolean}
|
|
142
|
+
* @default {}
|
|
143
|
+
*/
|
|
144
|
+
progress: null,
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* The HTTP method to use such as 'GET', 'POST', 'PUT', or 'DELETE'.
|
|
148
|
+
* Default is 'GET'.
|
|
149
|
+
*
|
|
150
|
+
* @attribute method
|
|
151
|
+
* @type string
|
|
152
|
+
* @default ''
|
|
153
|
+
*/
|
|
154
|
+
method: '',
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* HTTP request headers to send.
|
|
158
|
+
*
|
|
159
|
+
* Example:
|
|
160
|
+
*
|
|
161
|
+
* <core-ajax
|
|
162
|
+
* auto
|
|
163
|
+
* url="http://somesite.com"
|
|
164
|
+
* headers='{"X-Requested-With": "XMLHttpRequest"}'
|
|
165
|
+
* handleAs="json"
|
|
166
|
+
* on-core-response="{{handleResponse}}"></core-ajax>
|
|
167
|
+
*
|
|
168
|
+
* @attribute headers
|
|
169
|
+
* @type Object
|
|
170
|
+
* @default null
|
|
171
|
+
*/
|
|
172
|
+
headers: null,
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* Optional raw body content to send when method === "POST".
|
|
176
|
+
*
|
|
177
|
+
* Example:
|
|
178
|
+
*
|
|
179
|
+
* <core-ajax method="POST" auto url="http://somesite.com"
|
|
180
|
+
* body='{"foo":1, "bar":2}'>
|
|
181
|
+
* </core-ajax>
|
|
182
|
+
*
|
|
183
|
+
* @attribute body
|
|
184
|
+
* @type Object
|
|
185
|
+
* @default null
|
|
186
|
+
*/
|
|
187
|
+
body: null,
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* Content type to use when sending data.
|
|
191
|
+
*
|
|
192
|
+
* @attribute contentType
|
|
193
|
+
* @type string
|
|
194
|
+
* @default 'application/x-www-form-urlencoded'
|
|
195
|
+
*/
|
|
196
|
+
contentType: 'application/x-www-form-urlencoded',
|
|
197
|
+
|
|
198
|
+
/**
|
|
199
|
+
* Set the withCredentials flag on the request.
|
|
200
|
+
*
|
|
201
|
+
* @attribute withCredentials
|
|
202
|
+
* @type boolean
|
|
203
|
+
* @default false
|
|
204
|
+
*/
|
|
205
|
+
withCredentials: false,
|
|
206
|
+
|
|
207
|
+
/**
|
|
208
|
+
* Additional properties to send to core-xhr.
|
|
209
|
+
*
|
|
210
|
+
* Can be set to an object containing default properties
|
|
211
|
+
* to send as arguments to the `core-xhr.request()` method
|
|
212
|
+
* which implements the low-level communication.
|
|
213
|
+
*
|
|
214
|
+
* @property xhrArgs
|
|
215
|
+
* @type Object
|
|
216
|
+
* @default null
|
|
217
|
+
*/
|
|
218
|
+
xhrArgs: null,
|
|
219
|
+
|
|
220
|
+
created: function() {
|
|
221
|
+
this.progress = {};
|
|
222
|
+
},
|
|
223
|
+
|
|
224
|
+
ready: function() {
|
|
225
|
+
this.xhr = document.createElement('core-xhr');
|
|
226
|
+
},
|
|
227
|
+
|
|
228
|
+
receive: function(response, xhr) {
|
|
229
|
+
if (this.isSuccess(xhr)) {
|
|
230
|
+
this.processResponse(xhr);
|
|
231
|
+
} else {
|
|
232
|
+
this.processError(xhr);
|
|
233
|
+
}
|
|
234
|
+
this.complete(xhr);
|
|
235
|
+
},
|
|
236
|
+
|
|
237
|
+
isSuccess: function(xhr) {
|
|
238
|
+
var status = xhr.status || 0;
|
|
239
|
+
return (status >= 200 && status < 300);
|
|
240
|
+
},
|
|
241
|
+
|
|
242
|
+
processResponse: function(xhr) {
|
|
243
|
+
var response = this.evalResponse(xhr);
|
|
244
|
+
if (xhr === this.activeRequest) {
|
|
245
|
+
this.response = response;
|
|
246
|
+
}
|
|
247
|
+
this.fire('core-response', {response: response, xhr: xhr});
|
|
248
|
+
},
|
|
249
|
+
|
|
250
|
+
processError: function(xhr) {
|
|
251
|
+
var response = this.evalResponse(xhr);
|
|
252
|
+
var error = {
|
|
253
|
+
statusCode: xhr.status,
|
|
254
|
+
response: response
|
|
255
|
+
};
|
|
256
|
+
if (xhr === this.activeRequest) {
|
|
257
|
+
this.error = error;
|
|
258
|
+
}
|
|
259
|
+
this.fire('core-error', {response: error, xhr: xhr});
|
|
260
|
+
},
|
|
261
|
+
|
|
262
|
+
processProgress: function(progress, xhr) {
|
|
263
|
+
if (xhr !== this.activeRequest) {
|
|
264
|
+
return;
|
|
265
|
+
}
|
|
266
|
+
// We create a proxy object here because these fields
|
|
267
|
+
// on the progress event are readonly properties, which
|
|
268
|
+
// causes problems in common use cases (e.g. binding to
|
|
269
|
+
// <paper-progress> attributes).
|
|
270
|
+
var progressProxy = {
|
|
271
|
+
lengthComputable: progress.lengthComputable,
|
|
272
|
+
loaded: progress.loaded,
|
|
273
|
+
total: progress.total
|
|
274
|
+
}
|
|
275
|
+
this.progress = progressProxy;
|
|
276
|
+
},
|
|
277
|
+
|
|
278
|
+
complete: function(xhr) {
|
|
279
|
+
if (xhr === this.activeRequest) {
|
|
280
|
+
this.loading = false;
|
|
281
|
+
}
|
|
282
|
+
this.fire('core-complete', {response: xhr.status, xhr: xhr});
|
|
283
|
+
},
|
|
284
|
+
|
|
285
|
+
evalResponse: function(xhr) {
|
|
286
|
+
return this[(this.handleAs || 'text') + 'Handler'](xhr);
|
|
287
|
+
},
|
|
288
|
+
|
|
289
|
+
xmlHandler: function(xhr) {
|
|
290
|
+
return xhr.responseXML;
|
|
291
|
+
},
|
|
292
|
+
|
|
293
|
+
textHandler: function(xhr) {
|
|
294
|
+
return xhr.responseText;
|
|
295
|
+
},
|
|
296
|
+
|
|
297
|
+
jsonHandler: function(xhr) {
|
|
298
|
+
var r = xhr.responseText;
|
|
299
|
+
try {
|
|
300
|
+
return JSON.parse(r);
|
|
301
|
+
} catch (x) {
|
|
302
|
+
console.warn('core-ajax caught an exception trying to parse response as JSON:');
|
|
303
|
+
console.warn('url:', this.url);
|
|
304
|
+
console.warn(x);
|
|
305
|
+
return r;
|
|
306
|
+
}
|
|
307
|
+
},
|
|
308
|
+
|
|
309
|
+
documentHandler: function(xhr) {
|
|
310
|
+
return xhr.response;
|
|
311
|
+
},
|
|
312
|
+
|
|
313
|
+
blobHandler: function(xhr) {
|
|
314
|
+
return xhr.response;
|
|
315
|
+
},
|
|
316
|
+
|
|
317
|
+
arraybufferHandler: function(xhr) {
|
|
318
|
+
return xhr.response;
|
|
319
|
+
},
|
|
320
|
+
|
|
321
|
+
urlChanged: function() {
|
|
322
|
+
if (!this.handleAs) {
|
|
323
|
+
var ext = String(this.url).split('.').pop();
|
|
324
|
+
switch (ext) {
|
|
325
|
+
case 'json':
|
|
326
|
+
this.handleAs = 'json';
|
|
327
|
+
break;
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
this.autoGo();
|
|
331
|
+
},
|
|
332
|
+
|
|
333
|
+
paramsChanged: function() {
|
|
334
|
+
this.autoGo();
|
|
335
|
+
},
|
|
336
|
+
|
|
337
|
+
bodyChanged: function() {
|
|
338
|
+
this.autoGo();
|
|
339
|
+
},
|
|
340
|
+
|
|
341
|
+
autoChanged: function() {
|
|
342
|
+
this.autoGo();
|
|
343
|
+
},
|
|
344
|
+
|
|
345
|
+
// TODO(sorvell): multiple side-effects could call autoGo
|
|
346
|
+
// during one micro-task, use a job to have only one action
|
|
347
|
+
// occur
|
|
348
|
+
autoGo: function() {
|
|
349
|
+
if (this.auto) {
|
|
350
|
+
this.goJob = this.job(this.goJob, this.go, 0);
|
|
351
|
+
}
|
|
352
|
+
},
|
|
353
|
+
|
|
354
|
+
getParams: function(params) {
|
|
355
|
+
params = this.params || params;
|
|
356
|
+
if (params && typeof(params) == 'string') {
|
|
357
|
+
params = JSON.parse(params);
|
|
358
|
+
}
|
|
359
|
+
return params;
|
|
360
|
+
},
|
|
361
|
+
|
|
362
|
+
/**
|
|
363
|
+
* Performs an Ajax request to the specified URL.
|
|
364
|
+
*
|
|
365
|
+
* @method go
|
|
366
|
+
*/
|
|
367
|
+
go: function() {
|
|
368
|
+
var args = this.xhrArgs || {};
|
|
369
|
+
// TODO(sjmiles): we may want XHR to default to POST if body is set
|
|
370
|
+
args.body = this.body || args.body;
|
|
371
|
+
args.params = this.getParams(args.params);
|
|
372
|
+
args.headers = this.headers || args.headers || {};
|
|
373
|
+
if (args.headers && typeof(args.headers) == 'string') {
|
|
374
|
+
args.headers = JSON.parse(args.headers);
|
|
375
|
+
}
|
|
376
|
+
var hasContentType = Object.keys(args.headers).some(function (header) {
|
|
377
|
+
return header.toLowerCase() === 'content-type';
|
|
378
|
+
});
|
|
379
|
+
// No Content-Type should be specified if sending `FormData`.
|
|
380
|
+
// The UA must set the Content-Type w/ a calculated multipart boundary ID.
|
|
381
|
+
if (args.body instanceof FormData) {
|
|
382
|
+
delete args.headers['Content-Type'];
|
|
383
|
+
}
|
|
384
|
+
else if (!hasContentType && this.contentType) {
|
|
385
|
+
args.headers['Content-Type'] = this.contentType;
|
|
386
|
+
}
|
|
387
|
+
if (this.handleAs === 'arraybuffer' || this.handleAs === 'blob' ||
|
|
388
|
+
this.handleAs === 'document') {
|
|
389
|
+
args.responseType = this.handleAs;
|
|
390
|
+
}
|
|
391
|
+
args.withCredentials = this.withCredentials;
|
|
392
|
+
args.callback = this.receive.bind(this);
|
|
393
|
+
args.url = this.url;
|
|
394
|
+
args.method = this.method;
|
|
395
|
+
|
|
396
|
+
this.response = this.error = this.progress = null;
|
|
397
|
+
this.activeRequest = args.url && this.xhr.request(args);
|
|
398
|
+
if (this.activeRequest) {
|
|
399
|
+
this.loading = true;
|
|
400
|
+
var activeRequest = this.activeRequest;
|
|
401
|
+
// IE < 10 doesn't support progress events.
|
|
402
|
+
if ('onprogress' in activeRequest) {
|
|
403
|
+
this.activeRequest.addEventListener(
|
|
404
|
+
'progress',
|
|
405
|
+
function(progress) {
|
|
406
|
+
this.processProgress(progress, activeRequest);
|
|
407
|
+
}.bind(this), false);
|
|
408
|
+
} else {
|
|
409
|
+
this.progress = {
|
|
410
|
+
lengthComputable: false,
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
return this.activeRequest;
|
|
415
|
+
},
|
|
416
|
+
|
|
417
|
+
/**
|
|
418
|
+
* Aborts the current active request if there is one and resets internal
|
|
419
|
+
* state appropriately.
|
|
420
|
+
*
|
|
421
|
+
* @method abort
|
|
422
|
+
*/
|
|
423
|
+
abort: function() {
|
|
424
|
+
if (!this.activeRequest) return;
|
|
425
|
+
this.activeRequest.abort();
|
|
426
|
+
this.activeRequest = null;
|
|
427
|
+
this.progress = {};
|
|
428
|
+
this.loading = false;
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
});
|
|
432
|
+
|
|
433
|
+
</script>
|
|
434
|
+
</polymer-element>
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
|
|
3
|
+
This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
|
|
4
|
+
The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
|
|
5
|
+
The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
|
|
6
|
+
Code distributed by Google as part of the polymer project is also
|
|
7
|
+
subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
|
|
8
|
+
-->
|
|
9
|
+
<!--
|
|
10
|
+
/**
|
|
11
|
+
* @group Polymer Core Elements
|
|
12
|
+
*
|
|
13
|
+
* core-xhr can be used to perform XMLHttpRequests.
|
|
14
|
+
*
|
|
15
|
+
* <core-xhr id="xhr"></core-xhr>
|
|
16
|
+
* ...
|
|
17
|
+
* this.$.xhr.request({url: url, params: params, callback: callback});
|
|
18
|
+
*
|
|
19
|
+
* @element core-xhr
|
|
20
|
+
*/
|
|
21
|
+
-->
|
|
22
|
+
|
|
23
|
+
<link rel="import" href="../polymer/polymer.html">
|
|
24
|
+
|
|
25
|
+
<polymer-element name="core-xhr" hidden>
|
|
26
|
+
|
|
27
|
+
<script>
|
|
28
|
+
|
|
29
|
+
Polymer('core-xhr', {
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Sends a HTTP request to the server and returns the XHR object.
|
|
33
|
+
*
|
|
34
|
+
* @method request
|
|
35
|
+
* @param {Object} inOptions
|
|
36
|
+
* @param {String} inOptions.url The url to which the request is sent.
|
|
37
|
+
* @param {String} inOptions.method The HTTP method to use, default is GET.
|
|
38
|
+
* @param {boolean} inOptions.sync By default, all requests are sent asynchronously. To send synchronous requests, set to true.
|
|
39
|
+
* @param {Object} inOptions.params Data to be sent to the server.
|
|
40
|
+
* @param {Object} inOptions.body The content for the request body for POST method.
|
|
41
|
+
* @param {Object} inOptions.headers HTTP request headers.
|
|
42
|
+
* @param {String} inOptions.responseType The response type. Default is 'text'.
|
|
43
|
+
* @param {boolean} inOptions.withCredentials Whether or not to send credentials on the request. Default is false.
|
|
44
|
+
* @param {Object} inOptions.callback Called when request is completed.
|
|
45
|
+
* @returns {Object} XHR object.
|
|
46
|
+
*/
|
|
47
|
+
request: function(options) {
|
|
48
|
+
var xhr = new XMLHttpRequest();
|
|
49
|
+
var url = options.url;
|
|
50
|
+
var method = options.method || 'GET';
|
|
51
|
+
var async = !options.sync;
|
|
52
|
+
//
|
|
53
|
+
var params = this.toQueryString(options.params);
|
|
54
|
+
if (params && method.toUpperCase() == 'GET') {
|
|
55
|
+
url += (url.indexOf('?') > 0 ? '&' : '?') + params;
|
|
56
|
+
}
|
|
57
|
+
var xhrParams = this.isBodyMethod(method) ? (options.body || params) : null;
|
|
58
|
+
//
|
|
59
|
+
xhr.open(method, url, async);
|
|
60
|
+
if (options.responseType) {
|
|
61
|
+
xhr.responseType = options.responseType;
|
|
62
|
+
}
|
|
63
|
+
if (options.withCredentials) {
|
|
64
|
+
xhr.withCredentials = true;
|
|
65
|
+
}
|
|
66
|
+
this.makeReadyStateHandler(xhr, options.callback);
|
|
67
|
+
this.setRequestHeaders(xhr, options.headers);
|
|
68
|
+
xhr.send(xhrParams);
|
|
69
|
+
if (!async) {
|
|
70
|
+
xhr.onreadystatechange(xhr);
|
|
71
|
+
}
|
|
72
|
+
return xhr;
|
|
73
|
+
},
|
|
74
|
+
|
|
75
|
+
toQueryString: function(params) {
|
|
76
|
+
var r = [];
|
|
77
|
+
for (var n in params) {
|
|
78
|
+
var v = params[n];
|
|
79
|
+
n = encodeURIComponent(n);
|
|
80
|
+
r.push(v == null ? n : (n + '=' + encodeURIComponent(v)));
|
|
81
|
+
}
|
|
82
|
+
return r.join('&');
|
|
83
|
+
},
|
|
84
|
+
|
|
85
|
+
isBodyMethod: function(method) {
|
|
86
|
+
return this.bodyMethods[(method || '').toUpperCase()];
|
|
87
|
+
},
|
|
88
|
+
|
|
89
|
+
bodyMethods: {
|
|
90
|
+
POST: 1,
|
|
91
|
+
PUT: 1,
|
|
92
|
+
PATCH: 1,
|
|
93
|
+
DELETE: 1
|
|
94
|
+
},
|
|
95
|
+
|
|
96
|
+
makeReadyStateHandler: function(xhr, callback) {
|
|
97
|
+
xhr.onreadystatechange = function() {
|
|
98
|
+
if (xhr.readyState == 4) {
|
|
99
|
+
callback && callback.call(null, xhr.response, xhr);
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
},
|
|
103
|
+
|
|
104
|
+
setRequestHeaders: function(xhr, headers) {
|
|
105
|
+
if (headers) {
|
|
106
|
+
for (var name in headers) {
|
|
107
|
+
xhr.setRequestHeader(name, headers[name]);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
</script>
|
|
115
|
+
|
|
116
|
+
</polymer-element>
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<script src="../webcomponentsjs/webcomponents.js" debug></script>
|
|
5
|
+
<meta charset="utf-8">
|
|
6
|
+
<title>Race condition</title>
|
|
7
|
+
</head>
|
|
8
|
+
<body>
|
|
9
|
+
<link rel="import" href="core-ajax.html">
|
|
10
|
+
<link rel="import" href="../paper-progress/paper-progress.html">
|
|
11
|
+
<polymer-element name="progress-test">
|
|
12
|
+
<template>
|
|
13
|
+
<core-ajax
|
|
14
|
+
id="ajax" auto
|
|
15
|
+
url="http://httpbin.org/drip"
|
|
16
|
+
params="{{ {numbytes: numbytes, duration:5} }}"
|
|
17
|
+
response="{{response}}"
|
|
18
|
+
progress="{{progress}}"
|
|
19
|
+
loading="{{loading}}"
|
|
20
|
+
></core-ajax>
|
|
21
|
+
|
|
22
|
+
<!--
|
|
23
|
+
Ordinarily you'd gate on progress.lengthComputable, but we know the
|
|
24
|
+
length in this case (and httpbin sadly doesn't return a
|
|
25
|
+
Content-Length header for this requesthere).
|
|
26
|
+
|
|
27
|
+
https://github.com/kennethreitz/httpbin/pull/160
|
|
28
|
+
-->
|
|
29
|
+
<div>
|
|
30
|
+
<button on-click="{{restart}}">Restart</button>
|
|
31
|
+
<template if="{{loading}}">
|
|
32
|
+
Loading...
|
|
33
|
+
</template>
|
|
34
|
+
<template if="{{!loading}}">
|
|
35
|
+
Loaded!
|
|
36
|
+
</template>
|
|
37
|
+
</div>
|
|
38
|
+
<template if="{{loading && progress.loaded}}">
|
|
39
|
+
<paper-progress
|
|
40
|
+
value="{{progress.loaded}}"
|
|
41
|
+
min="0"
|
|
42
|
+
max="{{numbytes}}">
|
|
43
|
+
</paper-progress><br>
|
|
44
|
+
</template>
|
|
45
|
+
</template>
|
|
46
|
+
<script>
|
|
47
|
+
Polymer('progress-test', {
|
|
48
|
+
loading: true,
|
|
49
|
+
i: 0,
|
|
50
|
+
numbytes: 1000,
|
|
51
|
+
pretty: function(i) {
|
|
52
|
+
return JSON.stringify(i, null, 2);
|
|
53
|
+
},
|
|
54
|
+
restart: function() {
|
|
55
|
+
this.$.ajax.abort();
|
|
56
|
+
this.$.ajax.go();
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
</script>
|
|
60
|
+
|
|
61
|
+
</polymer-element>
|
|
62
|
+
|
|
63
|
+
<progress-test></progress-test>
|
|
64
|
+
</body>
|
|
65
|
+
</html>
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<!--
|
|
3
|
+
Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
|
|
4
|
+
This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
|
|
5
|
+
The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
|
|
6
|
+
The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
|
|
7
|
+
Code distributed by Google as part of the polymer project is also
|
|
8
|
+
subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
|
|
9
|
+
-->
|
|
10
|
+
<html>
|
|
11
|
+
<head>
|
|
12
|
+
|
|
13
|
+
<title>core-ajax</title>
|
|
14
|
+
|
|
15
|
+
<script src="../webcomponentsjs/webcomponents.js"></script>
|
|
16
|
+
<link rel="import" href="core-ajax.html">
|
|
17
|
+
|
|
18
|
+
</head>
|
|
19
|
+
<body>
|
|
20
|
+
|
|
21
|
+
<core-ajax auto url="//gdata.youtube.com/feeds/api/videos/"
|
|
22
|
+
params='{"alt":"json", "q":"chrome"}'
|
|
23
|
+
handleAs="json"></core-ajax>
|
|
24
|
+
|
|
25
|
+
<template repeat="{{response.feed.entry}}">
|
|
26
|
+
<div>{{title.$t}}</div>
|
|
27
|
+
</template>
|
|
28
|
+
|
|
29
|
+
<script>
|
|
30
|
+
document.addEventListener('polymer-ready', function() {
|
|
31
|
+
var ajax = document.querySelector("core-ajax");
|
|
32
|
+
ajax.addEventListener("core-response",
|
|
33
|
+
function(e) {
|
|
34
|
+
document.querySelector('template').model = {
|
|
35
|
+
response: e.detail.response
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
);
|
|
39
|
+
});
|
|
40
|
+
</script>
|
|
41
|
+
|
|
42
|
+
</body>
|
|
43
|
+
</html>
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<!--
|
|
3
|
+
Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
|
|
4
|
+
This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE
|
|
5
|
+
The complete set of authors may be found at http://polymer.github.io/AUTHORS
|
|
6
|
+
The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS
|
|
7
|
+
Code distributed by Google as part of the polymer project is also
|
|
8
|
+
subject to an additional IP rights grant found at http://polymer.github.io/PATENTS
|
|
9
|
+
-->
|
|
10
|
+
<html>
|
|
11
|
+
<head>
|
|
12
|
+
|
|
13
|
+
<script src="../webcomponentsjs/webcomponents.js"></script>
|
|
14
|
+
<link rel="import" href="../core-component-page/core-component-page.html">
|
|
15
|
+
|
|
16
|
+
</head>
|
|
17
|
+
<body unresolved>
|
|
18
|
+
|
|
19
|
+
<core-component-page></core-component-page>
|
|
20
|
+
|
|
21
|
+
</body>
|
|
22
|
+
</html>
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
@license
|
|
3
|
+
Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
|
|
4
|
+
This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
|
|
5
|
+
The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
|
|
6
|
+
The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
|
|
7
|
+
Code distributed by Google as part of the polymer project is also
|
|
8
|
+
subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
|
|
9
|
+
-->
|
|
10
|
+
<x-meta id="core-ajax" label="Ajax" group="Core">
|
|
11
|
+
|
|
12
|
+
<property name="handleAs" kind="select" options="json,text,xml,arraybuffer,blob,document"></property>
|
|
13
|
+
<property name="method" kind="select" options="GET,POST,PUT,DELETE"></property>
|
|
14
|
+
|
|
15
|
+
<template>
|
|
16
|
+
<core-ajax handleAs="json" method="GET"></core-ajax>
|
|
17
|
+
</template>
|
|
18
|
+
|
|
19
|
+
<template id="imports">
|
|
20
|
+
<link rel="import" href="core-ajax.html">
|
|
21
|
+
</template>
|
|
22
|
+
|
|
23
|
+
</x-meta>
|