todo_rails 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/todo_rails/version.rb +1 -1
- data/vendor/assets/bower.json +8 -0
- data/vendor/assets/bower_components/angular-animate/README.md +68 -0
- data/vendor/assets/bower_components/angular-animate/angular-animate.js +3721 -0
- data/vendor/assets/bower_components/angular-animate/angular-animate.min.js +52 -0
- data/vendor/assets/bower_components/angular-animate/angular-animate.min.js.map +8 -0
- data/vendor/assets/bower_components/angular-animate/bower.json +9 -0
- data/vendor/assets/bower_components/angular-animate/index.js +2 -0
- data/vendor/assets/bower_components/angular-animate/package.json +26 -0
- data/vendor/assets/bower_components/angular-aria/README.md +67 -0
- data/vendor/assets/bower_components/angular-aria/angular-aria.js +393 -0
- data/vendor/assets/bower_components/angular-aria/angular-aria.min.js +13 -0
- data/vendor/assets/bower_components/angular-aria/angular-aria.min.js.map +8 -0
- data/vendor/assets/bower_components/angular-aria/bower.json +9 -0
- data/vendor/assets/bower_components/angular-aria/index.js +2 -0
- data/vendor/assets/bower_components/angular-aria/package.json +27 -0
- data/vendor/assets/bower_components/angular-material/CHANGELOG.md +1599 -0
- data/vendor/assets/bower_components/angular-material/LICENSE +21 -0
- data/vendor/assets/bower_components/angular-material/README.md +211 -0
- data/vendor/assets/bower_components/angular-material/angular-material-mocks.js +77 -0
- data/vendor/assets/bower_components/angular-material/angular-material.css +7183 -0
- data/vendor/assets/bower_components/angular-material/angular-material.js +15406 -0
- data/vendor/assets/bower_components/angular-material/angular-material.min.css +6 -0
- data/vendor/assets/bower_components/angular-material/angular-material.min.js +14 -0
- data/vendor/assets/bower_components/angular-material/bower.json +14 -0
- data/vendor/assets/bower_components/angular-material/demos/bottomSheet/demoBasicUsage/img/icons/copy.svg +1 -0
- data/vendor/assets/bower_components/angular-material/demos/bottomSheet/demoBasicUsage/img/icons/copy2.svg +1 -0
- data/vendor/assets/bower_components/angular-material/demos/bottomSheet/demoBasicUsage/img/icons/facebook.svg +1 -0
- data/vendor/assets/bower_components/angular-material/demos/bottomSheet/demoBasicUsage/img/icons/hangout.svg +1 -0
- data/vendor/assets/bower_components/angular-material/demos/bottomSheet/demoBasicUsage/img/icons/mail.svg +1 -0
- data/vendor/assets/bower_components/angular-material/demos/bottomSheet/demoBasicUsage/img/icons/message.svg +1 -0
- data/vendor/assets/bower_components/angular-material/demos/bottomSheet/demoBasicUsage/img/icons/print.svg +1 -0
- data/vendor/assets/bower_components/angular-material/demos/bottomSheet/demoBasicUsage/img/icons/share-arrow.svg +1 -0
- data/vendor/assets/bower_components/angular-material/demos/bottomSheet/demoBasicUsage/img/icons/twitter.svg +2 -0
- data/vendor/assets/bower_components/angular-material/demos/bottomSheet/demoBasicUsage/img/icons/upload.svg +1 -0
- data/vendor/assets/bower_components/angular-material/demos/chips/demoBasicUsage/style.scss +39 -0
- data/vendor/assets/bower_components/angular-material/demos/chips/demoContactChips/style.scss +47 -0
- data/vendor/assets/bower_components/angular-material/demos/gridList/demoBasicUsage/style.scss +75 -0
- data/vendor/assets/bower_components/angular-material/demos/gridList/demoDynamicTiles/style.scss +78 -0
- data/vendor/assets/bower_components/angular-material/demos/gridList/demoResponsiveUsage/style.scss +0 -0
- data/vendor/assets/bower_components/angular-material/demos/icon/demoLoadSvgIconsFromUrl/img/icons/addShoppingCart.svg +1 -0
- data/vendor/assets/bower_components/angular-material/demos/icon/demoLoadSvgIconsFromUrl/img/icons/android.svg +1 -0
- data/vendor/assets/bower_components/angular-material/demos/icon/demoLoadSvgIconsFromUrl/img/icons/cake.svg +1 -0
- data/vendor/assets/bower_components/angular-material/demos/icon/demoSvgIconSets/assets/cake.svg +1 -0
- data/vendor/assets/bower_components/angular-material/demos/icon/demoSvgIconSets/assets/core-icons.svg +26 -0
- data/vendor/assets/bower_components/angular-material/demos/icon/demoSvgIconSets/assets/social-icons.svg +26 -0
- data/vendor/assets/bower_components/angular-material/demos/icon/demoSvgIconsFromURL/img/icons/addShoppingCart.svg +1 -0
- data/vendor/assets/bower_components/angular-material/demos/icon/demoSvgIconsFromURL/img/icons/android.svg +1 -0
- data/vendor/assets/bower_components/angular-material/demos/icon/demoSvgIconsFromURL/img/icons/cake.svg +1 -0
- data/vendor/assets/bower_components/angular-material/demos/icon/demoUsingTemplateCache/assets/android.svg +1 -0
- data/vendor/assets/bower_components/angular-material/demos/icon/demoUsingTemplateCache/assets/cake.svg +1 -0
- data/vendor/assets/bower_components/angular-material/demos/icon/demoUsingTemplateCache/assets/core-icons.svg +26 -0
- data/vendor/assets/bower_components/angular-material/demos/input/demoIcons/icons/ic_email_24px.svg +4 -0
- data/vendor/assets/bower_components/angular-material/demos/input/demoIcons/icons/ic_person_24px.svg +4 -0
- data/vendor/assets/bower_components/angular-material/demos/input/demoIcons/icons/ic_phone_24px.svg +4 -0
- data/vendor/assets/bower_components/angular-material/demos/input/demoIcons/icons/ic_place_24px.svg +4 -0
- data/vendor/assets/bower_components/angular-material/demos/input/demoIcons/style.scss +18 -0
- data/vendor/assets/bower_components/angular-material/demos/list/demoListControls/img/100-0.jpeg +0 -0
- data/vendor/assets/bower_components/angular-material/demos/list/demoListControls/img/100-1.jpeg +0 -0
- data/vendor/assets/bower_components/angular-material/demos/list/demoListControls/img/100-2.jpeg +0 -0
- data/vendor/assets/bower_components/angular-material/demos/tabs/demoDynamicHeight/style.scss +13 -0
- data/vendor/assets/bower_components/angular-material/demos/tabs/demoDynamicTabs/style.scss +44 -0
- data/vendor/assets/bower_components/angular-material/demos/tabs/demoStaticTabs/style.scss +25 -0
- data/vendor/assets/bower_components/angular-material/demos/toolbar/demoBasicUsage/img/icons/favorite.svg +4 -0
- data/vendor/assets/bower_components/angular-material/demos/toolbar/demoBasicUsage/img/icons/menu.svg +4 -0
- data/vendor/assets/bower_components/angular-material/demos/toolbar/demoBasicUsage/img/icons/more_vert.svg +4 -0
- data/vendor/assets/bower_components/angular-material/index.js +12 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/autocomplete/autocomplete-default-theme.css +24 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/autocomplete/autocomplete.css +220 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/autocomplete/autocomplete.js +951 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/backdrop/backdrop-default-theme.css +9 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/backdrop/backdrop.css +59 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/backdrop/backdrop.js +38 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/bottomSheet/bottomSheet-default-theme.css +16 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/bottomSheet/bottomSheet.css +170 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/bottomSheet/bottomSheet.js +267 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/button/button-default-theme.css +94 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/button/button.css +158 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/button/button.js +135 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/card/card-default-theme.css +12 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/card/card.css +34 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/card/card.js +84 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/checkbox/checkbox-default-theme.css +47 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/checkbox/checkbox.css +124 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/checkbox/checkbox.js +166 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/chips/chips-default-theme.css +24 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/chips/chips.css +131 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/chips/chips.js +949 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/content/content-default-theme.css +9 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/content/content.css +20 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/content/content.js +84 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/core/core.css +2594 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/core/core.js +3772 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/core/default-theme.js +4 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/dialog/dialog-default-theme.css +12 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/dialog/dialog.css +111 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/dialog/dialog.js +713 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/divider/divider-default-theme.css +9 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/divider/divider.css +14 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/divider/divider.js +45 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/fabActions/fabActions.js +57 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/fabSpeedDial/fabSpeedDial.css +100 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/fabSpeedDial/fabSpeedDial.js +236 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/fabToolbar/fabToolbar.css +74 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/fabToolbar/fabToolbar.js +218 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/fabTrigger/fabTrigger.js +54 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/gridList/gridList-default-theme.css +6 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/gridList/gridList.css +68 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/gridList/gridList.js +762 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/icon/icon-default-theme.css +15 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/icon/icon.css +20 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/icon/icon.js +783 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/input/input-default-theme.css +46 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/input/input.css +162 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/input/input.js +371 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/list/list-default-theme.css +23 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/list/list.css +147 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/list/list.js +273 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/menu/menu-default-theme.css +11 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/menu/menu.css +121 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/menu/menu.js +620 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/progressCircular/progressCircular-default-theme.css +36 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/progressCircular/progressCircular.css +1409 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/progressCircular/progressCircular.js +109 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/progressLinear/progressLinear-default-theme.css +27 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/progressLinear/progressLinear.css +287 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/progressLinear/progressLinear.js +126 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/radioButton/radioButton-default-theme.css +47 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/radioButton/radioButton.css +91 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/radioButton/radioButton.js +312 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/select/select-default-theme.css +42 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/select/select.css +170 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/select/select.js +1055 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/sidenav/sidenav-default-theme.css +9 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/sidenav/sidenav.css +99 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/sidenav/sidenav.js +424 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/slider/slider-default-theme.css +56 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/slider/slider.css +220 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/slider/slider.js +403 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/sticky/sticky.css +21 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/sticky/sticky.js +315 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/subheader/subheader-default-theme.css +16 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/subheader/subheader.css +63 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/subheader/subheader.js +93 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/swipe/swipe.js +72 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/switch/switch-default-theme.css +33 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/switch/switch.css +110 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/switch/switch.js +169 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/tabs/tabs-arrow.svg +7 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/tabs/tabs-default-theme.css +82 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/tabs/tabs.css +274 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/tabs/tabs.js +1060 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/textField/textField-default-theme.css +30 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/textField/textField.css +111 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/textField/textField.js +145 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/toast/toast-default-theme.css +18 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/toast/toast.css +119 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/toast/toast.js +265 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/toolbar/toolbar-default-theme.css +20 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/toolbar/toolbar.css +83 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/toolbar/toolbar.js +169 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/tooltip/tooltip-default-theme.css +11 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/tooltip/tooltip.css +72 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/tooltip/tooltip.js +267 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/whiteframe/whiteframe.css +25 -0
- data/vendor/assets/bower_components/angular-material/modules/closure/whiteframe/whiteframe.js +15 -0
- data/vendor/assets/bower_components/angular-material/modules/css/angular-material-layout.css +2375 -0
- data/vendor/assets/bower_components/angular-material/modules/js/autocomplete/autocomplete-default-theme.css +24 -0
- data/vendor/assets/bower_components/angular-material/modules/js/autocomplete/autocomplete-default-theme.min.css +6 -0
- data/vendor/assets/bower_components/angular-material/modules/js/autocomplete/autocomplete.css +220 -0
- data/vendor/assets/bower_components/angular-material/modules/js/autocomplete/autocomplete.js +951 -0
- data/vendor/assets/bower_components/angular-material/modules/js/autocomplete/autocomplete.min.css +6 -0
- data/vendor/assets/bower_components/angular-material/modules/js/autocomplete/autocomplete.min.js +7 -0
- data/vendor/assets/bower_components/angular-material/modules/js/autocomplete/bower.json +8 -0
- data/vendor/assets/bower_components/angular-material/modules/js/backdrop/backdrop-default-theme.css +9 -0
- data/vendor/assets/bower_components/angular-material/modules/js/backdrop/backdrop-default-theme.min.css +6 -0
- data/vendor/assets/bower_components/angular-material/modules/js/backdrop/backdrop.css +59 -0
- data/vendor/assets/bower_components/angular-material/modules/js/backdrop/backdrop.js +39 -0
- data/vendor/assets/bower_components/angular-material/modules/js/backdrop/backdrop.min.css +6 -0
- data/vendor/assets/bower_components/angular-material/modules/js/backdrop/backdrop.min.js +7 -0
- data/vendor/assets/bower_components/angular-material/modules/js/backdrop/bower.json +7 -0
- data/vendor/assets/bower_components/angular-material/modules/js/bottomSheet/bottomSheet-default-theme.css +16 -0
- data/vendor/assets/bower_components/angular-material/modules/js/bottomSheet/bottomSheet-default-theme.min.css +6 -0
- data/vendor/assets/bower_components/angular-material/modules/js/bottomSheet/bottomSheet.css +170 -0
- data/vendor/assets/bower_components/angular-material/modules/js/bottomSheet/bottomSheet.js +267 -0
- data/vendor/assets/bower_components/angular-material/modules/js/bottomSheet/bottomSheet.min.css +6 -0
- data/vendor/assets/bower_components/angular-material/modules/js/bottomSheet/bottomSheet.min.js +7 -0
- data/vendor/assets/bower_components/angular-material/modules/js/bottomSheet/bower.json +8 -0
- data/vendor/assets/bower_components/angular-material/modules/js/button/bower.json +7 -0
- data/vendor/assets/bower_components/angular-material/modules/js/button/button-default-theme.css +94 -0
- data/vendor/assets/bower_components/angular-material/modules/js/button/button-default-theme.min.css +6 -0
- data/vendor/assets/bower_components/angular-material/modules/js/button/button.css +158 -0
- data/vendor/assets/bower_components/angular-material/modules/js/button/button.js +136 -0
- data/vendor/assets/bower_components/angular-material/modules/js/button/button.min.css +6 -0
- data/vendor/assets/bower_components/angular-material/modules/js/button/button.min.js +7 -0
- data/vendor/assets/bower_components/angular-material/modules/js/card/bower.json +7 -0
- data/vendor/assets/bower_components/angular-material/modules/js/card/card-default-theme.css +12 -0
- data/vendor/assets/bower_components/angular-material/modules/js/card/card-default-theme.min.css +6 -0
- data/vendor/assets/bower_components/angular-material/modules/js/card/card.css +34 -0
- data/vendor/assets/bower_components/angular-material/modules/js/card/card.js +85 -0
- data/vendor/assets/bower_components/angular-material/modules/js/card/card.min.css +6 -0
- data/vendor/assets/bower_components/angular-material/modules/js/card/card.min.js +7 -0
- data/vendor/assets/bower_components/angular-material/modules/js/checkbox/bower.json +7 -0
- data/vendor/assets/bower_components/angular-material/modules/js/checkbox/checkbox-default-theme.css +47 -0
- data/vendor/assets/bower_components/angular-material/modules/js/checkbox/checkbox-default-theme.min.css +6 -0
- data/vendor/assets/bower_components/angular-material/modules/js/checkbox/checkbox.css +124 -0
- data/vendor/assets/bower_components/angular-material/modules/js/checkbox/checkbox.js +167 -0
- data/vendor/assets/bower_components/angular-material/modules/js/checkbox/checkbox.min.css +6 -0
- data/vendor/assets/bower_components/angular-material/modules/js/checkbox/checkbox.min.js +7 -0
- data/vendor/assets/bower_components/angular-material/modules/js/chips/bower.json +8 -0
- data/vendor/assets/bower_components/angular-material/modules/js/chips/chips-default-theme.css +24 -0
- data/vendor/assets/bower_components/angular-material/modules/js/chips/chips-default-theme.min.css +6 -0
- data/vendor/assets/bower_components/angular-material/modules/js/chips/chips.css +131 -0
- data/vendor/assets/bower_components/angular-material/modules/js/chips/chips.js +949 -0
- data/vendor/assets/bower_components/angular-material/modules/js/chips/chips.min.css +6 -0
- data/vendor/assets/bower_components/angular-material/modules/js/chips/chips.min.js +7 -0
- data/vendor/assets/bower_components/angular-material/modules/js/content/bower.json +7 -0
- data/vendor/assets/bower_components/angular-material/modules/js/content/content-default-theme.css +9 -0
- data/vendor/assets/bower_components/angular-material/modules/js/content/content-default-theme.min.css +6 -0
- data/vendor/assets/bower_components/angular-material/modules/js/content/content.css +20 -0
- data/vendor/assets/bower_components/angular-material/modules/js/content/content.js +85 -0
- data/vendor/assets/bower_components/angular-material/modules/js/content/content.min.css +6 -0
- data/vendor/assets/bower_components/angular-material/modules/js/content/content.min.js +7 -0
- data/vendor/assets/bower_components/angular-material/modules/js/core/bower.json +8 -0
- data/vendor/assets/bower_components/angular-material/modules/js/core/core.css +2594 -0
- data/vendor/assets/bower_components/angular-material/modules/js/core/core.js +3772 -0
- data/vendor/assets/bower_components/angular-material/modules/js/core/core.min.css +6 -0
- data/vendor/assets/bower_components/angular-material/modules/js/core/core.min.js +10 -0
- data/vendor/assets/bower_components/angular-material/modules/js/core/default-theme.js +4 -0
- data/vendor/assets/bower_components/angular-material/modules/js/dialog/bower.json +8 -0
- data/vendor/assets/bower_components/angular-material/modules/js/dialog/dialog-default-theme.css +12 -0
- data/vendor/assets/bower_components/angular-material/modules/js/dialog/dialog-default-theme.min.css +6 -0
- data/vendor/assets/bower_components/angular-material/modules/js/dialog/dialog.css +111 -0
- data/vendor/assets/bower_components/angular-material/modules/js/dialog/dialog.js +713 -0
- data/vendor/assets/bower_components/angular-material/modules/js/dialog/dialog.min.css +6 -0
- data/vendor/assets/bower_components/angular-material/modules/js/dialog/dialog.min.js +7 -0
- data/vendor/assets/bower_components/angular-material/modules/js/divider/bower.json +7 -0
- data/vendor/assets/bower_components/angular-material/modules/js/divider/divider-default-theme.css +9 -0
- data/vendor/assets/bower_components/angular-material/modules/js/divider/divider-default-theme.min.css +6 -0
- data/vendor/assets/bower_components/angular-material/modules/js/divider/divider.css +14 -0
- data/vendor/assets/bower_components/angular-material/modules/js/divider/divider.js +46 -0
- data/vendor/assets/bower_components/angular-material/modules/js/divider/divider.min.css +6 -0
- data/vendor/assets/bower_components/angular-material/modules/js/divider/divider.min.js +7 -0
- data/vendor/assets/bower_components/angular-material/modules/js/fabActions/bower.json +7 -0
- data/vendor/assets/bower_components/angular-material/modules/js/fabActions/fabActions.js +58 -0
- data/vendor/assets/bower_components/angular-material/modules/js/fabActions/fabActions.min.js +7 -0
- data/vendor/assets/bower_components/angular-material/modules/js/fabSpeedDial/bower.json +9 -0
- data/vendor/assets/bower_components/angular-material/modules/js/fabSpeedDial/fabSpeedDial.css +100 -0
- data/vendor/assets/bower_components/angular-material/modules/js/fabSpeedDial/fabSpeedDial.js +235 -0
- data/vendor/assets/bower_components/angular-material/modules/js/fabSpeedDial/fabSpeedDial.min.css +6 -0
- data/vendor/assets/bower_components/angular-material/modules/js/fabSpeedDial/fabSpeedDial.min.js +7 -0
- data/vendor/assets/bower_components/angular-material/modules/js/fabToolbar/bower.json +9 -0
- data/vendor/assets/bower_components/angular-material/modules/js/fabToolbar/fabToolbar.css +74 -0
- data/vendor/assets/bower_components/angular-material/modules/js/fabToolbar/fabToolbar.js +217 -0
- data/vendor/assets/bower_components/angular-material/modules/js/fabToolbar/fabToolbar.min.css +6 -0
- data/vendor/assets/bower_components/angular-material/modules/js/fabToolbar/fabToolbar.min.js +7 -0
- data/vendor/assets/bower_components/angular-material/modules/js/fabTrigger/bower.json +7 -0
- data/vendor/assets/bower_components/angular-material/modules/js/fabTrigger/fabTrigger.js +55 -0
- data/vendor/assets/bower_components/angular-material/modules/js/fabTrigger/fabTrigger.min.js +7 -0
- data/vendor/assets/bower_components/angular-material/modules/js/gridList/bower.json +7 -0
- data/vendor/assets/bower_components/angular-material/modules/js/gridList/gridList.css +68 -0
- data/vendor/assets/bower_components/angular-material/modules/js/gridList/gridList.js +763 -0
- data/vendor/assets/bower_components/angular-material/modules/js/gridList/gridList.min.css +6 -0
- data/vendor/assets/bower_components/angular-material/modules/js/gridList/gridList.min.js +7 -0
- data/vendor/assets/bower_components/angular-material/modules/js/icon/bower.json +7 -0
- data/vendor/assets/bower_components/angular-material/modules/js/icon/icon-default-theme.css +15 -0
- data/vendor/assets/bower_components/angular-material/modules/js/icon/icon-default-theme.min.css +6 -0
- data/vendor/assets/bower_components/angular-material/modules/js/icon/icon.css +20 -0
- data/vendor/assets/bower_components/angular-material/modules/js/icon/icon.js +784 -0
- data/vendor/assets/bower_components/angular-material/modules/js/icon/icon.min.css +6 -0
- data/vendor/assets/bower_components/angular-material/modules/js/icon/icon.min.js +7 -0
- data/vendor/assets/bower_components/angular-material/modules/js/input/bower.json +7 -0
- data/vendor/assets/bower_components/angular-material/modules/js/input/input-default-theme.css +46 -0
- data/vendor/assets/bower_components/angular-material/modules/js/input/input-default-theme.min.css +6 -0
- data/vendor/assets/bower_components/angular-material/modules/js/input/input.css +162 -0
- data/vendor/assets/bower_components/angular-material/modules/js/input/input.js +372 -0
- data/vendor/assets/bower_components/angular-material/modules/js/input/input.min.css +6 -0
- data/vendor/assets/bower_components/angular-material/modules/js/input/input.min.js +7 -0
- data/vendor/assets/bower_components/angular-material/modules/js/list/bower.json +7 -0
- data/vendor/assets/bower_components/angular-material/modules/js/list/list-default-theme.css +23 -0
- data/vendor/assets/bower_components/angular-material/modules/js/list/list-default-theme.min.css +6 -0
- data/vendor/assets/bower_components/angular-material/modules/js/list/list.css +147 -0
- data/vendor/assets/bower_components/angular-material/modules/js/list/list.js +274 -0
- data/vendor/assets/bower_components/angular-material/modules/js/list/list.min.css +6 -0
- data/vendor/assets/bower_components/angular-material/modules/js/list/list.min.js +7 -0
- data/vendor/assets/bower_components/angular-material/modules/js/menu/bower.json +8 -0
- data/vendor/assets/bower_components/angular-material/modules/js/menu/menu-default-theme.css +11 -0
- data/vendor/assets/bower_components/angular-material/modules/js/menu/menu-default-theme.min.css +6 -0
- data/vendor/assets/bower_components/angular-material/modules/js/menu/menu.css +121 -0
- data/vendor/assets/bower_components/angular-material/modules/js/menu/menu.js +620 -0
- data/vendor/assets/bower_components/angular-material/modules/js/menu/menu.min.css +6 -0
- data/vendor/assets/bower_components/angular-material/modules/js/menu/menu.min.js +7 -0
- data/vendor/assets/bower_components/angular-material/modules/js/progressCircular/bower.json +7 -0
- data/vendor/assets/bower_components/angular-material/modules/js/progressCircular/progressCircular-default-theme.css +36 -0
- data/vendor/assets/bower_components/angular-material/modules/js/progressCircular/progressCircular-default-theme.min.css +6 -0
- data/vendor/assets/bower_components/angular-material/modules/js/progressCircular/progressCircular.css +1409 -0
- data/vendor/assets/bower_components/angular-material/modules/js/progressCircular/progressCircular.js +110 -0
- data/vendor/assets/bower_components/angular-material/modules/js/progressCircular/progressCircular.min.css +6 -0
- data/vendor/assets/bower_components/angular-material/modules/js/progressCircular/progressCircular.min.js +7 -0
- data/vendor/assets/bower_components/angular-material/modules/js/progressLinear/bower.json +7 -0
- data/vendor/assets/bower_components/angular-material/modules/js/progressLinear/progressLinear-default-theme.css +27 -0
- data/vendor/assets/bower_components/angular-material/modules/js/progressLinear/progressLinear-default-theme.min.css +6 -0
- data/vendor/assets/bower_components/angular-material/modules/js/progressLinear/progressLinear.css +287 -0
- data/vendor/assets/bower_components/angular-material/modules/js/progressLinear/progressLinear.js +127 -0
- data/vendor/assets/bower_components/angular-material/modules/js/progressLinear/progressLinear.min.css +6 -0
- data/vendor/assets/bower_components/angular-material/modules/js/progressLinear/progressLinear.min.js +7 -0
- data/vendor/assets/bower_components/angular-material/modules/js/radioButton/bower.json +7 -0
- data/vendor/assets/bower_components/angular-material/modules/js/radioButton/radioButton-default-theme.css +47 -0
- data/vendor/assets/bower_components/angular-material/modules/js/radioButton/radioButton-default-theme.min.css +6 -0
- data/vendor/assets/bower_components/angular-material/modules/js/radioButton/radioButton.css +91 -0
- data/vendor/assets/bower_components/angular-material/modules/js/radioButton/radioButton.js +313 -0
- data/vendor/assets/bower_components/angular-material/modules/js/radioButton/radioButton.min.css +6 -0
- data/vendor/assets/bower_components/angular-material/modules/js/radioButton/radioButton.min.js +7 -0
- data/vendor/assets/bower_components/angular-material/modules/js/select/bower.json +8 -0
- data/vendor/assets/bower_components/angular-material/modules/js/select/select-default-theme.css +42 -0
- data/vendor/assets/bower_components/angular-material/modules/js/select/select-default-theme.min.css +6 -0
- data/vendor/assets/bower_components/angular-material/modules/js/select/select.css +170 -0
- data/vendor/assets/bower_components/angular-material/modules/js/select/select.js +1055 -0
- data/vendor/assets/bower_components/angular-material/modules/js/select/select.min.css +6 -0
- data/vendor/assets/bower_components/angular-material/modules/js/select/select.min.js +7 -0
- data/vendor/assets/bower_components/angular-material/modules/js/sidenav/bower.json +8 -0
- data/vendor/assets/bower_components/angular-material/modules/js/sidenav/sidenav-default-theme.css +9 -0
- data/vendor/assets/bower_components/angular-material/modules/js/sidenav/sidenav-default-theme.min.css +6 -0
- data/vendor/assets/bower_components/angular-material/modules/js/sidenav/sidenav.css +99 -0
- data/vendor/assets/bower_components/angular-material/modules/js/sidenav/sidenav.js +424 -0
- data/vendor/assets/bower_components/angular-material/modules/js/sidenav/sidenav.min.css +6 -0
- data/vendor/assets/bower_components/angular-material/modules/js/sidenav/sidenav.min.js +7 -0
- data/vendor/assets/bower_components/angular-material/modules/js/slider/bower.json +7 -0
- data/vendor/assets/bower_components/angular-material/modules/js/slider/slider-default-theme.css +56 -0
- data/vendor/assets/bower_components/angular-material/modules/js/slider/slider-default-theme.min.css +6 -0
- data/vendor/assets/bower_components/angular-material/modules/js/slider/slider.css +220 -0
- data/vendor/assets/bower_components/angular-material/modules/js/slider/slider.js +404 -0
- data/vendor/assets/bower_components/angular-material/modules/js/slider/slider.min.css +6 -0
- data/vendor/assets/bower_components/angular-material/modules/js/slider/slider.min.js +7 -0
- data/vendor/assets/bower_components/angular-material/modules/js/sticky/bower.json +8 -0
- data/vendor/assets/bower_components/angular-material/modules/js/sticky/sticky.css +21 -0
- data/vendor/assets/bower_components/angular-material/modules/js/sticky/sticky.js +315 -0
- data/vendor/assets/bower_components/angular-material/modules/js/sticky/sticky.min.css +6 -0
- data/vendor/assets/bower_components/angular-material/modules/js/sticky/sticky.min.js +7 -0
- data/vendor/assets/bower_components/angular-material/modules/js/subheader/bower.json +8 -0
- data/vendor/assets/bower_components/angular-material/modules/js/subheader/subheader-default-theme.css +16 -0
- data/vendor/assets/bower_components/angular-material/modules/js/subheader/subheader-default-theme.min.css +6 -0
- data/vendor/assets/bower_components/angular-material/modules/js/subheader/subheader.css +63 -0
- data/vendor/assets/bower_components/angular-material/modules/js/subheader/subheader.js +93 -0
- data/vendor/assets/bower_components/angular-material/modules/js/subheader/subheader.min.css +6 -0
- data/vendor/assets/bower_components/angular-material/modules/js/subheader/subheader.min.js +7 -0
- data/vendor/assets/bower_components/angular-material/modules/js/swipe/bower.json +7 -0
- data/vendor/assets/bower_components/angular-material/modules/js/swipe/swipe.js +73 -0
- data/vendor/assets/bower_components/angular-material/modules/js/swipe/swipe.min.js +7 -0
- data/vendor/assets/bower_components/angular-material/modules/js/switch/bower.json +8 -0
- data/vendor/assets/bower_components/angular-material/modules/js/switch/switch-default-theme.css +33 -0
- data/vendor/assets/bower_components/angular-material/modules/js/switch/switch-default-theme.min.css +6 -0
- data/vendor/assets/bower_components/angular-material/modules/js/switch/switch.css +110 -0
- data/vendor/assets/bower_components/angular-material/modules/js/switch/switch.js +169 -0
- data/vendor/assets/bower_components/angular-material/modules/js/switch/switch.min.css +6 -0
- data/vendor/assets/bower_components/angular-material/modules/js/switch/switch.min.js +7 -0
- data/vendor/assets/bower_components/angular-material/modules/js/tabs/bower.json +8 -0
- data/vendor/assets/bower_components/angular-material/modules/js/tabs/tabs-default-theme.css +82 -0
- data/vendor/assets/bower_components/angular-material/modules/js/tabs/tabs-default-theme.min.css +6 -0
- data/vendor/assets/bower_components/angular-material/modules/js/tabs/tabs.css +274 -0
- data/vendor/assets/bower_components/angular-material/modules/js/tabs/tabs.js +1060 -0
- data/vendor/assets/bower_components/angular-material/modules/js/tabs/tabs.min.css +6 -0
- data/vendor/assets/bower_components/angular-material/modules/js/tabs/tabs.min.js +7 -0
- data/vendor/assets/bower_components/angular-material/modules/js/textField/bower.json +7 -0
- data/vendor/assets/bower_components/angular-material/modules/js/textField/textField-default-theme.css +30 -0
- data/vendor/assets/bower_components/angular-material/modules/js/textField/textField-default-theme.min.css +6 -0
- data/vendor/assets/bower_components/angular-material/modules/js/textField/textField.css +111 -0
- data/vendor/assets/bower_components/angular-material/modules/js/textField/textField.js +143 -0
- data/vendor/assets/bower_components/angular-material/modules/js/textField/textField.min.css +6 -0
- data/vendor/assets/bower_components/angular-material/modules/js/textField/textField.min.js +7 -0
- data/vendor/assets/bower_components/angular-material/modules/js/toast/bower.json +8 -0
- data/vendor/assets/bower_components/angular-material/modules/js/toast/toast-default-theme.css +18 -0
- data/vendor/assets/bower_components/angular-material/modules/js/toast/toast-default-theme.min.css +6 -0
- data/vendor/assets/bower_components/angular-material/modules/js/toast/toast.css +119 -0
- data/vendor/assets/bower_components/angular-material/modules/js/toast/toast.js +265 -0
- data/vendor/assets/bower_components/angular-material/modules/js/toast/toast.min.css +6 -0
- data/vendor/assets/bower_components/angular-material/modules/js/toast/toast.min.js +7 -0
- data/vendor/assets/bower_components/angular-material/modules/js/toolbar/bower.json +8 -0
- data/vendor/assets/bower_components/angular-material/modules/js/toolbar/toolbar-default-theme.css +20 -0
- data/vendor/assets/bower_components/angular-material/modules/js/toolbar/toolbar-default-theme.min.css +6 -0
- data/vendor/assets/bower_components/angular-material/modules/js/toolbar/toolbar.css +83 -0
- data/vendor/assets/bower_components/angular-material/modules/js/toolbar/toolbar.js +169 -0
- data/vendor/assets/bower_components/angular-material/modules/js/toolbar/toolbar.min.css +6 -0
- data/vendor/assets/bower_components/angular-material/modules/js/toolbar/toolbar.min.js +7 -0
- data/vendor/assets/bower_components/angular-material/modules/js/tooltip/bower.json +7 -0
- data/vendor/assets/bower_components/angular-material/modules/js/tooltip/tooltip-default-theme.css +11 -0
- data/vendor/assets/bower_components/angular-material/modules/js/tooltip/tooltip-default-theme.min.css +6 -0
- data/vendor/assets/bower_components/angular-material/modules/js/tooltip/tooltip.css +72 -0
- data/vendor/assets/bower_components/angular-material/modules/js/tooltip/tooltip.js +268 -0
- data/vendor/assets/bower_components/angular-material/modules/js/tooltip/tooltip.min.css +6 -0
- data/vendor/assets/bower_components/angular-material/modules/js/tooltip/tooltip.min.js +7 -0
- data/vendor/assets/bower_components/angular-material/modules/js/whiteframe/bower.json +5 -0
- data/vendor/assets/bower_components/angular-material/modules/js/whiteframe/whiteframe.css +25 -0
- data/vendor/assets/bower_components/angular-material/modules/js/whiteframe/whiteframe.js +16 -0
- data/vendor/assets/bower_components/angular-material/modules/js/whiteframe/whiteframe.min.css +6 -0
- data/vendor/assets/bower_components/angular-material/modules/js/whiteframe/whiteframe.min.js +7 -0
- data/vendor/assets/bower_components/angular-material/package.json +48 -0
- data/vendor/assets/bower_components/angular/README.md +64 -0
- data/vendor/assets/bower_components/angular/angular-csp.css +21 -0
- data/vendor/assets/bower_components/angular/angular.js +28364 -0
- data/vendor/assets/bower_components/angular/angular.min.js +290 -0
- data/vendor/assets/bower_components/angular/angular.min.js.gzip +0 -0
- data/vendor/assets/bower_components/angular/angular.min.js.map +8 -0
- data/vendor/assets/bower_components/angular/bower.json +8 -0
- data/vendor/assets/bower_components/angular/index.js +2 -0
- data/vendor/assets/bower_components/angular/package.json +25 -0
- data/vendor/assets/bower_components/lodash/LICENSE +22 -0
- data/vendor/assets/bower_components/lodash/bower.json +19 -0
- data/vendor/assets/bower_components/lodash/lodash.js +12351 -0
- data/vendor/assets/bower_components/lodash/lodash.min.js +99 -0
- data/vendor/assets/bower_components/restangular/CHANGELOG.md +18 -0
- data/vendor/assets/bower_components/restangular/CONTRIBUTE.md +31 -0
- data/vendor/assets/bower_components/restangular/Gruntfile.js +149 -0
- data/vendor/assets/bower_components/restangular/README.md +1336 -0
- data/vendor/assets/bower_components/restangular/bower.json +19 -0
- data/vendor/assets/bower_components/restangular/dist/restangular.js +1355 -0
- data/vendor/assets/bower_components/restangular/dist/restangular.min.js +6 -0
- data/vendor/assets/bower_components/restangular/dist/restangular.zip +0 -0
- data/vendor/assets/bower_components/restangular/karma.conf.js +74 -0
- data/vendor/assets/bower_components/restangular/karma.underscore.conf.js +74 -0
- data/vendor/assets/bower_components/restangular/license.md +21 -0
- data/vendor/assets/bower_components/restangular/package.json +55 -0
- data/vendor/assets/bower_components/restangular/src/restangular.js +1350 -0
- data/vendor/assets/bower_components/restangular/test/restangularSpec.js +1136 -0
- metadata +424 -1
@@ -0,0 +1,18 @@
|
|
1
|
+
.inputIconDemo {
|
2
|
+
min-height:48px;
|
3
|
+
}
|
4
|
+
|
5
|
+
|
6
|
+
md-input-container:not(.md-input-invalid) > md-icon.email {
|
7
|
+
color : green;
|
8
|
+
}
|
9
|
+
md-input-container:not(.md-input-invalid) > md-icon.name {
|
10
|
+
color : dodgerblue;
|
11
|
+
}
|
12
|
+
|
13
|
+
md-input-container.md-input-invalid > md-icon.email,
|
14
|
+
md-input-container.md-input-invalid > md-icon.name,
|
15
|
+
{
|
16
|
+
color : red;
|
17
|
+
}
|
18
|
+
|
data/vendor/assets/bower_components/angular-material/demos/list/demoListControls/img/100-0.jpeg
ADDED
Binary file
|
data/vendor/assets/bower_components/angular-material/demos/list/demoListControls/img/100-1.jpeg
ADDED
Binary file
|
data/vendor/assets/bower_components/angular-material/demos/list/demoListControls/img/100-2.jpeg
ADDED
Binary file
|
@@ -0,0 +1,44 @@
|
|
1
|
+
md-content {
|
2
|
+
background-color: transparent !important;
|
3
|
+
md-tabs {
|
4
|
+
border: 1px solid #e1e1e1;
|
5
|
+
md-tab-content {
|
6
|
+
background: #f6f6f6;
|
7
|
+
}
|
8
|
+
md-tabs-canvas {
|
9
|
+
background: white;
|
10
|
+
}
|
11
|
+
}
|
12
|
+
h1:first-child {
|
13
|
+
margin-top: 0;
|
14
|
+
}
|
15
|
+
}
|
16
|
+
md-input-container {
|
17
|
+
padding-bottom: 0;
|
18
|
+
}
|
19
|
+
.remove-tab {
|
20
|
+
margin-bottom: 40px;
|
21
|
+
}
|
22
|
+
.demo-tab > div > div {
|
23
|
+
padding: 25px;
|
24
|
+
box-sizing: border-box;
|
25
|
+
}
|
26
|
+
.edit-form input {
|
27
|
+
width: 100%;
|
28
|
+
}
|
29
|
+
md-tabs {
|
30
|
+
border-bottom: 1px solid rgba(0,0,0,0.12);
|
31
|
+
}
|
32
|
+
md-tab[disabled] {
|
33
|
+
opacity: 0.5;
|
34
|
+
}
|
35
|
+
label {
|
36
|
+
text-align: left;
|
37
|
+
}
|
38
|
+
|
39
|
+
.long > input {
|
40
|
+
width: 264px;
|
41
|
+
}
|
42
|
+
.md-button.add-tab {
|
43
|
+
transform: translateY(5px);
|
44
|
+
}
|
@@ -0,0 +1,25 @@
|
|
1
|
+
md-tab-content {
|
2
|
+
padding: 25px;
|
3
|
+
&:nth-child(1) {
|
4
|
+
background-color: #42A5F5;
|
5
|
+
}
|
6
|
+
&:nth-child(2) {
|
7
|
+
background-color: #689F38;
|
8
|
+
}
|
9
|
+
&:nth-child(3) {
|
10
|
+
background-color: #26C6DA;
|
11
|
+
}
|
12
|
+
}
|
13
|
+
.after-tabs-area {
|
14
|
+
> span {
|
15
|
+
margin-top:25px;
|
16
|
+
padding-right: 15px;
|
17
|
+
vertical-align: middle;
|
18
|
+
line-height: 30px;
|
19
|
+
height: 35px;
|
20
|
+
}
|
21
|
+
> md-checkbox {
|
22
|
+
margin-top:26px;
|
23
|
+
margin-left: 0;
|
24
|
+
}
|
25
|
+
}
|
@@ -0,0 +1,4 @@
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
|
2
|
+
<path d="M0 0h24v24h-24z" fill="none"/>
|
3
|
+
<path d="M12 21.35l-1.45-1.32c-5.15-4.67-8.55-7.75-8.55-11.53 0-3.08 2.42-5.5 5.5-5.5 1.74 0 3.41.81 4.5 2.09 1.09-1.28 2.76-2.09 4.5-2.09 3.08 0 5.5 2.42 5.5 5.5 0 3.78-3.4 6.86-8.55 11.54l-1.45 1.31z"/>
|
4
|
+
</svg>
|
@@ -0,0 +1,4 @@
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18">
|
2
|
+
<path d="M0 0h18v18h-18z" fill="none"/>
|
3
|
+
<path d="M9 5.5c.83 0 1.5-.67 1.5-1.5s-.67-1.5-1.5-1.5-1.5.67-1.5 1.5.67 1.5 1.5 1.5zm0 2c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 1.5-1.5-.67-1.5-1.5-1.5zm0 5c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 1.5-1.5-.67-1.5-1.5-1.5z"/>
|
4
|
+
</svg>
|
@@ -0,0 +1,12 @@
|
|
1
|
+
// Should already be required, here for clarity
|
2
|
+
require('angular');
|
3
|
+
|
4
|
+
// Load Angular and dependent libs
|
5
|
+
require('angular-animate');
|
6
|
+
require('angular-aria');
|
7
|
+
|
8
|
+
// Now load Angular Material
|
9
|
+
require('./angular-material');
|
10
|
+
|
11
|
+
// Export namespace
|
12
|
+
module.exports = 'ngMaterial';
|
@@ -0,0 +1,24 @@
|
|
1
|
+
/*!
|
2
|
+
* Angular Material Design
|
3
|
+
* https://github.com/angular/material
|
4
|
+
* @license MIT
|
5
|
+
* v0.10.0
|
6
|
+
*/
|
7
|
+
/* mixin definition ; sets LTR and RTL within the same style call */
|
8
|
+
md-autocomplete.md-THEME_NAME-theme {
|
9
|
+
background: '{{background-50}}'; }
|
10
|
+
md-autocomplete.md-THEME_NAME-theme[disabled] {
|
11
|
+
background: '{{background-100}}'; }
|
12
|
+
md-autocomplete.md-THEME_NAME-theme button md-icon path {
|
13
|
+
fill: '{{background-600}}'; }
|
14
|
+
md-autocomplete.md-THEME_NAME-theme button:after {
|
15
|
+
background: '{{background-600-0.3}}'; }
|
16
|
+
|
17
|
+
.md-autocomplete-suggestions.md-THEME_NAME-theme {
|
18
|
+
background: '{{background-50}}'; }
|
19
|
+
.md-autocomplete-suggestions.md-THEME_NAME-theme li {
|
20
|
+
color: '{{background-900}}'; }
|
21
|
+
.md-autocomplete-suggestions.md-THEME_NAME-theme li .highlight {
|
22
|
+
color: '{{background-600}}'; }
|
23
|
+
.md-autocomplete-suggestions.md-THEME_NAME-theme li:hover, .md-autocomplete-suggestions.md-THEME_NAME-theme li.selected {
|
24
|
+
background: '{{background-200}}'; }
|
data/vendor/assets/bower_components/angular-material/modules/closure/autocomplete/autocomplete.css
ADDED
@@ -0,0 +1,220 @@
|
|
1
|
+
/*!
|
2
|
+
* Angular Material Design
|
3
|
+
* https://github.com/angular/material
|
4
|
+
* @license MIT
|
5
|
+
* v0.10.0
|
6
|
+
*/
|
7
|
+
/* mixin definition ; sets LTR and RTL within the same style call */
|
8
|
+
@-webkit-keyframes md-autocomplete-list-out {
|
9
|
+
0% {
|
10
|
+
-webkit-animation-timing-function: linear;
|
11
|
+
animation-timing-function: linear; }
|
12
|
+
|
13
|
+
50% {
|
14
|
+
opacity: 0;
|
15
|
+
height: 40px;
|
16
|
+
-webkit-animation-timing-function: ease-in;
|
17
|
+
animation-timing-function: ease-in; }
|
18
|
+
|
19
|
+
100% {
|
20
|
+
height: 0;
|
21
|
+
opacity: 0; } }
|
22
|
+
@keyframes md-autocomplete-list-out {
|
23
|
+
0% {
|
24
|
+
-webkit-animation-timing-function: linear;
|
25
|
+
animation-timing-function: linear; }
|
26
|
+
|
27
|
+
50% {
|
28
|
+
opacity: 0;
|
29
|
+
height: 40px;
|
30
|
+
-webkit-animation-timing-function: ease-in;
|
31
|
+
animation-timing-function: ease-in; }
|
32
|
+
|
33
|
+
100% {
|
34
|
+
height: 0;
|
35
|
+
opacity: 0; } }
|
36
|
+
|
37
|
+
@-webkit-keyframes md-autocomplete-list-in {
|
38
|
+
0% {
|
39
|
+
opacity: 0;
|
40
|
+
height: 0;
|
41
|
+
-webkit-animation-timing-function: ease-out;
|
42
|
+
animation-timing-function: ease-out; }
|
43
|
+
|
44
|
+
50% {
|
45
|
+
opacity: 0;
|
46
|
+
height: 40px; }
|
47
|
+
|
48
|
+
100% {
|
49
|
+
opacity: 1;
|
50
|
+
height: 40px; } }
|
51
|
+
|
52
|
+
@keyframes md-autocomplete-list-in {
|
53
|
+
0% {
|
54
|
+
opacity: 0;
|
55
|
+
height: 0;
|
56
|
+
-webkit-animation-timing-function: ease-out;
|
57
|
+
animation-timing-function: ease-out; }
|
58
|
+
|
59
|
+
50% {
|
60
|
+
opacity: 0;
|
61
|
+
height: 40px; }
|
62
|
+
|
63
|
+
100% {
|
64
|
+
opacity: 1;
|
65
|
+
height: 40px; } }
|
66
|
+
|
67
|
+
md-autocomplete {
|
68
|
+
border-radius: 2px;
|
69
|
+
display: block;
|
70
|
+
height: 40px;
|
71
|
+
position: relative;
|
72
|
+
overflow: visible;
|
73
|
+
min-width: 190px; }
|
74
|
+
md-autocomplete[disabled] input {
|
75
|
+
cursor: not-allowed; }
|
76
|
+
md-autocomplete[md-floating-label] {
|
77
|
+
padding-bottom: 26px;
|
78
|
+
border-radius: 0;
|
79
|
+
background: transparent;
|
80
|
+
height: auto; }
|
81
|
+
md-autocomplete[md-floating-label] md-input-container {
|
82
|
+
padding-bottom: 0; }
|
83
|
+
md-autocomplete[md-floating-label] md-autocomplete-wrap {
|
84
|
+
height: auto; }
|
85
|
+
md-autocomplete[md-floating-label] button {
|
86
|
+
position: absolute;
|
87
|
+
top: auto;
|
88
|
+
bottom: 0;
|
89
|
+
right: 0;
|
90
|
+
width: 30px;
|
91
|
+
height: 30px; }
|
92
|
+
md-autocomplete md-autocomplete-wrap {
|
93
|
+
display: block;
|
94
|
+
position: relative;
|
95
|
+
overflow: visible;
|
96
|
+
height: 40px; }
|
97
|
+
md-autocomplete md-autocomplete-wrap md-progress-linear[md-mode=indeterminate] {
|
98
|
+
position: absolute;
|
99
|
+
bottom: 0;
|
100
|
+
left: 0;
|
101
|
+
width: 100%;
|
102
|
+
height: 3px;
|
103
|
+
transition: none; }
|
104
|
+
md-autocomplete md-autocomplete-wrap md-progress-linear[md-mode=indeterminate] .md-container {
|
105
|
+
transition: none;
|
106
|
+
top: auto;
|
107
|
+
height: 3px; }
|
108
|
+
md-autocomplete md-autocomplete-wrap md-progress-linear[md-mode=indeterminate].ng-enter {
|
109
|
+
transition: opacity 0.15s linear; }
|
110
|
+
md-autocomplete md-autocomplete-wrap md-progress-linear[md-mode=indeterminate].ng-enter.ng-enter-active {
|
111
|
+
opacity: 1; }
|
112
|
+
md-autocomplete md-autocomplete-wrap md-progress-linear[md-mode=indeterminate].ng-leave {
|
113
|
+
transition: opacity 0.15s linear; }
|
114
|
+
md-autocomplete md-autocomplete-wrap md-progress-linear[md-mode=indeterminate].ng-leave.ng-leave-active {
|
115
|
+
opacity: 0; }
|
116
|
+
md-autocomplete input:not(.md-input) {
|
117
|
+
width: 100%;
|
118
|
+
box-sizing: border-box;
|
119
|
+
border: none;
|
120
|
+
box-shadow: none;
|
121
|
+
padding: 0 15px;
|
122
|
+
font-size: 14px;
|
123
|
+
line-height: 40px;
|
124
|
+
height: 40px;
|
125
|
+
outline: none;
|
126
|
+
background: transparent; }
|
127
|
+
md-autocomplete input:not(.md-input)::-ms-clear {
|
128
|
+
display: none; }
|
129
|
+
md-autocomplete button {
|
130
|
+
position: relative;
|
131
|
+
line-height: 20px;
|
132
|
+
text-align: center;
|
133
|
+
width: 30px;
|
134
|
+
height: 30px;
|
135
|
+
cursor: pointer;
|
136
|
+
border: none;
|
137
|
+
border-radius: 50%;
|
138
|
+
padding: 0;
|
139
|
+
font-size: 12px;
|
140
|
+
background: transparent;
|
141
|
+
margin: auto 5px; }
|
142
|
+
md-autocomplete button:after {
|
143
|
+
content: '';
|
144
|
+
position: absolute;
|
145
|
+
top: -6px;
|
146
|
+
right: -6px;
|
147
|
+
bottom: -6px;
|
148
|
+
left: -6px;
|
149
|
+
border-radius: 50%;
|
150
|
+
-webkit-transform: scale(0);
|
151
|
+
transform: scale(0);
|
152
|
+
opacity: 0;
|
153
|
+
transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1); }
|
154
|
+
md-autocomplete button:focus {
|
155
|
+
outline: none; }
|
156
|
+
md-autocomplete button:focus:after {
|
157
|
+
-webkit-transform: scale(1);
|
158
|
+
transform: scale(1);
|
159
|
+
opacity: 1; }
|
160
|
+
md-autocomplete button md-icon {
|
161
|
+
position: absolute;
|
162
|
+
top: 50%;
|
163
|
+
left: 50%;
|
164
|
+
-webkit-transform: translate3d(-50%, -50%, 0) scale(0.9);
|
165
|
+
transform: translate3d(-50%, -50%, 0) scale(0.9); }
|
166
|
+
md-autocomplete button md-icon path {
|
167
|
+
stroke-width: 0; }
|
168
|
+
md-autocomplete button.ng-enter {
|
169
|
+
-webkit-transform: scale(0);
|
170
|
+
transform: scale(0);
|
171
|
+
transition: -webkit-transform 0.15s ease-out;
|
172
|
+
transition: transform 0.15s ease-out; }
|
173
|
+
md-autocomplete button.ng-enter.ng-enter-active {
|
174
|
+
-webkit-transform: scale(1);
|
175
|
+
transform: scale(1); }
|
176
|
+
md-autocomplete button.ng-leave {
|
177
|
+
transition: -webkit-transform 0.15s ease-out;
|
178
|
+
transition: transform 0.15s ease-out; }
|
179
|
+
md-autocomplete button.ng-leave.ng-leave-active {
|
180
|
+
-webkit-transform: scale(0);
|
181
|
+
transform: scale(0); }
|
182
|
+
@media screen and (-ms-high-contrast: active) {
|
183
|
+
md-autocomplete input {
|
184
|
+
border: 1px solid #fff; }
|
185
|
+
md-autocomplete li:focus {
|
186
|
+
color: #fff; } }
|
187
|
+
|
188
|
+
.md-autocomplete-suggestions {
|
189
|
+
position: absolute;
|
190
|
+
margin: 0;
|
191
|
+
list-style: none;
|
192
|
+
padding: 0;
|
193
|
+
overflow: auto;
|
194
|
+
max-height: 225.5px;
|
195
|
+
z-index: 100; }
|
196
|
+
.md-autocomplete-suggestions li {
|
197
|
+
cursor: pointer;
|
198
|
+
font-size: 14px;
|
199
|
+
overflow: hidden;
|
200
|
+
padding: 0 15px;
|
201
|
+
line-height: 48px;
|
202
|
+
height: 48px;
|
203
|
+
transition: background 0.15s linear;
|
204
|
+
margin: 0;
|
205
|
+
white-space: nowrap;
|
206
|
+
text-overflow: ellipsis; }
|
207
|
+
.md-autocomplete-suggestions li.ng-enter, .md-autocomplete-suggestions li.ng-hide-remove {
|
208
|
+
transition: none;
|
209
|
+
-webkit-animation: md-autocomplete-list-in 0.2s;
|
210
|
+
animation: md-autocomplete-list-in 0.2s; }
|
211
|
+
.md-autocomplete-suggestions li.ng-leave, .md-autocomplete-suggestions li.ng-hide-add {
|
212
|
+
transition: none;
|
213
|
+
-webkit-animation: md-autocomplete-list-out 0.2s;
|
214
|
+
animation: md-autocomplete-list-out 0.2s; }
|
215
|
+
.md-autocomplete-suggestions li:focus {
|
216
|
+
outline: none; }
|
217
|
+
|
218
|
+
@media screen and (-ms-high-contrast: active) {
|
219
|
+
md-autocomplete, .md-autocomplete-suggestions {
|
220
|
+
border: 1px solid #fff; } }
|
data/vendor/assets/bower_components/angular-material/modules/closure/autocomplete/autocomplete.js
ADDED
@@ -0,0 +1,951 @@
|
|
1
|
+
/*!
|
2
|
+
* Angular Material Design
|
3
|
+
* https://github.com/angular/material
|
4
|
+
* @license MIT
|
5
|
+
* v0.10.0
|
6
|
+
*/
|
7
|
+
goog.provide('ng.material.components.autocomplete');
|
8
|
+
goog.require('ng.material.components.icon');
|
9
|
+
goog.require('ng.material.core');
|
10
|
+
/**
|
11
|
+
* @ngdoc module
|
12
|
+
* @name material.components.autocomplete
|
13
|
+
*/
|
14
|
+
/*
|
15
|
+
* @see js folder for autocomplete implementation
|
16
|
+
*/
|
17
|
+
angular.module('material.components.autocomplete', [
|
18
|
+
'material.core',
|
19
|
+
'material.components.icon'
|
20
|
+
]);
|
21
|
+
|
22
|
+
angular
|
23
|
+
.module('material.components.autocomplete')
|
24
|
+
.controller('MdAutocompleteCtrl', MdAutocompleteCtrl);
|
25
|
+
|
26
|
+
var ITEM_HEIGHT = 41,
|
27
|
+
MAX_HEIGHT = 5.5 * ITEM_HEIGHT,
|
28
|
+
MENU_PADDING = 8;
|
29
|
+
|
30
|
+
function MdAutocompleteCtrl ($scope, $element, $mdUtil, $mdConstant, $timeout, $mdTheming, $window,
|
31
|
+
$animate, $rootElement, $attrs) {
|
32
|
+
//-- private variables
|
33
|
+
var ctrl = this,
|
34
|
+
itemParts = $scope.itemsExpr.split(/ in /i),
|
35
|
+
itemExpr = itemParts[1],
|
36
|
+
elements = null,
|
37
|
+
promise = null,
|
38
|
+
cache = {},
|
39
|
+
noBlur = false,
|
40
|
+
selectedItemWatchers = [],
|
41
|
+
hasFocus = false,
|
42
|
+
lastCount = 0;
|
43
|
+
|
44
|
+
//-- public variables with handlers
|
45
|
+
defineProperty('hidden', handleHiddenChange, true);
|
46
|
+
|
47
|
+
//-- public variables
|
48
|
+
ctrl.scope = $scope;
|
49
|
+
ctrl.parent = $scope.$parent;
|
50
|
+
ctrl.itemName = itemParts[0];
|
51
|
+
ctrl.matches = [];
|
52
|
+
ctrl.loading = false;
|
53
|
+
ctrl.hidden = true;
|
54
|
+
ctrl.index = null;
|
55
|
+
ctrl.messages = [];
|
56
|
+
ctrl.id = $mdUtil.nextUid();
|
57
|
+
ctrl.isDisabled = null;
|
58
|
+
ctrl.isRequired = null;
|
59
|
+
|
60
|
+
//-- public methods
|
61
|
+
ctrl.keydown = keydown;
|
62
|
+
ctrl.blur = blur;
|
63
|
+
ctrl.focus = focus;
|
64
|
+
ctrl.clear = clearValue;
|
65
|
+
ctrl.select = select;
|
66
|
+
ctrl.listEnter = onListEnter;
|
67
|
+
ctrl.listLeave = onListLeave;
|
68
|
+
ctrl.mouseUp = onMouseup;
|
69
|
+
ctrl.getCurrentDisplayValue = getCurrentDisplayValue;
|
70
|
+
ctrl.registerSelectedItemWatcher = registerSelectedItemWatcher;
|
71
|
+
ctrl.unregisterSelectedItemWatcher = unregisterSelectedItemWatcher;
|
72
|
+
|
73
|
+
return init();
|
74
|
+
|
75
|
+
//-- initialization methods
|
76
|
+
|
77
|
+
/**
|
78
|
+
* Initialize the controller, setup watchers, gather elements
|
79
|
+
*/
|
80
|
+
function init () {
|
81
|
+
$mdUtil.initOptionalProperties($scope, $attrs, { searchText: null, selectedItem: null } );
|
82
|
+
$mdTheming($element);
|
83
|
+
configureWatchers();
|
84
|
+
$timeout(function () {
|
85
|
+
gatherElements();
|
86
|
+
focusElement();
|
87
|
+
moveDropdown();
|
88
|
+
});
|
89
|
+
}
|
90
|
+
|
91
|
+
/**
|
92
|
+
* Calculates the dropdown's position and applies the new styles to the menu element
|
93
|
+
* @returns {*}
|
94
|
+
*/
|
95
|
+
function positionDropdown () {
|
96
|
+
if (!elements) return $timeout(positionDropdown, 0, false);
|
97
|
+
var hrect = elements.wrap.getBoundingClientRect(),
|
98
|
+
vrect = elements.snap.getBoundingClientRect(),
|
99
|
+
root = elements.root.getBoundingClientRect(),
|
100
|
+
top = vrect.bottom - root.top,
|
101
|
+
bot = root.bottom - vrect.top,
|
102
|
+
left = hrect.left - root.left,
|
103
|
+
width = hrect.width,
|
104
|
+
styles = {
|
105
|
+
left: left + 'px',
|
106
|
+
minWidth: width + 'px',
|
107
|
+
maxWidth: Math.max(hrect.right - root.left, root.right - hrect.left) - MENU_PADDING + 'px'
|
108
|
+
};
|
109
|
+
if (top > bot && root.height - hrect.bottom - MENU_PADDING < MAX_HEIGHT) {
|
110
|
+
styles.top = 'auto';
|
111
|
+
styles.bottom = bot + 'px';
|
112
|
+
styles.maxHeight = Math.min(MAX_HEIGHT, hrect.top - root.top - MENU_PADDING) + 'px';
|
113
|
+
} else {
|
114
|
+
styles.top = top + 'px';
|
115
|
+
styles.bottom = 'auto';
|
116
|
+
styles.maxHeight = Math.min(MAX_HEIGHT, root.bottom - hrect.bottom - MENU_PADDING) + 'px';
|
117
|
+
}
|
118
|
+
elements.$.ul.css(styles);
|
119
|
+
$timeout(correctHorizontalAlignment, 0, false);
|
120
|
+
|
121
|
+
/**
|
122
|
+
* Makes sure that the menu doesn't go off of the screen on either side.
|
123
|
+
*/
|
124
|
+
function correctHorizontalAlignment () {
|
125
|
+
var dropdown = elements.ul.getBoundingClientRect(),
|
126
|
+
styles = {};
|
127
|
+
if (dropdown.right > root.right - MENU_PADDING) {
|
128
|
+
styles.left = (hrect.right - dropdown.width) + 'px';
|
129
|
+
}
|
130
|
+
elements.$.ul.css(styles);
|
131
|
+
}
|
132
|
+
}
|
133
|
+
|
134
|
+
/**
|
135
|
+
* Moves the dropdown menu to the body tag in order to avoid z-index and overflow issues.
|
136
|
+
*/
|
137
|
+
function moveDropdown () {
|
138
|
+
if (!elements.$.root.length) return;
|
139
|
+
$mdTheming(elements.$.ul);
|
140
|
+
elements.$.ul.detach();
|
141
|
+
elements.$.root.append(elements.$.ul);
|
142
|
+
if ($animate.pin) $animate.pin(elements.$.ul, $rootElement);
|
143
|
+
}
|
144
|
+
|
145
|
+
/**
|
146
|
+
* Sends focus to the input element.
|
147
|
+
*/
|
148
|
+
function focusElement () {
|
149
|
+
if ($scope.autofocus) elements.input.focus();
|
150
|
+
}
|
151
|
+
|
152
|
+
/**
|
153
|
+
* Sets up any watchers used by autocomplete
|
154
|
+
*/
|
155
|
+
function configureWatchers () {
|
156
|
+
var wait = parseInt($scope.delay, 10) || 0;
|
157
|
+
$attrs.$observe('disabled', function (value) { ctrl.isDisabled = value; });
|
158
|
+
$attrs.$observe('required', function (value) { ctrl.isRequired = value !== null; });
|
159
|
+
$scope.$watch('searchText', wait ? $mdUtil.debounce(handleSearchText, wait) : handleSearchText);
|
160
|
+
registerSelectedItemWatcher(selectedItemChange);
|
161
|
+
$scope.$watch('selectedItem', handleSelectedItemChange);
|
162
|
+
angular.element($window).on('resize', positionDropdown);
|
163
|
+
$scope.$on('$destroy', cleanup);
|
164
|
+
}
|
165
|
+
|
166
|
+
/**
|
167
|
+
* Removes any events or leftover elements created by this controller
|
168
|
+
*/
|
169
|
+
function cleanup () {
|
170
|
+
angular.element($window).off('resize', positionDropdown);
|
171
|
+
elements.$.ul.remove();
|
172
|
+
}
|
173
|
+
|
174
|
+
/**
|
175
|
+
* Gathers all of the elements needed for this controller
|
176
|
+
*/
|
177
|
+
function gatherElements () {
|
178
|
+
elements = {
|
179
|
+
main: $element[0],
|
180
|
+
ul: $element.find('ul')[0],
|
181
|
+
input: $element.find('input')[0],
|
182
|
+
wrap: $element.find('md-autocomplete-wrap')[0],
|
183
|
+
root: document.body
|
184
|
+
};
|
185
|
+
elements.li = elements.ul.getElementsByTagName('li');
|
186
|
+
elements.snap = getSnapTarget();
|
187
|
+
elements.$ = getAngularElements(elements);
|
188
|
+
}
|
189
|
+
|
190
|
+
/**
|
191
|
+
* Finds the element that the menu will base its position on
|
192
|
+
* @returns {*}
|
193
|
+
*/
|
194
|
+
function getSnapTarget () {
|
195
|
+
for (var element = $element; element.length; element = element.parent()) {
|
196
|
+
if (angular.isDefined(element.attr('md-autocomplete-snap'))) return element[0];
|
197
|
+
}
|
198
|
+
return elements.wrap;
|
199
|
+
}
|
200
|
+
|
201
|
+
/**
|
202
|
+
* Gathers angular-wrapped versions of each element
|
203
|
+
* @param elements
|
204
|
+
* @returns {{}}
|
205
|
+
*/
|
206
|
+
function getAngularElements (elements) {
|
207
|
+
var obj = {};
|
208
|
+
for (var key in elements) {
|
209
|
+
obj[key] = angular.element(elements[key]);
|
210
|
+
}
|
211
|
+
return obj;
|
212
|
+
}
|
213
|
+
|
214
|
+
//-- event/change handlers
|
215
|
+
|
216
|
+
/**
|
217
|
+
* Handles changes to the `hidden` property.
|
218
|
+
* @param hidden
|
219
|
+
* @param oldHidden
|
220
|
+
*/
|
221
|
+
function handleHiddenChange (hidden, oldHidden) {
|
222
|
+
if (!hidden && oldHidden) positionDropdown();
|
223
|
+
if (!hidden) {
|
224
|
+
if (elements) $timeout(function () { $mdUtil.disableScrollAround(elements.ul); }, 0, false);
|
225
|
+
} else {
|
226
|
+
$mdUtil.enableScrolling();
|
227
|
+
}
|
228
|
+
}
|
229
|
+
|
230
|
+
/**
|
231
|
+
* When the user mouses over the dropdown menu, ignore blur events.
|
232
|
+
*/
|
233
|
+
function onListEnter () {
|
234
|
+
noBlur = true;
|
235
|
+
}
|
236
|
+
|
237
|
+
/**
|
238
|
+
* When the user's mouse leaves the menu, blur events may hide the menu again.
|
239
|
+
*/
|
240
|
+
function onListLeave () {
|
241
|
+
noBlur = false;
|
242
|
+
if (!hasFocus) ctrl.hidden = true;
|
243
|
+
}
|
244
|
+
|
245
|
+
/**
|
246
|
+
* When the mouse button is released, send focus back to the input field.
|
247
|
+
*/
|
248
|
+
function onMouseup () {
|
249
|
+
elements.input.focus();
|
250
|
+
}
|
251
|
+
|
252
|
+
/**
|
253
|
+
* Handles changes to the selected item.
|
254
|
+
* @param selectedItem
|
255
|
+
* @param previousSelectedItem
|
256
|
+
*/
|
257
|
+
function selectedItemChange (selectedItem, previousSelectedItem) {
|
258
|
+
if (selectedItem) {
|
259
|
+
$scope.searchText = getDisplayValue(selectedItem);
|
260
|
+
}
|
261
|
+
if ($scope.itemChange && selectedItem !== previousSelectedItem)
|
262
|
+
$scope.itemChange(getItemScope(selectedItem));
|
263
|
+
}
|
264
|
+
|
265
|
+
/**
|
266
|
+
* Calls any external watchers listening for the selected item. Used in conjunction with
|
267
|
+
* `registerSelectedItemWatcher`.
|
268
|
+
* @param selectedItem
|
269
|
+
* @param previousSelectedItem
|
270
|
+
*/
|
271
|
+
function handleSelectedItemChange(selectedItem, previousSelectedItem) {
|
272
|
+
for (var i = 0; i < selectedItemWatchers.length; ++i) {
|
273
|
+
selectedItemWatchers[i](selectedItem, previousSelectedItem);
|
274
|
+
}
|
275
|
+
}
|
276
|
+
|
277
|
+
/**
|
278
|
+
* Register a function to be called when the selected item changes.
|
279
|
+
* @param cb
|
280
|
+
*/
|
281
|
+
function registerSelectedItemWatcher(cb) {
|
282
|
+
if (selectedItemWatchers.indexOf(cb) == -1) {
|
283
|
+
selectedItemWatchers.push(cb);
|
284
|
+
}
|
285
|
+
}
|
286
|
+
|
287
|
+
/**
|
288
|
+
* Unregister a function previously registered for selected item changes.
|
289
|
+
* @param cb
|
290
|
+
*/
|
291
|
+
function unregisterSelectedItemWatcher(cb) {
|
292
|
+
var i = selectedItemWatchers.indexOf(cb);
|
293
|
+
if (i != -1) {
|
294
|
+
selectedItemWatchers.splice(i, 1);
|
295
|
+
}
|
296
|
+
}
|
297
|
+
|
298
|
+
/**
|
299
|
+
* Handles changes to the searchText property.
|
300
|
+
* @param searchText
|
301
|
+
* @param previousSearchText
|
302
|
+
*/
|
303
|
+
function handleSearchText (searchText, previousSearchText) {
|
304
|
+
ctrl.index = getDefaultIndex();
|
305
|
+
//-- do nothing on init
|
306
|
+
if (searchText === previousSearchText) return;
|
307
|
+
//-- clear selected item if search text no longer matches it
|
308
|
+
if (searchText !== getDisplayValue($scope.selectedItem)) $scope.selectedItem = null;
|
309
|
+
else return;
|
310
|
+
//-- trigger change event if available
|
311
|
+
if ($scope.textChange && searchText !== previousSearchText)
|
312
|
+
$scope.textChange(getItemScope($scope.selectedItem));
|
313
|
+
//-- cancel results if search text is not long enough
|
314
|
+
if (!isMinLengthMet()) {
|
315
|
+
ctrl.loading = false;
|
316
|
+
ctrl.matches = [];
|
317
|
+
ctrl.hidden = shouldHide();
|
318
|
+
updateMessages();
|
319
|
+
} else {
|
320
|
+
handleQuery();
|
321
|
+
}
|
322
|
+
}
|
323
|
+
|
324
|
+
/**
|
325
|
+
* Handles input blur event, determines if the dropdown should hide.
|
326
|
+
*/
|
327
|
+
function blur () {
|
328
|
+
hasFocus = false;
|
329
|
+
if (!noBlur) ctrl.hidden = true;
|
330
|
+
}
|
331
|
+
|
332
|
+
/**
|
333
|
+
* Handles input focus event, determines if the dropdown should show.
|
334
|
+
*/
|
335
|
+
function focus () {
|
336
|
+
hasFocus = true;
|
337
|
+
//-- if searchText is null, let's force it to be a string
|
338
|
+
if (!angular.isString($scope.searchText)) $scope.searchText = '';
|
339
|
+
if ($scope.minLength > 0) return;
|
340
|
+
ctrl.hidden = shouldHide();
|
341
|
+
if (!ctrl.hidden) handleQuery();
|
342
|
+
}
|
343
|
+
|
344
|
+
/**
|
345
|
+
* Handles keyboard input.
|
346
|
+
* @param event
|
347
|
+
*/
|
348
|
+
function keydown (event) {
|
349
|
+
switch (event.keyCode) {
|
350
|
+
case $mdConstant.KEY_CODE.DOWN_ARROW:
|
351
|
+
if (ctrl.loading) return;
|
352
|
+
event.preventDefault();
|
353
|
+
ctrl.index = Math.min(ctrl.index + 1, ctrl.matches.length - 1);
|
354
|
+
updateScroll();
|
355
|
+
updateMessages();
|
356
|
+
break;
|
357
|
+
case $mdConstant.KEY_CODE.UP_ARROW:
|
358
|
+
if (ctrl.loading) return;
|
359
|
+
event.preventDefault();
|
360
|
+
ctrl.index = ctrl.index < 0 ? ctrl.matches.length - 1 : Math.max(0, ctrl.index - 1);
|
361
|
+
updateScroll();
|
362
|
+
updateMessages();
|
363
|
+
break;
|
364
|
+
case $mdConstant.KEY_CODE.TAB:
|
365
|
+
case $mdConstant.KEY_CODE.ENTER:
|
366
|
+
if (ctrl.hidden || ctrl.loading || ctrl.index < 0 || ctrl.matches.length < 1) return;
|
367
|
+
event.preventDefault();
|
368
|
+
select(ctrl.index);
|
369
|
+
break;
|
370
|
+
case $mdConstant.KEY_CODE.ESCAPE:
|
371
|
+
ctrl.matches = [];
|
372
|
+
ctrl.hidden = true;
|
373
|
+
ctrl.index = getDefaultIndex();
|
374
|
+
break;
|
375
|
+
default:
|
376
|
+
}
|
377
|
+
}
|
378
|
+
|
379
|
+
//-- getters
|
380
|
+
|
381
|
+
/**
|
382
|
+
* Returns the minimum length needed to display the dropdown.
|
383
|
+
* @returns {*}
|
384
|
+
*/
|
385
|
+
function getMinLength () {
|
386
|
+
return angular.isNumber($scope.minLength) ? $scope.minLength : 1;
|
387
|
+
}
|
388
|
+
|
389
|
+
/**
|
390
|
+
* Returns the display value for an item.
|
391
|
+
* @param item
|
392
|
+
* @returns {*}
|
393
|
+
*/
|
394
|
+
function getDisplayValue (item) {
|
395
|
+
return (item && $scope.itemText) ? $scope.itemText(getItemScope(item)) : item;
|
396
|
+
}
|
397
|
+
|
398
|
+
/**
|
399
|
+
* Returns the locals object for compiling item templates.
|
400
|
+
* @param item
|
401
|
+
* @returns {{}}
|
402
|
+
*/
|
403
|
+
function getItemScope (item) {
|
404
|
+
if (!item) return;
|
405
|
+
var locals = {};
|
406
|
+
if (ctrl.itemName) locals[ctrl.itemName] = item;
|
407
|
+
return locals;
|
408
|
+
}
|
409
|
+
|
410
|
+
/**
|
411
|
+
* Returns the default index based on whether or not autoselect is enabled.
|
412
|
+
* @returns {number}
|
413
|
+
*/
|
414
|
+
function getDefaultIndex () {
|
415
|
+
return $scope.autoselect ? 0 : -1;
|
416
|
+
}
|
417
|
+
|
418
|
+
/**
|
419
|
+
* Determines if the menu should be hidden.
|
420
|
+
* @returns {boolean}
|
421
|
+
*/
|
422
|
+
function shouldHide () {
|
423
|
+
if (!isMinLengthMet()) return true;
|
424
|
+
}
|
425
|
+
|
426
|
+
/**
|
427
|
+
* Returns the display value of the current item.
|
428
|
+
* @returns {*}
|
429
|
+
*/
|
430
|
+
function getCurrentDisplayValue () {
|
431
|
+
return getDisplayValue(ctrl.matches[ctrl.index]);
|
432
|
+
}
|
433
|
+
|
434
|
+
/**
|
435
|
+
* Determines if the minimum length is met by the search text.
|
436
|
+
* @returns {*}
|
437
|
+
*/
|
438
|
+
function isMinLengthMet () {
|
439
|
+
return angular.isDefined($scope.searchText) && $scope.searchText.length >= getMinLength();
|
440
|
+
}
|
441
|
+
|
442
|
+
//-- actions
|
443
|
+
|
444
|
+
/**
|
445
|
+
* Defines a public property with a handler and a default value.
|
446
|
+
* @param key
|
447
|
+
* @param handler
|
448
|
+
* @param value
|
449
|
+
*/
|
450
|
+
function defineProperty (key, handler, value) {
|
451
|
+
Object.defineProperty(ctrl, key, {
|
452
|
+
get: function () { return value; },
|
453
|
+
set: function (newValue) {
|
454
|
+
var oldValue = value;
|
455
|
+
value = newValue;
|
456
|
+
handler(newValue, oldValue);
|
457
|
+
}
|
458
|
+
});
|
459
|
+
}
|
460
|
+
|
461
|
+
/**
|
462
|
+
* Selects the item at the given index.
|
463
|
+
* @param index
|
464
|
+
*/
|
465
|
+
function select (index) {
|
466
|
+
$scope.selectedItem = ctrl.matches[index];
|
467
|
+
ctrl.hidden = true;
|
468
|
+
ctrl.index = 0;
|
469
|
+
ctrl.matches = [];
|
470
|
+
//-- force form to update state for validation
|
471
|
+
$timeout(function () {
|
472
|
+
elements.$.input.controller('ngModel').$setViewValue(getDisplayValue($scope.selectedItem) ||
|
473
|
+
$scope.searchText);
|
474
|
+
ctrl.hidden = true;
|
475
|
+
});
|
476
|
+
}
|
477
|
+
|
478
|
+
/**
|
479
|
+
* Clears the searchText value and selected item.
|
480
|
+
*/
|
481
|
+
function clearValue () {
|
482
|
+
$scope.searchText = '';
|
483
|
+
select(-1);
|
484
|
+
|
485
|
+
// Per http://www.w3schools.com/jsref/event_oninput.asp
|
486
|
+
var eventObj = document.createEvent('CustomEvent');
|
487
|
+
eventObj.initCustomEvent('input', true, true, {value: $scope.searchText});
|
488
|
+
elements.input.dispatchEvent(eventObj);
|
489
|
+
|
490
|
+
elements.input.focus();
|
491
|
+
}
|
492
|
+
|
493
|
+
/**
|
494
|
+
* Fetches the results for the provided search text.
|
495
|
+
* @param searchText
|
496
|
+
*/
|
497
|
+
function fetchResults (searchText) {
|
498
|
+
var items = $scope.$parent.$eval(itemExpr),
|
499
|
+
term = searchText.toLowerCase();
|
500
|
+
if (angular.isArray(items)) {
|
501
|
+
handleResults(items);
|
502
|
+
} else if (items) {
|
503
|
+
ctrl.loading = true;
|
504
|
+
if (items.success) items.success(handleResults);
|
505
|
+
if (items.then) items.then(handleResults);
|
506
|
+
if (items.error) items.error(function () { ctrl.loading = false; });
|
507
|
+
}
|
508
|
+
function handleResults (matches) {
|
509
|
+
cache[term] = matches;
|
510
|
+
if (searchText !== $scope.searchText) return; //-- just cache the results if old request
|
511
|
+
ctrl.loading = false;
|
512
|
+
promise = null;
|
513
|
+
ctrl.matches = matches;
|
514
|
+
ctrl.hidden = shouldHide();
|
515
|
+
updateMessages();
|
516
|
+
positionDropdown();
|
517
|
+
}
|
518
|
+
}
|
519
|
+
|
520
|
+
/**
|
521
|
+
* Updates the ARIA messages
|
522
|
+
*/
|
523
|
+
function updateMessages () {
|
524
|
+
ctrl.messages = [ getCountMessage(), getCurrentDisplayValue() ];
|
525
|
+
}
|
526
|
+
|
527
|
+
/**
|
528
|
+
* Returns the ARIA message for how many results match the current query.
|
529
|
+
* @returns {*}
|
530
|
+
*/
|
531
|
+
function getCountMessage () {
|
532
|
+
if (lastCount === ctrl.matches.length) return '';
|
533
|
+
lastCount = ctrl.matches.length;
|
534
|
+
switch (ctrl.matches.length) {
|
535
|
+
case 0: return 'There are no matches available.';
|
536
|
+
case 1: return 'There is 1 match available.';
|
537
|
+
default: return 'There are ' + ctrl.matches.length + ' matches available.';
|
538
|
+
}
|
539
|
+
}
|
540
|
+
|
541
|
+
/**
|
542
|
+
* Makes sure that the focused element is within view.
|
543
|
+
*/
|
544
|
+
function updateScroll () {
|
545
|
+
if (!elements.li[ctrl.index]) return;
|
546
|
+
var li = elements.li[ctrl.index],
|
547
|
+
top = li.offsetTop,
|
548
|
+
bot = top + li.offsetHeight,
|
549
|
+
hgt = elements.ul.clientHeight;
|
550
|
+
if (top < elements.ul.scrollTop) {
|
551
|
+
elements.ul.scrollTop = top;
|
552
|
+
} else if (bot > elements.ul.scrollTop + hgt) {
|
553
|
+
elements.ul.scrollTop = bot - hgt;
|
554
|
+
}
|
555
|
+
}
|
556
|
+
|
557
|
+
/**
|
558
|
+
* Starts the query to gather the results for the current searchText. Attempts to return cached
|
559
|
+
* results first, then forwards the process to `fetchResults` if necessary.
|
560
|
+
*/
|
561
|
+
function handleQuery () {
|
562
|
+
var searchText = $scope.searchText,
|
563
|
+
term = searchText.toLowerCase();
|
564
|
+
//-- cancel promise if a promise is in progress
|
565
|
+
if (promise && promise.cancel) {
|
566
|
+
promise.cancel();
|
567
|
+
promise = null;
|
568
|
+
}
|
569
|
+
//-- if results are cached, pull in cached results
|
570
|
+
if (!$scope.noCache && cache[term]) {
|
571
|
+
ctrl.matches = cache[term];
|
572
|
+
updateMessages();
|
573
|
+
} else {
|
574
|
+
fetchResults(searchText);
|
575
|
+
}
|
576
|
+
if (hasFocus) ctrl.hidden = shouldHide();
|
577
|
+
}
|
578
|
+
|
579
|
+
}
|
580
|
+
MdAutocompleteCtrl.$inject = ["$scope", "$element", "$mdUtil", "$mdConstant", "$timeout", "$mdTheming", "$window", "$animate", "$rootElement", "$attrs"];
|
581
|
+
|
582
|
+
angular
|
583
|
+
.module('material.components.autocomplete')
|
584
|
+
.directive('mdAutocomplete', MdAutocomplete);
|
585
|
+
|
586
|
+
/**
|
587
|
+
* @ngdoc directive
|
588
|
+
* @name mdAutocomplete
|
589
|
+
* @module material.components.autocomplete
|
590
|
+
*
|
591
|
+
* @description
|
592
|
+
* `<md-autocomplete>` is a special input component with a drop-down of all possible matches to a custom query.
|
593
|
+
* This component allows you to provide real-time suggestions as the user types in the input area.
|
594
|
+
*
|
595
|
+
* To start, you will need to specify the required parameters and provide a template for your results.
|
596
|
+
* The content inside `md-autocomplete` will be treated as a template.
|
597
|
+
*
|
598
|
+
* In more complex cases, you may want to include other content such as a message to display when
|
599
|
+
* no matches were found. You can do this by wrapping your template in `md-item-template` and adding
|
600
|
+
* a tag for `md-not-found`. An example of this is shown below.
|
601
|
+
* ### Validation
|
602
|
+
*
|
603
|
+
* You can use `ng-messages` to include validation the same way that you would normally validate;
|
604
|
+
* however, if you want to replicate a standard input with a floating label, you will have to do the
|
605
|
+
* following:
|
606
|
+
*
|
607
|
+
* - Make sure that your template is wrapped in `md-item-template`
|
608
|
+
* - Add your `ng-messages` code inside of `md-autocomplete`
|
609
|
+
* - Add your validation properties to `md-autocomplete` (ie. `required`)
|
610
|
+
* - Add a `name` to `md-autocomplete` (to be used on the generated `input`)
|
611
|
+
*
|
612
|
+
* There is an example below of how this should look.
|
613
|
+
*
|
614
|
+
*
|
615
|
+
* @param {expression} md-items An expression in the format of `item in items` to iterate over matches for your search.
|
616
|
+
* @param {expression=} md-selected-item-change An expression to be run each time a new item is selected
|
617
|
+
* @param {expression=} md-search-text-change An expression to be run each time the search text updates
|
618
|
+
* @param {string=} md-search-text A model to bind the search query text to
|
619
|
+
* @param {object=} md-selected-item A model to bind the selected item to
|
620
|
+
* @param {string=} md-item-text An expression that will convert your object to a single string.
|
621
|
+
* @param {string=} placeholder Placeholder text that will be forwarded to the input.
|
622
|
+
* @param {boolean=} md-no-cache Disables the internal caching that happens in autocomplete
|
623
|
+
* @param {boolean=} ng-disabled Determines whether or not to disable the input field
|
624
|
+
* @param {number=} md-min-length Specifies the minimum length of text before autocomplete will make suggestions
|
625
|
+
* @param {number=} md-delay Specifies the amount of time (in milliseconds) to wait before looking for results
|
626
|
+
* @param {boolean=} md-autofocus If true, will immediately focus the input element
|
627
|
+
* @param {boolean=} md-autoselect If true, the first item will be selected by default
|
628
|
+
* @param {string=} md-menu-class This will be applied to the dropdown menu for styling
|
629
|
+
* @param {string=} md-floating-label This will add a floating label to autocomplete and wrap it in `md-input-container`
|
630
|
+
*
|
631
|
+
* @usage
|
632
|
+
* ###Basic Example
|
633
|
+
* <hljs lang="html">
|
634
|
+
* <md-autocomplete
|
635
|
+
* md-selected-item="selectedItem"
|
636
|
+
* md-search-text="searchText"
|
637
|
+
* md-items="item in getMatches(searchText)"
|
638
|
+
* md-item-text="item.display">
|
639
|
+
* <span md-highlight-text="searchText">{{item.display}}</span>
|
640
|
+
* </md-autocomplete>
|
641
|
+
* </hljs>
|
642
|
+
*
|
643
|
+
* ###Example with "not found" message
|
644
|
+
* <hljs lang="html">
|
645
|
+
* <md-autocomplete
|
646
|
+
* md-selected-item="selectedItem"
|
647
|
+
* md-search-text="searchText"
|
648
|
+
* md-items="item in getMatches(searchText)"
|
649
|
+
* md-item-text="item.display">
|
650
|
+
* <md-item-template>
|
651
|
+
* <span md-highlight-text="searchText">{{item.display}}</span>
|
652
|
+
* </md-item-template>
|
653
|
+
* <md-not-found>
|
654
|
+
* No matches found.
|
655
|
+
* </md-not-found>
|
656
|
+
* </md-autocomplete>
|
657
|
+
* </hljs>
|
658
|
+
*
|
659
|
+
* In this example, our code utilizes `md-item-template` and `md-not-found` to specify the different
|
660
|
+
* parts that make up our component.
|
661
|
+
*
|
662
|
+
* ### Example with validation
|
663
|
+
* <hljs lang="html">
|
664
|
+
* <form name="autocompleteForm">
|
665
|
+
* <md-autocomplete
|
666
|
+
* required
|
667
|
+
* input-name="autocomplete"
|
668
|
+
* md-selected-item="selectedItem"
|
669
|
+
* md-search-text="searchText"
|
670
|
+
* md-items="item in getMatches(searchText)"
|
671
|
+
* md-item-text="item.display">
|
672
|
+
* <md-item-template>
|
673
|
+
* <span md-highlight-text="searchText">{{item.display}}</span>
|
674
|
+
* </md-item-template>
|
675
|
+
* <div ng-messages="autocompleteForm.autocomplete.$error">
|
676
|
+
* <div ng-message="required">This field is required</div>
|
677
|
+
* </div>
|
678
|
+
* </md-autocomplete>
|
679
|
+
* </form>
|
680
|
+
* </hljs>
|
681
|
+
*
|
682
|
+
* In this example, our code utilizes `md-item-template` and `md-not-found` to specify the different
|
683
|
+
* parts that make up our component.
|
684
|
+
*/
|
685
|
+
|
686
|
+
function MdAutocomplete ($mdTheming, $mdUtil) {
|
687
|
+
return {
|
688
|
+
controller: 'MdAutocompleteCtrl',
|
689
|
+
controllerAs: '$mdAutocompleteCtrl',
|
690
|
+
scope: {
|
691
|
+
inputName: '@mdInputName',
|
692
|
+
inputMinlength: '@mdInputMinlength',
|
693
|
+
inputMaxlength: '@mdInputMaxlength',
|
694
|
+
searchText: '=?mdSearchText',
|
695
|
+
selectedItem: '=?mdSelectedItem',
|
696
|
+
itemsExpr: '@mdItems',
|
697
|
+
itemText: '&mdItemText',
|
698
|
+
placeholder: '@placeholder',
|
699
|
+
noCache: '=?mdNoCache',
|
700
|
+
itemChange: '&?mdSelectedItemChange',
|
701
|
+
textChange: '&?mdSearchTextChange',
|
702
|
+
minLength: '=?mdMinLength',
|
703
|
+
delay: '=?mdDelay',
|
704
|
+
autofocus: '=?mdAutofocus',
|
705
|
+
floatingLabel: '@?mdFloatingLabel',
|
706
|
+
autoselect: '=?mdAutoselect',
|
707
|
+
menuClass: '@?mdMenuClass'
|
708
|
+
},
|
709
|
+
template: function (element, attr) {
|
710
|
+
var noItemsTemplate = getNoItemsTemplate(),
|
711
|
+
itemTemplate = getItemTemplate(),
|
712
|
+
leftover = element.html();
|
713
|
+
return '\
|
714
|
+
<md-autocomplete-wrap\
|
715
|
+
layout="row"\
|
716
|
+
ng-class="{ \'md-whiteframe-z1\': !floatingLabel }"\
|
717
|
+
role="listbox">\
|
718
|
+
' + getInputElement() + '\
|
719
|
+
<md-progress-linear\
|
720
|
+
ng-if="$mdAutocompleteCtrl.loading"\
|
721
|
+
md-mode="indeterminate"></md-progress-linear>\
|
722
|
+
<ul role="presentation"\
|
723
|
+
class="md-autocomplete-suggestions md-whiteframe-z1 {{menuClass || \'\'}}"\
|
724
|
+
id="ul-{{$mdAutocompleteCtrl.id}}"\
|
725
|
+
ng-hide="$mdAutocompleteCtrl.hidden"\
|
726
|
+
ng-mouseenter="$mdAutocompleteCtrl.listEnter()"\
|
727
|
+
ng-mouseleave="$mdAutocompleteCtrl.listLeave()"\
|
728
|
+
ng-mouseup="$mdAutocompleteCtrl.mouseUp()">\
|
729
|
+
<li ng-repeat="(index, item) in $mdAutocompleteCtrl.matches"\
|
730
|
+
ng-class="{ selected: index === $mdAutocompleteCtrl.index }"\
|
731
|
+
ng-click="$mdAutocompleteCtrl.select(index)"\
|
732
|
+
md-autocomplete-list-item="$mdAutocompleteCtrl.itemName">\
|
733
|
+
' + itemTemplate + '\
|
734
|
+
</li>\
|
735
|
+
' + noItemsTemplate + '\
|
736
|
+
</ul>\
|
737
|
+
</md-autocomplete-wrap>\
|
738
|
+
<aria-status\
|
739
|
+
class="md-visually-hidden"\
|
740
|
+
role="status"\
|
741
|
+
aria-live="assertive">\
|
742
|
+
<p ng-repeat="message in $mdAutocompleteCtrl.messages" ng-if="message">{{message}}</p>\
|
743
|
+
</aria-status>';
|
744
|
+
|
745
|
+
function getItemTemplate() {
|
746
|
+
var templateTag = element.find('md-item-template').remove(),
|
747
|
+
html = templateTag.length ? templateTag.html() : element.html();
|
748
|
+
if (!templateTag.length) element.empty();
|
749
|
+
return html;
|
750
|
+
}
|
751
|
+
|
752
|
+
function getNoItemsTemplate() {
|
753
|
+
var templateTag = element.find('md-not-found').remove(),
|
754
|
+
template = templateTag.length ? templateTag.html() : '';
|
755
|
+
return template
|
756
|
+
? '<li ng-if="!$mdAutocompleteCtrl.matches.length && !$mdAutocompleteCtrl.loading\
|
757
|
+
&& !$mdAutocompleteCtrl.hidden"\
|
758
|
+
ng-hide="$mdAutocompleteCtrl.hidden"\
|
759
|
+
md-autocomplete-parent-scope>' + template + '</li>'
|
760
|
+
: '';
|
761
|
+
|
762
|
+
}
|
763
|
+
|
764
|
+
function getInputElement() {
|
765
|
+
if (attr.mdFloatingLabel) {
|
766
|
+
return '\
|
767
|
+
<md-input-container flex ng-if="floatingLabel">\
|
768
|
+
<label>{{floatingLabel}}</label>\
|
769
|
+
<input type="search"\
|
770
|
+
id="fl-input-{{$mdAutocompleteCtrl.id}}"\
|
771
|
+
name="{{inputName}}"\
|
772
|
+
autocomplete="off"\
|
773
|
+
ng-required="isRequired"\
|
774
|
+
ng-minlength="inputMinlength"\
|
775
|
+
ng-maxlength="inputMaxlength"\
|
776
|
+
ng-disabled="$mdAutocompleteCtrl.isDisabled"\
|
777
|
+
ng-model="$mdAutocompleteCtrl.scope.searchText"\
|
778
|
+
ng-keydown="$mdAutocompleteCtrl.keydown($event)"\
|
779
|
+
ng-blur="$mdAutocompleteCtrl.blur()"\
|
780
|
+
ng-focus="$mdAutocompleteCtrl.focus()"\
|
781
|
+
aria-owns="ul-{{$mdAutocompleteCtrl.id}}"\
|
782
|
+
aria-label="{{floatingLabel}}"\
|
783
|
+
aria-autocomplete="list"\
|
784
|
+
aria-haspopup="true"\
|
785
|
+
aria-activedescendant=""\
|
786
|
+
aria-expanded="{{!$mdAutocompleteCtrl.hidden}}"/>\
|
787
|
+
<div md-autocomplete-parent-scope md-autocomplete-replace>' + leftover + '</div>\
|
788
|
+
</md-input-container>';
|
789
|
+
} else {
|
790
|
+
return '\
|
791
|
+
<input flex type="search"\
|
792
|
+
id="input-{{$mdAutocompleteCtrl.id}}"\
|
793
|
+
name="{{inputName}}"\
|
794
|
+
ng-if="!floatingLabel"\
|
795
|
+
autocomplete="off"\
|
796
|
+
ng-required="isRequired"\
|
797
|
+
ng-disabled="$mdAutocompleteCtrl.isDisabled"\
|
798
|
+
ng-model="$mdAutocompleteCtrl.scope.searchText"\
|
799
|
+
ng-keydown="$mdAutocompleteCtrl.keydown($event)"\
|
800
|
+
ng-blur="$mdAutocompleteCtrl.blur()"\
|
801
|
+
ng-focus="$mdAutocompleteCtrl.focus()"\
|
802
|
+
placeholder="{{placeholder}}"\
|
803
|
+
aria-owns="ul-{{$mdAutocompleteCtrl.id}}"\
|
804
|
+
aria-label="{{placeholder}}"\
|
805
|
+
aria-autocomplete="list"\
|
806
|
+
aria-haspopup="true"\
|
807
|
+
aria-activedescendant=""\
|
808
|
+
aria-expanded="{{!$mdAutocompleteCtrl.hidden}}"/>\
|
809
|
+
<button\
|
810
|
+
type="button"\
|
811
|
+
tabindex="-1"\
|
812
|
+
ng-if="$mdAutocompleteCtrl.scope.searchText && !$mdAutocompleteCtrl.isDisabled"\
|
813
|
+
ng-click="$mdAutocompleteCtrl.clear()">\
|
814
|
+
<md-icon md-svg-icon="md-close"></md-icon>\
|
815
|
+
<span class="md-visually-hidden">Clear</span>\
|
816
|
+
</button>\
|
817
|
+
';
|
818
|
+
}
|
819
|
+
}
|
820
|
+
}
|
821
|
+
};
|
822
|
+
}
|
823
|
+
MdAutocomplete.$inject = ["$mdTheming", "$mdUtil"];
|
824
|
+
|
825
|
+
angular
|
826
|
+
.module('material.components.autocomplete')
|
827
|
+
.controller('MdHighlightCtrl', MdHighlightCtrl);
|
828
|
+
|
829
|
+
function MdHighlightCtrl ($scope, $element, $interpolate) {
|
830
|
+
this.init = init;
|
831
|
+
|
832
|
+
return init();
|
833
|
+
|
834
|
+
function init (term) {
|
835
|
+
var unsafeText = $interpolate($element.html())($scope),
|
836
|
+
text = angular.element('<div>').text(unsafeText).html(),
|
837
|
+
flags = $element.attr('md-highlight-flags') || '',
|
838
|
+
watcher = $scope.$watch(term, function (term) {
|
839
|
+
var regex = getRegExp(term, flags),
|
840
|
+
html = text.replace(regex, '<span class="highlight">$&</span>');
|
841
|
+
$element.html(html);
|
842
|
+
});
|
843
|
+
$element.on('$destroy', function () { watcher(); });
|
844
|
+
}
|
845
|
+
|
846
|
+
function sanitize (term) {
|
847
|
+
if (!term) return term;
|
848
|
+
return term.replace(/[\\\^\$\*\+\?\.\(\)\|\{\}\[\]]/g, '\\$&');
|
849
|
+
}
|
850
|
+
|
851
|
+
function getRegExp (text, flags) {
|
852
|
+
var str = '';
|
853
|
+
if (flags.indexOf('^') >= 1) str += '^';
|
854
|
+
str += text;
|
855
|
+
if (flags.indexOf('$') >= 1) str += '$';
|
856
|
+
return new RegExp(sanitize(str), flags.replace(/[\$\^]/g, ''));
|
857
|
+
}
|
858
|
+
}
|
859
|
+
MdHighlightCtrl.$inject = ["$scope", "$element", "$interpolate"];
|
860
|
+
|
861
|
+
angular
|
862
|
+
.module('material.components.autocomplete')
|
863
|
+
.directive('mdHighlightText', MdHighlight);
|
864
|
+
|
865
|
+
/**
|
866
|
+
* @ngdoc directive
|
867
|
+
* @name mdHighlightText
|
868
|
+
* @module material.components.autocomplete
|
869
|
+
*
|
870
|
+
* @description
|
871
|
+
* The `md-highlight-text` directive allows you to specify text that should be highlighted within
|
872
|
+
* an element. Highlighted text will be wrapped in `<span class="highlight"></span>` which can
|
873
|
+
* be styled through CSS. Please note that child elements may not be used with this directive.
|
874
|
+
*
|
875
|
+
* @param {string} md-highlight-text A model to be searched for
|
876
|
+
* @param {string=} md-highlight-flags A list of flags (loosely based on JavaScript RexExp flags).
|
877
|
+
* #### **Supported flags**:
|
878
|
+
* - `g`: Find all matches within the provided text
|
879
|
+
* - `i`: Ignore case when searching for matches
|
880
|
+
* - `$`: Only match if the text ends with the search term
|
881
|
+
* - `^`: Only match if the text begins with the search term
|
882
|
+
*
|
883
|
+
* @usage
|
884
|
+
* <hljs lang="html">
|
885
|
+
* <input placeholder="Enter a search term..." ng-model="searchTerm" type="text" />
|
886
|
+
* <ul>
|
887
|
+
* <li ng-repeat="result in results" md-highlight-text="searchTerm">
|
888
|
+
* {{result.text}}
|
889
|
+
* </li>
|
890
|
+
* </ul>
|
891
|
+
* </hljs>
|
892
|
+
*/
|
893
|
+
|
894
|
+
function MdHighlight () {
|
895
|
+
return {
|
896
|
+
terminal: true,
|
897
|
+
scope: false,
|
898
|
+
controller: 'MdHighlightCtrl',
|
899
|
+
link: function (scope, element, attr, ctrl) {
|
900
|
+
ctrl.init(attr.mdHighlightText);
|
901
|
+
}
|
902
|
+
};
|
903
|
+
}
|
904
|
+
|
905
|
+
angular
|
906
|
+
.module('material.components.autocomplete')
|
907
|
+
.directive('mdAutocompleteListItem', MdAutocompleteListItem);
|
908
|
+
|
909
|
+
function MdAutocompleteListItem ($compile, $mdUtil) {
|
910
|
+
return {
|
911
|
+
terminal: true,
|
912
|
+
link: postLink,
|
913
|
+
scope: false
|
914
|
+
};
|
915
|
+
function postLink (scope, element, attr) {
|
916
|
+
var ctrl = scope.$parent.$mdAutocompleteCtrl,
|
917
|
+
newScope = ctrl.parent.$new(false, ctrl.parent),
|
918
|
+
itemName = ctrl.scope.$eval(attr.mdAutocompleteListItem);
|
919
|
+
newScope[itemName] = scope.item;
|
920
|
+
$compile(element.contents())(newScope);
|
921
|
+
element.attr({
|
922
|
+
role: 'option',
|
923
|
+
id: 'item_' + $mdUtil.nextUid()
|
924
|
+
});
|
925
|
+
}
|
926
|
+
}
|
927
|
+
MdAutocompleteListItem.$inject = ["$compile", "$mdUtil"];
|
928
|
+
|
929
|
+
angular
|
930
|
+
.module('material.components.autocomplete')
|
931
|
+
.directive('mdAutocompleteParentScope', MdAutocompleteParentScope);
|
932
|
+
|
933
|
+
function MdAutocompleteParentScope ($compile, $mdUtil) {
|
934
|
+
return {
|
935
|
+
restrict: 'A',
|
936
|
+
terminal: true,
|
937
|
+
link: postLink,
|
938
|
+
scope: false
|
939
|
+
};
|
940
|
+
function postLink (scope, element, attr) {
|
941
|
+
var ctrl = scope.$parent.$mdAutocompleteCtrl;
|
942
|
+
$compile(element.contents())(ctrl.parent);
|
943
|
+
if (attr.hasOwnProperty('mdAutocompleteReplace')) {
|
944
|
+
element.after(element.contents());
|
945
|
+
element.remove();
|
946
|
+
}
|
947
|
+
}
|
948
|
+
}
|
949
|
+
MdAutocompleteParentScope.$inject = ["$compile", "$mdUtil"];
|
950
|
+
|
951
|
+
ng.material.components.autocomplete = angular.module("material.components.autocomplete");
|