-
Notifications
You must be signed in to change notification settings - Fork 11
Expand file tree
/
Copy pathtoggleGifAnimation.html
More file actions
35 lines (33 loc) · 9.14 KB
/
toggleGifAnimation.html
File metadata and controls
35 lines (33 loc) · 9.14 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<!DOCTYPE HTML>
<meta charset="utf-8"/>
<title>Toggle GIF Animation [0.3.0 - 2020-02-25]</title>
<body>
<a href="custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EToggle%20GIF%20Animation%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABblBMVEUAAADq6urr6+vm5ubnuaPgTC2enp7l5eWbm5vo6Ojp6emampr0Zkf2WjjupJPwUjCYmJjp6emZmZnpSSeXl5fp6enoVzjiPx2VlZXn5+fkTi7bNhSUlJTnVjfdORfVLgxtbW2tra3W1tbjUDHaNhTLLQ16enqjo6OkpKSpqamqqqqqqqqqqqqqqqq3dWjBSjLJKwzJKwvARCu1aVqkpKSkpKTORBH////j4+Pe3t7g4ODa2tr7cVLo6OjNNBXc3Nzp6eni4uLf39/n5+fhTi/8clPdSSvZ2dnoWDnh4eHdZi3Y2Nj4bU/ONRbvqJj8bk3ouK3sXT7X19fk5OT7gWLgTS/uYULdTiHtWTHYpJnVPiDoZEbAWEH8gWLq6urONBb1lH7qhW/gYiXnuaPUhnfQOBnrXD3d3d3bYSa7Lgq8Lwrm5ub4d1ntvbLgdV7fc13b29vbcVzoVznZRSfFOQ2dnZ36Yj/LYkv7cVO8MAsi43WXAAAANnRSTlMA19fn/v0e5zfnrTf9UPKjN9I35jfn/eY35/ajN/bmUAE4/vnpfQMTZpKkrLa80ef4996yciec+O5uAAAA5ElEQVR4Xj3M1XLDMBBA0VVTJ2nKzMzMIrPDjGVmZv77rt2Z3oeV9oxGAOBvJoRUuRESAqhO/Xd2aLUD0GvGWIqd4qSWVYPAKMa8Q9c98NZ394Ue7kag7pXdspsfGr7z4af0r63tz/zxQwCwIOflcm4zls3GMg0u1CZtXii+PXEeva+rR2iRMnkSebTt6MGR0ojQJBzndUPK74rhKK0IbeaViCQE7kJ0dCJ0qc/mS0KrGObHV08vQl86Ht/Z3TNUdb9/YBBgaHikVEqfX1xq2ujY+ATA5NT0zOzc/MLi0vLK6tr6L68zNH+FfEIKAAAAAElFTkSuQmCC%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B//%20http%3A//infocatcher.ucoz.net/js/cb/toggleGifAnimation.js%0A//%20https%3A//forum.mozilla-russia.org/viewtopic.php%3Fid%3D57977%0A//%20https%3A//github.com/Infocatcher/Custom_Buttons/tree/master/Toggle_GIF_Animation%0A%0A//%20Toggle%20GIF%20Animation%20button%20for%20Custom%20Buttons%0A//%20%28code%20for%20%22initialization%22%20section%29%0A%0A//%20%28c%29%20Infocatcher%202013-2020%0A//%20version%200.3.0%20-%202020-02-25%0A%0A//%20Tip%3A%20use%20image.animation_mode%20%3D%20none%20to%20disable%20animation%20by%20default%0A//%20http%3A//kb.mozillazine.org/Firefox_%3A_Tips_%3A_Animated_Images%23Image_animation_preference%0A%0Avar%20gifAnimation%20%3D%20this.gifAnimation%20%3D%20%7B%0A%09//%20Note%3A%20we%20use%20original%20button%27s%20icon%20to%20indicate%20disabled%20state%0A%09iconEnabled%3A%20%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABlElEQVR4nI2SsUsCcRTHv+/yJGzS4kCRWqqpQ5xahYwER/8CGxoPh2rxP6itWXLQKQiXGiQh3JrUKYgIogbvQBwMTTB/r8XfeXde5BcOfvd+733e9/d+P2JmAEC5XN7MZrN3RKRiJiKCVzKfmZ81TctRt14Ro9uLxUwfhXLnWEkeSYipaVoUrXSYX/O77NTbic7MzO/HO654Kx1my7LYsiw2TbPLzAgAwPb1C9qHkYWO/Y8etgDXnjyClOItSj707fX38MeOOePMbIMCmHVwJtiA0RQA0EisgRRCZCPoKgYA6tYrontpLDXE6NkVWD+whxiLxaIkaaVSaT+TyTwB8+v75xrNeDweDTg3hBCuIu/A/EAugPyWdLAIkA4k5C8HzrgvwFvsB1twIIRwAZxyAprNJgaDAQA0CoXC/CFJB0IITKdTe+39b7fb6HQ6N7VaLW87MAyDUqkUCSGYZu39BggAk8nkMZFInOq6HioWi0NiZlSr1XUiyqmqukdEEQCrAEIAgo5aAeBrPB6PFEXpAfgEcP8LWVgYRnUM0zMAAAAASUVORK5CYII%3D%22%2C%0A%0A%09remote%3A%20window.gMultiProcessBrowser%2C%0A%09button%3A%20this%2C%0A%09getUtils%3A%20function%28win%29%20%7B%0A%09%09return%20win.windowUtils%20%7C%7C%20win.QueryInterface%28Components.interfaces.nsIInterfaceRequestor%29%0A%09%09%09.getInterface%28Components.interfaces.nsIDOMWindowUtils%29%3B%0A%09%7D%2C%0A%09get%20mode%28%29%20%7B%0A%09%09var%20utils%20%3D%20this.getUtils%28content%29%3B%0A%09%09return%20utils.imageAnimationMode%3B%0A%09%7D%2C%0A%09set%20mode%28mode%29%20%7B%0A%09%09this.setMode%28content%2C%20mode%29%3B%0A%09%09this.updateState%28mode%29%3B%0A%09%7D%2C%0A%09toggle%3A%20function%28%29%20%7B%0A%09%09if%28this.remote%29%20%7B%0A%09%09%09this.toggleRemote%28%29%3B%0A%09%09%09return%3B%0A%09%09%7D%0A%09%09var%20ic%20%3D%20Components.interfaces.imgIContainer%3B%0A%09%09this.mode%20%3D%20this.mode%20%3D%3D%20ic.kNormalAnimMode%0A%09%09%09%3F%20ic.kDontAnimMode%0A%09%09%09%3A%20ic.kNormalAnimMode%3B%0A%09%7D%2C%0A%09toggleRemote%3A%20function%28%29%20%7B%0A%09%09this.loadFrameScript%28function%28%29%20%7B%0A%09%09%09var%20ic%20%3D%20Components.interfaces.imgIContainer%3B%0A%09%09%09var%20mode%20%3D%20content.windowUtils.imageAnimationMode%20%3D%3D%20ic.kNormalAnimMode%20%3F%20ic.kDontAnimMode%20%3A%20ic.kNormalAnimMode%3B%0A%09%09%09%28function%20setMode%28win%29%20%7B%0A%09%09%09%09try%20%7B%0A%09%09%09%09%09win.windowUtils.imageAnimationMode%20%3D%20mode%3B%0A%09%09%09%09%7D%0A%09%09%09%09catch%28e%29%20%7B%20//%20NS_ERROR_NOT_AVAILABLE%0A%09%09%09%09%7D%0A%09%09%09%09Array.prototype.forEach.call%28win.frames%2C%20setMode%29%3B%0A%09%09%09%7D%29%28content%29%3B%0A%09%09%09sendAsyncMessage%28%22CB%3AToggleGIFAnimation%3Amode%22%2C%20mode%29%3B%0A%09%09%7D%29%3B%0A%09%7D%2C%0A%09setMode%3A%20function%28win%2C%20mode%29%20%7B%0A%09%09Array.prototype.forEach.call%28win.frames%2C%20function%28win%29%20%7B%0A%09%09%09this.setMode%28win%2C%20mode%29%3B%0A%09%09%7D%2C%20this%29%3B%0A%09%09var%20utils%20%3D%20this.getUtils%28win%29%3B%0A%09%09try%20%7B%0A%09%09%09utils.imageAnimationMode%20%3D%20mode%3B%0A%09%09%7D%0A%09%09catch%28e%29%20%7B%20//%20NS_ERROR_NOT_AVAILABLE%0A%09%09%7D%0A%09%7D%2C%0A%09updateState%3A%20function%28mode%29%20%7B%0A%09%09if%28mode%20%3D%3D%3D%20undefined%20%26%26%20this.remote%29%20%7B%0A%09%09%09this.updateStateRemote%28%29%3B%0A%09%09%09return%3B%0A%09%09%7D%0A%09%09if%28mode%20%3D%3D%3D%20undefined%29%0A%09%09%09mode%20%3D%20this.mode%3B%0A%09%09var%20btn%20%3D%20this.button%3B%0A%09%09var%20icon%20%3D%20btn.icon%0A%09%09%09%7C%7C%20btn.ownerDocument.getAnonymousElementByAttribute%28btn%2C%20%22class%22%2C%20%22toolbarbutton-icon%22%29%3B%0A%09%09icon.src%20%3D%20mode%20%3D%3D%20Components.interfaces.imgIContainer.kDontAnimMode%0A%09%09%09%3F%20btn.image%0A%09%09%09%3A%20this.iconEnabled%3B%0A%09%7D%2C%0A%09updateStateRemote%3A%20function%28%29%20%7B%0A%09%09this.loadFrameScript%28function%28%29%20%7B%0A%09%09%09try%20%7B%0A%09%09%09%09var%20mode%20%3D%20content.windowUtils.imageAnimationMode%3B%0A%09%09%09%7D%0A%09%09%09catch%28e%29%20%7B%20//%20NS_ERROR_NOT_AVAILABLE%0A%09%09%09%7D%0A%09%09%09sendAsyncMessage%28%22CB%3AToggleGIFAnimation%3Amode%22%2C%20mode%29%3B%0A%09%09%7D%29%3B%0A%09%7D%2C%0A%09loadFrameScript%3A%20function%28fn%29%20%7B%0A%09%09var%20code%20%3D%20%22%28%22%20+%20fn%20+%20%22%29%28%29%3B%22%3B%0A%09%09var%20data%20%3D%20%22data%3Aapplication/javascript%2C%22%20+%20encodeURIComponent%28code%29%3B%0A%09%09var%20mm%20%3D%20gBrowser.selectedBrowser.messageManager%3B%0A%09%09var%20_this%20%3D%20this%3B%0A%09%09mm.addMessageListener%28%22CB%3AToggleGIFAnimation%3Amode%22%2C%20function%20receiveMessage%28msg%29%20%7B%0A%09%09%09mm.removeMessageListener%28%22CB%3AToggleGIFAnimation%3Amode%22%2C%20receiveMessage%29%3B%0A%09%09%09if%28msg.data%20%21%3D%20null%29%0A%09%09%09%09_this.updateState%28msg.data%29%3B%0A%09%09%7D%29%3B%0A%09%09mm.loadFrameScript%28data%2C%20false%29%3B%0A%09%7D%2C%0A%09_updateStateTimer%3A%200%2C%0A%09updateStateDelayed%3A%20function%28%29%20%7B%0A%09%09if%28this._updateStateTimer%29%0A%09%09%09return%3B%0A%09%09this._updateStateTimer%20%3D%20setTimeout%28function%28_this%29%20%7B%0A%09%09%09_this._updateStateTimer%20%3D%200%3B%0A%09%09%09_this.updateState%28%29%3B%0A%09%09%7D%2C%2020%2C%20this%29%3B%0A%09%7D%0A%7D%3B%0A%0Athis.setAttribute%28%22oncommand%22%2C%20%22this.gifAnimation.toggle%28%29%3B%22%29%3B%0A%0Avar%20progressListener%20%3D%20%7B%0A%09onLocationChange%3A%20function%28aWebProgress%2C%20aRequest%2C%20aLocation%29%20%7B%0A%09%09gifAnimation.updateStateDelayed%28%29%3B%0A%09%7D%0A%7D%3B%0A//progressListener.onStateChange%20%3D%0A//%09progressListener.onProgressChange%20%3D%0A//%09progressListener.onStatusChange%20%3D%0A//%09progressListener.onSecurityChange%20%3D%20function%20dummy%28%29%20%7B%7D%3B%0A%0AgifAnimation.updateStateDelayed%28%29%3B%0AgBrowser.addProgressListener%28progressListener%29%3B%0Athis.onDestroy%20%3D%20function%28%29%20%7B%0A%09gBrowser.removeProgressListener%28progressListener%29%3B%0A%7D%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bif%28%21event.target%29%20//%20Button%27s%20hotkey%20pressed%0A%09this.gifAnimation.toggle%28%29%3B%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E"
>Install</a>
| <a href="https://github.com/Infocatcher/Custom_Buttons/tree/master/Toggle_GIF_Animation">Source</a>
| <a href="https://github.com/Infocatcher/Custom_Buttons#usage">Instructions</a>
<script type="text/javascript">
var a = document.getElementsByTagName("a")[0];
a.title = document.title;
if(/%3Cimage%3E%3C%21%5BCDATA%5B(data%3A\S+)%5D%5D%3E%3C\/image%3E/.test(a.href)) {
var icon = decodeURIComponent(RegExp.$1);
var img = document.createElement("img");
img.src = icon;
img.alt = "";
img.style.verticalAlign = "middle";
img.style.marginRight = "4px";
img.style.border = "none";
a.insertBefore(img, a.firstChild);
var link = document.createElement("link");
link.rel = "shortcut icon";
link.href = icon;
document.documentElement.insertBefore(link, document.documentElement.firstChild);
}
</script>
<script type="text/javascript" src="https://infocatcher.github.io/Custom_Buttons/viewCustomButton.js"></script>
<script type="text/javascript">
if("viewCustomButtonCode" in window) setTimeout(function() {
viewCustomButtonCode(a.href);
}, 0);
</script>
</body>