|
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