func.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. // 쿠키 값 설정
  2. function setCookie(name, value, days) {
  3. let expires = "";
  4. if (days) {
  5. const date = new Date();
  6. date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); // 일(day) 단위로 유효 기간 설정
  7. expires = ("; expires=" + date.toUTCString());
  8. }
  9. document.cookie = (name + "=" + encodeURIComponent(value) + expires + "; path=/");
  10. }
  11. // 쿠키 값 조회
  12. function getCookie(name) {
  13. const nameEQ = name + "=";
  14. const cookies = document.cookie.split(';');
  15. for (let i = 0; i < cookies.length; i++) {
  16. let cookie = cookies[i];
  17. while (cookie.charAt(0) === ' ') {
  18. cookie = cookie.substring(1, cookie.length); // 공백 제거
  19. }
  20. if (cookie.indexOf(nameEQ) === 0) {
  21. return decodeURIComponent(cookie.substring(nameEQ.length, cookie.length));
  22. }
  23. }
  24. return null;
  25. }
  26. // 쿠키 삭제
  27. function deleteCookie(name) {
  28. document.cookie = (name + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;");
  29. }
  30. // 이미지 미리보기
  31. function setupImagePreview(fileInputID, previewImageID) {
  32. const fileInput = document.getElementById(fileInputID);
  33. const previewImage = document.getElementById(previewImageID);
  34. if (!fileInput || !previewImage) {
  35. return;
  36. }
  37. fileInput.addEventListener("change", function (e) {
  38. const file = e.target.files[0];
  39. const image = previewImage.querySelector("img");
  40. if (file && file.type.startsWith("image/")) {
  41. const reader = new FileReader();
  42. reader.onload = function (e) {
  43. image.src = e.target.result;
  44. previewImage.removeAttribute("hidden");
  45. };
  46. reader.readAsDataURL(file);
  47. } else {
  48. image.src = "";
  49. previewImage.setAttribute("hidden", "hidden");
  50. }
  51. });
  52. // 미리보기 삭제
  53. const removeBtn = previewImage.querySelector(".btn-remove-preview");
  54. if (removeBtn) {
  55. removeBtn.addEventListener("click", function () {
  56. const image = previewImage.querySelector("img");
  57. if (image) {
  58. image.src = "";
  59. }
  60. previewImage.hidden = true;
  61. fileInput.value = "";
  62. });
  63. }
  64. }
  65. $.validator.setDefaults({ // Bootstrap Required.
  66. ignore: [], // hidden
  67. debug: false,
  68. invalidHandler: function (event, validator) {
  69. },
  70. submitHandler: function (form, event) {
  71. const submitter = event?.originalEvent?.submitter;
  72. if (submitter?.getAttribute('formaction')) {
  73. form.action = submitter.getAttribute('formaction');
  74. }
  75. form.submit();
  76. },
  77. showErrors: function (errorMap, errorList) {
  78. $.each(this.successList, function (index, value) {
  79. let field = $(value);
  80. if (field.is(':hidden')) {
  81. field = field.parent();
  82. }
  83. if (typeof field.tooltip !== "undefined") { // 3.3.7은 destroy 4.0 이후 dispose
  84. field.tooltip('dispose');
  85. }
  86. });
  87. if (errorList.length <= 0) {
  88. $(".tooltip").tooltip("dispose");
  89. }
  90. $.each(errorList, function (index, value) {
  91. let field = $(value.element);
  92. if (field.is(':hidden')) {
  93. field = field.parent();
  94. }
  95. field.tooltip('dispose').tooltip({
  96. placement: 'bottom',
  97. title: value.message,
  98. trigger: 'manual'
  99. }).tooltip('show');
  100. });
  101. }
  102. });