1document.addEventListener('DOMContentLoaded', () => { 2 let scrollable = document.querySelectorAll('.scrollable'); 3 if(scrollable) scrollFade(scrollable); 4 let copier = new CopyText(); 5 copier.init(); 6// checkDonation(); 7}) 8 9class CopyText{ 10 constructor(){ 11 this.cryptoPockets = document.querySelectorAll('p.crypto-p'); //get all containers with crypto data 12 this.notification_wnd = document.createElement('div'); //create wrapper for confirmation notifications 13 } 14 init(){ 15 this.notification_wnd.classList.add('not-wnd'); 16 document.querySelector('body').append(this.notification_wnd); //add container to the document 17 this.cryptoPockets.forEach( pocket => { 18 pocket.addEventListener('click' , (event) => this.copyData(event)); 19 }) 20 21 } 22 showNotification(sign){ 23 sign.classList.remove('fa-copy'); 24 sign.classList.add('fa-check'); 25 26 setTimeout(() =>{ 27 sign.classList.add('fa-copy'); 28 sign.classList.remove('fa-check'); 29 } , 2000); 30 31 } 32 copyData(e){ 33 34 let text = e.target.closest('.crypto-p').querySelector('strong'); 35 let sign = e.target.closest('.crypto-p').querySelector('.fa'); 36 let selection = window.getSelection(); // Get the Selection object 37 let range = document.createRange(); // Create a new range 38 range.selectNodeContents(text); // Select the content of the node from line 1 39 selection.removeAllRanges(); // Delete any old ranges 40 selection.addRange(range); // Add the range to selection 41 document.execCommand('copy'); // Execute the command 42 selection = window; 43 this.showNotification( sign); 44 } 45 46} 47 48 49function scrollFade(scrollable){ 50 scrollable.forEach(scroll_item => { 51 scroll_item.querySelector('.elementor-widget-container').addEventListener('scroll' , ()=>{ 52 let scroll_params = scroll_item.querySelector('.elementor-text-editor').getBoundingClientRect(); 53 if(event.target.scrollTop + event.target.getBoundingClientRect().height > scroll_params.height){ 54 scroll_item.classList.add('hide-fade'); 55 56 } else{ 57 scroll_item.classList.remove('hide-fade'); 58 } 59 60 61 62 }) 63 }) 64} 65function checkDonation(){ 66 67 let form = document.querySelector('.simpay-amount-input'); 68 if(!form) return; 69 let note = document.querySelector('.simpay-form-control h5'); 70 let lang = document.querySelector('html').getAttribute('lang') 71 let link_text = note.innerText.match(/(?<=\<\s*).*?(?=\s*\>)/gs); 72 let link = lang == 'ru-RU' ? 'https://antiwarcommittee.info/support-agreement-ru/' : 'https://antiwarcommittee.info/support-agreement/' 73 if(link_text) note.innerHTML = note.innerText.split(`<${link_text[0]}>`).join(`<a href = "${link}"> ${link_text[0]}</a>`); 74 75 let max_value = 1499; 76 if(form){ 77 checkAmount(max_value , form , note); 78 form.addEventListener('change' , ()=>{ 79 checkAmount(max_value , event.target, note); 80 }) 81 } 82 83} 84 85function checkAmount(max , current , note){ 86 let val = Number(current.value.split(',').join()) 87 if (val){ 88 let round_val = Math.ceil((val)*100)/100 89 90 if(round_val <= max){ 91 current.value = round_val; 92 note.classList.remove('active_note') 93 } else{ 94 current.value = max; 95 note.classList.add('active_note') 96 } 97 } 98 99}
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.