Skip to content

Commit 72d7757

Browse files
committed
All: Support RTL and LTR in RTL context
Supporting RTL in a LTR context is implicit RTL is invoked by using a ui-rtl class wrapper with dir="rtl" attribute. LTR in a RTL context is invoked by using a ui-ltr class wrapper and accompanying dir="ltr" inside the ui-rtl wrapper. ui-btn-start, ui-btn-end, ui-btn-icon-start and ui-btn-icon-end has been added to allow easier ordering of elements, as a replacement for *-left and *-right counterparts. Tests have not been 100% updated with RTL considerations in this commit. The only test updates are the ones needed to pass all current tests. Transitions have not been included in RTL considerations. RTL versions of demos have been copied and modified from their LTR counterparts, and can be accessed from the Right To Left option on the demos menu. Ref jquery-archivegh-5167
1 parent 3d7eace commit 72d7757

File tree

96 files changed

+13213
-68
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

96 files changed

+13213
-68
lines changed

css/structure/jquery.mobile.collapsible.css

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,24 @@
1717
border-left-width: 0;
1818
border-right-width: 0;
1919
}
20+
.ui-rtl .ui-collapsible-heading .ui-btn {
21+
text-align: right;
22+
}
23+
.ui-rtl .ui-ltr .ui-collapsible-heading .ui-btn {
24+
text-align: left;
25+
}
2026
.ui-collapsible-heading .ui-btn-icon-top,
2127
.ui-collapsible-heading .ui-btn-icon-bottom {
2228
text-align: center;
2329
}
30+
.ui-rtl .ui-collapsible-heading .ui-btn-icon-top,
31+
.ui-rtl .ui-collapsible-heading .ui-btn-icon-bottom {
32+
text-align: center;
33+
}
34+
.ui-rtl .ui-ltr .ui-collapsible-heading .ui-btn-icon-top,
35+
.ui-rtl .ui-ltr .ui-collapsible-heading .ui-btn-icon-bottom {
36+
text-align: center;
37+
}
2438
.ui-collapsible-inset .ui-collapsible-heading .ui-btn {
2539
border-right-width: 1px;
2640
border-left-width: 1px;

css/structure/jquery.mobile.controlgroup.css

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,20 @@ fieldset.ui-controlgroup {
4747
float: left;
4848
clear: none;
4949
}
50+
.ui-rtl .ui-controlgroup-horizontal .ui-controlgroup-controls > .ui-btn,
51+
.ui-rtl .ui-controlgroup-horizontal .ui-controlgroup-controls li > .ui-btn,
52+
.ui-rtl .ui-controlgroup-horizontal .ui-controlgroup-controls .ui-checkbox,
53+
.ui-rtl .ui-controlgroup-horizontal .ui-controlgroup-controls .ui-radio,
54+
.ui-rtl .ui-controlgroup-horizontal .ui-controlgroup-controls .ui-select {
55+
float: right;
56+
}
57+
.ui-rtl .ui-ltr .ui-controlgroup-horizontal .ui-controlgroup-controls > .ui-btn,
58+
.ui-rtl .ui-ltr .ui-controlgroup-horizontal .ui-controlgroup-controls li > .ui-btn,
59+
.ui-rtl .ui-ltr .ui-controlgroup-horizontal .ui-controlgroup-controls .ui-checkbox,
60+
.ui-rtl .ui-ltr .ui-controlgroup-horizontal .ui-controlgroup-controls .ui-radio,
61+
.ui-rtl .ui-ltr .ui-controlgroup-horizontal .ui-controlgroup-controls .ui-select {
62+
float: left;
63+
}
5064
.ui-controlgroup-horizontal .ui-controlgroup-controls button.ui-btn,
5165
.ui-controlgroup-controls .ui-btn-icon-notext {
5266
width: auto;
@@ -68,9 +82,16 @@ fieldset.ui-controlgroup {
6882
.ui-controlgroup-horizontal .ui-controlgroup-controls .ui-btn {
6983
border-right-width: 0;
7084
}
85+
.ui-rtl :not(.ui-ltr) .ui-controlgroup-horizontal .ui-controlgroup-controls .ui-btn {
86+
border-right-width: 1px;
87+
border-left-width: 0;
88+
}
7189
.ui-controlgroup-horizontal .ui-controlgroup-controls .ui-btn.ui-last-child {
7290
border-right-width: 1px;
7391
}
92+
.ui-rtl :not(.ui-ltr) .ui-controlgroup-horizontal .ui-controlgroup-controls .ui-btn.ui-first-child {
93+
border-left-width: 1px;
94+
}
7495
.ui-controlgroup-controls .ui-btn-corner-all,
7596
.ui-controlgroup-controls .ui-btn.ui-corner-all {
7697
-webkit-border-radius: 0;

css/structure/jquery.mobile.core.css

Lines changed: 183 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,16 @@ div.ui-mobile-viewport {
7373
visibility: hidden;
7474
}
7575

76+
.ui-rtl {
77+
direction: rtl;
78+
text-align: right;
79+
}
80+
81+
.ui-ltr {
82+
direction: ltr;
83+
text-align: left;
84+
}
85+
7686
/* Non-js content hiding */
7787
.ui-nojs {
7888
position: absolute !important;
@@ -103,6 +113,10 @@ div.ui-mobile-viewport {
103113
margin-left: -1.4375em;
104114
margin-top: -1.4375em;
105115
}
116+
.ui-rtl .ui-load-default {
117+
margin-left: 0;
118+
margin-right: -1.4375em;
119+
}
106120
.ui-loader-verbose {
107121
width: 12.5em;
108122
filter: Alpha(Opacity=88);
@@ -113,6 +127,10 @@ div.ui-mobile-viewport {
113127
margin-top: -2.6875em;
114128
padding: .625em;
115129
}
130+
.ui-rtl .ui-loader-verbose {
131+
margin-left: 0;
132+
margin-right: -6.875em;
133+
}
116134
.ui-loader-default h1 {
117135
font-size: 0;
118136
width: 0;
@@ -143,6 +161,10 @@ div.ui-mobile-viewport {
143161
padding: .9375em;
144162
margin-left: -7.1875em;
145163
}
164+
.ui-rtl .ui-loader-textonly {
165+
margin-left: 0;
166+
margin-right: -7.1875em;
167+
}
146168
.ui-loader-textonly .ui-icon-loading {
147169
display: none;
148170
}
@@ -193,6 +215,10 @@ div.ui-mobile-viewport {
193215
white-space: nowrap;
194216
outline: 0 !important;
195217
}
218+
.ui-rtl .ui-header .ui-title,
219+
.ui-rtl .ui-footer .ui-title {
220+
text-overflow: clip;
221+
}
196222
.ui-footer .ui-title {
197223
margin: 0 1em;
198224
}
@@ -237,6 +263,9 @@ div.ui-mobile-viewport {
237263
-ms-user-select: none;
238264
user-select: none;
239265
}
266+
.ui-rtl .ui-btn {
267+
text-overflow: clip;
268+
}
240269
.ui-btn-icon-notext,
241270
.ui-header button.ui-btn.ui-btn-icon-notext,
242271
.ui-footer button.ui-btn.ui-btn-icon-notext {
@@ -266,7 +295,9 @@ div.ui-mobile-viewport {
266295

267296
/* To ensure same top and left/right position when ui-btn-left/right are added to something other than buttons. */
268297
.ui-header .ui-btn-left,
269-
.ui-header .ui-btn-right {
298+
.ui-header .ui-btn-right,
299+
.ui-header .ui-btn-start,
300+
.ui-header .ui-btn-end {
270301
font-size: 12.5px;
271302
}
272303
.ui-mini.ui-btn-icon-notext,
@@ -281,12 +312,34 @@ div.ui-mobile-viewport {
281312
vertical-align: middle;
282313
margin-right: .625em;
283314
}
284-
.ui-btn-icon-left {
315+
.ui-rtl .ui-btn-inline {
316+
margin-right: 0;
317+
margin-left: .625em;
318+
}
319+
.ui-btn-icon-left,
320+
.ui-btn-icon-start {
285321
padding-left: 2.5em;
286322
}
287-
.ui-btn-icon-right {
323+
.ui-rtl .ui-btn-icon-start {
324+
padding-right: 2.5em;
325+
padding-left: 1em;
326+
}
327+
.ui-rtl .ui-ltr .ui-btn-icon-start {
328+
padding-left: 2.5em;
329+
padding-right: 1em;
330+
}
331+
.ui-btn-icon-right,
332+
.ui-btn-icon-end {
288333
padding-right: 2.5em;
289334
}
335+
.ui-rtl .ui-btn-icon-end {
336+
padding-left: 2.5em;
337+
padding-right: 1em;
338+
}
339+
.ui-rtl .ui-ltr .ui-btn-icon-end {
340+
padding-right: 2.5em;
341+
padding-left: 1em;
342+
}
290343
.ui-btn-icon-top {
291344
padding-top: 2.5em;
292345
}
@@ -302,6 +355,8 @@ div.ui-mobile-viewport {
302355
}
303356
.ui-btn-icon-left:after,
304357
.ui-btn-icon-right:after,
358+
.ui-btn-icon-start:after,
359+
.ui-btn-icon-end:after,
305360
.ui-btn-icon-top:after,
306361
.ui-btn-icon-bottom:after,
307362
.ui-btn-icon-notext:after {
@@ -313,34 +368,106 @@ div.ui-mobile-viewport {
313368
}
314369
.ui-btn-icon-notext:after,
315370
.ui-btn-icon-left:after,
316-
.ui-btn-icon-right:after {
371+
.ui-btn-icon-right:after,
372+
.ui-btn-icon-start:after,
373+
.ui-btn-icon-end:after {
317374
top: 50%;
318375
margin-top: -11px;
319376
}
320-
.ui-btn-icon-left:after {
377+
.ui-btn-icon-left:after,
378+
.ui-btn-icon-start:after {
321379
left: .5625em;
322380
}
323-
.ui-btn-icon-right:after {
381+
.ui-rtl .ui-btn-icon-start:after {
382+
right: .5625em;
383+
left: auto;
384+
}
385+
.ui-rtl .ui-ltr .ui-btn-icon-start:after {
386+
left: .5625em;
387+
right: auto;
388+
}
389+
.ui-btn-icon-right:after,
390+
.ui-btn-icon-end:after {
324391
right: .5625em;
325392
}
393+
.ui-rtl .ui-btn-icon-end:after {
394+
left: .5625em;
395+
right: auto;
396+
}
397+
.ui-rtl .ui-ltr .ui-btn-icon-end:after {
398+
right: .5625em;
399+
left: auto;
400+
}
326401
.ui-mini.ui-btn-icon-left:after,
327402
.ui-mini .ui-btn-icon-left:after,
328403
.ui-header .ui-btn-icon-left:after,
329-
.ui-footer .ui-btn-icon-left:after {
404+
.ui-footer .ui-btn-icon-left:after,
405+
.ui-mini.ui-btn-icon-start:after,
406+
.ui-mini .ui-btn-icon-start:after,
407+
.ui-header .ui-btn-icon-start:after,
408+
.ui-footer .ui-btn-icon-start:after {
330409
left: .37em;
331410
}
411+
.ui-rtl .ui-mini.ui-btn-icon-start:after,
412+
.ui-rtl .ui-mini .ui-btn-icon-start:after,
413+
.ui-rtl .ui-header .ui-btn-icon-start:after,
414+
.ui-rtl .ui-footer .ui-btn-icon-start:after {
415+
right: .37em;
416+
left: auto;
417+
}
418+
.ui-rtl .ui-ltr .ui-mini.ui-btn-icon-start:after,
419+
.ui-rtl .ui-ltr .ui-mini .ui-btn-icon-start:after,
420+
.ui-rtl .ui-ltr .ui-header .ui-btn-icon-start:after,
421+
.ui-rtl .ui-ltr .ui-footer .ui-btn-icon-start:after {
422+
left: .37em;
423+
right: auto;
424+
}
332425
.ui-mini.ui-btn-icon-right:after,
333426
.ui-mini .ui-btn-icon-right:after,
334427
.ui-header .ui-btn-icon-right:after,
335-
.ui-footer .ui-btn-icon-right:after {
428+
.ui-footer .ui-btn-icon-right:after,
429+
.ui-mini.ui-btn-icon-end:after,
430+
.ui-mini .ui-btn-icon-end:after,
431+
.ui-header .ui-btn-icon-end:after,
432+
.ui-footer .ui-btn-icon-end:after {
336433
right: .37em;
337434
}
435+
.ui-rtl .ui-mini.ui-btn-icon-end:after,
436+
.ui-rtl .ui-mini .ui-btn-icon-end:after,
437+
.ui-rtl .ui-header .ui-btn-icon-end:after,
438+
.ui-rtl .ui-footer .ui-btn-icon-end:after {
439+
left: .37em;
440+
right: auto;
441+
}
442+
.ui-rtl .ui-ltr .ui-mini.ui-btn-icon-end:after,
443+
.ui-rtl .ui-ltr .ui-mini .ui-btn-icon-end:after,
444+
.ui-rtl .ui-ltr .ui-header .ui-btn-icon-end:after,
445+
.ui-rtl .ui-ltr .ui-footer .ui-btn-icon-end:after {
446+
right: .37em;
447+
left: auto;
448+
}
338449
.ui-btn-icon-notext:after,
339450
.ui-btn-icon-top:after,
340451
.ui-btn-icon-bottom:after {
341452
left: 50%;
342453
margin-left: -11px;
343454
}
455+
.ui-rtl .ui-btn-icon-notext:after,
456+
.ui-rtl .ui-btn-icon-top:after,
457+
.ui-rtl .ui-btn-icon-bottom:after {
458+
left: 0;
459+
right: 50%;
460+
margin-left: 0;
461+
margin-right: -11px;
462+
}
463+
.ui-rtl .ui-ltr .ui-btn-icon-notext:after,
464+
.ui-rtl .ui-ltr .ui-btn-icon-top:after,
465+
.ui-rtl .ui-ltr .ui-btn-icon-bottom:after {
466+
left: 50%;
467+
right: 0;
468+
margin-left: -11px;
469+
margin-right: 0;
470+
}
344471
.ui-btn-icon-top:after {
345472
top: .5625em;
346473
}
@@ -352,28 +479,70 @@ div.ui-mobile-viewport {
352479
.ui-header .ui-btn-left,
353480
.ui-header .ui-btn-right,
354481
.ui-btn-left > [class*="ui-"],
355-
.ui-btn-right > [class*="ui-"] {
482+
.ui-btn-right > [class*="ui-"],
483+
.ui-header .ui-btn-start,
484+
.ui-header .ui-btn-end,
485+
.ui-btn-start > [class*="ui-"],
486+
.ui-btn-end > [class*="ui-"]{
356487
margin: 0;
357488
}
358489
.ui-btn-left,
359-
.ui-btn-right {
490+
.ui-btn-right,
491+
.ui-btn-start,
492+
.ui-btn-end {
360493
position: absolute;
361494
top: .24em;
362495
}
363-
.ui-btn-left {
496+
.ui-btn-left,
497+
.ui-btn-start {
364498
left: .4em;
365499
}
366-
.ui-btn-right {
500+
.ui-rtl .ui-btn-start {
501+
right: .4em;
502+
left: auto;
503+
}
504+
.ui-rtl .ui-ltr .ui-btn-start {
505+
left: .4em;
506+
right: auto;
507+
}
508+
.ui-btn-right,
509+
.ui-btn-end {
367510
right: .4em;
368511
}
369-
.ui-btn-icon-notext.ui-btn-left {
512+
.ui-rtl .ui-btn-end {
513+
left: .4em;
514+
right: auto;
515+
}
516+
.ui-rtl .ui-ltr .ui-btn-end {
517+
right: .4em;
518+
left: auto;
519+
}
520+
.ui-btn-icon-notext.ui-btn-left,
521+
.ui-btn-icon-notext.ui-btn-start {
370522
top: .3125em;
371523
left: .3125em;
372524
}
373-
.ui-btn-icon-notext.ui-btn-right {
525+
.ui-rtl .ui-btn-icon-notext.ui-btn-start {
526+
right: .3125em;
527+
left: auto;
528+
}
529+
.ui-rtl .ui-ltr .ui-btn-icon-notext.ui-btn-start {
530+
left: .3125em;
531+
right: auto;
532+
}
533+
.ui-btn-icon-notext.ui-btn-right,
534+
.ui-btn-icon-notext.ui-btn-end {
374535
top: .3125em;
375536
right: .3125em;
376537
}
538+
.ui-rtl .ui-btn-icon-notext.ui-btn-end {
539+
left: .3125em;
540+
right: auto;
541+
}
542+
.ui-rtl .ui-ltr .ui-btn-icon-notext.ui-btn-end {
543+
right: .3125em;
544+
left: auto;
545+
}
377546

378547
/* Button elements */
379548
button.ui-btn,

css/structure/jquery.mobile.fixedToolbar.css

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,15 @@
1616
padding-top: 0;
1717
}
1818
.ui-header-fixed .ui-btn-left,
19-
.ui-header-fixed .ui-btn-right {
19+
.ui-header-fixed .ui-btn-right,
20+
.ui-header-fixed .ui-btn-start,
21+
.ui-header-fixed .ui-btn-end {
2022
margin-top: 1px;
2123
}
2224
.ui-header-fixed.ui-fixed-hidden .ui-btn-left,
23-
.ui-header-fixed.ui-fixed-hidden .ui-btn-right {
25+
.ui-header-fixed.ui-fixed-hidden .ui-btn-right,
26+
.ui-header-fixed.ui-fixed-hidden .ui-btn-start,
27+
.ui-header-fixed.ui-fixed-hidden .ui-btn-end {
2428
margin-top: 0;
2529
}
2630
.ui-footer-fixed {

0 commit comments

Comments
 (0)