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