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