|
9 | 9 | * /,' |
10 | 10 | * /' |
11 | 11 | * |
12 | | - * Selectric ϟ v1.11.1 (Jan 10 2017) - http://lcdsantos.github.io/jQuery-Selectric/ |
| 12 | + * Selectric ϟ v1.12.0 (Jul 03 2017) - http://lcdsantos.github.io/jQuery-Selectric/ |
13 | 13 | * |
14 | 14 | * Copyright (c) 2017 Leonardo Santos; MIT License |
15 | 15 | * |
|
187 | 187 | * @return {string} The string transformed to dash-case. |
188 | 188 | */ |
189 | 189 | toDash: function(str) { |
190 | | - return str.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase(); |
| 190 | + return str.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase(); |
191 | 191 | }, |
192 | 192 |
|
193 | 193 | /** |
|
565 | 565 | itemData.selected ? 'selected' : '' |
566 | 566 | ]), |
567 | 567 | $.isFunction(itemBuilder) |
568 | | - ? _this.utils.format(itemBuilder(itemData), itemData) |
| 568 | + ? _this.utils.format(itemBuilder(itemData, this.$element, index), itemData) |
569 | 569 | : _this.utils.format(itemBuilder, filteredItemData) |
570 | 570 | ); |
571 | 571 | }, |
|
770 | 770 | /** Detect if the options box is inside the window */ |
771 | 771 | isInViewport: function() { |
772 | 772 | var _this = this; |
773 | | - var scrollTop = $win.scrollTop(); |
774 | | - var winHeight = $win.height(); |
775 | | - var uiPosX = _this.elements.outerWrapper.offset().top; |
776 | | - var uiHeight = _this.elements.outerWrapper.outerHeight(); |
777 | 773 |
|
778 | | - var fitsDown = (uiPosX + uiHeight + _this.itemsHeight) <= (scrollTop + winHeight); |
779 | | - var fitsAbove = (uiPosX - _this.itemsHeight) > scrollTop; |
| 774 | + if (_this.options.forceRenderAbove === true) { |
| 775 | + _this.elements.outerWrapper.addClass(_this.classes.above); |
| 776 | + } else { |
| 777 | + var scrollTop = $win.scrollTop(); |
| 778 | + var winHeight = $win.height(); |
| 779 | + var uiPosX = _this.elements.outerWrapper.offset().top; |
| 780 | + var uiHeight = _this.elements.outerWrapper.outerHeight(); |
| 781 | + |
| 782 | + var fitsDown = (uiPosX + uiHeight + _this.itemsHeight) <= (scrollTop + winHeight); |
| 783 | + var fitsAbove = (uiPosX - _this.itemsHeight) > scrollTop; |
780 | 784 |
|
781 | | - // If it does not fit below, only render it |
782 | | - // above it fit's there. |
783 | | - // It's acceptable that the user needs to |
784 | | - // scroll the viewport to see the cut off UI |
785 | | - var renderAbove = !fitsDown && fitsAbove; |
| 785 | + // If it does not fit below, only render it |
| 786 | + // above it fit's there. |
| 787 | + // It's acceptable that the user needs to |
| 788 | + // scroll the viewport to see the cut off UI |
| 789 | + var renderAbove = !fitsDown && fitsAbove; |
786 | 790 |
|
787 | | - _this.elements.outerWrapper.toggleClass(_this.classes.above, renderAbove); |
| 791 | + _this.elements.outerWrapper.toggleClass(_this.classes.above, renderAbove); |
| 792 | + } |
788 | 793 | }, |
789 | 794 |
|
790 | 795 | /** |
|
1075 | 1080 | preventWindowScroll : true, |
1076 | 1081 | inheritOriginalWidth : false, |
1077 | 1082 | allowWrap : true, |
| 1083 | + forceRenderAbove : false, |
1078 | 1084 | stopPropagation : true, |
1079 | 1085 | optionsItemBuilder : '{text}', // function(itemData, element, index) |
1080 | 1086 | labelBuilder : '{text}', // function(currItem) |
|
0 commit comments