Implement popup autoresizing for Safari

By default, Safari doesn't resize the popup to its content, but it's
possible to set the size pragmatically.
The popup will be resized every time when a change happens in the DOM tree.
This commit is contained in:
Deathamns 2014-10-19 17:36:34 +02:00
parent 775f51a04b
commit f9602fa5a7
3 changed files with 36 additions and 5 deletions

View File

@ -27,8 +27,12 @@
<dict> <dict>
<key>Filename</key> <key>Filename</key>
<string>popup.html</string> <string>popup.html</string>
<key>Height</key>
<real>1</real>
<key>Identifier</key> <key>Identifier</key>
<string>popover</string> <string>popover</string>
<key>Width</key>
<real>1</real>
</dict> </dict>
</array> </array>
<key>Toolbar Items</key> <key>Toolbar Items</key>

View File

@ -27,8 +27,12 @@
<dict> <dict>
<key>Filename</key> <key>Filename</key>
<string>popup.html</string> <string>popup.html</string>
<key>Height</key>
<real>1</real>
<key>Identifier</key> <key>Identifier</key>
<string>popover</string> <string>popover</string>
<key>Width</key>
<real>1</real>
</dict> </dict>
</array> </array>
<key>Toolbar Items</key> <key>Toolbar Items</key>

View File

@ -49,12 +49,35 @@ if (window.chrome) {
// update popover size to its content // update popover size to its content
if (safari.self.identifier === 'popover' && safari.self) { if (safari.self.identifier === 'popover' && safari.self) {
vAPI.updatePopoverSize = function() { (function() {
safari.self.width = document.body.clientWidth; var upadteTimer = null;
safari.self.height = document.body.clientHeight; var resizePopover = function() {
}; if (upadteTimer) {
return;
}
setTimeout(vAPI.updatePopoverSize, 200); upadteTimer = setTimeout(function() {
safari.self.width = document.body.clientWidth;
safari.self.height = document.body.clientHeight;
upadteTimer = null;
}, 50);
};
var mutObs = window.MutationObserver || window.WebkitMutationObserver;
if (mutObs) {
(new mutObs(resizePopover)).observe(document, {
childList: true,
attributes: true,
characterData: true,
subtree: true
});
}
else {
// Safari doesn't support DOMAttrModified
document.addEventListener('DOMSubtreeModified', resizePopover);
}
})();
} }
} }