|
653 | 653 | }
|
654 | 654 |
|
655 | 655 | var elementTemplates = {
|
| 656 | + div: document.createElement('div'), |
656 | 657 | span: document.createElement('span'),
|
657 | 658 | i: document.createElement('i'),
|
658 | 659 | subtext: document.createElement('small'),
|
|
1631 | 1632 | break;
|
1632 | 1633 | }
|
1633 | 1634 |
|
| 1635 | + item.element = liElement; |
1634 | 1636 | mainElements.push(liElement);
|
1635 | 1637 |
|
1636 | 1638 | // count the number of characters in the option - not perfect, but should work in most cases
|
|
1827 | 1829 | liHeight: function (refresh) {
|
1828 | 1830 | if (!refresh && (this.options.size === false || Object.keys(this.sizeInfo).length)) return;
|
1829 | 1831 |
|
1830 |
| - var newElement = document.createElement('div'), |
1831 |
| - menu = document.createElement('div'), |
1832 |
| - menuInner = document.createElement('div'), |
| 1832 | + var newElement = elementTemplates.div.cloneNode(false), |
| 1833 | + menu = elementTemplates.div.cloneNode(false), |
| 1834 | + menuInner = elementTemplates.div.cloneNode(false), |
1833 | 1835 | menuInnerInner = document.createElement('ul'),
|
1834 |
| - divider = document.createElement('li'), |
1835 |
| - dropdownHeader = document.createElement('li'), |
1836 |
| - li = document.createElement('li'), |
1837 |
| - a = document.createElement('a'), |
1838 |
| - text = document.createElement('span'), |
| 1836 | + divider = elementTemplates.li.cloneNode(false), |
| 1837 | + dropdownHeader = elementTemplates.li.cloneNode(false), |
| 1838 | + li, |
| 1839 | + a = elementTemplates.a.cloneNode(false), |
| 1840 | + text = elementTemplates.span.cloneNode(false), |
1839 | 1841 | header = this.options.header && this.$menu.find('.' + classNames.POPOVERHEADER).length > 0 ? this.$menu.find('.' + classNames.POPOVERHEADER)[0].cloneNode(true) : null,
|
1840 |
| - search = this.options.liveSearch ? document.createElement('div') : null, |
| 1842 | + search = this.options.liveSearch ? elementTemplates.div.cloneNode(false) : null, |
1841 | 1843 | actions = this.options.actionsBox && this.multiple && this.$menu.find('.bs-actionsbox').length > 0 ? this.$menu.find('.bs-actionsbox')[0].cloneNode(true) : null,
|
1842 | 1844 | doneButton = this.options.doneButton && this.multiple && this.$menu.find('.bs-donebutton').length > 0 ? this.$menu.find('.bs-donebutton')[0].cloneNode(true) : null,
|
1843 | 1845 | firstOption = this.$element.find('option')[0];
|
|
1856 | 1858 | dropdownHeader.className = 'dropdown-header';
|
1857 | 1859 |
|
1858 | 1860 | text.appendChild(document.createTextNode('\u200b'));
|
1859 |
| - a.appendChild(text); |
1860 |
| - li.appendChild(a); |
| 1861 | + |
| 1862 | + if (this.selectpicker.current.data.length) { |
| 1863 | + for (var i = 0; i < this.selectpicker.current.data.length; i++) { |
| 1864 | + var data = this.selectpicker.current.data[i]; |
| 1865 | + if (data.type === 'option') { |
| 1866 | + li = data.element; |
| 1867 | + break; |
| 1868 | + } |
| 1869 | + } |
| 1870 | + } else { |
| 1871 | + li = elementTemplates.li.cloneNode(false); |
| 1872 | + a.appendChild(text); |
| 1873 | + li.appendChild(a); |
| 1874 | + } |
| 1875 | + |
1861 | 1876 | dropdownHeader.appendChild(text.cloneNode(true));
|
1862 | 1877 |
|
1863 | 1878 | if (this.selectpicker.view.widestOption) {
|
|
0 commit comments