doctor-schedule.ts 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. /// <reference path="../../node_modules/moment/moment.d.ts"/>
  2. /// <reference path="../../node_modules/@types/jquery/index.d.ts"/>
  3. // import moment = require("moment");
  4. namespace DoctorSchedule {
  5. let recalculateDate = function (dateSpec, action) {
  6. dateSpec = parseDate(dateSpec);
  7. dateSpec.push((new Date).getFullYear());
  8. dateSpec = dateSpec.reverse();
  9. dateSpec[1]--;
  10. let momentDate = moment(dateSpec);
  11. momentDate[action](7, 'days');
  12. return momentDate.format('DD.MM');
  13. };
  14. let parseDate = function (string) {
  15. return string.split('.').map(data => parseInt(data));
  16. };
  17. let getDateColumn = function (row: JQuery) {
  18. return row.find('td:first-child');
  19. };
  20. let nextDate = function (prev: JQuery, next: JQuery) {
  21. getRows(next).each(function (index) {
  22. let date = getDateColumn($(this)).html();
  23. getDateColumn($(this)).html(recalculateDate(date, 'add'));
  24. });
  25. setButtonsText(prev, next, 'add');
  26. };
  27. let prevDate = function (prev: JQuery, next: JQuery) {
  28. getRows(next).each(function (index) {
  29. let date = getDateColumn($(this)).html();
  30. getDateColumn($(this)).html(recalculateDate(date, 'subtract'));
  31. });
  32. setButtonsText(prev, next, 'subtract');
  33. };
  34. let setButtonsText = function (prev: JQuery, next: JQuery, action) {
  35. setButtonDate(prev, action);
  36. setButtonDate(next, action);
  37. };
  38. let setButtonDate = function (button: JQuery, action) {
  39. let dates = button.html().trim().split(' – ');
  40. console.log(dates);
  41. button.html(recalculateDate(dates[0], action) + ' &ndash; ' + recalculateDate(dates[1], action));
  42. };
  43. let getRows = function (element: JQuery) {
  44. return element.parent().find('tr');
  45. };
  46. class DoctorSchedule {
  47. constructor(prevBtn, nextBtn) {
  48. let next = nextDate.bind(this);
  49. let prev = prevDate.bind(this);
  50. prevBtn.on('click', function (e) {
  51. e.preventDefault();
  52. prev(prevBtn, nextBtn);
  53. });
  54. nextBtn.on('click', function (e) {
  55. e.preventDefault();
  56. next(prevBtn, nextBtn);
  57. });
  58. }
  59. }
  60. export function init($prevBtn: JQuery, $nextBtn: JQuery) {
  61. return new DoctorSchedule($prevBtn, $nextBtn);
  62. }
  63. }