From efe6f4d96991e357613dc86fa8f6a931af78990c Mon Sep 17 00:00:00 2001 From: Allen Perl Date: Wed, 13 Apr 2016 14:22:33 -0600 Subject: [PATCH] create md-autocomplete-warp="width" --- .../autocomplete/js/autocompleteController.js | 42 +++++++++++-------- 1 file changed, 25 insertions(+), 17 deletions(-) diff --git a/src/components/autocomplete/js/autocompleteController.js b/src/components/autocomplete/js/autocompleteController.js index 3a189b89743..e21756f7874 100644 --- a/src/components/autocomplete/js/autocompleteController.js +++ b/src/components/autocomplete/js/autocompleteController.js @@ -193,40 +193,48 @@ function MdAutocompleteCtrl ($scope, $element, $mdUtil, $mdConstant, $mdTheming, * Gathers all of the elements needed for this controller */ function gatherElements () { + + var snapWrap = gatherSnapWrap(); + elements = { main: $element[0], scrollContainer: $element[0].getElementsByClassName('md-virtual-repeat-container')[0], scroller: $element[0].getElementsByClassName('md-virtual-repeat-scroller')[0], ul: $element.find('ul')[0], input: $element.find('input')[0], - wrap: getWrapTarget(), + wrap: snapWrap.wrap, + snap: snapWrap.snap, root: document.body }; elements.li = elements.ul.getElementsByTagName('li'); - elements.snap = getSnapTarget(); elements.$ = getAngularElements(elements); } /** - * Find the target for the wrap element which determines menu width - * @returns {*} + * Gathers the snap and wrap elements + * */ - function getWrapTarget() { - for (var element = $element; element.length; element = element.parent()) { - if (angular.isDefined(element.attr('md-autocomplete-wrap-override'))) return element[ 0 ]; + function gatherSnapWrap() { + var element; + var value; + for (element = $element; element.length; element = element.parent()) { + value = element.attr('md-autocomplete-snap'); + if (angular.isDefined(value)) break; } - return $element.find('md-autocomplete-wrap')[0]; - } - /** - * Finds the element that the menu will base its position on - * @returns {*} - */ - function getSnapTarget () { - for (var element = $element; element.length; element = element.parent()) { - if (angular.isDefined(element.attr('md-autocomplete-snap'))) return element[ 0 ]; + if (element.length) { + var snapWidth = value.toLowerCase() === 'width'; + return { + snap: element[0], + wrap: snapWidth ? element[0] : $element.find('md-autocomplete-wrap')[0] + }; } - return elements.wrap; + + var wrap = $element.find('md-autocomplete-wrap')[0]; + return { + snap: wrap, + wrap: wrap + }; } /**