NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @id WhatsApp Web Background Changer
// @name WhatsApp Web Background Changer
// @namespace https://www.github.com/iamKunal
// @version 3.2.1
// @description Changes the WhatsApp Web Chat Wallpaper/Background. One can even select different wallpapers for different chats.
// @author Kunal Gupta < kunal.gupta@myself.com >
// @icon https://github.com/iamKunal/UserScripts/raw/master/WhatsApp-Web-Background-Changer/assets/wa-bg.png
// @icon64 https://github.com/iamKunal/UserScripts/raw/master/WhatsApp-Web-Background-Changer/assets/wa-bg64.png
// @match https://web.whatsapp.com/
// @grant GM_setValue
// @grant GM_getValue
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js
// ==/UserScript==
//The default Wallpaper to Load
var bgURLold="https://github.com/iamKunal/UserScripts/raw/master/WhatsApp-Web-Background-Changer/assets/default_wallpaper.jpg";
//HTML for The Confirmation Dialog
var dialogHTML=`<div tabindex="-1" class="" style="opacity: 1;"><div tabindex="-1"><div class="backdrop"><div class="popup-container"><div class="popup" style="opacity: 1; transform: scaleX(1) scaleY(1);"><div class="popup-body">
<div class="popup-title">Change Chat Wallpaper</div>
<div class="popup-contents"><span class="emojitext" dir="auto">Which chat would you like to apply this wallpaper to?</span></div></div>
<div class="popup-controls">
<button class="btn-plain popup-controls-item">Cancel</button>
<button class="btn-plain btn-default popup-controls-item">All Chats</button>
<button class="btn-plain btn-default popup-controls-item">This Chat</button>
</div></div></div></div></div></div>`;
(function() {
'use strict';
var checkExist = setInterval(function() {
if (!$('#startup').length) { //Check for Content to Load
clearInterval(checkExist);
getInputReady();
document.onclick= function(event) {
getMenuReady();
updateWP();
};
}
}, 100);
})();
function updateWP(){
var chatName = document.querySelector('.active.chat .chat-body .chat-main .chat-title .emojitext.ellipsify').title;
var bgImage = GM_getValue(chatName,GM_getValue("bgURL",bgURLold));
document.getElementsByClassName("pane-chat-msgs pane-chat-body lastTabIndex")[0].setAttribute("style","background-position: center;background-image: url(" + bgImage+"); -webkit-transition: background-image 0.2s ease-in-out; transition: background-image 0.2s ease-in-out;");
}
function getInputReady(){
var a=document.getElementsByTagName("body")[0];
//node.addEventListener('click',askBG,false);
var input = document.createElement("input");
input.type="file";
input.setAttribute("id","wa-bg-change-input");
input.style.display="none";
input.accept="image/*";
input.onchange=function(){
fr = new FileReader();
fr.onload = function(){
if(input.files!==null){
getDialogInput(fr.result);
}
};
if(input.files!==null){
fr.readAsDataURL(input.files[0]);
}
};
a.appendChild(input);
}
function askBG(){
document.getElementById("wa-bg-change-input").click();
}
function getMenuReady(){
var checkExist = setInterval(function() {
if (document.querySelector("#main > header > div.pane-chat-controls > div > div:nth-child(3) > button")!==null) { //Check for Content to Load
clearInterval(checkExist);
if(document.querySelector("#main > header > div.pane-chat-controls > div > div.menu-item.active > span > div")!==null && document.querySelectorAll("#main > header > div.pane-chat-controls > div > div.menu-item.active > span > div > ul > li").length==5){
lst=document.querySelector("#main > header > div.pane-chat-controls > div > div.menu-item.active > span > div > ul");
ele=document.querySelector("#main > header > div.pane-chat-controls > div > div.menu-item.active > span > div > ul > li").cloneNode();
ele_a=document.querySelector("#main > header > div.pane-chat-controls > div > div.menu-item.active > span > div > ul > li > a").cloneNode();
var cb="Change Background";
ele_a.title=cb;
ele_a.textContent=cb;
ele.addEventListener('click',askBG,false);
ele.addEventListener('mouseover',(function(){ele.style.boxShadow="inset 20px 0px 20px 11px #f4f5f5";}));
ele.addEventListener('mouseout',(function(){ele.style.boxShadow="";}));
ele.appendChild(ele_a);
ele.classList.add("wa-bg-change-button");
ele.setAttribute("style",ele.getAttribute("style")+"background: url(https://github.com/iamKunal/UserScripts/raw/master/WhatsApp-Web-Background-Changer/assets/wa-bg.png); background-repeat: no-repeat; background-size: 25px; background-position-x: 90%; background-position-y: 5px;");
lst.appendChild(ele);
}
}
}, 100);
}
function getDialogInput(result){ // Uses the WhatsApp Web DialogUI
var div = document.createElement("span");
div.id="Custom-Alerter";
div.innerHTML=dialogHTML;
acd=document.querySelector("#app > div");
acd.appendChild(div);
var buttonsPath="#Custom-Alerter > div > div > div > div > div > div.popup-controls";
var buttonsList=document.querySelector(buttonsPath).children;
buttonsList[0].onclick=(function(){ //Cancel
acd.lastChild.remove();
});
buttonsList[1].onclick=(function(){ //All Chats
GM_setValue("bgURL",fr.result);
document.body.click();
acd.lastChild.remove();
});
buttonsList[2].onclick=(function(){ //This Chat
var chatName = document.querySelector('.active.chat .chat-body .chat-main .chat-title .emojitext.ellipsify').title;
GM_setValue(chatName,fr.result);
document.body.click();
acd.lastChild.remove();
});
}