PageSourceSearch

https://www.nmnm.cz/wp-content/themes/nmnm2022/assets/js/library/zabuto_calendar.js?ver=20230612112401

js nmnm.cz collected 2026-10-02 14:38:16 UTC 29,135 bytes, 695 lines download raw bytes

1/**
2 * Zabuto Calendar
3 *
4 * Dependencies
5 * - jQuery (2.0.3)
6 * - Twitter Bootstrap (3.0.2)
7 */
8
9if (typeof jQuery == 'undefined') {
10    throw new Error('jQuery is not loaded');
11}
12
13/**
14 * Create calendar
15 *
16 * @param options
17 * @returns {*}
18 */
19$.fn.zabuto_calendar = function (options) {
20    var opts = $.extend({}, $.fn.zabuto_calendar_defaults(), options);
21    var languageSettings = $.fn.zabuto_calendar_language(opts.language);
22    opts = $.extend({}, opts, languageSettings);
23
24    this.each(function () {
25        var $calendarElement = $(this);
26        $calendarElement.attr('id', "zabuto_calendar_" + Math.floor(Math.random() * 99999).toString(36));
27
28        $calendarElement.data('initYear', opts.year);
29        $calendarElement.data('initMonth', opts.month);
30        $calendarElement.data('monthLabels', opts.month_labels);
31        $calendarElement.data('weekStartsOn', opts.weekstartson);
32        $calendarElement.data('navIcons', opts.nav_icon);
33        $calendarElement.data('dowLabels', opts.dow_labels);
34        $calendarElement.data('showToday', opts.today);
35        $calendarElement.data('showDays', opts.show_days);
36        $calendarElement.data('showPrevious', opts.show_previous);
37        $calendarElement.data('showNext', opts.show_next);
38        $calendarElement.data('cellBorder', opts.cell_border);
39        $calendarElement.data('jsonData', opts.data);
40        $calendarElement.data('ajaxSettings', opts.ajax);
41        $calendarElement.data('legendList', opts.legend);
42        $calendarElement.data('actionFunction', opts.action);
43        $calendarElement.data('actionNavFunction', opts.action_nav);
44
45        drawCalendar();
46
47        function drawCalendar() {
48            var dateInitYear = parseInt($calendarElement.data('initYear'));
49            var dateInitMonth = parseInt($calendarElement.data('initMonth')) - 1;
50            var dateInitObj = new Date(dateInitYear, dateInitMonth, 1, 0, 0, 0, 0);
51            $calendarElement.data('initDate', dateInitObj);
52
53            var tableClassHtml = ($calendarElement.data('cellBorder') === true) ? ' table-bordered' : '';
54
55            $tableObj = $('<table class="table' + tableClassHtml + '"></table>');
56            $tableObj = drawTable($calendarElement, $tableObj, dateInitObj.getFullYear(), dateInitObj.getMonth());
57
58            $legendObj = drawLegend($calendarElement);
59
60            var $containerHtml = $('<div class="zabuto_calendar" id="' + $calendarElement.attr('id') + '"></div>');
61            $containerHtml.append($tableObj);
62            $containerHtml.append($legendObj);
63
64            $calendarElement.append($containerHtml);
65
66            var jsonData = $calendarElement.data('jsonData');
67            if (false !== jsonData) {
68                checkEvents($calendarElement, dateInitObj.getFullYear(), dateInitObj.getMonth());
69            }
70        }
71
72        function drawTable($calendarElement, $tableObj, year, month) {
73            var dateCurrObj = new Date(year, month, 1, 0, 0, 0, 0);
74            $calendarElement.data('currDate', dateCurrObj);
75
76            $tableObj.empty();
77            $tableObj = appendMonthHeader($calendarElement, $tableObj, year, month);
78            $tableObj = appendDayOfWeekHeader($calendarElement, $tableObj);
79            $tableObj = appendDaysOfMonth($calendarElement, $tableObj, year, month);
80            checkEvents($calendarElement, year, month);
81            return $tableObj;
82        }
83
84        function drawLegend($calendarElement) {
85            var $legendObj = $('<div class="legend" id="' + $calendarElement.attr('id') + '_legend"></div>');
86            var legend = $calendarElement.data('legendList');
87            if (typeof(legend) == 'object' && legend.length > 0) {
88                $(legend).each(function (index, item) {
89                    if (typeof(item) == 'object') {
90                        if ('type' in item) {
91                            var itemLabel = '';
92                            if ('label' in item) {
93                                itemLabel = item.label;
94                            }
95
96                            switch (item.type) {
97                                case 'text':
98                                    if (itemLabel !== '') {
99                                        var itemBadge = '';
100                                        if ('badge' in item) {
101                                            if (typeof(item.classname) === 'undefined') {
102                                                var badgeClassName = 'badge-event';
103                                            } else {
104                                                var badgeClassName = item.classname;
105                                            }
106                                            itemBadge = '<span class="badge ' + badgeClassName + '">' + item.badge + '</span> ';
107                                        }
108                                        $legendObj.append('<span class="legend-' + item.type + '">' + itemBadge + itemLabel + '</span>');
109                                    }
110                                    break;
111                                case 'block':
112                                    if (itemLabel !== '') {
113                                        itemLabel = '<span>' + itemLabel + '</span>';
114                                    }
115                                    if (typeof(item.classname) === 'undefined') {
116                                        var listClassName = 'event';
117                                    } else {
118                                        var listClassName = 'event-styled ' + item.classname;
119                                    }
120                                    $legendObj.append('<span class="legend-' + item.type + '"><ul class="legend"><li class="' + listClassName + '"></li></u>' + itemLabel + '</span>');
121                                    break;
122                                case 'list':
123                                    if ('list' in item && typeof(item.list) == 'object' && item.list.length > 0) {
124                                        var $legendUl = $('<ul class="legend"></u>');
125                                        $(item.list).each(function (listIndex, listClassName) {
126                                            $legendUl.append('<li class="' + listClassName + '"></li>');
127                                        });
128                                        $legendObj.append($legendUl);
129                                    }
130                                    break;
131                                case 'spacer':
132                                    $legendObj.append('<span class="legend-' + item.type + '"> </span>');
133                                    break;
134
135                            }
136                        }
137                    }
138                });
139            }
140
141            return $legendObj;
142        }
143
144        function appendMonthHeader($calendarElement, $tableObj, year, month) {
145            var navIcons = $calendarElement.data('navIcons');
146            var $prevMonthNavIcon = $('<span><span class="glyphicon glyphicon-chevron-left"></span></span>');
147            var $nextMonthNavIcon = $('<span><span class="glyphicon glyphicon-chevron-right"></span></span>');
148            if (typeof(navIcons) === 'object') {
149                if ('prev' in navIcons) {
150                    $prevMonthNavIcon.html(navIcons.prev);
151                }
152                if ('next' in navIcons) {
153                    $nextMonthNavIcon.html(navIcons.next);
154                }
155            }
156
157            var prevIsValid = $calendarElement.data('showPrevious');
158            if (typeof(prevIsValid) === 'number' || prevIsValid === false) {
159                prevIsValid = checkMonthLimit($calendarElement.data('showPrevious'), true);
160            }
161
162            var $prevMonthNav = $('<div class="calendar-month-navigation"></div>');
163            $prevMonthNav.attr('id', $calendarElement.attr('id') + '_nav-prev');
164            $prevMonthNav.data('navigation', 'prev');
165            if (prevIsValid !== false) {
166                prevMonth = (month - 1);
167                prevYear = year;
168                if (prevMonth == -1) {
169                    prevYear = (prevYear - 1);
170                    prevMonth = 11;
171                }
172                $prevMonthNav.data('to', {year: prevYear, month: (prevMonth + 1)});
173                $prevMonthNav.append($prevMonthNavIcon);
174                if (typeof($calendarElement.data('actionNavFunction')) === 'function') {
175                    $prevMonthNav.click($calendarElement.data('actionNavFunction'));
176                }
177                $prevMonthNav.click(function (e) {
178                    drawTable($calendarElement, $tableObj, prevYear, prevMonth);
179                });
180            }
181
182            var nextIsValid = $calendarElement.data('showNext');
183            if (typeof(nextIsValid) === 'number' || nextIsValid === false) {
184                nextIsValid = checkMonthLimit($calendarElement.data('showNext'), false);
185            }
186
187            var $nextMonthNav = $('<div class="calendar-month-navigation"></div>');
188            $nextMonthNav.attr('id', $calendarElement.attr('id') + '_nav-next');
189            $nextMonthNav.data('navigation', 'next');
190            if (nextIsValid !== false) {
191                nextMonth = (month + 1);
192                nextYear = year;
193                if (nextMonth == 12) {
194                    nextYear = (nextYear + 1);
195                    nextMonth = 0;
196                }
197                $nextMonthNav.data('to', {year: nextYear, month: (nextMonth + 1)});
198                $nextMonthNav.append($nextMonthNavIcon);
199                if (typeof($calendarElement.data('actionNavFunction')) === 'function') {
200                    $nextMonthNav.click($calendarElement.data('actionNavFunction'));
201                }
202                $nextMonthNav.click(function (e) {
203                    drawTable($calendarElement, $tableObj, nextYear, nextMonth);
204                });
205            }
206
207            var monthLabels = $calendarElement.data('monthLabels');
208
209            var $prevMonthCell = $('<th></th>').append($prevMonthNav);
210            var $nextMonthCell = $('<th></th>').append($nextMonthNav);
211
212            var $currMonthLabel = $('<span>' + monthLabels[month] + ' ' + year + '</span>');
213            $currMonthLabel.dblclick(function () {
214                var dateInitObj = $calendarElement.data('initDate');
215                drawTable($calendarElement, $tableObj, dateInitObj.getFullYear(), dateInitObj.getMonth());
216            });
217
218            var $currMonthCell = $('<th colspan="5"></th>');
219            $currMonthCell.append($currMonthLabel);
220
221            var $monthHeaderRow = $('<tr class="calendar-month-header"></tr>');
222            $monthHeaderRow.append($prevMonthCell, $currMonthCell, $nextMonthCell);
223
224            $tableObj.append($monthHeaderRow);
225            return $tableObj;
226        }
227
228        function appendDayOfWeekHeader($calendarElement, $tableObj) {
229            if ($calendarElement.data('showDays') === true) {
230                var weekStartsOn = $calendarElement.data('weekStartsOn');
231                var dowLabels = $calendarElement.data('dowLabels');
232                if (weekStartsOn === 0) {
233                    var dowFull = $.extend([], dowLabels);
234                    var sunArray = new Array(dowFull.pop());
235                    dowLabels = sunArray.concat(dowFull);
236                }
237
238                var $dowHeaderRow = $('<tr class="calendar-dow-header"></tr>');
239                $(dowLabels).each(function (index, value) {
240                    $dowHeaderRow.append('<th>' + value + '</th>');
241                });
242                $tableObj.append($dowHeaderRow);
243            }
244            return $tableObj;
245        }
246
247        function appendDaysOfMonth($calendarElement, $tableObj, year, month) {
248            var ajaxSettings = $calendarElement.data('ajaxSettings');
249            var weeksInMonth = calcWeeksInMonth(year, month);
250            var lastDayinMonth = calcLastDayInMonth(year, month);
251            var firstDow = calcDayOfWeek(year, month, 1);
252            var lastDow = calcDayOfWeek(year, month, lastDayinMonth);
253            var currDayOfMonth = 1;
254
255            var weekStartsOn = $calendarElement.data('weekStartsOn');
256            if (weekStartsOn === 0) {
257                if (lastDow == 6) {
258                    weeksInMonth++;
259                }
260                if (firstDow == 6 && (lastDow == 0 || lastDow == 1 || lastDow == 5)) {
261                    weeksInMonth--;
262                }
263                firstDow++;
264                if (firstDow == 7) {
265                    firstDow = 0;
266                }
267            }
268
269            for (var wk = 0; wk < weeksInMonth; wk++) {
270                var $dowRow = $('<tr class="calendar-dow"></tr>');
271                for (var dow = 0; dow < 7; dow++) {
272                    if (dow < firstDow || currDayOfMonth > lastDayinMonth) {
273                        $dowRow.append('<td></td>');
274                    } else {
275                        var dateId = $calendarElement.attr('id') + '_' + dateAsString(year, month, currDayOfMonth);
276                        var dayId = dateId + '_day';
277
278                        var $dayElement = $('<div id="' + dayId + '" class="day" >' + currDayOfMonth + '</div>');
279                        $dayElement.data('day', currDayOfMonth);
280
281                        if ($calendarElement.data('showToday') === true) {
282                            if (isToday(year, month, currDayOfMonth)) {
283                                $dayElement.html('<span class="badge badge-today">' + currDayOfMonth + '</span>');
284                            }
285                        }
286
287                        var $dowElement = $('<td id="' + dateId + '"></td>');
288                        $dowElement.append($dayElement);
289
290                        $dowElement.data('date', dateAsString(year, month, currDayOfMonth));
291                        $dowElement.data('hasEvent', false);
292
293                        if (typeof($calendarElement.data('actionFunction')) === 'function') {
294                            $dowElement.addClass('dow-clickable');
295                            $dowElement.click(function () {
296                                $calendarElement.data('selectedDate', $(this).data('date'));
297                            });
298                            $dowElement.click($calendarElement.data('actionFunction'));
299                        }
300
301                        $dowRow.append($dowElement);
302
303                        currDayOfMonth++;
304                    }
305                    if (dow == 6) {
306                        firstDow = 0;
307                    }
308                }
309
310                $tableObj.append($dowRow);
311            }
312            return $tableObj;
313        }
314
315        /* ----- Modal functions ----- */
316
317        function createModal(id, title, body, footer) {
318            var $modalHeaderButton = $('<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>');
319            var $modalHeaderTitle = $('<h4 class="modal-title" id="' + id + '_modal_title">' + title + '</h4>');
320
321            var $modalHeader = $('<div class="modal-header"></div>');
322            $modalHeader.append($modalHeaderButton);
323            $modalHeader.append($modalHeaderTitle);
324
325            var $modalBody = $('<div class="modal-body" id="' + id + '_modal_body">' + body + '</div>');
326
327            var $modalFooter = $('<div class="modal-footer" id="' + id + '_modal_footer"></div>');
328            if (typeof(footer) !== 'undefined') {
329                var $modalFooterAddOn = $('<div>' + footer + '</div>');
330                $modalFooter.append($modalFooterAddOn);
331            }
332
333            var $modalContent = $('<div class="modal-content"></div>');
334            $modalContent.append($modalHeader);
335            $modalContent.append($modalBody);
336            $modalContent.append($modalFooter);
337
338            var $modalDialog = $('<div class="modal-dialog"></div>');
339            $modalDialog.append($modalContent);
340
341            var $modalFade = $('<div class="modal fade" id="' + id + '_modal" tabindex="-1" role="dialog" aria-labelledby="' + id + '_modal_title" aria-hidden="true"></div>');
342            $modalFade.append($modalDialog);
343
344            $modalFade.data('dateId', id);
345            $modalFade.attr("dateId", id);
346
347            return $modalFade;
348        }
349
350        /* ----- Event functions ----- */
351
352        function checkEvents($calendarElement, year, month) {
353            var jsonData = $calendarElement.data('jsonData');
354            var ajaxSettings = $calendarElement.data('ajaxSettings');
355
356            $calendarElement.data('events', false);
357
358            if (false !== jsonData) {
359                return jsonEvents($calendarElement);
360            } else if (false !== ajaxSettings) {
361                return ajaxEvents($calendarElement, year, month);
362            }
363
364            return true;
365        }
366
367        function jsonEvents($calendarElement) {
368            var jsonData = $calendarElement.data('jsonData');
369            $calendarElement.data('events', jsonData);
370            drawEvents($calendarElement, 'json');
371            return true;
372        }
373
374        function ajaxEvents($calendarElement, year, month) {
375            var ajaxSettings = $calendarElement.data('ajaxSettings');
376
377            if (typeof(ajaxSettings) != 'object' || typeof(ajaxSettings.url) == 'undefined') {
378                alert('Invalid calendar event settings');
379                return false;
380            }
381
382            var data = {year: year, month: (month + 1)};
383
384            $.ajax({
385                type: 'GET',
386                url: ajaxSettings.url,
387                data: data,
388                dataType: 'json',
389                cache: false
390            }).done(function (response) {
391                var events = [];
392                $.each(response, function (k, v) {
393                    events.push(response[k]);
394                });
395                $calendarElement.data('events', events);
396                drawEvents($calendarElement, 'ajax');
397            });
398
399            return true;
400        }
401
402        function drawEvents($calendarElement, type) {
403            var jsonData = $calendarElement.data('jsonData');
404            var ajaxSettings = $calendarElement.data('ajaxSettings');
405
406            var events = $calendarElement.data('events');
407            if (events !== false) {
408                $(events).each(function (index, value) {
409                    var id = $calendarElement.attr('id') + '_' + value.date;
410                    var $dowElement = $('#' + id);
411                    var $dayElement = $('#' + id + '_day');
412
413                    $dowElement.data('hasEvent', true);
414
415                    if (typeof(value.title) !== 'undefined') {
416                        $dowElement.attr('title', value.title);
417                    }
418
419                    // CUSTOM MODIFICATION - JV :)
420                    if (typeof (value.url) !== 'undefined')
421                    {
422                        $dayElement.css("cursor", "pointer");
423                        $dayElement.click(function ()
424                        {
425                            window.location = value.url;
426                        });
427
428                        if (typeof (value.title) !== 'undefined')
429                        {
430                            $dayElement.append('<a href="' + value.url + '" class="hidden">' + value.title + '</a>');
431                        }
432                    }
433
434                    if (typeof(value.classname) === 'undefined') {
435                        $dowElement.addClass('event');
436                    } else {
437                        $dowElement.addClass('event-styled');
438                        $dayElement.addClass(value.classname);
439                    }
440
441                    if (typeof(value.badge) !== 'undefined' && value.badge !== false) {
442                        var badgeClass = (value.badge === true) ? '' : ' badge-' + value.badge;
443                        var dayLabel = $dayElement.data('day');
444                        $dayElement.html('<span class="badge badge-event' + badgeClass + '">' + dayLabel + '</span>');
445                    }
446
447                    if (typeof(value.body) !== 'undefined') {
448                        var modalUse = false;
449                        if (type === 'json' && typeof(value.modal) !== 'undefined' && value.modal === true) {
450                            modalUse = true;
451                        } else if (type === 'ajax' && 'modal' in ajaxSettings && ajaxSettings.modal === true) {
452                            modalUse = true;
453                        }
454
455                        if (modalUse === true) {
456                            $dowElement.addClass('event-clickable');
457
458                            var $modalElement = createModal(id, value.title, value.body, value.footer);
459                            $('body').append($modalElement);
460
461                            $('#' + id).click(function () {
462                                $('#' + id + '_modal').modal();
463                            });
464                        }
465                    }
466                });
467            }
468        }
469
470        /* ----- Helper functions ----- */
471
472        function isToday(year, month, day) {
473            var todayObj = new Date();
474            var dateObj = new Date(year, month, day);
475            return (dateObj.toDateString() == todayObj.toDateString());
476        }
477
478        function dateAsString(year, month, day) {
479            d = (day < 10) ? '0' + day : day;
480            m = month + 1;
481            m = (m < 10) ? '0' + m : m;
482            return year + '-' + m + '-' + d;
483        }
484
485        function calcDayOfWeek(year, month, day) {
486            var dateObj = new Date(year, month, day, 0, 0, 0, 0);
487            var dow = dateObj.getDay();
488            if (dow == 0) {
489                dow = 6;
490            } else {
491                dow--;
492            }
493            return dow;
494        }
495
496        function calcLastDayInMonth(year, month) {
497            var day = 28;
498            while (checkValidDate(year, month + 1, day + 1)) {
499                day++;
500            }
501            return day;
502        }
503
504        function calcWeeksInMonth(year, month) {
505            var daysInMonth = calcLastDayInMonth(year, month);
506            var firstDow = calcDayOfWeek(year, month, 1);
507            var lastDow = calcDayOfWeek(year, month, daysInMonth);
508            var days = daysInMonth;
509            var correct = (firstDow - lastDow);
510            if (correct > 0) {
511                days += correct;
512            }
513            return Math.ceil(days / 7);
514        }
515
516        function checkValidDate(y, m, d) {
517            return m > 0 && m < 13 && y > 0 && y < 32768 && d > 0 && d <= (new Date(y, m, 0)).getDate();
518        }
519
520        function checkMonthLimit(count, invert) {
521            if (count === false) {
522                count = 0;
523            }
524            var d1 = $calendarElement.data('currDate');
525            var d2 = $calendarElement.data('initDate');
526
527            var months;
528            months = (d2.getFullYear() - d1.getFullYear()) * 12;
529            months -= d1.getMonth() + 1;
530            months += d2.getMonth();
531
532            if (invert === true) {
533                if (months < (parseInt(count) - 1)) {
534                    return true;
535                }
536            } else {
537                if (months >= (0 - parseInt(count))) {
538                    return true;
539                }
540            }
541            return false;
542        }
543    }); // each()
544
545    return this;
546};
547
548/**
549 * Default settings
550 *
551 * @returns object
552 *   language:          string,
553 *   year:              integer,
554 *   month:             integer,
555 *   show_previous:     boolean|integer,
556 *   show_next:         boolean|integer,
557 *   cell_border:       boolean,
558 *   today:             boolean,
559 *   show_days:         boolean,
560 *   weekstartson:      integer (0 = Sunday, 1 = Monday),
561 *   nav_icon:          object: prev: string, next: string
562 *   ajax:              object: url: string, modal: boolean,
563 *   legend:            object array, [{type: string, label: string, classname: string}]
564 *   action:            function
565 *   action_nav:        function
566 */
567$.fn.zabuto_calendar_defaults = function () {
568    var now = new Date();
569    var year = now.getFullYear();
570    var month = now.getMonth() + 1;
571    var settings = {
572        language: false,
573        year: year,
574        month: month,
575        show_previous: true,
576        show_next: true,
577        cell_border: false,
578        today: false,
579        show_days: true,
580        weekstartson: 1,
581        nav_icon: false,
582        data: false,
583        ajax: false,
584        legend: false,
585        action: false,
586        action_nav: false
587    };
588    return settings;
589};
590
591/**
592 * Language settings
593 *
594 * @param lang
595 * @returns {{month_labels: Array, dow_labels: Array}}
596 */
597$.fn.zabuto_calendar_language = function (lang) {
598    if (typeof(lang) == 'undefined' || lang === false) {
599        lang = 'en';
600    }
601
602    switch (lang.toLowerCase()) {
603        case 'de':
604            return {
605                month_labels: ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"],
606                dow_labels: ["Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"]
607            };
608            break;
609
610        case 'en':
611            return {
612                month_labels: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "
612November", "December"],
613                dow_labels: ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]
614            };
615            break;
616
617        case 'ar':
618            return {
619                month_labels: ["يناير", "فبراير", "مارس", "أبريل", "مايو", "يونيو", "يوليو", "أغسطس", "سبتمبر", "أكتوبر", "نوفمبر", "ديسمبر"],
620                dow_labels: ["أثنين", "ثلاثاء", "اربعاء", "خميس", "جمعه", "سبت", "أحد"]
621            };
622            break;
623            
624        case 'es':
625            return {
626                month_labels: ["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"],
627                dow_labels: ["Lu", "Ma", "Mi", "Ju", "Vi", "Sá", "Do"]
628            };
629            break;
630
631        case 'fr':
632            return {
633                month_labels: ["Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"],
634                dow_labels: ["Lun", "Mar", "Mer", "Jeu", "Ven", "Sam", "Dim"]
635            };
636            break;
637
638        case 'it':
639            return {
640                month_labels: ["Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre"],
641                dow_labels: ["Lun", "Mar", "Mer", "Gio", "Ven", "Sab", "Dom"]
642            };
643            break;
644
645        case 'nl':
646            return {
647                month_labels: ["Januari", "Februari", "Maart", "April", "Mei", "Juni", "Juli", "Augustus", "September", "Oktober", "November", "December"],
648                dow_labels: ["Ma", "Di", "Wo", "Do", "Vr", "Za", "Zo"]
649            };
650            break;
651
652        case 'pl':
653            return {
654                month_labels: ["Styczeń", "Luty", "Marzec", "Kwiecień", "Maj", "Czerwiec", "Lipiec", "Sierpień", "Wrzesień", "Październik", "Listopad", "Grudzień"],
655                dow_labels: ["pon.", "wt.", "śr.", "czw.", "pt.", "sob.", "niedz."]
656            };
657            break;
658
659        case 'pt':
660            return {
661                month_labels: ["Janeiro", "Fevereiro", "Marco", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"],
662                dow_labels: ["S", "T", "Q", "Q", "S", "S", "D"]
663            };
664            break;
665
666        case 'ru':
667            return {
668                month_labels: ["Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь"],
669                dow_labels: ["Пн", "Вт", "Ср", "Чт", "Пт", "Сб", "Вск"]
670            };
671            break;
672
673        case 'se':
674            return {
675                month_labels: ["Januari", "Februari", "Mars", "April", "Maj", "Juni", "Juli", "Augusti", "September", "Oktober", "November", "December"],
676                dow_labels: ["Mån", "Tis", "Ons", "Tor", "Fre", "Lör", "Sön"]
677            };
678            break;
679
680        case 'tr':
681            return {
682                month_labels: ["Ocak", "Şubat", "Mart", "Nisan", "Mayıs", "Haziran", "Temmuz", "Ağustos", "Eylül", "Ekim", "Kasım", "Aralık"],
683                dow_labels: ["Pts", "Salı", "Çar", "Per", "Cuma", "Cts", "Paz"]
684            };
685            break;
686
687        case 'fi':
688            return {
689                month_labels: ["Tammikuu", "Helmikuu", "Maaliskuu", "Huhtikuu", "Toukokuu", "Kesäkuu", "Heinäkuu", "Elokuu", "Syyskuu", "Lokakuu", "Marraskuu", "Joulukuu"],
690                dow_labels: ["Ma", "Ti", "Ke", "To", "Pe", "La", "Su"]
691            };
692            break;
693    }
694
695};

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.