|
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 <michaeljjacobson1@gmail.com>
|
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