1// ========== Language =========== 2// Day, Month 3var wordMonth = new Array("มà¸à¸£à¸²à¸à¸¡", "à¸à¸¸à¸¡à¸ าà¸à¸±à¸à¸à¹", "มีà¸à¸²à¸à¸¡", "à¹à¸¡à¸©à¸²à¸¢à¸", "à¸à¸¤à¸©à¸ าà¸à¸¡", "มิà¸à¸¸à¸à¸²à¸¢à¸", "à¸à¸£à¸à¸à¸²à¸à¸¡", "สิà¸à¸«à¸²à¸à¸¡", "à¸à¸±à¸à¸¢à¸²à¸¢à¸", "à¸à¸¸à¸¥à¸²à¸à¸¡", "à¸à¸¤à¸¨à¸à¸´à¸à¸²à¸¢à¸", "à¸à¸±à¸à¸§à¸²à¸à¸¡"); 4var wordDay_sun = "à¸à¸²"; 5var wordDay_mon = "à¸"; 6var wordDay_tue = "à¸"; 7var wordDay_wed = "à¸"; 8var wordDay_thu = "à¸à¸¤"; 9var wordDay_fri = "ศ"; 10var wordDay_sat = "ส"; 11// =============================== 12 13// Global Variable 14var tiva_timetables = []; 15var tiva_current_date = new Date(); 16var tiva_current_month = tiva_current_date.getMonth() + 1; 17var tiva_current_year = tiva_current_date.getFullYear(); 18 19function sortByTime(a,b) { 20 if (a.start_time < b.start_time) { 21 return -1; 22 } else if (a.start_time > b.start_time) { 23 return 1; 24 } else { 25 return 0; 26 } 27} 28 29function sortByEndTime(a,b) { 30 if (a.end_time < b.end_time) { 31 return -1; 32 } else if (a.end_time > b.end_time) { 33 return 1; 34 } else { 35 return 0; 36 } 37} 38 39function getMinTime(timetables) { 40 for (var i = 0; i < timetables.length; i++) { 41 if (timetables[i].start_time) { 42 return parseInt(timetables[i].start_time, 10); 43 } 44 } 45} 46 47function getMaxTime(timetables) { 48 timetables.sort(sortByEndTime); 49 for (var i = timetables.length-1; i >= 0; i--) { 50 if (timetables[i].end_time) { 51 var time = timetables[i].end_time.split(':'); 52 if (time[1] == '00') { 53 return time[0]; 54 } else { 55 return parseInt(time[0], 10) + 1; 56 } 57 } 58 } 59} 60 61function calHour(time) { 62 var t = time.split(':'); 63 return parseInt(t[0], 10) + (t[1] / 60); 64} 65 66function getPosition(axis, start_time) { 67 return parseInt((calHour(start_time) - axis) * 55, 10); // 1 cell top = 55px; 68} 69 70function getHeight(start_time, end_time) { 71 return parseInt((calHour(end_time) - calHour(start_time)) * 55, 10); // 1 cell = 55px; 72} 73 74function checkMulti(timetable, timetables) { 75 var count = 1; 76 77 for (var i = 0; i < timetables.length; i++) { 78 if (timetable.id != timetables[i].id) { 79 if (((calHour(timetable.start_time) >= calHour(timetables[i].start_time)) && (calHour(timetable.start_time) < calHour(timetables[i].end_time))) 80 || ((calHour(timetables[i].start_time) >= calHour(timetable.start_time)) && (calHour(timetables[i].start_time) < calHour(timetable.end_time)))) { 81 count++; 82 } 83 } 84 } 85 86 return count; 87} 88 89function checkOrder(timetable, timetables) { 90 var order = 0; 91 92 for (var i = 0; i < timetables.length; i++) { 93 if (timetable.id > timetables[i].id) { 94 if (((calHour(timetable.start_time) >= calHour(timetables[i].start_time)) && (calHour(timetable.start_time) < calHour(timetables[i].end_time))) 95 || ((calHour(timetables[i].start_time) >= calHour(timetable.start_time)) && (calHour(timetables[i].start_time) < calHour(timetable.end_time)))) { 96 order++; 97 } 98 } 99 } 100 101 return order; 102} 103 104function getDayBefore(day, num) { 105 var d = new Date(); 106 return new Date(d.setTime(day.getTime() - (num * 24 * 60 * 60 * 1000))); 107} 108 109function getDayAfter(day, num) { 110 var d = new Date(); 111 return new Date(d.setTime(day.getTime() + (num * 24 * 60 * 60 * 1000))); 112} 113 114function naviClick(id, btn, weekNum, monthNum, yearNum) { 115 createTimetable(jQuery('#' + id), btn, weekNum, monthNum, yearNum); 116} 117 118// Get timetables of day 119function getTimetables(tiva_timetables, day, month, year) { 120 var timetables = []; 121 for (var i = 0; i < tiva_timetables.length; i++) { 122 if ((tiva_timetables[i].date == day) && (tiva_timetables[i].month == month) && (tiva_timetables[i].year == year)) { 123 timetables.push(tiva_timetables[i]); 124 } 125 } 126 127 return timetables; 128} 129 130// Get timetables of day 131function getTimetablesDay(tiva_timetables, day) { 132 var timetables = []; 133 for (var i = 0; i < tiva_timetables.length; i++) { 134 if (tiva_timetables[i].day == day) { 135 timetables.push(tiva_timetables[i]); 136 } 137 } 138 139 return timetables; 140} 141 142// Get timetables of week 143function getTimetablesWeek(tiva_timetables, first_day, last_day) { 144 var date_check; 145 146 var timetables = []; 147 for (var i = 0; i < tiva_timetables.length; i++) { 148 date_check = new Date(tiva_timetables[i].year, Number(tiva_timetables[i].month) - 1, tiva_timetables[i].date); 149 if ((first_day.getTime() <= date_check.getTime()) && (date_check.getTime() <= last_day.getTime())) { 150 timetables.push(tiva_timetables[i]); 151 } 152 } 153 154 return timetables; 155} 156 157// Change month or year on calendar 158function createTimetable(el, btn, weekNum, monthNum, yearNum) { 159 // Variable 160 var firstDate; 161 var firstDay; 162 var lastDate; 163 var numbDays; 164 var firstDateWeek; 165 var todayDate = new Date(); 166 167 if (btn == "prevyr") { 168 yearNum--; 169 } else if (btn == "nextyr") { 170 yearNum++; 171 } else if (btn == "prevmo") { 172 monthNum--; 173 } else if (btn == "nextmo") { 174 monthNum++; 175 } else if (btn == "prevwe") { 176 firstDateWeek = new Date(weekNum); 177 weekNum = getDayBefore(firstDateWeek, 7); 178 } else if (btn == "nextwe") { 179 firstDateWeek = new Date(weekNum); 180 weekNum = getDayAfter(firstDateWeek, 7); 181 } 182 183 if (monthNum == 0) { 184 monthNum = 12; 185 yearNum--; 186 } else if (monthNum == 13) { 187 monthNum = 1; 188 yearNum++ 189 } 190 191 // Get first day and number days of month 192 firstDate = new Date(yearNum, monthNum - 1, 1); 193 var date_start = (typeof el.attr('data-start') != "undefined") ? el.attr('data-start') : 'sunday'; 194 if (date_start == 'sunday') { 195 firstDay = firstDate.getDay() + 1; 196 } else { 197 firstDay = (firstDate.getDay() == 0) ? 7 : firstDate.getDay(); 198 } 199 200 lastDate = new Date(yearNum, monthNum, 0); 201 numbDays = lastDate.getDate(); 202 203 // Create calendar 204 var view = (typeof el.attr('data-view') != 'undefined') ? el.attr('data-view') : 'month'; 205 if (view == 'week') { 206 timetableWeek(el, tiva_timetables, weekNum); 207 } else if (view == 'list') { 208 timetableList(el, tiva_timetables, weekNum); 209 } else if (view == 'compact') { 210 timetableCompact(el, tiva_timetables, firstDay, numbDays, monthNum, yearNum); 211 } else { 212 timetableMonth(el, tiva_timetables, firstDay, numbDays, monthNum, yearNum); 213 } 214} 215 216// Create timetable week 217function timetableWeek(el, tiva_timetables, firstDayWeek) { 218 var firstWeek = new Date(firstDayWeek); 219 var firstWeekDate = firstWeek.getDate(); 220 var firstWeekMonth = firstWeek.getMonth() + 1; 221 var firstWeekYear = firstWeek.getFullYear(); 222 223 var lastWeek = getDayAfter(firstWeek, 6); 224 var lastWeekDate = lastWeek.getDate(); 225 var lastWeekMonth = lastWeek.getMonth() + 1; 226 var lastWeekYear = lastWeek.getFullYear(); 227 228 var dayArr; 229 var d; 230 var date; 231 var month; 232 var year; 233 234 var first; 235 var last; 236 var header_time; 237 238 // Set wordDay 239 var wordDay; 240 var date_start = (typeof el.attr('data-start') != "undefined") ? el.attr('data-start') : 'sunday'; 241 var timetableString = ""; 242 243 if (date_start == 'sunday') { 244 wordDay = new Array(wordDay_sun, wordDay_mon, wordDay_tue, wordDay_wed, wordDay_thu, wordDay_fri, wordDay_sat); 245 dayArr = new Array("sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday"); 246 } else { // Start with Monday 247 wordDay = new Array(wordDay_mon, wordDay_tue, wordDay_wed, wordDay_thu, wordDay_fri, wordDay_sat, wordDay_sun); 248 dayArr = new Array("monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"); 249 } 250 251 var week_nav; 252 if ((firstWeekMonth != lastWeekMonth) && (firstWeekYear != lastWeekYear)) {
253 week_nav = firstWeekDate + ' ' + wordMonth[firstWeekMonth - 1] + ' ' + (firstWeekYear+543) 254 + ' - ' + lastWeekDate + ' ' + wordMonth[lastWeekMonth - 1] + ' ' + (lastWeekYear+543); 255 } else if (firstWeekMonth != lastWeekMonth) { 256 week_nav = firstWeekDate + ' ' + wordMonth[firstWeekMonth - 1] +' - ' + lastWeekDate + ' ' + wordMonth[lastWeekMonth - 1] + ' ' + (firstWeekYear+543); 257 } else { 258 week_nav = firstWeekDate + ' - ' + lastWeekDate + ' ' + wordMonth[firstWeekMonth - 1] + ' ' + (firstWeekYear+543); 259 } 260 261 if (!(el.attr('data-nav') == 'hide') && !(el.attr('data-mode') == 'day')) { 262 timetableString += '<div class="time-navigation">' 263 + '<span class="navi-icon navi-prev" onClick="naviClick(\'' + el.attr('id') + '\', \'prevwe\', \'' + firstWeek + '\', ' + firstWeekMonth + ', ' + firstWeekYear + ')">❮</span>' 264 + '<span class="navi-time">' + week_nav + '</span>' 265 + '<span class="navi-icon navi-next" onClick="naviClick(\'' + el.attr('id') + '\', \'nextwe\', \'' + firstWeek + '\', ' + firstWeekMonth + ', ' + firstWeekYear + ')">❯</span>' 266 + '</div>'; 267 } 268 269 // Get timetables week 270 if (!(el.attr('data-mode') == 'day')) { 271 tiva_timetables = getTimetablesWeek(tiva_timetables, new Date(firstWeekYear, firstWeekMonth - 1, firstWeekDate), new Date(lastWeekYear, lastWeekMonth - 1, lastWeekDate)); 272 } 273 274 // Get min, max time 275 var min_time = getMinTime(tiva_timetables) ? getMinTime(tiva_timetables) : 0; 276 var max_time = getMaxTime(tiva_timetables) ? getMaxTime(tiva_timetables) : 24; 277 var show_time = (el.attr('data-header-time') == 'hide') ? '' : 'show-time'; 278 279 timetableString += '<div class="timetable-week ' + show_time + '">'; 280 timetableString += '<div class="timetable-axis">'; 281 for (var n = min_time; n <= max_time; n++) { 282 var hour = (n < 10) ? '0' + n : n; 283 timetableString += '<div class="axis-item">' + hour + ':00</div>'; 284 } 285 timetableString += '</div>'; 286 287 timetableString += '<div class="timetable-columns">'; 288 for (var m = 0; m < wordDay.length; m++) { 289 // Caculate date of week 290 d = getDayAfter(firstWeek, m); 291 date = d.getDate(); 292 month = d.getMonth() + 1; 293 year = d.getFullYear(); 294 header_time = (el.attr('data-header-time') == 'hide') ? '' : '<br><span>' + date + ' ' + wordMonth[month - 1] + ' ' + (year+543) + '</span>'; 295 296 first = (m == 0) ? 'first-column' : ''; 297 last = (m == wordDay.length - 1) ? 'last-column' : ''; 298 299 timetableString += '<div class="timetable-column">'; 300 // Header 301 if (screen.width > 768) { 302 timetableString += '<div class="timetable-column-header ' + last + '">' + wordDay[m] + header_time + '</div>'; 303 } else { 304 timetableString += '<div class="timetable-column-header ' + last + '">' + wordDay[m] + header_time + '</div>'; 305 } 306 307 // Content 308 timetableString += '<div class="timetable-column-content">'; 309 // Get timetables of day 310 if (el.attr('data-mode') == 'day') { 311 var timetables = getTimetablesDay(tiva_timetables, dayArr[m]); 312 } else { 313 var timetables = getTimetables(tiva_timetables, date, month, year); 314 } 315 for (var t = 0; t < timetables.length; t++) { 316 if (timetables[t].start_time && timetables[t].end_time) { 317 // Image 318 if (timetables[t].image) { 319 var timetable_image = '<div class="timetable-image"><img src="timetable/images/' + timetables[t].image + '" alt="' + timetables[t].name + '" /></div>'; 320 } else { 321 var timetable_image = ''; 322 } 323 324 // End time 325 if (timetables[t].end_time) { 326 var timetable_end_time = ' - ' + timetables[t].end_time; 327 } else { 328 var timetable_end_time = ''; 329 } 330 331 if (timetables[t].filename) { 332 //var fileatt = timetables[t].filename; 333 //var filetype = fileatt.split("."); 334 //var fileattatch = '<p> FileName : <a href="/assets/portals/740/event/'+ timetables[t].eid +'/'+timetables[t].fileid+'.'+filetype[1]+'" target="_blank">' + timetables[t].filename + '</a></p>'; 335 //var fileattatchdes = '<div class="timetable-desc">' + timetables[t].filedescription + '</div><br />'; 336 var fileattatch = '<p> à¹à¸à¸¥à¹à¹à¸à¸ : <a href="'+ timetables[t].filename +'" target="_blank">Download</a></p>'; 337 var fileatt = ''; 338 var filetype = ''; 339 var fileattatchdes = ''; 340 }else{ 341 var fileatt = ''; 342 var filetype = ''; 343 var fileattatch = ''; 344 var fileattatchdes = ''; 345 346 } 347 // Position 348 var position = getPosition(min_time, timetables[t].start_time); 349 var height = getHeight(timetables[t].start_time, timetables[t].end_time); 350 351 // Width of timetable 352 var item_width = (checkMulti(timetables[t], timetables) > 1) ? 'width:' + (100 / checkMulti(timetables[t], timetables)) + '%;' : ''; 353 var item_left = (checkOrder(timetables[t], timetables) > 0) ? 'left:' + (checkOrder(timetables[t], timetables) * (100 / checkMulti(timetables[t], timetables))) + '%' : ''; 354 355 timetableString += '<div class="timetable-item">' 356 + '<a class="timetable-title color-' + timetables[t].color + '" style="background-color:' + timetables[t].color_code + ';
356top:' + position + 'px; height:' + height + 'px; ' + item_width + item_left + '" href="#' + el.attr('id') + '-popup-' + timetables[t].id + '" class="open-popup-link">' 357 + '<div class="timetable-title-wrap">' 358 + '<div class="timetable-name">' + timetables[t].name + '</div>' 359 + '<div class="timetable-time">' + timetables[t].start_time + ' - ' + timetables[t].end_time + '</div>' 360 + '</div>' 361 + '</a>' 362 + '<div id="' + el.attr('id') + '-popup-' + timetables[t].id + '" class="timetable-popup zoom-anim-dialog mfp-hide">' 363 + '<div class="popup-header color-' + timetables[t].color + '">' 364 + timetables[t].name 365 + '</div>' 366 + '<div class="popup-body">' 367 + timetable_image 368 + '<div class="timetable-time color-' + timetables[t].color + '">' + timetables[t].start_time + timetable_end_time + '</div>' 369 + '<div class="timetable-desc">' + timetables[t].description + '</div>' 370 + fileattatch 371 + fileattatchdes 372 + '</div>' 373 + '</div>' 374 + '</div>'; 375 } 376 } 377 timetableString += '</div>'; 378 379 // Grid 380 timetableString += '<div class="timetable-column-grid">'; 381 for (var n = min_time; n < max_time; n++) { 382 timetableString += '<div class="grid-item ' + first + '"></div>'; 383 } 384 timetableString += '</div>'; 385 timetableString += '</div>'; 386 } 387 timetableString += '</div>'; 388 389 timetableString += '</div>'; 390 391 el.html(timetableString); 392 393 // Popup 394 el.find('.timetable-title').magnificPopup({ 395 type: 'inline', 396 removalDelay: 800, 397 mainClass: 'my-mfp-zoom-in' 398 }); 399} 400 401// Create timetable week 402function timetableList(el, tiva_timetables, firstDayWeek) { 403 var firstWeek = new Date(firstDayWeek); 404 var firstWeekDate = firstWeek.getDate(); 405 var firstWeekMonth = firstWeek.getMonth() + 1; 406 var firstWeekYear = firstWeek.getFullYear(); 407 408 var lastWeek = getDayAfter(firstWeek, 6); 409 var lastWeekDate = lastWeek.getDate(); 410 var lastWeekMonth = lastWeek.getMonth() + 1; 411 var lastWeekYear = lastWeek.getFullYear(); 412 413 var dayArr; 414 var d; 415 var date; 416 var month; 417 var year; 418 419 var first; 420 var last; 421 var header_time; 422 423 // Set wordDay 424 var wordDay; 425 var date_start = (typeof el.attr('data-start') != "undefined") ? el.attr('data-start') : 'sunday'; 426 var timetableString = ""; 427 428 if (date_start == 'sunday') { 429 wordDay = new Array(wordDay_sun, wordDay_mon, wordDay_tue, wordDay_wed, wordDay_thu, wordDay_fri, wordDay_sat); 430 dayArr = new Array("sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday"); 431 } else { // Start with Monday 432 wordDay = new Array(wordDay_mon, wordDay_tue, wordDay_wed, wordDay_thu, wordDay_fri, wordDay_sat, wordDay_sun); 433 dayArr = new Array("monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"); 434 } 435 436 var week_nav; 437 if ((firstWeekMonth != lastWeekMonth) && (firstWeekYear != lastWeekYear)) { 438 week_nav = firstWeekDate + ' ' + wordMonth[firstWeekMonth - 1] + ' ' + (firstWeekYear+543) 439 + ' - ' + lastWeekDate + ' ' + wordMonth[lastWeekMonth - 1] + ' ' + (lastWeekYear+543); 440 } else if (firstWeekMonth != lastWeekMonth) { 441 week_nav = firstWeekDate + ' ' + wordMonth[firstWeekMonth - 1] + ' - ' + lastWeekDate + ' ' + wordMonth[lastWeekMonth - 1] + ' ' + (firstWeekYear+543); 442 } else { 443 week_nav = firstWeekDate + ' - ' + lastWeekDate + ' ' + wordMonth[firstWeekMonth - 1] + ' ' + (firstWeekYear+543); 444 } 445 446 if (!(el.attr('data-nav') == 'hide') && !(el.attr('data-mode') == 'day')) { 447 timetableString += '<div class="time-navigation">' 448 + '<span class="navi-icon navi-prev" onClick="naviClick(\'' + el.attr('id') + '\', \'prevwe\', \'' + firstWeek + '\', ' + firstWeekMonth + ', ' + firstWeekYear + ')">❮</span>' 449 + '<span class="navi-time">' + week_nav + '</span>' 450 + '<span class="navi-icon navi-next" onClick="naviClick(\'' + el.attr('id') + '\', \'nextwe\', \'' + firstWeek + '\', ' + firstWeekMonth + ', ' + firstWeekYear + ')">❯</span>' 451 + '</div>'; 452 } 453 454 var timetables; 455 timetableString += '<div class="timetable-list">'; 456 for (var m = 0; m < wordDay.length; m++) { 457 // Caculate date of week 458 d = getDayAfter(firstWeek, m); 459 date = d.getDate();
460 month = d.getMonth() + 1; 461 year = d.getFullYear(); 462 463 // Get timetables of day 464 if (el.attr('data-mode') == 'day') { 465 timetables = getTimetablesDay(tiva_timetables, dayArr[m]); 466 } else { 467 timetables = getTimetables(tiva_timetables, date, month, year); 468 } 469 470 471 if (timetables.length > 0) { 472 timetableString += '<div class="timetable-day">'; 473 // Header 474 header_time = (el.attr('data-header-time') == 'hide') ? '' : '<span>' + date + ' ' + wordMonth[month - 1] + ' ' + (year+543) + '</span>'; 475 timetableString += '<div class="timetable-header">' + wordDay[m] + header_time + '</div>'; 476 477 // Get timetables of day 478 timetableString += '<div class="timetable-content">'; 479 for (var t = 0; t < timetables.length; t++) { 480 if (timetables[t].start_time && timetables[t].end_time) { 481 // Image 482 if (timetables[t].image) { 483 var timetable_image = '<div class="timetable-image"><img src="timetable/images/' + timetables[t].image + '" alt="' + timetables[t].name + '" /></div>'; 484 } else { 485 var timetable_image = ''; 486 } 487 488 // End time 489 if (timetables[t].end_time) { 490 var timetable_end_time = ' - ' + timetables[t].end_time; 491 } else { 492 var timetable_end_time = ''; 493 } 494if (timetables[t].filename) { 495//var fileatt = timetables[t].filename; 496//var filetype = fileatt.split("."); 497//var fileattatch = '<p> FileName : <a href="/assets/portals/740/event/'+ timetables[t].eid +'/'+timetables[t].fileid+'.'+filetype[1]+'" target="_blank">' + timetables[t].filename + '</a></p>'; 498//var fileattatchdes = '<div class="timetable-desc">' + timetables[t].filedescription + '</div><br />'; 499var fileattatch = '<p> à¹à¸à¸¥à¹à¹à¸à¸ : <a href="'+ timetables[t].filename +'" target="_blank">Download</a></p>'; 500var fileatt = ''; 501var filetype = ''; 502var fileattatchdes = ''; 503}else{ 504 var fileatt = ''; 505 var filetype = ''; 506 var fileattatch = ''; 507 var fileattatchdes = ''; 508 509} //xxx 510 timetableString += '<div class="timetable-item">' 511 + '<div style="border:solid black 1px;width:20px;height:20px;float:left;margin-right:5px;margin-left:-5px;background-color:' + timetables[t].color_code + '"></div>' 512 + '<a class="timetable-title" href="#' + el.attr('id') + '-popup-' + timetables[t].id + '" class="open-popup-link">' 513 + '<span class="timetable-time">' + timetables[t].start_time + timetable_end_time + '</span>' 514 + '<span class="timetable-name">' + timetables[t].name + '</span>' 515 + '</a>' 516 + '<div id="' + el.attr('id') + '-popup-' + timetables[t].id + '" class="timetable-popup zoom-anim-dialog mfp-hide">' 517 + '<div class="popup-header color-' + timetables[t].color + '">' 518 + timetables[t].name 519 + '</div>' 520 + '<div class="popup-body">' 521 + timetable_image 522 + '<div class="timetable-time color-' + timetables[t].color + '">' + timetables[t].start_time + timetable_end_time + '</div>' 523 + '<div class="timetable-desc">' + timetables[t].description + '</div>' 524 + fileattatch 525 + fileattatchdes 526 + '</div>' 527 + '</div>' 528 + '</div>'; 529 } 530 } 531 timetableString += '</div>'; 532 timetableString += '</div>'; 533 } 534 } 535 timetableString += '</div>'; 536 537 el.html(timetableString); 538 539 // Popup 540 el.find('.timetable-title').magnificPopup({ 541 type: 'inline', 542 removalDelay: 800, 543 mainClass: 'my-mfp-zoom-in' 544 }); 545} 546 547// Create timetable month 548function timetableMonth(el, tiva_timetables, firstDay, numbDays, monthNum, yearNum) { 549 550 // Set wordDay 551 var todaysDate = tiva_current_date.getDate(); 552 var wordDay; 553 var date_start = (typeof el.attr('data-start') != "undefined") ? el.attr('data-start') : 'sunday'; 554 var timetableString = ""; 555 var daycounter = 0; 556 557 if (date_start == 'sunday') { 558 wordDay = new Array(wordDay_sun, wordDay_mon, wordDay_tue, wordDay_wed, wordDay_thu, wordDay_fri, wordDay_sat); 559 } else { // Start with Monday 560 wordDay = new Array(wordDay_mon, wordDay_tue, wordDay_wed, wordDay_thu, wordDay_fri, wordDay_sat, wordDay_sun); 561 } 562 563 if (!(el.attr('data-nav') == 'hide')) { 564 timetableString += '<div class="time-navigation">' 565 + '<span class="navi-icon navi-prev" onClick="naviClick(\'' + el.attr('id') + '\', \'prevmo\', \'\', ' + monthNum + ', ' + yearNum + ')">❮
565</span>' 566 + '<span class="navi-time">' + wordMonth[monthNum - 1] + ' ' + (yearNum+543) + '</span>' 567 + '<span class="navi-icon navi-next" onClick="naviClick(\'' + el.attr('id') + '\', \'nextmo\', \'\', ' + monthNum + ', ' + yearNum + ')">❯</span>' 568 + '</div>'; 569 } 570 571 timetableString += '<table class="timetable-month">'; 572 timetableString += '<tbody>'; 573 574 timetableString += '<tr>'; 575 for (var m = 0; m < wordDay.length; m++) { 576 if (screen.width > 768) { 577 timetableString += '<th class="timetable-header">' + wordDay[m] + '</th>'; 578 } else { 579 timetableString += '<th class="timetable-header">' + wordDay[m] + '</th>'; 580 } 581 } 582 timetableString += '</tr>'; 583 584 var thisDate = 1; 585 var class_today; 586 587 for (var i = 1; i <= 6; i++) { 588 var k = (i - 1) * 7 + 1; 589 if (k < (firstDay + numbDays)) { 590 timetableString += '<tr>'; 591 for (var x = 1; x <= 7; x++) { 592 daycounter = (thisDate - firstDay) + 1; 593 thisDate++; 594 595 class_today = ((todaysDate == daycounter) && (tiva_current_month == monthNum) && (tiva_current_year == yearNum)) ? 'today' : ''; 596 timetableString += '<td class="calendar-day ' + class_today + '">'; 597 if ((daycounter <= numbDays) && (daycounter >= 1)) { 598 timetableString += '<div class="calendar-daycounter">' + daycounter + '</div>'; 599 } 600 601 // Get timetables of day 602 var timetables = getTimetables(tiva_timetables, daycounter, monthNum, yearNum); 603 for (var t = 0; t < timetables.length; t++) { 604 // Image 605 if (timetables[t].image) { 606 var timetable_image = '<div class="timetable-image"><img src="timetable/images/' + timetables[t].image + '" alt="' + timetables[t].name + '" /></div>'; 607 } else { 608 var timetable_image = ''; 609 } 610 611 if(timetables[t].start_time=="00:00"){ 612 var datetimeevent = "à¸à¸¥à¸à¸à¸§à¸±à¸"; 613 var showtime = ""; 614 }else if(timetables[t].end_time=="" && timetables[t].end_time==""){ 615 var datetimeevent = ""; 616 var showtime = ' style="display:none;"'; 617 }else{ 618 if (timetables[t].end_time) { 619 var timetable_end_time = ' - ' + timetables[t].end_time; 620 } else { 621 var timetable_end_time = ''; 622 } 623 var datetimeevent = timetables[t].start_time + timetable_end_time; 624 var showtime = ""; 625 } 626 if(timetables[t].start_time=="00:00"){ 627 var startshow = ''; 628 }else{ 629 var startshow = timetables[t].start_time; 630 } 631 632if (timetables[t].filename) { 633/*var fileatt = timetables[t].filename; 634var filetype = fileatt.split("."); 635var fileattatch = '<p> FileName : <a href="/assets/portals/740/event/'+ timetables[t].eid +'/'+timetables[t].fileid+'.'+filetype[1]+'" target="_blank">' + timetables[t].filename + '</a></p>'; 636var fileattatchdes = '<div class="timetable-desc">' + timetables[t].filedescription + '</div><br />'; 637*/ 638var fileattatch = '<p> à¹à¸à¸¥à¹à¹à¸à¸ : <a href="'+ timetables[t].filename +'" target="_blank">Download</a></p>'; 639var fileatt = ''; 640var filetype = ''; 641var fileattatchdes = ''; 642}else{ 643 var fileatt = ''; 644 var filetype = ''; 645 var fileattatch = ''; 646 var fileattatchdes = ''; 647 648} 649 650var widthtable = $(".tiva-timetable").width()/7; 651var daywidth = (widthtable*timetables[t].duration-50); 652var colwidth = ''; 653if(timetables[t].duration > 1){ 654 // daywidth = '20'; 655 colwidth = daywidth+'px;margin-left:-10px;'; 656}else{ 657 colwidth = '20px;'; 658} 659//alert(filetype[1]); 660 timetableString += '<div class="timetable-item">' 661 + '<div style="border:solid black 1px;width:'+colwidth+'height:20px;float:left;margin-right:5px;margin-left:-5px;background-color:' + timetables[t].color_code + '"></div>' 662 + '<a class="timetable-title" href="#' + el.attr('id') + '-popup-' + timetables[t].id + '" class="open-popup-link">' 663 + '<span class="timetable-time">' + startshow + '</span>' 664 + '<span class="timetable-name">' + timetables[t].name + '</span>' 665 + '</a>' 666 + '<div id="' + el.attr('id') + '-popup-' + timetables[t].id + '" class="timetable-popup zoom-anim-dialog mfp-hide">' 667 + '<div class="popup-header color-' + timetables[t].color + '">' 668 + timetables[t].datethai 669 + timetables[t].name 670 + '</div>' 671 + '<div class="popup-body">' 672 + timetable_image 673 + '<div class="timetable-time color-' + timetables[t].color + '"'+showtime+'>' + datetimeevent + '</div>' 674 + '<div class="timetable-desc">' + timetables[t].description + '</div><br />' 675 + fileattatch 676 + fileattatchdes 677 678 + '</div>' 679 + '</div>' 680 + '</div>'; 681 } 682 timetableString += '</td>'; 683 } 684 timetableString += '</tr>'; 685 } 686 } 687 timetableString += '</tbody>'; 688 timetableString += '</table>'; 689 690 el.html(timetableString); 691 692 // Popup 693 el.find('.timetable-title').magnificPopup({ 694 type: 'inline', 695 removalDelay: 800, 696 mainClass: 'my-mfp-zoom-in' 697 }); 698 699 thisDate = 1; 700} 701 702// Create timetable month 703function timetableCompact(el, tiva_timetables, firstDay, numbDays, monthNum, yearNum) { 704 705 // Set wordDay 706 var todaysDate = tiva_current_date.getDate(); 707 var wordDay; 708 var date_start = (typeof el.attr('data-start') != "undefined") ? el.attr('data-start') : 'sunday'; 709 var timetableString = ""; 710 var daycounter = 0; 711 712 if (date_start == 'sunday') { 713 wordDay = new Array(wordDay_sun, wordDay_mon, wordDay_tue, wordDay_wed, wordDay_thu, wordDay_fri, wordDay_sat); 714 } else { // Start with Monday 715 wordDay = new Array(wordDay_mon, wordDay_tue, wordDay_wed, wordDay_thu, wordDay_fri, wordDay_sat, wordDay_sun); 716 } 717 718 if (!(el.attr('data-nav') == 'hide')) { 719 timetableString += '<div class="time-navigation">' 720 + '<span class="navi-icon navi-prev" onClick="naviClick(\'' + el.attr('id') + '\', \'prevmo\', \'\', ' + monthNum + ', ' + yearNum + ')">❮
720</span>' 721 + '<span class="navi-time">' + wordMonth[monthNum - 1] + ' ' + (yearNum+543) + '</span>' 722 + '<span class="navi-icon navi-next" onClick="naviClick(\'' + el.attr('id') + '\', \'nextmo\', \'\', ' + monthNum + ', ' + yearNum + ')">❯</span>' 723 + '</div>'; 724 } 725 726 timetableString += '<table class="timetable-month" id="timetable-compace">'; 727 timetableString += '<tbody>'; 728 729 timetableString += '<tr>'; 730 for (var m = 0; m < wordDay.length; m++) { 731 if (screen.width > 768) { 732 timetableString += '<th class="timetable-header">' + wordDay[m] + '</th>'; 733 } else { 734 timetableString += '<th class="timetable-header">' + wordDay[m] + '</th>'; 735 } 736 } 737 timetableString += '</tr>'; 738 739 var thisDate = 1; 740 var class_today; 741 742 for (var i = 1; i <= 6; i++) { 743 var k = (i - 1) * 7 + 1; 744 if (k < (firstDay + numbDays)) { 745 timetableString += '<tr>'; 746 for (var x = 1; x <= 7; x++) { 747 daycounter = (thisDate - firstDay) + 1; 748 thisDate++; 749 750 class_today = ((todaysDate == daycounter) && (tiva_current_month == monthNum) && (tiva_current_year == yearNum)) ? 'today' : ''; 751 timetableString += '<td class="calendar-day ' + class_today + '">'; 752 if ((daycounter <= numbDays) && (daycounter >= 1)) { 753 timetableString += '<div class="calendar-daycounter">' + daycounter + '</div>'; 754 } 755 756 // Get timetables of day 757 var timetables = getTimetables(tiva_timetables, daycounter, monthNum, yearNum); 758 for (var t = 0; t < timetables.length; t++) { 759 // Image 760 if (timetables[t].image) { 761 var timetable_image = '<div class="timetable-image"><img src="timetable/images/' + timetables[t].image + '" alt="' + timetables[t].name + '" /></div>'; 762 } else { 763 var timetable_image = ''; 764 } 765 if(timetables[t].description==""){ 766 var showbody = ' style="display:none;"'; 767 }else{ 768 var showbody = ""; 769 } 770 if(timetables[t].start_time=="00:00" && timetables[t].end_time=="23:59"){ 771 var datetimeevent = "à¸à¸¥à¸à¸à¸§à¸±à¸"; 772 var showtime = ""; 773 }else if(timetables[t].end_time=="" && timetables[t].end_time==""){ 774 var datetimeevent = ""; 775 var showtime = ' style="display:none;"'; 776 }else{ 777 if (timetables[t].end_time) { 778 var timetable_end_time = ' - ' + timetables[t].end_time; 779 } else { 780 var timetable_end_time = ''; 781 } 782 var datetimeevent = timetables[t].start_time + timetable_end_time; 783 var showtime = ""; 784 } 785 // End time 786 787if (timetables[t].filename) { 788//var fileatt = timetables[t].filename; 789//var filetype = fileatt.split("."); 790var fileatt = ''; 791var filetype = ''; 792//var fileattatch = '<p> FileName : <a href="/assets/portals/740/event/'+ timetables[t].eid +'/'+timetables[t].fileid+'.'+filetype[1]+'" target="_blank">' + timetables[t].filename + '</a></p>'; 793//var fileattatchdes = '<div class="timetable-desc">' + timetables[t].filedescription + '</div><br />'; 794var fileattatch = '<p> à¹à¸à¸¥à¹à¹à¸à¸ : <a href="'+ timetables[t].filename +'" target="_blank">Download</a></p>'; 795var fileattatchdes = ''; 796}else{ 797 var fileatt = ''; 798 var filetype = ''; 799 var fileattatch = ''; 800 var fileattatchdes = ''; 801 802} 803//alert(filetype[1]); 804 805var widthtable = $(".tiva-timetable").width()/7; 806var daywidth = (widthtable*timetables[t].duration-50); 807var colwidth = ''; 808if(daywidth < 0){ 809 daywidth = '20'; 810 colwidth = daywidth+'px;margin-left:-10px;'; 811}else{ 812 colwidth = daywidth+'px;'; 813} 814//console.log(widthtable); 815 816// console.log(timetables[t]); 817// à¹à¸à¹à¸à¸¥à¸´à¸à¸à¹à¹à¸à¸¥à¹ 818var filelink = timetables[t].filelink; 819var anchor_filelink = ''; 820if (filelink && filelink !== '#') { 821 anchor_filelink = '<a class="btn" style="color: white; border-radius: 10px; background-color: ' + timetables[t].color_code + ';" href="' + timetables[t].filelink + '" target="_blank">à¸à¸¹à¸£à¸²à¸¢à¸¥à¸°à¹à¸à¸µà¸¢à¸</a>' 822} else { 823 anchor_filelink = ''; 824} 825 826 timetableString += '<div class="timetable-item" style="background-color:' + timetables[t].color_code + '">' 827 + '<a class="timetable-title open-popup-link" href="#' + el.attr('id') + '-popup-' + timetables[t].id + '" role="button" aria-controls="' + el.attr('id') + '-popup-' + timetables[t].id + '" aria-expanded="false" aria-label="à¸à¸à¸´à¸à¸´à¸à¸à¸²à¸£à¸à¸£à¸°à¸à¸¸à¸¡">' 828 + '<div style="width:'+colwidth+'height:10px;float:left;margin-bottom:2px;background-color:' + timetables[t].color_code + '"></div>' 829 + '</a>' 830 + '<div id="' + el.attr('id') + '-popup-' + timetables[t].id + '" class="timetable-popup zoom-anim-dialog mfp-hide">' 831 + '<div class="popup-header" style="background-color:' + timetables[t].color_code + '">' 832 + timetables[t].datethai 833 + timetables[t].name 834 + '</div>' 835 + '<div class="popup-body"'+showbody+'>' 836 + timetable_image 837 + '<div class="timetable-time color-' + timetables[t].color + '"'+showtime+'>' + datetimeevent + '</div>' 838 + '<div class="timetable-desc">' + timetables[t].description + '</div><br />' 839 + '<div class="timetable-btnlink">' 840 + anchor_filelink 841 + '</div>' 842 + fileattatch 843 + fileattatchdes 844 845 + '</div>' 846 + '</div>' 847 + '</div>'; 848 849 850 } 851 timetableString += '</td>'; 852 } 853 timetableString += '</tr>'; 854 } 855 } 856 timetableString += '</tbody>'; 857 timetableString += '</table>'; 858 859 el.html(timetableString); 860 861 // Popup 862 el.find('.timetable-title').magnificPopup({ 863 type: 'inline', 864 removalDelay: 800, 865 mainClass: 'my-mfp-zoom-in' 866 }); 867 868 thisDate = 1; 869} 870 871jQuery(document).ready(function(){ 872 jQuery('.tiva-timetable').each(function(index) { 873 // Set id for timetable 874 jQuery(this).attr('id', 'timetable-' + (index + 1)); 875 var cururl = $(location).attr('href'); 876 var portalid = cururl.split("/",6); 877 // console.log(portalid); 878 879 //alert(resstr[4]); 880 // Get timetables from json file or ajax php 881 var source = (typeof jQuery(this).attr('data-source') != 'undefined') ? jQuery(this).attr('data-source') : 'json'; 882 var view = (typeof jQuery(this).attr('data-view') != 'undefined') ? jQuery(this).attr('data-view') : 'month'; 883 if ((jQuery(this).attr('data-mode') == 'day') && ((view == 'week') || (view == 'list'))) { 884 var mode = 'day'; 885 } else { 886 var mode = 'date'; 887 } 888 889 var timetable_contain = jQuery(this); 890 891 if (source == 'json') { // Get timetables from json file 892 if (mode == 'day') { 893 var timetable_json = '/library/tivatimetable/timetable/timetables_day.json'; 894 } else { 895 var timetable_json = '/library/tivatimetable/timetable/timetables_date.json'; 896 } 897 898 jQuery.getJSON(timetable_json, function(data) { 899 // Init timetables variable 900 tiva_timetables = []; 901 902 for (var i = 0; i < data.items.length; i++) { 903 tiva_timetables.push(data.items[i]); 904 } 905 906 // Sort timetables by date 907 tiva_timetables.sort(sortByTime); 908 909 for (var j = 0; j < tiva_timetables.length; j++) { 910 tiva_timetables[j].id = j; 911 } 912 913 // Create timetable 914 var todayDate = new Date(); 915 var date_start = (typeof timetable_contain.attr('data-start') != "undefined") ? timetable_contain.attr('data-start') : 'sunday'; 916 if (date_start == 'sunday') { 917 var tiva_current_week = new Date(todayDate.setDate(tiva_current_date.getDate() - todayDate.getDay())); 918 } else { 919 var today_date = (todayDate.getDay() == 0) ? 7 : todayDate.getDay(); 920 var tiva_current_week = new Date(todayDate.setDate(tiva_current_date.getDate() - today_date + 1)); 921 } 922 createTimetable(timetable_contain, 'current', tiva_current_week, tiva_current_month, tiva_current_year); 923 }); 924 }
924 else { // Get timetables from php file via ajax : timetables/timetables.php 925 var timetableElement = document.querySelector('.tiva-timetable'); 926 var phpModuleid = timetableElement.getAttribute('data-moduleid'); 927 var phpLangid = timetableElement.getAttribute('data-langid'); 928 // console.log('moduleid '+ phpModuleid); // Use the PHP variable in your JS code 929 // console.log('langid '+ phpLangid); 930 var urlgetData = '/calendar_meeting_module/displayEventTivaTimeTable/'+phpModuleid+'/'+phpLangid+'/?p='+portalid[4]; 931 console.log('urlgetData '+ urlgetData); 932 jQuery.ajax({ 933 url: urlgetData,//get from url spit limit 5 value in array4 934 dataType: 'json', 935 data: '', 936 beforeSend : function(){ 937 timetable_contain.html('<div class="loading"><img src="/assets/images/loading.gif" /></div>'); 938 }, 939 success: function(data) { 940 // Init timetables variable 941 tiva_timetables = []; 942 943 for (var i = 0; i < data.length; i++) { 944 tiva_timetables.push(data[i]); 945 } 946 947 // Sort timetables by date 948 tiva_timetables.sort(sortByTime); 949 950 for (var j = 0; j < tiva_timetables.length; j++) { 951 tiva_timetables[j].id = j; 952 } 953 954 // Create timetable 955 var todayDate = new Date(); 956 var date_start = (typeof timetable_contain.attr('data-start') != "undefined") ? timetable_contain.attr('data-start') : 'sunday'; 957 if (date_start == 'sunday') { 958 var tiva_current_week = new Date(todayDate.setDate(tiva_current_date.getDate() - todayDate.getDay())); 959 } else { 960 var today_date = (todayDate.getDay() == 0) ? 7 : todayDate.getDay(); 961 var tiva_current_week = new Date(todayDate.setDate(tiva_current_date.getDate() - today_date + 1)); 962 } 963 createTimetable(timetable_contain, 'current', tiva_current_week, tiva_current_month, tiva_current_year); 964 }, 965 error: function (xhr, ajaxOptions, thrownError) { 966 alert(xhr.status); 967 alert(thrownError); 968 // console.log(xhr.status); 969 // console.log(thrownError); 970 } 971 }); 972 } 973 }); 974});
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.