PageSourceSearch

https://www.vse.cz/wp-content/themes/vse-redesigned/js/calendar.js?ver=20260923

js vse.cz collected 2026-09-24 08:29:01 UTC 11,814 bytes, 310 lines download raw bytes

1"use strict";
2
3(function ($, root) {
4
5  function Calendar(){
6    var CALENDAR_URL='https://kalendar.vse.cz/api/date/list';
7    var targetElement=null;
8    var calendarImportantEventsElement=null;
9    var calendarEventsElement=null;
10    var userIsAdmin=false;
11    var limitMonths=3;
12    var dateFrom=null;
13    var dateTo=null;
14    var limitCount=8;
15    var limitPromoCount=2;
16    var promoNormalEvents=false;
17    var currentYear = (new Date()).getFullYear();
18    var tags=[];
19    var web='';
20    var isRenderedInSideColumn=false;
21
22    /**
23     * Metoda pro inicializaci kaledáře ve zvoleném bloku
24     * @param {object} params
25     */
26    this.init = function(params){
27      web=params.web;
28      tags=params.tags.split(',');
29      userIsAdmin=params.userIsAdmin;
30      if (typeof params.target === "string"){
31        targetElement=$((params.target.substr(0,1)==='#'?'':'#')+params.target);
32      }else{
33        targetElement=params.target;
34      }
35      if (params.hasOwnProperty("months") && params.months!==''){
36        if (params.months.toLowerCase()==="unlimited"){
37          limitMonths=false;
38        }else{
39          limitMonths=parseInt(params.months);
40          if (limitMonths<=0){
41            limitMonths=3;
42          }
43        }
44      }
45      isRenderedInSideColumn=(targetElement.closest('.content-col-3').length>0);
46      if (params.hasOwnProperty("limitCount") && params.limitCount!==''){
47        limitCount=parseInt(params.limitCount);
48      }
49      if (limitCount<=0){
50        limitCount=isRenderedInSideColumn?6:8;
51      }
52      if (params.hasOwnProperty("limitPromoCount") && params.limitPromoCount!==''){
53        limitPromoCount=parseInt(params.limitPromoCount);
54      }else{
55        limitPromoCount=isRenderedInSideColumn?0:2;
56      }
57      promoNormalEvents=(params.hasOwnProperty("promoNormalEvents") && params.promoNormalEvents);
58      if (params.hasOwnProperty("dateFrom") && params.dateFrom!==''){
59        dateFrom=params.dateFrom;
60      }
61      if (params.hasOwnProperty("dateTo") && params.dateTo!==''){
62        dateTo=params.dateTo;
63      }
64      calendarImportantEventsElement=targetElement.children('.important-events').first();
65      calendarEventsElement=targetElement.children('.events').first();
66
67      this.loadItems();
68    };
69
70    /**
71     * Metoda pro načtení položek kalendáře
72     */
73    this.loadItems = function(){
74      if (isRenderedInSideColumn){
75        targetElement.find('.inline-calendar-btn').removeClass('d-md-inline-block');
76      }
77
78
79      if (targetElement.attr('data-force-show')!='1'){
80        targetElement.hide();
81      }
82
83      //region určení období, ze kterého chceme zobrazovat události
84      if (!dateTo){
85        if (limitMonths===false){
86          dateTo=false;
87        }else{
88          var date = new Date();
89          if (dateFrom){
90            date=Date.parse(dateFrom);
91          }
92          date.setDate(date.getDate()+Math.ceil(limitMonths*30.5));
93          dateTo=date.getFullYear()+'-'+('0'+(date.getMonth()+1)).slice(-2)+'-'+('0'+date.getDate()).slice(-2);
94        }
95      }
96      //endregion určení období, ze kterého chceme zobrazovat události
97      $.getJSON(
98        CALENDAR_URL,
99        getRequestData(limitCount,limitPromoCount,dateFrom,dateTo,tags,promoNormalEvents)
100      ).done(function(data){
101        renderEvents(data.hasOwnProperty('promoDates')?data.promoDates:[],data.hasOwnProperty('dates')?data.dates:[]);
102      })
103      .fail(function(jqxhr, textStatus, error){
104        console.error(textStatus+', '+error);
105      });
106    };
107
108    /**
109     * Metoda renderující pole s událostmi získané z JSON API
110     * @param {array} importantDates
111     * @param {array} dates
112     */
113    var renderEvents = function(importantDates, dates){
114      if ((importantDates.length===0) && (dates.length===0)){return;}
115      calendarImportantEventsElement.html('');
116      $.each(importantDates,function(key, event){
117        calendarImportantEventsElement.append(isRenderedInSideColumn ? renderEvent(event) : renderImportantEvent(event));
118      });
119      calendarEventsElement.html('');
120      $.each(dates,function(key, event){
121        calendarEventsElement.append(renderEvent(event));
122      });
123      targetElement.show();
124    };
125
126    /**
127     * Funkce pro vygenerování částí HTML s daty konání události
128     * @param {object} event
129     * @param {HTMLElement} dateItemsHtml
130     * @param {HTMLElement} timeContentHtml
131     */
132    var renderEventDates = function(event, dateItemsHtml, timeContentHtml){
133      var start=event.start.replace(/[\s:]/g,'-').split('-');
134      var end=event.end.replace(/[\s:]/g,'-').split('-');
135
136      var startYear=parseInt(start[0]);
137      var startMonth=parseInt(start[1]);
138      var startDate=parseInt(start[2]);
139      var startDateTime=new Date(startYear,startMonth-1,startDate,parseInt(start[3]),parseInt(start[4]),parseInt(start[5]));
140
141      var endYear=parseInt(end[0]);
142      var endMonth=parseInt(end[1]);
143      var endDate=parseInt(end[2]);
144      var endDateTime=new Date(endYear,endMonth-1,endDate,parseInt(start[3]),parseInt(start[4]),parseInt(start[5]));
145
146      if (startDate===endDate && startMonth===endMonth){
147        //událost má pouze jedno datum
148        dateItemsHtml.append('<div class="date-item">'+startDate+'.<small>'+vse_calendar.DATEITEM_MONTH[startMonth-1]+'</small></div>');
149        if (startYear!==currentYear){
150          dateItemsHtml.append('<div class="date-item date-item-secondary"><span class="date-year">'+startYear+'</span></div>');
151        }
152        timeContentHtml.append(vse_calendar.WEEKDAY[startDateTime.getDay()]);
153      }else{
154        //událost má 2 rozdílná data
155        dateItemsHtml.append('<div class="date-item">'+startDate+'.<small>'+vse_calendar.DATEITEM_MONTH[startMonth-1]+'</small></div>');
156        if (startYear!==endYear){
157          dateItemsHtml.append('<div class="date-item date-item-secondary"><span class="date-year">'+startYear+'</span></div>');
158        }
159        dateItemsHtml.append('<div class="date-item date-separator">'+endDate+'.<small>'+vse_calendar.DATEITEM_MONTH[endMonth-1]+'</small></div>');
160        if (endYear!==currentYear){
161          dateItemsHtml.append('<div class="date-item date-item-secondary"><span class="date-year">'+endYear+'</span></div>');
162        }
163        timeContentHtml.append(vse_calendar.WEEKDAY[startDateTime.getDay()]);
164        timeContentHtml.append('-');
165        timeContentHtml.append(vse_calendar.WEEKDAY[endDateTime.getDay()]);
166      }
167
168      if ((!event.whole_day)){
169        timeContentHtml.append(', ');
170        var startTime=startDateTime.getHours()+':'+('0'+startDateTime.getMinutes()).slice(-2);
171        timeContentHtml.append(startTime);
172        var endTime=endDateTime.getHours()+':'+('0'+endDateTime.getMinutes()).slice(-2);
173        if (startTime!==endTime){
174          timeContentHtml.append('-'+endTime);
175        }
176      }
177    };
178
179    /**
180     * Funkce pro vygenerování detailů jedné události
181     * @param {object} event
182     * @return {*|HTMLElement}
183     */
184    var renderEvent = function(event){
185      var result=$('<article class="calendar-list-item col-md-6 col-xl-3"></article>');
186      var dateItems=$('<div class="date-items"></div>');
187      var calendarContent=$('<div class="calendar-content"></div>');
188      var calendarContentTime=$('<time></time>');
189      calendarContent.append(calendarContentTime);
190      var calendarDate=$('<a class="calendar-date"></a>');
191      calendarDate.append(dateItems);
192      result.append(calendarDate);
193      result.append(calendarContent);
194
195      //region data události
196      renderEventDates(event, dateItems, calendarContentTime);
197      //endregion data události
198
199      //region informace o události
200      var h3=$('<h3 class="calendar-content-title"></h3>');
201      var h3Link=$('<a target="_blank"></a>');
202      var eventUrl=vse_calendar.URLS.EVENT_DETAILS.replace('%dateId%',event.date_id).replace('%web%',web);
203
204      h3Link.attr('href', eventUrl);
205      calendarDate.attr('href', eventUrl);
206      calendarDate.attr('target','_blank');
207
208      h3Link.text(event.title);
209      h3Link.appendTo(h3);
210      calendarContent.append(h3);
211      if (event.subtitle){
212        calendarContent.append($('<p></p>').html($('<span class="small"></span>').text(event.subtitle)));
213      }
214      //endregion informace o události
215      return result;
216    };
217
218    /**
219     * Funkce pro vygenerování detailů jedné důležité (promované) události
220     * @param {object} event
221     * @return {*|HTMLElement}
222     */
223    var renderImportantEvent = function(event){
224      var eventUrl=vse_calendar.URLS.EVENT_DETAILS.replace('%dateId%',event.date_id).replace('%web%',web);
225      var result=$('<article class="calendar-item col-lg-6 mb-4"></article>');
226      var resultContentLink=$('<a class="calendar-link"></a>');
227      resultContentLink.attr('href',eventUrl);
228      result.append(resultContentLink);
229      var calendarDate=$('<div class="calendar-date"></div>');
230      var dateItems=$('<div class="date-items"></div>');
231      calendarDate.append(dateItems);
232      resultContentLink.append(calendarDate);
233      var calendarContentTime=$('<time></time>');
234
235      //region data události
236      renderEventDates(event, dateItems, calendarContentTime);
237      //endregion data události
238
239      //region obrázek a info o události
240      var calendarFigure=$('<figure class="calendar-figure"></figure>');
241      resultContentLink.append(calendarFigure);
242      var eventImg = $('<img class="img-fluid w-100"/>');
243      eventImg.attr('src',event.image);
244      eventImg.attr('alt',event.title);
245      calendarFigure.append(eventImg);
246
247      var calendarFigcaption=$('<figcaption class="calendar-figcaption mt-xl--4"></figcaption>');
248      var h2=$('<h2 class="calendar-title text-white"></h2>');
249      h2.text(event.title);
250      if (event.subtitle!==''){
251        h2.append($('<div class="small"></div>').text(event.subtitle));
252      }
253      calendarFigcaption.append(h2);
254      calendarFigure.append(calendarFigcaption);
255      //endregion obrázek a info o události
256
257      return result;
258    };
259
260    /**
261     * Metoda sestavující URL pro zaslání dotazu
262     * @return {object}
263     */
264    var getRequestData = function(limit,promoCount,dateFrom,dateTo,tags,promoNormalEvents){
265      var result={
266        web:web,
267        promoCount:promoCount
268      };
269      if (limit){
270        result.limit=limit;
271      }
272      if (dateTo){
273        result.dateFrom=dateFrom;
274      }
275      if (dateTo){
276        result.dateTo=dateTo;
277      }
278      if (tags.length>0){
279        result.tag=tags;
280      }
281      if (promoNormalEvents){
282        result.promoNormalEvents=1;
283      }
284      return result;
285    };
286  }
287
288  $(function(){
289    $('.inline-calendar').each(function(){
290      var calendarSection=$(this);
291
292      var calendar=new Calendar;
293      calendar.init({
294        target: calendarSection,
295        web: calendarSection.attr('data-calendar-web'),
296        tags: calendarSection.attr('data-calendar-tags'),
297        months: calendarSection.attr('data-calendar-months'),
298        limitCount: calendarSection.attr('data-calendar-count'),
299        limitPromoCount: calendarSection.attr('data-calendar-promo-count'),
300        promoNormalEvents: calendarSection.attr('data-calendar-promo-normal-events'),
301        dateFrom: calendarSection.attr('data-calendar-date-from'),
302        dateTo: calendarSection.attr('data-calendar-date-to'),
303        userIsAdmin: (calendarSection.attr('data-calendar-admin')==='1')
304      });
305    });
306
307
308
309  });
310})(jQuery, this);

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.