Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Side by Side Diff: safari/ext/popup.js

Issue 5083364310646784: Got rid of strange animation when the bubble is resized while reloading on Safari (Closed)
Patch Set: Created Jan. 16, 2014, 11:07 p.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 (function() 1 (function()
2 { 2 {
3 // Safari will load the popover once, and then show it everytime the icon is 3 // Safari will load the popover once, and then show it everytime the icon is
4 // clicked. While Chrome loads it everytime you click the icon. So in order to 4 // clicked. While Chrome loads it everytime you click the icon. So in order to
5 // make the popover show the right state and details we have to reload it 5 // make the popover show the right state and details we have to reload it
6 // everytime it is shown for a different tab. Also we have to reload the 6 // everytime it is shown for a different tab. Also we have to reload the
7 // popover when the background page wasn't ready yet, since we have to access 7 // popover when the background page wasn't ready yet, since we have to access
8 // the background page in the popover. 8 // the background page in the popover.
9 var backgroundPage = safari.extension.globalPage.contentWindow; 9 var backgroundPage = safari.extension.globalPage.contentWindow;
10 var readyState = backgroundPage.document.readyState; 10 var readyState = backgroundPage.document.readyState;
11 var activeTab = safari.application.activeBrowserWindow.activeTab; 11 var activeTab = safari.application.activeBrowserWindow.activeTab;
12 var stopResizing = function() {};
12 13
13 safari.self.addEventListener("popover", function() 14 safari.self.addEventListener("popover", function()
14 { 15 {
15 if (activeTab != safari.application.activeBrowserWindow.activeTab || readySt ate != "complete") 16 if (activeTab != safari.application.activeBrowserWindow.activeTab || readySt ate != "complete")
16 { 17 {
18 stopResizing();
17 document.documentElement.style.display = "none"; 19 document.documentElement.style.display = "none";
18 document.location.reload(); 20 document.location.reload();
19 } 21 }
20 }); 22 });
21 23
22 24
23 // Safari doesn't adjust the size of the popover automatically to the size 25 // Safari doesn't adjust the size of the popover automatically to the size
24 // of its content, like when the ad counter is expanded/collapsed. So we add 26 // of its content, like when the ad counter is expanded/collapsed. So we add
25 // event listeners to do so. 27 // event listeners to do so.
26 var updateSize = function() 28 var updateSize = function()
27 { 29 {
28 safari.self.width = document.body.offsetWidth; 30 safari.self.width = document.body.offsetWidth;
29 safari.self.height = document.body.offsetHeight; 31 safari.self.height = document.body.offsetHeight;
30 }; 32 };
31 33
32 window.addEventListener("load", function() 34 window.addEventListener("load", function()
33 { 35 {
34 updateSize(); 36 updateSize();
35 37
36 var MutationObserver = window.MutationObserver || window.WebKitMutationObser ver; 38 var MutationObserver = window.MutationObserver || window.WebKitMutationObser ver;
37 if (MutationObserver) 39 if (MutationObserver)
38 { 40 {
39 new MutationObserver(updateSize).observe(document, { 41 var mo = new MutationObserver(updateSize);
42 mo.observe(document, {
40 childList: true, attributes: true, 43 childList: true, attributes: true,
41 characterData: true, subtree: true 44 characterData: true, subtree: true
42 }); 45 });
46
47 stopResizing = function()
48 {
49 mo.disconnect();
50 };
43 } 51 }
44 else 52 else
53 {
45 document.addEventListener("DOMSubtreeModified", updateSize); 54 document.addEventListener("DOMSubtreeModified", updateSize);
55
56 stopResizing = function()
57 {
58 document.removeEventListener("DOMSubtreeModified", updateSize);
59 };
60 }
46 }); 61 });
47 62
48 63
49 // Safari doesn't hide popovers automatically, when we change the active tab 64 // Safari doesn't hide popovers automatically, when we change the active tab
50 // programmatically, like when the options link is clicked. So we add an event 65 // programmatically, like when the options link is clicked. So we add an event
51 // listener to do so. 66 // listener to do so.
52 safari.application.addEventListener("activate", function() 67 safari.application.addEventListener("activate", function()
53 { 68 {
54 safari.self.hide(); 69 safari.self.hide();
55 }, true); 70 }, true);
56 71
57 72
58 // import ext into the javascript context of the popover. This code might fail , 73 // import ext into the javascript context of the popover. This code might fail ,
59 // when the background page isn't ready yet. So it is important to put it belo w 74 // when the background page isn't ready yet. So it is important to put it belo w
60 // the reloading code above. 75 // the reloading code above.
61 window.ext = { 76 window.ext = {
62 __proto__: backgroundPage.ext, 77 __proto__: backgroundPage.ext,
63 closePopup: function() 78 closePopup: function()
64 { 79 {
65 safari.self.hide(); 80 safari.self.hide();
66 } 81 }
67 }; 82 };
68 window.TabMap = backgroundPage.TabMap; 83 window.TabMap = backgroundPage.TabMap;
69 })(); 84 })();
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld