Advertisement
Guest User

Untitled

a guest
Oct 13th, 2019
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.21 KB | None | 0 0
  1. <template>
  2. <div class="cattle-breeding-date">
  3. <form ref="form" class="calculator-form" style="opacity: 0;">
  4. <legend>Cattle Breeding Date</legend>
  5. <fieldset ref="inputs" class="inputs">
  6. <label>Desired Calving Date
  7. <input ref="calvingDate" type="date" name="calvingDate" value="" required />
  8. </label>
  9. <label>Gestation Period
  10. <select ref="gestationPeriod" name="gestationPeriod"></select>
  11. </label>
  12. </fieldset>
  13. <fieldset ref="results" class="results" hidden></fieldset>
  14. <fieldset ref="slot" class="slotted">
  15. <slot></slot>
  16. </fieldset>
  17. <fieldset class="actions">
  18. <input class="btn" type="submit" name="submit" value="Calculate" ref="finish" />
  19. <input class="btn" type="button" name="restart" value="Start Over" ref="start" hidden />
  20. </fieldset>
  21. </form>
  22. </div>
  23. </template>
  24. <style></style>
  25. <script>
  26. const gestationPeriods = [279, 280, 281, 282, 283, 284, 285, 286, 287];
  27.  
  28. export default {
  29. name: 'cattle-breeding-date',
  30. stylesheet: 'styles/forms.css',
  31. connectedCallback ({refs, forms, emit}) {
  32. refs.calvingDate.value = new Date().toDateInputValue();
  33. var gestationProp = parseInt(this.getAttribute('gestationPeriod') || '283');
  34.  
  35. var formId = this.getAttribute('id') || '';
  36.  
  37. gestationPeriods.forEach(num => {
  38. const option = document.createElement('option');
  39. option.value = num;
  40. option.textContent = `${num} days`;
  41. if (num === gestationProp) {
  42. option.selected = true;
  43. }
  44. refs.gestationPeriod.appendChild(option);
  45. });
  46.  
  47. refs.start.addEventListener('click', event => {
  48. event.preventDefault();
  49. refs.results.setAttribute('hidden', true);
  50. refs.inputs.removeAttribute('hidden');
  51. refs.finish.removeAttribute('hidden');
  52. refs.start.setAttribute('hidden', true);
  53. });
  54.  
  55. refs.finish.addEventListener('click', event => {
  56. event.preventDefault();
  57. var data = { id: formId, form: 'cattle-breeding-date', ...forms.toObject(refs.form)}
  58. if (!data.calvingDate || !data.gestationPeriod) {
  59. alert('Please fill in all the fields!');
  60. return;
  61. }
  62. var breedingDate = new Date(data.calvingDate).addDays(-parseInt(data.gestationPeriod));
  63.  
  64. data = {
  65. id: formId,
  66. form: 'cattle-breeding-date',
  67. calvingDate: data.calvingDate,
  68. gestationPeriod: parseInt(data.gestationPeriod),
  69. breedingDate: breedingDate,
  70. firstTrimesterBegins: breedingDate,
  71. secondTrimesterBegins: breedingDate.addDays(94),
  72. thirdTrimesterBegins: breedingDate.addDays(188)
  73. }
  74. var options = {year: "numeric", month: "long", day: "numeric"};
  75. refs.results.removeAttribute('hidden');
  76. refs.results.innerHTML = `
  77. <h2>Breeding Date 🠂 ${data.breedingDate.toLocaleDateString('en-US', options)}</h2>
  78. <p class="info">Your cow or heifer should be bred on this date to calve on or around ${data.calvingDate.toLocaleDateString('en-US', options)}.</p>
  79. ${forms.renderResults({
  80. 'Calving Date': data.calvingDate.toLocaleDateString('en-US', options),
  81. 'Gestation Period': data.gestationPeriod,
  82. 'Second Trimester Begins': data.secondTrimesterBegins.toLocaleDateString('en-US', options),
  83. 'Third Trimester Begins': data.thirdTrimesterBegins.toLocaleDateString('en-US', options)
  84. })}
  85. `;
  86.  
  87. refs.inputs.setAttribute('hidden', true);
  88. refs.finish.setAttribute('hidden', true);
  89. refs.start.removeAttribute('hidden');
  90.  
  91. emit('forms:cattle-breeding-date', { detail: data, bubbles: true });
  92. });
  93.  
  94. setTimeout(function () {
  95. refs.form.style.opacity = 1;
  96. }, 500);
  97. }
  98. }
  99. </script>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement