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><i class="fa fa-angle-left"></i></span>'); 147 var $nextMonthNavIcon = $('<span><i class="fa fa-angle-right"></i></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 316 /* ----- Event functions ----- */ 317 318 function checkEvents($calendarElement, year, month) { 319 var jsonData = $calendarElement.data('jsonData'); 320 var ajaxSettings = $calendarElement.data('ajaxSettings'); 321 322 $calendarElement.data('events', false); 323 324 if (false !== jsonData) { 325 return jsonEvents($calendarElement); 326 } else if (false !== ajaxSettings) { 327 return ajaxEvents($calendarElement, year, month); 328 } 329 330 return true; 331 } 332 333 function jsonEvents($calendarElement) { 334 var jsonData = $calendarElement.data('jsonData'); 335 $calendarElement.data('events', jsonData); 336 drawEvents($calendarElement, 'json'); 337 return true; 338 } 339 340 function ajaxEvents($calendarElement, year, month) { 341 var ajaxSettings = $calendarElement.data('ajaxSettings'); 342 343 if (typeof(ajaxSettings) != 'object' || typeof(ajaxSettings.url) == 'undefined') { 344 alert('Invalid calendar event settings'); 345 return false; 346 } 347 348 var data = {year: year, month: (month + 1)}; 349 350 $.ajax({ 351 type: 'GET', 352 url: ajaxSettings.url, 353 data: data, 354 dataType: 'json' 355 }).done(function (response) { 356 var events = []; 357 $.each(response, function (k, v) { 358 events.push(response[k]); 359 }); 360 $calendarElement.data('events', events); 361 drawEvents($calendarElement, 'ajax'); 362 }); 363 364 return true; 365 } 366 367 function drawEvents($calendarElement, type) { 368 var jsonData = $calendarElement.data('jsonData'); 369 var ajaxSettings = $calendarElement.data('ajaxSettings'); 370 371 var events = $calendarElement.data('events'); 372 if (events !== false) { 373 $(events).each(function (index, value) { 374 var id = $calendarElement.attr('id') + '_' + value.date; 375 var $dowElement = $('#' + id); 376 var $dayElement = $('#' + id + '_day'); 377 378 $dowElement.data('hasEvent', true); 379 380 if (typeof(value.title) !== 'undefined') { 381 $dowElement.attr('title', value.title); 382 } 383 if (typeof(value.url) !== 'undefined') { 384 $dowElement.attr('url', value.url); 385 } 386 if (typeof(value.location) !== 'undefined') { 387 $dowElement.attr('location', value.location); 388 } 389 390 391 if (typeof(value.classname) === 'undefined') { 392 $dowElement.addClass('event'); 393 } else { 394 $dowElement.addClass('event-styled'); 395 $dayElement.addClass(value.classname); 396 } 397 398 if (typeof(value.badge) !== 'undefined' && value.badge !== false) { 399 var badgeClass = (value.badge === true) ? '' : ' badge-' + value.badge; 400 var dayLabel = $dayElement.data('day'); 401 $dayElement.html('<span class="badge badge-event' + badgeClass + '">' + dayLabel + '</span>'); 402 } 403 404 if (typeof(value.body) !== 'undefined') { 405 var modalUse = false;
406 if (type === 'json' && typeof(value.modal) !== 'undefined' && value.modal === true) { 407 modalUse = true; 408 } else if (type === 'ajax' && 'modal' in ajaxSettings && ajaxSettings.modal === true) { 409 modalUse = true; 410 } 411 412 if (modalUse === true) { 413 $dowElement.addClass('event-clickable'); 414 415 var $modalElement = createModal(id, value.title, value.body, value.footer); 416 $('body').append($modalElement); 417 418 $('#' + id).click(function () { 419 $('#' + id + '_modal').modal(); 420 }); 421 } 422 } 423 }); 424 } 425 } 426 427 /* ----- Helper functions ----- */ 428 429 function isToday(year, month, day) { 430 var todayObj = new Date(); 431 var dateObj = new Date(year, month, day); 432 return (dateObj.toDateString() == todayObj.toDateString()); 433 } 434 435 function dateAsString(year, month, day) { 436 d = (day < 10) ? '0' + day : day; 437 m = month + 1; 438 m = (m < 10) ? '0' + m : m; 439 return year + '-' + m + '-' + d; 440 } 441 442 function calcDayOfWeek(year, month, day) { 443 var dateObj = new Date(year, month, day, 0, 0, 0, 0); 444 var dow = dateObj.getDay(); 445 if (dow == 0) { 446 dow = 6; 447 } else { 448 dow--; 449 } 450 return dow; 451 } 452 453 function calcLastDayInMonth(year, month) { 454 var day = 28; 455 while (checkValidDate(year, month + 1, day + 1)) { 456 day++; 457 } 458 return day; 459 } 460 461 function calcWeeksInMonth(year, month) { 462 var daysInMonth = calcLastDayInMonth(year, month); 463 var firstDow = calcDayOfWeek(year, month, 1); 464 var lastDow = calcDayOfWeek(year, month, daysInMonth); 465 var days = daysInMonth; 466 var correct = (firstDow - lastDow); 467 if (correct > 0) { 468 days += correct; 469 } 470 return Math.ceil(days / 7); 471 } 472 473 function checkValidDate(y, m, d) { 474 return m > 0 && m < 13 && y > 0 && y < 32768 && d > 0 && d <= (new Date(y, m, 0)).getDate(); 475 } 476 477 function checkMonthLimit(count, invert) { 478 if (count === false) { 479 count = 0; 480 } 481 var d1 = $calendarElement.data('currDate'); 482 var d2 = $calendarElement.data('initDate'); 483 484 var months; 485 months = (d2.getFullYear() - d1.getFullYear()) * 12; 486 months -= d1.getMonth() + 1; 487 months += d2.getMonth(); 488 489 if (invert === true) { 490 if (months < (parseInt(count) - 1)) { 491 return true; 492 } 493 } else { 494 if (months >= (0 - parseInt(count))) { 495 return true; 496 } 497 } 498 return false; 499 } 500 }); // each() 501 502 return this; 503}; 504 505/** 506 * Default settings 507 * 508 * @returns object 509 * language: string, 510 * year: integer, 511 * month: integer, 512 * show_previous: boolean|integer, 513 * show_next: boolean|integer, 514 * cell_border: boolean, 515 * today: boolean, 516 * show_days: boolean, 517 * weekstartson: integer (0 = Sunday, 1 = Monday), 518 * nav_icon: object: prev: string, next: string 519 * ajax: object: url: string, modal: boolean, 520 * legend: object array, [{type: string, label: string, classname: string}] 521 * action: function 522 * action_nav: function 523 */ 524$.fn.zabuto_calendar_defaults = function () { 525 var now = new Date(); 526 var year = now.getFullYear(); 527 var month = now.getMonth() + 1; 528 var settings = { 529 language: 'es', 530 year: year, 531 month: month, 532 show_previous: true, 533 show_next: true, 534 cell_border: false, 535 today: true, 536 show_days: true,
537 weekstartson: 1, 538 nav_icon: false, 539 data: [ 540 { 541 'date': '2022-01-11', 542 'badge': true, 543 'title': 'Meeting with John' 544 }, 545 { 546 'date': '2022-01-13', 547 'badge': false, 548 'title': 'Go to market' 549 } 550 ], 551 ajax: true, 552 legend: true, 553 action: function () { 554 //get the selected date 555 var date = $('#' + this.id).data('date'); 556 //alert the date 557 alert('You clicked date: ' + date); 558 }, 559 action_nav: true 560 }; 561 return settings; 562}; 563 564 565//$("#my-calendar").zabuto_calendar( { action: function() { myDateFunction(this.id); } } ); 566 567/** 568 * Language settings 569 * 570 * @param lang 571 * @returns {{month_labels: Array, dow_labels: Array}} 572 */ 573$.fn.zabuto_calendar_language = function (lang) { 574 if (typeof(lang) == 'undefined' || lang === false) { 575 lang = 'en'; 576 } 577 578 switch (lang.toLowerCase()) { 579 case 'de': 580 return { 581 month_labels: ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"], 582 dow_labels: ["Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"] 583 }; 584 break; 585 586 case 'en': 587 return { 588 month_labels: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "
588November", "December"], 589 dow_labels: ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"] 590 }; 591 break; 592 593 case 'ar': 594 return { 595 month_labels: ["ÙÙØ§Ùر", "ÙØ¨Ø±Ø§Ùر", "٠ارس", "أبرÙÙ", "٠اÙÙ", "ÙÙÙÙÙ", "ÙÙÙÙÙ", "أغسطس", "سبت٠بر", "Ø£ÙØªÙبر", "ÙÙÙ٠بر", "Ø¯ÙØ³Ù بر"], 596 dow_labels: ["أثÙÙÙ", "Ø«ÙØ§Ø«Ø§Ø¡", "اربعاء", "Ø®Ù ÙØ³", "ج٠عÙ", "سبت", "Ø£ØØ¯"] 597 }; 598 break; 599 600 case 'es': 601 return { 602 month_labels: ["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"], 603 dow_labels: ["Lu", "Ma", "Mi", "Ju", "Vi", "Sá", "Do"] 604 }; 605 break; 606 607 case 'fr': 608 return { 609 month_labels: ["Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"], 610 dow_labels: ["Lun", "Mar", "Mer", "Jeu", "Ven", "Sam", "Dim"] 611 }; 612 break; 613 614 case 'it': 615 return { 616 month_labels: ["Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre"], 617 dow_labels: ["Lun", "Mar", "Mer", "Gio", "Ven", "Sab", "Dom"] 618 }; 619 break; 620 621 case 'nl': 622 return { 623 month_labels: ["Januari", "Februari", "Maart", "April", "Mei", "Juni", "Juli", "Augustus", "September", "Oktober", "November", "December"], 624 dow_labels: ["Ma", "Di", "Wo", "Do", "Vr", "Za", "Zo"] 625 }; 626 break; 627 628 case 'pl': 629 return { 630 month_labels: ["StyczeÅ", "Luty", "Marzec", "KwiecieÅ", "Maj", "Czerwiec", "Lipiec", "SierpieÅ", "WrzesieÅ", "Październik", "Listopad", "GrudzieÅ"], 631 dow_labels: ["pon.", "wt.", "År.", "czw.", "pt.", "sob.", "niedz."] 632 }; 633 break; 634 635 case 'pt': 636 return { 637 month_labels: ["Janeiro", "Fevereiro", "Marco", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"], 638 dow_labels: ["S", "T", "Q", "Q", "S", "S", "D"] 639 }; 640 break; 641 642 case 'ru': 643 return { 644 month_labels: ["ЯнваÑÑ", "ФевÑалÑ", "ÐаÑÑ", "ÐпÑелÑ", "Ðай", "ÐÑнÑ", "ÐÑлÑ", "ÐвгÑÑÑ", "СенÑÑбÑÑ", "ÐкÑÑбÑÑ", "ÐоÑбÑÑ", "ÐекабÑÑ"], 645 dow_labels: ["Ðн", "ÐÑ", "СÑ", "ЧÑ", "ÐÑ", "Сб", "ÐÑк"] 646 }; 647 break; 648 649 case 'se': 650 return { 651 month_labels: ["Januari", "Februari", "Mars", "April", "Maj", "Juni", "Juli", "Augusti", "September", "Oktober", "November", "December"], 652 dow_labels: ["MÃ¥n", "Tis", "Ons", "Tor", "Fre", "Lör", "Sön"] 653 }; 654 break; 655 656 case 'tr': 657 return { 658 month_labels: ["Ocak", "Åubat", "Mart", "Nisan", "Mayıs", "Haziran", "Temmuz", "AÄustos", "Eylül", "Ekim", "Kasım", "Aralık"], 659 dow_labels: ["Pts", "Salı", "Ãar", "Per", "Cuma", "Cts", "Paz"] 660 }; 661 break; 662 663 case 'fi': 664 return { 665 month_labels: ["Tammikuu", "Helmikuu", "Maaliskuu", "Huhtikuu", "Toukokuu", "Kesäkuu", "Heinäkuu", "Elokuu", "Syyskuu", "Lokakuu", "Marraskuu", "Joulukuu"], 666 dow_labels: ["Ma", "Ti", "Ke", "To", "Pe", "La", "Su"] 667 }; 668 break; 669 } 670 671};
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.