|
16 | 16 | }).prependTo($wikipage); |
17 | 17 |
|
18 | 18 | // Auto-centering of top-level elements larger than #wikipage's max-width |
19 | | - var wpow = $wikipage.outerWidth(); |
20 | | - var large_elements = []; |
| 19 | + var wpow; |
| 20 | + var large_elements; |
21 | 21 | var detectLargeElement = function() { |
22 | | - var rol = $(this).offset().left - $wikipage.offset().left; |
23 | | - var excess = $(this).outerWidth() + rol - wpow; |
| 22 | + var $e = $(this); |
| 23 | + if ($e.css('float') !== 'none') |
| 24 | + return 0; |
| 25 | + switch ($e.css('position')) { |
| 26 | + case 'absolute': |
| 27 | + case 'fixed': |
| 28 | + return 0; |
| 29 | + } |
| 30 | + var rol = $e.offset().left - $wikipage.offset().left; |
| 31 | + var excess = $e.outerWidth() + rol - wpow; |
24 | 32 | if (excess > 0) { |
25 | | - $(this).data('excess', excess); |
26 | | - $(this).data('rol', rol); |
| 33 | + $e.data('excess', excess); |
| 34 | + $e.data('rol', rol); |
27 | 35 | large_elements.push(this); |
28 | 36 | } |
29 | 37 | return excess; |
30 | 38 | }; |
31 | 39 | var centerLargeElement = function($e, wpleft) { |
32 | | - var shift_left; |
33 | | - var excess = $e.data('excess'); |
34 | | - var rol = $e.data('rol'); |
35 | | - if (excess > rol) |
36 | | - shift_left = rol + (excess - rol) / 2; |
37 | | - else |
38 | | - shift_left = excess; |
39 | | - if (shift_left > wpleft) |
40 | | - shift_left = wpleft; |
| 40 | + var shift_left; |
| 41 | + var excess = $e.data('excess'); |
| 42 | + var rol = $e.data('rol'); |
| 43 | + if (excess > rol) |
| 44 | + shift_left = rol + (excess - rol) / 2; |
| 45 | + else |
| 46 | + shift_left = excess; |
| 47 | + if (shift_left > wpleft) |
| 48 | + shift_left = wpleft; |
41 | 49 |
|
42 | | - $e.css({'margin-left': -shift_left, |
43 | | - 'background': 'rgba(255, 255, 255, .8)'}); |
| 50 | + $e.css('margin-left', -shift_left).addClass('trac-wiki-center'); |
44 | 51 | }; |
45 | 52 | var resetLargeElements = function() { |
46 | | - for (var i = 0; i < large_elements.length; i++) { |
47 | | - $(large_elements[i]).css({'margin-left': 0, 'background': 'none'}); |
48 | | - } |
| 53 | + if (large_elements === undefined) |
| 54 | + return; |
| 55 | + $(large_elements) |
| 56 | + .css('margin-left', '') |
| 57 | + .removeClass('trac-wiki-center'); |
49 | 58 | }; |
50 | 59 | var detectLargeImage = function() { |
51 | 60 | var excess = detectLargeElement.apply(this); |
52 | 61 | if (excess > 0) |
53 | 62 | centerLargeElement($(this), $wikipage.offset().left); |
54 | 63 | }; |
55 | | - $("#wikipage > table").each(detectLargeElement); |
56 | | - $("#wikipage > div").each(detectLargeElement); |
57 | | - $("#wikipage > p > a > img").one("load", detectLargeImage).each( |
58 | | - function() { |
59 | | - if (this.complete) |
60 | | - detectLargeImage.apply(this); |
61 | | - } |
62 | | - ); |
63 | | - |
| 64 | + var detectLargeElements = function() { |
| 65 | + $wikipage.find("> table, > div").each(detectLargeElement); |
| 66 | + $wikipage.find("> p > a > img").one("load", detectLargeImage).each( |
| 67 | + function() { |
| 68 | + if (this.complete) |
| 69 | + detectLargeImage.apply(this); |
| 70 | + } |
| 71 | + ); |
| 72 | + }; |
64 | 73 | var centerLargeElements = function() { |
| 74 | + if (large_elements === undefined) { |
| 75 | + wpow = $wikipage.outerWidth(); |
| 76 | + large_elements = []; |
| 77 | + detectLargeElements(); |
| 78 | + } |
65 | 79 | var wikipage_left = $wikipage.offset().left; |
66 | | - for (var i = 0; i < large_elements.length; i++) |
67 | | - centerLargeElement($(large_elements[i]), wikipage_left); |
| 80 | + $.each(large_elements, function() { |
| 81 | + centerLargeElement($(this), wikipage_left); |
| 82 | + }); |
| 83 | + }; |
| 84 | + var centerLargeElementsIfNarrow = function() { |
| 85 | + if ($content.hasClass('narrow')) |
| 86 | + centerLargeElements(); |
68 | 87 | }; |
69 | | - $(window).resize(centerLargeElements); |
70 | | - centerLargeElements(); |
| 88 | + $(window).resize(centerLargeElementsIfNarrow); |
| 89 | + centerLargeElementsIfNarrow(); |
71 | 90 | }; |
72 | 91 |
|
73 | 92 |
|
|
0 commit comments