PageSourceSearch

https://www.duell.fi/modules/dlordercomments/js/dlordercomments.js?fmt=1634047966

js duell.fi collected 2026-10-05 23:55:36 UTC 3,865 bytes, 129 lines download raw bytes

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.