특정 닉네임의 게시글 색상변경 및 클릭시 물어보기 & 댓글차단 2.0 부터 버그 픽스는 맨마지막 버전을따름 중간버전은 기능 추가/업데이트
// ==UserScript== // @name 보배드림 닉네임차단 // @author 보배이용자 // @namespace 없다 // @version 2.2.4 // @include *://*bobaedream.co.kr/* // @description 특정 닉네임의 게시글 색상변경 및 클릭시 물어보기 & 댓글차단 2.0 부터 버그 픽스는 맨마지막 버전을따름 중간버전은 기능 추가/업데이트 // @require http://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js // @grant GM.setValue // @grant GM.getValue // @grant GM.listValues // @grant GM.deleteValue // @noframes // ==/UserScript== var blockUserLists= [ '이웃과함께','계몽군주김정은','관종식물','와앙강우','THENEWK7PS','비깨도','문재인이머했너' ]; var mystoreg if(window.localStorage.getItem('enc_id')==null?true:false){ mystoreg = window.localStorage; } window.Object['cueent_enc_id']=""; window.Object['current_color']=""; window.Object['non_pop_check']= 0; let gm_before,gm_after,list_count; (async () => { list_count = await GM.listValues(); if(list_count.some(function(arrayValue){return "enc_id" === arrayValue;})){//차단 리스트 gm_before = await GM.getValue('enc_id'); console.log('Greasemonkey get has run', gm_before); if(gm_before.length != 0){ let list = []; if(localStorage.getItem('enc_id')==null?true:false){ localStorage.getItem('enc_id',[]); }else{ if(JSON.parse(localStorage.getItem('enc_id')).length!=0){ list = JSON.parse(localStorage.getItem('enc_id')); list.forEach(function(item,index){//공란제거 if(item+"".length==0){ list.splice(index,1); }else{ list[index]= decodeURIComponent(item);//인코딩오류 수정 } }); gm_before = await GM.setValue('enc_id', JSON.parse(JSON.stringify(remove_duplicates_safe(list)))); gm_after = await GM.getValue('enc_id'); //localStorage.setItem('enc_id', JSON.stringify(gm_after)); console.log('Greasemonkey set has run', gm_after); }else{ gm_after = await GM.getValue('enc_id'); localStorage.setItem('enc_id', JSON.stringify(gm_after)); console.log('Greasemonkey set localstorage has run', gm_after); } } }else{ } } if(!list_count.some(function(arrayValue){return "color" === arrayValue;})){ GM.setValue('color',"none");//기본 색상정보 } if(list_count.some(function(arrayValue){return "color" === arrayValue;})){ gm_before = await GM.getValue('color'); console.log('Greasemonkey color get has run', gm_before); if(gm_before=="none"){ Object['current_color'] = 'none'; }else{ Object['current_color'] = gm_before; } } if(!list_count.some(function(arrayValue){return "non_pop_check" === arrayValue;})){ GM.setValue('non_pop_check',0);//기본 체크정보 } if(list_count.some(function(arrayValue){return "non_pop_check" === arrayValue;})){ gm_before = await GM.getValue('non_pop_check'); console.log('Greasemonkey non_pop_check get has run', gm_before); if(gm_before==0){ Object['non_pop_check'] = 0; }else{ Object['non_pop_check'] = gm_before; } } // Note awaiting the set -- required so the next get sees this set. //await GM.setValue('count', gm_before + 1); // Get the value again, just to demonstrate order-of-operations. })(); //회원아이디 클릭 이베트 감지 설정 var config = { childList: true }; let add_ct=0; $(document).ready(function(){ waitForKeyElements("head",function(){ addGlobalStyle(".modal { display: none; /* Hidden by default */ position: fixed; /* Stay in place */ z-index: 900; /* Sit on top */ padding-top: 100px; /* Location of the box */ left: 0; top: 0; width: 100%; /* Full width */ height: 100%; /* Full height */ overflow: auto; /* Enable scroll if needed */ background-color: rgb(0,0,0); /* Fallback color */ background-color: rgba(0,0,0,0.4); /* Black w/ opacity */}" +".modal-content { background-color: #fefefe; margin: auto; padding: 20px; border: 1px solid #888; width: 50%;}" +".close { color: #aaaaaa; float: right; font-size: 28px; font-weight: bold;}" +".close:hover,.close:focus { color: #000; text-decoration: none; cursor: pointer;}"); modal_alert("",0); }); //회원아이디 클릭 이벤트 감지 타겟 waitForKeyElements("#bobaeHead > div.top-container > div.component > div.top-util-wrapper",function(){ var colorSet = '<div style=\"float: left;padding-top: 19px !important;height: 23px;line-height: 23px;margin-right: 20px;\">'; let color = Object['current_color']; if(color == "none"){ colorSet +='<select id=\"color_set\" onchange=\"Object.fn_colorset(this);\" style=\"background-color: rgba(200,200,0,0.5);\">'; }else{ colorSet +='<select id=\"color_set\" onchange=\"Object.fn_colorset(this);\" style=\"background-color: '+color+';\">'; } colorSet +='<option value=\"none\" '+(Object['current_color']=="none"?'selected':'')+'>선택</option>'; colorSet +='<option value=\"rgba(255,0,0,0.5)\" style=\"background: rgba(255,0,0,0.5);\"'+(Object['current_color']=="rgba(255,0,0,0.5)"?'selected':'')+'>빨강</option>'; colorSet +='<option value=\"rgba(0,255,0,0.5)\" style=\"background: rgba(0,255,0,0.5);\"'+(Object['current_color']=="rgba(0,255,0,0.5)"?'selected':'')+'>초록</option>'; colorSet +='<option value=\"rgba(0,0,255,0.5)\" style=\"background: rgba(0,0,255,0.5);\"'+(Object['current_color']=="rgba(0,0,255,0.5)"?'selected':'')+'>파랑</option>'; colorSet +='</select>'; colorSet +='</div>'; var noti_button = "<INPUT type='button' value='공지열기' style='font-size:small;margin-right: 20px;' onclick='Object.fn_modal_view();'>"; var bkck_up = "<a href=\"javascript:Object.download('차단리스트_.json','application/json');\" style=\"margin-right: 20px;\">백업</a>"; var restore = "<a href=\"javascript:Object.openFile();\" style=\"margin-right: 20px;\">복원</a>"; var range = document.createRange(); range.selectNode(document.getElementsByTagName("div").item(0)); var documentFragment1 = range.createContextualFragment(colorSet); var documentFragment2 = range.createContextualFragment(noti_button); var documentFragment3 = range.createContextualFragment(bkck_up); var documentFragment4 = range.createContextualFragment(restore); //.top-util-wrapper document.querySelector("#bobaeHead > div.top-container > div.component > div.top-util-wrapper").prepend(documentFragment1); document.querySelector("#bobaeHead > div.top-container > div.component > div.top-util-wrapper > div").prepend(documentFragment2); document.querySelector("#bobaeHead > div.top-container > div.component > div.top-util-wrapper > div").prepend(documentFragment3); document.querySelector("#bobaeHead > div.top-container > div.component > div.top-util-wrapper > div").prepend(documentFragment4); }); waitForKeyElements("#submenusel", function(){ var observer_target = document.getElementById('submenusel'); waitForKeyElements("#cmt_reply > li > dl > dt > span.name",function(){ var target1 = document.querySelectorAll("#cmt_reply > li > dl > dt > span.name"); for(var i=0;i<target1.length;i++){ target1[i].addEventListener("mouseenter",function(event){ add_ct=0; Object["cueent_enc_id"]= event.target.firstElementChild.attributes.item('onclick').nodeValue.split("','")[0].split("('")[1]; }); //코멘트 } }); waitForKeyElements("#boardlist > tbody > tr > td.author02",function(){ var target2 = document.querySelectorAll("#boardlist > tbody > tr > td.author02"); for(var i=0;i<target2.length;i++){ target2[i].addEventListener("mouseenter",function(event){ add_ct=0; Object["cueent_enc_id"]= event.target.firstElementChild.attributes.item('onclick').nodeValue.split("');")[0].split("('")[1]; }); //리스트게시물 } }); waitForKeyElements("#boardlist > tbody > tr > td.author",function(){ var target3 = document.querySelectorAll("#boardlist > tbody > tr > td.author"); for(var i=0;i<target3.length;i++){ target3[i].addEventListener("mouseenter",function(event){ add_ct=0; Object["cueent_enc_id"]= event.target.firstElementChild.attributes.item('onclick').nodeValue.split("');")[0].split("('")[1]; });//뷰어+리스트 게시물 } }); var observer = new MutationObserver( function(mutations) { mutations.forEach( function(mutation) { if(add_ct ==0){ if(mutation.type=="childList"){ //menu_add(Object["cueent_enc_id"]); $("#submenusel > ol").prepend("<li style='width:130px;height:20px;text-align:left;padding-left:10px;color:4c4c4c;'><a href=\"javascript:Object.fn_save('"+decodeURIComponent(Object["cueent_enc_id"])+"');\">차단하기</a></li>"); $("#submenusel > ol").prepend("<li style='width:130px;height:20px;text-align:left;padding-left:10px;color:4c4c4c;'><a href=\"javascript:Object.fn_delete('"+decodeURIComponent(Object["cueent_enc_id"])+"');\">차단해재</a></li>"); setTimeout(function(){ var height =0; $("#submenusel > ol > li").each(function(index,item){height +=item.offsetHeight;}); $("#submenusel").height((height+20)+"px"); },500); add_ct++; } } }); }); observer.observe(observer_target, config); }); setlocalstoreg(blockUserLists); }); function addGlobalStyle(css) { var head, style; head = document.getElementsByTagName('head')[0]; if (!head) { return; } style = document.createElement('style'); style.type = 'text/css'; style.innerHTML = css.replace(/;/g, ' !important;'); head.appendChild(style); } function getStyle(obj, jsprop, cssprop) { if (obj.currentStyle) { return obj.currentStyle[jsprop]; } else if (window.getComputedStyle) { return document.defaultView.getComputedStyle(obj, null).getPropertyValue(cssprop); } else { return null; } } window.Object["openFile"] =function openFile(){ var input = document.createElement("input"); console.log(input); input.type = "file"; // html일 경우 text/html로 input.accept = "text/plain, application/json"; document.body.appendChild(input); input.style.display = 'none'; input.click(); input.onchange = function (event) { processFile(event.target.files[0]); }; } function processFile(file){ var reader = new FileReader(); reader.readAsText(file,"euc-kr"); reader.onload = function () { var list = reader.result.split(","); list.forEach(function(item,index){//공란제거 if(item+"".length==0){ list.splice(index,1); }else{ list[index]= decodeURIComponent(item);//인코딩오류 수정 } }); localStorage.setItem('enc_id', JSON.stringify(remove_duplicates_safe(list))); alert("복구완료"); setGM(list); }; } window.Object["download"] = function download(name, type){ var text = JSON.parse(localStorage.getItem('enc_id')); var file = new Blob([text], {type: type}); var isIE = /*@cc_on!@*/false || !!document.documentMode; if (isIE){ window.navigator.msSaveOrOpenBlob(file, name); }else{ var a = document.createElement('a'); document.body.appendChild(a); a.style.display = 'none'; a.href = URL.createObjectURL(file); a.download = name; a.click(); } } function modal_alert(msg,time){ var The_moDal,Modal_content,Modla_content_child1,Modal_content_child1_text,Modla_content_child2,Modal_content_child2_text,non_pop_check,non_pop_check_label; if(msg==""){ msg = "간단 사용설명서(로그인 안해도 쓸수있어요)"; msg +="\n안녕하세요 보배드림 사용자 스크립트를 제작한 러브C 입니다."; msg +="\n① 게시물 표시 색상은 상단 로그인버튼 옆에 있는 셀렉트를 이용하시면 변경(선택후 새로고침시 적용)으로 가능합니다."; msg +="\n^^^별도선택을 안할경우 디폴트색상으로 지정됩니다."; msg +="\n② 사용자 닉네임이 표시되는 게시물, 댓긋 에서 사용자를 클릭하면 \"차단해재\"/\"차단하기\" 를이용하여 차단여부를 선택할수있습니다."; msg +="\n^^^특정 사용자의 커뮤니티 페이지는 지원하지안습니다. 해당매뉴로 한번등록시 닉네임을 바꿔도 작동합니다."; msg +="\n③ 이 도움말은 아래 체크버튼을 체크하면 더이상 자동으로 뜨지않습니다 필요시 상단 공지열기 버튼을 이용해 열수있습니다."; msg +="\n^^^공지열기 버튼을 이용 열었을경우 체크를 해재하면 자동으로 뜨도록 변경됩니다."; msg +="\n④ 자바스크립트 기반으로 작성하였습니다. 문의사항은 보배드림 쪽지로 보내시면됩니다."; msg +="\n^^^혼자 개발하고 테스트 하다보니..버그가 있을수도 있습니다.."; msg +="\n-------신규기능추가---------20201127"; msg +="\n1.브라우저를 여러게 또는 PC가 여러대일경우 차단사용자 리스트를 파일로 백업/복원 기능추가하였습니다."; }else{ msg = msg; } if(document.querySelector("#myModal")==null?true:false){ The_moDal = document.createElement('DIV'); The_moDal.setAttribute("id","myModal"); The_moDal.setAttribute("class","modal"); The_moDal.onclick = function(event){ if (event.target == document.querySelector("#myModal")) { document.querySelector("#myModal").style.setProperty("display", "none", "important"); } } Modal_content = document.createElement('DIV'); Modal_content.setAttribute("class","modal-content"); Modla_content_child1 = document.createElement('SPAN'); Modla_content_child1.setAttribute("class","close"); Modal_content_child1_text = document.createTextNode( '×' ); Modla_content_child1.append(Modal_content_child1_text); Modla_content_child1.onclick = function(){ document.querySelector("#myModal").style.setProperty("display", "none", "important") } Modal_content.append(Modla_content_child1); Modla_content_child2 = document.createElement('P'); Modla_content_child2.setAttribute("style","line-height: 20px !important;font-weight: bold !important;"); msg.split("\n").forEach(function(item,index){ Modal_content_child2_text = document.createTextNode(item.replace(/\^/gi,"\u00A0")); Modla_content_child2.append(Modal_content_child2_text); Modla_content_child2.append(document.createElement('br')); }); Modal_content.append(Modla_content_child2); non_pop_check_label = document.createElement("LABEL"); non_pop_check_label.setAttribute("style","float: inline-end !important;"); non_pop_check_label.append(document.createTextNode("더이상 열지않음")); non_pop_check = document.createElement("input"); non_pop_check.id = "non_pop_check"; non_pop_check.checked = Object['non_pop_check']==0?false:true; non_pop_check.type="checkbox"; non_pop_check.onchange = function(){ Object.fn_non_pop_check(); } non_pop_check_label.append(non_pop_check); Modal_content.append(non_pop_check_label); The_moDal.append(Modal_content); document.body.append(The_moDal); }else{ document.querySelector("#myModal").childNodes.forEach(function(item,index){item.remove();}); Modal_content = document.createElement('DIV'); Modal_content.setAttribute("class","modal-content"); Modla_content_child1 = document.createElement('SPAN'); Modla_content_child1.setAttribute("class","close"); Modal_content_child1_text = document.createTextNode( '×' ); Modla_content_child1.append(Modal_content_child1_text); Modla_content_child1.onclick = function(){ document.querySelector("#myModal").style.setProperty("display", "none", "!important"); } Modal_content.append(Modla_content_child1); Modla_content_child2 = document.createElement('P'); Modla_content_child2.setAttribute("style","line-height: 20px !important;font-weight: bold !important;"); msg.split("\n").forEach(function(item,index){ Modal_content_child2_text = document.createTextNode(item.replace(/\^/gi,"\u00A0")); Modla_content_child2.append(Modal_content_child2_text); Modla_content_child2.append(document.createElement('br')); }); Modal_content.append(Modla_content_child2); The_moDal.append(Modal_content); document.body.append(The_moDal); } if(time != 0){ setTimeout(function(){ if(getStyle(document.querySelector("#myModal"), 'display', 'display')!="none"){ document.querySelector("#myModal").click(); } }, time); }else{ if(Object['non_pop_check']!=1){ if(getStyle(document.querySelector("#myModal"), 'display', 'display')=="none"){ //document.querySelector("#myModal").style.setProperty("display", "block", "!important"); document.querySelector("#myModal").style.cssText="display: block !important;"; } }else{ if(getStyle(document.querySelector("#myModal"), 'display', 'display')=="none"){ //document.querySelector("#myModal").style.setProperty("display", "none", "!important"); document.querySelector("#myModal").style.cssText="display: none !important;"; } } } } function view_board_list(){ var link=""; var templocation=""; let target = null; if(document.querySelectorAll(".author02").length==0){ target =document.querySelectorAll("td.author"); }else{ target = document.querySelectorAll("td.author02"); } for (const nmt of target) { for (const undi of blockUserLists) { if(nmt.innerHTML.toString().indexOf(undi)!=-1 || check_enc_id(decodeURIComponent(nmt.firstElementChild.getAttribute('onclick').split("')")[0].split("('")[1]))){ if(Object['current_color'] =="none"){ nmt.parentElement.setAttribute("style", "background-color: rgba(200,200,0,0.5);"); }else{ nmt.parentElement.setAttribute("style", "background-color:"+Object['current_color']+";"); } var current_title=""; if(nmt.parentElement.children[1].getAttribute("class")=="category"){ current_title = nmt.parentElement.children[2].firstElementChild.getAttribute("title")==null?nmt.parentElement.children[2].children[0].firstChild.data:nmt.parentElement.children[1].firstElementChild.getAttribute("title"); }else{ current_title = nmt.parentElement.children[1].firstElementChild.getAttribute("title")==null?nmt.parentElement.children[1].children[0].firstChild.data:nmt.parentElement.children[1].firstElementChild.getAttribute("title"); } //console.log("=="+nmt.parentElement.querySelector('a').href == null? false:true); if(nmt.parentElement.querySelector('a') == null? false:true){//링크가 있는 녀석만 만들기 link=nmt.parentElement.querySelector('a').href.split('/view')[1].replace("';}",""); templocation = "javascript:if(confirm('차단한글이야 열어볼꺼야?')){this.location='"+"/view"+(link+"';}"); nmt.parentElement.querySelector('a').href=templocation; nmt.parentElement.querySelector('a').setAttribute("title",current_title); } if(document.querySelector("#conView > div > div > div.docuArea02 > div.docuview_updown")!=null){//이전글 다음글 색상표시 var up_title = document.querySelector("#conView > div > div > div.docuArea02 > div.docuview_updown > dl > dd:nth-child(2)").firstElementChild.innerText; var down_title = document.querySelector("#conView > div > div > div.docuArea02 > div.docuview_updown > dl > dd:nth-child(4)").firstElementChild.innerText; if(current_title.indexOf(up_title) !=-1){ document.querySelector("#conView > div > div > div.docuArea02 > div.docuview_updown > dl > dd:nth-child(2)").firstElementChild.setAttribute("style","color:red"); }else if(current_title.indexOf(down_title) !=-1){ document.querySelector("#conView > div > div > div.docuArea02 > div.docuview_updown > dl > dd:nth-child(4)").firstElementChild.setAttribute("style","color:red") } } } } } return; } function view_comment_list(){ var link=""; let target_comment = null; target_comment = document.querySelectorAll(".name"); for (const nmt of target_comment) { var befor_text =""; befor_text = nmt.parentElement.parentElement.children[1].innerText; if(nmt.parentElement.parentElement.parentElement.getAttribute("class")==null?false:true){//베스트 리플뎃 if(nmt.parentElement.parentElement.parentElement.getAttribute("class").indexOf("best")!=-1){ console.log(nmt.parentElement.parentElement.parentElement); } } for (const undi of blockUserLists) { if(nmt.innerHTML.toString().indexOf(undi)!=-1||check_enc_id(decodeURIComponent(nmt.firstElementChild.getAttribute('onclick').split("','")[0].split("('")[1]))){ nmt.parentElement.parentElement.children[1].innerHTML = "차단된사용자의 글입니다.<details><summary>원글보기</summary><span>"+befor_text+"</span></details>"; } } } return; } window.Object["fn_save"] = function save_localstoreg(cid){ let list = []; if((localStorage.getItem('enc_id')==null||localStorage.getItem('enc_id').length==0)?true:false){ list.push(decodeURIComponent(cid)); }else{ var temp = JSON.parse(localStorage.getItem('enc_id')); //개선필요 if(!check_enc_id(cid)){ temp.push(decodeURIComponent(cid)); } list= temp; } list.forEach(function(item,index){//공란제거 if(item+"".length==0){ list.splice(index,1); }else{ list[index]= decodeURIComponent(item);//인코딩오류 수정 } }); localStorage.setItem('enc_id', JSON.stringify(remove_duplicates_safe(list))); //modal_alert("차단아이디 등록완료\n",300); setGM(list); alert("차단아이디 등록완료"); } window.Object["fn_delete"] = function delete_localstoreg(cid){ let list = []; var temp = JSON.parse(localStorage.getItem('enc_id')); if(temp.length == 0){ alert("차단한 사용자가없습니다."); return; } const idx = temp.indexOf(decodeURIComponent(cid)); if(idx > -1){ temp.splice(idx,1); } list = temp; localStorage.setItem('enc_id', JSON.stringify(list)); setGM(list); alert("차단아이디 삭제완료"); } window.Object["fn_colorset"] = function color_set(e){ if(e.selectedIndex != 0){ GM.setValue('color',e.selectedOptions.item(0).value); document.querySelector("#color_set").setAttribute("style","background-color: "+e.selectedOptions.item(0).value+";"); }else{ GM.setValue('color',"none"); document.querySelector("#color_set").setAttribute("style","background-color: rgba(200,200,0,0.5);"); } } window.Object["fn_non_pop_check"] = function non_pop_check(){ var check = document.querySelector("#non_pop_check").checked==true?1:0; if(check ==1){ GM.setValue('non_pop_check',check); if(getStyle(document.querySelector("#myModal"), 'display', 'display')!="none"){ document.querySelector("#myModal").click(); } }else{ GM.setValue('non_pop_check',check); } } window.Object["fn_modal_view"] = function modal_view(){ document.querySelector("#myModal").style.cssText="display: block !important;"; //document.querySelector("#myModal").style.setProperty("display", "block", "!important"); } async function setGM(list){ await GM.setValue('enc_id', JSON.parse(JSON.stringify(list))).then((value) =>{ //console.log(value); document.location.reload(); }); } async function getGM(find_nm){ var temp = await GM.getValue(find_nm); return temp; } function setlocalstoreg(blockUserLists){ let list = []; let target = null; let listObject = getGM('enc_id'); listObject.then((value) =>{ if(value != undefined){ localStorage.setItem('enc_id',JSON.stringify(value)); if(document.querySelectorAll(".author02").length==0){ target =document.querySelectorAll("td.author"); }else{ target = document.querySelectorAll("td.author02"); } for (const nmt of target) { for (const undi of blockUserLists) { if(nmt.innerHTML.toString().indexOf(undi)!=-1){ if(localStorage.getItem('enc_id')==null?true:false){ list.push(nmt.firstElementChild.getAttribute('onclick').split("')")[0].split("('")[1]); }else{ var temp = JSON.parse(localStorage.getItem('enc_id')); //개선필요 if(!check_enc_id(nmt.firstElementChild.getAttribute('onclick').split("')")[0].split("('")[1])){ temp.push(nmt.firstElementChild.getAttribute('onclick').split("')")[0].split("('")[1]); } list= temp; } } } } if(list.length !=0){ localStorage.setItem('enc_id', JSON.stringify(list)); } waitForKeyElements('#boardlist', view_board_list); //게시물 블럭 waitForKeyElements('#cmt_list', view_comment_list);// 코맨트리스트 }else{ localStorage.setItem('enc_id', []); } }); } function check_enc_id(enc_id){ var ls = JSON.parse(localStorage.getItem('enc_id')); return ls.some(function(arrayValue){ return decodeURIComponent(enc_id) === arrayValue; }); } function remove_duplicates_safe(arr) { var seen = {}; var ret_arr = []; for (var i = 0; i < arr.length; i++) { if (!(arr[i] in seen)) { ret_arr.push(arr[i]); seen[arr[i]] = true; } } return ret_arr; } function menu_add(cid){ } function waitForKeyElements(selectorTxt, /* Required: The jQuery selector string that specifies the desired element(s). */ actionFunction, /* Required: The code to run when elements are found. It is passed a jNode to the matched element. */ bWaitOnce, /* Optional: If false, will continue to scan for new elements even after the first match is found. */ iframeSelector /* Optional: If set, identifies the iframe to search. */ ) { var targetNodes, btargetsFound; if (typeof iframeSelector == 'undefined') targetNodes = $(selectorTxt); else targetNodes = $(iframeSelector).contents().find(selectorTxt); if (targetNodes && targetNodes.length > 0) { btargetsFound = true; /*--- Found target node(s). Go through each and act if they are new. */ targetNodes.each(function () { var jThis = $(this); var alreadyFound = jThis.data('alreadyFound') || false; if (!alreadyFound) { //--- Call the payload function. var cancelFound = actionFunction(jThis); if (cancelFound) btargetsFound = false; else jThis.data('alreadyFound', true); } }); } else { btargetsFound = false; } //--- Get the timer-control variable for this selector. var controlObj = waitForKeyElements.controlObj || { }; var controlKey = selectorTxt.replace(/[^\w]/g, '_'); var timeControl = controlObj[controlKey]; //--- Now set or clear the timer as appropriate. if (btargetsFound && bWaitOnce && timeControl) { //--- The only condition where we need to clear the timer. clearInterval(timeControl); delete controlObj[controlKey] } else { //--- Set a timer, if needed. if (!timeControl) { timeControl = setInterval(function () { waitForKeyElements(selectorTxt, actionFunction, bWaitOnce, iframeSelector ); }, 300 ); controlObj[controlKey] = timeControl; } } waitForKeyElements.controlObj = controlObj; }