1(function(w, d){ 2 var classes = { 3 'product': '.dlordercomment-product', 4 'button': '.dlordercomment-edit', 5 'stat': '.dlordercomment-static', 6 'static_comment_inner': '.dlordercomment-comment span', 7 'static_comment': '.dlordercomment-comment', 8 'dynamic': '.dlordercomment-dynamic', 9 'dynamic_comment_input': '.dlordercomment-comment textarea' 10 } 11 12 var listeners=[]; 13 14 w.addEventListener('load', function(){ 15 registerButtonListeners(); 16 17 jQuery(document).ajaxComplete(function(event,request,settings){ 18 unregisterListeners(); 19 registerButtonListeners(); 20 }); 21 }, false); 22 23 function unregisterListeners(){ 24 for(var i=0;i<listeners.length;i++){ 25 listeners[i][0].removeEventListener('click', listeners[i][1]); 26 } 27 } 28 29 function registerButtonListeners(){ 30 var products = d.querySelectorAll(classes.product); 31 32 for(var i = 0; i < products.length; i++){ 33 var button = products[i].querySelector(classes.button); 34 35 var stat = products[i].querySelector(classes.stat); 36 37 if(stat.querySelector(classes.static_comment_inner).innerHTML.trim()){ 38 stat.querySelector(classes.static_comment).style.display = 'inline'; 39 } 40 41 if(button != null){ 42 button.style.display = 'block'; 43 button._visible = true; 44 listeners.push([button, button.addEventListener('click', toggleEditor, false)]); 45 } 46 } 47 } 48 49 function toggleEditor(evt){ 50 var element = evt.target; 51 52 while(!element.hasOwnProperty('_visible')){ 53 element = element.parentElement; 54 } 55 56 var root = element.parentElement; 57 58 if(element._visible){ 59 showEditor(root); 60 }else{ 61 hideEditor(root); 62 } 63 64 swapButtonLabel(element); 65 element._visible = !element._visible; 66 } 67 68 function swapButtonLabel(button){ 69 var label = button.firstChild.innerHTML; 70 button.firstChild.innerHTML = button.dataset['save']; 71 button.dataset['save'] = label; 72 } 73 74 function showEditor(element){ 75 var dynamic = element.querySelector(classes.dynamic); 76 dynamic.style.display = 'inline'; 77 78 var stat = element.querySelector(classes.stat); 79 stat.style.display = 'none'; 80 81 var comment = stat.querySelector(classes.static_comment_inner).innerHTML.trim(); 82 83 if(comment){ 84 dynamic.querySelector(classes.dynamic_comment_input).value = comment; 85 } 86 } 87 88 function hideEditor(element){ 89 var dynamic = element.querySelector(classes.dynamic); 90 dynamic.style.display = 'none'; 91 92 var stat = element.querySelector(classes.stat); 93 stat.style.display = 'inline'; 94 95 var comment = dynamic.querySelector(classes.dynamic_comment_input).value.trim(); 96 97 if(comment){ 98 stat.querySelector(classes.static_comment_inner).innerHTML = comment; 99 stat.querySelector(classes.static_comment).style.display = 'inline'; 100 }else{ 101 stat.querySelector(classes.static_comment).style.display = 'none'; 102 } 103 104 data = [ 105 'id_product=' + element.dataset.product, 106 'id_product_attribute=' + element.dataset.product_attribute, 107 'id_cart=' + element.dataset.cart, 108 'comment=' + encodeURIComponent(comment) 109 ].join("&"); 110 111 ajax('POST', element.dataset.url, null, data); 112 } 113 114 function ajax(method, url, onload, params){ 115 var req = new XMLHttpRequest(); 116 117 if(onload){ 118 req.onload = onload; 119 } 120 121 req.open(method, url, true); 122 123 if(params){ 124 req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 125 } 126 127 req.send(params); 128 } 129})(window, document);
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.