PageSourceSearch

https://stachurska.eu/files/wp-content/plugins/event-calendar-3-for-php-53/popup.js

js stachurska.eu collected 2026-10-08 23:34:27 UTC 6,117 bytes, 216 lines download raw bytes

1/* EventCalendar. Copyright (C) 2005, Alex Tingle.  $Revision: 65 $
2 * This file is licensed under the GNU GPL. See LICENSE file for details.
3 */
4
5/** class ec3_Popup */
6function ec3_Popup()
7{
8
9  WindowOnload( function()
10  {
11    var calendars=ec3.get_calendars();
12    if(!calendars)
13      return;
14    // Pre-load images.
15    ec3.imgShadow0=new Image(8,32);
16    ec3.imgShadow1=new Image(500,16);
17    ec3.imgShadow2=new Image(8,32);
18    ec3.imgShadow0.src=ec3.myfiles+'/shadow0.png';
19    ec3.imgShadow1.src=ec3.myfiles+'/shadow1.png';
20    ec3.imgShadow2.src=ec3.myfiles+'/shadow2.png';
21
22    // Generate the popup (but keep it hidden).
23    var table,tbody,tr,td;
24    ec3_Popup.popup=document.createElement('table');
25    ec3_Popup.popup.style.display='none';
26    ec3_Popup.popup.id='ec3_popup';
27    ec3_Popup.popup.className='ec3_popup';
28    tbody=ec3_Popup.popup.appendChild( document.createElement('tbody') );
29    tr=tbody.appendChild( document.createElement('tr') );
30    td=tr.appendChild( document.createElement('td') );
31    td.id='ec3_shadow0';
32    td.rowSpan=2;
33    td.appendChild( document.createElement('div') );
34    td=tr.appendChild( document.createElement('td') );
35    ec3_Popup.contents=td.appendChild( document.createElement('table') );
36    ec3_Popup.contents.style.width=500;
37    td=tr.appendChild( document.createElement('td') );
38    td.id='ec3_shadow2';
39    td.rowSpan=2;
40    td.appendChild( document.createElement('div') );
41    tr=tbody.appendChild( document.createElement('tr') );
42    td=tr.appendChild( document.createElement('td') );
43    td.id='ec3_shadow1';
44
45    document.body.appendChild(ec3_Popup.popup);
46
47    // Add event handlers to the calendars.
48    for(var i=0; i<calendars.length; i++)
49      add_tbody( ec3.get_child_by_tag_name(calendars[i],'tbody') );
50  } );
51
52  function add_tbody(tbody)
53  {
54    if(!tbody)
55      return;
56    var anchor_list=tbody.getElementsByTagName('a');
57    if(!anchor_list)
58      return;
59    for(var i=0; i<anchor_list.length; i++)
60    {
61      var a=anchor_list[i];
62      var td=a.parentNode;
63      // 'title' might have become 'nicetitle' if that plugin is being run.
64      var titleattr=a.getAttribute('nicetitle');
65      if(!titleattr)
66          titleattr=a.getAttribute('title');
67      if(titleattr && td.nodeName=='TD' && td.className!='pad')
68      {
69        td.setAttribute('ec3_title',titleattr);
70        a.removeAttribute('nicetitle');
71        a.removeAttribute('title');
72        addEvent(td,'mouseover',show);
73        addEvent(td,'mouseout',hide);
74        addEvent(td,'focus',show);
75        addEvent(td,'blur',hide);
76      }
77    }
78  }
79  ec3_Popup.add_tbody=add_tbody;
80  
81  function show(e)
82  {
83    var n;
84    if(e.currentTarget)
85        n=e.currentTarget; // Mozilla/Safari/w3c
86    else if(window.event)
87        n=window.event.srcElement; // IE
88    else
89        return;
90
91    // Find the TD element and the calendar node.
92    // (IE will sometimes randomly give us a child instead).
93    var td,cal;
94    while(1)
95    {
96      if(!n || n==document.body)
97      {
98        return;
99      }
100      else if(n.tagName=='TABLE')
101      {
102        cal=n;
103        break;
104      }
105      else if(n.tagName=='TD')
106      {
107        td=n;
108      }
109      n=n.parentNode;
110    }
111    
112    var ec3_title=td.getAttribute('ec3_title');
113    if(typeof ec3_title == 'undefined')
114      return;
115    if(ec3_Popup.just_hidden)
116       ec3_Popup.popup.style.display = "block";
117    else
118       ec3_Popup.show_timer=setTimeout(
119         function(){ec3_Popup.popup.style.display = "block";},
120         600
121       );
122
123    ec3_Popup.contents.style.width=''+(cal.offsetWidth-2)+'px';
124    ec3_Popup.popup.style.top=''+(findPosY(cal)+cal.offsetHeight)+'px';
125    ec3_Popup.popup.style.left=''+(findPosX(cal)-8)+'px';
126
127    var tbody=ec3.get_child_by_tag_name(ec3_Popup.contents,'tbody');
128    if(tbody)
129      ec3_Popup.contents.removeChild(tbody);
130    tbody=ec3_Popup.contents.appendChild(document.createElement('tbody'));
131    
132    var titles=ec3_title.split(', ');
133    for(var i=0; i<titles.length; i++)
134    {
135      tr=tbody.appendChild(document.createElement('tr'));
136      td=tr.appendChild(document.createElement('td'));
137      td.appendChild(document.createTextNode(titles[i]));
138      if(titles[i].indexOf('@')!=-1)
139        td.className='eventday';
140    }
141
142    // Let's put this event to a halt before it starts messing things up
143    window.event? window.event.cancelBubble=true: e.stopPropagation();
144  }
145
146  function hide()
147  {
148    if(ec3_Popup.show_timer)
149      clearTimeout(ec3_Popup.show_timer);
150    if(ec3_Popup.popup.style.display!='none')
151    {
152     ec3_Popup.just_hidden=1;
153     ec3_Popup.hide_timer=setTimeout(function(){ec3_Popup.just_hidden=0;},900);
154    }
155    ec3_Popup.popup.style.display='none';
156
157  }
158
159  //=====================================================================
160  // Event Listener
161  // by Scott Andrew - http://scottandrew.com
162  // edited by Mark Wubben, <useCapture> is now set to false
163  //=====================================================================
164  function addEvent(obj, evType, fn){
165    if(obj.addEventListener){
166      obj.addEventListener(evType, fn, false); 
167      return true;
168    } else if (obj.attachEvent){
169      var r = obj.attachEvent('on'+evType, fn);
170      return r;
171    } else {
172      return false;
173    }
174  }
175
176  //=====================================================================
177  // From http://www.quirksmode.org/
178  //=====================================================================
179  function findPosX(obj)
180  {
181    var curleft = 0;
182    if (obj.offsetParent)
183    {
184      while(1)
185      {
186        curleft += obj.offsetLeft;
187	if(!obj.offsetParent) break;
188        obj = obj.offsetParent;
189      }
190    }
191    else if (obj.x)
192      curleft += obj.x;
193    return curleft;
194  }
195
196  function findPosY(obj)
197  {
198    var curtop = 0;
199    if (obj.offsetParent)
200    {
201      while(1)
202      {
203        curtop += obj.offsetTop;
204	if(!obj.offsetParent) break;
205        obj = obj.offsetParent;
206      }
207    }
208    else if (obj.y)
209      curtop += obj.y;
210    return curtop;
211  }
212
213} // end namespace ec3_Popup
214
215// Export public functions from ec3_Popup namespace.
216ec3_Popup();

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.