| LEFT | RIGHT | 
|---|
| 1 (function() | 1 (function() | 
| 2 { | 2 { | 
| 3   // Safari doesn't adjust the size of the popover automatically to the size | 3   // Safari doesn't adjust the size of the popover automatically to the size | 
| 4   // of its content, like when the ad counter is expanded/collapsed. So we add | 4   // of its content, like when the ad counter is expanded/collapsed. So we add | 
| 5   // event listeners to do so. | 5   // event listeners to do so. | 
| 6   var mayResize = true; | 6   var mayResize = true; | 
| 7   var resizingScheduled = false; | 7   var resizingScheduled = false; | 
| 8 | 8 | 
| 9   var updateSize = function() | 9   var updateSize = function() | 
| 10   { | 10   { | 
| 11     if (mayResize && !resizingScheduled) | 11     if (mayResize && !resizingScheduled) | 
| 12     { | 12     { | 
| 13       setTimeout(function() | 13       setTimeout(function() | 
| 14       { | 14       { | 
| 15         safari.self.width = document.body.scrollWidth; | 15         safari.self.width = document.body.scrollWidth; | 
| 16         safari.self.height = document.body.offsetHeight; | 16         safari.self.height = document.body.offsetHeight; | 
| 17 | 17 | 
| 18         resizingScheduled = false; | 18         resizingScheduled = false; | 
| 19       }, 0); | 19       }, 0); | 
| 20 | 20 | 
| 21       resizingScheduled = true; | 21       resizingScheduled = true; | 
| 22     } | 22     } | 
| 23   }; | 23   }; | 
| 24 | 24 | 
| 25   window.addEventListener("load", function() | 25   window.addEventListener("load", function() | 
| 26   { | 26   { | 
| 27     updateSize(); | 27     updateSize(); | 
| 28 | 28 | 
| 29     var MutationObserver = window.MutationObserver || window.WebKitMutationObser
    ver; | 29     var MutationObserver = window.MutationObserver || window.WebKitMutationObser
    ver; | 
| 30     if (MutationObserver) | 30     if (MutationObserver) | 
| 31     { | 31     { | 
| 32       new MutationObserver(updateSize).observe(document, { | 32       new MutationObserver(updateSize).observe(document, { | 
| 33         childList: true, attributes: true, | 33         childList: true, attributes: true, | 
| 34         characterData: true, subtree: true | 34         characterData: true, subtree: true | 
| 35       }); | 35       }); | 
| 36     } | 36     } | 
| 37     else | 37     else | 
| 38       document.addEventListener("DOMSubtreeModified", updateSize); | 38       document.addEventListener("DOMSubtreeModified", updateSize); | 
| 39   }); | 39   }); | 
| 40 | 40 | 
|  | 41   // when using "white-space: nowrap", the overflown text overlaps the padding | 
|  | 42   // and neither clientWidth nor scrollWidth, we rely on when adjusting the size | 
|  | 43   // of the popover, inlcudes the overlapped area. So we have to use additional | 
|  | 44   // placeholders, in order to preserve padding. Since the dimensions of the | 
|  | 45   // popover are automatically correctly adjusted on Chrome, those placeholders | 
|  | 46   // would add extra empty space and therefore must only be rendered on Safari. | 
|  | 47   var style = document.createElement("style"); | 
|  | 48   style.textContent = ".safari-inline-block { display: inline-block; }"; | 
|  | 49   document.head.appendChild(style); | 
|  | 50 | 
| 41 | 51 | 
| 42   // Safari will load the popover once, and then show it everytime the icon is | 52   // Safari will load the popover once, and then show it everytime the icon is | 
| 43   // clicked. While Chrome loads it everytime you click the icon. So in order to | 53   // clicked. While Chrome loads it everytime you click the icon. So in order to | 
| 44   // make the popover show the right state and details, we have to emulate the | 54   // make the popover show the right state and details, we have to emulate the | 
| 45   // same behavior as on Chrome, by reloading the popover every time it is shown
    . | 55   // same behavior as on Chrome, by reloading the popover every time it is shown
    . | 
| 46   safari.self.addEventListener("popover", function() | 56   safari.self.addEventListener("popover", function() | 
| 47   { | 57   { | 
| 48     mayResize = false; | 58     mayResize = false; | 
| 49     document.documentElement.style.display = "none"; | 59     document.documentElement.style.display = "none"; | 
| 50     document.location.reload(); | 60     document.location.reload(); | 
| (...skipping 14 matching lines...) Expand all  Loading... | 
| 65   // the reloading code above. | 75   // the reloading code above. | 
| 66   window.ext = { | 76   window.ext = { | 
| 67     __proto__: safari.extension.globalPage.contentWindow.ext, | 77     __proto__: safari.extension.globalPage.contentWindow.ext, | 
| 68 | 78 | 
| 69     closePopup: function() | 79     closePopup: function() | 
| 70     { | 80     { | 
| 71       safari.self.hide(); | 81       safari.self.hide(); | 
| 72     } | 82     } | 
| 73   }; | 83   }; | 
| 74 })(); | 84 })(); | 
| LEFT | RIGHT | 
|---|