|
1 | 1 | /** |
2 | 2 | * jquery-bootstrap-scrolling-tabs |
3 | | - * @version v1.1.0 |
| 3 | + * @version v1.2.0 |
4 | 4 | * @link https://github.com/mikejacobson/jquery-bootstrap-scrolling-tabs |
5 | 5 | * @author Mike Jacobson <michaeljjacobson1@gmail.com> |
6 | 6 | * @license MIT License, http://www.opensource.org/licenses/MIT |
|
118 | 118 | * .scrtabs-tab-scroll-arrow |
119 | 119 | * .scrtabs-tab-scroll-arrow-left |
120 | 120 | * .scrtabs-tab-scroll-arrow-right |
| 121 | + * leftArrowContent, rightArrowContent: |
| 122 | + * custom HTML string for the left and right scroll |
| 123 | + * arrows. This will override any custom cssClassLeftArrow |
| 124 | + * and cssClassRightArrow settings. |
| 125 | + * For example, if you wanted to use svg icons, you |
| 126 | + * could set them like so: |
| 127 | + |
| 128 | + * leftArrowContent: [ |
| 129 | + * '<div class="custom-arrow">', |
| 130 | + * ' <svg class="icon icon-point-left">', |
| 131 | + * ' <use xlink:href="#icon-point-left"></use>', |
| 132 | + * ' </svg>', |
| 133 | + * '</div>' |
| 134 | + * ].join(''), |
| 135 | + * rightArrowContent: [ |
| 136 | + * '<div class="custom-arrow">', |
| 137 | + * ' <svg class="icon icon-point-right">', |
| 138 | + * ' <use xlink:href="#icon-point-right"></use>', |
| 139 | + * ' </svg>', |
| 140 | + * '</div>' |
| 141 | + * ].join('') |
| 142 | + * |
| 143 | + * You would then need to add some CSS to make them |
| 144 | + * work correctly if you don't give them the |
| 145 | + * default scrtabs-tab-scroll-arrow classes. |
| 146 | + * This plunk shows it working with svg icons: |
| 147 | + * http://plnkr.co/edit/2MdZCAnLyeU40shxaol3?p=preview |
121 | 148 | * |
122 | 149 | * |
123 | 150 | * On tabs data change: |
|
200 | 227 | CONTINUOUS_SCROLLING_TIMEOUT_INTERVAL: 50, // timeout interval for repeatedly moving the tabs container |
201 | 228 | // by one increment while the mouse is held down--decrease to |
202 | 229 | // make mousedown continous scrolling faster |
203 | | - SCROLL_ARROW_WIDTH: 20, |
204 | 230 | SCROLL_OFFSET_FRACTION: 6, // each click moves the container this fraction of the fixed container--decrease |
205 | 231 | // to make the tabs scroll farther per click |
206 | 232 |
|
|
324 | 350 | var ehd = this, |
325 | 351 | stc = ehd.stc, |
326 | 352 | $tabsContainer = stc.$tabsContainer, |
327 | | - $leftArrow = $tabsContainer.find('.scrtabs-tab-scroll-arrow-left'), |
328 | | - $rightArrow = $tabsContainer.find('.scrtabs-tab-scroll-arrow-right'); |
| 353 | + $leftArrow, |
| 354 | + $rightArrow; |
329 | 355 |
|
330 | 356 | stc.isNavPills = false; |
331 | 357 |
|
332 | 358 | stc.$fixedContainer = $tabsContainer.find('.scrtabs-tabs-fixed-container'); |
| 359 | + $leftArrow = stc.$fixedContainer.prev(); |
| 360 | + $rightArrow = stc.$fixedContainer.next(); |
| 361 | + |
333 | 362 | stc.$movableContainer = $tabsContainer.find('.scrtabs-tabs-movable-container'); |
334 | 363 | stc.$tabsUl = $tabsContainer.find('.nav-tabs'); |
335 | 364 |
|
|
734 | 763 | $activeTab, |
735 | 764 | activeTabLeftPos, |
736 | 765 | activeTabRightPos, |
737 | | - rightArrowLeftPos; |
| 766 | + rightArrowLeftPos, |
| 767 | + leftScrollArrowWidth, |
| 768 | + rightScrollArrowWidth; |
738 | 769 |
|
739 | 770 | if (!stc.scrollArrowsVisible) { |
740 | 771 | return; |
|
756 | 787 | rightArrowLeftPos = stc.fixedContainerWidth - RIGHT_OFFSET_BUFFER; |
757 | 788 |
|
758 | 789 | if (activeTabRightPos > rightArrowLeftPos) { // active tab off right side |
759 | | - stc.movableContainerLeftPos -= (activeTabRightPos - rightArrowLeftPos + CONSTANTS.SCROLL_ARROW_WIDTH); |
760 | | - smv.slideMovableContainerToLeftPos(); |
761 | | - return true; |
762 | | - } else if (activeTabLeftPos < CONSTANTS.SCROLL_ARROW_WIDTH) { // active tab off left side |
763 | | - stc.movableContainerLeftPos += CONSTANTS.SCROLL_ARROW_WIDTH - activeTabLeftPos; |
| 790 | + rightScrollArrowWidth = stc.$slideRightArrow.outerWidth(); |
| 791 | + stc.movableContainerLeftPos -= (activeTabRightPos - rightArrowLeftPos + rightScrollArrowWidth); |
764 | 792 | smv.slideMovableContainerToLeftPos(); |
765 | 793 | return true; |
| 794 | + } else { |
| 795 | + leftScrollArrowWidth = stc.$slideLeftArrow.outerWidth(); |
| 796 | + if (activeTabLeftPos < leftScrollArrowWidth) { // active tab off left side |
| 797 | + stc.movableContainerLeftPos += leftScrollArrowWidth - activeTabLeftPos; |
| 798 | + smv.slideMovableContainerToLeftPos(); |
| 799 | + return true; |
| 800 | + } |
766 | 801 | } |
767 | 802 |
|
768 | 803 | return false; |
|
935 | 970 |
|
936 | 971 | function getNewElScrollerElementWrappingNavTabsInstance($navTabsInstance, settings) { |
937 | 972 | var $tabsContainer = $('<div class="scrtabs-tab-container"></div>'), |
938 | | - $leftArrow = $('<div class="scrtabs-tab-scroll-arrow scrtabs-tab-scroll-arrow-left"><span class="' + settings.cssClassLeftArrow + '"></span></div>'), |
939 | | - $rightArrow = $('<div class="scrtabs-tab-scroll-arrow scrtabs-tab-scroll-arrow-right"><span class="' + settings.cssClassRightArrow + '"></span></div>'), |
| 973 | + leftArrowContent = settings.leftArrowContent || '<div class="scrtabs-tab-scroll-arrow scrtabs-tab-scroll-arrow-left"><span class="' + settings.cssClassLeftArrow + '"></span></div>', |
| 974 | + $leftArrow = $(leftArrowContent), |
| 975 | + rightArrowContent = settings.rightArrowContent || '<div class="scrtabs-tab-scroll-arrow scrtabs-tab-scroll-arrow-right"><span class="' + settings.cssClassRightArrow + '"></span></div>', |
| 976 | + $rightArrow = $(rightArrowContent), |
940 | 977 | $fixedContainer = $('<div class="scrtabs-tabs-fixed-container"></div>'), |
941 | 978 | $movableContainer = $('<div class="scrtabs-tabs-movable-container"></div>'); |
942 | 979 |
|
|
1158 | 1195 |
|
1159 | 1196 | $scroller.initTabs(); |
1160 | 1197 |
|
1161 | | - listenForDropdownMenuTabs($scroller); |
| 1198 | + listenForDropdownMenuTabs($scroller, scrollingTabsControl); |
1162 | 1199 |
|
1163 | 1200 | return $scroller; |
1164 | 1201 | } |
|
1357 | 1394 | return isInitTabsRequired; |
1358 | 1395 | } |
1359 | 1396 |
|
1360 | | - function listenForDropdownMenuTabs($scroller) { |
| 1397 | + function listenForDropdownMenuTabs($scroller, stc) { |
1361 | 1398 | var $ddMenu; |
1362 | 1399 |
|
1363 | 1400 | // for dropdown menus to show, we need to move them out of the |
|
1398 | 1435 |
|
1399 | 1436 | // make sure the menu doesn't go off the right side of the page |
1400 | 1437 | ddMenuRightX = $ddMenu.width() + ddLiOffset.left; |
1401 | | - tabsContainerMaxX = $scroller.width() - (CONSTANTS.SCROLL_ARROW_WIDTH + 1); |
| 1438 | + tabsContainerMaxX = $scroller.width() - (stc.$slideRightArrow.outerWidth() + 1); |
1402 | 1439 | ddMenuTargetLeft = ddLiOffset.left; |
1403 | 1440 |
|
1404 | 1441 | if (ddMenuRightX > tabsContainerMaxX) { |
|
1661 | 1698 | tabClickHandler: null, |
1662 | 1699 | cssClassLeftArrow: 'glyphicon glyphicon-chevron-left', |
1663 | 1700 | cssClassRightArrow: 'glyphicon glyphicon-chevron-right', |
| 1701 | + leftArrowContent: '', |
| 1702 | + rightArrowContent: '', |
1664 | 1703 | enableSwiping: false |
1665 | 1704 | }; |
1666 | 1705 |
|
|
0 commit comments