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 var $tableObj = $('<table class="table' + tableClassHtml + '"></table>'); 56 $tableObj = drawTable($calendarElement, $tableObj, dateInitObj.getFullYear(), dateInitObj.getMonth()); 57 58 var $legendObj = drawLegend($calendarElement); 59 60 var $containerHtml = $('<div class="zabuto_calendar"></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></ul>' + 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"></ul>'); 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 var prevMonth = (month - 1); 167 var 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 var nextMonth = (month + 1); 192 var 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 = $('<td></td>').append($prevMonthNav); 210 var $nextMonthCell = $('<td></td>').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 = $('<td colspan="5"></td>'); 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 (isToday(year, month, currDayOfMonth)) { 282 $dayElement.addClass('today'); 283 if ($calendarElement.data('showToday') === true) { 284 $dayElement.html('<span class="badge badge-today">' + currDayOfMonth + '</span>'); 285 } 286 } 287 288 var $dowElement = $('<td id="' + dateId + '"></td>'); 289 $dowElement.append($dayElement); 290 291 $dowElement.data('date', dateAsString(year, month, currDayOfMonth)); 292 $dowElement.data('hasEvent', false); 293 294 if (typeof ($calendarElement.data('actionFunction')) === 'function') {
295 $dowElement.addClass('dow-clickable'); 296 $dowElement.click(function () { 297 $calendarElement.data('selectedDate', $(this).data('date')); 298 }); 299 $dowElement.click($calendarElement.data('actionFunction')); 300 } 301 302 $dowRow.append($dowElement); 303 304 currDayOfMonth++; 305 } 306 if (dow == 6) { 307 firstDow = 0; 308 } 309 } 310 311 $tableObj.append($dowRow); 312 } 313 return $tableObj; 314 } 315 316 /* ----- Modal functions ----- */ 317 318 function createModal(id, title, body, footer) { 319 var $modalHeaderButton = $('<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>'); 320 var $modalHeaderTitle = $('<h4 class="modal-title" id="' + id + '_modal_title">' + title + '</h4>'); 321 322 var $modalHeader = $('<div class="modal-header"></div>'); 323 $modalHeader.append($modalHeaderButton); 324 $modalHeader.append($modalHeaderTitle); 325 326 var $modalBody = $('<div class="modal-body" id="' + id + '_modal_body">' + body + '</div>'); 327 328 var $modalFooter = $('<div class="modal-footer" id="' + id + '_modal_footer"></div>'); 329 if (typeof (footer) !== 'undefined') { 330 var $modalFooterAddOn = $('<div>' + footer + '</div>'); 331 $modalFooter.append($modalFooterAddOn); 332 } 333 334 var $modalContent = $('<div class="modal-content"></div>'); 335 $modalContent.append($modalHeader); 336 $modalContent.append($modalBody); 337 $modalContent.append($modalFooter); 338 339 var $modalDialog = $('<div class="modal-dialog"></div>'); 340 $modalDialog.append($modalContent); 341 342 var $modalFade = $('<div class="modal fade" id="' + id + '_modal" tabindex="-1" role="dialog" aria-labelledby="' + id + '_modal_title" aria-hidden="true"></div>'); 343 $modalFade.append($modalDialog); 344 345 $modalFade.data('dateId', id); 346 $modalFade.attr("dateId", id); 347 348 return $modalFade; 349 } 350 351 /* ----- Event functions ----- */ 352 353 function checkEvents($calendarElement, year, month) { 354 var jsonData = $calendarElement.data('jsonData'); 355 var ajaxSettings = $calendarElement.data('ajaxSettings'); 356 357 $calendarElement.data('events', false); 358 359 if (false !== jsonData) { 360 return jsonEvents($calendarElement); 361 } else if (false !== ajaxSettings) { 362 return ajaxEvents($calendarElement, year, month); 363 } 364 365 return true; 366 } 367 368 function jsonEvents($calendarElement) { 369 var jsonData = $calendarElement.data('jsonData'); 370 $calendarElement.data('events', jsonData); 371 drawEvents($calendarElement, 'json'); 372 return true; 373 } 374 375 function ajaxEvents($calendarElement, year, month) { 376 var ajaxSettings = $calendarElement.data('ajaxSettings'); 377 378 if (typeof (ajaxSettings) != 'object' || typeof (ajaxSettings.url) == 'undefined') { 379 alert('Invalid calendar event settings'); 380 return false; 381 } 382 383 var data = {year: year, month: (month + 1)}; 384 385 $.ajax({ 386 type: 'GET', 387 url: ajaxSettings.url, 388 data: data, 389 dataType: 'json' 390 }).done(function (response) { 391 var events = []; 392 $.each(response.events, function (k, v) { 393 events.push(response.events[k]); 394 }); 395 $calendarElement.data('events', events); 396 $calendarElement.data('data', response); 397 drawEvents($calendarElement, 'ajax'); 398 }); 399 400 return true; 401 } 402 403 function drawEvents($calendarElement, type) { 404 var jsonData = $calendarElement.data('jsonData'); 405 var ajaxSettings = $calendarElement.data('ajaxSettings'); 406 407 var events = $calendarElement.data('events'); 408 if (events !== false) { 409 $(events).each(function (index, value) { 410 var id = $calendarElement.attr('id') + '_' + value.date; 411 var $dowElement = $('#' + id); 412 var $dayElement = $('#' + id + '_day'); 413 414 $dowElement.data('hasEvent', true); 415 416 if (typeof (value.title) !== 'undefined') { 417 $dowElement.attr('title', value.title); 418 } 419 420 if (typeof (value.classname) === 'undefined') { 421 $dowElement.addClass('event'); 422 } else { 423 $dowElement.addClass('event-styled'); 424 $dayElement.addClass(value.classname); 425 } 426 427 if (typeof (value.badge) !== 'undefined' && value.badge !== false) { 428 var badgeClass = (value.badge === true) ? '' : ' badge-' + value.badge; 429 var dayLabel = $dayElement.data('day'); 430 $dayElement.html('<span class="badge badge-event' + badgeClass + '">' + dayLabel + '</span>'); 431 } 432 433 if (typeof (value.body) !== 'undefined') { 434 var modalUse = false;
435 if (type === 'json' && typeof (value.modal) !== 'undefined' && value.modal === true) { 436 modalUse = true; 437 } else if (type === 'ajax' && 'modal' in ajaxSettings && ajaxSettings.modal === true) { 438 modalUse = true; 439 } 440 441 if (modalUse === true) { 442 $dowElement.addClass('event-clickable'); 443 444 var $modalElement = createModal(id, value.title, value.body, value.footer); 445 $('body').append($modalElement); 446 447 $('#' + id).click(function () { 448 $('#' + id + '_modal').modal(); 449 }); 450 } 451 } 452 }); 453 } 454 455 opts.callback(); 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.zabuto_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.zabuto_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", "
636November", "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", "Septiembre", "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", "
741November", "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 775};
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.