1/** 2 * Zabuto Calendar 3 * 4 * Dependencies 5 * - jQuery (2.0.3) 6 * - Twitter Bootstrap (3.0.2) 7 */ 8 9var $ = jQuery; 10 11if (typeof jQuery == 'undefined') { 12 throw new Error('jQuery is not loaded'); 13} 14 15/** 16 * Create calendar 17 * 18 * @param options 19 * @returns {*} 20 */ 21$.fn.zabuto_calendar = function (options) { 22 var opts = $.extend({}, $.fn.zabuto_calendar_defaults(), options); 23 var languageSettings = $.fn.zabuto_calendar_language(opts.language); 24 opts = $.extend({}, opts, languageSettings); 25 26 this.each(function () { 27 var $calendarElement = $(this); 28 $calendarElement.attr('id', "zabuto_calendar_" + Math.floor(Math.random() * 99999).toString(36)); 29 30 $calendarElement.data('initYear', opts.year); 31 $calendarElement.data('initMonth', opts.month); 32 $calendarElement.data('monthLabels', opts.month_labels); 33 $calendarElement.data('weekStartsOn', opts.weekstartson); 34 $calendarElement.data('navIcons', opts.nav_icon); 35 $calendarElement.data('dowLabels', opts.dow_labels); 36 $calendarElement.data('showToday', opts.today); 37 $calendarElement.data('showDays', opts.show_days); 38 $calendarElement.data('showPrevious', opts.show_previous); 39 $calendarElement.data('showNext', opts.show_next); 40 $calendarElement.data('cellBorder', opts.cell_border); 41 $calendarElement.data('jsonData', opts.data); 42 $calendarElement.data('ajaxSettings', opts.ajax); 43 $calendarElement.data('legendList', opts.legend); 44 $calendarElement.data('actionFunction', opts.action); 45 $calendarElement.data('actionNavFunction', opts.action_nav); 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 if (typeof(legend) == 'object' && legend.length > 0) { 90 $(legend).each(function (index, item) { 91 if (typeof(item) == 'object') { 92 if ('type' in item) { 93 var itemLabel = ''; 94 if ('label' in item) { 95 itemLabel = item.label; 96 } 97 98 switch (item.type) { 99 case 'text': 100 if (itemLabel !== '') { 101 var itemBadge = ''; 102 if ('badge' in item) { 103 if (typeof(item.classname) === 'undefined') { 104 var badgeClassName = 'badge-event'; 105 } else { 106 var badgeClassName = item.classname; 107 } 108 itemBadge = '<span class="badge ' + badgeClassName + '">' + item.badge + '</span> '; 109 } 110 $legendObj.append('<span class="legend-' + item.type + '">' + itemBadge + itemLabel + '</span>'); 111 } 112 break; 113 case 'block': 114 if (itemLabel !== '') { 115 itemLabel = '<span>' + itemLabel + '</span>'; 116 } 117 if (typeof(item.classname) === 'undefined') { 118 var listClassName = 'event'; 119 } else { 120 var listClassName = 'event-styled ' + item.classname; 121 } 122 $legendObj.append('<span class="legend-' + item.type + '"><ul class="legend"><li class="' + listClassName + '"></li></ul>' + itemLabel + '</span>'); 123 break; 124 case 'list':
125 if ('list' in item && typeof(item.list) == 'object' && item.list.length > 0) { 126 var $legendUl = $('<ul class="legend"></ul>'); 127 $(item.list).each(function (listIndex, listClassName) { 128 $legendUl.append('<li class="' + listClassName + '"></li>'); 129 }); 130 $legendObj.append($legendUl); 131 } 132 break; 133 case 'spacer': 134 $legendObj.append('<span class="legend-' + item.type + '"> </span>'); 135 break; 136 137 } 138 } 139 } 140 }); 141 } 142 143 return $legendObj; 144 } 145 146 function appendMonthHeader($calendarElement, $tableObj, year, month) { 147 var navIcons = $calendarElement.data('navIcons'); 148 var $prevMonthNavIcon = $('<a href="javascript:void(0);" title="Zobacz poprzedni miesiÄ c" aria-label="Zobacz poprzedni miesiÄ c"><span class="glyphicon glyphicon-chevron-left"></span></a>'); 149 var $nextMonthNavIcon = $('<a href="javascript:void(0);" title="Zobacz nastÄpny miesiÄ c" aria-label="Zobacz poprzedni miesiÄ c"><span class="glyphicon glyphicon-chevron-right"></span></a>'); 150 if (typeof(navIcons) === 'object') { 151 if ('prev' in navIcons) { 152 $prevMonthNavIcon.html(navIcons.prev); 153 } 154 if ('next' in navIcons) { 155 $nextMonthNavIcon.html(navIcons.next); 156 } 157 } 158 159 var prevIsValid = $calendarElement.data('showPrevious'); 160 if (typeof(prevIsValid) === 'number' || prevIsValid === false) { 161 prevIsValid = checkMonthLimit($calendarElement.data('showPrevious'), true); 162 } 163 164 var $prevMonthNav = $('<div class="calendar-month-navigation"></div>'); 165 $prevMonthNav.attr('id', $calendarElement.attr('id') + '_nav-prev'); 166 $prevMonthNav.data('navigation', 'prev'); 167 if (prevIsValid !== false) { 168 var prevMonth = (month - 1); 169 var prevYear = year; 170 if (prevMonth == -1) { 171 prevYear = (prevYear - 1); 172 prevMonth = 11; 173 } 174 $prevMonthNav.data('to', {year: prevYear, month: (prevMonth + 1)}); 175 $prevMonthNav.append($prevMonthNavIcon); 176 if (typeof($calendarElement.data('actionNavFunction')) === 'function') { 177 $prevMonthNav.click($calendarElement.data('actionNavFunction')); 178 } 179 $prevMonthNav.click(function (e) { 180 drawTable($calendarElement, $tableObj, prevYear, prevMonth); 181 }); 182 } 183 184 var nextIsValid = $calendarElement.data('showNext'); 185 if (typeof(nextIsValid) === 'number' || nextIsValid === false) { 186 nextIsValid = checkMonthLimit($calendarElement.data('showNext'), false); 187 } 188 189 var $nextMonthNav = $('<div class="calendar-month-navigation"></div>'); 190 $nextMonthNav.attr('id', $calendarElement.attr('id') + '_nav-next'); 191 $nextMonthNav.data('navigation', 'next'); 192 if (nextIsValid !== false) { 193 var nextMonth = (month + 1); 194 var nextYear = year; 195 if (nextMonth == 12) { 196 nextYear = (nextYear + 1); 197 nextMonth = 0; 198 } 199 $nextMonthNav.data('to', {year: nextYear, month: (nextMonth + 1)}); 200 $nextMonthNav.append($nextMonthNavIcon); 201 if (typeof($calendarElement.data('actionNavFunction')) === 'function') { 202 $nextMonthNav.click($calendarElement.data('actionNavFunction')); 203 } 204 $nextMonthNav.click(function (e) { 205 drawTable($calendarElement, $tableObj, nextYear, nextMonth); 206 }); 207 } 208 209 var monthLabels = $calendarElement.data('monthLabels'); 210 211 var $prevMonthCell = $('<td></td>').append($prevMonthNav); 212 var $nextMonthCell = $('<td></td>').append($nextMonthNav); 213 214 var $currMonthLabel = $('<span>' + monthLabels[month] + ' ' + year + '</span>'); 215 $currMonthLabel.dblclick(function () { 216 var dateInitObj = $calendarElement.data('initDate'); 217 drawTable($calendarElement, $tableObj, dateInitObj.getFullYear(), dateInitObj.getMonth()); 218 }); 219 220 var $currMonthCell = $('<td colspan="5"></td>'); 221 $currMonthCell.append($currMonthLabel); 222 223 var $monthHeaderRow = $('<tr class="calendar-month-header"></tr>'); 224 $monthHeaderRow.append($prevMonthCell, $currMonthCell, $nextMonthCell); 225 226 $tableObj.append($monthHeaderRow); 227 return $tableObj; 228 } 229 230 function appendDayOfWeekHeader($calendarElement, $tableObj) { 231 if ($calendarElement.data('showDays') === true) { 232 var weekStartsOn = $calendarElement.data('weekStartsOn'); 233 var dowLabels = $calendarElement.data('dowLabels'); 234 if (weekStartsOn === 0) { 235 var dowFull = $.extend([], dowLabels); 236 var sunArray = new Array(dowFull.pop()); 237 dowLabels = sunArray.concat(dowFull); 238 } 239 240 var $dowHeaderRow = $('<tr class="calendar-dow-header"></tr>'); 241 $(dowLabels).each(function (index, value) { 242 $dowHeaderRow.append('<th>' + value + '</th>'); 243 }); 244 $tableObj.append($dowHeaderRow); 245 } 246 return $tableObj; 247 } 248 249 function appendDaysOfMonth($calendarElement, $tableObj, year, month) { 250 var ajaxSettings = $calendarElement.data('ajaxSettings'); 251 var weeksInMonth = calcWeeksInMonth(year, month); 252 var lastDayinMonth = calcLastDayInMonth(year, month); 253 var firstDow = calcDayOfWeek(year, month, 1); 254 var lastDow = calcDayOfWeek(year, month, lastDayinMonth); 255 var currDayOfMonth = 1; 256 257 var weekStartsOn = $calendarElement.data('weekStartsOn'); 258 if (weekStartsOn === 0) { 259 if (lastDow == 6) { 260 weeksInMonth++; 261 } 262 if (firstDow == 6 && (lastDow == 0 || lastDow == 1 || lastDow == 5)) { 263 weeksInMonth--; 264 } 265 firstDow++; 266 if (firstDow == 7) { 267 firstDow = 0; 268 } 269 } 270 271 for (var wk = 0; wk < weeksInMonth; wk++) { 272 var $dowRow = $('<tr class="calendar-dow"></tr>'); 273 for (var dow = 0; dow < 7; dow++) { 274 if (dow < firstDow || currDayOfMonth > lastDayinMonth) { 275 $dowRow.append('<td></td>'); 276 } else { 277 var dateId = $calendarElement.attr('id') + '_' + dateAsString(year, month, currDayOfMonth); 278 var dayId = dateId + '_day'; 279 280 var $dayElement = $('<div id="' + dayId + '" class="day" ><span class="day">' + currDayOfMonth + '</span></div>'); 281 $dayElement.data('day', currDayOfMonth); 282 283 if (isToday(year, month, currDayOfMonth)) { 284 $dayElement.addClass('today'); 285 if ($calendarElement.data('showToday') === true) { 286 $dayElement.html('<span class="badge badge-today">' + currDayOfMonth + '</span>'); 287 } 288 } 289 290 var $dowElement = $('<td id="' + dateId + '"></td>'); 291 $dowElement.append($dayElement); 292 293 $dowElement.data('date', dateAsString(year, month, currDayOfMonth)); 294 $dowElement.data('hasEvent', false); 295 296 if (typeof($calendarElement.data('actionFunction')) === 'function') {
297 $dowElement.addClass('dow-clickable'); 298 $dowElement.click(function () { 299 $calendarElement.data('selectedDate', $(this).data('date')); 300 }); 301 $dowElement.click($calendarElement.data('actionFunction')); 302 } 303 304 $dowRow.append($dowElement); 305 306 currDayOfMonth++; 307 } 308 if (dow == 6) { 309 firstDow = 0; 310 } 311 } 312 313 $tableObj.append($dowRow); 314 } 315 return $tableObj; 316 } 317 318 /* ----- Modal functions ----- */ 319 320 function createModal(id, title, body, footer) { 321 var $modalHeaderButton = $('<button type="button" class="close" data-dismiss="modal" aria-hidden="false">×</button>'); 322 var $modalHeaderTitle = $('<h4 class="modal-title" id="' + id + '_modal_title">' + title + '</h4>'); 323 324 var $modalHeader = $('<div class="modal-header"></div>'); 325 $modalHeader.append($modalHeaderButton); 326 $modalHeader.append($modalHeaderTitle); 327 328 var $modalBody = $('<div class="modal-body" id="' + id + '_modal_body">' + body + '</div>'); 329 330 var $modalFooter = $('<div class="modal-footer" id="' + id + '_modal_footer"></div>'); 331 if (typeof(footer) !== 'undefined') { 332 var $modalFooterAddOn = $('<div>' + footer + '</div>'); 333 $modalFooter.append($modalFooterAddOn); 334 } 335 336 var $modalContent = $('<div class="modal-content"></div>'); 337 $modalContent.append($modalHeader); 338 $modalContent.append($modalBody); 339 $modalContent.append($modalFooter); 340 341 var $modalDialog = $('<div class="modal-dialog"></div>'); 342 $modalDialog.append($modalContent); 343 344 var $modalFade = $('<div class="modal fade" id="' + id + '_modal" tabindex="-1" role="dialog" aria-labelledby="' + id + '_modal_title" aria-hidden="false"></div>'); 345 $modalFade.append($modalDialog); 346 347 $modalFade.data('dateId', id); 348 $modalFade.attr("dateId", id); 349 350 return $modalFade; 351 } 352 353 /* ----- Event functions ----- */ 354 355 function checkEvents($calendarElement, year, month) { 356 var jsonData = $calendarElement.data('jsonData'); 357 var ajaxSettings = $calendarElement.data('ajaxSettings'); 358 359 $calendarElement.data('events', false); 360 361 if (false !== jsonData) { 362 return jsonEvents($calendarElement); 363 } else if (false !== ajaxSettings) { 364 return ajaxEvents($calendarElement, year, month); 365 } 366 367 return true; 368 } 369 370 function jsonEvents($calendarElement) { 371 var jsonData = $calendarElement.data('jsonData'); 372 $calendarElement.data('events', jsonData); 373 drawEvents($calendarElement, 'json'); 374 return true; 375 } 376 377 function ajaxEvents($calendarElement, year, month) { 378 var ajaxSettings = $calendarElement.data('ajaxSettings'); 379 380 if (typeof(ajaxSettings) != 'object' || typeof(ajaxSettings.url) == 'undefined') { 381 alert('Invalid calendar event settings'); 382 return false; 383 } 384 385 var data = {year: year, month: (month + 1)}; 386 387 $.ajax({ 388 type: 'GET', 389 url: ajaxSettings.url, 390 data: data, 391 dataType: 'json' 392 }).done(function (response) { 393 var events = []; 394 $.each(response, function (k, v) { 395 events.push(response[k]); 396 }); 397 $calendarElement.data('events', events); 398 drawEvents($calendarElement, 'ajax'); 399 }); 400 401 return true; 402 } 403 404 function drawEvents($calendarElement, type) { 405 var jsonData = $calendarElement.data('jsonData'); 406 var ajaxSettings = $calendarElement.data('ajaxSettings'); 407 408 var events = $calendarElement.data('events'); 409 410 var titlesList = [] 411 412 if (events !== false) { 413 $(events).each(function (index, value) { 414 var id = $calendarElement.attr('id') + '_' + value.date; 415 var $dowElement = $('#' + id); 416 var $dayElement = $('#' + id + '_day'); 417 418 $dowElement.data('hasEvent', true); 419 420 if (typeof(value.title) !== 'undefined') { 421 $dowElement.attr('title', value.title); 422 } 423 424 if (typeof(value.classname) === 'undefined') { 425 $dowElement.addClass('event'); 426 } else { 427 $dowElement.addClass('event-styled'); 428 $dayElement.addClass(value.classname); 429 } 430 431 432 if (typeof(value.badge) !== 'undefined' && value.badge !== false) { 433 if ($('#' + id + '_day button').length > 0) { 434 435 436 } else { 437 var badgeClass = (value.badge === true) ? '' : ' badge-' + value.badge; 438 var dayLabel = $dayElement.data('day'); 439 $dayElement.html('<button class="badge badge-event' + badgeClass + '">' + dayLabel + '</button>'); 440 $dayElement.append('<div class="title_" aria-hidden="false"></div>'); 441 442 443 } 444 //$dayElement.append('<span class="title_">'+ i +'</span>'); 445 //$dayElement.append('<span class="title_">'+ i +'</span>'); 446 $dayElement.children('.title_').append(value.footer); 447 448 //$dayElement.children('.title_').append(value.footer); 449 $('.calendar-simple-events-list').append(value.footer); 450 451 //titlesList.push(value.title) 452 } 453 454 455 456 // return event object matching the id 457 458 459 if (typeof(value.body) !== 'undefined') { 460 var modalUse = false;
461 if (type === 'json' && typeof(value.modal) !== 'undefined' && value.modal === true) { 462 modalUse = true; 463 } else if (type === 'ajax' && 'modal' in ajaxSettings && ajaxSettings.modal === true) { 464 modalUse = true; 465 } 466 467 if (modalUse === true) { 468 $dowElement.addClass('event-clickable'); 469 470 var $modalElement = createModal(id, value.title, value.body, value.footer); 471 $('body').append($modalElement); 472 473 $('#' + id).click(function () { 474 $('#' + id + '_modal').modal(); 475 }); 476 } else { 477 $dowElement.addClass('event-clickable-no-modal'); 478 } 479 } 480 }); 481 } 482 } 483 484 /* ----- Helper functions ----- */ 485 486 function isToday(year, month, day) { 487 var todayObj = new Date(); 488 var dateObj = new Date(year, month, day); 489 return (dateObj.toDateString() == todayObj.toDateString()); 490 } 491 492 function dateAsString(year, month, day) { 493 var m, d; 494 d = (day < 10) ? '0' + day : day; 495 m = month + 1; 496 m = (m < 10) ? '0' + m : m; 497 return year + '-' + m + '-' + d; 498 } 499 500 function calcDayOfWeek(year, month, day) { 501 var dateObj = new Date(year, month, day, 0, 0, 0, 0); 502 var dow = dateObj.getDay(); 503 if (dow == 0) { 504 dow = 6; 505 } else { 506 dow--; 507 } 508 return dow; 509 } 510 511 function calcLastDayInMonth(year, month) { 512 var day = 28; 513 while (checkValidDate(year, month + 1, day + 1)) { 514 day++; 515 } 516 return day; 517 } 518 519 function calcWeeksInMonth(year, month) { 520 var daysInMonth = calcLastDayInMonth(year, month); 521 var firstDow = calcDayOfWeek(year, month, 1); 522 var lastDow = calcDayOfWeek(year, month, daysInMonth); 523 var days = daysInMonth; 524 var correct = (firstDow - lastDow); 525 if (correct > 0) { 526 days += correct; 527 } 528 return Math.ceil(days / 7); 529 } 530 531 function checkValidDate(y, m, d) { 532 return m > 0 && m < 13 && y > 0 && y < 32768 && d > 0 && d <= (new Date(y, m, 0)).getDate(); 533 } 534 535 function checkMonthLimit(count, invert) { 536 if (count === false) { 537 count = 0; 538 } 539 var d1 = $calendarElement.data('currDate'); 540 var d2 = $calendarElement.data('initDate'); 541 542 var months; 543 months = (d2.getFullYear() - d1.getFullYear()) * 12; 544 months -= d1.getMonth() + 1; 545 months += d2.getMonth(); 546 547 if (invert === true) { 548 if (months < (parseInt(count) - 1)) { 549 return true; 550 } 551 } else { 552 if (months >= (0 - parseInt(count))) { 553 return true; 554 } 555 } 556 return false; 557 } 558 }); // each() 559 560 return this; 561}; 562 563/** 564 * Default settings 565 * 566 * @returns object 567 * language: string, 568 * year: integer, 569 * month: integer, 570 * show_previous: boolean|integer, 571 * show_next: boolean|integer, 572 * cell_border: boolean, 573 * today: boolean, 574 * show_days: boolean, 575 * weekstartson: integer (0 = Sunday, 1 = Monday), 576 * nav_icon: object: prev: string, next: string 577 * ajax: object: url: string, modal: boolean, 578 * legend: object array, [{type: string, label: string, classname: string}] 579 * action: function 580 * action_nav: function 581 */ 582$.fn.zabuto_calendar_defaults = function () { 583 var now = new Date(); 584 var year = now.getFullYear();
585 var month = now.getMonth() + 1; 586 var settings = { 587 language: false, 588 year: year, 589 month: month, 590 show_previous: true, 591 show_next: true, 592 cell_border: false, 593 today: false, 594 show_days: true, 595 weekstartson: 1, 596 nav_icon: false, 597 data: false, 598 ajax: false, 599 legend: false, 600 action: false, 601 action_nav: false 602 }; 603 return settings; 604}; 605 606/** 607 * Language settings 608 * 609 * @param lang 610 * @returns {{month_labels: Array, dow_labels: Array}} 611 */ 612$.fn.zabuto_calendar_language = function (lang) { 613 if (typeof(lang) == 'undefined' || lang === false) { 614 lang = 'en'; 615 } 616 617 switch (lang.toLowerCase()) { 618 case 'ar': 619 return { 620 month_labels: ["ÙÙØ§Ùر", "ÙØ¨Ø±Ø§Ùر", "٠ارس", "أبرÙÙ", "٠اÙÙ", "ÙÙÙÙÙ", "ÙÙÙÙÙ", "أغسطس", "سبت٠بر", "Ø£ÙØªÙبر", "ÙÙÙ٠بر", "Ø¯ÙØ³Ù بر"], 621 dow_labels: ["أثÙÙÙ", "Ø«ÙØ§Ø«Ø§Ø¡", "اربعاء", "Ø®Ù ÙØ³", "ج٠عÙ", "سبت", "Ø£ØØ¯"] 622 }; 623 break; 624 625 case "az": 626 return { 627 month_labels: ["Yanvar", "Fevral", "Mart", "Aprel", "May", "İyun", "İyul", "Avqust", "Sentyabr", "Oktyabr", "Noyabr", "Dekabr"], 628 dow_labels: ["B.e", "Ã.A", "ÃÉrÅ", "C.A", "CümÉ", "ÅÉn", "Baz"] 629 }; 630 break; 631 632 case 'ca': 633 return { 634 month_labels: ["Gener", "Febrer", "Març", "Abril", "Maig", "Juny", "Juliol", "Agost", "Setembre", "Octubre", "Novembre", "Desembre"], 635 dow_labels: ["Dl", "Dt", "Dc", "Dj", "Dv", "Ds", "Dg"] 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 'sr': 780 return { 781 month_labels: ["ÐанÑаÑ", "ФебÑÑаÑ", "ÐаÑÑ", "ÐпÑил", "ÐаÑ", "ÐÑн", "ÐÑл", "ÐвгÑÑÑ", "СепÑембаÑ", "ÐкÑобаÑ", "ÐовембаÑ", "ÐеÑембаÑ"], 782 dow_labels: ["Ðон", "УÑо", "СÑе", "ЧеÑ", "ÐеÑ", "СÑб", "Ðед"] 783 }; 784 break; 785 786 case 'tr': 787 return { 788 month_labels: ["Ocak", "Åubat", "Mart", "Nisan", "Mayıs", "Haziran", "Temmuz", "AÄustos", "Eylül", "Ekim", "Kasım", "Aralık"], 789 dow_labels: ["Pts", "Salı", "Ãar", "Per", "Cuma", "Cts", "Paz"] 790 }; 791 break; 792 793 case 'ua': 794 return { 795 month_labels: ["СÑÑенÑ", "ÐÑÑий", "ÐеÑезенÑ", "ÐвÑÑенÑ", "ТÑавенÑ", "ЧеÑвенÑ", "ÐипенÑ", "СеÑпенÑ", "ÐеÑеÑенÑ", "ÐовÑенÑ", "ÐиÑÑопад", "ÐÑÑденÑ"], 796 dow_labels: ["Ðн", "ÐÑ", "СÑ", "ЧÑ", "ÐÑ", "Сб", "Ðд"] 797 }; 798 break; 799 } 800 801};
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.