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,548 @@
|
|
|
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-selector>` is used to manage a list of elements that can be selected.
|
|
14
|
+
|
|
15
|
+
The attribute `selected` indicates which item element is being selected.
|
|
16
|
+
The attribute `multi` indicates if multiple items can be selected at once.
|
|
17
|
+
Tapping on the item element would fire `core-activate` event. Use
|
|
18
|
+
`core-select` event to listen for selection changes.
|
|
19
|
+
|
|
20
|
+
Example:
|
|
21
|
+
|
|
22
|
+
<core-selector selected="0">
|
|
23
|
+
<div>Item 1</div>
|
|
24
|
+
<div>Item 2</div>
|
|
25
|
+
<div>Item 3</div>
|
|
26
|
+
</core-selector>
|
|
27
|
+
|
|
28
|
+
`<core-selector>` is not styled. Use the `core-selected` CSS class to style the selected element.
|
|
29
|
+
|
|
30
|
+
<style>
|
|
31
|
+
.item.core-selected {
|
|
32
|
+
background: #eee;
|
|
33
|
+
}
|
|
34
|
+
</style>
|
|
35
|
+
...
|
|
36
|
+
<core-selector>
|
|
37
|
+
<div class="item">Item 1</div>
|
|
38
|
+
<div class="item">Item 2</div>
|
|
39
|
+
<div class="item">Item 3</div>
|
|
40
|
+
</core-selector>
|
|
41
|
+
|
|
42
|
+
@element core-selector
|
|
43
|
+
@status stable
|
|
44
|
+
@homepage github.io
|
|
45
|
+
-->
|
|
46
|
+
|
|
47
|
+
<!--
|
|
48
|
+
Fired when an item's selection state is changed. This event is fired both
|
|
49
|
+
when an item is selected or deselected. The `isSelected` detail property
|
|
50
|
+
contains the selection state.
|
|
51
|
+
|
|
52
|
+
@event core-select
|
|
53
|
+
@param {Object} detail
|
|
54
|
+
@param {boolean} detail.isSelected true for selection and false for deselection
|
|
55
|
+
@param {Object} detail.item the item element
|
|
56
|
+
-->
|
|
57
|
+
<!--
|
|
58
|
+
Fired when an item element is tapped.
|
|
59
|
+
|
|
60
|
+
@event core-activate
|
|
61
|
+
@param {Object} detail
|
|
62
|
+
@param {Object} detail.item the item element
|
|
63
|
+
-->
|
|
64
|
+
|
|
65
|
+
<link rel="import" href="../polymer/polymer.html">
|
|
66
|
+
<link rel="import" href="../core-selection/core-selection.html">
|
|
67
|
+
|
|
68
|
+
<polymer-element name="core-selector"
|
|
69
|
+
attributes="selected multi valueattr selectedClass selectedProperty selectedAttribute selectedItem selectedModel selectedIndex notap excludedLocalNames target itemsSelector activateEvent">
|
|
70
|
+
|
|
71
|
+
<template>
|
|
72
|
+
<core-selection id="selection" multi="{{multi}}" on-core-select="{{selectionSelect}}"></core-selection>
|
|
73
|
+
<content id="items" select="*"></content>
|
|
74
|
+
</template>
|
|
75
|
+
|
|
76
|
+
<script>
|
|
77
|
+
|
|
78
|
+
Polymer('core-selector', {
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Gets or sets the selected element. Default to use the index
|
|
82
|
+
* of the item element.
|
|
83
|
+
*
|
|
84
|
+
* If you want a specific attribute value of the element to be
|
|
85
|
+
* used instead of index, set "valueattr" to that attribute name.
|
|
86
|
+
*
|
|
87
|
+
* Example:
|
|
88
|
+
*
|
|
89
|
+
* <core-selector valueattr="label" selected="foo">
|
|
90
|
+
* <div label="foo"></div>
|
|
91
|
+
* <div label="bar"></div>
|
|
92
|
+
* <div label="zot"></div>
|
|
93
|
+
* </core-selector>
|
|
94
|
+
*
|
|
95
|
+
* In multi-selection this should be an array of values.
|
|
96
|
+
*
|
|
97
|
+
* Example:
|
|
98
|
+
*
|
|
99
|
+
* <core-selector id="selector" valueattr="label" multi>
|
|
100
|
+
* <div label="foo"></div>
|
|
101
|
+
* <div label="bar"></div>
|
|
102
|
+
* <div label="zot"></div>
|
|
103
|
+
* </core-selector>
|
|
104
|
+
*
|
|
105
|
+
* this.$.selector.selected = ['foo', 'zot'];
|
|
106
|
+
*
|
|
107
|
+
* @attribute selected
|
|
108
|
+
* @type Object
|
|
109
|
+
* @default null
|
|
110
|
+
*/
|
|
111
|
+
selected: null,
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* If true, multiple selections are allowed.
|
|
115
|
+
*
|
|
116
|
+
* @attribute multi
|
|
117
|
+
* @type boolean
|
|
118
|
+
* @default false
|
|
119
|
+
*/
|
|
120
|
+
multi: false,
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Specifies the attribute to be used for "selected" attribute.
|
|
124
|
+
*
|
|
125
|
+
* @attribute valueattr
|
|
126
|
+
* @type string
|
|
127
|
+
* @default 'name'
|
|
128
|
+
*/
|
|
129
|
+
valueattr: 'name',
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* Specifies the CSS class to be used to add to the selected element.
|
|
133
|
+
*
|
|
134
|
+
* @attribute selectedClass
|
|
135
|
+
* @type string
|
|
136
|
+
* @default 'core-selected'
|
|
137
|
+
*/
|
|
138
|
+
selectedClass: 'core-selected',
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Specifies the property to be used to set on the selected element
|
|
142
|
+
* to indicate its active state.
|
|
143
|
+
*
|
|
144
|
+
* @attribute selectedProperty
|
|
145
|
+
* @type string
|
|
146
|
+
* @default ''
|
|
147
|
+
*/
|
|
148
|
+
selectedProperty: '',
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* Specifies the attribute to set on the selected element to indicate
|
|
152
|
+
* its active state.
|
|
153
|
+
*
|
|
154
|
+
* @attribute selectedAttribute
|
|
155
|
+
* @type string
|
|
156
|
+
* @default 'active'
|
|
157
|
+
*/
|
|
158
|
+
selectedAttribute: 'active',
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Returns the currently selected element. In multi-selection this returns
|
|
162
|
+
* an array of selected elements.
|
|
163
|
+
* Note that you should not use this to set the selection. Instead use
|
|
164
|
+
* `selected`.
|
|
165
|
+
*
|
|
166
|
+
* @attribute selectedItem
|
|
167
|
+
* @type Object
|
|
168
|
+
* @default null
|
|
169
|
+
*/
|
|
170
|
+
selectedItem: null,
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* In single selection, this returns the model associated with the
|
|
174
|
+
* selected element.
|
|
175
|
+
* Note that you should not use this to set the selection. Instead use
|
|
176
|
+
* `selected`.
|
|
177
|
+
*
|
|
178
|
+
* @attribute selectedModel
|
|
179
|
+
* @type Object
|
|
180
|
+
* @default null
|
|
181
|
+
*/
|
|
182
|
+
selectedModel: null,
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* In single selection, this returns the selected index.
|
|
186
|
+
* Note that you should not use this to set the selection. Instead use
|
|
187
|
+
* `selected`.
|
|
188
|
+
*
|
|
189
|
+
* @attribute selectedIndex
|
|
190
|
+
* @type number
|
|
191
|
+
* @default -1
|
|
192
|
+
*/
|
|
193
|
+
selectedIndex: -1,
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* Nodes with local name that are in the list will not be included
|
|
197
|
+
* in the selection items. In the following example, `items` returns four
|
|
198
|
+
* `core-item`'s and doesn't include `h3` and `hr`.
|
|
199
|
+
*
|
|
200
|
+
* <core-selector excludedLocalNames="h3 hr">
|
|
201
|
+
* <h3>Header</h3>
|
|
202
|
+
* <core-item>Item1</core-item>
|
|
203
|
+
* <core-item>Item2</core-item>
|
|
204
|
+
* <hr>
|
|
205
|
+
* <core-item>Item3</core-item>
|
|
206
|
+
* <core-item>Item4</core-item>
|
|
207
|
+
* </core-selector>
|
|
208
|
+
*
|
|
209
|
+
* @attribute excludedLocalNames
|
|
210
|
+
* @type string
|
|
211
|
+
* @default ''
|
|
212
|
+
*/
|
|
213
|
+
excludedLocalNames: '',
|
|
214
|
+
|
|
215
|
+
/**
|
|
216
|
+
* The target element that contains items. If this is not set
|
|
217
|
+
* core-selector is the container.
|
|
218
|
+
*
|
|
219
|
+
* @attribute target
|
|
220
|
+
* @type Object
|
|
221
|
+
* @default null
|
|
222
|
+
*/
|
|
223
|
+
target: null,
|
|
224
|
+
|
|
225
|
+
/**
|
|
226
|
+
* This can be used to query nodes from the target node to be used for
|
|
227
|
+
* selection items. Note this only works if `target` is set
|
|
228
|
+
* and is not `core-selector` itself.
|
|
229
|
+
*
|
|
230
|
+
* Example:
|
|
231
|
+
*
|
|
232
|
+
* <core-selector target="{{$.myForm}}" itemsSelector="input[type=radio]"></core-selector>
|
|
233
|
+
* <form id="myForm">
|
|
234
|
+
* <label><input type="radio" name="color" value="red"> Red</label> <br>
|
|
235
|
+
* <label><input type="radio" name="color" value="green"> Green</label> <br>
|
|
236
|
+
* <label><input type="radio" name="color" value="blue"> Blue</label> <br>
|
|
237
|
+
* <p>color = {{color}}</p>
|
|
238
|
+
* </form>
|
|
239
|
+
*
|
|
240
|
+
* @attribute itemsSelector
|
|
241
|
+
* @type string
|
|
242
|
+
* @default ''
|
|
243
|
+
*/
|
|
244
|
+
itemsSelector: '',
|
|
245
|
+
|
|
246
|
+
/**
|
|
247
|
+
* The event that would be fired from the item element to indicate
|
|
248
|
+
* it is being selected.
|
|
249
|
+
*
|
|
250
|
+
* @attribute activateEvent
|
|
251
|
+
* @type string
|
|
252
|
+
* @default 'tap'
|
|
253
|
+
*/
|
|
254
|
+
activateEvent: 'tap',
|
|
255
|
+
|
|
256
|
+
/**
|
|
257
|
+
* Set this to true to disallow changing the selection via the
|
|
258
|
+
* `activateEvent`.
|
|
259
|
+
*
|
|
260
|
+
* @attribute notap
|
|
261
|
+
* @type boolean
|
|
262
|
+
* @default false
|
|
263
|
+
*/
|
|
264
|
+
notap: false,
|
|
265
|
+
|
|
266
|
+
defaultExcludedLocalNames: 'template',
|
|
267
|
+
|
|
268
|
+
observe: {
|
|
269
|
+
'selected multi': 'selectedChanged'
|
|
270
|
+
},
|
|
271
|
+
|
|
272
|
+
ready: function() {
|
|
273
|
+
this.activateListener = this.activateHandler.bind(this);
|
|
274
|
+
this.itemFilter = this.filterItem.bind(this);
|
|
275
|
+
this.excludedLocalNamesChanged();
|
|
276
|
+
this.observer = new MutationObserver(this.updateSelected.bind(this));
|
|
277
|
+
if (!this.target) {
|
|
278
|
+
this.target = this;
|
|
279
|
+
}
|
|
280
|
+
},
|
|
281
|
+
|
|
282
|
+
/**
|
|
283
|
+
* Returns an array of all items.
|
|
284
|
+
*
|
|
285
|
+
* @property items
|
|
286
|
+
*/
|
|
287
|
+
get items() {
|
|
288
|
+
if (!this.target) {
|
|
289
|
+
return [];
|
|
290
|
+
}
|
|
291
|
+
var nodes = this.target !== this ? (this.itemsSelector ?
|
|
292
|
+
this.target.querySelectorAll(this.itemsSelector) :
|
|
293
|
+
this.target.children) : this.$.items.getDistributedNodes();
|
|
294
|
+
return Array.prototype.filter.call(nodes, this.itemFilter);
|
|
295
|
+
},
|
|
296
|
+
|
|
297
|
+
filterItem: function(node) {
|
|
298
|
+
return !this._excludedNames[node.localName];
|
|
299
|
+
},
|
|
300
|
+
|
|
301
|
+
excludedLocalNamesChanged: function() {
|
|
302
|
+
this._excludedNames = {};
|
|
303
|
+
var s = this.defaultExcludedLocalNames;
|
|
304
|
+
if (this.excludedLocalNames) {
|
|
305
|
+
s += ' ' + this.excludedLocalNames;
|
|
306
|
+
}
|
|
307
|
+
s.split(/\s+/g).forEach(function(n) {
|
|
308
|
+
this._excludedNames[n] = 1;
|
|
309
|
+
}, this);
|
|
310
|
+
},
|
|
311
|
+
|
|
312
|
+
targetChanged: function(old) {
|
|
313
|
+
if (old) {
|
|
314
|
+
this.removeListener(old);
|
|
315
|
+
this.observer.disconnect();
|
|
316
|
+
this.clearSelection();
|
|
317
|
+
}
|
|
318
|
+
if (this.target) {
|
|
319
|
+
this.addListener(this.target);
|
|
320
|
+
this.observer.observe(this.target, {childList: true});
|
|
321
|
+
this.updateSelected();
|
|
322
|
+
}
|
|
323
|
+
},
|
|
324
|
+
|
|
325
|
+
addListener: function(node) {
|
|
326
|
+
Polymer.addEventListener(node, this.activateEvent, this.activateListener);
|
|
327
|
+
},
|
|
328
|
+
|
|
329
|
+
removeListener: function(node) {
|
|
330
|
+
Polymer.removeEventListener(node, this.activateEvent, this.activateListener);
|
|
331
|
+
},
|
|
332
|
+
|
|
333
|
+
/**
|
|
334
|
+
* Returns the selected item(s). If the `multi` property is true,
|
|
335
|
+
* this will return an array, otherwise it will return
|
|
336
|
+
* the selected item or undefined if there is no selection.
|
|
337
|
+
*/
|
|
338
|
+
get selection() {
|
|
339
|
+
return this.$.selection.getSelection();
|
|
340
|
+
},
|
|
341
|
+
|
|
342
|
+
selectedChanged: function() {
|
|
343
|
+
// TODO(ffu): Right now this is the only way to know that the `selected`
|
|
344
|
+
// is an array and was mutated, as opposed to newly assigned.
|
|
345
|
+
if (arguments.length === 1) {
|
|
346
|
+
this.processSplices(arguments[0]);
|
|
347
|
+
} else {
|
|
348
|
+
this.updateSelected();
|
|
349
|
+
}
|
|
350
|
+
},
|
|
351
|
+
|
|
352
|
+
updateSelected: function() {
|
|
353
|
+
this.validateSelected();
|
|
354
|
+
if (this.multi) {
|
|
355
|
+
this.clearSelection(this.selected)
|
|
356
|
+
this.selected && this.selected.forEach(function(s) {
|
|
357
|
+
this.setValueSelected(s, true)
|
|
358
|
+
}, this);
|
|
359
|
+
} else {
|
|
360
|
+
this.valueToSelection(this.selected);
|
|
361
|
+
}
|
|
362
|
+
},
|
|
363
|
+
|
|
364
|
+
validateSelected: function() {
|
|
365
|
+
// convert to an array for multi-selection
|
|
366
|
+
if (this.multi && !Array.isArray(this.selected) &&
|
|
367
|
+
this.selected != null) {
|
|
368
|
+
this.selected = [this.selected];
|
|
369
|
+
// use the first selected in the array for single-selection
|
|
370
|
+
} else if (!this.multi && Array.isArray(this.selected)) {
|
|
371
|
+
var s = this.selected[0];
|
|
372
|
+
this.clearSelection([s]);
|
|
373
|
+
this.selected = s;
|
|
374
|
+
}
|
|
375
|
+
},
|
|
376
|
+
|
|
377
|
+
processSplices: function(splices) {
|
|
378
|
+
for (var i = 0, splice; splice = splices[i]; i++) {
|
|
379
|
+
for (var j = 0; j < splice.removed.length; j++) {
|
|
380
|
+
this.setValueSelected(splice.removed[j], false);
|
|
381
|
+
}
|
|
382
|
+
for (var j = 0; j < splice.addedCount; j++) {
|
|
383
|
+
this.setValueSelected(this.selected[splice.index + j], true);
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
},
|
|
387
|
+
|
|
388
|
+
clearSelection: function(excludes) {
|
|
389
|
+
this.$.selection.selection.slice().forEach(function(item) {
|
|
390
|
+
var v = this.valueForNode(item) || this.items.indexOf(item);
|
|
391
|
+
if (!excludes || excludes.indexOf(v) < 0) {
|
|
392
|
+
this.$.selection.setItemSelected(item, false);
|
|
393
|
+
}
|
|
394
|
+
}, this);
|
|
395
|
+
},
|
|
396
|
+
|
|
397
|
+
valueToSelection: function(value) {
|
|
398
|
+
var item = this.valueToItem(value);
|
|
399
|
+
this.$.selection.select(item);
|
|
400
|
+
},
|
|
401
|
+
|
|
402
|
+
setValueSelected: function(value, isSelected) {
|
|
403
|
+
var item = this.valueToItem(value);
|
|
404
|
+
if (isSelected ^ this.$.selection.isSelected(item)) {
|
|
405
|
+
this.$.selection.setItemSelected(item, isSelected);
|
|
406
|
+
}
|
|
407
|
+
},
|
|
408
|
+
|
|
409
|
+
updateSelectedItem: function() {
|
|
410
|
+
this.selectedItem = this.selection;
|
|
411
|
+
},
|
|
412
|
+
|
|
413
|
+
selectedItemChanged: function() {
|
|
414
|
+
if (this.selectedItem) {
|
|
415
|
+
var t = this.selectedItem.templateInstance;
|
|
416
|
+
this.selectedModel = t ? t.model : undefined;
|
|
417
|
+
} else {
|
|
418
|
+
this.selectedModel = null;
|
|
419
|
+
}
|
|
420
|
+
this.selectedIndex = this.selectedItem ?
|
|
421
|
+
parseInt(this.valueToIndex(this.selected)) : -1;
|
|
422
|
+
},
|
|
423
|
+
|
|
424
|
+
valueToItem: function(value) {
|
|
425
|
+
return (value === null || value === undefined) ?
|
|
426
|
+
null : this.items[this.valueToIndex(value)];
|
|
427
|
+
},
|
|
428
|
+
|
|
429
|
+
valueToIndex: function(value) {
|
|
430
|
+
// find an item with value == value and return it's index
|
|
431
|
+
for (var i=0, items=this.items, c; (c=items[i]); i++) {
|
|
432
|
+
if (this.valueForNode(c) == value) {
|
|
433
|
+
return i;
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
// if no item found, the value itself is probably the index
|
|
437
|
+
return value;
|
|
438
|
+
},
|
|
439
|
+
|
|
440
|
+
valueForNode: function(node) {
|
|
441
|
+
return node[this.valueattr] || node.getAttribute(this.valueattr);
|
|
442
|
+
},
|
|
443
|
+
|
|
444
|
+
// events fired from <core-selection> object
|
|
445
|
+
selectionSelect: function(e, detail) {
|
|
446
|
+
this.updateSelectedItem();
|
|
447
|
+
if (detail.item) {
|
|
448
|
+
this.applySelection(detail.item, detail.isSelected);
|
|
449
|
+
}
|
|
450
|
+
},
|
|
451
|
+
|
|
452
|
+
applySelection: function(item, isSelected) {
|
|
453
|
+
if (this.selectedClass) {
|
|
454
|
+
item.classList.toggle(this.selectedClass, isSelected);
|
|
455
|
+
}
|
|
456
|
+
if (this.selectedProperty) {
|
|
457
|
+
item[this.selectedProperty] = isSelected;
|
|
458
|
+
}
|
|
459
|
+
if (this.selectedAttribute && item.setAttribute) {
|
|
460
|
+
if (isSelected) {
|
|
461
|
+
item.setAttribute(this.selectedAttribute, '');
|
|
462
|
+
} else {
|
|
463
|
+
item.removeAttribute(this.selectedAttribute);
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
},
|
|
467
|
+
|
|
468
|
+
// event fired from host
|
|
469
|
+
activateHandler: function(e) {
|
|
470
|
+
if (!this.notap) {
|
|
471
|
+
var i = this.findDistributedTarget(e.target, this.items);
|
|
472
|
+
if (i >= 0) {
|
|
473
|
+
var item = this.items[i];
|
|
474
|
+
var s = this.valueForNode(item) || i;
|
|
475
|
+
if (this.multi) {
|
|
476
|
+
if (this.selected) {
|
|
477
|
+
this.addRemoveSelected(s);
|
|
478
|
+
} else {
|
|
479
|
+
this.selected = [s];
|
|
480
|
+
}
|
|
481
|
+
} else {
|
|
482
|
+
this.selected = s;
|
|
483
|
+
}
|
|
484
|
+
this.asyncFire('core-activate', {item: item});
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
},
|
|
488
|
+
|
|
489
|
+
addRemoveSelected: function(value) {
|
|
490
|
+
var i = this.selected.indexOf(value);
|
|
491
|
+
if (i >= 0) {
|
|
492
|
+
this.selected.splice(i, 1);
|
|
493
|
+
} else {
|
|
494
|
+
this.selected.push(value);
|
|
495
|
+
}
|
|
496
|
+
},
|
|
497
|
+
|
|
498
|
+
findDistributedTarget: function(target, nodes) {
|
|
499
|
+
// find first ancestor of target (including itself) that
|
|
500
|
+
// is in nodes, if any
|
|
501
|
+
while (target && target != this) {
|
|
502
|
+
var i = Array.prototype.indexOf.call(nodes, target);
|
|
503
|
+
if (i >= 0) {
|
|
504
|
+
return i;
|
|
505
|
+
}
|
|
506
|
+
target = target.parentNode;
|
|
507
|
+
}
|
|
508
|
+
},
|
|
509
|
+
|
|
510
|
+
selectIndex: function(index) {
|
|
511
|
+
var item = this.items[index];
|
|
512
|
+
if (item) {
|
|
513
|
+
this.selected = this.valueForNode(item) || index;
|
|
514
|
+
return item;
|
|
515
|
+
}
|
|
516
|
+
},
|
|
517
|
+
|
|
518
|
+
/**
|
|
519
|
+
* Selects the previous item. This should be used in single selection only.
|
|
520
|
+
*
|
|
521
|
+
* @method selectPrevious
|
|
522
|
+
* @param {boolean} wrapped if true and it is already at the first item,
|
|
523
|
+
* wrap to the end
|
|
524
|
+
* @returns the previous item or undefined if there is none
|
|
525
|
+
*/
|
|
526
|
+
selectPrevious: function(wrapped) {
|
|
527
|
+
var i = wrapped && !this.selectedIndex ?
|
|
528
|
+
this.items.length - 1 : this.selectedIndex - 1;
|
|
529
|
+
return this.selectIndex(i);
|
|
530
|
+
},
|
|
531
|
+
|
|
532
|
+
/**
|
|
533
|
+
* Selects the next item. This should be used in single selection only.
|
|
534
|
+
*
|
|
535
|
+
* @method selectNext
|
|
536
|
+
* @param {boolean} wrapped if true and it is already at the last item,
|
|
537
|
+
* wrap to the front
|
|
538
|
+
* @returns the next item or undefined if there is none
|
|
539
|
+
*/
|
|
540
|
+
selectNext: function(wrapped) {
|
|
541
|
+
var i = wrapped && this.selectedIndex >= this.items.length - 1 ?
|
|
542
|
+
0 : this.selectedIndex + 1;
|
|
543
|
+
return this.selectIndex(i);
|
|
544
|
+
}
|
|
545
|
+
|
|
546
|
+
});
|
|
547
|
+
</script>
|
|
548
|
+
</polymer-element>
|
|
@@ -0,0 +1,106 @@
|
|
|
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
|
+
<title>Selector</title>
|
|
13
|
+
<script src="../webcomponentsjs/webcomponents.js"></script>
|
|
14
|
+
<link rel="import" href="core-selector.html">
|
|
15
|
+
</head>
|
|
16
|
+
<body unresolved>
|
|
17
|
+
<polymer-element name="selector-examples">
|
|
18
|
+
<template>
|
|
19
|
+
<style>
|
|
20
|
+
.list {
|
|
21
|
+
display: block;
|
|
22
|
+
border: 1px solid #ccc;
|
|
23
|
+
border-bottom: none;
|
|
24
|
+
background: #666;
|
|
25
|
+
color: white;
|
|
26
|
+
list-style: none;
|
|
27
|
+
margin: 0;
|
|
28
|
+
padding: 0;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
.list > * {
|
|
32
|
+
height: 40px;
|
|
33
|
+
line-height: 40px;
|
|
34
|
+
padding: 0 20px;
|
|
35
|
+
border-bottom: 1px solid #ccc;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.list > *.core-selected {
|
|
39
|
+
background: #333;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
li {
|
|
43
|
+
height: 30px;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
li.core-selected:after {
|
|
47
|
+
content: "\2713";
|
|
48
|
+
position: absolute;
|
|
49
|
+
padding-left: 10px;
|
|
50
|
+
}
|
|
51
|
+
</style>
|
|
52
|
+
|
|
53
|
+
<h2>basic</h2>
|
|
54
|
+
<core-selector class="list" selected="0">
|
|
55
|
+
<div>Item 0</div>
|
|
56
|
+
<div>Item 1</div>
|
|
57
|
+
<div>Item 2</div>
|
|
58
|
+
<div>Item 3</div>
|
|
59
|
+
<div>Item 4</div>
|
|
60
|
+
</core-selector>
|
|
61
|
+
|
|
62
|
+
<h2>multi-selection</h2>
|
|
63
|
+
<core-selector class="list" selected="{{multiSelected}}" multi>
|
|
64
|
+
<div>Item 0</div>
|
|
65
|
+
<div>Item 1</div>
|
|
66
|
+
<div>Item 2</div>
|
|
67
|
+
<div>Item 3</div>
|
|
68
|
+
<div>Item 4</div>
|
|
69
|
+
</core-selector>
|
|
70
|
+
|
|
71
|
+
<h2>list</h2>
|
|
72
|
+
<core-selector target="{{$.list}}" selected="0"></core-selector>
|
|
73
|
+
<ul id="list">
|
|
74
|
+
<li>Item 0</li>
|
|
75
|
+
<li>Item 1</li>
|
|
76
|
+
<li>Item 2</li>
|
|
77
|
+
<li>Item 3</li>
|
|
78
|
+
<li>Item 4</li>
|
|
79
|
+
</ul>
|
|
80
|
+
|
|
81
|
+
<h2>binding of a group of radio buttons to a variable</h2>
|
|
82
|
+
<core-selector target="{{$.myForm}}" itemsSelector="input[type=radio]"
|
|
83
|
+
selected="{{color}}" valueattr="value" selectedProperty="checked"
|
|
84
|
+
activateEvent="change"></core-selector>
|
|
85
|
+
<form id="myForm">
|
|
86
|
+
<label><input type="radio" name="color" value="red"> Red</label> <br>
|
|
87
|
+
<label><input type="radio" name="color" value="green"> Green</label> <br>
|
|
88
|
+
<label><input type="radio" name="color" value="blue"> Blue</label> <br>
|
|
89
|
+
<p>color = {{color}}</p>
|
|
90
|
+
</form>
|
|
91
|
+
|
|
92
|
+
</template>
|
|
93
|
+
|
|
94
|
+
<script>
|
|
95
|
+
Polymer('selector-examples', {
|
|
96
|
+
ready: function() {
|
|
97
|
+
this.multiSelected = [1, 3];
|
|
98
|
+
this.color = 'green';
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
</script>
|
|
102
|
+
</polymer-element>
|
|
103
|
+
|
|
104
|
+
<selector-examples></selector-examples>
|
|
105
|
+
</body>
|
|
106
|
+
</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,20 @@
|
|
|
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-selector" label="Selector" group="Core" isContainer>
|
|
11
|
+
|
|
12
|
+
<template>
|
|
13
|
+
<core-selector selected="0" style="width:100%;height:50px;"></core-selector>
|
|
14
|
+
</template>
|
|
15
|
+
|
|
16
|
+
<template>
|
|
17
|
+
<link rel="import" href="core-selector.html">
|
|
18
|
+
</template>
|
|
19
|
+
|
|
20
|
+
</x-meta>
|