NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name WhatsApp Emoticon // @description Tools yang digunakan untuk mengubah emoticon menjadi emoji berdasarkan dengan emoKey. // @copyright 2018, rzlnhd (https://openuserjs.org/users/rzlnhd) // @license GPL-3.0-or-later; http://www.gnu.org/licenses/gpl-3.0.txt // @icon https://i.ibb.co/pXc8bw4/WA-Emot-Icon.png // @homepageURL https://openuserjs.org/scripts/rzlnhd/WhatsApp_Emoticon // @supportURL https://openuserjs.org/scripts/rzlnhd/WhatsApp_Emoticon/issues // @version 1.3.2 // @date 2020-01-23 // @author Rizal Nurhidayat // @match https://web.whatsapp.com/ // @grant none // @updateURL https://openuserjs.org/meta/rzlnhd/WhatsApp_Emoticon.meta.js // @downloadURL https://openuserjs.org/install/rzlnhd/WhatsApp_Emoticon.user.js // ==/UserScript== // ==OpenUserJS== // @author rzlnhd // ==/OpenUserJS== /* Global Variables */ var emoti = [" :)"," :D"," <:3"," (/)"," :%"," :z"," :p"," :\')"," :\'D"," :L"," :g"," :^"," :v"," :@"," :o"," ^^"," :*"], emoji = ["🙂","😁","😍","🙏","👏","✅","😋","😂","🤣","💪","👻","👆","👇","😡","😱","😊","😘"],version = "v1.3.2", classIn="_3u328" /*input chat*/, i_alt = ["❤","☺"], p_def=1,k_bool=true, c_index=0; /* First Function */ var timer = setInterval(general,1000); function general(){ if(document.getElementsByClassName("app")[0] != null){ document.addEventListener("click", function(){initListener(false)}); document.addEventListener("keyup", function(){initListener(true)}); console.log("WhatsApp Emoticon "+version+" - Free Emoticon!"); console.log("Tambahkan spasi sebelum menuliskan emoKey."); clearInterval(timer); } } /*===================================== Initial Function : Set Listener =====================================*/ function initListener(bool){ var obj=document.querySelector("div."+classIn+".copyable-text.selectable-text"); if(obj!=null){ p_def = getCaretPosition(obj);k_bool=bool; obj.addEventListener("input", eEmoji) }; } /*===================================== Main Function : Change Emoticon to Emoji. =====================================*/ function eEmoji(e){ var i,html = this.innerHTML,pos,j, emo=this.getElementsByTagName("img"); for(i=0;i<emoti.length;i++){ if(html.includes(emoti[i])){ html=html.replace(emoti[i],emoji[i]); j=i; } } pos=p_def; if(emo.length!=0){ j=-2; for(i=0;i<i_alt.length;i++){ if(emo[0].getAttributeNode("alt").value===i_alt[i]){ j=-1;if(i==0 && k_bool){j=-3;} } } for(i=0;i<emo.length;i++){ html=html.replace(emo[i].outerHTML,emo[i].getAttributeNode("alt").value) if(i>0){pos=html.length;j=-3;} } this.innerHTML=html; setCaretPosition(this,pos,j); } else if(this.innerHTML!=html){ this.innerHTML=html; setCaretPosition(this,pos,j); } } /*===================================== Utilities Function : Get and Set Cursor Position =====================================*/ /* Get Cursor Position */ function getCaretPosition(el) { var caretPos = 0, sel, range, i; if (window.getSelection) { sel = window.getSelection(); if (sel.rangeCount) { range = sel.getRangeAt(0); for(i=0;i<el.childNodes.length;i++){ if(range.commonAncestorContainer.nodeValue===el.childNodes[i].nodeValue){ c_index=i; } } if (range.commonAncestorContainer.parentNode == el) { caretPos = range.endOffset; } } } else if (document.selection && document.selection.createRange) { range = document.selection.createRange(); if (range.parentElement() == el) { var tempEl = document.createElement("span"); el.insertBefore(tempEl, el.firstChild); var tempRange = range.duplicate(); tempRange.moveToElementText(tempEl); tempRange.setEndPoint("EndToEnd", range); caretPos = tempRange.text.length; } } return caretPos; } /* Set Cursor Position */ function setCaretPosition(el, p, i){ var range,sel; if(i==2||i==3||i==7||i==8){p-=2;} else if(i==-1){p+=1;}else if(i==-2){p+=2;} else if(i==-3){p=p;}else{p-=1;} if(document.createRange){ range = document.createRange(); sel = window.getSelection(); range.setStart(el.childNodes[c_index], p); range.collapse(true); sel.removeAllRanges(); sel.addRange(range); } }