|
1 | 1 | /** |
2 | 2 | * jquery-bootstrap-scrolling-tabs |
3 | | - * @version v2.0.1 |
| 3 | + * @version v2.1.0 |
4 | 4 | * @link https://github.com/mikejacobson/jquery-bootstrap-scrolling-tabs |
5 | 5 | * @author Mike Jacobson <[email protected]> |
6 | 6 | * @license MIT License, http://www.opensource.org/licenses/MIT |
|
147 | 147 | * default scrtabs-tab-scroll-arrow classes. |
148 | 148 | * This plunk shows it working with svg icons: |
149 | 149 | * http://plnkr.co/edit/2MdZCAnLyeU40shxaol3?p=preview |
| 150 | + * enableRtlSupport: |
| 151 | + * set to true if you want your site to support |
| 152 | + * right-to-left languages. If true, the plugin will |
| 153 | + * check the page's <html> tag for attribute dir="rtl" |
| 154 | + * and will adjust its behavior accordingly. |
150 | 155 | * |
151 | 156 | * |
152 | 157 | * On tabs data change: |
|
238 | 243 | DATA_KEY_IS_MOUSEDOWN: 'scrtabsismousedown', |
239 | 244 |
|
240 | 245 | CSS_CLASSES: { |
| 246 | + RTL: 'scrtabs-rtl', |
241 | 247 | SCROLL_ARROW_DISABLE: 'scrtabs-disable' |
242 | 248 | }, |
243 | 249 |
|
|
336 | 342 |
|
337 | 343 | var touchPageX = e.originalEvent.changedTouches[0].pageX; |
338 | 344 | var diff = touchPageX - touchStartX; |
| 345 | + if (stc.rtl) { |
| 346 | + diff = -diff; |
| 347 | + } |
339 | 348 | var minPos; |
340 | 349 |
|
341 | 350 | newLeftPos = startingContainerLeftPos + diff; |
|
348 | 357 | } |
349 | 358 | } |
350 | 359 | stc.movableContainerLeftPos = newLeftPos; |
351 | | - stc.$movableContainer.css('left', smv.getMovableContainerCssLeftVal()); |
| 360 | + |
| 361 | + var leftOrRight = stc.rtl ? 'right' : 'left'; |
| 362 | + stc.$movableContainer.css(leftOrRight, smv.getMovableContainerCssLeftVal()); |
352 | 363 | smv.refreshScrollArrowsDisabledState(); |
353 | 364 | }); |
354 | 365 | }; |
|
383 | 394 | if (!isPerformingSlideAnim) { |
384 | 395 | smv.refreshScrollArrowsDisabledState(); |
385 | 396 |
|
386 | | - if (stc.movableContainerLeftPos < minPos) { |
387 | | - smv.incrementMovableContainerRight(minPos); |
| 397 | + if (stc.rtl) { |
| 398 | + if (stc.movableContainerRightPos < minPos) { |
| 399 | + smv.incrementMovableContainerLeft(minPos); |
| 400 | + } |
| 401 | + } else { |
| 402 | + if (stc.movableContainerLeftPos < minPos) { |
| 403 | + smv.incrementMovableContainerRight(minPos); |
| 404 | + } |
388 | 405 | } |
389 | 406 | } |
390 | 407 |
|
|
408 | 425 |
|
409 | 426 | stc.isNavPills = false; |
410 | 427 |
|
| 428 | + if (stc.rtl) { |
| 429 | + $tabsContainer.addClass(CONSTANTS.CSS_CLASSES.RTL); |
| 430 | + } |
| 431 | + |
411 | 432 | stc.$fixedContainer = $tabsContainer.find('.scrtabs-tabs-fixed-container'); |
412 | 433 | $leftArrow = stc.$fixedContainer.prev(); |
413 | 434 | $rightArrow = stc.$fixedContainer.next(); |
|
888 | 909 | var smv = this, |
889 | 910 | stc = smv.stc, |
890 | 911 | minPos = smv.getMinPos(), |
891 | | - leftVal; |
| 912 | + leftOrRightVal; |
| 913 | + |
| 914 | + var leftOrRight = stc.rtl ? 'right' : 'left'; |
892 | 915 |
|
893 | 916 | if (stc.movableContainerLeftPos > 0) { |
894 | 917 | stc.movableContainerLeftPos = 0; |
|
897 | 920 | } |
898 | 921 |
|
899 | 922 | stc.movableContainerLeftPos = stc.movableContainerLeftPos / 1; |
900 | | - leftVal = smv.getMovableContainerCssLeftVal(); |
| 923 | + leftOrRightVal = smv.getMovableContainerCssLeftVal(); |
901 | 924 |
|
902 | 925 | smv.performingSlideAnim = true; |
903 | 926 |
|
904 | | - stc.$movableContainer.stop().animate({ left: leftVal }, 'slow', function __slideAnimComplete() { |
| 927 | + var targetPos = stc.rtl ? { right: leftOrRightVal } : { left: leftOrRightVal }; |
| 928 | + |
| 929 | + stc.$movableContainer.stop().animate(targetPos, 'slow', function __slideAnimComplete() { |
905 | 930 | var newMinPos = smv.getMinPos(); |
906 | 931 |
|
907 | 932 | smv.performingSlideAnim = false; |
|
910 | 935 | // quickly--move back into position |
911 | 936 | if (stc.movableContainerLeftPos < newMinPos) { |
912 | 937 | smv.decrementMovableContainerLeftPos(newMinPos); |
913 | | - stc.$movableContainer.stop().animate({ left: smv.getMovableContainerCssLeftVal() }, 'fast', function() { |
| 938 | + |
| 939 | + targetPos = stc.rtl ? { right: smv.getMovableContainerCssLeftVal() } : { left: smv.getMovableContainerCssLeftVal() }; |
| 940 | + |
| 941 | + stc.$movableContainer.stop().animate(targetPos, 'fast', function() { |
914 | 942 | smv.refreshScrollArrowsDisabledState(); |
915 | 943 | }); |
916 | 944 | } else { |
|
949 | 977 | elementsHandler = stc.elementsHandler, |
950 | 978 | num; |
951 | 979 |
|
| 980 | + if (options.enableRtlSupport && $('html').attr('dir') === 'rtl') { |
| 981 | + stc.rtl = true; |
| 982 | + } |
| 983 | + |
952 | 984 | if (options.scrollToTabEdge) { |
953 | 985 | stc.scrollToTabEdge = true; |
954 | 986 | } |
|
1777 | 1809 | cssClassRightArrow: 'glyphicon glyphicon-chevron-right', |
1778 | 1810 | leftArrowContent: '', |
1779 | 1811 | rightArrowContent: '', |
1780 | | - enableSwiping: false |
| 1812 | + enableSwiping: false, |
| 1813 | + enableRtlSupport: false |
1781 | 1814 | }; |
1782 | 1815 |
|
1783 | 1816 |
|
|
0 commit comments