PageSourceSearch

https://www.rhenus.group/typo3temp/assets/compressed/PopupPowerPro…08a503e1de310c1b67a0fe4351e38.1790162084.js

js rhenus.group collected 2026-09-24 19:59:38 UTC 4,571 bytes, 148 lines download raw bytes

1class PopupPowerPro
2{
3  constructor() {
4    this.init();
5    this.registerHooks();
6    this.hookControlPopupAppearance();
7
8    document.addEventListener('popuppower-init', (event) => {
9      if (document.querySelector('.poppower-layout-confirm')) {
10        this.initConfirmDialog(window.popupPower);
11      }
12    });
13  }
14
15  init() {
16    let html = document.getElementsByTagName('html').item(0);
17    this.viewPortHeight = window.innerHeight;
18    this.totalBodyHeight = Math.max( document.body.scrollHeight, document.body.offsetHeight,
19      html.clientHeight, html.scrollHeight, html.offsetHeight );
20  }
21
22  initConfirmDialog(popupPower) {
23    popupPower.popup.querySelector('.popuppower-confirm > button').addEventListener('click', (event) => {
24      popupPower.closePopup();
25    });
26  }
27
28  static canUserScroll() {
29    let popupPowerPro = new PopupPowerPro();
30    return popupPowerPro.viewPortHeight < popupPowerPro.totalBodyHeight;
31  }
32
33  registerHooks() {
34    document.slavleePopupPowerHooks = {
35      controlPopupAppearance: this.hookControlPopupAppearance,
36      closePopup: this.hookClosePopup
37    };
38  }
39
40  hookControlPopupAppearance(popupPower) {
41    if (typeof popupPower == 'undefined') {
42      return;
43    }
44
45    let cookie = popupPower.getCookie();
46
47    let showPopup = !cookie;
48    let showCount = cookie ? cookie.showCount : 0;
49
50    if (popupPower.settings.behaviourAppearance == 'always') {
51      showPopup = true;
52    }else if(popupPower.settings.behaviourAppearance == 'once' && showCount == 0) {
53      showPopup = true;
54    }else if(popupPower.settings.behaviourAppearance == 'xtimes' && showCount < popupPower.settings.xtimes) {
55      showPopup = true;
56    }
57
58    if (showPopup) {
59      switch(popupPower.settings.appearanceTrigger) {
60        case 'onscroll':
61          // check if user can scroll
62          if (PopupPowerPro.canUserScroll()) {
63            document.addEventListener('scroll', (event) => {
64              setTimeout(() => {
65                popupPower.showPopup();
66              }, popupPower.settings.delay);
67            });
68          }else {
69            // if user can't scroll, then show
70            // process like DOM loaded
71            setTimeout(() => {
72              popupPower.showPopup();
73            }, popupPower.settings.delay);
74          }
75          break;
76        case 'inviewport':
77          if (!this.observerInViewport) {
78            this.observerInViewport = new IntersectionObserver((entries) => {
79              entries.forEach(entry => {
80                if (entry.intersectionRatio > 0) {
81                  setTimeout(() => {
82                    popupPower.showPopup();
83                  }, popupPower.settings.delay);
84                }
85              });
86            });
87          }
88
89          if (popupPower.settings.contentElement) {
90            let target = document.getElementById('c' + popupPower.settings.contentElement);
91
92            if (target) {
93              this.observerInViewport.observe(target);
94            }
95          }
96          break;
97        case 'exitintent':
98          const mouseListener = e => {
99            // Nur auslösen, wenn:
100            // - Maus den oberen Rand verlässt (clientY <= 0)
101            // - Kein anderes Element betreten wird (relatedTarget == null)
102            if (e.clientY <= 0 && !e.relatedTarget && !e.toElement) {
103              setTimeout(() => {
104                popupPower.showPopup();
105              }, popupPower.settings.delay);
106              document.removeEventListener("mouseout", mouseListener);
107            }
108          }
109          document.addEventListener("mouseout", mouseListener);
110          break;
111        default:
112          setTimeout(() => {
113            popupPower.showPopup();
114          }, popupPower.settings.delay);
115          break;
116      }
117    }
118
119    if (popupPower.settings.behaviourAppearance == 'always') {
120      popupPower.deleteCookie();
121    }
122  }
123
124  hookClosePopup(popupPower) {
125    if (popupPower.settings.behaviourAppearance == 'once' || popupPower.settings.behaviourAppearance == 'xtimes') {
126      let showCount = 0;
127      let cookie = popupPower.getCookie();
128
129      if (cookie && cookie.showCount) {
130        showCount = cookie.showCount+1;
131      }else {
132        showCount = 1;
133      }
134
135      popupPower.saveCookie({
136        behaviourAppearance: popupPower.settings.behaviourAppearance,
137        showCount: showCount
138      });
139    }else if(popupPower.settings.behaviourAppearance == 'always') {
140      // remove cookie, if always
141      popupPower.deleteCookie();
142    }
143
144    popupPower.popup.remove();
145  }
146}
147
148export default new PopupPowerPro();

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.