| @@ -1,461 +1,581 @@ | ||
| 1 | -/******/ (function() { // webpackBootstrap | |
| 1 | +/******/ (() => { // webpackBootstrap | |
| 2 | 2 | /******/ var __webpack_modules__ = ({ |
| 3 | 3 | |
| 4 | -/***/ "./assets/src/apps/js/frontend/profile/avatar.js": | |
| 5 | -/*!*******************************************************!*\ | |
| 6 | - !*** ./assets/src/apps/js/frontend/profile/avatar.js ***! | |
| 7 | - \*******************************************************/ | |
| 8 | -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { | |
| 4 | +/***/ "./assets/src/js/admin/courses/view-students-modal.js" | |
| 5 | +/*!************************************************************!*\ | |
| 6 | + !*** ./assets/src/js/admin/courses/view-students-modal.js ***! | |
| 7 | + \************************************************************/ | |
| 8 | +(__unused_webpack_module, __webpack_exports__, __webpack_require__) { | |
| 9 | 9 | |
| 10 | 10 | "use strict"; |
| 11 | 11 | __webpack_require__.r(__webpack_exports__); |
| 12 | 12 | /* harmony export */ __webpack_require__.d(__webpack_exports__, { |
| 13 | -/* harmony export */ "default": function() { return /* binding */ Avatar; } | |
| 13 | +/* harmony export */ ViewStudentsModal: () => (/* binding */ ViewStudentsModal) | |
| 14 | 14 | /* harmony export */ }); |
| 15 | -/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element"); | |
| 16 | -/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__); | |
| 17 | -/* harmony import */ var _wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/api-fetch */ "@wordpress/api-fetch"); | |
| 18 | -/* harmony import */ var _wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_1__); | |
| 19 | -/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); | |
| 20 | -/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__); | |
| 21 | -/* harmony import */ var react_easy_crop__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-easy-crop */ "./node_modules/react-easy-crop/index.module.js"); | |
| 15 | +/* harmony import */ var sweetalert2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! sweetalert2 */ "./node_modules/sweetalert2/dist/sweetalert2.all.js"); | |
| 16 | +/* harmony import */ var sweetalert2__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(sweetalert2__WEBPACK_IMPORTED_MODULE_0__); | |
| 17 | +/* harmony import */ var lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lpAssetsJsPath/utils.js */ "./assets/src/js/utils.js"); | |
| 22 | 18 | |
| 23 | 19 | |
| 24 | - | |
| 25 | - | |
| 26 | - | |
| 27 | -function Avatar() { | |
| 28 | - const [file, setFile] = (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.useState)(); | |
| 29 | - const [width, setWidth] = (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.useState)(0); | |
| 30 | - const [height, setHeight] = (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.useState)(0); | |
| 31 | - const [crop, setCrop] = (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.useState)({ | |
| 32 | - x: 0, | |
| 33 | - y: 0 | |
| 34 | - }); | |
| 35 | - const [rotation, setRotation] = (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.useState)(0); | |
| 36 | - const [croppedAreaPixels, setCroppedAreaPixels] = (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.useState)(null); | |
| 37 | - const [naturalWidth, setNaturalWidth] = (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.useState)(0); | |
| 38 | - const [naturalHeight, setNaturalHeight] = (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.useState)(0); | |
| 39 | - const [loading, setLoading] = (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.useState)(false); | |
| 40 | - const [skeleton, setSkeleton] = (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.useState)(true); | |
| 41 | - const [uploadError, setUploadError] = (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.useState)(''); | |
| 42 | - const [notice, setNotice] = (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.useState)({ | |
| 43 | - type: '', | |
| 44 | - message: '' | |
| 45 | - }); | |
| 46 | - const fileInput = (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.useRef)(); | |
| 47 | - (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => { | |
| 48 | - async function getAvatar() { | |
| 49 | - setSkeleton(true); | |
| 50 | - | |
| 51 | - try { | |
| 52 | - var _response$data, _response$data2, _response$data3; | |
| 53 | - | |
| 54 | - const response = await _wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_1___default()({ | |
| 55 | - method: 'GET', | |
| 56 | - path: 'lp/v1/profile/get-avatar' | |
| 57 | - }); | |
| 58 | - setWidth(response !== null && response !== void 0 && (_response$data = response.data) !== null && _response$data !== void 0 && _response$data.width ? parseInt(response.data.width) : 0); | |
| 59 | - setHeight(response !== null && response !== void 0 && (_response$data2 = response.data) !== null && _response$data2 !== void 0 && _response$data2.height ? parseInt(response.data.height) : 0); | |
| 60 | - setFile(response !== null && response !== void 0 && (_response$data3 = response.data) !== null && _response$data3 !== void 0 && _response$data3.url ? response.data.url : ''); | |
| 61 | - } catch (error) { | |
| 62 | - setNotice({ | |
| 63 | - type: 'error', | |
| 64 | - message: error.message | |
| 65 | - }); | |
| 66 | - } | |
| 67 | - | |
| 68 | - setSkeleton(false); | |
| 20 | +class ViewStudentsModal { | |
| 21 | + constructor() { | |
| 22 | + this.isRequesting = false; | |
| 23 | + this.activeCourseId = 0; | |
| 24 | + this.init(); | |
| 25 | + } | |
| 26 | + static selectors = { | |
| 27 | + wrap: '#lp-modal-enrolled-wrap', | |
| 28 | + form: '#lp-modal-enrolled-form', | |
| 29 | + toolbarTemplate: '#lp-tmpl-enrolled-students-toolbar-modal', | |
| 30 | + targetTemplate: '#lp-tmpl-enrolled-students-target-modal', | |
| 31 | + toolbar: '.lp-enrolled-students-table-toolbar--modal', | |
| 32 | + courseTrigger: '.lp-btn-view-students', | |
| 33 | + searchInput: '#lp-modal-enrolled-search-input', | |
| 34 | + startDateInput: '#lp-modal-enrolled-filter-start-date', | |
| 35 | + endDateInput: '#lp-modal-enrolled-filter-end-date', | |
| 36 | + searchBtn: '.lp-enrolled-btn-search-modal', | |
| 37 | + clearBtn: '.lp-enrolled-btn-clear-modal', | |
| 38 | + modalSearchFields: '#lp-modal-enrolled-search-input, #lp-modal-enrolled-filter-start-date, #lp-modal-enrolled-filter-end-date' | |
| 39 | + }; | |
| 40 | + setButtonLoadingState(btn, isLoading) { | |
| 41 | + if (!btn) { | |
| 42 | + return; | |
| 69 | 43 | } |
| 70 | - | |
| 71 | - getAvatar(); | |
| 72 | - }, []); | |
| 73 | - | |
| 74 | - function readFile(file) { | |
| 75 | - return new Promise(resolve => { | |
| 76 | - const reader = new FileReader(); | |
| 77 | - reader.addEventListener('load', () => resolve(reader.result), false); | |
| 78 | - reader.readAsDataURL(file); | |
| 44 | + lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_1__.lpSetLoadingEl(btn, isLoading ? 1 : 0); | |
| 45 | + } | |
| 46 | + init() { | |
| 47 | + if (ViewStudentsModal._loadedEvents) { | |
| 48 | + return; | |
| 49 | + } | |
| 50 | + ViewStudentsModal._loadedEvents = true; | |
| 51 | + lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_1__.eventHandlers('click', [{ | |
| 52 | + selector: ViewStudentsModal.selectors.courseTrigger, | |
| 53 | + class: this, | |
| 54 | + callBack: this.handleOpenModal.name | |
| 55 | + }, { | |
| 56 | + selector: ViewStudentsModal.selectors.searchBtn, | |
| 57 | + class: this, | |
| 58 | + callBack: this.handleModalSearch.name | |
| 59 | + }, { | |
| 60 | + selector: ViewStudentsModal.selectors.clearBtn, | |
| 61 | + class: this, | |
| 62 | + callBack: this.handleModalClear.name | |
| 63 | + }]); | |
| 64 | + lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_1__.eventHandlers('keydown', [{ | |
| 65 | + selector: ViewStudentsModal.selectors.modalSearchFields, | |
| 66 | + class: this, | |
| 67 | + callBack: this.handleModalSearchOnEnter.name, | |
| 68 | + checkIsEventEnter: true | |
| 69 | + }]); | |
| 70 | + lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_1__.eventHandlers('change', [{ | |
| 71 | + selector: ViewStudentsModal.selectors.startDateInput, | |
| 72 | + class: this, | |
| 73 | + callBack: this.checkDatesRange.name | |
| 74 | + }, { | |
| 75 | + selector: ViewStudentsModal.selectors.endDateInput, | |
| 76 | + class: this, | |
| 77 | + callBack: this.checkDatesRange.name | |
| 78 | + }]); | |
| 79 | + } | |
| 80 | + handleOpenModal(args) { | |
| 81 | + const btn = args?.target?.closest(ViewStudentsModal.selectors.courseTrigger); | |
| 82 | + if (!btn || this.isRequesting || btn.classList.contains('loading')) { | |
| 83 | + return; | |
| 84 | + } | |
| 85 | + const courseId = parseInt(btn.dataset.courseId, 10) || 0; | |
| 86 | + if (!courseId) { | |
| 87 | + return; | |
| 88 | + } | |
| 89 | + const courseTitle = btn.dataset.courseTitle || ''; | |
| 90 | + this.activeCourseId = courseId; | |
| 91 | + this.setButtonLoadingState(btn, true); | |
| 92 | + this.openModal(courseId, courseTitle, btn); | |
| 93 | + } | |
| 94 | + handleModalSearch(args) { | |
| 95 | + const btn = args?.target?.closest(ViewStudentsModal.selectors.searchBtn); | |
| 96 | + if (!btn || !this.activeCourseId) { | |
| 97 | + return; | |
| 98 | + } | |
| 99 | + if (args?.e) { | |
| 100 | + args.e.preventDefault(); | |
| 101 | + } | |
| 102 | + if (this.isRequesting || btn.classList.contains('loading') || btn.disabled) { | |
| 103 | + return; | |
| 104 | + } | |
| 105 | + this.setButtonLoadingState(btn, true); | |
| 106 | + this.loadEnrolledStudents(this.activeCourseId, 1, btn); | |
| 107 | + } | |
| 108 | + handleModalSearchOnEnter(args) { | |
| 109 | + if (args?.e) { | |
| 110 | + args.e.preventDefault(); | |
| 111 | + } | |
| 112 | + const form = this.getModalForm(); | |
| 113 | + if (!form) { | |
| 114 | + return; | |
| 115 | + } | |
| 116 | + const btn = form.querySelector(ViewStudentsModal.selectors.searchBtn); | |
| 117 | + if (!btn) { | |
| 118 | + return; | |
| 119 | + } | |
| 120 | + this.handleModalSearch({ | |
| 121 | + ...args, | |
| 122 | + target: btn | |
| 79 | 123 | }); |
| 80 | 124 | } |
| 81 | - | |
| 82 | - const onCropComplete = (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.useCallback)((croppedArea, croppedAreaPixels) => { | |
| 83 | - setCroppedAreaPixels(croppedAreaPixels); | |
| 84 | - }, []); | |
| 85 | - | |
| 86 | - const base64Resize = (base64, width, height) => { | |
| 87 | - return new Promise((resolve, reject) => { | |
| 88 | - const canvas = document.createElement('canvas'); | |
| 89 | - const img = document.createElement('img'); | |
| 90 | - img.src = base64; | |
| 91 | - img.setAttribute('crossOrigin', 'anonymous'); | |
| 92 | - | |
| 93 | - img.onload = () => { | |
| 94 | - if (img.naturalWidth > width || img.naturalHeight > height) { | |
| 95 | - canvas.width = width; | |
| 96 | - canvas.height = height; | |
| 97 | - const ctx = canvas.getContext('2d'); | |
| 98 | - ctx.drawImage(img, 0, 0, width, height); | |
| 99 | - resolve(canvas.toDataURL('image/jpeg')); | |
| 125 | + handleModalClear(args) { | |
| 126 | + const btn = args?.target?.closest(ViewStudentsModal.selectors.clearBtn); | |
| 127 | + const form = this.getModalForm(); | |
| 128 | + if (!btn || !form || !this.activeCourseId) { | |
| 129 | + return; | |
| 130 | + } | |
| 131 | + if (args?.e) { | |
| 132 | + args.e.preventDefault(); | |
| 133 | + } | |
| 134 | + if (this.isRequesting || btn.classList.contains('loading')) { | |
| 135 | + return; | |
| 136 | + } | |
| 137 | + form.reset(); | |
| 138 | + this.setButtonLoadingState(btn, true); | |
| 139 | + this.loadEnrolledStudents(this.activeCourseId, 1, btn); | |
| 140 | + } | |
| 141 | + getModalPopup() { | |
| 142 | + return (sweetalert2__WEBPACK_IMPORTED_MODULE_0___default().getPopup) ? sweetalert2__WEBPACK_IMPORTED_MODULE_0___default().getPopup() : null; | |
| 143 | + } | |
| 144 | + getModalToolbarHtml() { | |
| 145 | + const template = document.querySelector(ViewStudentsModal.selectors.toolbarTemplate); | |
| 146 | + return template ? template.innerHTML : ''; | |
| 147 | + } | |
| 148 | + getModalTargetHtml() { | |
| 149 | + const template = document.querySelector(ViewStudentsModal.selectors.targetTemplate); | |
| 150 | + return template ? template.innerHTML : ''; | |
| 151 | + } | |
| 152 | + getAjaxHandle() { | |
| 153 | + const ajaxHandle = window.lpAJAXG; | |
| 154 | + if (!ajaxHandle || typeof ajaxHandle.getDataSetCurrent !== 'function' || typeof ajaxHandle.setDataSetCurrent !== 'function' || typeof ajaxHandle.showHideLoading !== 'function' || typeof ajaxHandle.fetchAJAX !== 'function') { | |
| 155 | + return null; | |
| 156 | + } | |
| 157 | + return ajaxHandle; | |
| 158 | + } | |
| 159 | + getModalForm() { | |
| 160 | + const popup = this.getModalPopup(); | |
| 161 | + if (!popup) { | |
| 162 | + return null; | |
| 163 | + } | |
| 164 | + return popup.querySelector(ViewStudentsModal.selectors.form); | |
| 165 | + } | |
| 166 | + getModalFilterArgs(dataArgs = {}) { | |
| 167 | + const form = this.getModalForm(); | |
| 168 | + if (!form) { | |
| 169 | + return dataArgs; | |
| 170 | + } | |
| 171 | + return lpAssetsJsPath_utils_js__WEBPACK_IMPORTED_MODULE_1__.mergeDataWithDatForm(form, dataArgs); | |
| 172 | + } | |
| 173 | + loadEnrolledStudents(courseId, paged, elLoading = null) { | |
| 174 | + const wrap = document.querySelector(ViewStudentsModal.selectors.wrap); | |
| 175 | + const elTarget = wrap?.querySelector('.lp-target'); | |
| 176 | + const ajaxHandle = this.getAjaxHandle(); | |
| 177 | + if (!wrap || !elTarget || !ajaxHandle || this.isRequesting) { | |
| 178 | + return; | |
| 179 | + } | |
| 180 | + this.isRequesting = true; | |
| 181 | + if (elLoading) { | |
| 182 | + this.setButtonLoadingState(elLoading, true); | |
| 183 | + } | |
| 184 | + const dataSend = ajaxHandle.getDataSetCurrent(elTarget); | |
| 185 | + dataSend.args = this.getModalFilterArgs(dataSend.args || {}); | |
| 186 | + dataSend.args.course_id = parseInt(courseId, 10) || 0; | |
| 187 | + dataSend.args.paged = paged; | |
| 188 | + ajaxHandle.setDataSetCurrent(elTarget, dataSend); | |
| 189 | + ajaxHandle.showHideLoading(elTarget, 1); | |
| 190 | + const callBack = { | |
| 191 | + success: response => { | |
| 192 | + elTarget.innerHTML = response.data.content; | |
| 193 | + }, | |
| 194 | + error: err => { | |
| 195 | + console.error(err); | |
| 196 | + }, | |
| 197 | + completed: () => { | |
| 198 | + this.isRequesting = false; | |
| 199 | + ajaxHandle.showHideLoading(elTarget, 0); | |
| 200 | + if (elLoading) { | |
| 201 | + this.setButtonLoadingState(elLoading, false); | |
| 100 | 202 | } |
| 101 | - | |
| 102 | - resolve(base64); | |
| 103 | - }; | |
| 104 | - | |
| 105 | - img.onerror = err => reject(err); | |
| 106 | - }); | |
| 107 | - }; | |
| 108 | - | |
| 109 | - const updateAvatar = (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => { | |
| 110 | - setLoading({ | |
| 111 | - save: true | |
| 112 | - }); | |
| 113 | - | |
| 114 | - try { | |
| 115 | - const croppedImage = await getCroppedImg(file, croppedAreaPixels, rotation); | |
| 116 | - const imageResize = await base64Resize(croppedImage, width, height); | |
| 117 | - const response = await _wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_1___default()({ | |
| 118 | - path: 'lp/v1/profile/upload-avatar', | |
| 119 | - method: 'POST', | |
| 120 | - data: { | |
| 121 | - file: imageResize || '' | |
| 203 | + } | |
| 204 | + }; | |
| 205 | + ajaxHandle.fetchAJAX(dataSend, callBack); | |
| 206 | + } | |
| 207 | + openModal(courseId, courseTitle, elTrigger = null) { | |
| 208 | + const modalToolbarHtml = this.getModalToolbarHtml(); | |
| 209 | + const modalTargetHtml = this.getModalTargetHtml(); | |
| 210 | + if (!modalToolbarHtml || !modalTargetHtml) { | |
| 211 | + if (elTrigger) { | |
| 212 | + this.setButtonLoadingState(elTrigger, false); | |
| 213 | + } | |
| 214 | + return; | |
| 215 | + } | |
| 216 | + this.activeCourseId = parseInt(courseId, 10) || 0; | |
| 217 | + sweetalert2__WEBPACK_IMPORTED_MODULE_0___default().fire({ | |
| 218 | + title: `${courseTitle}`, | |
| 219 | + html: modalToolbarHtml + modalTargetHtml, | |
| 220 | + width: '80%', | |
| 221 | + showConfirmButton: false, | |
| 222 | + showCloseButton: true, | |
| 223 | + didOpen: () => { | |
| 224 | + this.loadEnrolledStudents(this.activeCourseId, 1, elTrigger); | |
| 225 | + }, | |
| 226 | + didClose: () => { | |
| 227 | + this.activeCourseId = 0; | |
| 228 | + if (elTrigger) { | |
| 229 | + this.setButtonLoadingState(elTrigger, false); | |
| 122 | 230 | } |
| 123 | - }); | |
| 124 | - const { | |
| 125 | - data, | |
| 126 | - status, | |
| 127 | - message | |
| 128 | - } = await response; | |
| 129 | - | |
| 130 | - if (status === 'success') { | |
| 131 | - window.location.reload(); | |
| 132 | 231 | } |
| 232 | + }); | |
| 233 | + } | |
| 133 | 234 | |
| 134 | - setNotice({ | |
| 135 | - type: status, | |
| 136 | - message | |
| 137 | - }); | |
| 138 | - } catch (e) { | |
| 139 | - setNotice({ | |
| 140 | - type: 'error', | |
| 141 | - message: e.message || '' | |
| 142 | - }); | |
| 235 | + // Ensure start date is not after end date and vice versa. If invalid, adjust the other date to match. | |
| 236 | + checkDatesRange(args) { | |
| 237 | + const { | |
| 238 | + e | |
| 239 | + } = args; | |
| 240 | + const elInput = e?.target; | |
| 241 | + if (!elInput) { | |
| 242 | + return; | |
| 143 | 243 | } |
| 144 | - | |
| 145 | - setLoading({ | |
| 146 | - save: false | |
| 147 | - }); | |
| 148 | - }, [croppedAreaPixels, rotation]); | |
| 149 | - | |
| 150 | - const setFileInput = async fileUpload => { | |
| 151 | - const file = await readFile(fileUpload); | |
| 152 | - const img = new Image(); | |
| 153 | - img.src = await file; | |
| 154 | - img.onload = await function () { | |
| 155 | - setNaturalWidth(img.naturalWidth); | |
| 156 | - setNaturalHeight(img.naturalHeight); | |
| 157 | - let error = ''; | |
| 158 | - | |
| 159 | - if (parseInt(fileUpload.size) > 2097152) { | |
| 160 | - error = (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)('File size too large. You need to upload a file < 2MB', 'learnpress'); | |
| 161 | - } else if (img.naturalWidth < width || img.naturalHeight < height) { | |
| 162 | - error = (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.sprintf)((0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Image size must be greater than or equal to %1$sx%2$spx', 'learnpress'), width, height); | |
| 244 | + const elForm = elInput.closest(ViewStudentsModal.selectors.form); | |
| 245 | + if (!elForm) { | |
| 246 | + return; | |
| 247 | + } | |
| 248 | + const startDateInput = elForm.querySelector(ViewStudentsModal.selectors.startDateInput); | |
| 249 | + const endDateInput = elForm.querySelector(ViewStudentsModal.selectors.endDateInput); | |
| 250 | + if (elInput === startDateInput) { | |
| 251 | + if (startDateInput.value) { | |
| 252 | + endDateInput.min = startDateInput.value; | |
| 253 | + if (endDateInput.value && endDateInput.value < startDateInput.value) { | |
| 254 | + endDateInput.value = startDateInput.value; | |
| 255 | + } | |
| 256 | + } else { | |
| 257 | + endDateInput.min = ''; | |
| 163 | 258 | } |
| 164 | - | |
| 165 | - if (error) { | |
| 166 | - setUploadError(error); | |
| 259 | + } else if (elInput === endDateInput) { | |
| 260 | + if (endDateInput.value) { | |
| 261 | + startDateInput.max = endDateInput.value; | |
| 262 | + if (startDateInput.value && startDateInput.value > endDateInput.value) { | |
| 263 | + startDateInput.value = endDateInput.value; | |
| 264 | + } | |
| 167 | 265 | } else { |
| 168 | - setUploadError(''); | |
| 169 | - setFile(file); | |
| 266 | + startDateInput.max = ''; | |
| 170 | 267 | } |
| 171 | - }; | |
| 172 | - }; | |
| 173 | - | |
| 174 | - async function removeAvatar() { | |
| 175 | - if (confirm((0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Are you sure you want to remove your avatar?', 'learnpress'))) { | |
| 176 | - setLoading({ | |
| 177 | - remove: true | |
| 178 | - }); | |
| 179 | - | |
| 180 | - try { | |
| 181 | - const response = await _wordpress_api_fetch__WEBPACK_IMPORTED_MODULE_1___default()({ | |
| 182 | - path: 'lp/v1/profile/remove-avatar', | |
| 183 | - method: 'POST' | |
| 184 | - }); | |
| 185 | - const { | |
| 186 | - data, | |
| 187 | - status, | |
| 188 | - message | |
| 189 | - } = await response; | |
| 190 | - setNotice({ | |
| 191 | - type: status, | |
| 192 | - message | |
| 193 | - }); | |
| 194 | - setFile(''); | |
| 195 | - } catch (e) { | |
| 196 | - setNotice({ | |
| 197 | - type: 'error', | |
| 198 | - message: e.message || '' | |
| 199 | - }); | |
| 200 | - } | |
| 201 | - | |
| 202 | - setLoading({ | |
| 203 | - remove: false | |
| 204 | - }); | |
| 205 | 268 | } |
| 206 | 269 | } |
| 270 | +} | |
| 207 | 271 | |
| 208 | - return (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", { | |
| 209 | - className: "learnpress_avatar" | |
| 210 | - }, !skeleton ? (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, file && !uploadError && (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, naturalHeight && naturalWidth ? (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", { | |
| 211 | - className: "learnpress_avatar__cropper" | |
| 212 | - }, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", { | |
| 213 | - style: { | |
| 214 | - position: 'relative', | |
| 215 | - width: naturalWidth, | |
| 216 | - height: naturalHeight, | |
| 217 | - zIndex: 9999, | |
| 218 | - maxWidth: '100%', | |
| 219 | - maxHeight: '800px' | |
| 220 | - } | |
| 221 | - }, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(react_easy_crop__WEBPACK_IMPORTED_MODULE_3__["default"], { | |
| 222 | - image: file, | |
| 223 | - crop: crop, | |
| 224 | - zoom: "1", | |
| 225 | - cropSize: { | |
| 226 | - width, | |
| 227 | - height | |
| 228 | - }, | |
| 229 | - onCropChange: setCrop, | |
| 230 | - onCropComplete: onCropComplete | |
| 231 | - })), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", null, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("button", { | |
| 232 | - className: `learnpress_avatar__button learnpress_avatar__button--save ${loading !== null && loading !== void 0 && loading.save ? 'learnpress_avatar__button--loading' : ''}`, | |
| 233 | - onClick: updateAvatar | |
| 234 | - }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Save', 'learnpress')))) : (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", { | |
| 235 | - className: "learnpress_avatar__cropper" | |
| 236 | - }, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("img", { | |
| 237 | - src: file, | |
| 238 | - alt: "" | |
| 239 | - }), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", null, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("button", { | |
| 240 | - className: `learnpress_avatar__button learnpress_avatar__button--replace`, | |
| 241 | - onClick: () => fileInput.current && fileInput.current.click() | |
| 242 | - }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Replace', 'learnpress')), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("button", { | |
| 243 | - className: `learnpress_avatar__button learnpress_avatar__button--remove ${loading !== null && loading !== void 0 && loading.remove ? 'learnpress_avatar__button--loading' : ''}`, | |
| 244 | - onClick: removeAvatar | |
| 245 | - }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Remove', 'learnpress'))))), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("form", { | |
| 246 | - style: { | |
| 247 | - display: !file ? '' : 'none' | |
| 248 | - } | |
| 249 | - }, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", { | |
| 250 | - className: "learnpress_avatar__form" | |
| 251 | - }, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", { | |
| 252 | - className: "learnpress_avatar__form-group" | |
| 253 | - }, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("label", { | |
| 254 | - htmlFor: "avatar-file" | |
| 255 | - }, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", { | |
| 256 | - className: "learnpress_avatar__form__upload" | |
| 257 | - }, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", null, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("span", null, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("svg", { | |
| 258 | - viewBox: "64 64 896 896", | |
| 259 | - focusable: "false", | |
| 260 | - "data-icon": "plus", | |
| 261 | - width: "1em", | |
| 262 | - height: "1em", | |
| 263 | - fill: "currentColor", | |
| 264 | - "aria-hidden": "true" | |
| 265 | - }, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("defs", null, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("style", null)), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("path", { | |
| 266 | - d: "M482 152h60q8 0 8 8v704q0 8-8 8h-60q-8 0-8-8V160q0-8 8-8z" | |
| 267 | - }), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("path", { | |
| 268 | - d: "M176 474h672q8 0 8 8v60q0 8-8 8H176q-8 0-8-8v-60q0-8 8-8z" | |
| 269 | - }))), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", null, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Upload', 'learnpress')))), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("input", { | |
| 270 | - ref: fileInput, | |
| 271 | - type: "file", | |
| 272 | - id: "avatar-file", | |
| 273 | - accept: "image/*", | |
| 274 | - onChange: e => setFileInput(e.target.files && e.target.files.length > 0 ? e.target.files[0] : '') | |
| 275 | - }))))), uploadError && (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", { | |
| 276 | - className: `lp-ajax-message error`, | |
| 277 | - style: { | |
| 278 | - display: 'block' | |
| 279 | - } | |
| 280 | - }, uploadError), !uploadError && notice && notice.type && notice.message && (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", { | |
| 281 | - className: `lp-ajax-message ${notice.type}`, | |
| 282 | - style: { | |
| 283 | - display: 'block' | |
| 284 | - } | |
| 285 | - }, notice.message)) : (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("ul", { | |
| 286 | - className: "lp-skeleton-animation" | |
| 287 | - }, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("li", { | |
| 288 | - style: { | |
| 289 | - width: 200, | |
| 290 | - height: 200 | |
| 291 | - } | |
| 292 | - }), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("li", { | |
| 293 | - style: { | |
| 294 | - width: 200, | |
| 295 | - height: 20 | |
| 296 | - } | |
| 297 | - }), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("li", { | |
| 298 | - style: { | |
| 299 | - width: 200, | |
| 300 | - height: 20 | |
| 301 | - } | |
| 302 | - }))); | |
| 303 | -} // Link: https://codesandbox.io/s/q8q1mnr01w | |
| 272 | +/***/ }, | |
| 304 | 273 | |
| 305 | -const createImage = url => new Promise((resolve, reject) => { | |
| 306 | - const image = new Image(); | |
| 307 | - image.addEventListener('load', () => resolve(image)); | |
| 308 | - image.addEventListener('error', error => reject(error)); | |
| 309 | - image.setAttribute('crossOrigin', 'anonymous'); // needed to avoid cross-origin issues on CodeSandbox | |
| 274 | +/***/ "./assets/src/js/api.js" | |
| 275 | +/*!******************************!*\ | |
| 276 | + !*** ./assets/src/js/api.js ***! | |
| 277 | + \******************************/ | |
| 278 | +(__unused_webpack_module, __webpack_exports__, __webpack_require__) { | |
| 310 | 279 | |
| 311 | - image.src = url; | |
| 312 | -}); | |
| 313 | - | |
| 314 | -function getRadianAngle(degreeValue) { | |
| 315 | - return degreeValue * Math.PI / 180; | |
| 316 | -} | |
| 280 | +"use strict"; | |
| 281 | +__webpack_require__.r(__webpack_exports__); | |
| 282 | +/* harmony export */ __webpack_require__.d(__webpack_exports__, { | |
| 283 | +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) | |
| 284 | +/* harmony export */ }); | |
| 317 | 285 | /** |
| 318 | - * Returns the new bounding area of a rotated rectangle. | |
| 286 | + * List API on backend | |
| 319 | 287 | * |
| 320 | - * @param width | |
| 321 | - * @param height | |
| 322 | - * @param rotation | |
| 288 | + * @since 4.2.6 | |
| 289 | + * @version 1.0.2 | |
| 323 | 290 | */ |
| 324 | 291 | |
| 325 | - | |
| 326 | -function rotateSize(width, height, rotation) { | |
| 327 | - const rotRad = getRadianAngle(rotation); | |
| 328 | - return { | |
| 329 | - width: Math.abs(Math.cos(rotRad) * width) + Math.abs(Math.sin(rotRad) * height), | |
| 330 | - height: Math.abs(Math.sin(rotRad) * width) + Math.abs(Math.cos(rotRad) * height) | |
| 292 | +const lplistAPI = {}; | |
| 293 | +let lp_rest_url; | |
| 294 | +if ('undefined' !== typeof lpDataAdmin) { | |
| 295 | + lp_rest_url = lpDataAdmin.lp_rest_url; | |
| 296 | + lplistAPI.admin = { | |
| 297 | + // apiAdminNotice: lp_rest_url + 'lp/v1/admin/tools/admin-notices', | |
| 298 | + apiSearchCourses: lp_rest_url + 'lp/v1/admin/tools/search-course', | |
| 299 | + apiSearchUsers: lp_rest_url + 'lp/v1/admin/tools/search-user', | |
| 300 | + apiAssignUserCourse: lp_rest_url + 'lp/v1/admin/tools/assign-user-course', | |
| 301 | + apiUnAssignUserCourse: lp_rest_url + 'lp/v1/admin/tools/unassign-user-course' | |
| 331 | 302 | }; |
| 332 | 303 | } |
| 333 | -/** | |
| 334 | - * This function was adapted from the one in the ReadMe of https://github.com/DominicTobias/react-image-crop | |
| 335 | - * | |
| 336 | - * @param imageSrc | |
| 337 | - * @param pixelCrop | |
| 338 | - * @param rotation | |
| 339 | - * @param flip | |
| 340 | - */ | |
| 341 | - | |
| 342 | - | |
| 343 | -async function getCroppedImg(imageSrc, pixelCrop) { | |
| 344 | - let rotation = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; | |
| 345 | - let flip = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : { | |
| 346 | - horizontal: false, | |
| 347 | - vertical: false | |
| 304 | +if ('undefined' !== typeof lpData) { | |
| 305 | + lp_rest_url = lpData.lp_rest_url; | |
| 306 | + lplistAPI.frontend = { | |
| 307 | + apiWidgets: lp_rest_url + 'lp/v1/widgets/api', | |
| 308 | + apiCourses: lp_rest_url + 'lp/v1/courses/archive-course', | |
| 309 | + // Deprecated API, don't load from v4.3.7 | |
| 310 | + apiAJAX: lp_rest_url + 'lp/v1/load_content_via_ajax/', | |
| 311 | + // Deprecated since 4.3.0 | |
| 312 | + apiProfileCoverImage: lp_rest_url + 'lp/v1/profile/cover-image' | |
| 348 | 313 | }; |
| 349 | - const image = await createImage(imageSrc); | |
| 350 | - const canvas = document.createElement('canvas'); | |
| 351 | - const ctx = canvas.getContext('2d'); | |
| 314 | +} | |
| 315 | +if (lp_rest_url) { | |
| 316 | + lplistAPI.apiCourses = lp_rest_url + 'lp/v1/courses/'; | |
| 317 | + lplistAPI.apiEditCoursesArchiveBlock = lp_rest_url + 'lp/v1/courses/edit-archive-block'; | |
| 318 | + lplistAPI.apiCoursesSuggest = lp_rest_url + 'lp/v1/courses/courses-suggest'; | |
| 319 | +} | |
| 320 | +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (lplistAPI); | |
| 352 | 321 | |
| 353 | - if (!ctx) { | |
| 354 | - return null; | |
| 355 | - } | |
| 322 | +/***/ }, | |
| 356 | 323 | |
| 357 | - const rotRad = getRadianAngle(rotation); // calculate bounding box of the rotated image | |
| 324 | +/***/ "./assets/src/js/frontend/profile/avatar.js" | |
| 325 | +/*!**************************************************!*\ | |
| 326 | + !*** ./assets/src/js/frontend/profile/avatar.js ***! | |
| 327 | + \**************************************************/ | |
| 328 | +(__unused_webpack_module, __webpack_exports__, __webpack_require__) { | |
| 358 | 329 | |
| 359 | - const { | |
| 360 | - width: bBoxWidth, | |
| 361 | - height: bBoxHeight | |
| 362 | - } = rotateSize(image.width, image.height, rotation); // set canvas size to match the bounding box | |
| 330 | +"use strict"; | |
| 331 | +__webpack_require__.r(__webpack_exports__); | |
| 332 | +/* harmony export */ __webpack_require__.d(__webpack_exports__, { | |
| 333 | +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) | |
| 334 | +/* harmony export */ }); | |
| 335 | +/* harmony import */ var cropperjs_dist_cropper_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! cropperjs/dist/cropper.css */ "./node_modules/cropperjs/dist/cropper.css"); | |
| 336 | +/* harmony import */ var cropperjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! cropperjs */ "./node_modules/cropperjs/dist/cropper.js"); | |
| 337 | +/* harmony import */ var cropperjs__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(cropperjs__WEBPACK_IMPORTED_MODULE_1__); | |
| 338 | +/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../utils.js */ "./assets/src/js/utils.js"); | |
| 339 | +/* harmony import */ var toastify_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! toastify-js */ "./node_modules/toastify-js/src/toastify.js"); | |
| 340 | +/* harmony import */ var toastify_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(toastify_js__WEBPACK_IMPORTED_MODULE_3__); | |
| 341 | +/* harmony import */ var toastify_js_src_toastify_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! toastify-js/src/toastify.css */ "./node_modules/toastify-js/src/toastify.css"); | |
| 363 | 342 | |
| 364 | - canvas.width = bBoxWidth; | |
| 365 | - canvas.height = bBoxHeight; // translate canvas context to a central location to allow rotating and flipping around the center | |
| 366 | 343 | |
| 367 | - ctx.translate(bBoxWidth / 2, bBoxHeight / 2); | |
| 368 | - ctx.rotate(rotRad); | |
| 369 | - ctx.scale(flip.horizontal ? -1 : 1, flip.vertical ? -1 : 1); | |
| 370 | - ctx.translate(-image.width / 2, -image.height / 2); // draw rotated image | |
| 371 | 344 | |
| 372 | - ctx.drawImage(image, 0, 0); // croppedAreaPixels values are bounding box relative | |
| 373 | - // extract the cropped image using these values | |
| 345 | +// import API from '../../api.js'; | |
| 374 | 346 | |
| 375 | - const data = ctx.getImageData(pixelCrop.x, pixelCrop.y, pixelCrop.width, pixelCrop.height); // set canvas width to final desired crop size - this will clear existing context | |
| 376 | 347 | |
| 377 | - canvas.width = pixelCrop.width; | |
| 378 | - canvas.height = pixelCrop.height; // paste generated rotate image at the top left corner | |
| 348 | +const profileAvatarImage = () => { | |
| 349 | + const lpAvatarWrapper = document.querySelector('#learnpress-avatar-upload'); | |
| 350 | + if (!lpAvatarWrapper) { | |
| 351 | + return; | |
| 352 | + } | |
| 353 | + let cropper, avatarPreviewSrc, imgUrlOriginal; | |
| 354 | + let avatarForm = lpAvatarWrapper.querySelector('.lp_avatar__form'); | |
| 355 | + const btnRemove = lpAvatarWrapper.querySelector('.lp-btn-remove-avatar'), | |
| 356 | + btnReplace = lpAvatarWrapper.querySelector('.lp-btn-choose-avatar'), | |
| 357 | + btnSave = lpAvatarWrapper.querySelector('.lp-btn-save-avatar'), | |
| 358 | + btnCancel = lpAvatarWrapper.querySelector('.lp-btn-cancel-avatar'), | |
| 359 | + avatarPreviewImage = lpAvatarWrapper.querySelector('.lp-avatar-image'), | |
| 360 | + avatarInputFile = lpAvatarWrapper.querySelector('#avatar-file'), | |
| 361 | + profileAvatar = document.querySelector('.wrapper-profile-header .user-avatar img'); | |
| 362 | + const avatarRatio = parseFloat((lpProfileSettings.avatar_dimensions.width / lpProfileSettings.avatar_dimensions.height).toFixed(2)); | |
| 363 | + lpAvatarWrapper.addEventListener('click', e => { | |
| 364 | + const target = e.target; | |
| 365 | + if (target === btnReplace) { | |
| 366 | + e.preventDefault(); | |
| 367 | + avatarInputFile.click(); | |
| 368 | + } else if (target === btnSave) { | |
| 369 | + _utils_js__WEBPACK_IMPORTED_MODULE_2__.lpSetLoadingEl(btnSave, 1); | |
| 370 | + btnSave.disabled = true; | |
| 371 | + if (undefined !== cropper) { | |
| 372 | + const canvas = cropper.getCroppedCanvas({ | |
| 373 | + width: lpProfileSettings.avatar_dimensions.width, | |
| 374 | + height: lpProfileSettings.avatar_dimensions.height | |
| 375 | + }); | |
| 376 | + const newCropSrc = canvas.toDataURL('image/png'); | |
| 377 | + if (profileAvatar) { | |
| 378 | + profileAvatar.src = newCropSrc; | |
| 379 | + } | |
| 380 | + avatarPreviewImage.src = newCropSrc; | |
| 381 | + const formData = new FormData(); | |
| 382 | + formData.append('file', newCropSrc); | |
| 383 | + uploadAvatar(formData); | |
| 384 | + } | |
| 385 | + } else if (target === btnCancel) { | |
| 386 | + e.preventDefault(); | |
| 387 | + cropper.destroy(); | |
| 388 | + avatarPreviewImage.src = imgUrlOriginal; | |
| 389 | + if (imgUrlOriginal === window.location.href) { | |
| 390 | + _utils_js__WEBPACK_IMPORTED_MODULE_2__.lpShowHideEl(avatarForm, 1); | |
| 391 | + _utils_js__WEBPACK_IMPORTED_MODULE_2__.lpShowHideEl(btnReplace, 0); | |
| 392 | + _utils_js__WEBPACK_IMPORTED_MODULE_2__.lpShowHideEl(avatarPreviewImage, 0); | |
| 393 | + } else { | |
| 394 | + _utils_js__WEBPACK_IMPORTED_MODULE_2__.lpShowHideEl(btnRemove, 1); | |
| 395 | + } | |
| 396 | + _utils_js__WEBPACK_IMPORTED_MODULE_2__.lpShowHideEl(btnSave, 0); | |
| 397 | + _utils_js__WEBPACK_IMPORTED_MODULE_2__.lpShowHideEl(btnCancel, 0); | |
| 398 | + } else if (target === btnRemove) { | |
| 399 | + btnRemove.disabled = true; | |
| 400 | + _utils_js__WEBPACK_IMPORTED_MODULE_2__.lpSetLoadingEl(btnRemove, 1); | |
| 401 | + removeAvatar(); | |
| 402 | + } | |
| 403 | + }); | |
| 404 | + lpAvatarWrapper.addEventListener('change', e => { | |
| 405 | + const target = e.target; | |
| 406 | + if (target === avatarInputFile) { | |
| 407 | + const file = avatarInputFile.files[0]; | |
| 408 | + if (!file) { | |
| 409 | + return; | |
| 410 | + } | |
| 411 | + const allowType = ['image/png', 'image/jpeg', 'image/webp']; | |
| 412 | + if (allowType.indexOf(file.type) < 0) { | |
| 413 | + return; | |
| 414 | + } | |
| 415 | + const reader = new FileReader(); | |
| 416 | + reader.onload = function (e) { | |
| 417 | + avatarPreviewImage.src = e.target.result; | |
| 418 | + // Destroy previous cropper instance if any | |
| 419 | + if (cropper) { | |
| 420 | + cropper.destroy(); | |
| 421 | + } | |
| 422 | + // Initialize cropper | |
| 423 | + cropper = new (cropperjs__WEBPACK_IMPORTED_MODULE_1___default())(avatarPreviewImage, { | |
| 424 | + aspectRatio: avatarRatio, | |
| 425 | + viewMode: 1, | |
| 426 | + zoomOnWheel: false | |
| 427 | + }); | |
| 428 | + }; | |
| 429 | + reader.readAsDataURL(file); | |
| 430 | + if (!avatarPreviewImage.classList.contains('lp-hidden')) { | |
| 431 | + _utils_js__WEBPACK_IMPORTED_MODULE_2__.lpShowHideEl(avatarPreviewImage, 1); | |
| 432 | + } | |
| 433 | + _utils_js__WEBPACK_IMPORTED_MODULE_2__.lpShowHideEl(avatarForm, 0); | |
| 434 | + _utils_js__WEBPACK_IMPORTED_MODULE_2__.lpShowHideEl(btnSave, 1); | |
| 435 | + _utils_js__WEBPACK_IMPORTED_MODULE_2__.lpShowHideEl(btnReplace, 1); | |
| 436 | + _utils_js__WEBPACK_IMPORTED_MODULE_2__.lpShowHideEl(btnCancel, 1); | |
| 437 | + _utils_js__WEBPACK_IMPORTED_MODULE_2__.lpShowHideEl(btnRemove, 0); | |
| 438 | + } | |
| 439 | + }); | |
| 440 | + const uploadAvatar = formData => { | |
| 441 | + fetch(`${lpData.lp_rest_url}lp/v1/profile/upload-avatar`, { | |
| 442 | + method: 'POST', | |
| 443 | + headers: { | |
| 444 | + 'X-WP-Nonce': lpData.nonce | |
| 445 | + }, | |
| 446 | + body: formData | |
| 447 | + }) // wrapped | |
| 448 | + .then(res => res.json()).then(res => { | |
| 449 | + if (res.status === 'error') { | |
| 450 | + throw new Error(res.message); | |
| 451 | + } | |
| 452 | + _utils_js__WEBPACK_IMPORTED_MODULE_2__.lpShowHideEl(avatarPreviewImage, 1); | |
| 453 | + showMessage('success', res.message); | |
| 454 | + if (undefined !== cropper) { | |
| 455 | + cropper.destroy(); | |
| 456 | + } | |
| 457 | + imgUrlOriginal = avatarPreviewImage.src; | |
| 458 | + }).finally(() => { | |
| 459 | + _utils_js__WEBPACK_IMPORTED_MODULE_2__.lpShowHideEl(btnSave, 0); | |
| 460 | + btnSave.disabled = false; | |
| 461 | + _utils_js__WEBPACK_IMPORTED_MODULE_2__.lpSetLoadingEl(btnSave, 0); | |
| 462 | + _utils_js__WEBPACK_IMPORTED_MODULE_2__.lpShowHideEl(btnCancel, 0); | |
| 463 | + _utils_js__WEBPACK_IMPORTED_MODULE_2__.lpShowHideEl(btnRemove, 1); | |
| 464 | + }).catch(err => console.log(err)); | |
| 465 | + }; | |
| 466 | + const removeAvatar = () => { | |
| 467 | + fetch(`${lpData.lp_rest_url}lp/v1/profile/remove-avatar`, { | |
| 468 | + method: 'POST', | |
| 469 | + headers: { | |
| 470 | + 'X-WP-Nonce': lpData.nonce | |
| 471 | + } | |
| 472 | + }) // wrapped | |
| 473 | + .then(res => res.json()).then(res => { | |
| 474 | + if (res.status === 'error') { | |
| 475 | + throw new Error(res.message); | |
| 476 | + } | |
| 477 | + showMessage('success', res.message); | |
| 478 | + _utils_js__WEBPACK_IMPORTED_MODULE_2__.lpShowHideEl(avatarPreviewImage, 0); | |
| 479 | + _utils_js__WEBPACK_IMPORTED_MODULE_2__.lpShowHideEl(avatarForm, 1); | |
| 480 | + imgUrlOriginal = avatarPreviewSrc = ''; | |
| 481 | + profileAvatar.src = lpProfileSettings.default_avatar; | |
| 482 | + // window.location.href = window.location.href; | |
| 483 | + }).finally(() => { | |
| 484 | + btnRemove.disabled = false; | |
| 485 | + _utils_js__WEBPACK_IMPORTED_MODULE_2__.lpShowHideEl(btnRemove, 0); | |
| 486 | + _utils_js__WEBPACK_IMPORTED_MODULE_2__.lpSetLoadingEl(btnRemove, 0); | |
| 487 | + _utils_js__WEBPACK_IMPORTED_MODULE_2__.lpShowHideEl(btnReplace, 0); | |
| 488 | + }).catch(err => console.log(err)); | |
| 489 | + }; | |
| 490 | + const showMessage = (status, message) => { | |
| 491 | + toastify_js__WEBPACK_IMPORTED_MODULE_3___default()({ | |
| 492 | + text: message, | |
| 493 | + gravity: lpData.toast.gravity, | |
| 494 | + // `top` or `bottom` | |
| 495 | + position: lpData.toast.position, | |
| 496 | + // `left`, `center` or `right` | |
| 497 | + className: `${lpData.toast.classPrefix} ${status}`, | |
| 498 | + close: lpData.toast.close == 1, | |
| 499 | + stopOnFocus: lpData.toast.stopOnFocus == 1, | |
| 500 | + duration: lpData.toast.duration | |
| 501 | + }).showToast(); | |
| 502 | + }; | |
| 503 | + _utils_js__WEBPACK_IMPORTED_MODULE_2__.lpOnElementReady('.lp-avatar-image', () => { | |
| 504 | + imgUrlOriginal = avatarPreviewImage.src; | |
| 505 | + }); | |
| 506 | + _utils_js__WEBPACK_IMPORTED_MODULE_2__.lpOnElementReady('#learnpress-avatar-upload', e => { | |
| 507 | + e.scrollIntoView({ | |
| 508 | + behavior: 'smooth', | |
| 509 | + block: 'center' | |
| 510 | + }); | |
| 511 | + }); | |
| 512 | +}; | |
| 513 | +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (profileAvatarImage); | |
| 379 | 514 | |
| 380 | - ctx.putImageData(data, 0, 0); // As Base64 string | |
| 515 | +/***/ }, | |
| 381 | 516 | |
| 382 | - return canvas.toDataURL('image/jpeg'); | |
| 383 | -} | |
| 517 | +/***/ "./assets/src/js/frontend/profile/course-tab.js" | |
| 518 | +/*!******************************************************!*\ | |
| 519 | + !*** ./assets/src/js/frontend/profile/course-tab.js ***! | |
| 520 | + \******************************************************/ | |
| 521 | +(__unused_webpack_module, __webpack_exports__, __webpack_require__) { | |
| 384 | 522 | |
| 385 | -/***/ }), | |
| 386 | - | |
| 387 | -/***/ "./assets/src/apps/js/frontend/profile/course-tab.js": | |
| 388 | -/*!***********************************************************!*\ | |
| 389 | - !*** ./assets/src/apps/js/frontend/profile/course-tab.js ***! | |
| 390 | - \***********************************************************/ | |
| 391 | -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { | |
| 392 | - | |
| 393 | 523 | "use strict"; |
| 394 | 524 | __webpack_require__.r(__webpack_exports__); |
| 395 | -/* harmony import */ var _wordpress_url__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/url */ "@wordpress/url"); | |
| 396 | -/* harmony import */ var _wordpress_url__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_url__WEBPACK_IMPORTED_MODULE_0__); | |
| 397 | - // Rest API load content course enrolled, created - Nhamdv. | |
| 525 | +/* harmony export */ __webpack_require__.d(__webpack_exports__, { | |
| 526 | +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) | |
| 527 | +/* harmony export */ }); | |
| 528 | +/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../utils.js */ "./assets/src/js/utils.js"); | |
| 398 | 529 | |
| 530 | + | |
| 531 | +// Rest API load content course enrolled, created - Nhamdv. | |
| 399 | 532 | const courseTab = () => { |
| 400 | 533 | const elements = document.querySelectorAll('.learn-press-course-tab__filter__content'); |
| 401 | - | |
| 402 | - const getResponse = function (ele, dataset) { | |
| 403 | - let append = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; | |
| 404 | - let viewMoreEle = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; | |
| 405 | - wp.apiFetch({ | |
| 406 | - path: (0,_wordpress_url__WEBPACK_IMPORTED_MODULE_0__.addQueryArgs)('lp/v1/profile/course-tab', dataset), | |
| 407 | - method: 'GET' | |
| 408 | - }).then(response => { | |
| 409 | - const skeleton = ele.querySelector('.lp-skeleton-animation'); | |
| 410 | - skeleton && skeleton.remove(); | |
| 411 | - | |
| 412 | - if (response.status === 'success' && response.data) { | |
| 413 | - if (append) { | |
| 414 | - ele.innerHTML += response.data; | |
| 534 | + const getResponse = (ele, dataset, append = false, viewMoreEle = false) => { | |
| 535 | + let url = lpData.lp_rest_url + 'lp/v1/profile/course-tab'; | |
| 536 | + url = (0,_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpAddQueryArgs)(url, dataset); | |
| 537 | + const callBack = { | |
| 538 | + success: response => { | |
| 539 | + const skeleton = ele.querySelector('.lp-skeleton-animation'); | |
| 540 | + skeleton && skeleton.remove(); | |
| 541 | + if (response.status === 'success' && response.data) { | |
| 542 | + if (append) { | |
| 543 | + ele.innerHTML += response.data; | |
| 544 | + } else { | |
| 545 | + ele.innerHTML = response.data; | |
| 546 | + } | |
| 547 | + } else if (append) { | |
| 548 | + ele.innerHTML += `<div class="lp-ajax-message" style="display:block">${response.message && response.message}</div>`; | |
| 415 | 549 | } else { |
| 416 | - ele.innerHTML = response.data; | |
| 550 | + ele.innerHTML = `<div class="lp-ajax-message" style="display:block">${response.message && response.message}</div>`; | |
| 417 | 551 | } |
| 418 | - } else if (append) { | |
| 419 | - ele.innerHTML += `<div class="lp-ajax-message" style="display:block">${response.message && response.message}</div>`; | |
| 420 | - } else { | |
| 421 | - ele.innerHTML = `<div class="lp-ajax-message" style="display:block">${response.message && response.message}</div>`; | |
| 422 | - } | |
| 423 | - | |
| 424 | - if (viewMoreEle) { | |
| 425 | - viewMoreEle.classList.remove('loading'); | |
| 426 | - const paged = viewMoreEle.dataset.paged; | |
| 427 | - const numberPage = viewMoreEle.dataset.number; | |
| 428 | - | |
| 429 | - if (numberPage <= paged) { | |
| 430 | - viewMoreEle.remove(); | |
| 552 | + if (viewMoreEle) { | |
| 553 | + viewMoreEle.classList.remove('loading'); | |
| 554 | + const paged = parseInt(viewMoreEle.dataset.paged); | |
| 555 | + const numberPage = parseInt(viewMoreEle.dataset.number); | |
| 556 | + if (numberPage <= paged) { | |
| 557 | + viewMoreEle.remove(); | |
| 558 | + } | |
| 559 | + viewMoreEle.dataset.paged = paged + 1; | |
| 431 | 560 | } |
| 432 | - | |
| 433 | - viewMoreEle.dataset.paged = parseInt(paged) + 1; | |
| 434 | - } | |
| 435 | - | |
| 436 | - viewMore(ele, dataset); | |
| 437 | - }).catch(error => { | |
| 438 | - if (append) { | |
| 439 | - ele.innerHTML += `<div class="lp-ajax-message error" style="display:block">${error.message && error.message}</div>`; | |
| 440 | - } else { | |
| 441 | - ele.innerHTML = `<div class="lp-ajax-message error" style="display:block">${error.message && error.message}</div>`; | |
| 442 | - } | |
| 443 | - | |
| 444 | - if (viewMoreEle) { | |
| 445 | - viewMoreEle.classList.remove('loading'); | |
| 446 | - const paged = viewMoreEle.dataset.paged; | |
| 447 | - const numberPage = viewMoreEle.dataset.number; | |
| 448 | - | |
| 449 | - if (numberPage <= paged) { | |
| 450 | - viewMoreEle.remove(); | |
| 561 | + viewMore(ele, dataset); | |
| 562 | + }, | |
| 563 | + error: error => { | |
| 564 | + console.log(error); | |
| 565 | + }, | |
| 566 | + completed: () => {} | |
| 567 | + }; | |
| 568 | + let paramsFetch = {}; | |
| 569 | + if (0 !== parseInt(lpData.user_id)) { | |
| 570 | + paramsFetch = { | |
| 571 | + headers: { | |
| 572 | + 'X-WP-Nonce': lpData.nonce | |
| 451 | 573 | } |
| 452 | - | |
| 453 | - viewMoreEle.dataset.paged = parseInt(paged) + 1; | |
| 454 | - } | |
| 455 | - }); | |
| 574 | + }; | |
| 575 | + } | |
| 576 | + (0,_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpFetchAPI)(url, paramsFetch, callBack); | |
| 456 | 577 | }; |
| 457 | - | |
| 458 | 578 | if ('IntersectionObserver' in window) { |
| 459 | 579 | const eleObserver = new IntersectionObserver((entries, observer) => { |
| 460 | 580 | entries.forEach(entry => { |
| 461 | 581 | if (entry.isIntersecting) { |
| @@ -460,9 +580,10 @@ | ||
| 460 | 580 | entries.forEach(entry => { |
| 461 | 581 | if (entry.isIntersecting) { |
| 462 | 582 | const ele = entry.target; |
| 463 | 583 | const params = ele.parentNode.querySelector('.lp_profile_tab_input_param'); |
| 464 | - const data = { ...JSON.parse(params.value), | |
| 584 | + const data = { | |
| 585 | + ...JSON.parse(params.value), | |
| 465 | 586 | status: ele.dataset.tab || '' |
| 466 | 587 | }; |
| 467 | 588 | getResponse(ele, data); |
| 468 | 589 | eleObserver.unobserve(ele); |
| @@ -473,9 +594,10 @@ | ||
| 473 | 594 | if (ele.dataset.tab !== 'all') { |
| 474 | 595 | eleObserver.observe(ele); |
| 475 | 596 | } else { |
| 476 | 597 | const params = ele.parentNode.querySelector('.lp_profile_tab_input_param'); |
| 477 | - const data = { ...JSON.parse(params.value), | |
| 598 | + const data = { | |
| 599 | + ...JSON.parse(params.value), | |
| 478 | 600 | status: ele.dataset.tab === 'all' ? '' : ele.dataset.tab || '' |
| 479 | 601 | }; |
| 480 | 602 | getResponse(ele, data); |
| 481 | 603 | } |
| @@ -480,9 +602,8 @@ | ||
| 480 | 602 | getResponse(ele, data); |
| 481 | 603 | } |
| 482 | 604 | }); |
| 483 | 605 | } |
| 484 | - | |
| 485 | 606 | const changeFilter = () => { |
| 486 | 607 | const tabs = document.querySelectorAll('.learn-press-course-tab-filters'); |
| 487 | 608 | tabs.forEach(tab => { |
| 488 | 609 | const filters = tab.querySelectorAll('.learn-press-filters a'); |
| @@ -495,9 +616,8 @@ | ||
| 495 | 616 | }); |
| 496 | 617 | filter.classList.add('active'); |
| 497 | 618 | [...tab.querySelectorAll('.learn-press-course-tab__filter__content')].map(ele => { |
| 498 | 619 | ele.style.display = 'none'; |
| 499 | - | |
| 500 | 620 | if (ele.dataset.tab === tabName) { |
| 501 | 621 | ele.style.display = ''; |
| 502 | 622 | } |
| 503 | 623 | }); |
| @@ -504,40 +624,11 @@ | ||
| 504 | 624 | }); |
| 505 | 625 | }); |
| 506 | 626 | }); |
| 507 | 627 | }; |
| 508 | - | |
| 509 | 628 | changeFilter(); |
| 510 | - | |
| 511 | - const changeTab = () => { | |
| 512 | - const tabUls = document.querySelectorAll('.learn-press-profile-course__tab__inner'); | |
| 513 | - tabUls.forEach(tabUl => { | |
| 514 | - const tabs = tabUl.querySelectorAll('li> a'); | |
| 515 | - tabs.forEach(tab => { | |
| 516 | - tab.addEventListener('click', e => { | |
| 517 | - e.preventDefault(); | |
| 518 | - const tabName = tab.dataset.tab; | |
| 519 | - [...tabs].map(ele => { | |
| 520 | - ele.classList.remove('active'); | |
| 521 | - }); | |
| 522 | - tab.classList.add('active'); | |
| 523 | - [...document.querySelectorAll('.learn-press-course-tab-filters')].map(ele => { | |
| 524 | - ele.style.display = 'none'; | |
| 525 | - | |
| 526 | - if (ele.dataset.tab === tabName) { | |
| 527 | - ele.style.display = ''; | |
| 528 | - } | |
| 529 | - }); | |
| 530 | - }); | |
| 531 | - }); | |
| 532 | - }); | |
| 533 | - }; | |
| 534 | - | |
| 535 | - changeTab(); | |
| 536 | - | |
| 537 | 629 | const viewMore = (ele, dataset) => { |
| 538 | 630 | const viewMoreEle = ele.querySelector('button[data-paged]'); |
| 539 | - | |
| 540 | 631 | if (viewMoreEle) { |
| 541 | 632 | viewMoreEle.addEventListener('click', e => { |
| 542 | 633 | e.preventDefault(); |
| 543 | 634 | const paged = viewMoreEle && viewMoreEle.dataset.paged; |
| @@ -542,9 +633,10 @@ | ||
| 542 | 633 | e.preventDefault(); |
| 543 | 634 | const paged = viewMoreEle && viewMoreEle.dataset.paged; |
| 544 | 635 | viewMoreEle.classList.add('loading'); |
| 545 | 636 | const element = dataset.layout === 'list' ? '.lp_profile_course_progress' : '.learn-press-courses'; |
| 546 | - getResponse(ele.querySelector(element), { ...dataset, | |
| 637 | + getResponse(ele.querySelector(element), { | |
| 638 | + ...dataset, | |
| 547 | 639 | ...{ |
| 548 | 640 | paged |
| 549 | 641 | } |
| 550 | 642 | }, true, viewMoreEle); |
| @@ -551,1938 +643,10813 @@ | ||
| 551 | 643 | }); |
| 552 | 644 | } |
| 553 | 645 | }; |
| 554 | 646 | }; |
| 647 | +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (courseTab); | |
| 555 | 648 | |
| 556 | -/* harmony default export */ __webpack_exports__["default"] = (courseTab); | |
| 649 | +/***/ }, | |
| 557 | 650 | |
| 558 | -/***/ }), | |
| 651 | +/***/ "./assets/src/js/frontend/profile/cover-image.js" | |
| 652 | +/*!*******************************************************!*\ | |
| 653 | + !*** ./assets/src/js/frontend/profile/cover-image.js ***! | |
| 654 | + \*******************************************************/ | |
| 655 | +(__unused_webpack_module, __webpack_exports__, __webpack_require__) { | |
| 559 | 656 | |
| 560 | -/***/ "./assets/src/apps/js/frontend/profile/order-recover.js": | |
| 561 | -/*!**************************************************************!*\ | |
| 562 | - !*** ./assets/src/apps/js/frontend/profile/order-recover.js ***! | |
| 563 | - \**************************************************************/ | |
| 564 | -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { | |
| 565 | - | |
| 566 | 657 | "use strict"; |
| 567 | 658 | __webpack_require__.r(__webpack_exports__); |
| 568 | 659 | /* harmony export */ __webpack_require__.d(__webpack_exports__, { |
| 569 | -/* harmony export */ "default": function() { return /* binding */ recoverOrder; } | |
| 660 | +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) | |
| 570 | 661 | /* harmony export */ }); |
| 571 | -const $ = window.jQuery; | |
| 572 | -function recoverOrder() { | |
| 573 | - const wrap = $('.order-recover'), | |
| 574 | - buttonRecoverOrder = wrap.find('.button-recover-order'); | |
| 662 | +/* harmony import */ var cropperjs_dist_cropper_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! cropperjs/dist/cropper.css */ "./node_modules/cropperjs/dist/cropper.css"); | |
| 663 | +/* harmony import */ var cropperjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! cropperjs */ "./node_modules/cropperjs/dist/cropper.js"); | |
| 664 | +/* harmony import */ var cropperjs__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(cropperjs__WEBPACK_IMPORTED_MODULE_1__); | |
| 665 | +/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../utils.js */ "./assets/src/js/utils.js"); | |
| 666 | +/* harmony import */ var _api_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../api.js */ "./assets/src/js/api.js"); | |
| 667 | +/* harmony import */ var toastify_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! toastify-js */ "./node_modules/toastify-js/src/toastify.js"); | |
| 668 | +/* harmony import */ var toastify_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(toastify_js__WEBPACK_IMPORTED_MODULE_4__); | |
| 669 | +/* harmony import */ var toastify_js_src_toastify_css__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! toastify-js/src/toastify.css */ "./node_modules/toastify-js/src/toastify.css"); | |
| 575 | 670 | |
| 576 | - const ajaxRecover = () => { | |
| 577 | - wrap.find('.learn-press-message').remove(); | |
| 578 | - $('.profile-recover-order').find('.learn-press-message').remove(); | |
| 579 | - $.post({ | |
| 580 | - url: '', | |
| 581 | - data: wrap.serializeJSON(), | |
| 582 | 671 | |
| 583 | - beforeSend() { | |
| 584 | - buttonRecoverOrder.addClass('loading').attr('disabled', 'disabled'); | |
| 585 | - }, | |
| 586 | 672 | |
| 587 | - success(response) { | |
| 588 | - response = LP.parseJSON(response); | |
| 589 | 673 | |
| 590 | - if (response.message) { | |
| 591 | - const $msg = $('<div class="learn-press-message icon"><i class="fa"></i> ' + response.message + '</div>'); | |
| 592 | 674 | |
| 593 | - if (response.result == 'error') { | |
| 594 | - $msg.addClass('error'); | |
| 595 | - } | |
| 596 | 675 | |
| 597 | - wrap.before($msg); | |
| 598 | - } | |
| 676 | +const profileCoverImage = () => { | |
| 677 | + const lpSet = new Set(); | |
| 678 | + let cropper; | |
| 679 | + let elBtnSave, elBtnRemove, elBtnChoose, elBtnCancel, elImagePreview, elCoverImageBackground, elImgCoverImageBackground, elImageEmpty, formCoverImage, elInputFile, elAction, imgUrlOriginal; | |
| 680 | + const className = { | |
| 681 | + formCoverImage: 'lp-user-cover-image', | |
| 682 | + BtnChooseCoverImage: 'lp-btn-choose-cover-image', | |
| 683 | + BtnSaveCoverImage: 'lp-btn-save-cover-image', | |
| 684 | + BtnRemoveCoverImage: 'lp-btn-remove-cover-image', | |
| 685 | + BtnCancelCoverImage: 'lp-btn-cancel-cover-image', | |
| 686 | + BtnToEditCoverImage: 'lp-btn-to-edit-cover-image', | |
| 687 | + CoverImagePreview: 'lp-cover-image-preview', | |
| 688 | + CoverImageEmpty: 'lp-cover-image-empty', | |
| 689 | + CoverImageBackground: 'lp-user-cover-image_background', | |
| 690 | + InputFile: 'lp-cover-image-file', | |
| 691 | + loading: 'loading', | |
| 692 | + hidden: 'lp-hidden' | |
| 693 | + }; | |
| 599 | 694 | |
| 600 | - if (response.redirect) { | |
| 601 | - window.location.href = response.redirect; | |
| 695 | + /** | |
| 696 | + * Get elements to use. | |
| 697 | + */ | |
| 698 | + const getElements = () => { | |
| 699 | + elBtnSave = formCoverImage.querySelector(`.${className.BtnSaveCoverImage}`); | |
| 700 | + elBtnChoose = formCoverImage.querySelector(`.${className.BtnChooseCoverImage}`); | |
| 701 | + elBtnRemove = formCoverImage.querySelector(`.${className.BtnRemoveCoverImage}`); | |
| 702 | + elBtnCancel = formCoverImage.querySelector(`.${className.BtnCancelCoverImage}`); | |
| 703 | + elImagePreview = formCoverImage.querySelector(`.${className.CoverImagePreview}`); | |
| 704 | + elCoverImageBackground = document.querySelector(`.${className.CoverImageBackground}`); | |
| 705 | + elImgCoverImageBackground = elCoverImageBackground.querySelector(`img`); | |
| 706 | + elImageEmpty = formCoverImage.querySelector(`.${className.CoverImageEmpty}`); | |
| 707 | + elAction = formCoverImage.querySelector('input[name=action]'); | |
| 708 | + elInputFile = formCoverImage.querySelector('input[name=lp-cover-image-file]'); | |
| 709 | + if (!lpSet.has('everClick')) { | |
| 710 | + imgUrlOriginal = elImagePreview.src; | |
| 711 | + lpSet.add('everClick'); | |
| 712 | + } | |
| 713 | + }; | |
| 714 | + const fetchAPI = formData => { | |
| 715 | + const callBack = { | |
| 716 | + success: response => { | |
| 717 | + const { | |
| 718 | + status, | |
| 719 | + message, | |
| 720 | + data | |
| 721 | + } = response; | |
| 722 | + toastify_js__WEBPACK_IMPORTED_MODULE_4___default()({ | |
| 723 | + text: message, | |
| 724 | + gravity: lpData.toast.gravity, | |
| 725 | + // `top` or `bottom` | |
| 726 | + position: lpData.toast.position, | |
| 727 | + // `left`, `center` or `right` | |
| 728 | + className: `${lpData.toast.classPrefix} ${status}`, | |
| 729 | + close: lpData.toast.close == 1, | |
| 730 | + stopOnFocus: lpData.toast.stopOnFocus == 1, | |
| 731 | + duration: lpData.toast.duration | |
| 732 | + }).showToast(); | |
| 733 | + if ('remove' === data.action) { | |
| 734 | + _utils_js__WEBPACK_IMPORTED_MODULE_2__.lpShowHideEl(elBtnRemove, 0); | |
| 735 | + _utils_js__WEBPACK_IMPORTED_MODULE_2__.lpShowHideEl(elBtnChoose, 0); | |
| 736 | + elImagePreview.src = ''; | |
| 737 | + _utils_js__WEBPACK_IMPORTED_MODULE_2__.lpShowHideEl(elImagePreview, 0); | |
| 738 | + _utils_js__WEBPACK_IMPORTED_MODULE_2__.lpShowHideEl(elImageEmpty, 1); | |
| 739 | + if (elCoverImageBackground) { | |
| 740 | + _utils_js__WEBPACK_IMPORTED_MODULE_2__.lpShowHideEl(elCoverImageBackground, 0); | |
| 741 | + } | |
| 742 | + } else if ('upload' === data.action) { | |
| 743 | + _utils_js__WEBPACK_IMPORTED_MODULE_2__.lpShowHideEl(elImagePreview, 1); | |
| 744 | + elImagePreview.src = data.url; | |
| 745 | + imgUrlOriginal = data.url; | |
| 746 | + cropper.destroy(); | |
| 602 | 747 | } |
| 603 | - | |
| 604 | - buttonRecoverOrder.removeClass('loading').removeAttr('disabled', ''); | |
| 748 | + imgUrlOriginal = elImagePreview.src; | |
| 605 | 749 | }, |
| 606 | - | |
| 607 | - error() { | |
| 608 | - buttonRecoverOrder.removeClass('loading').removeAttr('disabled', ''); | |
| 750 | + error: error => { | |
| 751 | + console.log(error); | |
| 752 | + }, | |
| 753 | + completed: () => { | |
| 754 | + _utils_js__WEBPACK_IMPORTED_MODULE_2__.lpShowHideEl(elBtnSave, 0); | |
| 755 | + _utils_js__WEBPACK_IMPORTED_MODULE_2__.lpSetLoadingEl(elBtnSave, 0); | |
| 756 | + _utils_js__WEBPACK_IMPORTED_MODULE_2__.lpSetLoadingEl(elBtnRemove, 0); | |
| 757 | + _utils_js__WEBPACK_IMPORTED_MODULE_2__.lpShowHideEl(elBtnCancel, 0); | |
| 758 | + if (!elImagePreview.src || elImagePreview.src === window.location.href) { | |
| 759 | + _utils_js__WEBPACK_IMPORTED_MODULE_2__.lpShowHideEl(elBtnRemove, 0); | |
| 760 | + } else { | |
| 761 | + _utils_js__WEBPACK_IMPORTED_MODULE_2__.lpShowHideEl(elBtnRemove, 1); | |
| 762 | + } | |
| 609 | 763 | } |
| 610 | - | |
| 611 | - }); | |
| 764 | + }; | |
| 765 | + const url = _api_js__WEBPACK_IMPORTED_MODULE_3__["default"].frontend.apiProfileCoverImage; | |
| 766 | + const option = { | |
| 767 | + headers: {} | |
| 768 | + }; | |
| 769 | + if (0 !== parseInt(lpData.user_id)) { | |
| 770 | + option.headers['X-WP-Nonce'] = lpData.nonce; | |
| 771 | + } | |
| 772 | + option.method = 'POST'; | |
| 773 | + option.body = formData; | |
| 774 | + _utils_js__WEBPACK_IMPORTED_MODULE_2__.lpFetchAPI(url, option, callBack); | |
| 612 | 775 | }; |
| 613 | 776 | |
| 614 | - buttonRecoverOrder.on('click', ajaxRecover); | |
| 615 | -} | |
| 616 | -; | |
| 777 | + // Events | |
| 778 | + document.addEventListener('click', e => { | |
| 779 | + const target = e.target; | |
| 780 | + if (target.classList.contains(className.BtnToEditCoverImage)) { | |
| 781 | + formCoverImage = document.querySelector(`.${className.formCoverImage}`); | |
| 782 | + if (!formCoverImage) { | |
| 783 | + return; | |
| 784 | + } | |
| 785 | + const isCorrectSection = target.dataset.sectionCorrect == 1; | |
| 786 | + if (isCorrectSection) { | |
| 787 | + e.preventDefault(); | |
| 788 | + formCoverImage.scrollIntoView({ | |
| 789 | + behavior: 'smooth', | |
| 790 | + block: 'center' | |
| 791 | + }); | |
| 792 | + } | |
| 793 | + } | |
| 794 | + formCoverImage = target.closest(`.${className.formCoverImage}`); | |
| 795 | + if (!formCoverImage) { | |
| 796 | + return; | |
| 797 | + } | |
| 798 | + getElements(); | |
| 799 | + if (target.classList.contains(className.BtnChooseCoverImage)) { | |
| 800 | + e.preventDefault(); | |
| 801 | + elInputFile.click(); | |
| 802 | + } | |
| 803 | + if (target.classList.contains(className.BtnSaveCoverImage)) { | |
| 804 | + _utils_js__WEBPACK_IMPORTED_MODULE_2__.lpSetLoadingEl(elBtnSave, 1); | |
| 805 | + } | |
| 806 | + if (target.classList.contains(className.BtnCancelCoverImage)) { | |
| 807 | + e.preventDefault(); | |
| 808 | + cropper.destroy(); | |
| 809 | + elImagePreview.src = imgUrlOriginal; | |
| 810 | + if (imgUrlOriginal === window.location.href) { | |
| 811 | + _utils_js__WEBPACK_IMPORTED_MODULE_2__.lpShowHideEl(elImageEmpty, 1); | |
| 812 | + _utils_js__WEBPACK_IMPORTED_MODULE_2__.lpShowHideEl(elBtnChoose, 0); | |
| 813 | + _utils_js__WEBPACK_IMPORTED_MODULE_2__.lpShowHideEl(elImagePreview, 0); | |
| 814 | + } else { | |
| 815 | + _utils_js__WEBPACK_IMPORTED_MODULE_2__.lpShowHideEl(elBtnRemove, 1); | |
| 816 | + } | |
| 817 | + _utils_js__WEBPACK_IMPORTED_MODULE_2__.lpShowHideEl(elBtnSave, 0); | |
| 818 | + _utils_js__WEBPACK_IMPORTED_MODULE_2__.lpShowHideEl(elBtnCancel, 0); | |
| 819 | + } | |
| 820 | + if (target.classList.contains(className.BtnRemoveCoverImage)) { | |
| 821 | + e.preventDefault(); | |
| 822 | + target.classList.add('loading'); | |
| 823 | + if (cropper) { | |
| 824 | + cropper.destroy(); | |
| 825 | + cropper = undefined; | |
| 826 | + } | |
| 827 | + elAction.value = 'remove'; | |
| 828 | + elBtnSave.click(); | |
| 829 | + } | |
| 830 | + if (target.classList.contains(className.CoverImageEmpty)) { | |
| 831 | + e.preventDefault(); | |
| 832 | + elInputFile.click(); | |
| 833 | + } | |
| 834 | + }); | |
| 835 | + document.addEventListener('change', e => { | |
| 836 | + const target = e.target; | |
| 837 | + formCoverImage = target.closest(`.${className.formCoverImage}`); | |
| 838 | + if (!formCoverImage) { | |
| 839 | + return; | |
| 840 | + } | |
| 841 | + getElements(); | |
| 842 | + if (target.classList.contains(className.InputFile)) { | |
| 843 | + e.preventDefault(); | |
| 844 | + const file = target.files[0]; | |
| 845 | + if (!file) { | |
| 846 | + return; | |
| 847 | + } | |
| 848 | + const allowType = ['image/png', 'image/jpeg', 'image/webp']; | |
| 849 | + if (allowType.indexOf(file.type) < 0) { | |
| 850 | + return; | |
| 851 | + } | |
| 852 | + elAction.value = 'upload'; | |
| 853 | + _utils_js__WEBPACK_IMPORTED_MODULE_2__.lpShowHideEl(elImagePreview, 1); | |
| 854 | + _utils_js__WEBPACK_IMPORTED_MODULE_2__.lpShowHideEl(elImageEmpty, 0); | |
| 855 | + _utils_js__WEBPACK_IMPORTED_MODULE_2__.lpShowHideEl(elBtnRemove, 0); | |
| 856 | + _utils_js__WEBPACK_IMPORTED_MODULE_2__.lpShowHideEl(elBtnSave, 1); | |
| 857 | + _utils_js__WEBPACK_IMPORTED_MODULE_2__.lpShowHideEl(elBtnChoose, 1); | |
| 858 | + _utils_js__WEBPACK_IMPORTED_MODULE_2__.lpShowHideEl(elBtnCancel, 1); | |
| 859 | + const reader = new FileReader(); | |
| 860 | + reader.onload = function (e) { | |
| 861 | + elImagePreview.src = e.target.result; | |
| 862 | + // Destroy previous cropper instance if any | |
| 863 | + if (cropper) { | |
| 864 | + cropper.destroy(); | |
| 865 | + } | |
| 866 | + // Initialize cropper | |
| 867 | + cropper = new (cropperjs__WEBPACK_IMPORTED_MODULE_1___default())(elImagePreview, { | |
| 868 | + aspectRatio: lpData.coverImageRatio, | |
| 869 | + viewMode: 1, | |
| 870 | + zoomOnWheel: false | |
| 871 | + }); | |
| 872 | + }; | |
| 873 | + reader.readAsDataURL(file); | |
| 874 | + } | |
| 875 | + }); | |
| 876 | + document.addEventListener('submit', e => { | |
| 877 | + const target = e.target; | |
| 878 | + if (target.classList.contains(className.formCoverImage)) { | |
| 879 | + e.preventDefault(); | |
| 880 | + const formData = new FormData(target); | |
| 881 | + if (undefined !== cropper) { | |
| 882 | + const canvas = cropper.getCroppedCanvas({}); | |
| 883 | + if (elCoverImageBackground) { | |
| 884 | + const dataUrl = canvas.toDataURL('image/png'); | |
| 885 | + elCoverImageBackground.style.backgroundImage = `url(${dataUrl})`; | |
| 886 | + elImgCoverImageBackground.src = dataUrl; | |
| 887 | + _utils_js__WEBPACK_IMPORTED_MODULE_2__.lpShowHideEl(elCoverImageBackground, 1); | |
| 888 | + } | |
| 889 | + canvas.toBlob(blob => { | |
| 890 | + formData.append('image', blob, 'cover.png'); | |
| 891 | + fetchAPI(formData); | |
| 892 | + }, 'image/png'); | |
| 893 | + } else { | |
| 894 | + fetchAPI(formData); | |
| 895 | + } | |
| 896 | + } | |
| 897 | + }); | |
| 898 | + document.addEventListener('DOMContentLoaded', e => { | |
| 899 | + const elBtnToEditCoverImage = document.querySelector(`.${className.BtnToEditCoverImage}`); | |
| 900 | + const formCoverImage = document.querySelector(`.${className.formCoverImage}`); | |
| 901 | + if (elBtnToEditCoverImage && formCoverImage) { | |
| 902 | + const isCorrectSection = elBtnToEditCoverImage.dataset.sectionCorrect == 1; | |
| 903 | + if (isCorrectSection) { | |
| 904 | + formCoverImage.scrollIntoView({ | |
| 905 | + behavior: 'smooth', | |
| 906 | + block: 'center' | |
| 907 | + }); | |
| 908 | + } | |
| 909 | + } | |
| 910 | + }); | |
| 911 | +}; | |
| 912 | +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (profileCoverImage); | |
| 617 | 913 | |
| 618 | -/***/ }), | |
| 914 | +/***/ }, | |
| 619 | 915 | |
| 620 | -/***/ "./assets/src/apps/js/frontend/profile/statistic.js": | |
| 621 | -/*!**********************************************************!*\ | |
| 622 | - !*** ./assets/src/apps/js/frontend/profile/statistic.js ***! | |
| 623 | - \**********************************************************/ | |
| 624 | -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { | |
| 916 | +/***/ "./assets/src/js/frontend/profile/order-recover.js" | |
| 917 | +/*!*********************************************************!*\ | |
| 918 | + !*** ./assets/src/js/frontend/profile/order-recover.js ***! | |
| 919 | + \*********************************************************/ | |
| 920 | +(__unused_webpack_module, __webpack_exports__, __webpack_require__) { | |
| 625 | 921 | |
| 626 | 922 | "use strict"; |
| 627 | 923 | __webpack_require__.r(__webpack_exports__); |
| 628 | -/* harmony import */ var _wordpress_url__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/url */ "@wordpress/url"); | |
| 629 | -/* harmony import */ var _wordpress_url__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_url__WEBPACK_IMPORTED_MODULE_0__); | |
| 630 | - // Rest API load content course progress - Nhamdv. | |
| 924 | +/* harmony export */ __webpack_require__.d(__webpack_exports__, { | |
| 925 | +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) | |
| 926 | +/* harmony export */ }); | |
| 927 | +/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../utils.js */ "./assets/src/js/utils.js"); | |
| 928 | +/* harmony import */ var toastify_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! toastify-js */ "./node_modules/toastify-js/src/toastify.js"); | |
| 929 | +/* harmony import */ var toastify_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(toastify_js__WEBPACK_IMPORTED_MODULE_1__); | |
| 631 | 930 | |
| 632 | -const courseStatistics = () => { | |
| 633 | - const elements = document.querySelector('.learn-press-profile-course__statistic'); | |
| 634 | 931 | |
| 635 | - if (!elements) { | |
| 636 | - return; | |
| 637 | - } | |
| 638 | 932 | |
| 639 | - const getResponse = (ele, dataset) => { | |
| 640 | - wp.apiFetch({ | |
| 641 | - path: (0,_wordpress_url__WEBPACK_IMPORTED_MODULE_0__.addQueryArgs)('lp/v1/profile/statistic', dataset), | |
| 642 | - method: 'GET' | |
| 933 | +/** | |
| 934 | + * JS Recover order | |
| 935 | + * | |
| 936 | + * @since 4.0.0 | |
| 937 | + * @version 1.0.1 | |
| 938 | + */ | |
| 939 | +const recoverOrder = () => { | |
| 940 | + const toastify = toastify_js__WEBPACK_IMPORTED_MODULE_1___default()({ | |
| 941 | + gravity: lpData.toast.gravity, | |
| 942 | + // `top` or `bottom` | |
| 943 | + position: lpData.toast.position, | |
| 944 | + // `left`, `center` or `right` | |
| 945 | + close: lpData.toast.close == 1, | |
| 946 | + className: `${lpData.toast.classPrefix}`, | |
| 947 | + stopOnFocus: lpData.toast.stopOnFocus == 1, | |
| 948 | + duration: lpData.toast.duration | |
| 949 | + }); | |
| 950 | + | |
| 951 | + // Events | |
| 952 | + document.addEventListener('submit', e => { | |
| 953 | + const target = e.target; | |
| 954 | + if (target.classList.contains('lp-order-recover')) { | |
| 955 | + e.preventDefault(); | |
| 956 | + ajaxRecover(target); | |
| 957 | + } | |
| 958 | + }); | |
| 959 | + const ajaxRecover = form => { | |
| 960 | + const status = 'error'; | |
| 961 | + const btnSubmit = form.querySelector('.button-recover-order'); | |
| 962 | + if (!btnSubmit) { | |
| 963 | + return; | |
| 964 | + } | |
| 965 | + (0,_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl)(btnSubmit, 1); | |
| 966 | + const url = new URL(window.location.href); | |
| 967 | + fetch(url, { | |
| 968 | + method: 'POST', | |
| 969 | + body: new FormData(form) | |
| 643 | 970 | }).then(response => { |
| 644 | - if (response.status === 'success' && response.data) { | |
| 645 | - ele.innerHTML = response.data; | |
| 971 | + return response.json(); | |
| 972 | + }).then(res => { | |
| 973 | + const { | |
| 974 | + status, | |
| 975 | + data: { | |
| 976 | + redirect | |
| 977 | + }, | |
| 978 | + message | |
| 979 | + } = res; | |
| 980 | + if (status === 'success') { | |
| 981 | + toastify.options.text = message; | |
| 982 | + toastify.options.className += ` ${status}`; | |
| 983 | + toastify.showToast(); | |
| 984 | + if (redirect) { | |
| 985 | + window.location.href = redirect; | |
| 986 | + } | |
| 987 | + btnSubmit.remove(); | |
| 646 | 988 | } else { |
| 647 | - ele.innerHTML = `<div class="lp-ajax-message error" style="display:block">${response.message && response.message}</div>`; | |
| 989 | + (0,_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpSetLoadingEl)(btnSubmit, 0); | |
| 990 | + throw new Error(message); | |
| 648 | 991 | } |
| 649 | - }).catch(err => { | |
| 650 | - console.log(err); //ele.innerHTML += `<div class="lp-ajax-message error" style="display:block">${ err.message && err.message }</div>`; | |
| 992 | + }).finally(() => {}).catch(err => { | |
| 993 | + toastify.options.text = err.message; | |
| 994 | + toastify.options.className += ` ${status}`; | |
| 995 | + toastify.showToast(); | |
| 651 | 996 | }); |
| 652 | 997 | }; |
| 998 | +}; | |
| 999 | +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (recoverOrder); | |
| 653 | 1000 | |
| 654 | - const elArgStatistic = document.querySelector('[name="args_query_user_courses_statistic"]'); | |
| 1001 | +/***/ }, | |
| 655 | 1002 | |
| 656 | - if (!elArgStatistic) { | |
| 657 | - return; | |
| 1003 | +/***/ "./assets/src/js/frontend/profile/order-refund.js" | |
| 1004 | +/*!********************************************************!*\ | |
| 1005 | + !*** ./assets/src/js/frontend/profile/order-refund.js ***! | |
| 1006 | + \********************************************************/ | |
| 1007 | +(__unused_webpack_module, __webpack_exports__, __webpack_require__) { | |
| 1008 | + | |
| 1009 | +"use strict"; | |
| 1010 | +__webpack_require__.r(__webpack_exports__); | |
| 1011 | +/* harmony export */ __webpack_require__.d(__webpack_exports__, { | |
| 1012 | +/* harmony export */ OrderRefund: () => (/* binding */ OrderRefund), | |
| 1013 | +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) | |
| 1014 | +/* harmony export */ }); | |
| 1015 | +/* harmony import */ var sweetalert2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! sweetalert2 */ "./node_modules/sweetalert2/dist/sweetalert2.all.js"); | |
| 1016 | +/* harmony import */ var sweetalert2__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(sweetalert2__WEBPACK_IMPORTED_MODULE_0__); | |
| 1017 | +/* harmony import */ var _lpToastify__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../lpToastify */ "./assets/src/js/lpToastify.js"); | |
| 1018 | +/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../utils.js */ "./assets/src/js/utils.js"); | |
| 1019 | + | |
| 1020 | + | |
| 1021 | + | |
| 1022 | + | |
| 1023 | +/** | |
| 1024 | + * Order Refund Script | |
| 1025 | + * | |
| 1026 | + * Handle refund action on profile orders list. | |
| 1027 | + * | |
| 1028 | + * @since 4.3.5 | |
| 1029 | + * @version 1.0.0 | |
| 1030 | + */ | |
| 1031 | +class OrderRefund { | |
| 1032 | + constructor() { | |
| 1033 | + this.isRequesting = false; | |
| 658 | 1034 | } |
| 1035 | + static selectors = { | |
| 1036 | + actionRefund: '.lp-refund-order-action' | |
| 1037 | + }; | |
| 1038 | + init() { | |
| 1039 | + this.events(); | |
| 1040 | + } | |
| 1041 | + events() { | |
| 1042 | + if (OrderRefund._loadedEvents) { | |
| 1043 | + return; | |
| 1044 | + } | |
| 1045 | + OrderRefund._loadedEvents = this; | |
| 1046 | + _utils_js__WEBPACK_IMPORTED_MODULE_2__.eventHandlers('click', [{ | |
| 1047 | + selector: OrderRefund.selectors.actionRefund, | |
| 1048 | + class: this, | |
| 1049 | + callBack: this.handleRefundClick.name | |
| 1050 | + }]); | |
| 1051 | + } | |
| 1052 | + getAjaxHandle() { | |
| 1053 | + const ajaxHandle = window.lpAJAXG; | |
| 1054 | + if (!ajaxHandle || typeof ajaxHandle.fetchAJAX !== 'function') { | |
| 1055 | + return null; | |
| 1056 | + } | |
| 1057 | + return ajaxHandle; | |
| 1058 | + } | |
| 1059 | + setActionLoadingState(actionLink, isLoading) { | |
| 1060 | + if (!actionLink) { | |
| 1061 | + return; | |
| 1062 | + } | |
| 1063 | + if (isLoading) { | |
| 1064 | + actionLink.dataset.refundSubmitting = 'yes'; | |
| 1065 | + } else { | |
| 1066 | + delete actionLink.dataset.refundSubmitting; | |
| 1067 | + } | |
| 1068 | + _utils_js__WEBPACK_IMPORTED_MODULE_2__.lpSetLoadingEl(actionLink, isLoading ? 1 : 0); | |
| 1069 | + } | |
| 1070 | + getActionData(actionLink) { | |
| 1071 | + const reasonMin = parseInt(actionLink.dataset.reasonMin || '10', 10); | |
| 1072 | + return { | |
| 1073 | + orderId: parseInt(actionLink.dataset.orderId || '0', 10), | |
| 1074 | + requireReason: actionLink.dataset.requireReason === 'yes', | |
| 1075 | + reasonMin: Number.isNaN(reasonMin) ? 10 : reasonMin, | |
| 1076 | + reasonPrompt: actionLink.dataset.reasonPrompt || '', | |
| 1077 | + reasonPlaceholder: actionLink.dataset.reasonPlaceholder || '', | |
| 1078 | + reasonRequired: actionLink.dataset.reasonRequired || '', | |
| 1079 | + confirmTitle: actionLink.dataset.confirmTitle || '', | |
| 1080 | + confirmText: actionLink.dataset.confirmText || '', | |
| 1081 | + confirmButton: actionLink.dataset.confirmButton || '', | |
| 1082 | + cancelButton: actionLink.dataset.cancelButton || '' | |
| 1083 | + }; | |
| 1084 | + } | |
| 1085 | + openReasonModal(data) { | |
| 1086 | + return sweetalert2__WEBPACK_IMPORTED_MODULE_0___default().fire({ | |
| 1087 | + title: data.reasonPrompt, | |
| 1088 | + input: 'textarea', | |
| 1089 | + inputPlaceholder: data.reasonPlaceholder, | |
| 1090 | + inputAutoTrim: true, | |
| 1091 | + showCancelButton: true, | |
| 1092 | + confirmButtonText: data.confirmButton, | |
| 1093 | + cancelButtonText: data.cancelButton, | |
| 1094 | + inputValidator: value => { | |
| 1095 | + const reason = (value || '').trim(); | |
| 1096 | + if (!reason.length) { | |
| 1097 | + return data.reasonRequired; | |
| 1098 | + } | |
| 1099 | + return undefined; | |
| 1100 | + } | |
| 1101 | + }); | |
| 1102 | + } | |
| 1103 | + openConfirmModal(data) { | |
| 1104 | + return sweetalert2__WEBPACK_IMPORTED_MODULE_0___default().fire({ | |
| 1105 | + icon: 'warning', | |
| 1106 | + title: data.confirmTitle, | |
| 1107 | + text: data.confirmText, | |
| 1108 | + showCancelButton: true, | |
| 1109 | + confirmButtonText: data.confirmButton, | |
| 1110 | + cancelButtonText: data.cancelButton | |
| 1111 | + }); | |
| 1112 | + } | |
| 1113 | + sendRefundRequest(actionLink, data, reason = '') { | |
| 1114 | + const ajaxHandle = this.getAjaxHandle(); | |
| 1115 | + if (!ajaxHandle) { | |
| 1116 | + _lpToastify__WEBPACK_IMPORTED_MODULE_1__.show('Refund action is unavailable right now.', 'error'); | |
| 1117 | + return; | |
| 1118 | + } | |
| 1119 | + if (!data.orderId) { | |
| 1120 | + _lpToastify__WEBPACK_IMPORTED_MODULE_1__.show('Invalid order.', 'error'); | |
| 1121 | + return; | |
| 1122 | + } | |
| 1123 | + this.isRequesting = true; | |
| 1124 | + this.setActionLoadingState(actionLink, true); | |
| 1125 | + const dataSend = { | |
| 1126 | + action: 'request_refund_order', | |
| 1127 | + order_id: data.orderId, | |
| 1128 | + reason | |
| 1129 | + }; | |
| 1130 | + ajaxHandle.fetchAJAX(dataSend, { | |
| 1131 | + success: response => { | |
| 1132 | + const { | |
| 1133 | + status, | |
| 1134 | + message, | |
| 1135 | + data | |
| 1136 | + } = response; | |
| 1137 | + if (status !== 'success') { | |
| 1138 | + throw new Error(message); | |
| 1139 | + } | |
| 1140 | + _lpToastify__WEBPACK_IMPORTED_MODULE_1__.show(message, 'success'); | |
| 1141 | + setTimeout(() => { | |
| 1142 | + window.location.reload(); | |
| 1143 | + }, 1200); | |
| 1144 | + }, | |
| 1145 | + error: error => { | |
| 1146 | + const message = error?.message || error || 'Refund request failed.'; | |
| 1147 | + _lpToastify__WEBPACK_IMPORTED_MODULE_1__.show(message, 'error'); | |
| 1148 | + }, | |
| 1149 | + completed: () => { | |
| 1150 | + this.isRequesting = false; | |
| 1151 | + this.setActionLoadingState(actionLink, false); | |
| 1152 | + } | |
| 1153 | + }); | |
| 1154 | + } | |
| 1155 | + async handleRefundClick(args) { | |
| 1156 | + const { | |
| 1157 | + e, | |
| 1158 | + target | |
| 1159 | + } = args; | |
| 1160 | + e.preventDefault(); | |
| 1161 | + const actionLink = target.closest(OrderRefund.selectors.actionRefund); | |
| 1162 | + if (!actionLink) { | |
| 1163 | + return; | |
| 1164 | + } | |
| 1165 | + if (this.isRequesting || actionLink.dataset.refundSubmitting === 'yes' || actionLink.classList.contains('loading')) { | |
| 1166 | + return; | |
| 1167 | + } | |
| 1168 | + const actionData = this.getActionData(actionLink); | |
| 1169 | + let reason = ''; | |
| 1170 | + if (actionData.requireReason) { | |
| 1171 | + const reasonResult = await this.openReasonModal(actionData); | |
| 1172 | + if (!reasonResult.isConfirmed) { | |
| 1173 | + return; | |
| 1174 | + } | |
| 1175 | + reason = (reasonResult.value || '').trim(); | |
| 1176 | + } | |
| 1177 | + const confirmResult = await this.openConfirmModal(actionData); | |
| 1178 | + if (!confirmResult.isConfirmed) { | |
| 1179 | + return; | |
| 1180 | + } | |
| 1181 | + this.sendRefundRequest(actionLink, actionData, reason); | |
| 1182 | + } | |
| 1183 | +} | |
| 1184 | +const orderRefund = () => { | |
| 1185 | + const orderRefundHandle = new OrderRefund(); | |
| 1186 | + _utils_js__WEBPACK_IMPORTED_MODULE_2__.lpOnElementReady(OrderRefund.selectors.actionRefund, () => { | |
| 1187 | + orderRefundHandle.init(); | |
| 1188 | + }); | |
| 1189 | +}; | |
| 1190 | +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (orderRefund); | |
| 659 | 1191 | |
| 660 | - const data = JSON.parse(elArgStatistic.value); | |
| 661 | - getResponse(elements, data); | |
| 1192 | +/***/ }, | |
| 1193 | + | |
| 1194 | +/***/ "./assets/src/js/frontend/profile/quiz.js" | |
| 1195 | +/*!************************************************!*\ | |
| 1196 | + !*** ./assets/src/js/frontend/profile/quiz.js ***! | |
| 1197 | + \************************************************/ | |
| 1198 | +(__unused_webpack_module, __webpack_exports__, __webpack_require__) { | |
| 1199 | + | |
| 1200 | +"use strict"; | |
| 1201 | +__webpack_require__.r(__webpack_exports__); | |
| 1202 | +/* harmony export */ __webpack_require__.d(__webpack_exports__, { | |
| 1203 | +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) | |
| 1204 | +/* harmony export */ }); | |
| 1205 | +/** | |
| 1206 | + * Handle click tab call API | |
| 1207 | + * | |
| 1208 | + * @since 4.2.8.2 | |
| 1209 | + * @version 1.0.0 | |
| 1210 | + */ | |
| 1211 | +const profileQuizTab = () => { | |
| 1212 | + const handleClickTab = (e, target) => { | |
| 1213 | + if (target.closest('span')) { | |
| 1214 | + const elParent = target.closest('#profile-content-quizzes'); | |
| 1215 | + if (!elParent) { | |
| 1216 | + return; | |
| 1217 | + } | |
| 1218 | + const elLPTarget = target.closest('.lp-target'); | |
| 1219 | + if (!elLPTarget) { | |
| 1220 | + return; | |
| 1221 | + } | |
| 1222 | + window.lpAJAXG.showHideLoading(elLPTarget, 1); | |
| 1223 | + const dataSendJson = elLPTarget?.dataset?.send || {}; | |
| 1224 | + const dataSend = JSON.parse(dataSendJson); | |
| 1225 | + const elTabChoice = target?.dataset?.filter || 'all'; | |
| 1226 | + const liActive = elParent.querySelector('li.active'); | |
| 1227 | + if (liActive.classList.contains(elTabChoice)) { | |
| 1228 | + return; | |
| 1229 | + } | |
| 1230 | + liActive.classList.remove('active'); | |
| 1231 | + const liTarget = target.closest('li'); | |
| 1232 | + liTarget.classList.add('active'); | |
| 1233 | + dataSend.args.type = elTabChoice; | |
| 1234 | + | |
| 1235 | + // Load list courses by AJAX. | |
| 1236 | + const callBack = { | |
| 1237 | + success: response => { | |
| 1238 | + const { | |
| 1239 | + data, | |
| 1240 | + message, | |
| 1241 | + status | |
| 1242 | + } = response; | |
| 1243 | + if ('success' === status) { | |
| 1244 | + elLPTarget.innerHTML = data.content || ''; | |
| 1245 | + } | |
| 1246 | + }, | |
| 1247 | + error: error => { | |
| 1248 | + console.log(error); | |
| 1249 | + }, | |
| 1250 | + completed: () => { | |
| 1251 | + window.lpAJAXG.showHideLoading(elLPTarget, 0); | |
| 1252 | + } | |
| 1253 | + }; | |
| 1254 | + window.lpAJAXG.fetchAJAX(dataSend, callBack); | |
| 1255 | + } | |
| 1256 | + }; | |
| 1257 | + document.addEventListener('click', e => { | |
| 1258 | + const target = e.target; | |
| 1259 | + handleClickTab(e, target); | |
| 1260 | + }); | |
| 662 | 1261 | }; |
| 1262 | +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (profileQuizTab); | |
| 663 | 1263 | |
| 664 | -/* harmony default export */ __webpack_exports__["default"] = (courseStatistics); | |
| 1264 | +/***/ }, | |
| 665 | 1265 | |
| 666 | -/***/ }), | |
| 1266 | +/***/ "./assets/src/js/frontend/profile/statistic.js" | |
| 1267 | +/*!*****************************************************!*\ | |
| 1268 | + !*** ./assets/src/js/frontend/profile/statistic.js ***! | |
| 1269 | + \*****************************************************/ | |
| 1270 | +(__unused_webpack_module, __webpack_exports__, __webpack_require__) { | |
| 667 | 1271 | |
| 668 | -/***/ "./node_modules/normalize-wheel/index.js": | |
| 669 | -/*!***********************************************!*\ | |
| 670 | - !*** ./node_modules/normalize-wheel/index.js ***! | |
| 671 | - \***********************************************/ | |
| 672 | -/***/ (function(module, __unused_webpack_exports, __webpack_require__) { | |
| 1272 | +"use strict"; | |
| 1273 | +__webpack_require__.r(__webpack_exports__); | |
| 1274 | +/* harmony export */ __webpack_require__.d(__webpack_exports__, { | |
| 1275 | +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) | |
| 1276 | +/* harmony export */ }); | |
| 1277 | +/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../utils.js */ "./assets/src/js/utils.js"); | |
| 673 | 1278 | |
| 674 | -module.exports = __webpack_require__(/*! ./src/normalizeWheel.js */ "./node_modules/normalize-wheel/src/normalizeWheel.js"); | |
| 675 | 1279 | |
| 1280 | +// Rest API load content course progress - Nhamdv. | |
| 1281 | +const courseStatistics = () => { | |
| 1282 | + const loadAPICourseStatistic = elCourseStatistic => { | |
| 1283 | + let apiUrl = 'lp/v1/profile/student/statistic'; | |
| 1284 | + const tabActive = document.querySelector('.lp-profile-nav-tabs li.active'); | |
| 1285 | + if (!tabActive) { | |
| 1286 | + return; | |
| 1287 | + } | |
| 1288 | + if (tabActive.classList.contains('courses')) { | |
| 1289 | + apiUrl = 'lp/v1/profile/instructor/statistic'; | |
| 1290 | + } | |
| 1291 | + const elArgStatistic = elCourseStatistic.querySelector('[name="args_query_user_courses_statistic"]'); | |
| 1292 | + if (!elArgStatistic) { | |
| 1293 | + return; | |
| 1294 | + } | |
| 1295 | + const data = JSON.parse(elArgStatistic.value); | |
| 1296 | + const callBack = { | |
| 1297 | + success: response => { | |
| 1298 | + if (response.status === 'success' && response.data) { | |
| 1299 | + elCourseStatistic.innerHTML = response.data; | |
| 1300 | + } else { | |
| 1301 | + elCourseStatistic.innerHTML = `<div class="lp-ajax-message error" style="display:block">${response.message && response.message}</div>`; | |
| 1302 | + } | |
| 1303 | + }, | |
| 1304 | + error: error => { | |
| 1305 | + console.log(error); | |
| 1306 | + }, | |
| 1307 | + completed: () => {} | |
| 1308 | + }; | |
| 1309 | + apiUrl = (0,_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpAddQueryArgs)(lpData.lp_rest_url + apiUrl, data); | |
| 1310 | + if (0 !== parseInt(lpData.user_id)) { | |
| 1311 | + data.headers = { | |
| 1312 | + 'X-WP-Nonce': lpData.nonce | |
| 1313 | + }; | |
| 1314 | + } | |
| 1315 | + (0,_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpFetchAPI)(apiUrl, data, callBack); | |
| 1316 | + }; | |
| 1317 | + (0,_utils_js__WEBPACK_IMPORTED_MODULE_0__.lpOnElementReady)('.learn-press-profile-course__statistic', elCourseStatistic => { | |
| 1318 | + loadAPICourseStatistic(elCourseStatistic); | |
| 1319 | + }); | |
| 1320 | +}; | |
| 1321 | +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (courseStatistics); | |
| 676 | 1322 | |
| 677 | -/***/ }), | |
| 1323 | +/***/ }, | |
| 678 | 1324 | |
| 679 | -/***/ "./node_modules/normalize-wheel/src/ExecutionEnvironment.js": | |
| 680 | -/*!******************************************************************!*\ | |
| 681 | - !*** ./node_modules/normalize-wheel/src/ExecutionEnvironment.js ***! | |
| 682 | - \******************************************************************/ | |
| 683 | -/***/ (function(module) { | |
| 1325 | +/***/ "./assets/src/js/lpToastify.js" | |
| 1326 | +/*!*************************************!*\ | |
| 1327 | + !*** ./assets/src/js/lpToastify.js ***! | |
| 1328 | + \*************************************/ | |
| 1329 | +(__unused_webpack_module, __webpack_exports__, __webpack_require__) { | |
| 684 | 1330 | |
| 685 | 1331 | "use strict"; |
| 1332 | +__webpack_require__.r(__webpack_exports__); | |
| 1333 | +/* harmony export */ __webpack_require__.d(__webpack_exports__, { | |
| 1334 | +/* harmony export */ show: () => (/* binding */ show) | |
| 1335 | +/* harmony export */ }); | |
| 1336 | +/* harmony import */ var toastify_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! toastify-js */ "./node_modules/toastify-js/src/toastify.js"); | |
| 1337 | +/* harmony import */ var toastify_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(toastify_js__WEBPACK_IMPORTED_MODULE_0__); | |
| 1338 | +/* harmony import */ var toastify_js_src_toastify_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! toastify-js/src/toastify.css */ "./node_modules/toastify-js/src/toastify.css"); | |
| 686 | 1339 | /** |
| 687 | - * Copyright (c) 2015, Facebook, Inc. | |
| 688 | - * All rights reserved. | |
| 1340 | + * Utils functions | |
| 689 | 1341 | * |
| 690 | - * This source code is licensed under the BSD-style license found in the | |
| 691 | - * LICENSE file in the root directory of this source tree. An additional grant | |
| 692 | - * of patent rights can be found in the PATENTS file in the same directory. | |
| 693 | - * | |
| 694 | - * @providesModule ExecutionEnvironment | |
| 1342 | + * @param url | |
| 1343 | + * @param data | |
| 1344 | + * @param functions | |
| 1345 | + * @since 4.3.0 | |
| 1346 | + * @version 1.0.0 | |
| 695 | 1347 | */ |
| 696 | 1348 | |
| 697 | -/*jslint evil: true */ | |
| 698 | 1349 | |
| 1350 | +const argsToastify = { | |
| 1351 | + text: '', | |
| 1352 | + gravity: lpData.toast.gravity, | |
| 1353 | + // `top` or `bottom` | |
| 1354 | + position: lpData.toast.position, | |
| 1355 | + // `left`, `center` or `right` | |
| 1356 | + className: `${lpData.toast.classPrefix}`, | |
| 1357 | + close: lpData.toast.close == 1, | |
| 1358 | + stopOnFocus: lpData.toast.stopOnFocus == 1, | |
| 1359 | + duration: lpData.toast.duration | |
| 1360 | +}; | |
| 1361 | +const show = (message, status = 'success', argsCustom) => { | |
| 1362 | + let args = argsToastify; | |
| 1363 | + if (argsCustom) { | |
| 1364 | + args = { | |
| 1365 | + ...args, | |
| 1366 | + ...argsCustom | |
| 1367 | + }; | |
| 1368 | + } | |
| 1369 | + const toastify = new (toastify_js__WEBPACK_IMPORTED_MODULE_0___default())({ | |
| 1370 | + ...args, | |
| 1371 | + text: message, | |
| 1372 | + className: `${lpData.toast.classPrefix} ${status}` | |
| 1373 | + }); | |
| 1374 | + toastify.showToast(); | |
| 1375 | +}; | |
| 699 | 1376 | |
| 1377 | +/***/ }, | |
| 700 | 1378 | |
| 701 | -var canUseDOM = !!( | |
| 702 | - typeof window !== 'undefined' && | |
| 703 | - window.document && | |
| 704 | - window.document.createElement | |
| 705 | -); | |
| 1379 | +/***/ "./assets/src/js/utils.js" | |
| 1380 | +/*!********************************!*\ | |
| 1381 | + !*** ./assets/src/js/utils.js ***! | |
| 1382 | + \********************************/ | |
| 1383 | +(__unused_webpack_module, __webpack_exports__, __webpack_require__) { | |
| 706 | 1384 | |
| 1385 | +"use strict"; | |
| 1386 | +__webpack_require__.r(__webpack_exports__); | |
| 1387 | +/* harmony export */ __webpack_require__.d(__webpack_exports__, { | |
| 1388 | +/* harmony export */ debounce: () => (/* binding */ debounce), | |
| 1389 | +/* harmony export */ eventHandlers: () => (/* binding */ eventHandlers), | |
| 1390 | +/* harmony export */ fullScreenView: () => (/* binding */ fullScreenView), | |
| 1391 | +/* harmony export */ getDataOfForm: () => (/* binding */ getDataOfForm), | |
| 1392 | +/* harmony export */ getFieldKeysOfForm: () => (/* binding */ getFieldKeysOfForm), | |
| 1393 | +/* harmony export */ listenElementCreated: () => (/* binding */ listenElementCreated), | |
| 1394 | +/* harmony export */ listenElementViewed: () => (/* binding */ listenElementViewed), | |
| 1395 | +/* harmony export */ lpAddQueryArgs: () => (/* binding */ lpAddQueryArgs), | |
| 1396 | +/* harmony export */ lpAjaxParseJsonOld: () => (/* binding */ lpAjaxParseJsonOld), | |
| 1397 | +/* harmony export */ lpClassName: () => (/* binding */ lpClassName), | |
| 1398 | +/* harmony export */ lpFetchAPI: () => (/* binding */ lpFetchAPI), | |
| 1399 | +/* harmony export */ lpGetCurrentURLNoParam: () => (/* binding */ lpGetCurrentURLNoParam), | |
| 1400 | +/* harmony export */ lpOnElementReady: () => (/* binding */ lpOnElementReady), | |
| 1401 | +/* harmony export */ lpSetLoadingEl: () => (/* binding */ lpSetLoadingEl), | |
| 1402 | +/* harmony export */ lpShowHideEl: () => (/* binding */ lpShowHideEl), | |
| 1403 | +/* harmony export */ mergeDataWithDatForm: () => (/* binding */ mergeDataWithDatForm), | |
| 1404 | +/* harmony export */ toggleCollapse: () => (/* binding */ toggleCollapse), | |
| 1405 | +/* harmony export */ toggleEnable: () => (/* binding */ toggleEnable) | |
| 1406 | +/* harmony export */ }); | |
| 707 | 1407 | /** |
| 708 | - * Simple, lightweight module assisting with the detection and context of | |
| 709 | - * Worker. Helps avoid circular dependencies and allows code to reason about | |
| 710 | - * whether or not they are in a Worker, even if they never include the main | |
| 711 | - * `ReactWorker` dependency. | |
| 1408 | + * Utils functions | |
| 1409 | + * | |
| 1410 | + * @param url | |
| 1411 | + * @param data | |
| 1412 | + * @param functions | |
| 1413 | + * @since 4.2.5.1 | |
| 1414 | + * @version 1.0.7 | |
| 712 | 1415 | */ |
| 713 | -var ExecutionEnvironment = { | |
| 1416 | +const lpClassName = { | |
| 1417 | + hidden: 'lp-hidden', | |
| 1418 | + loading: 'loading', | |
| 1419 | + elCollapse: 'lp-collapse', | |
| 1420 | + elSectionToggle: '.lp-section-toggle', | |
| 1421 | + elTriggerToggle: '.lp-trigger-toggle', | |
| 1422 | + elBtnFullScreen: '.lp-btn-full-screen-view', | |
| 1423 | + elFullScreen: 'lp-full-screen-view', | |
| 1424 | + elBtnFullScreenClose: 'lp-full-screen-view__close' | |
| 1425 | +}; | |
| 1426 | +const lpFetchAPI = (url, data = {}, functions = {}) => { | |
| 1427 | + if ('function' === typeof functions.before) { | |
| 1428 | + functions.before(); | |
| 1429 | + } | |
| 1430 | + fetch(url, { | |
| 1431 | + method: 'GET', | |
| 1432 | + ...data | |
| 1433 | + }).then(response => response.json()).then(response => { | |
| 1434 | + if ('function' === typeof functions.success) { | |
| 1435 | + functions.success(response); | |
| 1436 | + } | |
| 1437 | + }).catch(err => { | |
| 1438 | + if ('function' === typeof functions.error) { | |
| 1439 | + functions.error(err); | |
| 1440 | + } | |
| 1441 | + }).finally(() => { | |
| 1442 | + if ('function' === typeof functions.completed) { | |
| 1443 | + functions.completed(); | |
| 1444 | + } | |
| 1445 | + }); | |
| 1446 | +}; | |
| 714 | 1447 | |
| 715 | - canUseDOM: canUseDOM, | |
| 1448 | +/** | |
| 1449 | + * Get current URL without params. | |
| 1450 | + * | |
| 1451 | + * @since 4.2.5.1 | |
| 1452 | + */ | |
| 1453 | +const lpGetCurrentURLNoParam = () => { | |
| 1454 | + let currentUrl = window.location.href; | |
| 1455 | + const hasParams = currentUrl.includes('?'); | |
| 1456 | + if (hasParams) { | |
| 1457 | + currentUrl = currentUrl.split('?')[0]; | |
| 1458 | + } | |
| 1459 | + return currentUrl; | |
| 1460 | +}; | |
| 1461 | +const lpAddQueryArgs = (endpoint, args) => { | |
| 1462 | + const url = new URL(endpoint); | |
| 1463 | + Object.keys(args).forEach(arg => { | |
| 1464 | + url.searchParams.set(arg, args[arg]); | |
| 1465 | + }); | |
| 1466 | + return url; | |
| 1467 | +}; | |
| 716 | 1468 | |
| 717 | - canUseWorkers: typeof Worker !== 'undefined', | |
| 1469 | +/** | |
| 1470 | + * Listen element viewed. | |
| 1471 | + * | |
| 1472 | + * @param el | |
| 1473 | + * @param callback | |
| 1474 | + * @since 4.2.5.8 | |
| 1475 | + */ | |
| 1476 | +const listenElementViewed = (el, callback) => { | |
| 1477 | + const observerSeeItem = new IntersectionObserver(function (entries) { | |
| 1478 | + for (const entry of entries) { | |
| 1479 | + if (entry.isIntersecting) { | |
| 1480 | + callback(entry); | |
| 1481 | + } | |
| 1482 | + } | |
| 1483 | + }); | |
| 1484 | + observerSeeItem.observe(el); | |
| 1485 | +}; | |
| 718 | 1486 | |
| 719 | - canUseEventListeners: | |
| 720 | - canUseDOM && !!(window.addEventListener || window.attachEvent), | |
| 1487 | +/** | |
| 1488 | + * Listen element created. | |
| 1489 | + * | |
| 1490 | + * @param callback | |
| 1491 | + * @since 4.2.5.8 | |
| 1492 | + */ | |
| 1493 | +const listenElementCreated = callback => { | |
| 1494 | + const observerCreateItem = new MutationObserver(function (mutations) { | |
| 1495 | + mutations.forEach(function (mutation) { | |
| 1496 | + if (mutation.addedNodes) { | |
| 1497 | + mutation.addedNodes.forEach(function (node) { | |
| 1498 | + if (node.nodeType === 1) { | |
| 1499 | + callback(node); | |
| 1500 | + } | |
| 1501 | + }); | |
| 1502 | + } | |
| 1503 | + }); | |
| 1504 | + }); | |
| 1505 | + observerCreateItem.observe(document, { | |
| 1506 | + childList: true, | |
| 1507 | + subtree: true | |
| 1508 | + }); | |
| 1509 | + // End. | |
| 1510 | +}; | |
| 721 | 1511 | |
| 722 | - canUseViewport: canUseDOM && !!window.screen, | |
| 1512 | +/** | |
| 1513 | + * Listen element created. | |
| 1514 | + * | |
| 1515 | + * @param selector | |
| 1516 | + * @param callback | |
| 1517 | + * @since 4.2.7.1 | |
| 1518 | + */ | |
| 1519 | +const lpOnElementReady = (selector, callback) => { | |
| 1520 | + const element = document.querySelector(selector); | |
| 1521 | + if (element) { | |
| 1522 | + callback(element); | |
| 1523 | + return; | |
| 1524 | + } | |
| 1525 | + const observer = new MutationObserver((mutations, obs) => { | |
| 1526 | + const element = document.querySelector(selector); | |
| 1527 | + if (element) { | |
| 1528 | + obs.disconnect(); | |
| 1529 | + callback(element); | |
| 1530 | + } | |
| 1531 | + }); | |
| 1532 | + observer.observe(document.documentElement, { | |
| 1533 | + childList: true, | |
| 1534 | + subtree: true | |
| 1535 | + }); | |
| 1536 | +}; | |
| 723 | 1537 | |
| 724 | - isInWorker: !canUseDOM // For now, this is true - might change in the future. | |
| 1538 | +// Parse JSON from string with content include LP_AJAX_START. | |
| 1539 | +const lpAjaxParseJsonOld = data => { | |
| 1540 | + if (typeof data !== 'string') { | |
| 1541 | + return data; | |
| 1542 | + } | |
| 1543 | + const m = String.raw({ | |
| 1544 | + raw: data | |
| 1545 | + }).match(/<-- LP_AJAX_START -->(.*)<-- LP_AJAX_END -->/s); | |
| 1546 | + try { | |
| 1547 | + if (m) { | |
| 1548 | + data = JSON.parse(m[1].replace(/(?:\r\n|\r|\n)/g, '')); | |
| 1549 | + } else { | |
| 1550 | + data = JSON.parse(data); | |
| 1551 | + } | |
| 1552 | + } catch (e) { | |
| 1553 | + data = {}; | |
| 1554 | + } | |
| 1555 | + return data; | |
| 1556 | +}; | |
| 725 | 1557 | |
| 1558 | +// status 0: hide, 1: show | |
| 1559 | +const lpShowHideEl = (el, status = 0) => { | |
| 1560 | + if (!el) { | |
| 1561 | + return; | |
| 1562 | + } | |
| 1563 | + if (!status) { | |
| 1564 | + el.classList.add(lpClassName.hidden); | |
| 1565 | + } else { | |
| 1566 | + el.classList.remove(lpClassName.hidden); | |
| 1567 | + } | |
| 726 | 1568 | }; |
| 727 | 1569 | |
| 728 | -module.exports = ExecutionEnvironment; | |
| 1570 | +// status 0: hide, 1: show | |
| 1571 | +const lpSetLoadingEl = (el, status) => { | |
| 1572 | + if (!el) { | |
| 1573 | + return; | |
| 1574 | + } | |
| 1575 | + if (!status) { | |
| 1576 | + el.classList.remove(lpClassName.loading); | |
| 1577 | + } else { | |
| 1578 | + el.classList.add(lpClassName.loading); | |
| 1579 | + } | |
| 1580 | +}; | |
| 729 | 1581 | |
| 1582 | +// Toggle collapse section | |
| 1583 | +const toggleCollapse = (e, target, elTriggerClassName = '', elsExclude = [], callback) => { | |
| 1584 | + if (!elTriggerClassName) { | |
| 1585 | + elTriggerClassName = lpClassName.elTriggerToggle; | |
| 1586 | + } | |
| 730 | 1587 | |
| 731 | -/***/ }), | |
| 1588 | + // Exclude elements, which should not trigger the collapse toggle | |
| 1589 | + if (elsExclude && elsExclude.length > 0) { | |
| 1590 | + for (const elExclude of elsExclude) { | |
| 1591 | + if (target.closest(elExclude)) { | |
| 1592 | + return; | |
| 1593 | + } | |
| 1594 | + } | |
| 1595 | + } | |
| 1596 | + const elTrigger = target.closest(elTriggerClassName); | |
| 1597 | + if (!elTrigger) { | |
| 1598 | + return; | |
| 1599 | + } | |
| 732 | 1600 | |
| 733 | -/***/ "./node_modules/normalize-wheel/src/UserAgent_DEPRECATED.js": | |
| 734 | -/*!******************************************************************!*\ | |
| 735 | - !*** ./node_modules/normalize-wheel/src/UserAgent_DEPRECATED.js ***! | |
| 736 | - \******************************************************************/ | |
| 737 | -/***/ (function(module) { | |
| 1601 | + //console.log( 'elTrigger', elTrigger ); | |
| 738 | 1602 | |
| 1603 | + const elSectionToggle = elTrigger.closest(`${lpClassName.elSectionToggle}`); | |
| 1604 | + if (!elSectionToggle) { | |
| 1605 | + return; | |
| 1606 | + } | |
| 1607 | + elSectionToggle.classList.toggle(`${lpClassName.elCollapse}`); | |
| 1608 | + if ('function' === typeof callback) { | |
| 1609 | + callback(elSectionToggle); | |
| 1610 | + } | |
| 1611 | +}; | |
| 1612 | + | |
| 1613 | +// Get data of form | |
| 1614 | +const getDataOfForm = form => { | |
| 1615 | + const dataSend = {}; | |
| 1616 | + const formData = new FormData(form); | |
| 1617 | + for (const pair of formData.entries()) { | |
| 1618 | + const key = pair[0]; | |
| 1619 | + const value = formData.getAll(key); | |
| 1620 | + if (!dataSend.hasOwnProperty(key)) { | |
| 1621 | + // Convert value array to string. | |
| 1622 | + dataSend[key] = value.join(','); | |
| 1623 | + } | |
| 1624 | + } | |
| 1625 | + return dataSend; | |
| 1626 | +}; | |
| 1627 | + | |
| 1628 | +// Get field keys of form | |
| 1629 | +const getFieldKeysOfForm = form => { | |
| 1630 | + const keys = []; | |
| 1631 | + const elements = form.elements; | |
| 1632 | + for (let i = 0; i < elements.length; i++) { | |
| 1633 | + const name = elements[i].name; | |
| 1634 | + if (name && !keys.includes(name)) { | |
| 1635 | + keys.push(name); | |
| 1636 | + } | |
| 1637 | + } | |
| 1638 | + return keys; | |
| 1639 | +}; | |
| 1640 | + | |
| 1641 | +// Merge data handle with data form. | |
| 1642 | +const mergeDataWithDatForm = (elForm, dataHandle) => { | |
| 1643 | + const dataForm = getDataOfForm(elForm); | |
| 1644 | + const keys = getFieldKeysOfForm(elForm); | |
| 1645 | + keys.forEach(key => { | |
| 1646 | + if (!dataForm.hasOwnProperty(key)) { | |
| 1647 | + delete dataHandle[key]; | |
| 1648 | + } else if (dataForm[key][0] === '') { | |
| 1649 | + delete dataForm[key]; | |
| 1650 | + delete dataHandle[key]; | |
| 1651 | + } | |
| 1652 | + }); | |
| 1653 | + dataHandle = { | |
| 1654 | + ...dataHandle, | |
| 1655 | + ...dataForm | |
| 1656 | + }; | |
| 1657 | + return dataHandle; | |
| 1658 | +}; | |
| 1659 | + | |
| 739 | 1660 | /** |
| 740 | - * Copyright 2004-present Facebook. All Rights Reserved. | |
| 1661 | + * Event trigger | |
| 1662 | + * For each list of event handlers, listen event on document. | |
| 741 | 1663 | * |
| 742 | - * @providesModule UserAgent_DEPRECATED | |
| 1664 | + * eventName: 'click', 'change', ... | |
| 1665 | + * eventHandlers = [ { selector: '.lp-button', callBack: function(){}, class: object } ] | |
| 1666 | + * | |
| 1667 | + * @param eventName | |
| 1668 | + * @param eventHandlers | |
| 743 | 1669 | */ |
| 1670 | +const eventHandlers = (eventName, eventHandlers) => { | |
| 1671 | + document.addEventListener(eventName, e => { | |
| 1672 | + const target = e.target; | |
| 1673 | + let args = { | |
| 1674 | + e, | |
| 1675 | + target | |
| 1676 | + }; | |
| 1677 | + eventHandlers.forEach(eventHandler => { | |
| 1678 | + args = { | |
| 1679 | + ...args, | |
| 1680 | + ...eventHandler | |
| 1681 | + }; | |
| 744 | 1682 | |
| 1683 | + //console.log( args ); | |
| 1684 | + | |
| 1685 | + // Check condition before call back | |
| 1686 | + if (eventHandler.conditionBeforeCallBack) { | |
| 1687 | + if (eventHandler.conditionBeforeCallBack(args) !== true) { | |
| 1688 | + return; | |
| 1689 | + } | |
| 1690 | + } | |
| 1691 | + | |
| 1692 | + // Special check for keydown event with checkIsEventEnter = true | |
| 1693 | + if (eventName === 'keydown' && eventHandler.checkIsEventEnter) { | |
| 1694 | + if (e.key !== 'Enter') { | |
| 1695 | + return; | |
| 1696 | + } | |
| 1697 | + } | |
| 1698 | + if (target.closest(eventHandler.selector)) { | |
| 1699 | + if (eventHandler.class) { | |
| 1700 | + // Call method of class, function callBack will understand exactly {this} is class object. | |
| 1701 | + eventHandler.class[eventHandler.callBack](args); | |
| 1702 | + } else { | |
| 1703 | + // For send args is objected, {this} is eventHandler object, not class object. | |
| 1704 | + eventHandler.callBack(args); | |
| 1705 | + } | |
| 1706 | + } | |
| 1707 | + }); | |
| 1708 | + }); | |
| 1709 | +}; | |
| 1710 | + | |
| 745 | 1711 | /** |
| 746 | - * Provides entirely client-side User Agent and OS detection. You should prefer | |
| 747 | - * the non-deprecated UserAgent module when possible, which exposes our | |
| 748 | - * authoritative server-side PHP-based detection to the client. | |
| 1712 | + * Debounce - delays function execution until after `wait` ms of inactivity. | |
| 749 | 1713 | * |
| 750 | - * Usage is straightforward: | |
| 1714 | + * Each call resets the timer. Only the last call in a burst executes. | |
| 751 | 1715 | * |
| 752 | - * if (UserAgent_DEPRECATED.ie()) { | |
| 753 | - * // IE | |
| 754 | - * } | |
| 1716 | + * USE CASES: | |
| 1717 | + * - Search inputs, form validation, window resize | |
| 1718 | + * - Multiple elements need independent timers | |
| 1719 | + * - When you need to call with different arguments | |
| 755 | 1720 | * |
| 756 | - * You can also do version checks: | |
| 1721 | + * EXAMPLES: | |
| 1722 | + * const debouncedSearch = debounce( (query) => fetchResults(query), 300 ); | |
| 1723 | + * searchInput.addEventListener('input', (e) => debouncedSearch(e.target.value)); | |
| 757 | 1724 | * |
| 758 | - * if (UserAgent_DEPRECATED.ie() >= 7) { | |
| 759 | - * // IE7 or better | |
| 760 | - * } | |
| 1725 | + * const debouncedResize = debounce( recalculateLayout, 250 ); | |
| 1726 | + * window.addEventListener('resize', debouncedResize); | |
| 761 | 1727 | * |
| 762 | - * The browser functions will return NaN if the browser does not match, so | |
| 763 | - * you can also do version compares the other way: | |
| 1728 | + * ⚠️ Create ONCE outside event handlers, not inside. | |
| 764 | 1729 | * |
| 765 | - * if (UserAgent_DEPRECATED.ie() < 7) { | |
| 766 | - * // IE6 or worse | |
| 767 | - * } | |
| 1730 | + * @param {Function} func - Function to debounce (can be anonymous) | |
| 1731 | + * @param {number} wait - Milliseconds to wait (default: 500) | |
| 1732 | + * @return {Function} Debounced wrapper function | |
| 1733 | + * @since 4.3.7 | |
| 1734 | + * @version 1.0.0 | |
| 1735 | + */ | |
| 1736 | +const debounce = (func, wait = 500) => { | |
| 1737 | + let timer; | |
| 1738 | + return args => { | |
| 1739 | + clearTimeout(timer); | |
| 1740 | + timer = setTimeout(() => func(args), wait); | |
| 1741 | + }; | |
| 1742 | +}; | |
| 1743 | + | |
| 1744 | +/** | |
| 1745 | + * Initialize lp-toggle-enable components. | |
| 768 | 1746 | * |
| 769 | - * Note that the version is a float and may include a minor version number, | |
| 770 | - * so you should always use range operators to perform comparisons, not | |
| 771 | - * strict equality. | |
| 1747 | + * Finds all `.lp-toggle-enable` elements and wires up toggle behavior. | |
| 1748 | + * Reads initial state from `data-enabled` attribute ("true"/"false"). | |
| 1749 | + * Calls `data-on-toggle` callback (if provided via options) on state change. | |
| 772 | 1750 | * |
| 773 | - * **Note:** You should **strongly** prefer capability detection to browser | |
| 774 | - * version detection where it's reasonable: | |
| 1751 | + * HTML structure: | |
| 1752 | + * <label class="lp-toggle-enable" data-enabled="true"> | |
| 1753 | + * <input type="checkbox" class="lp-toggle-enable__input" /> | |
| 1754 | + * <span class="lp-toggle-enable__track"></span> | |
| 1755 | + * </label> | |
| 775 | 1756 | * |
| 776 | - * http://www.quirksmode.org/js/support.html | |
| 1757 | + * @param {string} selector CSS selector for toggle elements (default: '.lp-toggle-enable') | |
| 1758 | + * @param {Function} onToggle Optional callback( el, isEnabled ) called on state change | |
| 1759 | + * @since 4.4.5 | |
| 1760 | + * @version 1.0.0 | |
| 1761 | + */ | |
| 1762 | +window.lpToggleEnableInit = 0; | |
| 1763 | +const toggleEnable = (onToggle = null) => { | |
| 1764 | + if (window.lpToggleEnableInit) { | |
| 1765 | + return; | |
| 1766 | + } | |
| 1767 | + window.lpToggleEnableInit = 1; | |
| 1768 | + const selector = '.lp-toggle-enable'; | |
| 1769 | + const updateUI = (toggle, isEnabled) => { | |
| 1770 | + toggle.classList.toggle('is-enabled', isEnabled); | |
| 1771 | + const input = toggle.querySelector('.lp-toggle-enable__input'); | |
| 1772 | + if (input) { | |
| 1773 | + input.checked = isEnabled; | |
| 1774 | + input.value = isEnabled ? '1' : '0'; | |
| 1775 | + } | |
| 1776 | + }; | |
| 1777 | + | |
| 1778 | + // Delegate click handling via eventHandlers. | |
| 1779 | + eventHandlers('click', [{ | |
| 1780 | + selector, | |
| 1781 | + callBack: args => { | |
| 1782 | + const { | |
| 1783 | + e, | |
| 1784 | + target | |
| 1785 | + } = args; | |
| 1786 | + const toggle = target.closest(selector); | |
| 1787 | + if (!toggle || toggle.classList.contains('is-disabled')) { | |
| 1788 | + return; | |
| 1789 | + } | |
| 1790 | + e.preventDefault(); | |
| 1791 | + const isEnabled = !toggle.classList.contains('is-enabled'); | |
| 1792 | + updateUI(toggle, isEnabled); | |
| 1793 | + if ('function' === typeof onToggle) { | |
| 1794 | + onToggle(toggle, isEnabled); | |
| 1795 | + } | |
| 1796 | + } | |
| 1797 | + }]); | |
| 1798 | +}; | |
| 1799 | + | |
| 1800 | +/** | |
| 1801 | + * Initialize custom fullscreen view buttons. | |
| 777 | 1802 | * |
| 778 | - * Further, we have a large number of mature wrapper functions and classes | |
| 779 | - * which abstract away many browser irregularities. Check the documentation, | |
| 780 | - * grep for things, or ask on [email protected] before writing yet | |
| 781 | - * another copy of "event || window.event". | |
| 1803 | + * Delegates clicks on `.lp-btn-full-screen-view` buttons to | |
| 1804 | + * `lpToggleFullscreenView`. Reads the `data-target` attribute to find the | |
| 1805 | + * target element. Falls back to the button's parent element when | |
| 1806 | + * `data-target` is not provided. | |
| 782 | 1807 | * |
| 1808 | + * @since 4.4.5 | |
| 1809 | + * @version 1.0.0 | |
| 783 | 1810 | */ |
| 1811 | +window.lpFullScreenViewInit = 0; | |
| 1812 | +const fullScreenView = () => { | |
| 1813 | + if (window.lpFullScreenViewInit) { | |
| 1814 | + return; | |
| 1815 | + } | |
| 1816 | + window.lpFullScreenViewInit = 1; | |
| 1817 | + let lastScrollY = 0; | |
| 1818 | + const lpToggleFullscreenView = (elTarget, elBtnFullScreen = null) => { | |
| 1819 | + const isFullscreen = elTarget.classList.contains(lpClassName.elFullScreen); | |
| 1820 | + if (isFullscreen) { | |
| 1821 | + elTarget.classList.remove(lpClassName.elFullScreen); | |
| 1822 | + document.documentElement.classList.remove('lp-full-screen-active'); | |
| 1823 | + window.scrollTo(0, lastScrollY); | |
| 1824 | + } else { | |
| 1825 | + lastScrollY = window.scrollY; | |
| 1826 | + elTarget.classList.add(lpClassName.elFullScreen); | |
| 1827 | + document.documentElement.classList.add('lp-full-screen-active'); | |
| 1828 | + } | |
| 1829 | + if (!isFullscreen) { | |
| 1830 | + if (!elTarget.querySelector(`.${lpClassName.elBtnFullScreenClose}`)) { | |
| 1831 | + const closeButton = document.createElement('button'); | |
| 1832 | + closeButton.type = 'button'; | |
| 1833 | + closeButton.className = lpClassName.elBtnFullScreenClose; | |
| 1834 | + closeButton.setAttribute('aria-label', 'Close'); | |
| 1835 | + closeButton.innerHTML = lpData.i18n.closeButtonFullScreen || 'Close ×'; | |
| 1836 | + closeButton.addEventListener('click', e => { | |
| 1837 | + e.preventDefault(); | |
| 1838 | + lpToggleFullscreenView(elTarget); | |
| 1839 | + }); | |
| 1840 | + elTarget.appendChild(closeButton); | |
| 1841 | + } | |
| 1842 | + } else { | |
| 1843 | + const closeButton = elTarget.querySelector(`.${lpClassName.elBtnFullScreenClose}`); | |
| 1844 | + if (closeButton) { | |
| 1845 | + closeButton.remove(); | |
| 1846 | + } | |
| 1847 | + } | |
| 1848 | + }; | |
| 1849 | + eventHandlers('click', [{ | |
| 1850 | + selector: lpClassName.elBtnFullScreen, | |
| 1851 | + callBack: args => { | |
| 1852 | + const { | |
| 1853 | + e, | |
| 1854 | + target | |
| 1855 | + } = args; | |
| 1856 | + const elBtnFullScreen = target.closest(lpClassName.elBtnFullScreen); | |
| 1857 | + if (!elBtnFullScreen) { | |
| 1858 | + console.log('No full screen button found'); | |
| 1859 | + return; | |
| 1860 | + } | |
| 1861 | + e.preventDefault(); | |
| 1862 | + let elTarget = null; | |
| 1863 | + const targetSelector = elBtnFullScreen.dataset.targetFullscreen; | |
| 1864 | + console.log(targetSelector); | |
| 1865 | + if (targetSelector) { | |
| 1866 | + elTarget = document.querySelector(targetSelector); | |
| 1867 | + } | |
| 1868 | + if (!elTarget) { | |
| 1869 | + console.log('No target element found'); | |
| 1870 | + return; | |
| 1871 | + } | |
| 1872 | + lpToggleFullscreenView(elTarget, elBtnFullScreen); | |
| 1873 | + } | |
| 1874 | + }]); | |
| 1875 | +}; | |
| 784 | 1876 | |
| 785 | -var _populated = false; | |
| 1877 | +/***/ }, | |
| 786 | 1878 | |
| 787 | -// Browsers | |
| 788 | -var _ie, _firefox, _opera, _webkit, _chrome; | |
| 1879 | +/***/ "./node_modules/cropperjs/dist/cropper.js" | |
| 1880 | +/*!************************************************!*\ | |
| 1881 | + !*** ./node_modules/cropperjs/dist/cropper.js ***! | |
| 1882 | + \************************************************/ | |
| 1883 | +(module) { | |
| 789 | 1884 | |
| 790 | -// Actual IE browser for compatibility mode | |
| 791 | -var _ie_real_version; | |
| 1885 | +/*! | |
| 1886 | + * Cropper.js v1.6.2 | |
| 1887 | + * https://fengyuanchen.github.io/cropperjs | |
| 1888 | + * | |
| 1889 | + * Copyright 2015-present Chen Fengyuan | |
| 1890 | + * Released under the MIT license | |
| 1891 | + * | |
| 1892 | + * Date: 2024-04-21T07:43:05.335Z | |
| 1893 | + */ | |
| 792 | 1894 | |
| 793 | -// Platforms | |
| 794 | -var _osx, _windows, _linux, _android; | |
| 1895 | +(function (global, factory) { | |
| 1896 | + true ? module.exports = factory() : | |
| 1897 | + 0; | |
| 1898 | +})(this, (function () { 'use strict'; | |
| 795 | 1899 | |
| 796 | -// Architectures | |
| 797 | -var _win64; | |
| 1900 | + function ownKeys(e, r) { | |
| 1901 | + var t = Object.keys(e); | |
| 1902 | + if (Object.getOwnPropertySymbols) { | |
| 1903 | + var o = Object.getOwnPropertySymbols(e); | |
| 1904 | + r && (o = o.filter(function (r) { | |
| 1905 | + return Object.getOwnPropertyDescriptor(e, r).enumerable; | |
| 1906 | + })), t.push.apply(t, o); | |
| 1907 | + } | |
| 1908 | + return t; | |
| 1909 | + } | |
| 1910 | + function _objectSpread2(e) { | |
| 1911 | + for (var r = 1; r < arguments.length; r++) { | |
| 1912 | + var t = null != arguments[r] ? arguments[r] : {}; | |
| 1913 | + r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { | |
| 1914 | + _defineProperty(e, r, t[r]); | |
| 1915 | + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { | |
| 1916 | + Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); | |
| 1917 | + }); | |
| 1918 | + } | |
| 1919 | + return e; | |
| 1920 | + } | |
| 1921 | + function _toPrimitive(t, r) { | |
| 1922 | + if ("object" != typeof t || !t) return t; | |
| 1923 | + var e = t[Symbol.toPrimitive]; | |
| 1924 | + if (void 0 !== e) { | |
| 1925 | + var i = e.call(t, r || "default"); | |
| 1926 | + if ("object" != typeof i) return i; | |
| 1927 | + throw new TypeError("@@toPrimitive must return a primitive value."); | |
| 1928 | + } | |
| 1929 | + return ("string" === r ? String : Number)(t); | |
| 1930 | + } | |
| 1931 | + function _toPropertyKey(t) { | |
| 1932 | + var i = _toPrimitive(t, "string"); | |
| 1933 | + return "symbol" == typeof i ? i : i + ""; | |
| 1934 | + } | |
| 1935 | + function _typeof(o) { | |
| 1936 | + "@babel/helpers - typeof"; | |
| 798 | 1937 | |
| 799 | -// Devices | |
| 800 | -var _iphone, _ipad, _native; | |
| 1938 | + return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { | |
| 1939 | + return typeof o; | |
| 1940 | + } : function (o) { | |
| 1941 | + return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; | |
| 1942 | + }, _typeof(o); | |
| 1943 | + } | |
| 1944 | + function _classCallCheck(instance, Constructor) { | |
| 1945 | + if (!(instance instanceof Constructor)) { | |
| 1946 | + throw new TypeError("Cannot call a class as a function"); | |
| 1947 | + } | |
| 1948 | + } | |
| 1949 | + function _defineProperties(target, props) { | |
| 1950 | + for (var i = 0; i < props.length; i++) { | |
| 1951 | + var descriptor = props[i]; | |
| 1952 | + descriptor.enumerable = descriptor.enumerable || false; | |
| 1953 | + descriptor.configurable = true; | |
| 1954 | + if ("value" in descriptor) descriptor.writable = true; | |
| 1955 | + Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); | |
| 1956 | + } | |
| 1957 | + } | |
| 1958 | + function _createClass(Constructor, protoProps, staticProps) { | |
| 1959 | + if (protoProps) _defineProperties(Constructor.prototype, protoProps); | |
| 1960 | + if (staticProps) _defineProperties(Constructor, staticProps); | |
| 1961 | + Object.defineProperty(Constructor, "prototype", { | |
| 1962 | + writable: false | |
| 1963 | + }); | |
| 1964 | + return Constructor; | |
| 1965 | + } | |
| 1966 | + function _defineProperty(obj, key, value) { | |
| 1967 | + key = _toPropertyKey(key); | |
| 1968 | + if (key in obj) { | |
| 1969 | + Object.defineProperty(obj, key, { | |
| 1970 | + value: value, | |
| 1971 | + enumerable: true, | |
| 1972 | + configurable: true, | |
| 1973 | + writable: true | |
| 1974 | + }); | |
| 1975 | + } else { | |
| 1976 | + obj[key] = value; | |
| 1977 | + } | |
| 1978 | + return obj; | |
| 1979 | + } | |
| 1980 | + function _toConsumableArray(arr) { | |
| 1981 | + return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); | |
| 1982 | + } | |
| 1983 | + function _arrayWithoutHoles(arr) { | |
| 1984 | + if (Array.isArray(arr)) return _arrayLikeToArray(arr); | |
| 1985 | + } | |
| 1986 | + function _iterableToArray(iter) { | |
| 1987 | + if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); | |
| 1988 | + } | |
| 1989 | + function _unsupportedIterableToArray(o, minLen) { | |
| 1990 | + if (!o) return; | |
| 1991 | + if (typeof o === "string") return _arrayLikeToArray(o, minLen); | |
| 1992 | + var n = Object.prototype.toString.call(o).slice(8, -1); | |
| 1993 | + if (n === "Object" && o.constructor) n = o.constructor.name; | |
| 1994 | + if (n === "Map" || n === "Set") return Array.from(o); | |
| 1995 | + if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); | |
| 1996 | + } | |
| 1997 | + function _arrayLikeToArray(arr, len) { | |
| 1998 | + if (len == null || len > arr.length) len = arr.length; | |
| 1999 | + for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; | |
| 2000 | + return arr2; | |
| 2001 | + } | |
| 2002 | + function _nonIterableSpread() { | |
| 2003 | + throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); | |
| 2004 | + } | |
| 801 | 2005 | |
| 802 | -var _mobile; | |
| 2006 | + var IS_BROWSER = typeof window !== 'undefined' && typeof window.document !== 'undefined'; | |
| 2007 | + var WINDOW = IS_BROWSER ? window : {}; | |
| 2008 | + var IS_TOUCH_DEVICE = IS_BROWSER && WINDOW.document.documentElement ? 'ontouchstart' in WINDOW.document.documentElement : false; | |
| 2009 | + var HAS_POINTER_EVENT = IS_BROWSER ? 'PointerEvent' in WINDOW : false; | |
| 2010 | + var NAMESPACE = 'cropper'; | |
| 803 | 2011 | |
| 804 | -function _populate() { | |
| 805 | - if (_populated) { | |
| 806 | - return; | |
| 2012 | + // Actions | |
| 2013 | + var ACTION_ALL = 'all'; | |
| 2014 | + var ACTION_CROP = 'crop'; | |
| 2015 | + var ACTION_MOVE = 'move'; | |
| 2016 | + var ACTION_ZOOM = 'zoom'; | |
| 2017 | + var ACTION_EAST = 'e'; | |
| 2018 | + var ACTION_WEST = 'w'; | |
| 2019 | + var ACTION_SOUTH = 's'; | |
| 2020 | + var ACTION_NORTH = 'n'; | |
| 2021 | + var ACTION_NORTH_EAST = 'ne'; | |
| 2022 | + var ACTION_NORTH_WEST = 'nw'; | |
| 2023 | + var ACTION_SOUTH_EAST = 'se'; | |
| 2024 | + var ACTION_SOUTH_WEST = 'sw'; | |
| 2025 | + | |
| 2026 | + // Classes | |
| 2027 | + var CLASS_CROP = "".concat(NAMESPACE, "-crop"); | |
| 2028 | + var CLASS_DISABLED = "".concat(NAMESPACE, "-disabled"); | |
| 2029 | + var CLASS_HIDDEN = "".concat(NAMESPACE, "-hidden"); | |
| 2030 | + var CLASS_HIDE = "".concat(NAMESPACE, "-hide"); | |
| 2031 | + var CLASS_INVISIBLE = "".concat(NAMESPACE, "-invisible"); | |
| 2032 | + var CLASS_MODAL = "".concat(NAMESPACE, "-modal"); | |
| 2033 | + var CLASS_MOVE = "".concat(NAMESPACE, "-move"); | |
| 2034 | + | |
| 2035 | + // Data keys | |
| 2036 | + var DATA_ACTION = "".concat(NAMESPACE, "Action"); | |
| 2037 | + var DATA_PREVIEW = "".concat(NAMESPACE, "Preview"); | |
| 2038 | + | |
| 2039 | + // Drag modes | |
| 2040 | + var DRAG_MODE_CROP = 'crop'; | |
| 2041 | + var DRAG_MODE_MOVE = 'move'; | |
| 2042 | + var DRAG_MODE_NONE = 'none'; | |
| 2043 | + | |
| 2044 | + // Events | |
| 2045 | + var EVENT_CROP = 'crop'; | |
| 2046 | + var EVENT_CROP_END = 'cropend'; | |
| 2047 | + var EVENT_CROP_MOVE = 'cropmove'; | |
| 2048 | + var EVENT_CROP_START = 'cropstart'; | |
| 2049 | + var EVENT_DBLCLICK = 'dblclick'; | |
| 2050 | + var EVENT_TOUCH_START = IS_TOUCH_DEVICE ? 'touchstart' : 'mousedown'; | |
| 2051 | + var EVENT_TOUCH_MOVE = IS_TOUCH_DEVICE ? 'touchmove' : 'mousemove'; | |
| 2052 | + var EVENT_TOUCH_END = IS_TOUCH_DEVICE ? 'touchend touchcancel' : 'mouseup'; | |
| 2053 | + var EVENT_POINTER_DOWN = HAS_POINTER_EVENT ? 'pointerdown' : EVENT_TOUCH_START; | |
| 2054 | + var EVENT_POINTER_MOVE = HAS_POINTER_EVENT ? 'pointermove' : EVENT_TOUCH_MOVE; | |
| 2055 | + var EVENT_POINTER_UP = HAS_POINTER_EVENT ? 'pointerup pointercancel' : EVENT_TOUCH_END; | |
| 2056 | + var EVENT_READY = 'ready'; | |
| 2057 | + var EVENT_RESIZE = 'resize'; | |
| 2058 | + var EVENT_WHEEL = 'wheel'; | |
| 2059 | + var EVENT_ZOOM = 'zoom'; | |
| 2060 | + | |
| 2061 | + // Mime types | |
| 2062 | + var MIME_TYPE_JPEG = 'image/jpeg'; | |
| 2063 | + | |
| 2064 | + // RegExps | |
| 2065 | + var REGEXP_ACTIONS = /^e|w|s|n|se|sw|ne|nw|all|crop|move|zoom$/; | |
| 2066 | + var REGEXP_DATA_URL = /^data:/; | |
| 2067 | + var REGEXP_DATA_URL_JPEG = /^data:image\/jpeg;base64,/; | |
| 2068 | + var REGEXP_TAG_NAME = /^img|canvas$/i; | |
| 2069 | + | |
| 2070 | + // Misc | |
| 2071 | + // Inspired by the default width and height of a canvas element. | |
| 2072 | + var MIN_CONTAINER_WIDTH = 200; | |
| 2073 | + var MIN_CONTAINER_HEIGHT = 100; | |
| 2074 | + | |
| 2075 | + var DEFAULTS = { | |
| 2076 | + // Define the view mode of the cropper | |
| 2077 | + viewMode: 0, | |
| 2078 | + // 0, 1, 2, 3 | |
| 2079 | + | |
| 2080 | + // Define the dragging mode of the cropper | |
| 2081 | + dragMode: DRAG_MODE_CROP, | |
| 2082 | + // 'crop', 'move' or 'none' | |
| 2083 | + | |
| 2084 | + // Define the initial aspect ratio of the crop box | |
| 2085 | + initialAspectRatio: NaN, | |
| 2086 | + // Define the aspect ratio of the crop box | |
| 2087 | + aspectRatio: NaN, | |
| 2088 | + // An object with the previous cropping result data | |
| 2089 | + data: null, | |
| 2090 | + // A selector for adding extra containers to preview | |
| 2091 | + preview: '', | |
| 2092 | + // Re-render the cropper when resize the window | |
| 2093 | + responsive: true, | |
| 2094 | + // Restore the cropped area after resize the window | |
| 2095 | + restore: true, | |
| 2096 | + // Check if the current image is a cross-origin image | |
| 2097 | + checkCrossOrigin: true, | |
| 2098 | + // Check the current image's Exif Orientation information | |
| 2099 | + checkOrientation: true, | |
| 2100 | + // Show the black modal | |
| 2101 | + modal: true, | |
| 2102 | + // Show the dashed lines for guiding | |
| 2103 | + guides: true, | |
| 2104 | + // Show the center indicator for guiding | |
| 2105 | + center: true, | |
| 2106 | + // Show the white modal to highlight the crop box | |
| 2107 | + highlight: true, | |
| 2108 | + // Show the grid background | |
| 2109 | + background: true, | |
| 2110 | + // Enable to crop the image automatically when initialize | |
| 2111 | + autoCrop: true, | |
| 2112 | + // Define the percentage of automatic cropping area when initializes | |
| 2113 | + autoCropArea: 0.8, | |
| 2114 | + // Enable to move the image | |
| 2115 | + movable: true, | |
| 2116 | + // Enable to rotate the image | |
| 2117 | + rotatable: true, | |
| 2118 | + // Enable to scale the image | |
| 2119 | + scalable: true, | |
| 2120 | + // Enable to zoom the image | |
| 2121 | + zoomable: true, | |
| 2122 | + // Enable to zoom the image by dragging touch | |
| 2123 | + zoomOnTouch: true, | |
| 2124 | + // Enable to zoom the image by wheeling mouse | |
| 2125 | + zoomOnWheel: true, | |
| 2126 | + // Define zoom ratio when zoom the image by wheeling mouse | |
| 2127 | + wheelZoomRatio: 0.1, | |
| 2128 | + // Enable to move the crop box | |
| 2129 | + cropBoxMovable: true, | |
| 2130 | + // Enable to resize the crop box | |
| 2131 | + cropBoxResizable: true, | |
| 2132 | + // Toggle drag mode between "crop" and "move" when click twice on the cropper | |
| 2133 | + toggleDragModeOnDblclick: true, | |
| 2134 | + // Size limitation | |
| 2135 | + minCanvasWidth: 0, | |
| 2136 | + minCanvasHeight: 0, | |
| 2137 | + minCropBoxWidth: 0, | |
| 2138 | + minCropBoxHeight: 0, | |
| 2139 | + minContainerWidth: MIN_CONTAINER_WIDTH, | |
| 2140 | + minContainerHeight: MIN_CONTAINER_HEIGHT, | |
| 2141 | + // Shortcuts of events | |
| 2142 | + ready: null, | |
| 2143 | + cropstart: null, | |
| 2144 | + cropmove: null, | |
| 2145 | + cropend: null, | |
| 2146 | + crop: null, | |
| 2147 | + zoom: null | |
| 2148 | + }; | |
| 2149 | + | |
| 2150 | + var TEMPLATE = '<div class="cropper-container" touch-action="none">' + '<div class="cropper-wrap-box">' + '<div class="cropper-canvas"></div>' + '</div>' + '<div class="cropper-drag-box"></div>' + '<div class="cropper-crop-box">' + '<span class="cropper-view-box"></span>' + '<span class="cropper-dashed dashed-h"></span>' + '<span class="cropper-dashed dashed-v"></span>' + '<span class="cropper-center"></span>' + '<span class="cropper-face"></span>' + '<span class="cropper-line line-e" data-cropper-action="e"></span>' + '<span class="cropper-line line-n" data-cropper-action="n"></span>' + '<span class="cropper-line line-w" data-cropper-action="w"></span>' + '<span class="cropper-line line-s" data-cropper-action="s"></span>' + '<span class="cropper-point point-e" data-cropper-action="e"></span>' + '<span class="cropper-point point-n" data-cropper-action="n"></span>' + '<span class="cropper-point point-w" data-cropper-action="w"></span>' + '<span class="cropper-point point-s" data-cropper-action="s"></span>' + '<span class="cropper-point point-ne" data-cropper-action="ne"></span>' + '<span class="cropper-point point-nw" data-cropper-action="nw"></span>' + '<span class="cropper-point point-sw" data-cropper-action="sw"></span>' + '<span class="cropper-point point-se" data-cropper-action="se"></span>' + '</div>' + '</div>'; | |
| 2151 | + | |
| 2152 | + /** | |
| 2153 | + * Check if the given value is not a number. | |
| 2154 | + */ | |
| 2155 | + var isNaN = Number.isNaN || WINDOW.isNaN; | |
| 2156 | + | |
| 2157 | + /** | |
| 2158 | + * Check if the given value is a number. | |
| 2159 | + * @param {*} value - The value to check. | |
| 2160 | + * @returns {boolean} Returns `true` if the given value is a number, else `false`. | |
| 2161 | + */ | |
| 2162 | + function isNumber(value) { | |
| 2163 | + return typeof value === 'number' && !isNaN(value); | |
| 807 | 2164 | } |
| 808 | 2165 | |
| 809 | - _populated = true; | |
| 2166 | + /** | |
| 2167 | + * Check if the given value is a positive number. | |
| 2168 | + * @param {*} value - The value to check. | |
| 2169 | + * @returns {boolean} Returns `true` if the given value is a positive number, else `false`. | |
| 2170 | + */ | |
| 2171 | + var isPositiveNumber = function isPositiveNumber(value) { | |
| 2172 | + return value > 0 && value < Infinity; | |
| 2173 | + }; | |
| 810 | 2174 | |
| 811 | - // To work around buggy JS libraries that can't handle multi-digit | |
| 812 | - // version numbers, Opera 10's user agent string claims it's Opera | |
| 813 | - // 9, then later includes a Version/X.Y field: | |
| 814 | - // | |
| 815 | - // Opera/9.80 (foo) Presto/2.2.15 Version/10.10 | |
| 816 | - var uas = navigator.userAgent; | |
| 817 | - var agent = /(?:MSIE.(\d+\.\d+))|(?:(?:Firefox|GranParadiso|Iceweasel).(\d+\.\d+))|(?:Opera(?:.+Version.|.)(\d+\.\d+))|(?:AppleWebKit.(\d+(?:\.\d+)?))|(?:Trident\/\d+\.\d+.*rv:(\d+\.\d+))/.exec(uas); | |
| 818 | - var os = /(Mac OS X)|(Windows)|(Linux)/.exec(uas); | |
| 2175 | + /** | |
| 2176 | + * Check if the given value is undefined. | |
| 2177 | + * @param {*} value - The value to check. | |
| 2178 | + * @returns {boolean} Returns `true` if the given value is undefined, else `false`. | |
| 2179 | + */ | |
| 2180 | + function isUndefined(value) { | |
| 2181 | + return typeof value === 'undefined'; | |
| 2182 | + } | |
| 819 | 2183 | |
| 820 | - _iphone = /\b(iPhone|iP[ao]d)/.exec(uas); | |
| 821 | - _ipad = /\b(iP[ao]d)/.exec(uas); | |
| 822 | - _android = /Android/i.exec(uas); | |
| 823 | - _native = /FBAN\/\w+;/i.exec(uas); | |
| 824 | - _mobile = /Mobile/i.exec(uas); | |
| 2184 | + /** | |
| 2185 | + * Check if the given value is an object. | |
| 2186 | + * @param {*} value - The value to check. | |
| 2187 | + * @returns {boolean} Returns `true` if the given value is an object, else `false`. | |
| 2188 | + */ | |
| 2189 | + function isObject(value) { | |
| 2190 | + return _typeof(value) === 'object' && value !== null; | |
| 2191 | + } | |
| 2192 | + var hasOwnProperty = Object.prototype.hasOwnProperty; | |
| 825 | 2193 | |
| 826 | - // Note that the IE team blog would have you believe you should be checking | |
| 827 | - // for 'Win64; x64'. But MSDN then reveals that you can actually be coming | |
| 828 | - // from either x64 or ia64; so ultimately, you should just check for Win64 | |
| 829 | - // as in indicator of whether you're in 64-bit IE. 32-bit IE on 64-bit | |
| 830 | - // Windows will send 'WOW64' instead. | |
| 831 | - _win64 = !!(/Win64/.exec(uas)); | |
| 2194 | + /** | |
| 2195 | + * Check if the given value is a plain object. | |
| 2196 | + * @param {*} value - The value to check. | |
| 2197 | + * @returns {boolean} Returns `true` if the given value is a plain object, else `false`. | |
| 2198 | + */ | |
| 2199 | + function isPlainObject(value) { | |
| 2200 | + if (!isObject(value)) { | |
| 2201 | + return false; | |
| 2202 | + } | |
| 2203 | + try { | |
| 2204 | + var _constructor = value.constructor; | |
| 2205 | + var prototype = _constructor.prototype; | |
| 2206 | + return _constructor && prototype && hasOwnProperty.call(prototype, 'isPrototypeOf'); | |
| 2207 | + } catch (error) { | |
| 2208 | + return false; | |
| 2209 | + } | |
| 2210 | + } | |
| 832 | 2211 | |
| 833 | - if (agent) { | |
| 834 | - _ie = agent[1] ? parseFloat(agent[1]) : ( | |
| 835 | - agent[5] ? parseFloat(agent[5]) : NaN); | |
| 836 | - // IE compatibility mode | |
| 837 | - if (_ie && document && document.documentMode) { | |
| 838 | - _ie = document.documentMode; | |
| 2212 | + /** | |
| 2213 | + * Check if the given value is a function. | |
| 2214 | + * @param {*} value - The value to check. | |
| 2215 | + * @returns {boolean} Returns `true` if the given value is a function, else `false`. | |
| 2216 | + */ | |
| 2217 | + function isFunction(value) { | |
| 2218 | + return typeof value === 'function'; | |
| 2219 | + } | |
| 2220 | + var slice = Array.prototype.slice; | |
| 2221 | + | |
| 2222 | + /** | |
| 2223 | + * Convert array-like or iterable object to an array. | |
| 2224 | + * @param {*} value - The value to convert. | |
| 2225 | + * @returns {Array} Returns a new array. | |
| 2226 | + */ | |
| 2227 | + function toArray(value) { | |
| 2228 | + return Array.from ? Array.from(value) : slice.call(value); | |
| 2229 | + } | |
| 2230 | + | |
| 2231 | + /** | |
| 2232 | + * Iterate the given data. | |
| 2233 | + * @param {*} data - The data to iterate. | |
| 2234 | + * @param {Function} callback - The process function for each element. | |
| 2235 | + * @returns {*} The original data. | |
| 2236 | + */ | |
| 2237 | + function forEach(data, callback) { | |
| 2238 | + if (data && isFunction(callback)) { | |
| 2239 | + if (Array.isArray(data) || isNumber(data.length) /* array-like */) { | |
| 2240 | + toArray(data).forEach(function (value, key) { | |
| 2241 | + callback.call(data, value, key, data); | |
| 2242 | + }); | |
| 2243 | + } else if (isObject(data)) { | |
| 2244 | + Object.keys(data).forEach(function (key) { | |
| 2245 | + callback.call(data, data[key], key, data); | |
| 2246 | + }); | |
| 2247 | + } | |
| 839 | 2248 | } |
| 840 | - // grab the "true" ie version from the trident token if available | |
| 841 | - var trident = /(?:Trident\/(\d+.\d+))/.exec(uas); | |
| 842 | - _ie_real_version = trident ? parseFloat(trident[1]) + 4 : _ie; | |
| 2249 | + return data; | |
| 2250 | + } | |
| 843 | 2251 | |
| 844 | - _firefox = agent[2] ? parseFloat(agent[2]) : NaN; | |
| 845 | - _opera = agent[3] ? parseFloat(agent[3]) : NaN; | |
| 846 | - _webkit = agent[4] ? parseFloat(agent[4]) : NaN; | |
| 847 | - if (_webkit) { | |
| 848 | - // We do not add the regexp to the above test, because it will always | |
| 849 | - // match 'safari' only since 'AppleWebKit' appears before 'Chrome' in | |
| 850 | - // the userAgent string. | |
| 851 | - agent = /(?:Chrome\/(\d+\.\d+))/.exec(uas); | |
| 852 | - _chrome = agent && agent[1] ? parseFloat(agent[1]) : NaN; | |
| 2252 | + /** | |
| 2253 | + * Extend the given object. | |
| 2254 | + * @param {*} target - The target object to extend. | |
| 2255 | + * @param {*} args - The rest objects for merging to the target object. | |
| 2256 | + * @returns {Object} The extended object. | |
| 2257 | + */ | |
| 2258 | + var assign = Object.assign || function assign(target) { | |
| 2259 | + for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { | |
| 2260 | + args[_key - 1] = arguments[_key]; | |
| 2261 | + } | |
| 2262 | + if (isObject(target) && args.length > 0) { | |
| 2263 | + args.forEach(function (arg) { | |
| 2264 | + if (isObject(arg)) { | |
| 2265 | + Object.keys(arg).forEach(function (key) { | |
| 2266 | + target[key] = arg[key]; | |
| 2267 | + }); | |
| 2268 | + } | |
| 2269 | + }); | |
| 2270 | + } | |
| 2271 | + return target; | |
| 2272 | + }; | |
| 2273 | + var REGEXP_DECIMALS = /\.\d*(?:0|9){12}\d*$/; | |
| 2274 | + | |
| 2275 | + /** | |
| 2276 | + * Normalize decimal number. | |
| 2277 | + * Check out {@link https://0.30000000000000004.com/} | |
| 2278 | + * @param {number} value - The value to normalize. | |
| 2279 | + * @param {number} [times=100000000000] - The times for normalizing. | |
| 2280 | + * @returns {number} Returns the normalized number. | |
| 2281 | + */ | |
| 2282 | + function normalizeDecimalNumber(value) { | |
| 2283 | + var times = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 100000000000; | |
| 2284 | + return REGEXP_DECIMALS.test(value) ? Math.round(value * times) / times : value; | |
| 2285 | + } | |
| 2286 | + var REGEXP_SUFFIX = /^width|height|left|top|marginLeft|marginTop$/; | |
| 2287 | + | |
| 2288 | + /** | |
| 2289 | + * Apply styles to the given element. | |
| 2290 | + * @param {Element} element - The target element. | |
| 2291 | + * @param {Object} styles - The styles for applying. | |
| 2292 | + */ | |
| 2293 | + function setStyle(element, styles) { | |
| 2294 | + var style = element.style; | |
| 2295 | + forEach(styles, function (value, property) { | |
| 2296 | + if (REGEXP_SUFFIX.test(property) && isNumber(value)) { | |
| 2297 | + value = "".concat(value, "px"); | |
| 2298 | + } | |
| 2299 | + style[property] = value; | |
| 2300 | + }); | |
| 2301 | + } | |
| 2302 | + | |
| 2303 | + /** | |
| 2304 | + * Check if the given element has a special class. | |
| 2305 | + * @param {Element} element - The element to check. | |
| 2306 | + * @param {string} value - The class to search. | |
| 2307 | + * @returns {boolean} Returns `true` if the special class was found. | |
| 2308 | + */ | |
| 2309 | + function hasClass(element, value) { | |
| 2310 | + return element.classList ? element.classList.contains(value) : element.className.indexOf(value) > -1; | |
| 2311 | + } | |
| 2312 | + | |
| 2313 | + /** | |
| 2314 | + * Add classes to the given element. | |
| 2315 | + * @param {Element} element - The target element. | |
| 2316 | + * @param {string} value - The classes to be added. | |
| 2317 | + */ | |
| 2318 | + function addClass(element, value) { | |
| 2319 | + if (!value) { | |
| 2320 | + return; | |
| 2321 | + } | |
| 2322 | + if (isNumber(element.length)) { | |
| 2323 | + forEach(element, function (elem) { | |
| 2324 | + addClass(elem, value); | |
| 2325 | + }); | |
| 2326 | + return; | |
| 2327 | + } | |
| 2328 | + if (element.classList) { | |
| 2329 | + element.classList.add(value); | |
| 2330 | + return; | |
| 2331 | + } | |
| 2332 | + var className = element.className.trim(); | |
| 2333 | + if (!className) { | |
| 2334 | + element.className = value; | |
| 2335 | + } else if (className.indexOf(value) < 0) { | |
| 2336 | + element.className = "".concat(className, " ").concat(value); | |
| 2337 | + } | |
| 2338 | + } | |
| 2339 | + | |
| 2340 | + /** | |
| 2341 | + * Remove classes from the given element. | |
| 2342 | + * @param {Element} element - The target element. | |
| 2343 | + * @param {string} value - The classes to be removed. | |
| 2344 | + */ | |
| 2345 | + function removeClass(element, value) { | |
| 2346 | + if (!value) { | |
| 2347 | + return; | |
| 2348 | + } | |
| 2349 | + if (isNumber(element.length)) { | |
| 2350 | + forEach(element, function (elem) { | |
| 2351 | + removeClass(elem, value); | |
| 2352 | + }); | |
| 2353 | + return; | |
| 2354 | + } | |
| 2355 | + if (element.classList) { | |
| 2356 | + element.classList.remove(value); | |
| 2357 | + return; | |
| 2358 | + } | |
| 2359 | + if (element.className.indexOf(value) >= 0) { | |
| 2360 | + element.className = element.className.replace(value, ''); | |
| 2361 | + } | |
| 2362 | + } | |
| 2363 | + | |
| 2364 | + /** | |
| 2365 | + * Add or remove classes from the given element. | |
| 2366 | + * @param {Element} element - The target element. | |
| 2367 | + * @param {string} value - The classes to be toggled. | |
| 2368 | + * @param {boolean} added - Add only. | |
| 2369 | + */ | |
| 2370 | + function toggleClass(element, value, added) { | |
| 2371 | + if (!value) { | |
| 2372 | + return; | |
| 2373 | + } | |
| 2374 | + if (isNumber(element.length)) { | |
| 2375 | + forEach(element, function (elem) { | |
| 2376 | + toggleClass(elem, value, added); | |
| 2377 | + }); | |
| 2378 | + return; | |
| 2379 | + } | |
| 2380 | + | |
| 2381 | + // IE10-11 doesn't support the second parameter of `classList.toggle` | |
| 2382 | + if (added) { | |
| 2383 | + addClass(element, value); | |
| 853 | 2384 | } else { |
| 854 | - _chrome = NaN; | |
| 2385 | + removeClass(element, value); | |
| 855 | 2386 | } |
| 856 | - } else { | |
| 857 | - _ie = _firefox = _opera = _chrome = _webkit = NaN; | |
| 858 | 2387 | } |
| 2388 | + var REGEXP_CAMEL_CASE = /([a-z\d])([A-Z])/g; | |
| 859 | 2389 | |
| 860 | - if (os) { | |
| 861 | - if (os[1]) { | |
| 862 | - // Detect OS X version. If no version number matches, set _osx to true. | |
| 863 | - // Version examples: 10, 10_6_1, 10.7 | |
| 864 | - // Parses version number as a float, taking only first two sets of | |
| 865 | - // digits. If only one set of digits is found, returns just the major | |
| 866 | - // version number. | |
| 867 | - var ver = /(?:Mac OS X (\d+(?:[._]\d+)?))/.exec(uas); | |
| 2390 | + /** | |
| 2391 | + * Transform the given string from camelCase to kebab-case | |
| 2392 | + * @param {string} value - The value to transform. | |
| 2393 | + * @returns {string} The transformed value. | |
| 2394 | + */ | |
| 2395 | + function toParamCase(value) { | |
| 2396 | + return value.replace(REGEXP_CAMEL_CASE, '$1-$2').toLowerCase(); | |
| 2397 | + } | |
| 868 | 2398 | |
| 869 | - _osx = ver ? parseFloat(ver[1].replace('_', '.')) : true; | |
| 2399 | + /** | |
| 2400 | + * Get data from the given element. | |
| 2401 | + * @param {Element} element - The target element. | |
| 2402 | + * @param {string} name - The data key to get. | |
| 2403 | + * @returns {string} The data value. | |
| 2404 | + */ | |
| 2405 | + function getData(element, name) { | |
| 2406 | + if (isObject(element[name])) { | |
| 2407 | + return element[name]; | |
| 2408 | + } | |
| 2409 | + if (element.dataset) { | |
| 2410 | + return element.dataset[name]; | |
| 2411 | + } | |
| 2412 | + return element.getAttribute("data-".concat(toParamCase(name))); | |
| 2413 | + } | |
| 2414 | + | |
| 2415 | + /** | |
| 2416 | + * Set data to the given element. | |
| 2417 | + * @param {Element} element - The target element. | |
| 2418 | + * @param {string} name - The data key to set. | |
| 2419 | + * @param {string} data - The data value. | |
| 2420 | + */ | |
| 2421 | + function setData(element, name, data) { | |
| 2422 | + if (isObject(data)) { | |
| 2423 | + element[name] = data; | |
| 2424 | + } else if (element.dataset) { | |
| 2425 | + element.dataset[name] = data; | |
| 870 | 2426 | } else { |
| 871 | - _osx = false; | |
| 2427 | + element.setAttribute("data-".concat(toParamCase(name)), data); | |
| 872 | 2428 | } |
| 873 | - _windows = !!os[2]; | |
| 874 | - _linux = !!os[3]; | |
| 875 | - } else { | |
| 876 | - _osx = _windows = _linux = false; | |
| 877 | 2429 | } |
| 878 | -} | |
| 879 | 2430 | |
| 880 | -var UserAgent_DEPRECATED = { | |
| 2431 | + /** | |
| 2432 | + * Remove data from the given element. | |
| 2433 | + * @param {Element} element - The target element. | |
| 2434 | + * @param {string} name - The data key to remove. | |
| 2435 | + */ | |
| 2436 | + function removeData(element, name) { | |
| 2437 | + if (isObject(element[name])) { | |
| 2438 | + try { | |
| 2439 | + delete element[name]; | |
| 2440 | + } catch (error) { | |
| 2441 | + element[name] = undefined; | |
| 2442 | + } | |
| 2443 | + } else if (element.dataset) { | |
| 2444 | + // #128 Safari not allows to delete dataset property | |
| 2445 | + try { | |
| 2446 | + delete element.dataset[name]; | |
| 2447 | + } catch (error) { | |
| 2448 | + element.dataset[name] = undefined; | |
| 2449 | + } | |
| 2450 | + } else { | |
| 2451 | + element.removeAttribute("data-".concat(toParamCase(name))); | |
| 2452 | + } | |
| 2453 | + } | |
| 2454 | + var REGEXP_SPACES = /\s\s*/; | |
| 2455 | + var onceSupported = function () { | |
| 2456 | + var supported = false; | |
| 2457 | + if (IS_BROWSER) { | |
| 2458 | + var once = false; | |
| 2459 | + var listener = function listener() {}; | |
| 2460 | + var options = Object.defineProperty({}, 'once', { | |
| 2461 | + get: function get() { | |
| 2462 | + supported = true; | |
| 2463 | + return once; | |
| 2464 | + }, | |
| 2465 | + /** | |
| 2466 | + * This setter can fix a `TypeError` in strict mode | |
| 2467 | + * {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Getter_only} | |
| 2468 | + * @param {boolean} value - The value to set | |
| 2469 | + */ | |
| 2470 | + set: function set(value) { | |
| 2471 | + once = value; | |
| 2472 | + } | |
| 2473 | + }); | |
| 2474 | + WINDOW.addEventListener('test', listener, options); | |
| 2475 | + WINDOW.removeEventListener('test', listener, options); | |
| 2476 | + } | |
| 2477 | + return supported; | |
| 2478 | + }(); | |
| 881 | 2479 | |
| 882 | 2480 | /** |
| 883 | - * Check if the UA is Internet Explorer. | |
| 884 | - * | |
| 885 | - * | |
| 886 | - * @return float|NaN Version number (if match) or NaN. | |
| 2481 | + * Remove event listener from the target element. | |
| 2482 | + * @param {Element} element - The event target. | |
| 2483 | + * @param {string} type - The event type(s). | |
| 2484 | + * @param {Function} listener - The event listener. | |
| 2485 | + * @param {Object} options - The event options. | |
| 887 | 2486 | */ |
| 888 | - ie: function() { | |
| 889 | - return _populate() || _ie; | |
| 890 | - }, | |
| 2487 | + function removeListener(element, type, listener) { | |
| 2488 | + var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; | |
| 2489 | + var handler = listener; | |
| 2490 | + type.trim().split(REGEXP_SPACES).forEach(function (event) { | |
| 2491 | + if (!onceSupported) { | |
| 2492 | + var listeners = element.listeners; | |
| 2493 | + if (listeners && listeners[event] && listeners[event][listener]) { | |
| 2494 | + handler = listeners[event][listener]; | |
| 2495 | + delete listeners[event][listener]; | |
| 2496 | + if (Object.keys(listeners[event]).length === 0) { | |
| 2497 | + delete listeners[event]; | |
| 2498 | + } | |
| 2499 | + if (Object.keys(listeners).length === 0) { | |
| 2500 | + delete element.listeners; | |
| 2501 | + } | |
| 2502 | + } | |
| 2503 | + } | |
| 2504 | + element.removeEventListener(event, handler, options); | |
| 2505 | + }); | |
| 2506 | + } | |
| 891 | 2507 | |
| 892 | 2508 | /** |
| 893 | - * Check if we're in Internet Explorer compatibility mode. | |
| 894 | - * | |
| 895 | - * @return bool true if in compatibility mode, false if | |
| 896 | - * not compatibility mode or not ie | |
| 2509 | + * Add event listener to the target element. | |
| 2510 | + * @param {Element} element - The event target. | |
| 2511 | + * @param {string} type - The event type(s). | |
| 2512 | + * @param {Function} listener - The event listener. | |
| 2513 | + * @param {Object} options - The event options. | |
| 897 | 2514 | */ |
| 898 | - ieCompatibilityMode: function() { | |
| 899 | - return _populate() || (_ie_real_version > _ie); | |
| 900 | - }, | |
| 2515 | + function addListener(element, type, listener) { | |
| 2516 | + var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; | |
| 2517 | + var _handler = listener; | |
| 2518 | + type.trim().split(REGEXP_SPACES).forEach(function (event) { | |
| 2519 | + if (options.once && !onceSupported) { | |
| 2520 | + var _element$listeners = element.listeners, | |
| 2521 | + listeners = _element$listeners === void 0 ? {} : _element$listeners; | |
| 2522 | + _handler = function handler() { | |
| 2523 | + delete listeners[event][listener]; | |
| 2524 | + element.removeEventListener(event, _handler, options); | |
| 2525 | + for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { | |
| 2526 | + args[_key2] = arguments[_key2]; | |
| 2527 | + } | |
| 2528 | + listener.apply(element, args); | |
| 2529 | + }; | |
| 2530 | + if (!listeners[event]) { | |
| 2531 | + listeners[event] = {}; | |
| 2532 | + } | |
| 2533 | + if (listeners[event][listener]) { | |
| 2534 | + element.removeEventListener(event, listeners[event][listener], options); | |
| 2535 | + } | |
| 2536 | + listeners[event][listener] = _handler; | |
| 2537 | + element.listeners = listeners; | |
| 2538 | + } | |
| 2539 | + element.addEventListener(event, _handler, options); | |
| 2540 | + }); | |
| 2541 | + } | |
| 901 | 2542 | |
| 2543 | + /** | |
| 2544 | + * Dispatch event on the target element. | |
| 2545 | + * @param {Element} element - The event target. | |
| 2546 | + * @param {string} type - The event type(s). | |
| 2547 | + * @param {Object} data - The additional event data. | |
| 2548 | + * @returns {boolean} Indicate if the event is default prevented or not. | |
| 2549 | + */ | |
| 2550 | + function dispatchEvent(element, type, data) { | |
| 2551 | + var event; | |
| 902 | 2552 | |
| 2553 | + // Event and CustomEvent on IE9-11 are global objects, not constructors | |
| 2554 | + if (isFunction(Event) && isFunction(CustomEvent)) { | |
| 2555 | + event = new CustomEvent(type, { | |
| 2556 | + detail: data, | |
| 2557 | + bubbles: true, | |
| 2558 | + cancelable: true | |
| 2559 | + }); | |
| 2560 | + } else { | |
| 2561 | + event = document.createEvent('CustomEvent'); | |
| 2562 | + event.initCustomEvent(type, true, true, data); | |
| 2563 | + } | |
| 2564 | + return element.dispatchEvent(event); | |
| 2565 | + } | |
| 2566 | + | |
| 903 | 2567 | /** |
| 904 | - * Whether the browser is 64-bit IE. Really, this is kind of weak sauce; we | |
| 905 | - * only need this because Skype can't handle 64-bit IE yet. We need to remove | |
| 906 | - * this when we don't need it -- tracked by #601957. | |
| 2568 | + * Get the offset base on the document. | |
| 2569 | + * @param {Element} element - The target element. | |
| 2570 | + * @returns {Object} The offset data. | |
| 907 | 2571 | */ |
| 908 | - ie64: function() { | |
| 909 | - return UserAgent_DEPRECATED.ie() && _win64; | |
| 910 | - }, | |
| 2572 | + function getOffset(element) { | |
| 2573 | + var box = element.getBoundingClientRect(); | |
| 2574 | + return { | |
| 2575 | + left: box.left + (window.pageXOffset - document.documentElement.clientLeft), | |
| 2576 | + top: box.top + (window.pageYOffset - document.documentElement.clientTop) | |
| 2577 | + }; | |
| 2578 | + } | |
| 2579 | + var location = WINDOW.location; | |
| 2580 | + var REGEXP_ORIGINS = /^(\w+:)\/\/([^:/?#]*):?(\d*)/i; | |
| 911 | 2581 | |
| 912 | 2582 | /** |
| 913 | - * Check if the UA is Firefox. | |
| 914 | - * | |
| 915 | - * | |
| 916 | - * @return float|NaN Version number (if match) or NaN. | |
| 2583 | + * Check if the given URL is a cross origin URL. | |
| 2584 | + * @param {string} url - The target URL. | |
| 2585 | + * @returns {boolean} Returns `true` if the given URL is a cross origin URL, else `false`. | |
| 917 | 2586 | */ |
| 918 | - firefox: function() { | |
| 919 | - return _populate() || _firefox; | |
| 920 | - }, | |
| 2587 | + function isCrossOriginURL(url) { | |
| 2588 | + var parts = url.match(REGEXP_ORIGINS); | |
| 2589 | + return parts !== null && (parts[1] !== location.protocol || parts[2] !== location.hostname || parts[3] !== location.port); | |
| 2590 | + } | |
| 921 | 2591 | |
| 2592 | + /** | |
| 2593 | + * Add timestamp to the given URL. | |
| 2594 | + * @param {string} url - The target URL. | |
| 2595 | + * @returns {string} The result URL. | |
| 2596 | + */ | |
| 2597 | + function addTimestamp(url) { | |
| 2598 | + var timestamp = "timestamp=".concat(new Date().getTime()); | |
| 2599 | + return url + (url.indexOf('?') === -1 ? '?' : '&') + timestamp; | |
| 2600 | + } | |
| 922 | 2601 | |
| 923 | 2602 | /** |
| 924 | - * Check if the UA is Opera. | |
| 925 | - * | |
| 926 | - * | |
| 927 | - * @return float|NaN Version number (if match) or NaN. | |
| 2603 | + * Get transforms base on the given object. | |
| 2604 | + * @param {Object} obj - The target object. | |
| 2605 | + * @returns {string} A string contains transform values. | |
| 928 | 2606 | */ |
| 929 | - opera: function() { | |
| 930 | - return _populate() || _opera; | |
| 931 | - }, | |
| 2607 | + function getTransforms(_ref) { | |
| 2608 | + var rotate = _ref.rotate, | |
| 2609 | + scaleX = _ref.scaleX, | |
| 2610 | + scaleY = _ref.scaleY, | |
| 2611 | + translateX = _ref.translateX, | |
| 2612 | + translateY = _ref.translateY; | |
| 2613 | + var values = []; | |
| 2614 | + if (isNumber(translateX) && translateX !== 0) { | |
| 2615 | + values.push("translateX(".concat(translateX, "px)")); | |
| 2616 | + } | |
| 2617 | + if (isNumber(translateY) && translateY !== 0) { | |
| 2618 | + values.push("translateY(".concat(translateY, "px)")); | |
| 2619 | + } | |
| 932 | 2620 | |
| 2621 | + // Rotate should come first before scale to match orientation transform | |
| 2622 | + if (isNumber(rotate) && rotate !== 0) { | |
| 2623 | + values.push("rotate(".concat(rotate, "deg)")); | |
| 2624 | + } | |
| 2625 | + if (isNumber(scaleX) && scaleX !== 1) { | |
| 2626 | + values.push("scaleX(".concat(scaleX, ")")); | |
| 2627 | + } | |
| 2628 | + if (isNumber(scaleY) && scaleY !== 1) { | |
| 2629 | + values.push("scaleY(".concat(scaleY, ")")); | |
| 2630 | + } | |
| 2631 | + var transform = values.length ? values.join(' ') : 'none'; | |
| 2632 | + return { | |
| 2633 | + WebkitTransform: transform, | |
| 2634 | + msTransform: transform, | |
| 2635 | + transform: transform | |
| 2636 | + }; | |
| 2637 | + } | |
| 933 | 2638 | |
| 934 | 2639 | /** |
| 935 | - * Check if the UA is WebKit. | |
| 936 | - * | |
| 937 | - * | |
| 938 | - * @return float|NaN Version number (if match) or NaN. | |
| 2640 | + * Get the max ratio of a group of pointers. | |
| 2641 | + * @param {string} pointers - The target pointers. | |
| 2642 | + * @returns {number} The result ratio. | |
| 939 | 2643 | */ |
| 940 | - webkit: function() { | |
| 941 | - return _populate() || _webkit; | |
| 942 | - }, | |
| 2644 | + function getMaxZoomRatio(pointers) { | |
| 2645 | + var pointers2 = _objectSpread2({}, pointers); | |
| 2646 | + var maxRatio = 0; | |
| 2647 | + forEach(pointers, function (pointer, pointerId) { | |
| 2648 | + delete pointers2[pointerId]; | |
| 2649 | + forEach(pointers2, function (pointer2) { | |
| 2650 | + var x1 = Math.abs(pointer.startX - pointer2.startX); | |
| 2651 | + var y1 = Math.abs(pointer.startY - pointer2.startY); | |
| 2652 | + var x2 = Math.abs(pointer.endX - pointer2.endX); | |
| 2653 | + var y2 = Math.abs(pointer.endY - pointer2.endY); | |
| 2654 | + var z1 = Math.sqrt(x1 * x1 + y1 * y1); | |
| 2655 | + var z2 = Math.sqrt(x2 * x2 + y2 * y2); | |
| 2656 | + var ratio = (z2 - z1) / z1; | |
| 2657 | + if (Math.abs(ratio) > Math.abs(maxRatio)) { | |
| 2658 | + maxRatio = ratio; | |
| 2659 | + } | |
| 2660 | + }); | |
| 2661 | + }); | |
| 2662 | + return maxRatio; | |
| 2663 | + } | |
| 943 | 2664 | |
| 944 | 2665 | /** |
| 945 | - * For Push | |
| 946 | - * WILL BE REMOVED VERY SOON. Use UserAgent_DEPRECATED.webkit | |
| 2666 | + * Get a pointer from an event object. | |
| 2667 | + * @param {Object} event - The target event object. | |
| 2668 | + * @param {boolean} endOnly - Indicates if only returns the end point coordinate or not. | |
| 2669 | + * @returns {Object} The result pointer contains start and/or end point coordinates. | |
| 947 | 2670 | */ |
| 948 | - safari: function() { | |
| 949 | - return UserAgent_DEPRECATED.webkit(); | |
| 950 | - }, | |
| 2671 | + function getPointer(_ref2, endOnly) { | |
| 2672 | + var pageX = _ref2.pageX, | |
| 2673 | + pageY = _ref2.pageY; | |
| 2674 | + var end = { | |
| 2675 | + endX: pageX, | |
| 2676 | + endY: pageY | |
| 2677 | + }; | |
| 2678 | + return endOnly ? end : _objectSpread2({ | |
| 2679 | + startX: pageX, | |
| 2680 | + startY: pageY | |
| 2681 | + }, end); | |
| 2682 | + } | |
| 951 | 2683 | |
| 952 | 2684 | /** |
| 953 | - * Check if the UA is a Chrome browser. | |
| 954 | - * | |
| 955 | - * | |
| 956 | - * @return float|NaN Version number (if match) or NaN. | |
| 2685 | + * Get the center point coordinate of a group of pointers. | |
| 2686 | + * @param {Object} pointers - The target pointers. | |
| 2687 | + * @returns {Object} The center point coordinate. | |
| 957 | 2688 | */ |
| 958 | - chrome : function() { | |
| 959 | - return _populate() || _chrome; | |
| 960 | - }, | |
| 2689 | + function getPointersCenter(pointers) { | |
| 2690 | + var pageX = 0; | |
| 2691 | + var pageY = 0; | |
| 2692 | + var count = 0; | |
| 2693 | + forEach(pointers, function (_ref3) { | |
| 2694 | + var startX = _ref3.startX, | |
| 2695 | + startY = _ref3.startY; | |
| 2696 | + pageX += startX; | |
| 2697 | + pageY += startY; | |
| 2698 | + count += 1; | |
| 2699 | + }); | |
| 2700 | + pageX /= count; | |
| 2701 | + pageY /= count; | |
| 2702 | + return { | |
| 2703 | + pageX: pageX, | |
| 2704 | + pageY: pageY | |
| 2705 | + }; | |
| 2706 | + } | |
| 961 | 2707 | |
| 2708 | + /** | |
| 2709 | + * Get the max sizes in a rectangle under the given aspect ratio. | |
| 2710 | + * @param {Object} data - The original sizes. | |
| 2711 | + * @param {string} [type='contain'] - The adjust type. | |
| 2712 | + * @returns {Object} The result sizes. | |
| 2713 | + */ | |
| 2714 | + function getAdjustedSizes(_ref4) { | |
| 2715 | + var aspectRatio = _ref4.aspectRatio, | |
| 2716 | + height = _ref4.height, | |
| 2717 | + width = _ref4.width; | |
| 2718 | + var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'contain'; | |
| 2719 | + var isValidWidth = isPositiveNumber(width); | |
| 2720 | + var isValidHeight = isPositiveNumber(height); | |
| 2721 | + if (isValidWidth && isValidHeight) { | |
| 2722 | + var adjustedWidth = height * aspectRatio; | |
| 2723 | + if (type === 'contain' && adjustedWidth > width || type === 'cover' && adjustedWidth < width) { | |
| 2724 | + height = width / aspectRatio; | |
| 2725 | + } else { | |
| 2726 | + width = height * aspectRatio; | |
| 2727 | + } | |
| 2728 | + } else if (isValidWidth) { | |
| 2729 | + height = width / aspectRatio; | |
| 2730 | + } else if (isValidHeight) { | |
| 2731 | + width = height * aspectRatio; | |
| 2732 | + } | |
| 2733 | + return { | |
| 2734 | + width: width, | |
| 2735 | + height: height | |
| 2736 | + }; | |
| 2737 | + } | |
| 962 | 2738 | |
| 963 | 2739 | /** |
| 964 | - * Check if the user is running Windows. | |
| 965 | - * | |
| 966 | - * @return bool `true' if the user's OS is Windows. | |
| 2740 | + * Get the new sizes of a rectangle after rotated. | |
| 2741 | + * @param {Object} data - The original sizes. | |
| 2742 | + * @returns {Object} The result sizes. | |
| 967 | 2743 | */ |
| 968 | - windows: function() { | |
| 969 | - return _populate() || _windows; | |
| 970 | - }, | |
| 2744 | + function getRotatedSizes(_ref5) { | |
| 2745 | + var width = _ref5.width, | |
| 2746 | + height = _ref5.height, | |
| 2747 | + degree = _ref5.degree; | |
| 2748 | + degree = Math.abs(degree) % 180; | |
| 2749 | + if (degree === 90) { | |
| 2750 | + return { | |
| 2751 | + width: height, | |
| 2752 | + height: width | |
| 2753 | + }; | |
| 2754 | + } | |
| 2755 | + var arc = degree % 90 * Math.PI / 180; | |
| 2756 | + var sinArc = Math.sin(arc); | |
| 2757 | + var cosArc = Math.cos(arc); | |
| 2758 | + var newWidth = width * cosArc + height * sinArc; | |
| 2759 | + var newHeight = width * sinArc + height * cosArc; | |
| 2760 | + return degree > 90 ? { | |
| 2761 | + width: newHeight, | |
| 2762 | + height: newWidth | |
| 2763 | + } : { | |
| 2764 | + width: newWidth, | |
| 2765 | + height: newHeight | |
| 2766 | + }; | |
| 2767 | + } | |
| 971 | 2768 | |
| 2769 | + /** | |
| 2770 | + * Get a canvas which drew the given image. | |
| 2771 | + * @param {HTMLImageElement} image - The image for drawing. | |
| 2772 | + * @param {Object} imageData - The image data. | |
| 2773 | + * @param {Object} canvasData - The canvas data. | |
| 2774 | + * @param {Object} options - The options. | |
| 2775 | + * @returns {HTMLCanvasElement} The result canvas. | |
| 2776 | + */ | |
| 2777 | + function getSourceCanvas(image, _ref6, _ref7, _ref8) { | |
| 2778 | + var imageAspectRatio = _ref6.aspectRatio, | |
| 2779 | + imageNaturalWidth = _ref6.naturalWidth, | |
| 2780 | + imageNaturalHeight = _ref6.naturalHeight, | |
| 2781 | + _ref6$rotate = _ref6.rotate, | |
| 2782 | + rotate = _ref6$rotate === void 0 ? 0 : _ref6$rotate, | |
| 2783 | + _ref6$scaleX = _ref6.scaleX, | |
| 2784 | + scaleX = _ref6$scaleX === void 0 ? 1 : _ref6$scaleX, | |
| 2785 | + _ref6$scaleY = _ref6.scaleY, | |
| 2786 | + scaleY = _ref6$scaleY === void 0 ? 1 : _ref6$scaleY; | |
| 2787 | + var aspectRatio = _ref7.aspectRatio, | |
| 2788 | + naturalWidth = _ref7.naturalWidth, | |
| 2789 | + naturalHeight = _ref7.naturalHeight; | |
| 2790 | + var _ref8$fillColor = _ref8.fillColor, | |
| 2791 | + fillColor = _ref8$fillColor === void 0 ? 'transparent' : _ref8$fillColor, | |
| 2792 | + _ref8$imageSmoothingE = _ref8.imageSmoothingEnabled, | |
| 2793 | + imageSmoothingEnabled = _ref8$imageSmoothingE === void 0 ? true : _ref8$imageSmoothingE, | |
| 2794 | + _ref8$imageSmoothingQ = _ref8.imageSmoothingQuality, | |
| 2795 | + imageSmoothingQuality = _ref8$imageSmoothingQ === void 0 ? 'low' : _ref8$imageSmoothingQ, | |
| 2796 | + _ref8$maxWidth = _ref8.maxWidth, | |
| 2797 | + maxWidth = _ref8$maxWidth === void 0 ? Infinity : _ref8$maxWidth, | |
| 2798 | + _ref8$maxHeight = _ref8.maxHeight, | |
| 2799 | + maxHeight = _ref8$maxHeight === void 0 ? Infinity : _ref8$maxHeight, | |
| 2800 | + _ref8$minWidth = _ref8.minWidth, | |
| 2801 | + minWidth = _ref8$minWidth === void 0 ? 0 : _ref8$minWidth, | |
| 2802 | + _ref8$minHeight = _ref8.minHeight, | |
| 2803 | + minHeight = _ref8$minHeight === void 0 ? 0 : _ref8$minHeight; | |
| 2804 | + var canvas = document.createElement('canvas'); | |
| 2805 | + var context = canvas.getContext('2d'); | |
| 2806 | + var maxSizes = getAdjustedSizes({ | |
| 2807 | + aspectRatio: aspectRatio, | |
| 2808 | + width: maxWidth, | |
| 2809 | + height: maxHeight | |
| 2810 | + }); | |
| 2811 | + var minSizes = getAdjustedSizes({ | |
| 2812 | + aspectRatio: aspectRatio, | |
| 2813 | + width: minWidth, | |
| 2814 | + height: minHeight | |
| 2815 | + }, 'cover'); | |
| 2816 | + var width = Math.min(maxSizes.width, Math.max(minSizes.width, naturalWidth)); | |
| 2817 | + var height = Math.min(maxSizes.height, Math.max(minSizes.height, naturalHeight)); | |
| 972 | 2818 | |
| 2819 | + // Note: should always use image's natural sizes for drawing as | |
| 2820 | + // imageData.naturalWidth === canvasData.naturalHeight when rotate % 180 === 90 | |
| 2821 | + var destMaxSizes = getAdjustedSizes({ | |
| 2822 | + aspectRatio: imageAspectRatio, | |
| 2823 | + width: maxWidth, | |
| 2824 | + height: maxHeight | |
| 2825 | + }); | |
| 2826 | + var destMinSizes = getAdjustedSizes({ | |
| 2827 | + aspectRatio: imageAspectRatio, | |
| 2828 | + width: minWidth, | |
| 2829 | + height: minHeight | |
| 2830 | + }, 'cover'); | |
| 2831 | + var destWidth = Math.min(destMaxSizes.width, Math.max(destMinSizes.width, imageNaturalWidth)); | |
| 2832 | + var destHeight = Math.min(destMaxSizes.height, Math.max(destMinSizes.height, imageNaturalHeight)); | |
| 2833 | + var params = [-destWidth / 2, -destHeight / 2, destWidth, destHeight]; | |
| 2834 | + canvas.width = normalizeDecimalNumber(width); | |
| 2835 | + canvas.height = normalizeDecimalNumber(height); | |
| 2836 | + context.fillStyle = fillColor; | |
| 2837 | + context.fillRect(0, 0, width, height); | |
| 2838 | + context.save(); | |
| 2839 | + context.translate(width / 2, height / 2); | |
| 2840 | + context.rotate(rotate * Math.PI / 180); | |
| 2841 | + context.scale(scaleX, scaleY); | |
| 2842 | + context.imageSmoothingEnabled = imageSmoothingEnabled; | |
| 2843 | + context.imageSmoothingQuality = imageSmoothingQuality; | |
| 2844 | + context.drawImage.apply(context, [image].concat(_toConsumableArray(params.map(function (param) { | |
| 2845 | + return Math.floor(normalizeDecimalNumber(param)); | |
| 2846 | + })))); | |
| 2847 | + context.restore(); | |
| 2848 | + return canvas; | |
| 2849 | + } | |
| 2850 | + var fromCharCode = String.fromCharCode; | |
| 2851 | + | |
| 973 | 2852 | /** |
| 974 | - * Check if the user is running Mac OS X. | |
| 975 | - * | |
| 976 | - * @return float|bool Returns a float if a version number is detected, | |
| 977 | - * otherwise true/false. | |
| 2853 | + * Get string from char code in data view. | |
| 2854 | + * @param {DataView} dataView - The data view for read. | |
| 2855 | + * @param {number} start - The start index. | |
| 2856 | + * @param {number} length - The read length. | |
| 2857 | + * @returns {string} The read result. | |
| 978 | 2858 | */ |
| 979 | - osx: function() { | |
| 980 | - return _populate() || _osx; | |
| 981 | - }, | |
| 2859 | + function getStringFromCharCode(dataView, start, length) { | |
| 2860 | + var str = ''; | |
| 2861 | + length += start; | |
| 2862 | + for (var i = start; i < length; i += 1) { | |
| 2863 | + str += fromCharCode(dataView.getUint8(i)); | |
| 2864 | + } | |
| 2865 | + return str; | |
| 2866 | + } | |
| 2867 | + var REGEXP_DATA_URL_HEAD = /^data:.*,/; | |
| 982 | 2868 | |
| 983 | 2869 | /** |
| 984 | - * Check if the user is running Linux. | |
| 985 | - * | |
| 986 | - * @return bool `true' if the user's OS is some flavor of Linux. | |
| 2870 | + * Transform Data URL to array buffer. | |
| 2871 | + * @param {string} dataURL - The Data URL to transform. | |
| 2872 | + * @returns {ArrayBuffer} The result array buffer. | |
| 987 | 2873 | */ |
| 988 | - linux: function() { | |
| 989 | - return _populate() || _linux; | |
| 990 | - }, | |
| 2874 | + function dataURLToArrayBuffer(dataURL) { | |
| 2875 | + var base64 = dataURL.replace(REGEXP_DATA_URL_HEAD, ''); | |
| 2876 | + var binary = atob(base64); | |
| 2877 | + var arrayBuffer = new ArrayBuffer(binary.length); | |
| 2878 | + var uint8 = new Uint8Array(arrayBuffer); | |
| 2879 | + forEach(uint8, function (value, i) { | |
| 2880 | + uint8[i] = binary.charCodeAt(i); | |
| 2881 | + }); | |
| 2882 | + return arrayBuffer; | |
| 2883 | + } | |
| 991 | 2884 | |
| 992 | 2885 | /** |
| 993 | - * Check if the user is running on an iPhone or iPod platform. | |
| 994 | - * | |
| 995 | - * @return bool `true' if the user is running some flavor of the | |
| 996 | - * iPhone OS. | |
| 2886 | + * Transform array buffer to Data URL. | |
| 2887 | + * @param {ArrayBuffer} arrayBuffer - The array buffer to transform. | |
| 2888 | + * @param {string} mimeType - The mime type of the Data URL. | |
| 2889 | + * @returns {string} The result Data URL. | |
| 997 | 2890 | */ |
| 998 | - iphone: function() { | |
| 999 | - return _populate() || _iphone; | |
| 1000 | - }, | |
| 2891 | + function arrayBufferToDataURL(arrayBuffer, mimeType) { | |
| 2892 | + var chunks = []; | |
| 1001 | 2893 | |
| 1002 | - mobile: function() { | |
| 1003 | - return _populate() || (_iphone || _ipad || _android || _mobile); | |
| 1004 | - }, | |
| 2894 | + // Chunk Typed Array for better performance (#435) | |
| 2895 | + var chunkSize = 8192; | |
| 2896 | + var uint8 = new Uint8Array(arrayBuffer); | |
| 2897 | + while (uint8.length > 0) { | |
| 2898 | + // XXX: Babel's `toConsumableArray` helper will throw error in IE or Safari 9 | |
| 2899 | + // eslint-disable-next-line prefer-spread | |
| 2900 | + chunks.push(fromCharCode.apply(null, toArray(uint8.subarray(0, chunkSize)))); | |
| 2901 | + uint8 = uint8.subarray(chunkSize); | |
| 2902 | + } | |
| 2903 | + return "data:".concat(mimeType, ";base64,").concat(btoa(chunks.join(''))); | |
| 2904 | + } | |
| 1005 | 2905 | |
| 1006 | - nativeApp: function() { | |
| 1007 | - // webviews inside of the native apps | |
| 1008 | - return _populate() || _native; | |
| 1009 | - }, | |
| 2906 | + /** | |
| 2907 | + * Get orientation value from given array buffer. | |
| 2908 | + * @param {ArrayBuffer} arrayBuffer - The array buffer to read. | |
| 2909 | + * @returns {number} The read orientation value. | |
| 2910 | + */ | |
| 2911 | + function resetAndGetOrientation(arrayBuffer) { | |
| 2912 | + var dataView = new DataView(arrayBuffer); | |
| 2913 | + var orientation; | |
| 1010 | 2914 | |
| 1011 | - android: function() { | |
| 1012 | - return _populate() || _android; | |
| 1013 | - }, | |
| 2915 | + // Ignores range error when the image does not have correct Exif information | |
| 2916 | + try { | |
| 2917 | + var littleEndian; | |
| 2918 | + var app1Start; | |
| 2919 | + var ifdStart; | |
| 1014 | 2920 | |
| 1015 | - ipad: function() { | |
| 1016 | - return _populate() || _ipad; | |
| 2921 | + // Only handle JPEG image (start by 0xFFD8) | |
| 2922 | + if (dataView.getUint8(0) === 0xFF && dataView.getUint8(1) === 0xD8) { | |
| 2923 | + var length = dataView.byteLength; | |
| 2924 | + var offset = 2; | |
| 2925 | + while (offset + 1 < length) { | |
| 2926 | + if (dataView.getUint8(offset) === 0xFF && dataView.getUint8(offset + 1) === 0xE1) { | |
| 2927 | + app1Start = offset; | |
| 2928 | + break; | |
| 2929 | + } | |
| 2930 | + offset += 1; | |
| 2931 | + } | |
| 2932 | + } | |
| 2933 | + if (app1Start) { | |
| 2934 | + var exifIDCode = app1Start + 4; | |
| 2935 | + var tiffOffset = app1Start + 10; | |
| 2936 | + if (getStringFromCharCode(dataView, exifIDCode, 4) === 'Exif') { | |
| 2937 | + var endianness = dataView.getUint16(tiffOffset); | |
| 2938 | + littleEndian = endianness === 0x4949; | |
| 2939 | + if (littleEndian || endianness === 0x4D4D /* bigEndian */) { | |
| 2940 | + if (dataView.getUint16(tiffOffset + 2, littleEndian) === 0x002A) { | |
| 2941 | + var firstIFDOffset = dataView.getUint32(tiffOffset + 4, littleEndian); | |
| 2942 | + if (firstIFDOffset >= 0x00000008) { | |
| 2943 | + ifdStart = tiffOffset + firstIFDOffset; | |
| 2944 | + } | |
| 2945 | + } | |
| 2946 | + } | |
| 2947 | + } | |
| 2948 | + } | |
| 2949 | + if (ifdStart) { | |
| 2950 | + var _length = dataView.getUint16(ifdStart, littleEndian); | |
| 2951 | + var _offset; | |
| 2952 | + var i; | |
| 2953 | + for (i = 0; i < _length; i += 1) { | |
| 2954 | + _offset = ifdStart + i * 12 + 2; | |
| 2955 | + if (dataView.getUint16(_offset, littleEndian) === 0x0112 /* Orientation */) { | |
| 2956 | + // 8 is the offset of the current tag's value | |
| 2957 | + _offset += 8; | |
| 2958 | + | |
| 2959 | + // Get the original orientation value | |
| 2960 | + orientation = dataView.getUint16(_offset, littleEndian); | |
| 2961 | + | |
| 2962 | + // Override the orientation with its default value | |
| 2963 | + dataView.setUint16(_offset, 1, littleEndian); | |
| 2964 | + break; | |
| 2965 | + } | |
| 2966 | + } | |
| 2967 | + } | |
| 2968 | + } catch (error) { | |
| 2969 | + orientation = 1; | |
| 2970 | + } | |
| 2971 | + return orientation; | |
| 1017 | 2972 | } |
| 1018 | -}; | |
| 1019 | 2973 | |
| 1020 | -module.exports = UserAgent_DEPRECATED; | |
| 2974 | + /** | |
| 2975 | + * Parse Exif Orientation value. | |
| 2976 | + * @param {number} orientation - The orientation to parse. | |
| 2977 | + * @returns {Object} The parsed result. | |
| 2978 | + */ | |
| 2979 | + function parseOrientation(orientation) { | |
| 2980 | + var rotate = 0; | |
| 2981 | + var scaleX = 1; | |
| 2982 | + var scaleY = 1; | |
| 2983 | + switch (orientation) { | |
| 2984 | + // Flip horizontal | |
| 2985 | + case 2: | |
| 2986 | + scaleX = -1; | |
| 2987 | + break; | |
| 1021 | 2988 | |
| 2989 | + // Rotate left 180° | |
| 2990 | + case 3: | |
| 2991 | + rotate = -180; | |
| 2992 | + break; | |
| 1022 | 2993 | |
| 1023 | -/***/ }), | |
| 2994 | + // Flip vertical | |
| 2995 | + case 4: | |
| 2996 | + scaleY = -1; | |
| 2997 | + break; | |
| 1024 | 2998 | |
| 1025 | -/***/ "./node_modules/normalize-wheel/src/isEventSupported.js": | |
| 1026 | -/*!**************************************************************!*\ | |
| 1027 | - !*** ./node_modules/normalize-wheel/src/isEventSupported.js ***! | |
| 1028 | - \**************************************************************/ | |
| 1029 | -/***/ (function(module, __unused_webpack_exports, __webpack_require__) { | |
| 2999 | + // Flip vertical and rotate right 90° | |
| 3000 | + case 5: | |
| 3001 | + rotate = 90; | |
| 3002 | + scaleY = -1; | |
| 3003 | + break; | |
| 1030 | 3004 | |
| 3005 | + // Rotate right 90° | |
| 3006 | + case 6: | |
| 3007 | + rotate = 90; | |
| 3008 | + break; | |
| 3009 | + | |
| 3010 | + // Flip horizontal and rotate right 90° | |
| 3011 | + case 7: | |
| 3012 | + rotate = 90; | |
| 3013 | + scaleX = -1; | |
| 3014 | + break; | |
| 3015 | + | |
| 3016 | + // Rotate left 90° | |
| 3017 | + case 8: | |
| 3018 | + rotate = -90; | |
| 3019 | + break; | |
| 3020 | + } | |
| 3021 | + return { | |
| 3022 | + rotate: rotate, | |
| 3023 | + scaleX: scaleX, | |
| 3024 | + scaleY: scaleY | |
| 3025 | + }; | |
| 3026 | + } | |
| 3027 | + | |
| 3028 | + var render = { | |
| 3029 | + render: function render() { | |
| 3030 | + this.initContainer(); | |
| 3031 | + this.initCanvas(); | |
| 3032 | + this.initCropBox(); | |
| 3033 | + this.renderCanvas(); | |
| 3034 | + if (this.cropped) { | |
| 3035 | + this.renderCropBox(); | |
| 3036 | + } | |
| 3037 | + }, | |
| 3038 | + initContainer: function initContainer() { | |
| 3039 | + var element = this.element, | |
| 3040 | + options = this.options, | |
| 3041 | + container = this.container, | |
| 3042 | + cropper = this.cropper; | |
| 3043 | + var minWidth = Number(options.minContainerWidth); | |
| 3044 | + var minHeight = Number(options.minContainerHeight); | |
| 3045 | + addClass(cropper, CLASS_HIDDEN); | |
| 3046 | + removeClass(element, CLASS_HIDDEN); | |
| 3047 | + var containerData = { | |
| 3048 | + width: Math.max(container.offsetWidth, minWidth >= 0 ? minWidth : MIN_CONTAINER_WIDTH), | |
| 3049 | + height: Math.max(container.offsetHeight, minHeight >= 0 ? minHeight : MIN_CONTAINER_HEIGHT) | |
| 3050 | + }; | |
| 3051 | + this.containerData = containerData; | |
| 3052 | + setStyle(cropper, { | |
| 3053 | + width: containerData.width, | |
| 3054 | + height: containerData.height | |
| 3055 | + }); | |
| 3056 | + addClass(element, CLASS_HIDDEN); | |
| 3057 | + removeClass(cropper, CLASS_HIDDEN); | |
| 3058 | + }, | |
| 3059 | + // Canvas (image wrapper) | |
| 3060 | + initCanvas: function initCanvas() { | |
| 3061 | + var containerData = this.containerData, | |
| 3062 | + imageData = this.imageData; | |
| 3063 | + var viewMode = this.options.viewMode; | |
| 3064 | + var rotated = Math.abs(imageData.rotate) % 180 === 90; | |
| 3065 | + var naturalWidth = rotated ? imageData.naturalHeight : imageData.naturalWidth; | |
| 3066 | + var naturalHeight = rotated ? imageData.naturalWidth : imageData.naturalHeight; | |
| 3067 | + var aspectRatio = naturalWidth / naturalHeight; | |
| 3068 | + var canvasWidth = containerData.width; | |
| 3069 | + var canvasHeight = containerData.height; | |
| 3070 | + if (containerData.height * aspectRatio > containerData.width) { | |
| 3071 | + if (viewMode === 3) { | |
| 3072 | + canvasWidth = containerData.height * aspectRatio; | |
| 3073 | + } else { | |
| 3074 | + canvasHeight = containerData.width / aspectRatio; | |
| 3075 | + } | |
| 3076 | + } else if (viewMode === 3) { | |
| 3077 | + canvasHeight = containerData.width / aspectRatio; | |
| 3078 | + } else { | |
| 3079 | + canvasWidth = containerData.height * aspectRatio; | |
| 3080 | + } | |
| 3081 | + var canvasData = { | |
| 3082 | + aspectRatio: aspectRatio, | |
| 3083 | + naturalWidth: naturalWidth, | |
| 3084 | + naturalHeight: naturalHeight, | |
| 3085 | + width: canvasWidth, | |
| 3086 | + height: canvasHeight | |
| 3087 | + }; | |
| 3088 | + this.canvasData = canvasData; | |
| 3089 | + this.limited = viewMode === 1 || viewMode === 2; | |
| 3090 | + this.limitCanvas(true, true); | |
| 3091 | + canvasData.width = Math.min(Math.max(canvasData.width, canvasData.minWidth), canvasData.maxWidth); | |
| 3092 | + canvasData.height = Math.min(Math.max(canvasData.height, canvasData.minHeight), canvasData.maxHeight); | |
| 3093 | + canvasData.left = (containerData.width - canvasData.width) / 2; | |
| 3094 | + canvasData.top = (containerData.height - canvasData.height) / 2; | |
| 3095 | + canvasData.oldLeft = canvasData.left; | |
| 3096 | + canvasData.oldTop = canvasData.top; | |
| 3097 | + this.initialCanvasData = assign({}, canvasData); | |
| 3098 | + }, | |
| 3099 | + limitCanvas: function limitCanvas(sizeLimited, positionLimited) { | |
| 3100 | + var options = this.options, | |
| 3101 | + containerData = this.containerData, | |
| 3102 | + canvasData = this.canvasData, | |
| 3103 | + cropBoxData = this.cropBoxData; | |
| 3104 | + var viewMode = options.viewMode; | |
| 3105 | + var aspectRatio = canvasData.aspectRatio; | |
| 3106 | + var cropped = this.cropped && cropBoxData; | |
| 3107 | + if (sizeLimited) { | |
| 3108 | + var minCanvasWidth = Number(options.minCanvasWidth) || 0; | |
| 3109 | + var minCanvasHeight = Number(options.minCanvasHeight) || 0; | |
| 3110 | + if (viewMode > 1) { | |
| 3111 | + minCanvasWidth = Math.max(minCanvasWidth, containerData.width); | |
| 3112 | + minCanvasHeight = Math.max(minCanvasHeight, containerData.height); | |
| 3113 | + if (viewMode === 3) { | |
| 3114 | + if (minCanvasHeight * aspectRatio > minCanvasWidth) { | |
| 3115 | + minCanvasWidth = minCanvasHeight * aspectRatio; | |
| 3116 | + } else { | |
| 3117 | + minCanvasHeight = minCanvasWidth / aspectRatio; | |
| 3118 | + } | |
| 3119 | + } | |
| 3120 | + } else if (viewMode > 0) { | |
| 3121 | + if (minCanvasWidth) { | |
| 3122 | + minCanvasWidth = Math.max(minCanvasWidth, cropped ? cropBoxData.width : 0); | |
| 3123 | + } else if (minCanvasHeight) { | |
| 3124 | + minCanvasHeight = Math.max(minCanvasHeight, cropped ? cropBoxData.height : 0); | |
| 3125 | + } else if (cropped) { | |
| 3126 | + minCanvasWidth = cropBoxData.width; | |
| 3127 | + minCanvasHeight = cropBoxData.height; | |
| 3128 | + if (minCanvasHeight * aspectRatio > minCanvasWidth) { | |
| 3129 | + minCanvasWidth = minCanvasHeight * aspectRatio; | |
| 3130 | + } else { | |
| 3131 | + minCanvasHeight = minCanvasWidth / aspectRatio; | |
| 3132 | + } | |
| 3133 | + } | |
| 3134 | + } | |
| 3135 | + var _getAdjustedSizes = getAdjustedSizes({ | |
| 3136 | + aspectRatio: aspectRatio, | |
| 3137 | + width: minCanvasWidth, | |
| 3138 | + height: minCanvasHeight | |
| 3139 | + }); | |
| 3140 | + minCanvasWidth = _getAdjustedSizes.width; | |
| 3141 | + minCanvasHeight = _getAdjustedSizes.height; | |
| 3142 | + canvasData.minWidth = minCanvasWidth; | |
| 3143 | + canvasData.minHeight = minCanvasHeight; | |
| 3144 | + canvasData.maxWidth = Infinity; | |
| 3145 | + canvasData.maxHeight = Infinity; | |
| 3146 | + } | |
| 3147 | + if (positionLimited) { | |
| 3148 | + if (viewMode > (cropped ? 0 : 1)) { | |
| 3149 | + var newCanvasLeft = containerData.width - canvasData.width; | |
| 3150 | + var newCanvasTop = containerData.height - canvasData.height; | |
| 3151 | + canvasData.minLeft = Math.min(0, newCanvasLeft); | |
| 3152 | + canvasData.minTop = Math.min(0, newCanvasTop); | |
| 3153 | + canvasData.maxLeft = Math.max(0, newCanvasLeft); | |
| 3154 | + canvasData.maxTop = Math.max(0, newCanvasTop); | |
| 3155 | + if (cropped && this.limited) { | |
| 3156 | + canvasData.minLeft = Math.min(cropBoxData.left, cropBoxData.left + (cropBoxData.width - canvasData.width)); | |
| 3157 | + canvasData.minTop = Math.min(cropBoxData.top, cropBoxData.top + (cropBoxData.height - canvasData.height)); | |
| 3158 | + canvasData.maxLeft = cropBoxData.left; | |
| 3159 | + canvasData.maxTop = cropBoxData.top; | |
| 3160 | + if (viewMode === 2) { | |
| 3161 | + if (canvasData.width >= containerData.width) { | |
| 3162 | + canvasData.minLeft = Math.min(0, newCanvasLeft); | |
| 3163 | + canvasData.maxLeft = Math.max(0, newCanvasLeft); | |
| 3164 | + } | |
| 3165 | + if (canvasData.height >= containerData.height) { | |
| 3166 | + canvasData.minTop = Math.min(0, newCanvasTop); | |
| 3167 | + canvasData.maxTop = Math.max(0, newCanvasTop); | |
| 3168 | + } | |
| 3169 | + } | |
| 3170 | + } | |
| 3171 | + } else { | |
| 3172 | + canvasData.minLeft = -canvasData.width; | |
| 3173 | + canvasData.minTop = -canvasData.height; | |
| 3174 | + canvasData.maxLeft = containerData.width; | |
| 3175 | + canvasData.maxTop = containerData.height; | |
| 3176 | + } | |
| 3177 | + } | |
| 3178 | + }, | |
| 3179 | + renderCanvas: function renderCanvas(changed, transformed) { | |
| 3180 | + var canvasData = this.canvasData, | |
| 3181 | + imageData = this.imageData; | |
| 3182 | + if (transformed) { | |
| 3183 | + var _getRotatedSizes = getRotatedSizes({ | |
| 3184 | + width: imageData.naturalWidth * Math.abs(imageData.scaleX || 1), | |
| 3185 | + height: imageData.naturalHeight * Math.abs(imageData.scaleY || 1), | |
| 3186 | + degree: imageData.rotate || 0 | |
| 3187 | + }), | |
| 3188 | + naturalWidth = _getRotatedSizes.width, | |
| 3189 | + naturalHeight = _getRotatedSizes.height; | |
| 3190 | + var width = canvasData.width * (naturalWidth / canvasData.naturalWidth); | |
| 3191 | + var height = canvasData.height * (naturalHeight / canvasData.naturalHeight); | |
| 3192 | + canvasData.left -= (width - canvasData.width) / 2; | |
| 3193 | + canvasData.top -= (height - canvasData.height) / 2; | |
| 3194 | + canvasData.width = width; | |
| 3195 | + canvasData.height = height; | |
| 3196 | + canvasData.aspectRatio = naturalWidth / naturalHeight; | |
| 3197 | + canvasData.naturalWidth = naturalWidth; | |
| 3198 | + canvasData.naturalHeight = naturalHeight; | |
| 3199 | + this.limitCanvas(true, false); | |
| 3200 | + } | |
| 3201 | + if (canvasData.width > canvasData.maxWidth || canvasData.width < canvasData.minWidth) { | |
| 3202 | + canvasData.left = canvasData.oldLeft; | |
| 3203 | + } | |
| 3204 | + if (canvasData.height > canvasData.maxHeight || canvasData.height < canvasData.minHeight) { | |
| 3205 | + canvasData.top = canvasData.oldTop; | |
| 3206 | + } | |
| 3207 | + canvasData.width = Math.min(Math.max(canvasData.width, canvasData.minWidth), canvasData.maxWidth); | |
| 3208 | + canvasData.height = Math.min(Math.max(canvasData.height, canvasData.minHeight), canvasData.maxHeight); | |
| 3209 | + this.limitCanvas(false, true); | |
| 3210 | + canvasData.left = Math.min(Math.max(canvasData.left, canvasData.minLeft), canvasData.maxLeft); | |
| 3211 | + canvasData.top = Math.min(Math.max(canvasData.top, canvasData.minTop), canvasData.maxTop); | |
| 3212 | + canvasData.oldLeft = canvasData.left; | |
| 3213 | + canvasData.oldTop = canvasData.top; | |
| 3214 | + setStyle(this.canvas, assign({ | |
| 3215 | + width: canvasData.width, | |
| 3216 | + height: canvasData.height | |
| 3217 | + }, getTransforms({ | |
| 3218 | + translateX: canvasData.left, | |
| 3219 | + translateY: canvasData.top | |
| 3220 | + }))); | |
| 3221 | + this.renderImage(changed); | |
| 3222 | + if (this.cropped && this.limited) { | |
| 3223 | + this.limitCropBox(true, true); | |
| 3224 | + } | |
| 3225 | + }, | |
| 3226 | + renderImage: function renderImage(changed) { | |
| 3227 | + var canvasData = this.canvasData, | |
| 3228 | + imageData = this.imageData; | |
| 3229 | + var width = imageData.naturalWidth * (canvasData.width / canvasData.naturalWidth); | |
| 3230 | + var height = imageData.naturalHeight * (canvasData.height / canvasData.naturalHeight); | |
| 3231 | + assign(imageData, { | |
| 3232 | + width: width, | |
| 3233 | + height: height, | |
| 3234 | + left: (canvasData.width - width) / 2, | |
| 3235 | + top: (canvasData.height - height) / 2 | |
| 3236 | + }); | |
| 3237 | + setStyle(this.image, assign({ | |
| 3238 | + width: imageData.width, | |
| 3239 | + height: imageData.height | |
| 3240 | + }, getTransforms(assign({ | |
| 3241 | + translateX: imageData.left, | |
| 3242 | + translateY: imageData.top | |
| 3243 | + }, imageData)))); | |
| 3244 | + if (changed) { | |
| 3245 | + this.output(); | |
| 3246 | + } | |
| 3247 | + }, | |
| 3248 | + initCropBox: function initCropBox() { | |
| 3249 | + var options = this.options, | |
| 3250 | + canvasData = this.canvasData; | |
| 3251 | + var aspectRatio = options.aspectRatio || options.initialAspectRatio; | |
| 3252 | + var autoCropArea = Number(options.autoCropArea) || 0.8; | |
| 3253 | + var cropBoxData = { | |
| 3254 | + width: canvasData.width, | |
| 3255 | + height: canvasData.height | |
| 3256 | + }; | |
| 3257 | + if (aspectRatio) { | |
| 3258 | + if (canvasData.height * aspectRatio > canvasData.width) { | |
| 3259 | + cropBoxData.height = cropBoxData.width / aspectRatio; | |
| 3260 | + } else { | |
| 3261 | + cropBoxData.width = cropBoxData.height * aspectRatio; | |
| 3262 | + } | |
| 3263 | + } | |
| 3264 | + this.cropBoxData = cropBoxData; | |
| 3265 | + this.limitCropBox(true, true); | |
| 3266 | + | |
| 3267 | + // Initialize auto crop area | |
| 3268 | + cropBoxData.width = Math.min(Math.max(cropBoxData.width, cropBoxData.minWidth), cropBoxData.maxWidth); | |
| 3269 | + cropBoxData.height = Math.min(Math.max(cropBoxData.height, cropBoxData.minHeight), cropBoxData.maxHeight); | |
| 3270 | + | |
| 3271 | + // The width/height of auto crop area must large than "minWidth/Height" | |
| 3272 | + cropBoxData.width = Math.max(cropBoxData.minWidth, cropBoxData.width * autoCropArea); | |
| 3273 | + cropBoxData.height = Math.max(cropBoxData.minHeight, cropBoxData.height * autoCropArea); | |
| 3274 | + cropBoxData.left = canvasData.left + (canvasData.width - cropBoxData.width) / 2; | |
| 3275 | + cropBoxData.top = canvasData.top + (canvasData.height - cropBoxData.height) / 2; | |
| 3276 | + cropBoxData.oldLeft = cropBoxData.left; | |
| 3277 | + cropBoxData.oldTop = cropBoxData.top; | |
| 3278 | + this.initialCropBoxData = assign({}, cropBoxData); | |
| 3279 | + }, | |
| 3280 | + limitCropBox: function limitCropBox(sizeLimited, positionLimited) { | |
| 3281 | + var options = this.options, | |
| 3282 | + containerData = this.containerData, | |
| 3283 | + canvasData = this.canvasData, | |
| 3284 | + cropBoxData = this.cropBoxData, | |
| 3285 | + limited = this.limited; | |
| 3286 | + var aspectRatio = options.aspectRatio; | |
| 3287 | + if (sizeLimited) { | |
| 3288 | + var minCropBoxWidth = Number(options.minCropBoxWidth) || 0; | |
| 3289 | + var minCropBoxHeight = Number(options.minCropBoxHeight) || 0; | |
| 3290 | + var maxCropBoxWidth = limited ? Math.min(containerData.width, canvasData.width, canvasData.width + canvasData.left, containerData.width - canvasData.left) : containerData.width; | |
| 3291 | + var maxCropBoxHeight = limited ? Math.min(containerData.height, canvasData.height, canvasData.height + canvasData.top, containerData.height - canvasData.top) : containerData.height; | |
| 3292 | + | |
| 3293 | + // The min/maxCropBoxWidth/Height must be less than container's width/height | |
| 3294 | + minCropBoxWidth = Math.min(minCropBoxWidth, containerData.width); | |
| 3295 | + minCropBoxHeight = Math.min(minCropBoxHeight, containerData.height); | |
| 3296 | + if (aspectRatio) { | |
| 3297 | + if (minCropBoxWidth && minCropBoxHeight) { | |
| 3298 | + if (minCropBoxHeight * aspectRatio > minCropBoxWidth) { | |
| 3299 | + minCropBoxHeight = minCropBoxWidth / aspectRatio; | |
| 3300 | + } else { | |
| 3301 | + minCropBoxWidth = minCropBoxHeight * aspectRatio; | |
| 3302 | + } | |
| 3303 | + } else if (minCropBoxWidth) { | |
| 3304 | + minCropBoxHeight = minCropBoxWidth / aspectRatio; | |
| 3305 | + } else if (minCropBoxHeight) { | |
| 3306 | + minCropBoxWidth = minCropBoxHeight * aspectRatio; | |
| 3307 | + } | |
| 3308 | + if (maxCropBoxHeight * aspectRatio > maxCropBoxWidth) { | |
| 3309 | + maxCropBoxHeight = maxCropBoxWidth / aspectRatio; | |
| 3310 | + } else { | |
| 3311 | + maxCropBoxWidth = maxCropBoxHeight * aspectRatio; | |
| 3312 | + } | |
| 3313 | + } | |
| 3314 | + | |
| 3315 | + // The minWidth/Height must be less than maxWidth/Height | |
| 3316 | + cropBoxData.minWidth = Math.min(minCropBoxWidth, maxCropBoxWidth); | |
| 3317 | + cropBoxData.minHeight = Math.min(minCropBoxHeight, maxCropBoxHeight); | |
| 3318 | + cropBoxData.maxWidth = maxCropBoxWidth; | |
| 3319 | + cropBoxData.maxHeight = maxCropBoxHeight; | |
| 3320 | + } | |
| 3321 | + if (positionLimited) { | |
| 3322 | + if (limited) { | |
| 3323 | + cropBoxData.minLeft = Math.max(0, canvasData.left); | |
| 3324 | + cropBoxData.minTop = Math.max(0, canvasData.top); | |
| 3325 | + cropBoxData.maxLeft = Math.min(containerData.width, canvasData.left + canvasData.width) - cropBoxData.width; | |
| 3326 | + cropBoxData.maxTop = Math.min(containerData.height, canvasData.top + canvasData.height) - cropBoxData.height; | |
| 3327 | + } else { | |
| 3328 | + cropBoxData.minLeft = 0; | |
| 3329 | + cropBoxData.minTop = 0; | |
| 3330 | + cropBoxData.maxLeft = containerData.width - cropBoxData.width; | |
| 3331 | + cropBoxData.maxTop = containerData.height - cropBoxData.height; | |
| 3332 | + } | |
| 3333 | + } | |
| 3334 | + }, | |
| 3335 | + renderCropBox: function renderCropBox() { | |
| 3336 | + var options = this.options, | |
| 3337 | + containerData = this.containerData, | |
| 3338 | + cropBoxData = this.cropBoxData; | |
| 3339 | + if (cropBoxData.width > cropBoxData.maxWidth || cropBoxData.width < cropBoxData.minWidth) { | |
| 3340 | + cropBoxData.left = cropBoxData.oldLeft; | |
| 3341 | + } | |
| 3342 | + if (cropBoxData.height > cropBoxData.maxHeight || cropBoxData.height < cropBoxData.minHeight) { | |
| 3343 | + cropBoxData.top = cropBoxData.oldTop; | |
| 3344 | + } | |
| 3345 | + cropBoxData.width = Math.min(Math.max(cropBoxData.width, cropBoxData.minWidth), cropBoxData.maxWidth); | |
| 3346 | + cropBoxData.height = Math.min(Math.max(cropBoxData.height, cropBoxData.minHeight), cropBoxData.maxHeight); | |
| 3347 | + this.limitCropBox(false, true); | |
| 3348 | + cropBoxData.left = Math.min(Math.max(cropBoxData.left, cropBoxData.minLeft), cropBoxData.maxLeft); | |
| 3349 | + cropBoxData.top = Math.min(Math.max(cropBoxData.top, cropBoxData.minTop), cropBoxData.maxTop); | |
| 3350 | + cropBoxData.oldLeft = cropBoxData.left; | |
| 3351 | + cropBoxData.oldTop = cropBoxData.top; | |
| 3352 | + if (options.movable && options.cropBoxMovable) { | |
| 3353 | + // Turn to move the canvas when the crop box is equal to the container | |
| 3354 | + setData(this.face, DATA_ACTION, cropBoxData.width >= containerData.width && cropBoxData.height >= containerData.height ? ACTION_MOVE : ACTION_ALL); | |
| 3355 | + } | |
| 3356 | + setStyle(this.cropBox, assign({ | |
| 3357 | + width: cropBoxData.width, | |
| 3358 | + height: cropBoxData.height | |
| 3359 | + }, getTransforms({ | |
| 3360 | + translateX: cropBoxData.left, | |
| 3361 | + translateY: cropBoxData.top | |
| 3362 | + }))); | |
| 3363 | + if (this.cropped && this.limited) { | |
| 3364 | + this.limitCanvas(true, true); | |
| 3365 | + } | |
| 3366 | + if (!this.disabled) { | |
| 3367 | + this.output(); | |
| 3368 | + } | |
| 3369 | + }, | |
| 3370 | + output: function output() { | |
| 3371 | + this.preview(); | |
| 3372 | + dispatchEvent(this.element, EVENT_CROP, this.getData()); | |
| 3373 | + } | |
| 3374 | + }; | |
| 3375 | + | |
| 3376 | + var preview = { | |
| 3377 | + initPreview: function initPreview() { | |
| 3378 | + var element = this.element, | |
| 3379 | + crossOrigin = this.crossOrigin; | |
| 3380 | + var preview = this.options.preview; | |
| 3381 | + var url = crossOrigin ? this.crossOriginUrl : this.url; | |
| 3382 | + var alt = element.alt || 'The image to preview'; | |
| 3383 | + var image = document.createElement('img'); | |
| 3384 | + if (crossOrigin) { | |
| 3385 | + image.crossOrigin = crossOrigin; | |
| 3386 | + } | |
| 3387 | + image.src = url; | |
| 3388 | + image.alt = alt; | |
| 3389 | + this.viewBox.appendChild(image); | |
| 3390 | + this.viewBoxImage = image; | |
| 3391 | + if (!preview) { | |
| 3392 | + return; | |
| 3393 | + } | |
| 3394 | + var previews = preview; | |
| 3395 | + if (typeof preview === 'string') { | |
| 3396 | + previews = element.ownerDocument.querySelectorAll(preview); | |
| 3397 | + } else if (preview.querySelector) { | |
| 3398 | + previews = [preview]; | |
| 3399 | + } | |
| 3400 | + this.previews = previews; | |
| 3401 | + forEach(previews, function (el) { | |
| 3402 | + var img = document.createElement('img'); | |
| 3403 | + | |
| 3404 | + // Save the original size for recover | |
| 3405 | + setData(el, DATA_PREVIEW, { | |
| 3406 | + width: el.offsetWidth, | |
| 3407 | + height: el.offsetHeight, | |
| 3408 | + html: el.innerHTML | |
| 3409 | + }); | |
| 3410 | + if (crossOrigin) { | |
| 3411 | + img.crossOrigin = crossOrigin; | |
| 3412 | + } | |
| 3413 | + img.src = url; | |
| 3414 | + img.alt = alt; | |
| 3415 | + | |
| 3416 | + /** | |
| 3417 | + * Override img element styles | |
| 3418 | + * Add `display:block` to avoid margin top issue | |
| 3419 | + * Add `height:auto` to override `height` attribute on IE8 | |
| 3420 | + * (Occur only when margin-top <= -height) | |
| 3421 | + */ | |
| 3422 | + img.style.cssText = 'display:block;' + 'width:100%;' + 'height:auto;' + 'min-width:0!important;' + 'min-height:0!important;' + 'max-width:none!important;' + 'max-height:none!important;' + 'image-orientation:0deg!important;"'; | |
| 3423 | + el.innerHTML = ''; | |
| 3424 | + el.appendChild(img); | |
| 3425 | + }); | |
| 3426 | + }, | |
| 3427 | + resetPreview: function resetPreview() { | |
| 3428 | + forEach(this.previews, function (element) { | |
| 3429 | + var data = getData(element, DATA_PREVIEW); | |
| 3430 | + setStyle(element, { | |
| 3431 | + width: data.width, | |
| 3432 | + height: data.height | |
| 3433 | + }); | |
| 3434 | + element.innerHTML = data.html; | |
| 3435 | + removeData(element, DATA_PREVIEW); | |
| 3436 | + }); | |
| 3437 | + }, | |
| 3438 | + preview: function preview() { | |
| 3439 | + var imageData = this.imageData, | |
| 3440 | + canvasData = this.canvasData, | |
| 3441 | + cropBoxData = this.cropBoxData; | |
| 3442 | + var cropBoxWidth = cropBoxData.width, | |
| 3443 | + cropBoxHeight = cropBoxData.height; | |
| 3444 | + var width = imageData.width, | |
| 3445 | + height = imageData.height; | |
| 3446 | + var left = cropBoxData.left - canvasData.left - imageData.left; | |
| 3447 | + var top = cropBoxData.top - canvasData.top - imageData.top; | |
| 3448 | + if (!this.cropped || this.disabled) { | |
| 3449 | + return; | |
| 3450 | + } | |
| 3451 | + setStyle(this.viewBoxImage, assign({ | |
| 3452 | + width: width, | |
| 3453 | + height: height | |
| 3454 | + }, getTransforms(assign({ | |
| 3455 | + translateX: -left, | |
| 3456 | + translateY: -top | |
| 3457 | + }, imageData)))); | |
| 3458 | + forEach(this.previews, function (element) { | |
| 3459 | + var data = getData(element, DATA_PREVIEW); | |
| 3460 | + var originalWidth = data.width; | |
| 3461 | + var originalHeight = data.height; | |
| 3462 | + var newWidth = originalWidth; | |
| 3463 | + var newHeight = originalHeight; | |
| 3464 | + var ratio = 1; | |
| 3465 | + if (cropBoxWidth) { | |
| 3466 | + ratio = originalWidth / cropBoxWidth; | |
| 3467 | + newHeight = cropBoxHeight * ratio; | |
| 3468 | + } | |
| 3469 | + if (cropBoxHeight && newHeight > originalHeight) { | |
| 3470 | + ratio = originalHeight / cropBoxHeight; | |
| 3471 | + newWidth = cropBoxWidth * ratio; | |
| 3472 | + newHeight = originalHeight; | |
| 3473 | + } | |
| 3474 | + setStyle(element, { | |
| 3475 | + width: newWidth, | |
| 3476 | + height: newHeight | |
| 3477 | + }); | |
| 3478 | + setStyle(element.getElementsByTagName('img')[0], assign({ | |
| 3479 | + width: width * ratio, | |
| 3480 | + height: height * ratio | |
| 3481 | + }, getTransforms(assign({ | |
| 3482 | + translateX: -left * ratio, | |
| 3483 | + translateY: -top * ratio | |
| 3484 | + }, imageData)))); | |
| 3485 | + }); | |
| 3486 | + } | |
| 3487 | + }; | |
| 3488 | + | |
| 3489 | + var events = { | |
| 3490 | + bind: function bind() { | |
| 3491 | + var element = this.element, | |
| 3492 | + options = this.options, | |
| 3493 | + cropper = this.cropper; | |
| 3494 | + if (isFunction(options.cropstart)) { | |
| 3495 | + addListener(element, EVENT_CROP_START, options.cropstart); | |
| 3496 | + } | |
| 3497 | + if (isFunction(options.cropmove)) { | |
| 3498 | + addListener(element, EVENT_CROP_MOVE, options.cropmove); | |
| 3499 | + } | |
| 3500 | + if (isFunction(options.cropend)) { | |
| 3501 | + addListener(element, EVENT_CROP_END, options.cropend); | |
| 3502 | + } | |
| 3503 | + if (isFunction(options.crop)) { | |
| 3504 | + addListener(element, EVENT_CROP, options.crop); | |
| 3505 | + } | |
| 3506 | + if (isFunction(options.zoom)) { | |
| 3507 | + addListener(element, EVENT_ZOOM, options.zoom); | |
| 3508 | + } | |
| 3509 | + addListener(cropper, EVENT_POINTER_DOWN, this.onCropStart = this.cropStart.bind(this)); | |
| 3510 | + if (options.zoomable && options.zoomOnWheel) { | |
| 3511 | + addListener(cropper, EVENT_WHEEL, this.onWheel = this.wheel.bind(this), { | |
| 3512 | + passive: false, | |
| 3513 | + capture: true | |
| 3514 | + }); | |
| 3515 | + } | |
| 3516 | + if (options.toggleDragModeOnDblclick) { | |
| 3517 | + addListener(cropper, EVENT_DBLCLICK, this.onDblclick = this.dblclick.bind(this)); | |
| 3518 | + } | |
| 3519 | + addListener(element.ownerDocument, EVENT_POINTER_MOVE, this.onCropMove = this.cropMove.bind(this)); | |
| 3520 | + addListener(element.ownerDocument, EVENT_POINTER_UP, this.onCropEnd = this.cropEnd.bind(this)); | |
| 3521 | + if (options.responsive) { | |
| 3522 | + addListener(window, EVENT_RESIZE, this.onResize = this.resize.bind(this)); | |
| 3523 | + } | |
| 3524 | + }, | |
| 3525 | + unbind: function unbind() { | |
| 3526 | + var element = this.element, | |
| 3527 | + options = this.options, | |
| 3528 | + cropper = this.cropper; | |
| 3529 | + if (isFunction(options.cropstart)) { | |
| 3530 | + removeListener(element, EVENT_CROP_START, options.cropstart); | |
| 3531 | + } | |
| 3532 | + if (isFunction(options.cropmove)) { | |
| 3533 | + removeListener(element, EVENT_CROP_MOVE, options.cropmove); | |
| 3534 | + } | |
| 3535 | + if (isFunction(options.cropend)) { | |
| 3536 | + removeListener(element, EVENT_CROP_END, options.cropend); | |
| 3537 | + } | |
| 3538 | + if (isFunction(options.crop)) { | |
| 3539 | + removeListener(element, EVENT_CROP, options.crop); | |
| 3540 | + } | |
| 3541 | + if (isFunction(options.zoom)) { | |
| 3542 | + removeListener(element, EVENT_ZOOM, options.zoom); | |
| 3543 | + } | |
| 3544 | + removeListener(cropper, EVENT_POINTER_DOWN, this.onCropStart); | |
| 3545 | + if (options.zoomable && options.zoomOnWheel) { | |
| 3546 | + removeListener(cropper, EVENT_WHEEL, this.onWheel, { | |
| 3547 | + passive: false, | |
| 3548 | + capture: true | |
| 3549 | + }); | |
| 3550 | + } | |
| 3551 | + if (options.toggleDragModeOnDblclick) { | |
| 3552 | + removeListener(cropper, EVENT_DBLCLICK, this.onDblclick); | |
| 3553 | + } | |
| 3554 | + removeListener(element.ownerDocument, EVENT_POINTER_MOVE, this.onCropMove); | |
| 3555 | + removeListener(element.ownerDocument, EVENT_POINTER_UP, this.onCropEnd); | |
| 3556 | + if (options.responsive) { | |
| 3557 | + removeListener(window, EVENT_RESIZE, this.onResize); | |
| 3558 | + } | |
| 3559 | + } | |
| 3560 | + }; | |
| 3561 | + | |
| 3562 | + var handlers = { | |
| 3563 | + resize: function resize() { | |
| 3564 | + if (this.disabled) { | |
| 3565 | + return; | |
| 3566 | + } | |
| 3567 | + var options = this.options, | |
| 3568 | + container = this.container, | |
| 3569 | + containerData = this.containerData; | |
| 3570 | + var ratioX = container.offsetWidth / containerData.width; | |
| 3571 | + var ratioY = container.offsetHeight / containerData.height; | |
| 3572 | + var ratio = Math.abs(ratioX - 1) > Math.abs(ratioY - 1) ? ratioX : ratioY; | |
| 3573 | + | |
| 3574 | + // Resize when width changed or height changed | |
| 3575 | + if (ratio !== 1) { | |
| 3576 | + var canvasData; | |
| 3577 | + var cropBoxData; | |
| 3578 | + if (options.restore) { | |
| 3579 | + canvasData = this.getCanvasData(); | |
| 3580 | + cropBoxData = this.getCropBoxData(); | |
| 3581 | + } | |
| 3582 | + this.render(); | |
| 3583 | + if (options.restore) { | |
| 3584 | + this.setCanvasData(forEach(canvasData, function (n, i) { | |
| 3585 | + canvasData[i] = n * ratio; | |
| 3586 | + })); | |
| 3587 | + this.setCropBoxData(forEach(cropBoxData, function (n, i) { | |
| 3588 | + cropBoxData[i] = n * ratio; | |
| 3589 | + })); | |
| 3590 | + } | |
| 3591 | + } | |
| 3592 | + }, | |
| 3593 | + dblclick: function dblclick() { | |
| 3594 | + if (this.disabled || this.options.dragMode === DRAG_MODE_NONE) { | |
| 3595 | + return; | |
| 3596 | + } | |
| 3597 | + this.setDragMode(hasClass(this.dragBox, CLASS_CROP) ? DRAG_MODE_MOVE : DRAG_MODE_CROP); | |
| 3598 | + }, | |
| 3599 | + wheel: function wheel(event) { | |
| 3600 | + var _this = this; | |
| 3601 | + var ratio = Number(this.options.wheelZoomRatio) || 0.1; | |
| 3602 | + var delta = 1; | |
| 3603 | + if (this.disabled) { | |
| 3604 | + return; | |
| 3605 | + } | |
| 3606 | + event.preventDefault(); | |
| 3607 | + | |
| 3608 | + // Limit wheel speed to prevent zoom too fast (#21) | |
| 3609 | + if (this.wheeling) { | |
| 3610 | + return; | |
| 3611 | + } | |
| 3612 | + this.wheeling = true; | |
| 3613 | + setTimeout(function () { | |
| 3614 | + _this.wheeling = false; | |
| 3615 | + }, 50); | |
| 3616 | + if (event.deltaY) { | |
| 3617 | + delta = event.deltaY > 0 ? 1 : -1; | |
| 3618 | + } else if (event.wheelDelta) { | |
| 3619 | + delta = -event.wheelDelta / 120; | |
| 3620 | + } else if (event.detail) { | |
| 3621 | + delta = event.detail > 0 ? 1 : -1; | |
| 3622 | + } | |
| 3623 | + this.zoom(-delta * ratio, event); | |
| 3624 | + }, | |
| 3625 | + cropStart: function cropStart(event) { | |
| 3626 | + var buttons = event.buttons, | |
| 3627 | + button = event.button; | |
| 3628 | + if (this.disabled | |
| 3629 | + | |
| 3630 | + // Handle mouse event and pointer event and ignore touch event | |
| 3631 | + || (event.type === 'mousedown' || event.type === 'pointerdown' && event.pointerType === 'mouse') && ( | |
| 3632 | + // No primary button (Usually the left button) | |
| 3633 | + isNumber(buttons) && buttons !== 1 || isNumber(button) && button !== 0 | |
| 3634 | + | |
| 3635 | + // Open context menu | |
| 3636 | + || event.ctrlKey)) { | |
| 3637 | + return; | |
| 3638 | + } | |
| 3639 | + var options = this.options, | |
| 3640 | + pointers = this.pointers; | |
| 3641 | + var action; | |
| 3642 | + if (event.changedTouches) { | |
| 3643 | + // Handle touch event | |
| 3644 | + forEach(event.changedTouches, function (touch) { | |
| 3645 | + pointers[touch.identifier] = getPointer(touch); | |
| 3646 | + }); | |
| 3647 | + } else { | |
| 3648 | + // Handle mouse event and pointer event | |
| 3649 | + pointers[event.pointerId || 0] = getPointer(event); | |
| 3650 | + } | |
| 3651 | + if (Object.keys(pointers).length > 1 && options.zoomable && options.zoomOnTouch) { | |
| 3652 | + action = ACTION_ZOOM; | |
| 3653 | + } else { | |
| 3654 | + action = getData(event.target, DATA_ACTION); | |
| 3655 | + } | |
| 3656 | + if (!REGEXP_ACTIONS.test(action)) { | |
| 3657 | + return; | |
| 3658 | + } | |
| 3659 | + if (dispatchEvent(this.element, EVENT_CROP_START, { | |
| 3660 | + originalEvent: event, | |
| 3661 | + action: action | |
| 3662 | + }) === false) { | |
| 3663 | + return; | |
| 3664 | + } | |
| 3665 | + | |
| 3666 | + // This line is required for preventing page zooming in iOS browsers | |
| 3667 | + event.preventDefault(); | |
| 3668 | + this.action = action; | |
| 3669 | + this.cropping = false; | |
| 3670 | + if (action === ACTION_CROP) { | |
| 3671 | + this.cropping = true; | |
| 3672 | + addClass(this.dragBox, CLASS_MODAL); | |
| 3673 | + } | |
| 3674 | + }, | |
| 3675 | + cropMove: function cropMove(event) { | |
| 3676 | + var action = this.action; | |
| 3677 | + if (this.disabled || !action) { | |
| 3678 | + return; | |
| 3679 | + } | |
| 3680 | + var pointers = this.pointers; | |
| 3681 | + event.preventDefault(); | |
| 3682 | + if (dispatchEvent(this.element, EVENT_CROP_MOVE, { | |
| 3683 | + originalEvent: event, | |
| 3684 | + action: action | |
| 3685 | + }) === false) { | |
| 3686 | + return; | |
| 3687 | + } | |
| 3688 | + if (event.changedTouches) { | |
| 3689 | + forEach(event.changedTouches, function (touch) { | |
| 3690 | + // The first parameter should not be undefined (#432) | |
| 3691 | + assign(pointers[touch.identifier] || {}, getPointer(touch, true)); | |
| 3692 | + }); | |
| 3693 | + } else { | |
| 3694 | + assign(pointers[event.pointerId || 0] || {}, getPointer(event, true)); | |
| 3695 | + } | |
| 3696 | + this.change(event); | |
| 3697 | + }, | |
| 3698 | + cropEnd: function cropEnd(event) { | |
| 3699 | + if (this.disabled) { | |
| 3700 | + return; | |
| 3701 | + } | |
| 3702 | + var action = this.action, | |
| 3703 | + pointers = this.pointers; | |
| 3704 | + if (event.changedTouches) { | |
| 3705 | + forEach(event.changedTouches, function (touch) { | |
| 3706 | + delete pointers[touch.identifier]; | |
| 3707 | + }); | |
| 3708 | + } else { | |
| 3709 | + delete pointers[event.pointerId || 0]; | |
| 3710 | + } | |
| 3711 | + if (!action) { | |
| 3712 | + return; | |
| 3713 | + } | |
| 3714 | + event.preventDefault(); | |
| 3715 | + if (!Object.keys(pointers).length) { | |
| 3716 | + this.action = ''; | |
| 3717 | + } | |
| 3718 | + if (this.cropping) { | |
| 3719 | + this.cropping = false; | |
| 3720 | + toggleClass(this.dragBox, CLASS_MODAL, this.cropped && this.options.modal); | |
| 3721 | + } | |
| 3722 | + dispatchEvent(this.element, EVENT_CROP_END, { | |
| 3723 | + originalEvent: event, | |
| 3724 | + action: action | |
| 3725 | + }); | |
| 3726 | + } | |
| 3727 | + }; | |
| 3728 | + | |
| 3729 | + var change = { | |
| 3730 | + change: function change(event) { | |
| 3731 | + var options = this.options, | |
| 3732 | + canvasData = this.canvasData, | |
| 3733 | + containerData = this.containerData, | |
| 3734 | + cropBoxData = this.cropBoxData, | |
| 3735 | + pointers = this.pointers; | |
| 3736 | + var action = this.action; | |
| 3737 | + var aspectRatio = options.aspectRatio; | |
| 3738 | + var left = cropBoxData.left, | |
| 3739 | + top = cropBoxData.top, | |
| 3740 | + width = cropBoxData.width, | |
| 3741 | + height = cropBoxData.height; | |
| 3742 | + var right = left + width; | |
| 3743 | + var bottom = top + height; | |
| 3744 | + var minLeft = 0; | |
| 3745 | + var minTop = 0; | |
| 3746 | + var maxWidth = containerData.width; | |
| 3747 | + var maxHeight = containerData.height; | |
| 3748 | + var renderable = true; | |
| 3749 | + var offset; | |
| 3750 | + | |
| 3751 | + // Locking aspect ratio in "free mode" by holding shift key | |
| 3752 | + if (!aspectRatio && event.shiftKey) { | |
| 3753 | + aspectRatio = width && height ? width / height : 1; | |
| 3754 | + } | |
| 3755 | + if (this.limited) { | |
| 3756 | + minLeft = cropBoxData.minLeft; | |
| 3757 | + minTop = cropBoxData.minTop; | |
| 3758 | + maxWidth = minLeft + Math.min(containerData.width, canvasData.width, canvasData.left + canvasData.width); | |
| 3759 | + maxHeight = minTop + Math.min(containerData.height, canvasData.height, canvasData.top + canvasData.height); | |
| 3760 | + } | |
| 3761 | + var pointer = pointers[Object.keys(pointers)[0]]; | |
| 3762 | + var range = { | |
| 3763 | + x: pointer.endX - pointer.startX, | |
| 3764 | + y: pointer.endY - pointer.startY | |
| 3765 | + }; | |
| 3766 | + var check = function check(side) { | |
| 3767 | + switch (side) { | |
| 3768 | + case ACTION_EAST: | |
| 3769 | + if (right + range.x > maxWidth) { | |
| 3770 | + range.x = maxWidth - right; | |
| 3771 | + } | |
| 3772 | + break; | |
| 3773 | + case ACTION_WEST: | |
| 3774 | + if (left + range.x < minLeft) { | |
| 3775 | + range.x = minLeft - left; | |
| 3776 | + } | |
| 3777 | + break; | |
| 3778 | + case ACTION_NORTH: | |
| 3779 | + if (top + range.y < minTop) { | |
| 3780 | + range.y = minTop - top; | |
| 3781 | + } | |
| 3782 | + break; | |
| 3783 | + case ACTION_SOUTH: | |
| 3784 | + if (bottom + range.y > maxHeight) { | |
| 3785 | + range.y = maxHeight - bottom; | |
| 3786 | + } | |
| 3787 | + break; | |
| 3788 | + } | |
| 3789 | + }; | |
| 3790 | + switch (action) { | |
| 3791 | + // Move crop box | |
| 3792 | + case ACTION_ALL: | |
| 3793 | + left += range.x; | |
| 3794 | + top += range.y; | |
| 3795 | + break; | |
| 3796 | + | |
| 3797 | + // Resize crop box | |
| 3798 | + case ACTION_EAST: | |
| 3799 | + if (range.x >= 0 && (right >= maxWidth || aspectRatio && (top <= minTop || bottom >= maxHeight))) { | |
| 3800 | + renderable = false; | |
| 3801 | + break; | |
| 3802 | + } | |
| 3803 | + check(ACTION_EAST); | |
| 3804 | + width += range.x; | |
| 3805 | + if (width < 0) { | |
| 3806 | + action = ACTION_WEST; | |
| 3807 | + width = -width; | |
| 3808 | + left -= width; | |
| 3809 | + } | |
| 3810 | + if (aspectRatio) { | |
| 3811 | + height = width / aspectRatio; | |
| 3812 | + top += (cropBoxData.height - height) / 2; | |
| 3813 | + } | |
| 3814 | + break; | |
| 3815 | + case ACTION_NORTH: | |
| 3816 | + if (range.y <= 0 && (top <= minTop || aspectRatio && (left <= minLeft || right >= maxWidth))) { | |
| 3817 | + renderable = false; | |
| 3818 | + break; | |
| 3819 | + } | |
| 3820 | + check(ACTION_NORTH); | |
| 3821 | + height -= range.y; | |
| 3822 | + top += range.y; | |
| 3823 | + if (height < 0) { | |
| 3824 | + action = ACTION_SOUTH; | |
| 3825 | + height = -height; | |
| 3826 | + top -= height; | |
| 3827 | + } | |
| 3828 | + if (aspectRatio) { | |
| 3829 | + width = height * aspectRatio; | |
| 3830 | + left += (cropBoxData.width - width) / 2; | |
| 3831 | + } | |
| 3832 | + break; | |
| 3833 | + case ACTION_WEST: | |
| 3834 | + if (range.x <= 0 && (left <= minLeft || aspectRatio && (top <= minTop || bottom >= maxHeight))) { | |
| 3835 | + renderable = false; | |
| 3836 | + break; | |
| 3837 | + } | |
| 3838 | + check(ACTION_WEST); | |
| 3839 | + width -= range.x; | |
| 3840 | + left += range.x; | |
| 3841 | + if (width < 0) { | |
| 3842 | + action = ACTION_EAST; | |
| 3843 | + width = -width; | |
| 3844 | + left -= width; | |
| 3845 | + } | |
| 3846 | + if (aspectRatio) { | |
| 3847 | + height = width / aspectRatio; | |
| 3848 | + top += (cropBoxData.height - height) / 2; | |
| 3849 | + } | |
| 3850 | + break; | |
| 3851 | + case ACTION_SOUTH: | |
| 3852 | + if (range.y >= 0 && (bottom >= maxHeight || aspectRatio && (left <= minLeft || right >= maxWidth))) { | |
| 3853 | + renderable = false; | |
| 3854 | + break; | |
| 3855 | + } | |
| 3856 | + check(ACTION_SOUTH); | |
| 3857 | + height += range.y; | |
| 3858 | + if (height < 0) { | |
| 3859 | + action = ACTION_NORTH; | |
| 3860 | + height = -height; | |
| 3861 | + top -= height; | |
| 3862 | + } | |
| 3863 | + if (aspectRatio) { | |
| 3864 | + width = height * aspectRatio; | |
| 3865 | + left += (cropBoxData.width - width) / 2; | |
| 3866 | + } | |
| 3867 | + break; | |
| 3868 | + case ACTION_NORTH_EAST: | |
| 3869 | + if (aspectRatio) { | |
| 3870 | + if (range.y <= 0 && (top <= minTop || right >= maxWidth)) { | |
| 3871 | + renderable = false; | |
| 3872 | + break; | |
| 3873 | + } | |
| 3874 | + check(ACTION_NORTH); | |
| 3875 | + height -= range.y; | |
| 3876 | + top += range.y; | |
| 3877 | + width = height * aspectRatio; | |
| 3878 | + } else { | |
| 3879 | + check(ACTION_NORTH); | |
| 3880 | + check(ACTION_EAST); | |
| 3881 | + if (range.x >= 0) { | |
| 3882 | + if (right < maxWidth) { | |
| 3883 | + width += range.x; | |
| 3884 | + } else if (range.y <= 0 && top <= minTop) { | |
| 3885 | + renderable = false; | |
| 3886 | + } | |
| 3887 | + } else { | |
| 3888 | + width += range.x; | |
| 3889 | + } | |
| 3890 | + if (range.y <= 0) { | |
| 3891 | + if (top > minTop) { | |
| 3892 | + height -= range.y; | |
| 3893 | + top += range.y; | |
| 3894 | + } | |
| 3895 | + } else { | |
| 3896 | + height -= range.y; | |
| 3897 | + top += range.y; | |
| 3898 | + } | |
| 3899 | + } | |
| 3900 | + if (width < 0 && height < 0) { | |
| 3901 | + action = ACTION_SOUTH_WEST; | |
| 3902 | + height = -height; | |
| 3903 | + width = -width; | |
| 3904 | + top -= height; | |
| 3905 | + left -= width; | |
| 3906 | + } else if (width < 0) { | |
| 3907 | + action = ACTION_NORTH_WEST; | |
| 3908 | + width = -width; | |
| 3909 | + left -= width; | |
| 3910 | + } else if (height < 0) { | |
| 3911 | + action = ACTION_SOUTH_EAST; | |
| 3912 | + height = -height; | |
| 3913 | + top -= height; | |
| 3914 | + } | |
| 3915 | + break; | |
| 3916 | + case ACTION_NORTH_WEST: | |
| 3917 | + if (aspectRatio) { | |
| 3918 | + if (range.y <= 0 && (top <= minTop || left <= minLeft)) { | |
| 3919 | + renderable = false; | |
| 3920 | + break; | |
| 3921 | + } | |
| 3922 | + check(ACTION_NORTH); | |
| 3923 | + height -= range.y; | |
| 3924 | + top += range.y; | |
| 3925 | + width = height * aspectRatio; | |
| 3926 | + left += cropBoxData.width - width; | |
| 3927 | + } else { | |
| 3928 | + check(ACTION_NORTH); | |
| 3929 | + check(ACTION_WEST); | |
| 3930 | + if (range.x <= 0) { | |
| 3931 | + if (left > minLeft) { | |
| 3932 | + width -= range.x; | |
| 3933 | + left += range.x; | |
| 3934 | + } else if (range.y <= 0 && top <= minTop) { | |
| 3935 | + renderable = false; | |
| 3936 | + } | |
| 3937 | + } else { | |
| 3938 | + width -= range.x; | |
| 3939 | + left += range.x; | |
| 3940 | + } | |
| 3941 | + if (range.y <= 0) { | |
| 3942 | + if (top > minTop) { | |
| 3943 | + height -= range.y; | |
| 3944 | + top += range.y; | |
| 3945 | + } | |
| 3946 | + } else { | |
| 3947 | + height -= range.y; | |
| 3948 | + top += range.y; | |
| 3949 | + } | |
| 3950 | + } | |
| 3951 | + if (width < 0 && height < 0) { | |
| 3952 | + action = ACTION_SOUTH_EAST; | |
| 3953 | + height = -height; | |
| 3954 | + width = -width; | |
| 3955 | + top -= height; | |
| 3956 | + left -= width; | |
| 3957 | + } else if (width < 0) { | |
| 3958 | + action = ACTION_NORTH_EAST; | |
| 3959 | + width = -width; | |
| 3960 | + left -= width; | |
| 3961 | + } else if (height < 0) { | |
| 3962 | + action = ACTION_SOUTH_WEST; | |
| 3963 | + height = -height; | |
| 3964 | + top -= height; | |
| 3965 | + } | |
| 3966 | + break; | |
| 3967 | + case ACTION_SOUTH_WEST: | |
| 3968 | + if (aspectRatio) { | |
| 3969 | + if (range.x <= 0 && (left <= minLeft || bottom >= maxHeight)) { | |
| 3970 | + renderable = false; | |
| 3971 | + break; | |
| 3972 | + } | |
| 3973 | + check(ACTION_WEST); | |
| 3974 | + width -= range.x; | |
| 3975 | + left += range.x; | |
| 3976 | + height = width / aspectRatio; | |
| 3977 | + } else { | |
| 3978 | + check(ACTION_SOUTH); | |
| 3979 | + check(ACTION_WEST); | |
| 3980 | + if (range.x <= 0) { | |
| 3981 | + if (left > minLeft) { | |
| 3982 | + width -= range.x; | |
| 3983 | + left += range.x; | |
| 3984 | + } else if (range.y >= 0 && bottom >= maxHeight) { | |
| 3985 | + renderable = false; | |
| 3986 | + } | |
| 3987 | + } else { | |
| 3988 | + width -= range.x; | |
| 3989 | + left += range.x; | |
| 3990 | + } | |
| 3991 | + if (range.y >= 0) { | |
| 3992 | + if (bottom < maxHeight) { | |
| 3993 | + height += range.y; | |
| 3994 | + } | |
| 3995 | + } else { | |
| 3996 | + height += range.y; | |
| 3997 | + } | |
| 3998 | + } | |
| 3999 | + if (width < 0 && height < 0) { | |
| 4000 | + action = ACTION_NORTH_EAST; | |
| 4001 | + height = -height; | |
| 4002 | + width = -width; | |
| 4003 | + top -= height; | |
| 4004 | + left -= width; | |
| 4005 | + } else if (width < 0) { | |
| 4006 | + action = ACTION_SOUTH_EAST; | |
| 4007 | + width = -width; | |
| 4008 | + left -= width; | |
| 4009 | + } else if (height < 0) { | |
| 4010 | + action = ACTION_NORTH_WEST; | |
| 4011 | + height = -height; | |
| 4012 | + top -= height; | |
| 4013 | + } | |
| 4014 | + break; | |
| 4015 | + case ACTION_SOUTH_EAST: | |
| 4016 | + if (aspectRatio) { | |
| 4017 | + if (range.x >= 0 && (right >= maxWidth || bottom >= maxHeight)) { | |
| 4018 | + renderable = false; | |
| 4019 | + break; | |
| 4020 | + } | |
| 4021 | + check(ACTION_EAST); | |
| 4022 | + width += range.x; | |
| 4023 | + height = width / aspectRatio; | |
| 4024 | + } else { | |
| 4025 | + check(ACTION_SOUTH); | |
| 4026 | + check(ACTION_EAST); | |
| 4027 | + if (range.x >= 0) { | |
| 4028 | + if (right < maxWidth) { | |
| 4029 | + width += range.x; | |
| 4030 | + } else if (range.y >= 0 && bottom >= maxHeight) { | |
| 4031 | + renderable = false; | |
| 4032 | + } | |
| 4033 | + } else { | |
| 4034 | + width += range.x; | |
| 4035 | + } | |
| 4036 | + if (range.y >= 0) { | |
| 4037 | + if (bottom < maxHeight) { | |
| 4038 | + height += range.y; | |
| 4039 | + } | |
| 4040 | + } else { | |
| 4041 | + height += range.y; | |
| 4042 | + } | |
| 4043 | + } | |
| 4044 | + if (width < 0 && height < 0) { | |
| 4045 | + action = ACTION_NORTH_WEST; | |
| 4046 | + height = -height; | |
| 4047 | + width = -width; | |
| 4048 | + top -= height; | |
| 4049 | + left -= width; | |
| 4050 | + } else if (width < 0) { | |
| 4051 | + action = ACTION_SOUTH_WEST; | |
| 4052 | + width = -width; | |
| 4053 | + left -= width; | |
| 4054 | + } else if (height < 0) { | |
| 4055 | + action = ACTION_NORTH_EAST; | |
| 4056 | + height = -height; | |
| 4057 | + top -= height; | |
| 4058 | + } | |
| 4059 | + break; | |
| 4060 | + | |
| 4061 | + // Move canvas | |
| 4062 | + case ACTION_MOVE: | |
| 4063 | + this.move(range.x, range.y); | |
| 4064 | + renderable = false; | |
| 4065 | + break; | |
| 4066 | + | |
| 4067 | + // Zoom canvas | |
| 4068 | + case ACTION_ZOOM: | |
| 4069 | + this.zoom(getMaxZoomRatio(pointers), event); | |
| 4070 | + renderable = false; | |
| 4071 | + break; | |
| 4072 | + | |
| 4073 | + // Create crop box | |
| 4074 | + case ACTION_CROP: | |
| 4075 | + if (!range.x || !range.y) { | |
| 4076 | + renderable = false; | |
| 4077 | + break; | |
| 4078 | + } | |
| 4079 | + offset = getOffset(this.cropper); | |
| 4080 | + left = pointer.startX - offset.left; | |
| 4081 | + top = pointer.startY - offset.top; | |
| 4082 | + width = cropBoxData.minWidth; | |
| 4083 | + height = cropBoxData.minHeight; | |
| 4084 | + if (range.x > 0) { | |
| 4085 | + action = range.y > 0 ? ACTION_SOUTH_EAST : ACTION_NORTH_EAST; | |
| 4086 | + } else if (range.x < 0) { | |
| 4087 | + left -= width; | |
| 4088 | + action = range.y > 0 ? ACTION_SOUTH_WEST : ACTION_NORTH_WEST; | |
| 4089 | + } | |
| 4090 | + if (range.y < 0) { | |
| 4091 | + top -= height; | |
| 4092 | + } | |
| 4093 | + | |
| 4094 | + // Show the crop box if is hidden | |
| 4095 | + if (!this.cropped) { | |
| 4096 | + removeClass(this.cropBox, CLASS_HIDDEN); | |
| 4097 | + this.cropped = true; | |
| 4098 | + if (this.limited) { | |
| 4099 | + this.limitCropBox(true, true); | |
| 4100 | + } | |
| 4101 | + } | |
| 4102 | + break; | |
| 4103 | + } | |
| 4104 | + if (renderable) { | |
| 4105 | + cropBoxData.width = width; | |
| 4106 | + cropBoxData.height = height; | |
| 4107 | + cropBoxData.left = left; | |
| 4108 | + cropBoxData.top = top; | |
| 4109 | + this.action = action; | |
| 4110 | + this.renderCropBox(); | |
| 4111 | + } | |
| 4112 | + | |
| 4113 | + // Override | |
| 4114 | + forEach(pointers, function (p) { | |
| 4115 | + p.startX = p.endX; | |
| 4116 | + p.startY = p.endY; | |
| 4117 | + }); | |
| 4118 | + } | |
| 4119 | + }; | |
| 4120 | + | |
| 4121 | + var methods = { | |
| 4122 | + // Show the crop box manually | |
| 4123 | + crop: function crop() { | |
| 4124 | + if (this.ready && !this.cropped && !this.disabled) { | |
| 4125 | + this.cropped = true; | |
| 4126 | + this.limitCropBox(true, true); | |
| 4127 | + if (this.options.modal) { | |
| 4128 | + addClass(this.dragBox, CLASS_MODAL); | |
| 4129 | + } | |
| 4130 | + removeClass(this.cropBox, CLASS_HIDDEN); | |
| 4131 | + this.setCropBoxData(this.initialCropBoxData); | |
| 4132 | + } | |
| 4133 | + return this; | |
| 4134 | + }, | |
| 4135 | + // Reset the image and crop box to their initial states | |
| 4136 | + reset: function reset() { | |
| 4137 | + if (this.ready && !this.disabled) { | |
| 4138 | + this.imageData = assign({}, this.initialImageData); | |
| 4139 | + this.canvasData = assign({}, this.initialCanvasData); | |
| 4140 | + this.cropBoxData = assign({}, this.initialCropBoxData); | |
| 4141 | + this.renderCanvas(); | |
| 4142 | + if (this.cropped) { | |
| 4143 | + this.renderCropBox(); | |
| 4144 | + } | |
| 4145 | + } | |
| 4146 | + return this; | |
| 4147 | + }, | |
| 4148 | + // Clear the crop box | |
| 4149 | + clear: function clear() { | |
| 4150 | + if (this.cropped && !this.disabled) { | |
| 4151 | + assign(this.cropBoxData, { | |
| 4152 | + left: 0, | |
| 4153 | + top: 0, | |
| 4154 | + width: 0, | |
| 4155 | + height: 0 | |
| 4156 | + }); | |
| 4157 | + this.cropped = false; | |
| 4158 | + this.renderCropBox(); | |
| 4159 | + this.limitCanvas(true, true); | |
| 4160 | + | |
| 4161 | + // Render canvas after crop box rendered | |
| 4162 | + this.renderCanvas(); | |
| 4163 | + removeClass(this.dragBox, CLASS_MODAL); | |
| 4164 | + addClass(this.cropBox, CLASS_HIDDEN); | |
| 4165 | + } | |
| 4166 | + return this; | |
| 4167 | + }, | |
| 4168 | + /** | |
| 4169 | + * Replace the image's src and rebuild the cropper | |
| 4170 | + * @param {string} url - The new URL. | |
| 4171 | + * @param {boolean} [hasSameSize] - Indicate if the new image has the same size as the old one. | |
| 4172 | + * @returns {Cropper} this | |
| 4173 | + */ | |
| 4174 | + replace: function replace(url) { | |
| 4175 | + var hasSameSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; | |
| 4176 | + if (!this.disabled && url) { | |
| 4177 | + if (this.isImg) { | |
| 4178 | + this.element.src = url; | |
| 4179 | + } | |
| 4180 | + if (hasSameSize) { | |
| 4181 | + this.url = url; | |
| 4182 | + this.image.src = url; | |
| 4183 | + if (this.ready) { | |
| 4184 | + this.viewBoxImage.src = url; | |
| 4185 | + forEach(this.previews, function (element) { | |
| 4186 | + element.getElementsByTagName('img')[0].src = url; | |
| 4187 | + }); | |
| 4188 | + } | |
| 4189 | + } else { | |
| 4190 | + if (this.isImg) { | |
| 4191 | + this.replaced = true; | |
| 4192 | + } | |
| 4193 | + this.options.data = null; | |
| 4194 | + this.uncreate(); | |
| 4195 | + this.load(url); | |
| 4196 | + } | |
| 4197 | + } | |
| 4198 | + return this; | |
| 4199 | + }, | |
| 4200 | + // Enable (unfreeze) the cropper | |
| 4201 | + enable: function enable() { | |
| 4202 | + if (this.ready && this.disabled) { | |
| 4203 | + this.disabled = false; | |
| 4204 | + removeClass(this.cropper, CLASS_DISABLED); | |
| 4205 | + } | |
| 4206 | + return this; | |
| 4207 | + }, | |
| 4208 | + // Disable (freeze) the cropper | |
| 4209 | + disable: function disable() { | |
| 4210 | + if (this.ready && !this.disabled) { | |
| 4211 | + this.disabled = true; | |
| 4212 | + addClass(this.cropper, CLASS_DISABLED); | |
| 4213 | + } | |
| 4214 | + return this; | |
| 4215 | + }, | |
| 4216 | + /** | |
| 4217 | + * Destroy the cropper and remove the instance from the image | |
| 4218 | + * @returns {Cropper} this | |
| 4219 | + */ | |
| 4220 | + destroy: function destroy() { | |
| 4221 | + var element = this.element; | |
| 4222 | + if (!element[NAMESPACE]) { | |
| 4223 | + return this; | |
| 4224 | + } | |
| 4225 | + element[NAMESPACE] = undefined; | |
| 4226 | + if (this.isImg && this.replaced) { | |
| 4227 | + element.src = this.originalUrl; | |
| 4228 | + } | |
| 4229 | + this.uncreate(); | |
| 4230 | + return this; | |
| 4231 | + }, | |
| 4232 | + /** | |
| 4233 | + * Move the canvas with relative offsets | |
| 4234 | + * @param {number} offsetX - The relative offset distance on the x-axis. | |
| 4235 | + * @param {number} [offsetY=offsetX] - The relative offset distance on the y-axis. | |
| 4236 | + * @returns {Cropper} this | |
| 4237 | + */ | |
| 4238 | + move: function move(offsetX) { | |
| 4239 | + var offsetY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : offsetX; | |
| 4240 | + var _this$canvasData = this.canvasData, | |
| 4241 | + left = _this$canvasData.left, | |
| 4242 | + top = _this$canvasData.top; | |
| 4243 | + return this.moveTo(isUndefined(offsetX) ? offsetX : left + Number(offsetX), isUndefined(offsetY) ? offsetY : top + Number(offsetY)); | |
| 4244 | + }, | |
| 4245 | + /** | |
| 4246 | + * Move the canvas to an absolute point | |
| 4247 | + * @param {number} x - The x-axis coordinate. | |
| 4248 | + * @param {number} [y=x] - The y-axis coordinate. | |
| 4249 | + * @returns {Cropper} this | |
| 4250 | + */ | |
| 4251 | + moveTo: function moveTo(x) { | |
| 4252 | + var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : x; | |
| 4253 | + var canvasData = this.canvasData; | |
| 4254 | + var changed = false; | |
| 4255 | + x = Number(x); | |
| 4256 | + y = Number(y); | |
| 4257 | + if (this.ready && !this.disabled && this.options.movable) { | |
| 4258 | + if (isNumber(x)) { | |
| 4259 | + canvasData.left = x; | |
| 4260 | + changed = true; | |
| 4261 | + } | |
| 4262 | + if (isNumber(y)) { | |
| 4263 | + canvasData.top = y; | |
| 4264 | + changed = true; | |
| 4265 | + } | |
| 4266 | + if (changed) { | |
| 4267 | + this.renderCanvas(true); | |
| 4268 | + } | |
| 4269 | + } | |
| 4270 | + return this; | |
| 4271 | + }, | |
| 4272 | + /** | |
| 4273 | + * Zoom the canvas with a relative ratio | |
| 4274 | + * @param {number} ratio - The target ratio. | |
| 4275 | + * @param {Event} _originalEvent - The original event if any. | |
| 4276 | + * @returns {Cropper} this | |
| 4277 | + */ | |
| 4278 | + zoom: function zoom(ratio, _originalEvent) { | |
| 4279 | + var canvasData = this.canvasData; | |
| 4280 | + ratio = Number(ratio); | |
| 4281 | + if (ratio < 0) { | |
| 4282 | + ratio = 1 / (1 - ratio); | |
| 4283 | + } else { | |
| 4284 | + ratio = 1 + ratio; | |
| 4285 | + } | |
| 4286 | + return this.zoomTo(canvasData.width * ratio / canvasData.naturalWidth, null, _originalEvent); | |
| 4287 | + }, | |
| 4288 | + /** | |
| 4289 | + * Zoom the canvas to an absolute ratio | |
| 4290 | + * @param {number} ratio - The target ratio. | |
| 4291 | + * @param {Object} pivot - The zoom pivot point coordinate. | |
| 4292 | + * @param {Event} _originalEvent - The original event if any. | |
| 4293 | + * @returns {Cropper} this | |
| 4294 | + */ | |
| 4295 | + zoomTo: function zoomTo(ratio, pivot, _originalEvent) { | |
| 4296 | + var options = this.options, | |
| 4297 | + canvasData = this.canvasData; | |
| 4298 | + var width = canvasData.width, | |
| 4299 | + height = canvasData.height, | |
| 4300 | + naturalWidth = canvasData.naturalWidth, | |
| 4301 | + naturalHeight = canvasData.naturalHeight; | |
| 4302 | + ratio = Number(ratio); | |
| 4303 | + if (ratio >= 0 && this.ready && !this.disabled && options.zoomable) { | |
| 4304 | + var newWidth = naturalWidth * ratio; | |
| 4305 | + var newHeight = naturalHeight * ratio; | |
| 4306 | + if (dispatchEvent(this.element, EVENT_ZOOM, { | |
| 4307 | + ratio: ratio, | |
| 4308 | + oldRatio: width / naturalWidth, | |
| 4309 | + originalEvent: _originalEvent | |
| 4310 | + }) === false) { | |
| 4311 | + return this; | |
| 4312 | + } | |
| 4313 | + if (_originalEvent) { | |
| 4314 | + var pointers = this.pointers; | |
| 4315 | + var offset = getOffset(this.cropper); | |
| 4316 | + var center = pointers && Object.keys(pointers).length ? getPointersCenter(pointers) : { | |
| 4317 | + pageX: _originalEvent.pageX, | |
| 4318 | + pageY: _originalEvent.pageY | |
| 4319 | + }; | |
| 4320 | + | |
| 4321 | + // Zoom from the triggering point of the event | |
| 4322 | + canvasData.left -= (newWidth - width) * ((center.pageX - offset.left - canvasData.left) / width); | |
| 4323 | + canvasData.top -= (newHeight - height) * ((center.pageY - offset.top - canvasData.top) / height); | |
| 4324 | + } else if (isPlainObject(pivot) && isNumber(pivot.x) && isNumber(pivot.y)) { | |
| 4325 | + canvasData.left -= (newWidth - width) * ((pivot.x - canvasData.left) / width); | |
| 4326 | + canvasData.top -= (newHeight - height) * ((pivot.y - canvasData.top) / height); | |
| 4327 | + } else { | |
| 4328 | + // Zoom from the center of the canvas | |
| 4329 | + canvasData.left -= (newWidth - width) / 2; | |
| 4330 | + canvasData.top -= (newHeight - height) / 2; | |
| 4331 | + } | |
| 4332 | + canvasData.width = newWidth; | |
| 4333 | + canvasData.height = newHeight; | |
| 4334 | + this.renderCanvas(true); | |
| 4335 | + } | |
| 4336 | + return this; | |
| 4337 | + }, | |
| 4338 | + /** | |
| 4339 | + * Rotate the canvas with a relative degree | |
| 4340 | + * @param {number} degree - The rotate degree. | |
| 4341 | + * @returns {Cropper} this | |
| 4342 | + */ | |
| 4343 | + rotate: function rotate(degree) { | |
| 4344 | + return this.rotateTo((this.imageData.rotate || 0) + Number(degree)); | |
| 4345 | + }, | |
| 4346 | + /** | |
| 4347 | + * Rotate the canvas to an absolute degree | |
| 4348 | + * @param {number} degree - The rotate degree. | |
| 4349 | + * @returns {Cropper} this | |
| 4350 | + */ | |
| 4351 | + rotateTo: function rotateTo(degree) { | |
| 4352 | + degree = Number(degree); | |
| 4353 | + if (isNumber(degree) && this.ready && !this.disabled && this.options.rotatable) { | |
| 4354 | + this.imageData.rotate = degree % 360; | |
| 4355 | + this.renderCanvas(true, true); | |
| 4356 | + } | |
| 4357 | + return this; | |
| 4358 | + }, | |
| 4359 | + /** | |
| 4360 | + * Scale the image on the x-axis. | |
| 4361 | + * @param {number} scaleX - The scale ratio on the x-axis. | |
| 4362 | + * @returns {Cropper} this | |
| 4363 | + */ | |
| 4364 | + scaleX: function scaleX(_scaleX) { | |
| 4365 | + var scaleY = this.imageData.scaleY; | |
| 4366 | + return this.scale(_scaleX, isNumber(scaleY) ? scaleY : 1); | |
| 4367 | + }, | |
| 4368 | + /** | |
| 4369 | + * Scale the image on the y-axis. | |
| 4370 | + * @param {number} scaleY - The scale ratio on the y-axis. | |
| 4371 | + * @returns {Cropper} this | |
| 4372 | + */ | |
| 4373 | + scaleY: function scaleY(_scaleY) { | |
| 4374 | + var scaleX = this.imageData.scaleX; | |
| 4375 | + return this.scale(isNumber(scaleX) ? scaleX : 1, _scaleY); | |
| 4376 | + }, | |
| 4377 | + /** | |
| 4378 | + * Scale the image | |
| 4379 | + * @param {number} scaleX - The scale ratio on the x-axis. | |
| 4380 | + * @param {number} [scaleY=scaleX] - The scale ratio on the y-axis. | |
| 4381 | + * @returns {Cropper} this | |
| 4382 | + */ | |
| 4383 | + scale: function scale(scaleX) { | |
| 4384 | + var scaleY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : scaleX; | |
| 4385 | + var imageData = this.imageData; | |
| 4386 | + var transformed = false; | |
| 4387 | + scaleX = Number(scaleX); | |
| 4388 | + scaleY = Number(scaleY); | |
| 4389 | + if (this.ready && !this.disabled && this.options.scalable) { | |
| 4390 | + if (isNumber(scaleX)) { | |
| 4391 | + imageData.scaleX = scaleX; | |
| 4392 | + transformed = true; | |
| 4393 | + } | |
| 4394 | + if (isNumber(scaleY)) { | |
| 4395 | + imageData.scaleY = scaleY; | |
| 4396 | + transformed = true; | |
| 4397 | + } | |
| 4398 | + if (transformed) { | |
| 4399 | + this.renderCanvas(true, true); | |
| 4400 | + } | |
| 4401 | + } | |
| 4402 | + return this; | |
| 4403 | + }, | |
| 4404 | + /** | |
| 4405 | + * Get the cropped area position and size data (base on the original image) | |
| 4406 | + * @param {boolean} [rounded=false] - Indicate if round the data values or not. | |
| 4407 | + * @returns {Object} The result cropped data. | |
| 4408 | + */ | |
| 4409 | + getData: function getData() { | |
| 4410 | + var rounded = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; | |
| 4411 | + var options = this.options, | |
| 4412 | + imageData = this.imageData, | |
| 4413 | + canvasData = this.canvasData, | |
| 4414 | + cropBoxData = this.cropBoxData; | |
| 4415 | + var data; | |
| 4416 | + if (this.ready && this.cropped) { | |
| 4417 | + data = { | |
| 4418 | + x: cropBoxData.left - canvasData.left, | |
| 4419 | + y: cropBoxData.top - canvasData.top, | |
| 4420 | + width: cropBoxData.width, | |
| 4421 | + height: cropBoxData.height | |
| 4422 | + }; | |
| 4423 | + var ratio = imageData.width / imageData.naturalWidth; | |
| 4424 | + forEach(data, function (n, i) { | |
| 4425 | + data[i] = n / ratio; | |
| 4426 | + }); | |
| 4427 | + if (rounded) { | |
| 4428 | + // In case rounding off leads to extra 1px in right or bottom border | |
| 4429 | + // we should round the top-left corner and the dimension (#343). | |
| 4430 | + var bottom = Math.round(data.y + data.height); | |
| 4431 | + var right = Math.round(data.x + data.width); | |
| 4432 | + data.x = Math.round(data.x); | |
| 4433 | + data.y = Math.round(data.y); | |
| 4434 | + data.width = right - data.x; | |
| 4435 | + data.height = bottom - data.y; | |
| 4436 | + } | |
| 4437 | + } else { | |
| 4438 | + data = { | |
| 4439 | + x: 0, | |
| 4440 | + y: 0, | |
| 4441 | + width: 0, | |
| 4442 | + height: 0 | |
| 4443 | + }; | |
| 4444 | + } | |
| 4445 | + if (options.rotatable) { | |
| 4446 | + data.rotate = imageData.rotate || 0; | |
| 4447 | + } | |
| 4448 | + if (options.scalable) { | |
| 4449 | + data.scaleX = imageData.scaleX || 1; | |
| 4450 | + data.scaleY = imageData.scaleY || 1; | |
| 4451 | + } | |
| 4452 | + return data; | |
| 4453 | + }, | |
| 4454 | + /** | |
| 4455 | + * Set the cropped area position and size with new data | |
| 4456 | + * @param {Object} data - The new data. | |
| 4457 | + * @returns {Cropper} this | |
| 4458 | + */ | |
| 4459 | + setData: function setData(data) { | |
| 4460 | + var options = this.options, | |
| 4461 | + imageData = this.imageData, | |
| 4462 | + canvasData = this.canvasData; | |
| 4463 | + var cropBoxData = {}; | |
| 4464 | + if (this.ready && !this.disabled && isPlainObject(data)) { | |
| 4465 | + var transformed = false; | |
| 4466 | + if (options.rotatable) { | |
| 4467 | + if (isNumber(data.rotate) && data.rotate !== imageData.rotate) { | |
| 4468 | + imageData.rotate = data.rotate; | |
| 4469 | + transformed = true; | |
| 4470 | + } | |
| 4471 | + } | |
| 4472 | + if (options.scalable) { | |
| 4473 | + if (isNumber(data.scaleX) && data.scaleX !== imageData.scaleX) { | |
| 4474 | + imageData.scaleX = data.scaleX; | |
| 4475 | + transformed = true; | |
| 4476 | + } | |
| 4477 | + if (isNumber(data.scaleY) && data.scaleY !== imageData.scaleY) { | |
| 4478 | + imageData.scaleY = data.scaleY; | |
| 4479 | + transformed = true; | |
| 4480 | + } | |
| 4481 | + } | |
| 4482 | + if (transformed) { | |
| 4483 | + this.renderCanvas(true, true); | |
| 4484 | + } | |
| 4485 | + var ratio = imageData.width / imageData.naturalWidth; | |
| 4486 | + if (isNumber(data.x)) { | |
| 4487 | + cropBoxData.left = data.x * ratio + canvasData.left; | |
| 4488 | + } | |
| 4489 | + if (isNumber(data.y)) { | |
| 4490 | + cropBoxData.top = data.y * ratio + canvasData.top; | |
| 4491 | + } | |
| 4492 | + if (isNumber(data.width)) { | |
| 4493 | + cropBoxData.width = data.width * ratio; | |
| 4494 | + } | |
| 4495 | + if (isNumber(data.height)) { | |
| 4496 | + cropBoxData.height = data.height * ratio; | |
| 4497 | + } | |
| 4498 | + this.setCropBoxData(cropBoxData); | |
| 4499 | + } | |
| 4500 | + return this; | |
| 4501 | + }, | |
| 4502 | + /** | |
| 4503 | + * Get the container size data. | |
| 4504 | + * @returns {Object} The result container data. | |
| 4505 | + */ | |
| 4506 | + getContainerData: function getContainerData() { | |
| 4507 | + return this.ready ? assign({}, this.containerData) : {}; | |
| 4508 | + }, | |
| 4509 | + /** | |
| 4510 | + * Get the image position and size data. | |
| 4511 | + * @returns {Object} The result image data. | |
| 4512 | + */ | |
| 4513 | + getImageData: function getImageData() { | |
| 4514 | + return this.sized ? assign({}, this.imageData) : {}; | |
| 4515 | + }, | |
| 4516 | + /** | |
| 4517 | + * Get the canvas position and size data. | |
| 4518 | + * @returns {Object} The result canvas data. | |
| 4519 | + */ | |
| 4520 | + getCanvasData: function getCanvasData() { | |
| 4521 | + var canvasData = this.canvasData; | |
| 4522 | + var data = {}; | |
| 4523 | + if (this.ready) { | |
| 4524 | + forEach(['left', 'top', 'width', 'height', 'naturalWidth', 'naturalHeight'], function (n) { | |
| 4525 | + data[n] = canvasData[n]; | |
| 4526 | + }); | |
| 4527 | + } | |
| 4528 | + return data; | |
| 4529 | + }, | |
| 4530 | + /** | |
| 4531 | + * Set the canvas position and size with new data. | |
| 4532 | + * @param {Object} data - The new canvas data. | |
| 4533 | + * @returns {Cropper} this | |
| 4534 | + */ | |
| 4535 | + setCanvasData: function setCanvasData(data) { | |
| 4536 | + var canvasData = this.canvasData; | |
| 4537 | + var aspectRatio = canvasData.aspectRatio; | |
| 4538 | + if (this.ready && !this.disabled && isPlainObject(data)) { | |
| 4539 | + if (isNumber(data.left)) { | |
| 4540 | + canvasData.left = data.left; | |
| 4541 | + } | |
| 4542 | + if (isNumber(data.top)) { | |
| 4543 | + canvasData.top = data.top; | |
| 4544 | + } | |
| 4545 | + if (isNumber(data.width)) { | |
| 4546 | + canvasData.width = data.width; | |
| 4547 | + canvasData.height = data.width / aspectRatio; | |
| 4548 | + } else if (isNumber(data.height)) { | |
| 4549 | + canvasData.height = data.height; | |
| 4550 | + canvasData.width = data.height * aspectRatio; | |
| 4551 | + } | |
| 4552 | + this.renderCanvas(true); | |
| 4553 | + } | |
| 4554 | + return this; | |
| 4555 | + }, | |
| 4556 | + /** | |
| 4557 | + * Get the crop box position and size data. | |
| 4558 | + * @returns {Object} The result crop box data. | |
| 4559 | + */ | |
| 4560 | + getCropBoxData: function getCropBoxData() { | |
| 4561 | + var cropBoxData = this.cropBoxData; | |
| 4562 | + var data; | |
| 4563 | + if (this.ready && this.cropped) { | |
| 4564 | + data = { | |
| 4565 | + left: cropBoxData.left, | |
| 4566 | + top: cropBoxData.top, | |
| 4567 | + width: cropBoxData.width, | |
| 4568 | + height: cropBoxData.height | |
| 4569 | + }; | |
| 4570 | + } | |
| 4571 | + return data || {}; | |
| 4572 | + }, | |
| 4573 | + /** | |
| 4574 | + * Set the crop box position and size with new data. | |
| 4575 | + * @param {Object} data - The new crop box data. | |
| 4576 | + * @returns {Cropper} this | |
| 4577 | + */ | |
| 4578 | + setCropBoxData: function setCropBoxData(data) { | |
| 4579 | + var cropBoxData = this.cropBoxData; | |
| 4580 | + var aspectRatio = this.options.aspectRatio; | |
| 4581 | + var widthChanged; | |
| 4582 | + var heightChanged; | |
| 4583 | + if (this.ready && this.cropped && !this.disabled && isPlainObject(data)) { | |
| 4584 | + if (isNumber(data.left)) { | |
| 4585 | + cropBoxData.left = data.left; | |
| 4586 | + } | |
| 4587 | + if (isNumber(data.top)) { | |
| 4588 | + cropBoxData.top = data.top; | |
| 4589 | + } | |
| 4590 | + if (isNumber(data.width) && data.width !== cropBoxData.width) { | |
| 4591 | + widthChanged = true; | |
| 4592 | + cropBoxData.width = data.width; | |
| 4593 | + } | |
| 4594 | + if (isNumber(data.height) && data.height !== cropBoxData.height) { | |
| 4595 | + heightChanged = true; | |
| 4596 | + cropBoxData.height = data.height; | |
| 4597 | + } | |
| 4598 | + if (aspectRatio) { | |
| 4599 | + if (widthChanged) { | |
| 4600 | + cropBoxData.height = cropBoxData.width / aspectRatio; | |
| 4601 | + } else if (heightChanged) { | |
| 4602 | + cropBoxData.width = cropBoxData.height * aspectRatio; | |
| 4603 | + } | |
| 4604 | + } | |
| 4605 | + this.renderCropBox(); | |
| 4606 | + } | |
| 4607 | + return this; | |
| 4608 | + }, | |
| 4609 | + /** | |
| 4610 | + * Get a canvas drawn the cropped image. | |
| 4611 | + * @param {Object} [options={}] - The config options. | |
| 4612 | + * @returns {HTMLCanvasElement} - The result canvas. | |
| 4613 | + */ | |
| 4614 | + getCroppedCanvas: function getCroppedCanvas() { | |
| 4615 | + var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; | |
| 4616 | + if (!this.ready || !window.HTMLCanvasElement) { | |
| 4617 | + return null; | |
| 4618 | + } | |
| 4619 | + var canvasData = this.canvasData; | |
| 4620 | + var source = getSourceCanvas(this.image, this.imageData, canvasData, options); | |
| 4621 | + | |
| 4622 | + // Returns the source canvas if it is not cropped. | |
| 4623 | + if (!this.cropped) { | |
| 4624 | + return source; | |
| 4625 | + } | |
| 4626 | + var _this$getData = this.getData(options.rounded), | |
| 4627 | + initialX = _this$getData.x, | |
| 4628 | + initialY = _this$getData.y, | |
| 4629 | + initialWidth = _this$getData.width, | |
| 4630 | + initialHeight = _this$getData.height; | |
| 4631 | + var ratio = source.width / Math.floor(canvasData.naturalWidth); | |
| 4632 | + if (ratio !== 1) { | |
| 4633 | + initialX *= ratio; | |
| 4634 | + initialY *= ratio; | |
| 4635 | + initialWidth *= ratio; | |
| 4636 | + initialHeight *= ratio; | |
| 4637 | + } | |
| 4638 | + var aspectRatio = initialWidth / initialHeight; | |
| 4639 | + var maxSizes = getAdjustedSizes({ | |
| 4640 | + aspectRatio: aspectRatio, | |
| 4641 | + width: options.maxWidth || Infinity, | |
| 4642 | + height: options.maxHeight || Infinity | |
| 4643 | + }); | |
| 4644 | + var minSizes = getAdjustedSizes({ | |
| 4645 | + aspectRatio: aspectRatio, | |
| 4646 | + width: options.minWidth || 0, | |
| 4647 | + height: options.minHeight || 0 | |
| 4648 | + }, 'cover'); | |
| 4649 | + var _getAdjustedSizes = getAdjustedSizes({ | |
| 4650 | + aspectRatio: aspectRatio, | |
| 4651 | + width: options.width || (ratio !== 1 ? source.width : initialWidth), | |
| 4652 | + height: options.height || (ratio !== 1 ? source.height : initialHeight) | |
| 4653 | + }), | |
| 4654 | + width = _getAdjustedSizes.width, | |
| 4655 | + height = _getAdjustedSizes.height; | |
| 4656 | + width = Math.min(maxSizes.width, Math.max(minSizes.width, width)); | |
| 4657 | + height = Math.min(maxSizes.height, Math.max(minSizes.height, height)); | |
| 4658 | + var canvas = document.createElement('canvas'); | |
| 4659 | + var context = canvas.getContext('2d'); | |
| 4660 | + canvas.width = normalizeDecimalNumber(width); | |
| 4661 | + canvas.height = normalizeDecimalNumber(height); | |
| 4662 | + context.fillStyle = options.fillColor || 'transparent'; | |
| 4663 | + context.fillRect(0, 0, width, height); | |
| 4664 | + var _options$imageSmoothi = options.imageSmoothingEnabled, | |
| 4665 | + imageSmoothingEnabled = _options$imageSmoothi === void 0 ? true : _options$imageSmoothi, | |
| 4666 | + imageSmoothingQuality = options.imageSmoothingQuality; | |
| 4667 | + context.imageSmoothingEnabled = imageSmoothingEnabled; | |
| 4668 | + if (imageSmoothingQuality) { | |
| 4669 | + context.imageSmoothingQuality = imageSmoothingQuality; | |
| 4670 | + } | |
| 4671 | + | |
| 4672 | + // https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.drawImage | |
| 4673 | + var sourceWidth = source.width; | |
| 4674 | + var sourceHeight = source.height; | |
| 4675 | + | |
| 4676 | + // Source canvas parameters | |
| 4677 | + var srcX = initialX; | |
| 4678 | + var srcY = initialY; | |
| 4679 | + var srcWidth; | |
| 4680 | + var srcHeight; | |
| 4681 | + | |
| 4682 | + // Destination canvas parameters | |
| 4683 | + var dstX; | |
| 4684 | + var dstY; | |
| 4685 | + var dstWidth; | |
| 4686 | + var dstHeight; | |
| 4687 | + if (srcX <= -initialWidth || srcX > sourceWidth) { | |
| 4688 | + srcX = 0; | |
| 4689 | + srcWidth = 0; | |
| 4690 | + dstX = 0; | |
| 4691 | + dstWidth = 0; | |
| 4692 | + } else if (srcX <= 0) { | |
| 4693 | + dstX = -srcX; | |
| 4694 | + srcX = 0; | |
| 4695 | + srcWidth = Math.min(sourceWidth, initialWidth + srcX); | |
| 4696 | + dstWidth = srcWidth; | |
| 4697 | + } else if (srcX <= sourceWidth) { | |
| 4698 | + dstX = 0; | |
| 4699 | + srcWidth = Math.min(initialWidth, sourceWidth - srcX); | |
| 4700 | + dstWidth = srcWidth; | |
| 4701 | + } | |
| 4702 | + if (srcWidth <= 0 || srcY <= -initialHeight || srcY > sourceHeight) { | |
| 4703 | + srcY = 0; | |
| 4704 | + srcHeight = 0; | |
| 4705 | + dstY = 0; | |
| 4706 | + dstHeight = 0; | |
| 4707 | + } else if (srcY <= 0) { | |
| 4708 | + dstY = -srcY; | |
| 4709 | + srcY = 0; | |
| 4710 | + srcHeight = Math.min(sourceHeight, initialHeight + srcY); | |
| 4711 | + dstHeight = srcHeight; | |
| 4712 | + } else if (srcY <= sourceHeight) { | |
| 4713 | + dstY = 0; | |
| 4714 | + srcHeight = Math.min(initialHeight, sourceHeight - srcY); | |
| 4715 | + dstHeight = srcHeight; | |
| 4716 | + } | |
| 4717 | + var params = [srcX, srcY, srcWidth, srcHeight]; | |
| 4718 | + | |
| 4719 | + // Avoid "IndexSizeError" | |
| 4720 | + if (dstWidth > 0 && dstHeight > 0) { | |
| 4721 | + var scale = width / initialWidth; | |
| 4722 | + params.push(dstX * scale, dstY * scale, dstWidth * scale, dstHeight * scale); | |
| 4723 | + } | |
| 4724 | + | |
| 4725 | + // All the numerical parameters should be integer for `drawImage` | |
| 4726 | + // https://github.com/fengyuanchen/cropper/issues/476 | |
| 4727 | + context.drawImage.apply(context, [source].concat(_toConsumableArray(params.map(function (param) { | |
| 4728 | + return Math.floor(normalizeDecimalNumber(param)); | |
| 4729 | + })))); | |
| 4730 | + return canvas; | |
| 4731 | + }, | |
| 4732 | + /** | |
| 4733 | + * Change the aspect ratio of the crop box. | |
| 4734 | + * @param {number} aspectRatio - The new aspect ratio. | |
| 4735 | + * @returns {Cropper} this | |
| 4736 | + */ | |
| 4737 | + setAspectRatio: function setAspectRatio(aspectRatio) { | |
| 4738 | + var options = this.options; | |
| 4739 | + if (!this.disabled && !isUndefined(aspectRatio)) { | |
| 4740 | + // 0 -> NaN | |
| 4741 | + options.aspectRatio = Math.max(0, aspectRatio) || NaN; | |
| 4742 | + if (this.ready) { | |
| 4743 | + this.initCropBox(); | |
| 4744 | + if (this.cropped) { | |
| 4745 | + this.renderCropBox(); | |
| 4746 | + } | |
| 4747 | + } | |
| 4748 | + } | |
| 4749 | + return this; | |
| 4750 | + }, | |
| 4751 | + /** | |
| 4752 | + * Change the drag mode. | |
| 4753 | + * @param {string} mode - The new drag mode. | |
| 4754 | + * @returns {Cropper} this | |
| 4755 | + */ | |
| 4756 | + setDragMode: function setDragMode(mode) { | |
| 4757 | + var options = this.options, | |
| 4758 | + dragBox = this.dragBox, | |
| 4759 | + face = this.face; | |
| 4760 | + if (this.ready && !this.disabled) { | |
| 4761 | + var croppable = mode === DRAG_MODE_CROP; | |
| 4762 | + var movable = options.movable && mode === DRAG_MODE_MOVE; | |
| 4763 | + mode = croppable || movable ? mode : DRAG_MODE_NONE; | |
| 4764 | + options.dragMode = mode; | |
| 4765 | + setData(dragBox, DATA_ACTION, mode); | |
| 4766 | + toggleClass(dragBox, CLASS_CROP, croppable); | |
| 4767 | + toggleClass(dragBox, CLASS_MOVE, movable); | |
| 4768 | + if (!options.cropBoxMovable) { | |
| 4769 | + // Sync drag mode to crop box when it is not movable | |
| 4770 | + setData(face, DATA_ACTION, mode); | |
| 4771 | + toggleClass(face, CLASS_CROP, croppable); | |
| 4772 | + toggleClass(face, CLASS_MOVE, movable); | |
| 4773 | + } | |
| 4774 | + } | |
| 4775 | + return this; | |
| 4776 | + } | |
| 4777 | + }; | |
| 4778 | + | |
| 4779 | + var AnotherCropper = WINDOW.Cropper; | |
| 4780 | + var Cropper = /*#__PURE__*/function () { | |
| 4781 | + /** | |
| 4782 | + * Create a new Cropper. | |
| 4783 | + * @param {Element} element - The target element for cropping. | |
| 4784 | + * @param {Object} [options={}] - The configuration options. | |
| 4785 | + */ | |
| 4786 | + function Cropper(element) { | |
| 4787 | + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; | |
| 4788 | + _classCallCheck(this, Cropper); | |
| 4789 | + if (!element || !REGEXP_TAG_NAME.test(element.tagName)) { | |
| 4790 | + throw new Error('The first argument is required and must be an <img> or <canvas> element.'); | |
| 4791 | + } | |
| 4792 | + this.element = element; | |
| 4793 | + this.options = assign({}, DEFAULTS, isPlainObject(options) && options); | |
| 4794 | + this.cropped = false; | |
| 4795 | + this.disabled = false; | |
| 4796 | + this.pointers = {}; | |
| 4797 | + this.ready = false; | |
| 4798 | + this.reloading = false; | |
| 4799 | + this.replaced = false; | |
| 4800 | + this.sized = false; | |
| 4801 | + this.sizing = false; | |
| 4802 | + this.init(); | |
| 4803 | + } | |
| 4804 | + return _createClass(Cropper, [{ | |
| 4805 | + key: "init", | |
| 4806 | + value: function init() { | |
| 4807 | + var element = this.element; | |
| 4808 | + var tagName = element.tagName.toLowerCase(); | |
| 4809 | + var url; | |
| 4810 | + if (element[NAMESPACE]) { | |
| 4811 | + return; | |
| 4812 | + } | |
| 4813 | + element[NAMESPACE] = this; | |
| 4814 | + if (tagName === 'img') { | |
| 4815 | + this.isImg = true; | |
| 4816 | + | |
| 4817 | + // e.g.: "img/picture.jpg" | |
| 4818 | + url = element.getAttribute('src') || ''; | |
| 4819 | + this.originalUrl = url; | |
| 4820 | + | |
| 4821 | + // Stop when it's a blank image | |
| 4822 | + if (!url) { | |
| 4823 | + return; | |
| 4824 | + } | |
| 4825 | + | |
| 4826 | + // e.g.: "https://example.com/img/picture.jpg" | |
| 4827 | + url = element.src; | |
| 4828 | + } else if (tagName === 'canvas' && window.HTMLCanvasElement) { | |
| 4829 | + url = element.toDataURL(); | |
| 4830 | + } | |
| 4831 | + this.load(url); | |
| 4832 | + } | |
| 4833 | + }, { | |
| 4834 | + key: "load", | |
| 4835 | + value: function load(url) { | |
| 4836 | + var _this = this; | |
| 4837 | + if (!url) { | |
| 4838 | + return; | |
| 4839 | + } | |
| 4840 | + this.url = url; | |
| 4841 | + this.imageData = {}; | |
| 4842 | + var element = this.element, | |
| 4843 | + options = this.options; | |
| 4844 | + if (!options.rotatable && !options.scalable) { | |
| 4845 | + options.checkOrientation = false; | |
| 4846 | + } | |
| 4847 | + | |
| 4848 | + // Only IE10+ supports Typed Arrays | |
| 4849 | + if (!options.checkOrientation || !window.ArrayBuffer) { | |
| 4850 | + this.clone(); | |
| 4851 | + return; | |
| 4852 | + } | |
| 4853 | + | |
| 4854 | + // Detect the mime type of the image directly if it is a Data URL | |
| 4855 | + if (REGEXP_DATA_URL.test(url)) { | |
| 4856 | + // Read ArrayBuffer from Data URL of JPEG images directly for better performance | |
| 4857 | + if (REGEXP_DATA_URL_JPEG.test(url)) { | |
| 4858 | + this.read(dataURLToArrayBuffer(url)); | |
| 4859 | + } else { | |
| 4860 | + // Only a JPEG image may contains Exif Orientation information, | |
| 4861 | + // the rest types of Data URLs are not necessary to check orientation at all. | |
| 4862 | + this.clone(); | |
| 4863 | + } | |
| 4864 | + return; | |
| 4865 | + } | |
| 4866 | + | |
| 4867 | + // 1. Detect the mime type of the image by a XMLHttpRequest. | |
| 4868 | + // 2. Load the image as ArrayBuffer for reading orientation if its a JPEG image. | |
| 4869 | + var xhr = new XMLHttpRequest(); | |
| 4870 | + var clone = this.clone.bind(this); | |
| 4871 | + this.reloading = true; | |
| 4872 | + this.xhr = xhr; | |
| 4873 | + | |
| 4874 | + // 1. Cross origin requests are only supported for protocol schemes: | |
| 4875 | + // http, https, data, chrome, chrome-extension. | |
| 4876 | + // 2. Access to XMLHttpRequest from a Data URL will be blocked by CORS policy | |
| 4877 | + // in some browsers as IE11 and Safari. | |
| 4878 | + xhr.onabort = clone; | |
| 4879 | + xhr.onerror = clone; | |
| 4880 | + xhr.ontimeout = clone; | |
| 4881 | + xhr.onprogress = function () { | |
| 4882 | + // Abort the request directly if it not a JPEG image for better performance | |
| 4883 | + if (xhr.getResponseHeader('content-type') !== MIME_TYPE_JPEG) { | |
| 4884 | + xhr.abort(); | |
| 4885 | + } | |
| 4886 | + }; | |
| 4887 | + xhr.onload = function () { | |
| 4888 | + _this.read(xhr.response); | |
| 4889 | + }; | |
| 4890 | + xhr.onloadend = function () { | |
| 4891 | + _this.reloading = false; | |
| 4892 | + _this.xhr = null; | |
| 4893 | + }; | |
| 4894 | + | |
| 4895 | + // Bust cache when there is a "crossOrigin" property to avoid browser cache error | |
| 4896 | + if (options.checkCrossOrigin && isCrossOriginURL(url) && element.crossOrigin) { | |
| 4897 | + url = addTimestamp(url); | |
| 4898 | + } | |
| 4899 | + | |
| 4900 | + // The third parameter is required for avoiding side-effect (#682) | |
| 4901 | + xhr.open('GET', url, true); | |
| 4902 | + xhr.responseType = 'arraybuffer'; | |
| 4903 | + xhr.withCredentials = element.crossOrigin === 'use-credentials'; | |
| 4904 | + xhr.send(); | |
| 4905 | + } | |
| 4906 | + }, { | |
| 4907 | + key: "read", | |
| 4908 | + value: function read(arrayBuffer) { | |
| 4909 | + var options = this.options, | |
| 4910 | + imageData = this.imageData; | |
| 4911 | + | |
| 4912 | + // Reset the orientation value to its default value 1 | |
| 4913 | + // as some iOS browsers will render image with its orientation | |
| 4914 | + var orientation = resetAndGetOrientation(arrayBuffer); | |
| 4915 | + var rotate = 0; | |
| 4916 | + var scaleX = 1; | |
| 4917 | + var scaleY = 1; | |
| 4918 | + if (orientation > 1) { | |
| 4919 | + // Generate a new URL which has the default orientation value | |
| 4920 | + this.url = arrayBufferToDataURL(arrayBuffer, MIME_TYPE_JPEG); | |
| 4921 | + var _parseOrientation = parseOrientation(orientation); | |
| 4922 | + rotate = _parseOrientation.rotate; | |
| 4923 | + scaleX = _parseOrientation.scaleX; | |
| 4924 | + scaleY = _parseOrientation.scaleY; | |
| 4925 | + } | |
| 4926 | + if (options.rotatable) { | |
| 4927 | + imageData.rotate = rotate; | |
| 4928 | + } | |
| 4929 | + if (options.scalable) { | |
| 4930 | + imageData.scaleX = scaleX; | |
| 4931 | + imageData.scaleY = scaleY; | |
| 4932 | + } | |
| 4933 | + this.clone(); | |
| 4934 | + } | |
| 4935 | + }, { | |
| 4936 | + key: "clone", | |
| 4937 | + value: function clone() { | |
| 4938 | + var element = this.element, | |
| 4939 | + url = this.url; | |
| 4940 | + var crossOrigin = element.crossOrigin; | |
| 4941 | + var crossOriginUrl = url; | |
| 4942 | + if (this.options.checkCrossOrigin && isCrossOriginURL(url)) { | |
| 4943 | + if (!crossOrigin) { | |
| 4944 | + crossOrigin = 'anonymous'; | |
| 4945 | + } | |
| 4946 | + | |
| 4947 | + // Bust cache when there is not a "crossOrigin" property (#519) | |
| 4948 | + crossOriginUrl = addTimestamp(url); | |
| 4949 | + } | |
| 4950 | + this.crossOrigin = crossOrigin; | |
| 4951 | + this.crossOriginUrl = crossOriginUrl; | |
| 4952 | + var image = document.createElement('img'); | |
| 4953 | + if (crossOrigin) { | |
| 4954 | + image.crossOrigin = crossOrigin; | |
| 4955 | + } | |
| 4956 | + image.src = crossOriginUrl || url; | |
| 4957 | + image.alt = element.alt || 'The image to crop'; | |
| 4958 | + this.image = image; | |
| 4959 | + image.onload = this.start.bind(this); | |
| 4960 | + image.onerror = this.stop.bind(this); | |
| 4961 | + addClass(image, CLASS_HIDE); | |
| 4962 | + element.parentNode.insertBefore(image, element.nextSibling); | |
| 4963 | + } | |
| 4964 | + }, { | |
| 4965 | + key: "start", | |
| 4966 | + value: function start() { | |
| 4967 | + var _this2 = this; | |
| 4968 | + var image = this.image; | |
| 4969 | + image.onload = null; | |
| 4970 | + image.onerror = null; | |
| 4971 | + this.sizing = true; | |
| 4972 | + | |
| 4973 | + // Match all browsers that use WebKit as the layout engine in iOS devices, | |
| 4974 | + // such as Safari for iOS, Chrome for iOS, and in-app browsers. | |
| 4975 | + var isIOSWebKit = WINDOW.navigator && /(?:iPad|iPhone|iPod).*?AppleWebKit/i.test(WINDOW.navigator.userAgent); | |
| 4976 | + var done = function done(naturalWidth, naturalHeight) { | |
| 4977 | + assign(_this2.imageData, { | |
| 4978 | + naturalWidth: naturalWidth, | |
| 4979 | + naturalHeight: naturalHeight, | |
| 4980 | + aspectRatio: naturalWidth / naturalHeight | |
| 4981 | + }); | |
| 4982 | + _this2.initialImageData = assign({}, _this2.imageData); | |
| 4983 | + _this2.sizing = false; | |
| 4984 | + _this2.sized = true; | |
| 4985 | + _this2.build(); | |
| 4986 | + }; | |
| 4987 | + | |
| 4988 | + // Most modern browsers (excepts iOS WebKit) | |
| 4989 | + if (image.naturalWidth && !isIOSWebKit) { | |
| 4990 | + done(image.naturalWidth, image.naturalHeight); | |
| 4991 | + return; | |
| 4992 | + } | |
| 4993 | + var sizingImage = document.createElement('img'); | |
| 4994 | + var body = document.body || document.documentElement; | |
| 4995 | + this.sizingImage = sizingImage; | |
| 4996 | + sizingImage.onload = function () { | |
| 4997 | + done(sizingImage.width, sizingImage.height); | |
| 4998 | + if (!isIOSWebKit) { | |
| 4999 | + body.removeChild(sizingImage); | |
| 5000 | + } | |
| 5001 | + }; | |
| 5002 | + sizingImage.src = image.src; | |
| 5003 | + | |
| 5004 | + // iOS WebKit will convert the image automatically | |
| 5005 | + // with its orientation once append it into DOM (#279) | |
| 5006 | + if (!isIOSWebKit) { | |
| 5007 | + sizingImage.style.cssText = 'left:0;' + 'max-height:none!important;' + 'max-width:none!important;' + 'min-height:0!important;' + 'min-width:0!important;' + 'opacity:0;' + 'position:absolute;' + 'top:0;' + 'z-index:-1;'; | |
| 5008 | + body.appendChild(sizingImage); | |
| 5009 | + } | |
| 5010 | + } | |
| 5011 | + }, { | |
| 5012 | + key: "stop", | |
| 5013 | + value: function stop() { | |
| 5014 | + var image = this.image; | |
| 5015 | + image.onload = null; | |
| 5016 | + image.onerror = null; | |
| 5017 | + image.parentNode.removeChild(image); | |
| 5018 | + this.image = null; | |
| 5019 | + } | |
| 5020 | + }, { | |
| 5021 | + key: "build", | |
| 5022 | + value: function build() { | |
| 5023 | + if (!this.sized || this.ready) { | |
| 5024 | + return; | |
| 5025 | + } | |
| 5026 | + var element = this.element, | |
| 5027 | + options = this.options, | |
| 5028 | + image = this.image; | |
| 5029 | + | |
| 5030 | + // Create cropper elements | |
| 5031 | + var container = element.parentNode; | |
| 5032 | + var template = document.createElement('div'); | |
| 5033 | + template.innerHTML = TEMPLATE; | |
| 5034 | + var cropper = template.querySelector(".".concat(NAMESPACE, "-container")); | |
| 5035 | + var canvas = cropper.querySelector(".".concat(NAMESPACE, "-canvas")); | |
| 5036 | + var dragBox = cropper.querySelector(".".concat(NAMESPACE, "-drag-box")); | |
| 5037 | + var cropBox = cropper.querySelector(".".concat(NAMESPACE, "-crop-box")); | |
| 5038 | + var face = cropBox.querySelector(".".concat(NAMESPACE, "-face")); | |
| 5039 | + this.container = container; | |
| 5040 | + this.cropper = cropper; | |
| 5041 | + this.canvas = canvas; | |
| 5042 | + this.dragBox = dragBox; | |
| 5043 | + this.cropBox = cropBox; | |
| 5044 | + this.viewBox = cropper.querySelector(".".concat(NAMESPACE, "-view-box")); | |
| 5045 | + this.face = face; | |
| 5046 | + canvas.appendChild(image); | |
| 5047 | + | |
| 5048 | + // Hide the original image | |
| 5049 | + addClass(element, CLASS_HIDDEN); | |
| 5050 | + | |
| 5051 | + // Inserts the cropper after to the current image | |
| 5052 | + container.insertBefore(cropper, element.nextSibling); | |
| 5053 | + | |
| 5054 | + // Show the hidden image | |
| 5055 | + removeClass(image, CLASS_HIDE); | |
| 5056 | + this.initPreview(); | |
| 5057 | + this.bind(); | |
| 5058 | + options.initialAspectRatio = Math.max(0, options.initialAspectRatio) || NaN; | |
| 5059 | + options.aspectRatio = Math.max(0, options.aspectRatio) || NaN; | |
| 5060 | + options.viewMode = Math.max(0, Math.min(3, Math.round(options.viewMode))) || 0; | |
| 5061 | + addClass(cropBox, CLASS_HIDDEN); | |
| 5062 | + if (!options.guides) { | |
| 5063 | + addClass(cropBox.getElementsByClassName("".concat(NAMESPACE, "-dashed")), CLASS_HIDDEN); | |
| 5064 | + } | |
| 5065 | + if (!options.center) { | |
| 5066 | + addClass(cropBox.getElementsByClassName("".concat(NAMESPACE, "-center")), CLASS_HIDDEN); | |
| 5067 | + } | |
| 5068 | + if (options.background) { | |
| 5069 | + addClass(cropper, "".concat(NAMESPACE, "-bg")); | |
| 5070 | + } | |
| 5071 | + if (!options.highlight) { | |
| 5072 | + addClass(face, CLASS_INVISIBLE); | |
| 5073 | + } | |
| 5074 | + if (options.cropBoxMovable) { | |
| 5075 | + addClass(face, CLASS_MOVE); | |
| 5076 | + setData(face, DATA_ACTION, ACTION_ALL); | |
| 5077 | + } | |
| 5078 | + if (!options.cropBoxResizable) { | |
| 5079 | + addClass(cropBox.getElementsByClassName("".concat(NAMESPACE, "-line")), CLASS_HIDDEN); | |
| 5080 | + addClass(cropBox.getElementsByClassName("".concat(NAMESPACE, "-point")), CLASS_HIDDEN); | |
| 5081 | + } | |
| 5082 | + this.render(); | |
| 5083 | + this.ready = true; | |
| 5084 | + this.setDragMode(options.dragMode); | |
| 5085 | + if (options.autoCrop) { | |
| 5086 | + this.crop(); | |
| 5087 | + } | |
| 5088 | + this.setData(options.data); | |
| 5089 | + if (isFunction(options.ready)) { | |
| 5090 | + addListener(element, EVENT_READY, options.ready, { | |
| 5091 | + once: true | |
| 5092 | + }); | |
| 5093 | + } | |
| 5094 | + dispatchEvent(element, EVENT_READY); | |
| 5095 | + } | |
| 5096 | + }, { | |
| 5097 | + key: "unbuild", | |
| 5098 | + value: function unbuild() { | |
| 5099 | + if (!this.ready) { | |
| 5100 | + return; | |
| 5101 | + } | |
| 5102 | + this.ready = false; | |
| 5103 | + this.unbind(); | |
| 5104 | + this.resetPreview(); | |
| 5105 | + var parentNode = this.cropper.parentNode; | |
| 5106 | + if (parentNode) { | |
| 5107 | + parentNode.removeChild(this.cropper); | |
| 5108 | + } | |
| 5109 | + removeClass(this.element, CLASS_HIDDEN); | |
| 5110 | + } | |
| 5111 | + }, { | |
| 5112 | + key: "uncreate", | |
| 5113 | + value: function uncreate() { | |
| 5114 | + if (this.ready) { | |
| 5115 | + this.unbuild(); | |
| 5116 | + this.ready = false; | |
| 5117 | + this.cropped = false; | |
| 5118 | + } else if (this.sizing) { | |
| 5119 | + this.sizingImage.onload = null; | |
| 5120 | + this.sizing = false; | |
| 5121 | + this.sized = false; | |
| 5122 | + } else if (this.reloading) { | |
| 5123 | + this.xhr.onabort = null; | |
| 5124 | + this.xhr.abort(); | |
| 5125 | + } else if (this.image) { | |
| 5126 | + this.stop(); | |
| 5127 | + } | |
| 5128 | + } | |
| 5129 | + | |
| 5130 | + /** | |
| 5131 | + * Get the no conflict cropper class. | |
| 5132 | + * @returns {Cropper} The cropper class. | |
| 5133 | + */ | |
| 5134 | + }], [{ | |
| 5135 | + key: "noConflict", | |
| 5136 | + value: function noConflict() { | |
| 5137 | + window.Cropper = AnotherCropper; | |
| 5138 | + return Cropper; | |
| 5139 | + } | |
| 5140 | + | |
| 5141 | + /** | |
| 5142 | + * Change the default options. | |
| 5143 | + * @param {Object} options - The new default options. | |
| 5144 | + */ | |
| 5145 | + }, { | |
| 5146 | + key: "setDefaults", | |
| 5147 | + value: function setDefaults(options) { | |
| 5148 | + assign(DEFAULTS, isPlainObject(options) && options); | |
| 5149 | + } | |
| 5150 | + }]); | |
| 5151 | + }(); | |
| 5152 | + assign(Cropper.prototype, render, preview, events, handlers, change, methods); | |
| 5153 | + | |
| 5154 | + return Cropper; | |
| 5155 | + | |
| 5156 | +})); | |
| 5157 | + | |
| 5158 | + | |
| 5159 | +/***/ }, | |
| 5160 | + | |
| 5161 | +/***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/cropperjs/dist/cropper.css" | |
| 5162 | +/*!***************************************************************************************!*\ | |
| 5163 | + !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/cropperjs/dist/cropper.css ***! | |
| 5164 | + \***************************************************************************************/ | |
| 5165 | +(module, __webpack_exports__, __webpack_require__) { | |
| 5166 | + | |
| 1031 | 5167 | "use strict"; |
| 1032 | -/** | |
| 1033 | - * Copyright 2013-2015, Facebook, Inc. | |
| 1034 | - * All rights reserved. | |
| 5168 | +__webpack_require__.r(__webpack_exports__); | |
| 5169 | +/* harmony export */ __webpack_require__.d(__webpack_exports__, { | |
| 5170 | +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) | |
| 5171 | +/* harmony export */ }); | |
| 5172 | +/* harmony import */ var _css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); | |
| 5173 | +/* harmony import */ var _css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); | |
| 5174 | +/* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); | |
| 5175 | +/* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); | |
| 5176 | +/* harmony import */ var _css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../css-loader/dist/runtime/getUrl.js */ "./node_modules/css-loader/dist/runtime/getUrl.js"); | |
| 5177 | +/* harmony import */ var _css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2__); | |
| 5178 | +// Imports | |
| 5179 | + | |
| 5180 | + | |
| 5181 | + | |
| 5182 | +var ___CSS_LOADER_URL_IMPORT_0___ = new URL(/* asset import */ __webpack_require__(/*! data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAAA3NCSVQICAjb4U/gAAAABlBMVEXMzMz////TjRV2AAAACXBIWXMAAArrAAAK6wGCiw1aAAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAABFJREFUCJlj+M/AgBVhF/0PAH6/D/HkDxOGAAAAAElFTkSuQmCC */ "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAAA3NCSVQICAjb4U/gAAAABlBMVEXMzMz////TjRV2AAAACXBIWXMAAArrAAAK6wGCiw1aAAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAABFJREFUCJlj+M/AgBVhF/0PAH6/D/HkDxOGAAAAAElFTkSuQmCC"), __webpack_require__.b); | |
| 5183 | +var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); | |
| 5184 | +var ___CSS_LOADER_URL_REPLACEMENT_0___ = _css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_0___); | |
| 5185 | +// Module | |
| 5186 | +___CSS_LOADER_EXPORT___.push([module.id, `/*! | |
| 5187 | + * Cropper.js v1.6.2 | |
| 5188 | + * https://fengyuanchen.github.io/cropperjs | |
| 1035 | 5189 | * |
| 1036 | - * This source code is licensed under the BSD-style license found in the | |
| 1037 | - * LICENSE file in the root directory of this source tree. An additional grant | |
| 1038 | - * of patent rights can be found in the PATENTS file in the same directory. | |
| 5190 | + * Copyright 2015-present Chen Fengyuan | |
| 5191 | + * Released under the MIT license | |
| 1039 | 5192 | * |
| 1040 | - * @providesModule isEventSupported | |
| 5193 | + * Date: 2024-04-21T07:43:02.731Z | |
| 1041 | 5194 | */ |
| 1042 | 5195 | |
| 5196 | +.cropper-container { | |
| 5197 | + direction: ltr; | |
| 5198 | + font-size: 0; | |
| 5199 | + line-height: 0; | |
| 5200 | + position: relative; | |
| 5201 | + -ms-touch-action: none; | |
| 5202 | + touch-action: none; | |
| 5203 | + -webkit-touch-callout: none; | |
| 5204 | + -webkit-user-select: none; | |
| 5205 | + -moz-user-select: none; | |
| 5206 | + -ms-user-select: none; | |
| 5207 | + user-select: none; | |
| 5208 | +} | |
| 1043 | 5209 | |
| 5210 | +.cropper-container img { | |
| 5211 | + backface-visibility: hidden; | |
| 5212 | + display: block; | |
| 5213 | + height: 100%; | |
| 5214 | + image-orientation: 0deg; | |
| 5215 | + max-height: none !important; | |
| 5216 | + max-width: none !important; | |
| 5217 | + min-height: 0 !important; | |
| 5218 | + min-width: 0 !important; | |
| 5219 | + width: 100%; | |
| 5220 | + } | |
| 1044 | 5221 | |
| 1045 | -var ExecutionEnvironment = __webpack_require__(/*! ./ExecutionEnvironment */ "./node_modules/normalize-wheel/src/ExecutionEnvironment.js"); | |
| 5222 | +.cropper-wrap-box, | |
| 5223 | +.cropper-canvas, | |
| 5224 | +.cropper-drag-box, | |
| 5225 | +.cropper-crop-box, | |
| 5226 | +.cropper-modal { | |
| 5227 | + bottom: 0; | |
| 5228 | + left: 0; | |
| 5229 | + position: absolute; | |
| 5230 | + right: 0; | |
| 5231 | + top: 0; | |
| 5232 | +} | |
| 1046 | 5233 | |
| 1047 | -var useHasFeature; | |
| 1048 | -if (ExecutionEnvironment.canUseDOM) { | |
| 1049 | - useHasFeature = | |
| 1050 | - document.implementation && | |
| 1051 | - document.implementation.hasFeature && | |
| 1052 | - // always returns true in newer browsers as per the standard. | |
| 1053 | - // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature | |
| 1054 | - document.implementation.hasFeature('', '') !== true; | |
| 5234 | +.cropper-wrap-box, | |
| 5235 | +.cropper-canvas { | |
| 5236 | + overflow: hidden; | |
| 1055 | 5237 | } |
| 1056 | 5238 | |
| 1057 | -/** | |
| 1058 | - * Checks if an event is supported in the current execution environment. | |
| 1059 | - * | |
| 1060 | - * NOTE: This will not work correctly for non-generic events such as `change`, | |
| 1061 | - * `reset`, `load`, `error`, and `select`. | |
| 1062 | - * | |
| 1063 | - * Borrows from Modernizr. | |
| 1064 | - * | |
| 1065 | - * @param {string} eventNameSuffix Event name, e.g. "click". | |
| 1066 | - * @param {?boolean} capture Check if the capture phase is supported. | |
| 1067 | - * @return {boolean} True if the event is supported. | |
| 1068 | - * @internal | |
| 1069 | - * @license Modernizr 3.0.0pre (Custom Build) | MIT | |
| 1070 | - */ | |
| 1071 | -function isEventSupported(eventNameSuffix, capture) { | |
| 1072 | - if (!ExecutionEnvironment.canUseDOM || | |
| 1073 | - capture && !('addEventListener' in document)) { | |
| 1074 | - return false; | |
| 5239 | +.cropper-drag-box { | |
| 5240 | + background-color: #fff; | |
| 5241 | + opacity: 0; | |
| 5242 | +} | |
| 5243 | + | |
| 5244 | +.cropper-modal { | |
| 5245 | + background-color: #000; | |
| 5246 | + opacity: 0.5; | |
| 5247 | +} | |
| 5248 | + | |
| 5249 | +.cropper-view-box { | |
| 5250 | + display: block; | |
| 5251 | + height: 100%; | |
| 5252 | + outline: 1px solid #39f; | |
| 5253 | + outline-color: rgba(51, 153, 255, 0.75); | |
| 5254 | + overflow: hidden; | |
| 5255 | + width: 100%; | |
| 5256 | +} | |
| 5257 | + | |
| 5258 | +.cropper-dashed { | |
| 5259 | + border: 0 dashed #eee; | |
| 5260 | + display: block; | |
| 5261 | + opacity: 0.5; | |
| 5262 | + position: absolute; | |
| 5263 | +} | |
| 5264 | + | |
| 5265 | +.cropper-dashed.dashed-h { | |
| 5266 | + border-bottom-width: 1px; | |
| 5267 | + border-top-width: 1px; | |
| 5268 | + height: calc(100% / 3); | |
| 5269 | + left: 0; | |
| 5270 | + top: calc(100% / 3); | |
| 5271 | + width: 100%; | |
| 1075 | 5272 | } |
| 1076 | 5273 | |
| 1077 | - var eventName = 'on' + eventNameSuffix; | |
| 1078 | - var isSupported = eventName in document; | |
| 5274 | +.cropper-dashed.dashed-v { | |
| 5275 | + border-left-width: 1px; | |
| 5276 | + border-right-width: 1px; | |
| 5277 | + height: 100%; | |
| 5278 | + left: calc(100% / 3); | |
| 5279 | + top: 0; | |
| 5280 | + width: calc(100% / 3); | |
| 5281 | + } | |
| 1079 | 5282 | |
| 1080 | - if (!isSupported) { | |
| 1081 | - var element = document.createElement('div'); | |
| 1082 | - element.setAttribute(eventName, 'return;'); | |
| 1083 | - isSupported = typeof element[eventName] === 'function'; | |
| 5283 | +.cropper-center { | |
| 5284 | + display: block; | |
| 5285 | + height: 0; | |
| 5286 | + left: 50%; | |
| 5287 | + opacity: 0.75; | |
| 5288 | + position: absolute; | |
| 5289 | + top: 50%; | |
| 5290 | + width: 0; | |
| 5291 | +} | |
| 5292 | + | |
| 5293 | +.cropper-center::before, | |
| 5294 | + .cropper-center::after { | |
| 5295 | + background-color: #eee; | |
| 5296 | + content: ' '; | |
| 5297 | + display: block; | |
| 5298 | + position: absolute; | |
| 1084 | 5299 | } |
| 1085 | 5300 | |
| 1086 | - if (!isSupported && useHasFeature && eventNameSuffix === 'wheel') { | |
| 1087 | - // This is the only way to test support for the `wheel` event in IE9+. | |
| 1088 | - isSupported = document.implementation.hasFeature('Events.wheel', '3.0'); | |
| 5301 | +.cropper-center::before { | |
| 5302 | + height: 1px; | |
| 5303 | + left: -3px; | |
| 5304 | + top: 0; | |
| 5305 | + width: 7px; | |
| 1089 | 5306 | } |
| 1090 | 5307 | |
| 1091 | - return isSupported; | |
| 5308 | +.cropper-center::after { | |
| 5309 | + height: 7px; | |
| 5310 | + left: 0; | |
| 5311 | + top: -3px; | |
| 5312 | + width: 1px; | |
| 5313 | + } | |
| 5314 | + | |
| 5315 | +.cropper-face, | |
| 5316 | +.cropper-line, | |
| 5317 | +.cropper-point { | |
| 5318 | + display: block; | |
| 5319 | + height: 100%; | |
| 5320 | + opacity: 0.1; | |
| 5321 | + position: absolute; | |
| 5322 | + width: 100%; | |
| 1092 | 5323 | } |
| 1093 | 5324 | |
| 1094 | -module.exports = isEventSupported; | |
| 5325 | +.cropper-face { | |
| 5326 | + background-color: #fff; | |
| 5327 | + left: 0; | |
| 5328 | + top: 0; | |
| 5329 | +} | |
| 1095 | 5330 | |
| 5331 | +.cropper-line { | |
| 5332 | + background-color: #39f; | |
| 5333 | +} | |
| 1096 | 5334 | |
| 1097 | -/***/ }), | |
| 5335 | +.cropper-line.line-e { | |
| 5336 | + cursor: ew-resize; | |
| 5337 | + right: -3px; | |
| 5338 | + top: 0; | |
| 5339 | + width: 5px; | |
| 5340 | + } | |
| 1098 | 5341 | |
| 1099 | -/***/ "./node_modules/normalize-wheel/src/normalizeWheel.js": | |
| 1100 | -/*!************************************************************!*\ | |
| 1101 | - !*** ./node_modules/normalize-wheel/src/normalizeWheel.js ***! | |
| 1102 | - \************************************************************/ | |
| 1103 | -/***/ (function(module, __unused_webpack_exports, __webpack_require__) { | |
| 5342 | +.cropper-line.line-n { | |
| 5343 | + cursor: ns-resize; | |
| 5344 | + height: 5px; | |
| 5345 | + left: 0; | |
| 5346 | + top: -3px; | |
| 5347 | + } | |
| 1104 | 5348 | |
| 5349 | +.cropper-line.line-w { | |
| 5350 | + cursor: ew-resize; | |
| 5351 | + left: -3px; | |
| 5352 | + top: 0; | |
| 5353 | + width: 5px; | |
| 5354 | + } | |
| 5355 | + | |
| 5356 | +.cropper-line.line-s { | |
| 5357 | + bottom: -3px; | |
| 5358 | + cursor: ns-resize; | |
| 5359 | + height: 5px; | |
| 5360 | + left: 0; | |
| 5361 | + } | |
| 5362 | + | |
| 5363 | +.cropper-point { | |
| 5364 | + background-color: #39f; | |
| 5365 | + height: 5px; | |
| 5366 | + opacity: 0.75; | |
| 5367 | + width: 5px; | |
| 5368 | +} | |
| 5369 | + | |
| 5370 | +.cropper-point.point-e { | |
| 5371 | + cursor: ew-resize; | |
| 5372 | + margin-top: -3px; | |
| 5373 | + right: -3px; | |
| 5374 | + top: 50%; | |
| 5375 | + } | |
| 5376 | + | |
| 5377 | +.cropper-point.point-n { | |
| 5378 | + cursor: ns-resize; | |
| 5379 | + left: 50%; | |
| 5380 | + margin-left: -3px; | |
| 5381 | + top: -3px; | |
| 5382 | + } | |
| 5383 | + | |
| 5384 | +.cropper-point.point-w { | |
| 5385 | + cursor: ew-resize; | |
| 5386 | + left: -3px; | |
| 5387 | + margin-top: -3px; | |
| 5388 | + top: 50%; | |
| 5389 | + } | |
| 5390 | + | |
| 5391 | +.cropper-point.point-s { | |
| 5392 | + bottom: -3px; | |
| 5393 | + cursor: s-resize; | |
| 5394 | + left: 50%; | |
| 5395 | + margin-left: -3px; | |
| 5396 | + } | |
| 5397 | + | |
| 5398 | +.cropper-point.point-ne { | |
| 5399 | + cursor: nesw-resize; | |
| 5400 | + right: -3px; | |
| 5401 | + top: -3px; | |
| 5402 | + } | |
| 5403 | + | |
| 5404 | +.cropper-point.point-nw { | |
| 5405 | + cursor: nwse-resize; | |
| 5406 | + left: -3px; | |
| 5407 | + top: -3px; | |
| 5408 | + } | |
| 5409 | + | |
| 5410 | +.cropper-point.point-sw { | |
| 5411 | + bottom: -3px; | |
| 5412 | + cursor: nesw-resize; | |
| 5413 | + left: -3px; | |
| 5414 | + } | |
| 5415 | + | |
| 5416 | +.cropper-point.point-se { | |
| 5417 | + bottom: -3px; | |
| 5418 | + cursor: nwse-resize; | |
| 5419 | + height: 20px; | |
| 5420 | + opacity: 1; | |
| 5421 | + right: -3px; | |
| 5422 | + width: 20px; | |
| 5423 | + } | |
| 5424 | + | |
| 5425 | +@media (min-width: 768px) { | |
| 5426 | + | |
| 5427 | +.cropper-point.point-se { | |
| 5428 | + height: 15px; | |
| 5429 | + width: 15px; | |
| 5430 | + } | |
| 5431 | + } | |
| 5432 | + | |
| 5433 | +@media (min-width: 992px) { | |
| 5434 | + | |
| 5435 | +.cropper-point.point-se { | |
| 5436 | + height: 10px; | |
| 5437 | + width: 10px; | |
| 5438 | + } | |
| 5439 | + } | |
| 5440 | + | |
| 5441 | +@media (min-width: 1200px) { | |
| 5442 | + | |
| 5443 | +.cropper-point.point-se { | |
| 5444 | + height: 5px; | |
| 5445 | + opacity: 0.75; | |
| 5446 | + width: 5px; | |
| 5447 | + } | |
| 5448 | + } | |
| 5449 | + | |
| 5450 | +.cropper-point.point-se::before { | |
| 5451 | + background-color: #39f; | |
| 5452 | + bottom: -50%; | |
| 5453 | + content: ' '; | |
| 5454 | + display: block; | |
| 5455 | + height: 200%; | |
| 5456 | + opacity: 0; | |
| 5457 | + position: absolute; | |
| 5458 | + right: -50%; | |
| 5459 | + width: 200%; | |
| 5460 | + } | |
| 5461 | + | |
| 5462 | +.cropper-invisible { | |
| 5463 | + opacity: 0; | |
| 5464 | +} | |
| 5465 | + | |
| 5466 | +.cropper-bg { | |
| 5467 | + background-image: url(${___CSS_LOADER_URL_REPLACEMENT_0___}); | |
| 5468 | +} | |
| 5469 | + | |
| 5470 | +.cropper-hide { | |
| 5471 | + display: block; | |
| 5472 | + height: 0; | |
| 5473 | + position: absolute; | |
| 5474 | + width: 0; | |
| 5475 | +} | |
| 5476 | + | |
| 5477 | +.cropper-hidden { | |
| 5478 | + display: none !important; | |
| 5479 | +} | |
| 5480 | + | |
| 5481 | +.cropper-move { | |
| 5482 | + cursor: move; | |
| 5483 | +} | |
| 5484 | + | |
| 5485 | +.cropper-crop { | |
| 5486 | + cursor: crosshair; | |
| 5487 | +} | |
| 5488 | + | |
| 5489 | +.cropper-disabled .cropper-drag-box, | |
| 5490 | +.cropper-disabled .cropper-face, | |
| 5491 | +.cropper-disabled .cropper-line, | |
| 5492 | +.cropper-disabled .cropper-point { | |
| 5493 | + cursor: not-allowed; | |
| 5494 | +} | |
| 5495 | +`, "",{"version":3,"sources":["webpack://./node_modules/cropperjs/dist/cropper.css"],"names":[],"mappings":"AAAA;;;;;;;;EAQE;;AAEF;EACE,cAAc;EACd,YAAY;EACZ,cAAc;EACd,kBAAkB;EAClB,sBAAsB;MAClB,kBAAkB;EACtB,2BAA2B;EAC3B,yBAAyB;KACtB,sBAAsB;MACrB,qBAAqB;UACjB,iBAAiB;AAC3B;;AAEA;IACI,2BAA2B;IAC3B,cAAc;IACd,YAAY;IACZ,uBAAuB;IACvB,2BAA2B;IAC3B,0BAA0B;IAC1B,wBAAwB;IACxB,uBAAuB;IACvB,WAAW;EACb;;AAEF;;;;;EAKE,SAAS;EACT,OAAO;EACP,kBAAkB;EAClB,QAAQ;EACR,MAAM;AACR;;AAEA;;EAEE,gBAAgB;AAClB;;AAEA;EACE,sBAAsB;EACtB,UAAU;AACZ;;AAEA;EACE,sBAAsB;EACtB,YAAY;AACd;;AAEA;EACE,cAAc;EACd,YAAY;EACZ,uBAAuB;EACvB,uCAAuC;EACvC,gBAAgB;EAChB,WAAW;AACb;;AAEA;EACE,qBAAqB;EACrB,cAAc;EACd,YAAY;EACZ,kBAAkB;AACpB;;AAEA;IACI,wBAAwB;IACxB,qBAAqB;IACrB,sBAAsB;IACtB,OAAO;IACP,mBAAmB;IACnB,WAAW;EACb;;AAEF;IACI,sBAAsB;IACtB,uBAAuB;IACvB,YAAY;IACZ,oBAAoB;IACpB,MAAM;IACN,qBAAqB;EACvB;;AAEF;EACE,cAAc;EACd,SAAS;EACT,SAAS;EACT,aAAa;EACb,kBAAkB;EAClB,QAAQ;EACR,QAAQ;AACV;;AAEA;;IAEI,sBAAsB;IACtB,YAAY;IACZ,cAAc;IACd,kBAAkB;EACpB;;AAEF;IACI,WAAW;IACX,UAAU;IACV,MAAM;IACN,UAAU;EACZ;;AAEF;IACI,WAAW;IACX,OAAO;IACP,SAAS;IACT,UAAU;EACZ;;AAEF;;;EAGE,cAAc;EACd,YAAY;EACZ,YAAY;EACZ,kBAAkB;EAClB,WAAW;AACb;;AAEA;EACE,sBAAsB;EACtB,OAAO;EACP,MAAM;AACR;;AAEA;EACE,sBAAsB;AACxB;;AAEA;IACI,iBAAiB;IACjB,WAAW;IACX,MAAM;IACN,UAAU;EACZ;;AAEF;IACI,iBAAiB;IACjB,WAAW;IACX,OAAO;IACP,SAAS;EACX;;AAEF;IACI,iBAAiB;IACjB,UAAU;IACV,MAAM;IACN,UAAU;EACZ;;AAEF;IACI,YAAY;IACZ,iBAAiB;IACjB,WAAW;IACX,OAAO;EACT;;AAEF;EACE,sBAAsB;EACtB,WAAW;EACX,aAAa;EACb,UAAU;AACZ;;AAEA;IACI,iBAAiB;IACjB,gBAAgB;IAChB,WAAW;IACX,QAAQ;EACV;;AAEF;IACI,iBAAiB;IACjB,SAAS;IACT,iBAAiB;IACjB,SAAS;EACX;;AAEF;IACI,iBAAiB;IACjB,UAAU;IACV,gBAAgB;IAChB,QAAQ;EACV;;AAEF;IACI,YAAY;IACZ,gBAAgB;IAChB,SAAS;IACT,iBAAiB;EACnB;;AAEF;IACI,mBAAmB;IACnB,WAAW;IACX,SAAS;EACX;;AAEF;IACI,mBAAmB;IACnB,UAAU;IACV,SAAS;EACX;;AAEF;IACI,YAAY;IACZ,mBAAmB;IACnB,UAAU;EACZ;;AAEF;IACI,YAAY;IACZ,mBAAmB;IACnB,YAAY;IACZ,UAAU;IACV,WAAW;IACX,WAAW;EACb;;AAEF;;AAEA;MACM,YAAY;MACZ,WAAW;EACf;IACE;;AAEJ;;AAEA;MACM,YAAY;MACZ,WAAW;EACf;IACE;;AAEJ;;AAEA;MACM,WAAW;MACX,aAAa;MACb,UAAU;EACd;IACE;;AAEJ;IACI,sBAAsB;IACtB,YAAY;IACZ,YAAY;IACZ,cAAc;IACd,YAAY;IACZ,UAAU;IACV,kBAAkB;IAClB,WAAW;IACX,WAAW;EACb;;AAEF;EACE,UAAU;AACZ;;AAEA;EACE,yDAA+Q;AACjR;;AAEA;EACE,cAAc;EACd,SAAS;EACT,kBAAkB;EAClB,QAAQ;AACV;;AAEA;EACE,wBAAwB;AAC1B;;AAEA;EACE,YAAY;AACd;;AAEA;EACE,iBAAiB;AACnB;;AAEA;;;;EAIE,mBAAmB;AACrB","sourcesContent":["/*!\n * Cropper.js v1.6.2\n * https://fengyuanchen.github.io/cropperjs\n *\n * Copyright 2015-present Chen Fengyuan\n * Released under the MIT license\n *\n * Date: 2024-04-21T07:43:02.731Z\n */\n\n.cropper-container {\n direction: ltr;\n font-size: 0;\n line-height: 0;\n position: relative;\n -ms-touch-action: none;\n touch-action: none;\n -webkit-touch-callout: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n.cropper-container img {\n backface-visibility: hidden;\n display: block;\n height: 100%;\n image-orientation: 0deg;\n max-height: none !important;\n max-width: none !important;\n min-height: 0 !important;\n min-width: 0 !important;\n width: 100%;\n }\n\n.cropper-wrap-box,\n.cropper-canvas,\n.cropper-drag-box,\n.cropper-crop-box,\n.cropper-modal {\n bottom: 0;\n left: 0;\n position: absolute;\n right: 0;\n top: 0;\n}\n\n.cropper-wrap-box,\n.cropper-canvas {\n overflow: hidden;\n}\n\n.cropper-drag-box {\n background-color: #fff;\n opacity: 0;\n}\n\n.cropper-modal {\n background-color: #000;\n opacity: 0.5;\n}\n\n.cropper-view-box {\n display: block;\n height: 100%;\n outline: 1px solid #39f;\n outline-color: rgba(51, 153, 255, 0.75);\n overflow: hidden;\n width: 100%;\n}\n\n.cropper-dashed {\n border: 0 dashed #eee;\n display: block;\n opacity: 0.5;\n position: absolute;\n}\n\n.cropper-dashed.dashed-h {\n border-bottom-width: 1px;\n border-top-width: 1px;\n height: calc(100% / 3);\n left: 0;\n top: calc(100% / 3);\n width: 100%;\n }\n\n.cropper-dashed.dashed-v {\n border-left-width: 1px;\n border-right-width: 1px;\n height: 100%;\n left: calc(100% / 3);\n top: 0;\n width: calc(100% / 3);\n }\n\n.cropper-center {\n display: block;\n height: 0;\n left: 50%;\n opacity: 0.75;\n position: absolute;\n top: 50%;\n width: 0;\n}\n\n.cropper-center::before,\n .cropper-center::after {\n background-color: #eee;\n content: ' ';\n display: block;\n position: absolute;\n }\n\n.cropper-center::before {\n height: 1px;\n left: -3px;\n top: 0;\n width: 7px;\n }\n\n.cropper-center::after {\n height: 7px;\n left: 0;\n top: -3px;\n width: 1px;\n }\n\n.cropper-face,\n.cropper-line,\n.cropper-point {\n display: block;\n height: 100%;\n opacity: 0.1;\n position: absolute;\n width: 100%;\n}\n\n.cropper-face {\n background-color: #fff;\n left: 0;\n top: 0;\n}\n\n.cropper-line {\n background-color: #39f;\n}\n\n.cropper-line.line-e {\n cursor: ew-resize;\n right: -3px;\n top: 0;\n width: 5px;\n }\n\n.cropper-line.line-n {\n cursor: ns-resize;\n height: 5px;\n left: 0;\n top: -3px;\n }\n\n.cropper-line.line-w {\n cursor: ew-resize;\n left: -3px;\n top: 0;\n width: 5px;\n }\n\n.cropper-line.line-s {\n bottom: -3px;\n cursor: ns-resize;\n height: 5px;\n left: 0;\n }\n\n.cropper-point {\n background-color: #39f;\n height: 5px;\n opacity: 0.75;\n width: 5px;\n}\n\n.cropper-point.point-e {\n cursor: ew-resize;\n margin-top: -3px;\n right: -3px;\n top: 50%;\n }\n\n.cropper-point.point-n {\n cursor: ns-resize;\n left: 50%;\n margin-left: -3px;\n top: -3px;\n }\n\n.cropper-point.point-w {\n cursor: ew-resize;\n left: -3px;\n margin-top: -3px;\n top: 50%;\n }\n\n.cropper-point.point-s {\n bottom: -3px;\n cursor: s-resize;\n left: 50%;\n margin-left: -3px;\n }\n\n.cropper-point.point-ne {\n cursor: nesw-resize;\n right: -3px;\n top: -3px;\n }\n\n.cropper-point.point-nw {\n cursor: nwse-resize;\n left: -3px;\n top: -3px;\n }\n\n.cropper-point.point-sw {\n bottom: -3px;\n cursor: nesw-resize;\n left: -3px;\n }\n\n.cropper-point.point-se {\n bottom: -3px;\n cursor: nwse-resize;\n height: 20px;\n opacity: 1;\n right: -3px;\n width: 20px;\n }\n\n@media (min-width: 768px) {\n\n.cropper-point.point-se {\n height: 15px;\n width: 15px;\n }\n }\n\n@media (min-width: 992px) {\n\n.cropper-point.point-se {\n height: 10px;\n width: 10px;\n }\n }\n\n@media (min-width: 1200px) {\n\n.cropper-point.point-se {\n height: 5px;\n opacity: 0.75;\n width: 5px;\n }\n }\n\n.cropper-point.point-se::before {\n background-color: #39f;\n bottom: -50%;\n content: ' ';\n display: block;\n height: 200%;\n opacity: 0;\n position: absolute;\n right: -50%;\n width: 200%;\n }\n\n.cropper-invisible {\n opacity: 0;\n}\n\n.cropper-bg {\n background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAAA3NCSVQICAjb4U/gAAAABlBMVEXMzMz////TjRV2AAAACXBIWXMAAArrAAAK6wGCiw1aAAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAABFJREFUCJlj+M/AgBVhF/0PAH6/D/HkDxOGAAAAAElFTkSuQmCC');\n}\n\n.cropper-hide {\n display: block;\n height: 0;\n position: absolute;\n width: 0;\n}\n\n.cropper-hidden {\n display: none !important;\n}\n\n.cropper-move {\n cursor: move;\n}\n\n.cropper-crop {\n cursor: crosshair;\n}\n\n.cropper-disabled .cropper-drag-box,\n.cropper-disabled .cropper-face,\n.cropper-disabled .cropper-line,\n.cropper-disabled .cropper-point {\n cursor: not-allowed;\n}\n"],"sourceRoot":""}]); | |
| 5496 | +// Exports | |
| 5497 | +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); | |
| 5498 | + | |
| 5499 | + | |
| 5500 | +/***/ }, | |
| 5501 | + | |
| 5502 | +/***/ "./node_modules/css-loader/dist/cjs.js!./node_modules/toastify-js/src/toastify.css" | |
| 5503 | +/*!*****************************************************************************************!*\ | |
| 5504 | + !*** ./node_modules/css-loader/dist/cjs.js!./node_modules/toastify-js/src/toastify.css ***! | |
| 5505 | + \*****************************************************************************************/ | |
| 5506 | +(module, __webpack_exports__, __webpack_require__) { | |
| 5507 | + | |
| 1105 | 5508 | "use strict"; |
| 1106 | -/** | |
| 1107 | - * Copyright (c) 2015, Facebook, Inc. | |
| 1108 | - * All rights reserved. | |
| 5509 | +__webpack_require__.r(__webpack_exports__); | |
| 5510 | +/* harmony export */ __webpack_require__.d(__webpack_exports__, { | |
| 5511 | +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) | |
| 5512 | +/* harmony export */ }); | |
| 5513 | +/* harmony import */ var _css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js"); | |
| 5514 | +/* harmony import */ var _css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); | |
| 5515 | +/* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); | |
| 5516 | +/* harmony import */ var _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); | |
| 5517 | +// Imports | |
| 5518 | + | |
| 5519 | + | |
| 5520 | +var ___CSS_LOADER_EXPORT___ = _css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); | |
| 5521 | +// Module | |
| 5522 | +___CSS_LOADER_EXPORT___.push([module.id, `/*! | |
| 5523 | + * Toastify js 1.12.0 | |
| 5524 | + * https://github.com/apvarun/toastify-js | |
| 5525 | + * @license MIT licensed | |
| 1109 | 5526 | * |
| 1110 | - * This source code is licensed under the BSD-style license found in the | |
| 1111 | - * LICENSE file in the root directory of this source tree. An additional grant | |
| 1112 | - * of patent rights can be found in the PATENTS file in the same directory. | |
| 1113 | - * | |
| 1114 | - * @providesModule normalizeWheel | |
| 1115 | - * @typechecks | |
| 5527 | + * Copyright (C) 2018 Varun A P | |
| 1116 | 5528 | */ |
| 1117 | 5529 | |
| 5530 | +.toastify { | |
| 5531 | + padding: 12px 20px; | |
| 5532 | + color: #ffffff; | |
| 5533 | + display: inline-block; | |
| 5534 | + box-shadow: 0 3px 6px -1px rgba(0, 0, 0, 0.12), 0 10px 36px -4px rgba(77, 96, 232, 0.3); | |
| 5535 | + background: -webkit-linear-gradient(315deg, #73a5ff, #5477f5); | |
| 5536 | + background: linear-gradient(135deg, #73a5ff, #5477f5); | |
| 5537 | + position: fixed; | |
| 5538 | + opacity: 0; | |
| 5539 | + transition: all 0.4s cubic-bezier(0.215, 0.61, 0.355, 1); | |
| 5540 | + border-radius: 2px; | |
| 5541 | + cursor: pointer; | |
| 5542 | + text-decoration: none; | |
| 5543 | + max-width: calc(50% - 20px); | |
| 5544 | + z-index: 2147483647; | |
| 5545 | +} | |
| 1118 | 5546 | |
| 5547 | +.toastify.on { | |
| 5548 | + opacity: 1; | |
| 5549 | +} | |
| 1119 | 5550 | |
| 1120 | -var UserAgent_DEPRECATED = __webpack_require__(/*! ./UserAgent_DEPRECATED */ "./node_modules/normalize-wheel/src/UserAgent_DEPRECATED.js"); | |
| 5551 | +.toast-close { | |
| 5552 | + background: transparent; | |
| 5553 | + border: 0; | |
| 5554 | + color: white; | |
| 5555 | + cursor: pointer; | |
| 5556 | + font-family: inherit; | |
| 5557 | + font-size: 1em; | |
| 5558 | + opacity: 0.4; | |
| 5559 | + padding: 0 5px; | |
| 5560 | +} | |
| 1121 | 5561 | |
| 1122 | -var isEventSupported = __webpack_require__(/*! ./isEventSupported */ "./node_modules/normalize-wheel/src/isEventSupported.js"); | |
| 5562 | +.toastify-right { | |
| 5563 | + right: 15px; | |
| 5564 | +} | |
| 1123 | 5565 | |
| 5566 | +.toastify-left { | |
| 5567 | + left: 15px; | |
| 5568 | +} | |
| 1124 | 5569 | |
| 1125 | -// Reasonable defaults | |
| 1126 | -var PIXEL_STEP = 10; | |
| 1127 | -var LINE_HEIGHT = 40; | |
| 1128 | -var PAGE_HEIGHT = 800; | |
| 5570 | +.toastify-top { | |
| 5571 | + top: -150px; | |
| 5572 | +} | |
| 1129 | 5573 | |
| 1130 | -/** | |
| 1131 | - * Mouse wheel (and 2-finger trackpad) support on the web sucks. It is | |
| 1132 | - * complicated, thus this doc is long and (hopefully) detailed enough to answer | |
| 1133 | - * your questions. | |
| 1134 | - * | |
| 1135 | - * If you need to react to the mouse wheel in a predictable way, this code is | |
| 1136 | - * like your bestest friend. * hugs * | |
| 1137 | - * | |
| 1138 | - * As of today, there are 4 DOM event types you can listen to: | |
| 1139 | - * | |
| 1140 | - * 'wheel' -- Chrome(31+), FF(17+), IE(9+) | |
| 1141 | - * 'mousewheel' -- Chrome, IE(6+), Opera, Safari | |
| 1142 | - * 'MozMousePixelScroll' -- FF(3.5 only!) (2010-2013) -- don't bother! | |
| 1143 | - * 'DOMMouseScroll' -- FF(0.9.7+) since 2003 | |
| 1144 | - * | |
| 1145 | - * So what to do? The is the best: | |
| 1146 | - * | |
| 1147 | - * normalizeWheel.getEventType(); | |
| 1148 | - * | |
| 1149 | - * In your event callback, use this code to get sane interpretation of the | |
| 1150 | - * deltas. This code will return an object with properties: | |
| 1151 | - * | |
| 1152 | - * spinX -- normalized spin speed (use for zoom) - x plane | |
| 1153 | - * spinY -- " - y plane | |
| 1154 | - * pixelX -- normalized distance (to pixels) - x plane | |
| 1155 | - * pixelY -- " - y plane | |
| 1156 | - * | |
| 1157 | - * Wheel values are provided by the browser assuming you are using the wheel to | |
| 1158 | - * scroll a web page by a number of lines or pixels (or pages). Values can vary | |
| 1159 | - * significantly on different platforms and browsers, forgetting that you can | |
| 1160 | - * scroll at different speeds. Some devices (like trackpads) emit more events | |
| 1161 | - * at smaller increments with fine granularity, and some emit massive jumps with | |
| 1162 | - * linear speed or acceleration. | |
| 1163 | - * | |
| 1164 | - * This code does its best to normalize the deltas for you: | |
| 1165 | - * | |
| 1166 | - * - spin is trying to normalize how far the wheel was spun (or trackpad | |
| 1167 | - * dragged). This is super useful for zoom support where you want to | |
| 1168 | - * throw away the chunky scroll steps on the PC and make those equal to | |
| 1169 | - * the slow and smooth tiny steps on the Mac. Key data: This code tries to | |
| 1170 | - * resolve a single slow step on a wheel to 1. | |
| 1171 | - * | |
| 1172 | - * - pixel is normalizing the desired scroll delta in pixel units. You'll | |
| 1173 | - * get the crazy differences between browsers, but at least it'll be in | |
| 1174 | - * pixels! | |
| 1175 | - * | |
| 1176 | - * - positive value indicates scrolling DOWN/RIGHT, negative UP/LEFT. This | |
| 1177 | - * should translate to positive value zooming IN, negative zooming OUT. | |
| 1178 | - * This matches the newer 'wheel' event. | |
| 1179 | - * | |
| 1180 | - * Why are there spinX, spinY (or pixels)? | |
| 1181 | - * | |
| 1182 | - * - spinX is a 2-finger side drag on the trackpad, and a shift + wheel turn | |
| 1183 | - * with a mouse. It results in side-scrolling in the browser by default. | |
| 1184 | - * | |
| 1185 | - * - spinY is what you expect -- it's the classic axis of a mouse wheel. | |
| 1186 | - * | |
| 1187 | - * - I dropped spinZ/pixelZ. It is supported by the DOM 3 'wheel' event and | |
| 1188 | - * probably is by browsers in conjunction with fancy 3D controllers .. but | |
| 1189 | - * you know. | |
| 1190 | - * | |
| 1191 | - * Implementation info: | |
| 1192 | - * | |
| 1193 | - * Examples of 'wheel' event if you scroll slowly (down) by one step with an | |
| 1194 | - * average mouse: | |
| 1195 | - * | |
| 1196 | - * OS X + Chrome (mouse) - 4 pixel delta (wheelDelta -120) | |
| 1197 | - * OS X + Safari (mouse) - N/A pixel delta (wheelDelta -12) | |
| 1198 | - * OS X + Firefox (mouse) - 0.1 line delta (wheelDelta N/A) | |
| 1199 | - * Win8 + Chrome (mouse) - 100 pixel delta (wheelDelta -120) | |
| 1200 | - * Win8 + Firefox (mouse) - 3 line delta (wheelDelta -120) | |
| 1201 | - * | |
| 1202 | - * On the trackpad: | |
| 1203 | - * | |
| 1204 | - * OS X + Chrome (trackpad) - 2 pixel delta (wheelDelta -6) | |
| 1205 | - * OS X + Firefox (trackpad) - 1 pixel delta (wheelDelta N/A) | |
| 1206 | - * | |
| 1207 | - * On other/older browsers.. it's more complicated as there can be multiple and | |
| 1208 | - * also missing delta values. | |
| 1209 | - * | |
| 1210 | - * The 'wheel' event is more standard: | |
| 1211 | - * | |
| 1212 | - * http://www.w3.org/TR/DOM-Level-3-Events/#events-wheelevents | |
| 1213 | - * | |
| 1214 | - * The basics is that it includes a unit, deltaMode (pixels, lines, pages), and | |
| 1215 | - * deltaX, deltaY and deltaZ. Some browsers provide other values to maintain | |
| 1216 | - * backward compatibility with older events. Those other values help us | |
| 1217 | - * better normalize spin speed. Example of what the browsers provide: | |
| 1218 | - * | |
| 1219 | - * | event.wheelDelta | event.detail | |
| 1220 | - * ------------------+------------------+-------------- | |
| 1221 | - * Safari v5/OS X | -120 | 0 | |
| 1222 | - * Safari v5/Win7 | -120 | 0 | |
| 1223 | - * Chrome v17/OS X | -120 | 0 | |
| 1224 | - * Chrome v17/Win7 | -120 | 0 | |
| 1225 | - * IE9/Win7 | -120 | undefined | |
| 1226 | - * Firefox v4/OS X | undefined | 1 | |
| 1227 | - * Firefox v4/Win7 | undefined | 3 | |
| 1228 | - * | |
| 1229 | - */ | |
| 1230 | -function normalizeWheel(/*object*/ event) /*object*/ { | |
| 1231 | - var sX = 0, sY = 0, // spinX, spinY | |
| 1232 | - pX = 0, pY = 0; // pixelX, pixelY | |
| 5574 | +.toastify-bottom { | |
| 5575 | + bottom: -150px; | |
| 5576 | +} | |
| 1233 | 5577 | |
| 1234 | - // Legacy | |
| 1235 | - if ('detail' in event) { sY = event.detail; } | |
| 1236 | - if ('wheelDelta' in event) { sY = -event.wheelDelta / 120; } | |
| 1237 | - if ('wheelDeltaY' in event) { sY = -event.wheelDeltaY / 120; } | |
| 1238 | - if ('wheelDeltaX' in event) { sX = -event.wheelDeltaX / 120; } | |
| 5578 | +.toastify-rounded { | |
| 5579 | + border-radius: 25px; | |
| 5580 | +} | |
| 1239 | 5581 | |
| 1240 | - // side scrolling on FF with DOMMouseScroll | |
| 1241 | - if ( 'axis' in event && event.axis === event.HORIZONTAL_AXIS ) { | |
| 1242 | - sX = sY; | |
| 1243 | - sY = 0; | |
| 1244 | - } | |
| 5582 | +.toastify-avatar { | |
| 5583 | + width: 1.5em; | |
| 5584 | + height: 1.5em; | |
| 5585 | + margin: -7px 5px; | |
| 5586 | + border-radius: 2px; | |
| 5587 | +} | |
| 1245 | 5588 | |
| 1246 | - pX = sX * PIXEL_STEP; | |
| 1247 | - pY = sY * PIXEL_STEP; | |
| 5589 | +.toastify-center { | |
| 5590 | + margin-left: auto; | |
| 5591 | + margin-right: auto; | |
| 5592 | + left: 0; | |
| 5593 | + right: 0; | |
| 5594 | + max-width: fit-content; | |
| 5595 | + max-width: -moz-fit-content; | |
| 5596 | +} | |
| 1248 | 5597 | |
| 1249 | - if ('deltaY' in event) { pY = event.deltaY; } | |
| 1250 | - if ('deltaX' in event) { pX = event.deltaX; } | |
| 5598 | +@media only screen and (max-width: 360px) { | |
| 5599 | + .toastify-right, .toastify-left { | |
| 5600 | + margin-left: auto; | |
| 5601 | + margin-right: auto; | |
| 5602 | + left: 0; | |
| 5603 | + right: 0; | |
| 5604 | + max-width: fit-content; | |
| 5605 | + } | |
| 5606 | +} | |
| 5607 | +`, "",{"version":3,"sources":["webpack://./node_modules/toastify-js/src/toastify.css"],"names":[],"mappings":"AAAA;;;;;;EAME;;AAEF;IACI,kBAAkB;IAClB,cAAc;IACd,qBAAqB;IACrB,uFAAuF;IACvF,6DAA6D;IAC7D,qDAAqD;IACrD,eAAe;IACf,UAAU;IACV,wDAAwD;IACxD,kBAAkB;IAClB,eAAe;IACf,qBAAqB;IACrB,2BAA2B;IAC3B,mBAAmB;AACvB;;AAEA;IACI,UAAU;AACd;;AAEA;IACI,uBAAuB;IACvB,SAAS;IACT,YAAY;IACZ,eAAe;IACf,oBAAoB;IACpB,cAAc;IACd,YAAY;IACZ,cAAc;AAClB;;AAEA;IACI,WAAW;AACf;;AAEA;IACI,UAAU;AACd;;AAEA;IACI,WAAW;AACf;;AAEA;IACI,cAAc;AAClB;;AAEA;IACI,mBAAmB;AACvB;;AAEA;IACI,YAAY;IACZ,aAAa;IACb,gBAAgB;IAChB,kBAAkB;AACtB;;AAEA;IACI,iBAAiB;IACjB,kBAAkB;IAClB,OAAO;IACP,QAAQ;IACR,sBAAsB;IACtB,2BAA2B;AAC/B;;AAEA;IACI;QACI,iBAAiB;QACjB,kBAAkB;QAClB,OAAO;QACP,QAAQ;QACR,sBAAsB;IAC1B;AACJ","sourcesContent":["/*!\n * Toastify js 1.12.0\n * https://github.com/apvarun/toastify-js\n * @license MIT licensed\n *\n * Copyright (C) 2018 Varun A P\n */\n\n.toastify {\n padding: 12px 20px;\n color: #ffffff;\n display: inline-block;\n box-shadow: 0 3px 6px -1px rgba(0, 0, 0, 0.12), 0 10px 36px -4px rgba(77, 96, 232, 0.3);\n background: -webkit-linear-gradient(315deg, #73a5ff, #5477f5);\n background: linear-gradient(135deg, #73a5ff, #5477f5);\n position: fixed;\n opacity: 0;\n transition: all 0.4s cubic-bezier(0.215, 0.61, 0.355, 1);\n border-radius: 2px;\n cursor: pointer;\n text-decoration: none;\n max-width: calc(50% - 20px);\n z-index: 2147483647;\n}\n\n.toastify.on {\n opacity: 1;\n}\n\n.toast-close {\n background: transparent;\n border: 0;\n color: white;\n cursor: pointer;\n font-family: inherit;\n font-size: 1em;\n opacity: 0.4;\n padding: 0 5px;\n}\n\n.toastify-right {\n right: 15px;\n}\n\n.toastify-left {\n left: 15px;\n}\n\n.toastify-top {\n top: -150px;\n}\n\n.toastify-bottom {\n bottom: -150px;\n}\n\n.toastify-rounded {\n border-radius: 25px;\n}\n\n.toastify-avatar {\n width: 1.5em;\n height: 1.5em;\n margin: -7px 5px;\n border-radius: 2px;\n}\n\n.toastify-center {\n margin-left: auto;\n margin-right: auto;\n left: 0;\n right: 0;\n max-width: fit-content;\n max-width: -moz-fit-content;\n}\n\n@media only screen and (max-width: 360px) {\n .toastify-right, .toastify-left {\n margin-left: auto;\n margin-right: auto;\n left: 0;\n right: 0;\n max-width: fit-content;\n }\n}\n"],"sourceRoot":""}]); | |
| 5608 | +// Exports | |
| 5609 | +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); | |
| 1251 | 5610 | |
| 1252 | - if ((pX || pY) && event.deltaMode) { | |
| 1253 | - if (event.deltaMode == 1) { // delta in LINE units | |
| 1254 | - pX *= LINE_HEIGHT; | |
| 1255 | - pY *= LINE_HEIGHT; | |
| 1256 | - } else { // delta in PAGE units | |
| 1257 | - pX *= PAGE_HEIGHT; | |
| 1258 | - pY *= PAGE_HEIGHT; | |
| 5611 | + | |
| 5612 | +/***/ }, | |
| 5613 | + | |
| 5614 | +/***/ "./node_modules/css-loader/dist/runtime/api.js" | |
| 5615 | +/*!*****************************************************!*\ | |
| 5616 | + !*** ./node_modules/css-loader/dist/runtime/api.js ***! | |
| 5617 | + \*****************************************************/ | |
| 5618 | +(module) { | |
| 5619 | + | |
| 5620 | +"use strict"; | |
| 5621 | + | |
| 5622 | + | |
| 5623 | +/* | |
| 5624 | + MIT License http://www.opensource.org/licenses/mit-license.php | |
| 5625 | + Author Tobias Koppers @sokra | |
| 5626 | +*/ | |
| 5627 | +module.exports = function (cssWithMappingToString) { | |
| 5628 | + var list = []; | |
| 5629 | + | |
| 5630 | + // return the list of modules as css string | |
| 5631 | + list.toString = function toString() { | |
| 5632 | + return this.map(function (item) { | |
| 5633 | + var content = ""; | |
| 5634 | + var needLayer = typeof item[5] !== "undefined"; | |
| 5635 | + if (item[4]) { | |
| 5636 | + content += "@supports (".concat(item[4], ") {"); | |
| 5637 | + } | |
| 5638 | + if (item[2]) { | |
| 5639 | + content += "@media ".concat(item[2], " {"); | |
| 5640 | + } | |
| 5641 | + if (needLayer) { | |
| 5642 | + content += "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {"); | |
| 5643 | + } | |
| 5644 | + content += cssWithMappingToString(item); | |
| 5645 | + if (needLayer) { | |
| 5646 | + content += "}"; | |
| 5647 | + } | |
| 5648 | + if (item[2]) { | |
| 5649 | + content += "}"; | |
| 5650 | + } | |
| 5651 | + if (item[4]) { | |
| 5652 | + content += "}"; | |
| 5653 | + } | |
| 5654 | + return content; | |
| 5655 | + }).join(""); | |
| 5656 | + }; | |
| 5657 | + | |
| 5658 | + // import a list of modules into the list | |
| 5659 | + list.i = function i(modules, media, dedupe, supports, layer) { | |
| 5660 | + if (typeof modules === "string") { | |
| 5661 | + modules = [[null, modules, undefined]]; | |
| 1259 | 5662 | } |
| 5663 | + var alreadyImportedModules = {}; | |
| 5664 | + if (dedupe) { | |
| 5665 | + for (var k = 0; k < this.length; k++) { | |
| 5666 | + var id = this[k][0]; | |
| 5667 | + if (id != null) { | |
| 5668 | + alreadyImportedModules[id] = true; | |
| 5669 | + } | |
| 5670 | + } | |
| 5671 | + } | |
| 5672 | + for (var _k = 0; _k < modules.length; _k++) { | |
| 5673 | + var item = [].concat(modules[_k]); | |
| 5674 | + if (dedupe && alreadyImportedModules[item[0]]) { | |
| 5675 | + continue; | |
| 5676 | + } | |
| 5677 | + if (typeof layer !== "undefined") { | |
| 5678 | + if (typeof item[5] === "undefined") { | |
| 5679 | + item[5] = layer; | |
| 5680 | + } else { | |
| 5681 | + item[1] = "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {").concat(item[1], "}"); | |
| 5682 | + item[5] = layer; | |
| 5683 | + } | |
| 5684 | + } | |
| 5685 | + if (media) { | |
| 5686 | + if (!item[2]) { | |
| 5687 | + item[2] = media; | |
| 5688 | + } else { | |
| 5689 | + item[1] = "@media ".concat(item[2], " {").concat(item[1], "}"); | |
| 5690 | + item[2] = media; | |
| 5691 | + } | |
| 5692 | + } | |
| 5693 | + if (supports) { | |
| 5694 | + if (!item[4]) { | |
| 5695 | + item[4] = "".concat(supports); | |
| 5696 | + } else { | |
| 5697 | + item[1] = "@supports (".concat(item[4], ") {").concat(item[1], "}"); | |
| 5698 | + item[4] = supports; | |
| 5699 | + } | |
| 5700 | + } | |
| 5701 | + list.push(item); | |
| 5702 | + } | |
| 5703 | + }; | |
| 5704 | + return list; | |
| 5705 | +}; | |
| 5706 | + | |
| 5707 | +/***/ }, | |
| 5708 | + | |
| 5709 | +/***/ "./node_modules/css-loader/dist/runtime/getUrl.js" | |
| 5710 | +/*!********************************************************!*\ | |
| 5711 | + !*** ./node_modules/css-loader/dist/runtime/getUrl.js ***! | |
| 5712 | + \********************************************************/ | |
| 5713 | +(module) { | |
| 5714 | + | |
| 5715 | +"use strict"; | |
| 5716 | + | |
| 5717 | + | |
| 5718 | +module.exports = function (url, options) { | |
| 5719 | + if (!options) { | |
| 5720 | + options = {}; | |
| 1260 | 5721 | } |
| 5722 | + if (!url) { | |
| 5723 | + return url; | |
| 5724 | + } | |
| 5725 | + url = String(url.__esModule ? url.default : url); | |
| 1261 | 5726 | |
| 1262 | - // Fall-back if spin cannot be determined | |
| 1263 | - if (pX && !sX) { sX = (pX < 1) ? -1 : 1; } | |
| 1264 | - if (pY && !sY) { sY = (pY < 1) ? -1 : 1; } | |
| 5727 | + // If url is already wrapped in quotes, remove them | |
| 5728 | + if (/^['"].*['"]$/.test(url)) { | |
| 5729 | + url = url.slice(1, -1); | |
| 5730 | + } | |
| 5731 | + if (options.hash) { | |
| 5732 | + url += options.hash; | |
| 5733 | + } | |
| 1265 | 5734 | |
| 1266 | - return { spinX : sX, | |
| 1267 | - spinY : sY, | |
| 1268 | - pixelX : pX, | |
| 1269 | - pixelY : pY }; | |
| 1270 | -} | |
| 5735 | + // Should url be wrapped? | |
| 5736 | + // See https://drafts.csswg.org/css-values-3/#urls | |
| 5737 | + if (/["'() \t\n]|(%20)/.test(url) || options.needQuotes) { | |
| 5738 | + return "\"".concat(url.replace(/"/g, '\\"').replace(/\n/g, "\\n"), "\""); | |
| 5739 | + } | |
| 5740 | + return url; | |
| 5741 | +}; | |
| 1271 | 5742 | |
| 5743 | +/***/ }, | |
| 1272 | 5744 | |
| 1273 | -/** | |
| 1274 | - * The best combination if you prefer spinX + spinY normalization. It favors | |
| 1275 | - * the older DOMMouseScroll for Firefox, as FF does not include wheelDelta with | |
| 1276 | - * 'wheel' event, making spin speed determination impossible. | |
| 1277 | - */ | |
| 1278 | -normalizeWheel.getEventType = function() /*string*/ { | |
| 1279 | - return (UserAgent_DEPRECATED.firefox()) | |
| 1280 | - ? 'DOMMouseScroll' | |
| 1281 | - : (isEventSupported('wheel')) | |
| 1282 | - ? 'wheel' | |
| 1283 | - : 'mousewheel'; | |
| 5745 | +/***/ "./node_modules/css-loader/dist/runtime/sourceMaps.js" | |
| 5746 | +/*!************************************************************!*\ | |
| 5747 | + !*** ./node_modules/css-loader/dist/runtime/sourceMaps.js ***! | |
| 5748 | + \************************************************************/ | |
| 5749 | +(module) { | |
| 5750 | + | |
| 5751 | +"use strict"; | |
| 5752 | + | |
| 5753 | + | |
| 5754 | +module.exports = function (item) { | |
| 5755 | + var content = item[1]; | |
| 5756 | + var cssMapping = item[3]; | |
| 5757 | + if (!cssMapping) { | |
| 5758 | + return content; | |
| 5759 | + } | |
| 5760 | + if (typeof btoa === "function") { | |
| 5761 | + var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping)))); | |
| 5762 | + var data = "sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(base64); | |
| 5763 | + var sourceMapping = "/*# ".concat(data, " */"); | |
| 5764 | + return [content].concat([sourceMapping]).join("\n"); | |
| 5765 | + } | |
| 5766 | + return [content].join("\n"); | |
| 1284 | 5767 | }; |
| 1285 | 5768 | |
| 1286 | -module.exports = normalizeWheel; | |
| 5769 | +/***/ }, | |
| 1287 | 5770 | |
| 5771 | +/***/ "./node_modules/cropperjs/dist/cropper.css" | |
| 5772 | +/*!*************************************************!*\ | |
| 5773 | + !*** ./node_modules/cropperjs/dist/cropper.css ***! | |
| 5774 | + \*************************************************/ | |
| 5775 | +(__unused_webpack_module, __webpack_exports__, __webpack_require__) { | |
| 1288 | 5776 | |
| 1289 | -/***/ }), | |
| 5777 | +"use strict"; | |
| 5778 | +__webpack_require__.r(__webpack_exports__); | |
| 5779 | +/* harmony export */ __webpack_require__.d(__webpack_exports__, { | |
| 5780 | +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) | |
| 5781 | +/* harmony export */ }); | |
| 5782 | +/* harmony import */ var _style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"); | |
| 5783 | +/* harmony import */ var _style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__); | |
| 5784 | +/* harmony import */ var _style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../../style-loader/dist/runtime/styleDomAPI.js */ "./node_modules/style-loader/dist/runtime/styleDomAPI.js"); | |
| 5785 | +/* harmony import */ var _style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__); | |
| 5786 | +/* harmony import */ var _style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../style-loader/dist/runtime/insertBySelector.js */ "./node_modules/style-loader/dist/runtime/insertBySelector.js"); | |
| 5787 | +/* harmony import */ var _style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__); | |
| 5788 | +/* harmony import */ var _style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../style-loader/dist/runtime/setAttributesWithoutAttributes.js */ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js"); | |
| 5789 | +/* harmony import */ var _style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__); | |
| 5790 | +/* harmony import */ var _style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! !../../style-loader/dist/runtime/insertStyleElement.js */ "./node_modules/style-loader/dist/runtime/insertStyleElement.js"); | |
| 5791 | +/* harmony import */ var _style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__); | |
| 5792 | +/* harmony import */ var _style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! !../../style-loader/dist/runtime/styleTagTransform.js */ "./node_modules/style-loader/dist/runtime/styleTagTransform.js"); | |
| 5793 | +/* harmony import */ var _style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__); | |
| 5794 | +/* harmony import */ var _css_loader_dist_cjs_js_cropper_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../../css-loader/dist/cjs.js!./cropper.css */ "./node_modules/css-loader/dist/cjs.js!./node_modules/cropperjs/dist/cropper.css"); | |
| 1290 | 5795 | |
| 1291 | -/***/ "./node_modules/react-easy-crop/index.module.js": | |
| 1292 | -/*!******************************************************!*\ | |
| 1293 | - !*** ./node_modules/react-easy-crop/index.module.js ***! | |
| 1294 | - \******************************************************/ | |
| 1295 | -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { | |
| 5796 | + | |
| 5797 | + | |
| 5798 | + | |
| 5799 | + | |
| 5800 | + | |
| 5801 | + | |
| 5802 | + | |
| 5803 | + | |
| 5804 | + | |
| 1296 | 5805 | |
| 5806 | +var options = {}; | |
| 5807 | + | |
| 5808 | +options.styleTagTransform = (_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default()); | |
| 5809 | +options.setAttributes = (_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default()); | |
| 5810 | + | |
| 5811 | + options.insert = _style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, "head"); | |
| 5812 | + | |
| 5813 | +options.domAPI = (_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default()); | |
| 5814 | +options.insertStyleElement = (_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default()); | |
| 5815 | + | |
| 5816 | +var update = _style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_css_loader_dist_cjs_js_cropper_css__WEBPACK_IMPORTED_MODULE_6__["default"], options); | |
| 5817 | + | |
| 5818 | + | |
| 5819 | + | |
| 5820 | + | |
| 5821 | + /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_css_loader_dist_cjs_js_cropper_css__WEBPACK_IMPORTED_MODULE_6__["default"] && _css_loader_dist_cjs_js_cropper_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _css_loader_dist_cjs_js_cropper_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined); | |
| 5822 | + | |
| 5823 | + | |
| 5824 | +/***/ }, | |
| 5825 | + | |
| 5826 | +/***/ "./node_modules/toastify-js/src/toastify.css" | |
| 5827 | +/*!***************************************************!*\ | |
| 5828 | + !*** ./node_modules/toastify-js/src/toastify.css ***! | |
| 5829 | + \***************************************************/ | |
| 5830 | +(__unused_webpack_module, __webpack_exports__, __webpack_require__) { | |
| 5831 | + | |
| 1297 | 5832 | "use strict"; |
| 1298 | 5833 | __webpack_require__.r(__webpack_exports__); |
| 1299 | -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! tslib */ "./node_modules/react-easy-crop/node_modules/tslib/tslib.es6.js"); | |
| 1300 | -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); | |
| 1301 | -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); | |
| 1302 | -/* harmony import */ var normalize_wheel__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! normalize-wheel */ "./node_modules/normalize-wheel/index.js"); | |
| 1303 | -/* harmony import */ var normalize_wheel__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(normalize_wheel__WEBPACK_IMPORTED_MODULE_1__); | |
| 5834 | +/* harmony export */ __webpack_require__.d(__webpack_exports__, { | |
| 5835 | +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) | |
| 5836 | +/* harmony export */ }); | |
| 5837 | +/* harmony import */ var _style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"); | |
| 5838 | +/* harmony import */ var _style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__); | |
| 5839 | +/* harmony import */ var _style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../../style-loader/dist/runtime/styleDomAPI.js */ "./node_modules/style-loader/dist/runtime/styleDomAPI.js"); | |
| 5840 | +/* harmony import */ var _style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__); | |
| 5841 | +/* harmony import */ var _style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../style-loader/dist/runtime/insertBySelector.js */ "./node_modules/style-loader/dist/runtime/insertBySelector.js"); | |
| 5842 | +/* harmony import */ var _style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__); | |
| 5843 | +/* harmony import */ var _style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../style-loader/dist/runtime/setAttributesWithoutAttributes.js */ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js"); | |
| 5844 | +/* harmony import */ var _style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__); | |
| 5845 | +/* harmony import */ var _style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! !../../style-loader/dist/runtime/insertStyleElement.js */ "./node_modules/style-loader/dist/runtime/insertStyleElement.js"); | |
| 5846 | +/* harmony import */ var _style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__); | |
| 5847 | +/* harmony import */ var _style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! !../../style-loader/dist/runtime/styleTagTransform.js */ "./node_modules/style-loader/dist/runtime/styleTagTransform.js"); | |
| 5848 | +/* harmony import */ var _style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__); | |
| 5849 | +/* harmony import */ var _css_loader_dist_cjs_js_toastify_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../../css-loader/dist/cjs.js!./toastify.css */ "./node_modules/css-loader/dist/cjs.js!./node_modules/toastify-js/src/toastify.css"); | |
| 1304 | 5850 | |
| 5851 | + | |
| 5852 | + | |
| 5853 | + | |
| 5854 | + | |
| 5855 | + | |
| 5856 | + | |
| 5857 | + | |
| 5858 | + | |
| 5859 | + | |
| 1305 | 5860 | |
| 5861 | +var options = {}; | |
| 1306 | 5862 | |
| 5863 | +options.styleTagTransform = (_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default()); | |
| 5864 | +options.setAttributes = (_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default()); | |
| 1307 | 5865 | |
| 1308 | -/** | |
| 1309 | - * Compute the dimension of the crop area based on media size, | |
| 1310 | - * aspect ratio and optionally rotation | |
| 1311 | - */ | |
| 5866 | + options.insert = _style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, "head"); | |
| 5867 | + | |
| 5868 | +options.domAPI = (_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default()); | |
| 5869 | +options.insertStyleElement = (_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default()); | |
| 1312 | 5870 | |
| 1313 | -function getCropSize(mediaWidth, mediaHeight, containerWidth, containerHeight, aspect, rotation) { | |
| 1314 | - if (rotation === void 0) { | |
| 1315 | - rotation = 0; | |
| 5871 | +var update = _style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_css_loader_dist_cjs_js_toastify_css__WEBPACK_IMPORTED_MODULE_6__["default"], options); | |
| 5872 | + | |
| 5873 | + | |
| 5874 | + | |
| 5875 | + | |
| 5876 | + /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_css_loader_dist_cjs_js_toastify_css__WEBPACK_IMPORTED_MODULE_6__["default"] && _css_loader_dist_cjs_js_toastify_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _css_loader_dist_cjs_js_toastify_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined); | |
| 5877 | + | |
| 5878 | + | |
| 5879 | +/***/ }, | |
| 5880 | + | |
| 5881 | +/***/ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js" | |
| 5882 | +/*!****************************************************************************!*\ | |
| 5883 | + !*** ./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js ***! | |
| 5884 | + \****************************************************************************/ | |
| 5885 | +(module) { | |
| 5886 | + | |
| 5887 | +"use strict"; | |
| 5888 | + | |
| 5889 | + | |
| 5890 | +var stylesInDOM = []; | |
| 5891 | +function getIndexByIdentifier(identifier) { | |
| 5892 | + var result = -1; | |
| 5893 | + for (var i = 0; i < stylesInDOM.length; i++) { | |
| 5894 | + if (stylesInDOM[i].identifier === identifier) { | |
| 5895 | + result = i; | |
| 5896 | + break; | |
| 5897 | + } | |
| 1316 | 5898 | } |
| 5899 | + return result; | |
| 5900 | +} | |
| 5901 | +function modulesToDom(list, options) { | |
| 5902 | + var idCountMap = {}; | |
| 5903 | + var identifiers = []; | |
| 5904 | + for (var i = 0; i < list.length; i++) { | |
| 5905 | + var item = list[i]; | |
| 5906 | + var id = options.base ? item[0] + options.base : item[0]; | |
| 5907 | + var count = idCountMap[id] || 0; | |
| 5908 | + var identifier = "".concat(id, " ").concat(count); | |
| 5909 | + idCountMap[id] = count + 1; | |
| 5910 | + var indexByIdentifier = getIndexByIdentifier(identifier); | |
| 5911 | + var obj = { | |
| 5912 | + css: item[1], | |
| 5913 | + media: item[2], | |
| 5914 | + sourceMap: item[3], | |
| 5915 | + supports: item[4], | |
| 5916 | + layer: item[5] | |
| 5917 | + }; | |
| 5918 | + if (indexByIdentifier !== -1) { | |
| 5919 | + stylesInDOM[indexByIdentifier].references++; | |
| 5920 | + stylesInDOM[indexByIdentifier].updater(obj); | |
| 5921 | + } else { | |
| 5922 | + var updater = addElementStyle(obj, options); | |
| 5923 | + options.byIndex = i; | |
| 5924 | + stylesInDOM.splice(i, 0, { | |
| 5925 | + identifier: identifier, | |
| 5926 | + updater: updater, | |
| 5927 | + references: 1 | |
| 5928 | + }); | |
| 5929 | + } | |
| 5930 | + identifiers.push(identifier); | |
| 5931 | + } | |
| 5932 | + return identifiers; | |
| 5933 | +} | |
| 5934 | +function addElementStyle(obj, options) { | |
| 5935 | + var api = options.domAPI(options); | |
| 5936 | + api.update(obj); | |
| 5937 | + var updater = function updater(newObj) { | |
| 5938 | + if (newObj) { | |
| 5939 | + if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap && newObj.supports === obj.supports && newObj.layer === obj.layer) { | |
| 5940 | + return; | |
| 5941 | + } | |
| 5942 | + api.update(obj = newObj); | |
| 5943 | + } else { | |
| 5944 | + api.remove(); | |
| 5945 | + } | |
| 5946 | + }; | |
| 5947 | + return updater; | |
| 5948 | +} | |
| 5949 | +module.exports = function (list, options) { | |
| 5950 | + options = options || {}; | |
| 5951 | + list = list || []; | |
| 5952 | + var lastIdentifiers = modulesToDom(list, options); | |
| 5953 | + return function update(newList) { | |
| 5954 | + newList = newList || []; | |
| 5955 | + for (var i = 0; i < lastIdentifiers.length; i++) { | |
| 5956 | + var identifier = lastIdentifiers[i]; | |
| 5957 | + var index = getIndexByIdentifier(identifier); | |
| 5958 | + stylesInDOM[index].references--; | |
| 5959 | + } | |
| 5960 | + var newLastIdentifiers = modulesToDom(newList, options); | |
| 5961 | + for (var _i = 0; _i < lastIdentifiers.length; _i++) { | |
| 5962 | + var _identifier = lastIdentifiers[_i]; | |
| 5963 | + var _index = getIndexByIdentifier(_identifier); | |
| 5964 | + if (stylesInDOM[_index].references === 0) { | |
| 5965 | + stylesInDOM[_index].updater(); | |
| 5966 | + stylesInDOM.splice(_index, 1); | |
| 5967 | + } | |
| 5968 | + } | |
| 5969 | + lastIdentifiers = newLastIdentifiers; | |
| 5970 | + }; | |
| 5971 | +}; | |
| 1317 | 5972 | |
| 1318 | - var _a = rotateSize(mediaWidth, mediaHeight, rotation), | |
| 1319 | - width = _a.width, | |
| 1320 | - height = _a.height; | |
| 5973 | +/***/ }, | |
| 1321 | 5974 | |
| 1322 | - var fittingWidth = Math.min(width, containerWidth); | |
| 1323 | - var fittingHeight = Math.min(height, containerHeight); | |
| 5975 | +/***/ "./node_modules/style-loader/dist/runtime/insertBySelector.js" | |
| 5976 | +/*!********************************************************************!*\ | |
| 5977 | + !*** ./node_modules/style-loader/dist/runtime/insertBySelector.js ***! | |
| 5978 | + \********************************************************************/ | |
| 5979 | +(module) { | |
| 1324 | 5980 | |
| 1325 | - if (fittingWidth > fittingHeight * aspect) { | |
| 1326 | - return { | |
| 1327 | - width: fittingHeight * aspect, | |
| 1328 | - height: fittingHeight | |
| 1329 | - }; | |
| 5981 | +"use strict"; | |
| 5982 | + | |
| 5983 | + | |
| 5984 | +var memo = {}; | |
| 5985 | + | |
| 5986 | +/* istanbul ignore next */ | |
| 5987 | +function getTarget(target) { | |
| 5988 | + if (typeof memo[target] === "undefined") { | |
| 5989 | + var styleTarget = document.querySelector(target); | |
| 5990 | + | |
| 5991 | + // Special case to return head of iframe instead of iframe itself | |
| 5992 | + if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) { | |
| 5993 | + try { | |
| 5994 | + // This will throw an exception if access to iframe is blocked | |
| 5995 | + // due to cross-origin restrictions | |
| 5996 | + styleTarget = styleTarget.contentDocument.head; | |
| 5997 | + } catch (e) { | |
| 5998 | + // istanbul ignore next | |
| 5999 | + styleTarget = null; | |
| 6000 | + } | |
| 6001 | + } | |
| 6002 | + memo[target] = styleTarget; | |
| 1330 | 6003 | } |
| 6004 | + return memo[target]; | |
| 6005 | +} | |
| 1331 | 6006 | |
| 1332 | - return { | |
| 1333 | - width: fittingWidth, | |
| 1334 | - height: fittingWidth / aspect | |
| 1335 | - }; | |
| 6007 | +/* istanbul ignore next */ | |
| 6008 | +function insertBySelector(insert, style) { | |
| 6009 | + var target = getTarget(insert); | |
| 6010 | + if (!target) { | |
| 6011 | + throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid."); | |
| 6012 | + } | |
| 6013 | + target.appendChild(style); | |
| 1336 | 6014 | } |
| 1337 | -/** | |
| 1338 | - * Compute media zoom. | |
| 1339 | - * We fit the media into the container with "max-width: 100%; max-height: 100%;" | |
| 1340 | - */ | |
| 6015 | +module.exports = insertBySelector; | |
| 1341 | 6016 | |
| 1342 | -function getMediaZoom(mediaSize) { | |
| 1343 | - // Take the axis with more pixels to improve accuracy | |
| 1344 | - return mediaSize.width > mediaSize.height ? mediaSize.width / mediaSize.naturalWidth : mediaSize.height / mediaSize.naturalHeight; | |
| 6017 | +/***/ }, | |
| 6018 | + | |
| 6019 | +/***/ "./node_modules/style-loader/dist/runtime/insertStyleElement.js" | |
| 6020 | +/*!**********************************************************************!*\ | |
| 6021 | + !*** ./node_modules/style-loader/dist/runtime/insertStyleElement.js ***! | |
| 6022 | + \**********************************************************************/ | |
| 6023 | +(module) { | |
| 6024 | + | |
| 6025 | +"use strict"; | |
| 6026 | + | |
| 6027 | + | |
| 6028 | +/* istanbul ignore next */ | |
| 6029 | +function insertStyleElement(options) { | |
| 6030 | + var element = document.createElement("style"); | |
| 6031 | + options.setAttributes(element, options.attributes); | |
| 6032 | + options.insert(element, options.options); | |
| 6033 | + return element; | |
| 1345 | 6034 | } |
| 1346 | -/** | |
| 1347 | - * Ensure a new media position stays in the crop area. | |
| 1348 | - */ | |
| 6035 | +module.exports = insertStyleElement; | |
| 1349 | 6036 | |
| 1350 | -function restrictPosition(position, mediaSize, cropSize, zoom, rotation) { | |
| 1351 | - if (rotation === void 0) { | |
| 1352 | - rotation = 0; | |
| 6037 | +/***/ }, | |
| 6038 | + | |
| 6039 | +/***/ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js" | |
| 6040 | +/*!**********************************************************************************!*\ | |
| 6041 | + !*** ./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js ***! | |
| 6042 | + \**********************************************************************************/ | |
| 6043 | +(module, __unused_webpack_exports, __webpack_require__) { | |
| 6044 | + | |
| 6045 | +"use strict"; | |
| 6046 | + | |
| 6047 | + | |
| 6048 | +/* istanbul ignore next */ | |
| 6049 | +function setAttributesWithoutAttributes(styleElement) { | |
| 6050 | + var nonce = true ? __webpack_require__.nc : 0; | |
| 6051 | + if (nonce) { | |
| 6052 | + styleElement.setAttribute("nonce", nonce); | |
| 1353 | 6053 | } |
| 6054 | +} | |
| 6055 | +module.exports = setAttributesWithoutAttributes; | |
| 1354 | 6056 | |
| 1355 | - var _a = rotateSize(mediaSize.width, mediaSize.height, rotation), | |
| 1356 | - width = _a.width, | |
| 1357 | - height = _a.height; | |
| 6057 | +/***/ }, | |
| 1358 | 6058 | |
| 6059 | +/***/ "./node_modules/style-loader/dist/runtime/styleDomAPI.js" | |
| 6060 | +/*!***************************************************************!*\ | |
| 6061 | + !*** ./node_modules/style-loader/dist/runtime/styleDomAPI.js ***! | |
| 6062 | + \***************************************************************/ | |
| 6063 | +(module) { | |
| 6064 | + | |
| 6065 | +"use strict"; | |
| 6066 | + | |
| 6067 | + | |
| 6068 | +/* istanbul ignore next */ | |
| 6069 | +function apply(styleElement, options, obj) { | |
| 6070 | + var css = ""; | |
| 6071 | + if (obj.supports) { | |
| 6072 | + css += "@supports (".concat(obj.supports, ") {"); | |
| 6073 | + } | |
| 6074 | + if (obj.media) { | |
| 6075 | + css += "@media ".concat(obj.media, " {"); | |
| 6076 | + } | |
| 6077 | + var needLayer = typeof obj.layer !== "undefined"; | |
| 6078 | + if (needLayer) { | |
| 6079 | + css += "@layer".concat(obj.layer.length > 0 ? " ".concat(obj.layer) : "", " {"); | |
| 6080 | + } | |
| 6081 | + css += obj.css; | |
| 6082 | + if (needLayer) { | |
| 6083 | + css += "}"; | |
| 6084 | + } | |
| 6085 | + if (obj.media) { | |
| 6086 | + css += "}"; | |
| 6087 | + } | |
| 6088 | + if (obj.supports) { | |
| 6089 | + css += "}"; | |
| 6090 | + } | |
| 6091 | + var sourceMap = obj.sourceMap; | |
| 6092 | + if (sourceMap && typeof btoa !== "undefined") { | |
| 6093 | + css += "\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), " */"); | |
| 6094 | + } | |
| 6095 | + | |
| 6096 | + // For old IE | |
| 6097 | + /* istanbul ignore if */ | |
| 6098 | + options.styleTagTransform(css, styleElement, options.options); | |
| 6099 | +} | |
| 6100 | +function removeStyleElement(styleElement) { | |
| 6101 | + // istanbul ignore if | |
| 6102 | + if (styleElement.parentNode === null) { | |
| 6103 | + return false; | |
| 6104 | + } | |
| 6105 | + styleElement.parentNode.removeChild(styleElement); | |
| 6106 | +} | |
| 6107 | + | |
| 6108 | +/* istanbul ignore next */ | |
| 6109 | +function domAPI(options) { | |
| 6110 | + if (typeof document === "undefined") { | |
| 6111 | + return { | |
| 6112 | + update: function update() {}, | |
| 6113 | + remove: function remove() {} | |
| 6114 | + }; | |
| 6115 | + } | |
| 6116 | + var styleElement = options.insertStyleElement(options); | |
| 1359 | 6117 | return { |
| 1360 | - x: restrictPositionCoord(position.x, width, cropSize.width, zoom), | |
| 1361 | - y: restrictPositionCoord(position.y, height, cropSize.height, zoom) | |
| 6118 | + update: function update(obj) { | |
| 6119 | + apply(styleElement, options, obj); | |
| 6120 | + }, | |
| 6121 | + remove: function remove() { | |
| 6122 | + removeStyleElement(styleElement); | |
| 6123 | + } | |
| 1362 | 6124 | }; |
| 1363 | 6125 | } |
| 6126 | +module.exports = domAPI; | |
| 1364 | 6127 | |
| 1365 | -function restrictPositionCoord(position, mediaSize, cropSize, zoom) { | |
| 1366 | - var maxPosition = mediaSize * zoom / 2 - cropSize / 2; | |
| 1367 | - return clamp(position, -maxPosition, maxPosition); | |
| 6128 | +/***/ }, | |
| 6129 | + | |
| 6130 | +/***/ "./node_modules/style-loader/dist/runtime/styleTagTransform.js" | |
| 6131 | +/*!*********************************************************************!*\ | |
| 6132 | + !*** ./node_modules/style-loader/dist/runtime/styleTagTransform.js ***! | |
| 6133 | + \*********************************************************************/ | |
| 6134 | +(module) { | |
| 6135 | + | |
| 6136 | +"use strict"; | |
| 6137 | + | |
| 6138 | + | |
| 6139 | +/* istanbul ignore next */ | |
| 6140 | +function styleTagTransform(css, styleElement) { | |
| 6141 | + if (styleElement.styleSheet) { | |
| 6142 | + styleElement.styleSheet.cssText = css; | |
| 6143 | + } else { | |
| 6144 | + while (styleElement.firstChild) { | |
| 6145 | + styleElement.removeChild(styleElement.firstChild); | |
| 6146 | + } | |
| 6147 | + styleElement.appendChild(document.createTextNode(css)); | |
| 6148 | + } | |
| 1368 | 6149 | } |
| 6150 | +module.exports = styleTagTransform; | |
| 1369 | 6151 | |
| 1370 | -function getDistanceBetweenPoints(pointA, pointB) { | |
| 1371 | - return Math.sqrt(Math.pow(pointA.y - pointB.y, 2) + Math.pow(pointA.x - pointB.x, 2)); | |
| 1372 | -} | |
| 1373 | -function getRotationBetweenPoints(pointA, pointB) { | |
| 1374 | - return Math.atan2(pointB.y - pointA.y, pointB.x - pointA.x) * 180 / Math.PI; | |
| 1375 | -} | |
| 1376 | -/** | |
| 1377 | - * Compute the output cropped area of the media in percentages and pixels. | |
| 1378 | - * x/y are the top-left coordinates on the src media | |
| 1379 | - */ | |
| 6152 | +/***/ }, | |
| 1380 | 6153 | |
| 1381 | -function computeCroppedArea(crop, mediaSize, cropSize, aspect, zoom, rotation, restrictPosition) { | |
| 1382 | - if (rotation === void 0) { | |
| 1383 | - rotation = 0; | |
| 6154 | +/***/ "./node_modules/sweetalert2/dist/sweetalert2.all.js" | |
| 6155 | +/*!**********************************************************!*\ | |
| 6156 | + !*** ./node_modules/sweetalert2/dist/sweetalert2.all.js ***! | |
| 6157 | + \**********************************************************/ | |
| 6158 | +(module) { | |
| 6159 | + | |
| 6160 | +/*! | |
| 6161 | +* sweetalert2 v11.26.17 | |
| 6162 | +* Released under the MIT License. | |
| 6163 | +*/ | |
| 6164 | +(function (global, factory) { | |
| 6165 | + true ? module.exports = factory() : | |
| 6166 | + 0; | |
| 6167 | +})(this, (function () { 'use strict'; | |
| 6168 | + | |
| 6169 | + function _assertClassBrand(e, t, n) { | |
| 6170 | + if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; | |
| 6171 | + throw new TypeError("Private element is not present on this object"); | |
| 1384 | 6172 | } |
| 6173 | + function _checkPrivateRedeclaration(e, t) { | |
| 6174 | + if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); | |
| 6175 | + } | |
| 6176 | + function _classPrivateFieldGet2(s, a) { | |
| 6177 | + return s.get(_assertClassBrand(s, a)); | |
| 6178 | + } | |
| 6179 | + function _classPrivateFieldInitSpec(e, t, a) { | |
| 6180 | + _checkPrivateRedeclaration(e, t), t.set(e, a); | |
| 6181 | + } | |
| 6182 | + function _classPrivateFieldSet2(s, a, r) { | |
| 6183 | + return s.set(_assertClassBrand(s, a), r), r; | |
| 6184 | + } | |
| 1385 | 6185 | |
| 1386 | - if (restrictPosition === void 0) { | |
| 1387 | - restrictPosition = true; | |
| 1388 | - } // if the media is rotated by the user, we cannot limit the position anymore | |
| 1389 | - // as it might need to be negative. | |
| 6186 | + const RESTORE_FOCUS_TIMEOUT = 100; | |
| 1390 | 6187 | |
| 6188 | + /** @type {GlobalState} */ | |
| 6189 | + const globalState = {}; | |
| 6190 | + const focusPreviousActiveElement = () => { | |
| 6191 | + if (globalState.previousActiveElement instanceof HTMLElement) { | |
| 6192 | + globalState.previousActiveElement.focus(); | |
| 6193 | + globalState.previousActiveElement = null; | |
| 6194 | + } else if (document.body) { | |
| 6195 | + document.body.focus(); | |
| 6196 | + } | |
| 6197 | + }; | |
| 1391 | 6198 | |
| 1392 | - var limitAreaFn = restrictPosition ? limitArea : noOp; | |
| 1393 | - var mediaBBoxSize = rotateSize(mediaSize.width, mediaSize.height, rotation); | |
| 1394 | - var mediaNaturalBBoxSize = rotateSize(mediaSize.naturalWidth, mediaSize.naturalHeight, rotation); // calculate the crop area in percentages | |
| 1395 | - // in the rotated space | |
| 6199 | + /** | |
| 6200 | + * Restore previous active (focused) element | |
| 6201 | + * | |
| 6202 | + * @param {boolean} returnFocus | |
| 6203 | + * @returns {Promise<void>} | |
| 6204 | + */ | |
| 6205 | + const restoreActiveElement = returnFocus => { | |
| 6206 | + return new Promise(resolve => { | |
| 6207 | + if (!returnFocus) { | |
| 6208 | + return resolve(); | |
| 6209 | + } | |
| 6210 | + const x = window.scrollX; | |
| 6211 | + const y = window.scrollY; | |
| 6212 | + globalState.restoreFocusTimeout = setTimeout(() => { | |
| 6213 | + focusPreviousActiveElement(); | |
| 6214 | + resolve(); | |
| 6215 | + }, RESTORE_FOCUS_TIMEOUT); // issues/900 | |
| 1396 | 6216 | |
| 1397 | - var croppedAreaPercentages = { | |
| 1398 | - x: limitAreaFn(100, ((mediaBBoxSize.width - cropSize.width / zoom) / 2 - crop.x / zoom) / mediaBBoxSize.width * 100), | |
| 1399 | - y: limitAreaFn(100, ((mediaBBoxSize.height - cropSize.height / zoom) / 2 - crop.y / zoom) / mediaBBoxSize.height * 100), | |
| 1400 | - width: limitAreaFn(100, cropSize.width / mediaBBoxSize.width * 100 / zoom), | |
| 1401 | - height: limitAreaFn(100, cropSize.height / mediaBBoxSize.height * 100 / zoom) | |
| 1402 | - }; // we compute the pixels size naively | |
| 6217 | + window.scrollTo(x, y); | |
| 6218 | + }); | |
| 6219 | + }; | |
| 1403 | 6220 | |
| 1404 | - var widthInPixels = Math.round(limitAreaFn(mediaNaturalBBoxSize.width, croppedAreaPercentages.width * mediaNaturalBBoxSize.width / 100)); | |
| 1405 | - var heightInPixels = Math.round(limitAreaFn(mediaNaturalBBoxSize.height, croppedAreaPercentages.height * mediaNaturalBBoxSize.height / 100)); | |
| 1406 | - var isImgWiderThanHigh = mediaNaturalBBoxSize.width >= mediaNaturalBBoxSize.height * aspect; // then we ensure the width and height exactly match the aspect (to avoid rounding approximations) | |
| 1407 | - // if the media is wider than high, when zoom is 0, the crop height will be equals to image height | |
| 1408 | - // thus we want to compute the width from the height and aspect for accuracy. | |
| 1409 | - // Otherwise, we compute the height from width and aspect. | |
| 6221 | + const swalPrefix = 'swal2-'; | |
| 1410 | 6222 | |
| 1411 | - var sizePixels = isImgWiderThanHigh ? { | |
| 1412 | - width: Math.round(heightInPixels * aspect), | |
| 1413 | - height: heightInPixels | |
| 1414 | - } : { | |
| 1415 | - width: widthInPixels, | |
| 1416 | - height: Math.round(widthInPixels / aspect) | |
| 6223 | + /** | |
| 6224 | + * @typedef {Record<SwalClass, string>} SwalClasses | |
| 6225 | + */ | |
| 6226 | + | |
| 6227 | + /** | |
| 6228 | + * @typedef {'success' | 'warning' | 'info' | 'question' | 'error'} SwalIcon | |
| 6229 | + * @typedef {Record<SwalIcon, string>} SwalIcons | |
| 6230 | + */ | |
| 6231 | + | |
| 6232 | + /** @type {SwalClass[]} */ | |
| 6233 | + const classNames = ['container', 'shown', 'height-auto', 'iosfix', 'popup', 'modal', 'no-backdrop', 'no-transition', 'toast', 'toast-shown', 'show', 'hide', 'close', 'title', 'html-container', 'actions', 'confirm', 'deny', 'cancel', 'footer', 'icon', 'icon-content', 'image', 'input', 'file', 'range', 'select', 'radio', 'checkbox', 'label', 'textarea', 'inputerror', 'input-label', 'validation-message', 'progress-steps', 'active-progress-step', 'progress-step', 'progress-step-line', 'loader', 'loading', 'styled', 'top', 'top-start', 'top-end', 'top-left', 'top-right', 'center', 'center-start', 'center-end', 'center-left', 'center-right', 'bottom', 'bottom-start', 'bottom-end', 'bottom-left', 'bottom-right', 'grow-row', 'grow-column', 'grow-fullscreen', 'rtl', 'timer-progress-bar', 'timer-progress-bar-container', 'scrollbar-measure', 'icon-success', 'icon-warning', 'icon-info', 'icon-question', 'icon-error', 'draggable', 'dragging']; | |
| 6234 | + const swalClasses = classNames.reduce((acc, className) => { | |
| 6235 | + acc[className] = swalPrefix + className; | |
| 6236 | + return acc; | |
| 6237 | + }, /** @type {SwalClasses} */{}); | |
| 6238 | + | |
| 6239 | + /** @type {SwalIcon[]} */ | |
| 6240 | + const icons = ['success', 'warning', 'info', 'question', 'error']; | |
| 6241 | + const iconTypes = icons.reduce((acc, icon) => { | |
| 6242 | + acc[icon] = swalPrefix + icon; | |
| 6243 | + return acc; | |
| 6244 | + }, /** @type {SwalIcons} */{}); | |
| 6245 | + | |
| 6246 | + const consolePrefix = 'SweetAlert2:'; | |
| 6247 | + | |
| 6248 | + /** | |
| 6249 | + * Capitalize the first letter of a string | |
| 6250 | + * | |
| 6251 | + * @param {string} str | |
| 6252 | + * @returns {string} | |
| 6253 | + */ | |
| 6254 | + const capitalizeFirstLetter = str => str.charAt(0).toUpperCase() + str.slice(1); | |
| 6255 | + | |
| 6256 | + /** | |
| 6257 | + * Standardize console warnings | |
| 6258 | + * | |
| 6259 | + * @param {string | string[]} message | |
| 6260 | + */ | |
| 6261 | + const warn = message => { | |
| 6262 | + console.warn(`${consolePrefix} ${typeof message === 'object' ? message.join(' ') : message}`); | |
| 1417 | 6263 | }; |
| 1418 | 6264 | |
| 1419 | - var croppedAreaPixels = (0,tslib__WEBPACK_IMPORTED_MODULE_2__.__assign)((0,tslib__WEBPACK_IMPORTED_MODULE_2__.__assign)({}, sizePixels), { | |
| 1420 | - x: Math.round(limitAreaFn(mediaNaturalBBoxSize.width - sizePixels.width, croppedAreaPercentages.x * mediaNaturalBBoxSize.width / 100)), | |
| 1421 | - y: Math.round(limitAreaFn(mediaNaturalBBoxSize.height - sizePixels.height, croppedAreaPercentages.y * mediaNaturalBBoxSize.height / 100)) | |
| 1422 | - }); | |
| 6265 | + /** | |
| 6266 | + * Standardize console errors | |
| 6267 | + * | |
| 6268 | + * @param {string} message | |
| 6269 | + */ | |
| 6270 | + const error = message => { | |
| 6271 | + console.error(`${consolePrefix} ${message}`); | |
| 6272 | + }; | |
| 1423 | 6273 | |
| 1424 | - return { | |
| 1425 | - croppedAreaPercentages: croppedAreaPercentages, | |
| 1426 | - croppedAreaPixels: croppedAreaPixels | |
| 6274 | + /** | |
| 6275 | + * Private global state for `warnOnce` | |
| 6276 | + * | |
| 6277 | + * @type {string[]} | |
| 6278 | + * @private | |
| 6279 | + */ | |
| 6280 | + const previousWarnOnceMessages = []; | |
| 6281 | + | |
| 6282 | + /** | |
| 6283 | + * Show a console warning, but only if it hasn't already been shown | |
| 6284 | + * | |
| 6285 | + * @param {string} message | |
| 6286 | + */ | |
| 6287 | + const warnOnce = message => { | |
| 6288 | + if (!previousWarnOnceMessages.includes(message)) { | |
| 6289 | + previousWarnOnceMessages.push(message); | |
| 6290 | + warn(message); | |
| 6291 | + } | |
| 1427 | 6292 | }; |
| 1428 | -} | |
| 1429 | -/** | |
| 1430 | - * Ensure the returned value is between 0 and max | |
| 1431 | - */ | |
| 1432 | 6293 | |
| 1433 | -function limitArea(max, value) { | |
| 1434 | - return Math.min(max, Math.max(0, value)); | |
| 1435 | -} | |
| 6294 | + /** | |
| 6295 | + * Show a one-time console warning about deprecated params/methods | |
| 6296 | + * | |
| 6297 | + * @param {string} deprecatedParam | |
| 6298 | + * @param {string?} useInstead | |
| 6299 | + */ | |
| 6300 | + const warnAboutDeprecation = (deprecatedParam, useInstead = null) => { | |
| 6301 | + warnOnce(`"${deprecatedParam}" is deprecated and will be removed in the next major release.${useInstead ? ` Use "${useInstead}" instead.` : ''}`); | |
| 6302 | + }; | |
| 1436 | 6303 | |
| 1437 | -function noOp(_max, value) { | |
| 1438 | - return value; | |
| 1439 | -} | |
| 1440 | -/** | |
| 1441 | - * Compute crop and zoom from the croppedAreaPercentages. | |
| 1442 | - */ | |
| 6304 | + /** | |
| 6305 | + * If `arg` is a function, call it (with no arguments or context) and return the result. | |
| 6306 | + * Otherwise, just pass the value through | |
| 6307 | + * | |
| 6308 | + * @param {(() => *) | *} arg | |
| 6309 | + * @returns {*} | |
| 6310 | + */ | |
| 6311 | + const callIfFunction = arg => typeof arg === 'function' ? arg() : arg; | |
| 1443 | 6312 | |
| 6313 | + /** | |
| 6314 | + * @param {*} arg | |
| 6315 | + * @returns {boolean} | |
| 6316 | + */ | |
| 6317 | + const hasToPromiseFn = arg => arg && typeof arg.toPromise === 'function'; | |
| 1444 | 6318 | |
| 1445 | -function getInitialCropFromCroppedAreaPercentages(croppedAreaPercentages, mediaSize, rotation, cropSize, minZoom, maxZoom) { | |
| 1446 | - var mediaBBoxSize = rotateSize(mediaSize.width, mediaSize.height, rotation); // This is the inverse process of computeCroppedArea | |
| 6319 | + /** | |
| 6320 | + * @param {*} arg | |
| 6321 | + * @returns {Promise<*>} | |
| 6322 | + */ | |
| 6323 | + const asPromise = arg => hasToPromiseFn(arg) ? arg.toPromise() : Promise.resolve(arg); | |
| 1447 | 6324 | |
| 1448 | - var zoom = clamp(cropSize.width / mediaBBoxSize.width * (100 / croppedAreaPercentages.width), minZoom, maxZoom); | |
| 1449 | - var crop = { | |
| 1450 | - x: zoom * mediaBBoxSize.width / 2 - cropSize.width / 2 - mediaBBoxSize.width * zoom * (croppedAreaPercentages.x / 100), | |
| 1451 | - y: zoom * mediaBBoxSize.height / 2 - cropSize.height / 2 - mediaBBoxSize.height * zoom * (croppedAreaPercentages.y / 100) | |
| 6325 | + /** | |
| 6326 | + * @param {*} arg | |
| 6327 | + * @returns {boolean} | |
| 6328 | + */ | |
| 6329 | + const isPromise = arg => arg && Promise.resolve(arg) === arg; | |
| 6330 | + | |
| 6331 | + /** | |
| 6332 | + * Gets the popup container which contains the backdrop and the popup itself. | |
| 6333 | + * | |
| 6334 | + * @returns {HTMLElement | null} | |
| 6335 | + */ | |
| 6336 | + const getContainer = () => document.body.querySelector(`.${swalClasses.container}`); | |
| 6337 | + | |
| 6338 | + /** | |
| 6339 | + * @param {string} selectorString | |
| 6340 | + * @returns {HTMLElement | null} | |
| 6341 | + */ | |
| 6342 | + const elementBySelector = selectorString => { | |
| 6343 | + const container = getContainer(); | |
| 6344 | + return container ? container.querySelector(selectorString) : null; | |
| 1452 | 6345 | }; |
| 1453 | - return { | |
| 1454 | - crop: crop, | |
| 1455 | - zoom: zoom | |
| 6346 | + | |
| 6347 | + /** | |
| 6348 | + * @param {string} className | |
| 6349 | + * @returns {HTMLElement | null} | |
| 6350 | + */ | |
| 6351 | + const elementByClass = className => { | |
| 6352 | + return elementBySelector(`.${className}`); | |
| 1456 | 6353 | }; |
| 1457 | -} | |
| 1458 | -/** | |
| 1459 | - * Compute zoom from the croppedAreaPixels | |
| 1460 | - */ | |
| 1461 | 6354 | |
| 1462 | -function getZoomFromCroppedAreaPixels(croppedAreaPixels, mediaSize, cropSize) { | |
| 1463 | - var mediaZoom = getMediaZoom(mediaSize); | |
| 1464 | - return cropSize.height > cropSize.width ? cropSize.height / (croppedAreaPixels.height * mediaZoom) : cropSize.width / (croppedAreaPixels.width * mediaZoom); | |
| 1465 | -} | |
| 1466 | -/** | |
| 1467 | - * Compute crop and zoom from the croppedAreaPixels | |
| 1468 | - */ | |
| 6355 | + /** | |
| 6356 | + * @returns {HTMLElement | null} | |
| 6357 | + */ | |
| 6358 | + const getPopup = () => elementByClass(swalClasses.popup); | |
| 1469 | 6359 | |
| 6360 | + /** | |
| 6361 | + * @returns {HTMLElement | null} | |
| 6362 | + */ | |
| 6363 | + const getIcon = () => elementByClass(swalClasses.icon); | |
| 1470 | 6364 | |
| 1471 | -function getInitialCropFromCroppedAreaPixels(croppedAreaPixels, mediaSize, rotation, cropSize, minZoom, maxZoom) { | |
| 1472 | - if (rotation === void 0) { | |
| 1473 | - rotation = 0; | |
| 6365 | + /** | |
| 6366 | + * @returns {HTMLElement | null} | |
| 6367 | + */ | |
| 6368 | + const getIconContent = () => elementByClass(swalClasses['icon-content']); | |
| 6369 | + | |
| 6370 | + /** | |
| 6371 | + * @returns {HTMLElement | null} | |
| 6372 | + */ | |
| 6373 | + const getTitle = () => elementByClass(swalClasses.title); | |
| 6374 | + | |
| 6375 | + /** | |
| 6376 | + * @returns {HTMLElement | null} | |
| 6377 | + */ | |
| 6378 | + const getHtmlContainer = () => elementByClass(swalClasses['html-container']); | |
| 6379 | + | |
| 6380 | + /** | |
| 6381 | + * @returns {HTMLElement | null} | |
| 6382 | + */ | |
| 6383 | + const getImage = () => elementByClass(swalClasses.image); | |
| 6384 | + | |
| 6385 | + /** | |
| 6386 | + * @returns {HTMLElement | null} | |
| 6387 | + */ | |
| 6388 | + const getProgressSteps = () => elementByClass(swalClasses['progress-steps']); | |
| 6389 | + | |
| 6390 | + /** | |
| 6391 | + * @returns {HTMLElement | null} | |
| 6392 | + */ | |
| 6393 | + const getValidationMessage = () => elementByClass(swalClasses['validation-message']); | |
| 6394 | + | |
| 6395 | + /** | |
| 6396 | + * @returns {HTMLButtonElement | null} | |
| 6397 | + */ | |
| 6398 | + const getConfirmButton = () => (/** @type {HTMLButtonElement} */elementBySelector(`.${swalClasses.actions} .${swalClasses.confirm}`)); | |
| 6399 | + | |
| 6400 | + /** | |
| 6401 | + * @returns {HTMLButtonElement | null} | |
| 6402 | + */ | |
| 6403 | + const getCancelButton = () => (/** @type {HTMLButtonElement} */elementBySelector(`.${swalClasses.actions} .${swalClasses.cancel}`)); | |
| 6404 | + | |
| 6405 | + /** | |
| 6406 | + * @returns {HTMLButtonElement | null} | |
| 6407 | + */ | |
| 6408 | + const getDenyButton = () => (/** @type {HTMLButtonElement} */elementBySelector(`.${swalClasses.actions} .${swalClasses.deny}`)); | |
| 6409 | + | |
| 6410 | + /** | |
| 6411 | + * @returns {HTMLElement | null} | |
| 6412 | + */ | |
| 6413 | + const getInputLabel = () => elementByClass(swalClasses['input-label']); | |
| 6414 | + | |
| 6415 | + /** | |
| 6416 | + * @returns {HTMLElement | null} | |
| 6417 | + */ | |
| 6418 | + const getLoader = () => elementBySelector(`.${swalClasses.loader}`); | |
| 6419 | + | |
| 6420 | + /** | |
| 6421 | + * @returns {HTMLElement | null} | |
| 6422 | + */ | |
| 6423 | + const getActions = () => elementByClass(swalClasses.actions); | |
| 6424 | + | |
| 6425 | + /** | |
| 6426 | + * @returns {HTMLElement | null} | |
| 6427 | + */ | |
| 6428 | + const getFooter = () => elementByClass(swalClasses.footer); | |
| 6429 | + | |
| 6430 | + /** | |
| 6431 | + * @returns {HTMLElement | null} | |
| 6432 | + */ | |
| 6433 | + const getTimerProgressBar = () => elementByClass(swalClasses['timer-progress-bar']); | |
| 6434 | + | |
| 6435 | + /** | |
| 6436 | + * @returns {HTMLElement | null} | |
| 6437 | + */ | |
| 6438 | + const getCloseButton = () => elementByClass(swalClasses.close); | |
| 6439 | + | |
| 6440 | + // https://github.com/jkup/focusable/blob/master/index.js | |
| 6441 | + const focusable = ` | |
| 6442 | + a[href], | |
| 6443 | + area[href], | |
| 6444 | + input:not([disabled]), | |
| 6445 | + select:not([disabled]), | |
| 6446 | + textarea:not([disabled]), | |
| 6447 | + button:not([disabled]), | |
| 6448 | + iframe, | |
| 6449 | + object, | |
| 6450 | + embed, | |
| 6451 | + [tabindex="0"], | |
| 6452 | + [contenteditable], | |
| 6453 | + audio[controls], | |
| 6454 | + video[controls], | |
| 6455 | + summary | |
| 6456 | +`; | |
| 6457 | + /** | |
| 6458 | + * @returns {HTMLElement[]} | |
| 6459 | + */ | |
| 6460 | + const getFocusableElements = () => { | |
| 6461 | + const popup = getPopup(); | |
| 6462 | + if (!popup) { | |
| 6463 | + return []; | |
| 6464 | + } | |
| 6465 | + /** @type {NodeListOf<HTMLElement>} */ | |
| 6466 | + const focusableElementsWithTabindex = popup.querySelectorAll('[tabindex]:not([tabindex="-1"]):not([tabindex="0"])'); | |
| 6467 | + const focusableElementsWithTabindexSorted = Array.from(focusableElementsWithTabindex) | |
| 6468 | + // sort according to tabindex | |
| 6469 | + .sort((a, b) => { | |
| 6470 | + const tabindexA = parseInt(a.getAttribute('tabindex') || '0'); | |
| 6471 | + const tabindexB = parseInt(b.getAttribute('tabindex') || '0'); | |
| 6472 | + if (tabindexA > tabindexB) { | |
| 6473 | + return 1; | |
| 6474 | + } else if (tabindexA < tabindexB) { | |
| 6475 | + return -1; | |
| 6476 | + } | |
| 6477 | + return 0; | |
| 6478 | + }); | |
| 6479 | + | |
| 6480 | + /** @type {NodeListOf<HTMLElement>} */ | |
| 6481 | + const otherFocusableElements = popup.querySelectorAll(focusable); | |
| 6482 | + const otherFocusableElementsFiltered = Array.from(otherFocusableElements).filter(el => el.getAttribute('tabindex') !== '-1'); | |
| 6483 | + return [...new Set(focusableElementsWithTabindexSorted.concat(otherFocusableElementsFiltered))].filter(el => isVisible$1(el)); | |
| 6484 | + }; | |
| 6485 | + | |
| 6486 | + /** | |
| 6487 | + * @returns {boolean} | |
| 6488 | + */ | |
| 6489 | + const isModal = () => { | |
| 6490 | + return hasClass(document.body, swalClasses.shown) && !hasClass(document.body, swalClasses['toast-shown']) && !hasClass(document.body, swalClasses['no-backdrop']); | |
| 6491 | + }; | |
| 6492 | + | |
| 6493 | + /** | |
| 6494 | + * @returns {boolean} | |
| 6495 | + */ | |
| 6496 | + const isToast = () => { | |
| 6497 | + const popup = getPopup(); | |
| 6498 | + if (!popup) { | |
| 6499 | + return false; | |
| 6500 | + } | |
| 6501 | + return hasClass(popup, swalClasses.toast); | |
| 6502 | + }; | |
| 6503 | + | |
| 6504 | + /** | |
| 6505 | + * @returns {boolean} | |
| 6506 | + */ | |
| 6507 | + const isLoading = () => { | |
| 6508 | + const popup = getPopup(); | |
| 6509 | + if (!popup) { | |
| 6510 | + return false; | |
| 6511 | + } | |
| 6512 | + return popup.hasAttribute('data-loading'); | |
| 6513 | + }; | |
| 6514 | + | |
| 6515 | + /** | |
| 6516 | + * Securely set innerHTML of an element | |
| 6517 | + * https://github.com/sweetalert2/sweetalert2/issues/1926 | |
| 6518 | + * | |
| 6519 | + * @param {HTMLElement} elem | |
| 6520 | + * @param {string} html | |
| 6521 | + */ | |
| 6522 | + const setInnerHtml = (elem, html) => { | |
| 6523 | + elem.textContent = ''; | |
| 6524 | + if (html) { | |
| 6525 | + const parser = new DOMParser(); | |
| 6526 | + const parsed = parser.parseFromString(html, `text/html`); | |
| 6527 | + const head = parsed.querySelector('head'); | |
| 6528 | + if (head) { | |
| 6529 | + Array.from(head.childNodes).forEach(child => { | |
| 6530 | + elem.appendChild(child); | |
| 6531 | + }); | |
| 6532 | + } | |
| 6533 | + const body = parsed.querySelector('body'); | |
| 6534 | + if (body) { | |
| 6535 | + Array.from(body.childNodes).forEach(child => { | |
| 6536 | + if (child instanceof HTMLVideoElement || child instanceof HTMLAudioElement) { | |
| 6537 | + elem.appendChild(child.cloneNode(true)); // https://github.com/sweetalert2/sweetalert2/issues/2507 | |
| 6538 | + } else { | |
| 6539 | + elem.appendChild(child); | |
| 6540 | + } | |
| 6541 | + }); | |
| 6542 | + } | |
| 6543 | + } | |
| 6544 | + }; | |
| 6545 | + | |
| 6546 | + /** | |
| 6547 | + * @param {HTMLElement} elem | |
| 6548 | + * @param {string} className | |
| 6549 | + * @returns {boolean} | |
| 6550 | + */ | |
| 6551 | + const hasClass = (elem, className) => { | |
| 6552 | + if (!className) { | |
| 6553 | + return false; | |
| 6554 | + } | |
| 6555 | + const classList = className.split(/\s+/); | |
| 6556 | + for (let i = 0; i < classList.length; i++) { | |
| 6557 | + if (!elem.classList.contains(classList[i])) { | |
| 6558 | + return false; | |
| 6559 | + } | |
| 6560 | + } | |
| 6561 | + return true; | |
| 6562 | + }; | |
| 6563 | + | |
| 6564 | + /** | |
| 6565 | + * @param {HTMLElement} elem | |
| 6566 | + * @param {SweetAlertOptions} params | |
| 6567 | + */ | |
| 6568 | + const removeCustomClasses = (elem, params) => { | |
| 6569 | + Array.from(elem.classList).forEach(className => { | |
| 6570 | + if (!Object.values(swalClasses).includes(className) && !Object.values(iconTypes).includes(className) && !Object.values(params.showClass || {}).includes(className)) { | |
| 6571 | + elem.classList.remove(className); | |
| 6572 | + } | |
| 6573 | + }); | |
| 6574 | + }; | |
| 6575 | + | |
| 6576 | + /** | |
| 6577 | + * @param {HTMLElement} elem | |
| 6578 | + * @param {SweetAlertOptions} params | |
| 6579 | + * @param {string} className | |
| 6580 | + */ | |
| 6581 | + const applyCustomClass = (elem, params, className) => { | |
| 6582 | + removeCustomClasses(elem, params); | |
| 6583 | + if (!params.customClass) { | |
| 6584 | + return; | |
| 6585 | + } | |
| 6586 | + const customClass = params.customClass[(/** @type {keyof SweetAlertCustomClass} */className)]; | |
| 6587 | + if (!customClass) { | |
| 6588 | + return; | |
| 6589 | + } | |
| 6590 | + if (typeof customClass !== 'string' && !customClass.forEach) { | |
| 6591 | + warn(`Invalid type of customClass.${className}! Expected string or iterable object, got "${typeof customClass}"`); | |
| 6592 | + return; | |
| 6593 | + } | |
| 6594 | + addClass(elem, customClass); | |
| 6595 | + }; | |
| 6596 | + | |
| 6597 | + /** | |
| 6598 | + * @param {HTMLElement} popup | |
| 6599 | + * @param {import('./renderers/renderInput').InputClass | SweetAlertInput} inputClass | |
| 6600 | + * @returns {HTMLInputElement | null} | |
| 6601 | + */ | |
| 6602 | + const getInput$1 = (popup, inputClass) => { | |
| 6603 | + if (!inputClass) { | |
| 6604 | + return null; | |
| 6605 | + } | |
| 6606 | + switch (inputClass) { | |
| 6607 | + case 'select': | |
| 6608 | + case 'textarea': | |
| 6609 | + case 'file': | |
| 6610 | + return popup.querySelector(`.${swalClasses.popup} > .${swalClasses[inputClass]}`); | |
| 6611 | + case 'checkbox': | |
| 6612 | + return popup.querySelector(`.${swalClasses.popup} > .${swalClasses.checkbox} input`); | |
| 6613 | + case 'radio': | |
| 6614 | + return popup.querySelector(`.${swalClasses.popup} > .${swalClasses.radio} input:checked`) || popup.querySelector(`.${swalClasses.popup} > .${swalClasses.radio} input:first-child`); | |
| 6615 | + case 'range': | |
| 6616 | + return popup.querySelector(`.${swalClasses.popup} > .${swalClasses.range} input`); | |
| 6617 | + default: | |
| 6618 | + return popup.querySelector(`.${swalClasses.popup} > .${swalClasses.input}`); | |
| 6619 | + } | |
| 6620 | + }; | |
| 6621 | + | |
| 6622 | + /** | |
| 6623 | + * @param {HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement} input | |
| 6624 | + */ | |
| 6625 | + const focusInput = input => { | |
| 6626 | + input.focus(); | |
| 6627 | + | |
| 6628 | + // place cursor at end of text in text input | |
| 6629 | + if (input.type !== 'file') { | |
| 6630 | + // http://stackoverflow.com/a/2345915 | |
| 6631 | + const val = input.value; | |
| 6632 | + input.value = ''; | |
| 6633 | + input.value = val; | |
| 6634 | + } | |
| 6635 | + }; | |
| 6636 | + | |
| 6637 | + /** | |
| 6638 | + * @param {HTMLElement | HTMLElement[] | null} target | |
| 6639 | + * @param {string | string[] | readonly string[] | undefined} classList | |
| 6640 | + * @param {boolean} condition | |
| 6641 | + */ | |
| 6642 | + const toggleClass = (target, classList, condition) => { | |
| 6643 | + if (!target || !classList) { | |
| 6644 | + return; | |
| 6645 | + } | |
| 6646 | + if (typeof classList === 'string') { | |
| 6647 | + classList = classList.split(/\s+/).filter(Boolean); | |
| 6648 | + } | |
| 6649 | + classList.forEach(className => { | |
| 6650 | + if (Array.isArray(target)) { | |
| 6651 | + target.forEach(elem => { | |
| 6652 | + if (condition) { | |
| 6653 | + elem.classList.add(className); | |
| 6654 | + } else { | |
| 6655 | + elem.classList.remove(className); | |
| 6656 | + } | |
| 6657 | + }); | |
| 6658 | + } else { | |
| 6659 | + if (condition) { | |
| 6660 | + target.classList.add(className); | |
| 6661 | + } else { | |
| 6662 | + target.classList.remove(className); | |
| 6663 | + } | |
| 6664 | + } | |
| 6665 | + }); | |
| 6666 | + }; | |
| 6667 | + | |
| 6668 | + /** | |
| 6669 | + * @param {HTMLElement | HTMLElement[] | null} target | |
| 6670 | + * @param {string | string[] | readonly string[] | undefined} classList | |
| 6671 | + */ | |
| 6672 | + const addClass = (target, classList) => { | |
| 6673 | + toggleClass(target, classList, true); | |
| 6674 | + }; | |
| 6675 | + | |
| 6676 | + /** | |
| 6677 | + * @param {HTMLElement | HTMLElement[] | null} target | |
| 6678 | + * @param {string | string[] | readonly string[] | undefined} classList | |
| 6679 | + */ | |
| 6680 | + const removeClass = (target, classList) => { | |
| 6681 | + toggleClass(target, classList, false); | |
| 6682 | + }; | |
| 6683 | + | |
| 6684 | + /** | |
| 6685 | + * Get direct child of an element by class name | |
| 6686 | + * | |
| 6687 | + * @param {HTMLElement} elem | |
| 6688 | + * @param {string} className | |
| 6689 | + * @returns {HTMLElement | undefined} | |
| 6690 | + */ | |
| 6691 | + const getDirectChildByClass = (elem, className) => { | |
| 6692 | + const children = Array.from(elem.children); | |
| 6693 | + for (let i = 0; i < children.length; i++) { | |
| 6694 | + const child = children[i]; | |
| 6695 | + if (child instanceof HTMLElement && hasClass(child, className)) { | |
| 6696 | + return child; | |
| 6697 | + } | |
| 6698 | + } | |
| 6699 | + }; | |
| 6700 | + | |
| 6701 | + /** | |
| 6702 | + * @param {HTMLElement} elem | |
| 6703 | + * @param {string} property | |
| 6704 | + * @param {string | number | null | undefined} value | |
| 6705 | + */ | |
| 6706 | + const applyNumericalStyle = (elem, property, value) => { | |
| 6707 | + if (value === `${parseInt(`${value}`)}`) { | |
| 6708 | + value = parseInt(value); | |
| 6709 | + } | |
| 6710 | + if (value || parseInt(`${value}`) === 0) { | |
| 6711 | + elem.style.setProperty(property, typeof value === 'number' ? `${value}px` : (/** @type {string} */value)); | |
| 6712 | + } else { | |
| 6713 | + elem.style.removeProperty(property); | |
| 6714 | + } | |
| 6715 | + }; | |
| 6716 | + | |
| 6717 | + /** | |
| 6718 | + * @param {HTMLElement | null} elem | |
| 6719 | + * @param {string} display | |
| 6720 | + */ | |
| 6721 | + const show = (elem, display = 'flex') => { | |
| 6722 | + if (!elem) { | |
| 6723 | + return; | |
| 6724 | + } | |
| 6725 | + elem.style.display = display; | |
| 6726 | + }; | |
| 6727 | + | |
| 6728 | + /** | |
| 6729 | + * @param {HTMLElement | null} elem | |
| 6730 | + */ | |
| 6731 | + const hide = elem => { | |
| 6732 | + if (!elem) { | |
| 6733 | + return; | |
| 6734 | + } | |
| 6735 | + elem.style.display = 'none'; | |
| 6736 | + }; | |
| 6737 | + | |
| 6738 | + /** | |
| 6739 | + * @param {HTMLElement | null} elem | |
| 6740 | + * @param {string} display | |
| 6741 | + */ | |
| 6742 | + const showWhenInnerHtmlPresent = (elem, display = 'block') => { | |
| 6743 | + if (!elem) { | |
| 6744 | + return; | |
| 6745 | + } | |
| 6746 | + new MutationObserver(() => { | |
| 6747 | + toggle(elem, elem.innerHTML, display); | |
| 6748 | + }).observe(elem, { | |
| 6749 | + childList: true, | |
| 6750 | + subtree: true | |
| 6751 | + }); | |
| 6752 | + }; | |
| 6753 | + | |
| 6754 | + /** | |
| 6755 | + * @param {HTMLElement} parent | |
| 6756 | + * @param {string} selector | |
| 6757 | + * @param {string} property | |
| 6758 | + * @param {string} value | |
| 6759 | + */ | |
| 6760 | + const setStyle = (parent, selector, property, value) => { | |
| 6761 | + /** @type {HTMLElement | null} */ | |
| 6762 | + const el = parent.querySelector(selector); | |
| 6763 | + if (el) { | |
| 6764 | + el.style.setProperty(property, value); | |
| 6765 | + } | |
| 6766 | + }; | |
| 6767 | + | |
| 6768 | + /** | |
| 6769 | + * @param {HTMLElement} elem | |
| 6770 | + * @param {boolean | string | null | undefined} condition | |
| 6771 | + * @param {string} display | |
| 6772 | + */ | |
| 6773 | + const toggle = (elem, condition, display = 'flex') => { | |
| 6774 | + if (condition) { | |
| 6775 | + show(elem, display); | |
| 6776 | + } else { | |
| 6777 | + hide(elem); | |
| 6778 | + } | |
| 6779 | + }; | |
| 6780 | + | |
| 6781 | + /** | |
| 6782 | + * borrowed from jquery $(elem).is(':visible') implementation | |
| 6783 | + * | |
| 6784 | + * @param {HTMLElement | null} elem | |
| 6785 | + * @returns {boolean} | |
| 6786 | + */ | |
| 6787 | + const isVisible$1 = elem => Boolean(elem && (elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length)); | |
| 6788 | + | |
| 6789 | + /** | |
| 6790 | + * @returns {boolean} | |
| 6791 | + */ | |
| 6792 | + const allButtonsAreHidden = () => !isVisible$1(getConfirmButton()) && !isVisible$1(getDenyButton()) && !isVisible$1(getCancelButton()); | |
| 6793 | + | |
| 6794 | + /** | |
| 6795 | + * @param {HTMLElement} elem | |
| 6796 | + * @returns {boolean} | |
| 6797 | + */ | |
| 6798 | + const isScrollable = elem => Boolean(elem.scrollHeight > elem.clientHeight); | |
| 6799 | + | |
| 6800 | + /** | |
| 6801 | + * @param {HTMLElement} element | |
| 6802 | + * @param {HTMLElement} stopElement | |
| 6803 | + * @returns {boolean} | |
| 6804 | + */ | |
| 6805 | + const selfOrParentIsScrollable = (element, stopElement) => { | |
| 6806 | + let parent = /** @type {HTMLElement | null} */element; | |
| 6807 | + while (parent && parent !== stopElement) { | |
| 6808 | + if (isScrollable(parent)) { | |
| 6809 | + return true; | |
| 6810 | + } | |
| 6811 | + parent = parent.parentElement; | |
| 6812 | + } | |
| 6813 | + return false; | |
| 6814 | + }; | |
| 6815 | + | |
| 6816 | + /** | |
| 6817 | + * borrowed from https://stackoverflow.com/a/46352119 | |
| 6818 | + * | |
| 6819 | + * @param {HTMLElement} elem | |
| 6820 | + * @returns {boolean} | |
| 6821 | + */ | |
| 6822 | + const hasCssAnimation = elem => { | |
| 6823 | + const style = window.getComputedStyle(elem); | |
| 6824 | + const animDuration = parseFloat(style.getPropertyValue('animation-duration') || '0'); | |
| 6825 | + const transDuration = parseFloat(style.getPropertyValue('transition-duration') || '0'); | |
| 6826 | + return animDuration > 0 || transDuration > 0; | |
| 6827 | + }; | |
| 6828 | + | |
| 6829 | + /** | |
| 6830 | + * @param {number} timer | |
| 6831 | + * @param {boolean} reset | |
| 6832 | + */ | |
| 6833 | + const animateTimerProgressBar = (timer, reset = false) => { | |
| 6834 | + const timerProgressBar = getTimerProgressBar(); | |
| 6835 | + if (!timerProgressBar) { | |
| 6836 | + return; | |
| 6837 | + } | |
| 6838 | + if (isVisible$1(timerProgressBar)) { | |
| 6839 | + if (reset) { | |
| 6840 | + timerProgressBar.style.transition = 'none'; | |
| 6841 | + timerProgressBar.style.width = '100%'; | |
| 6842 | + } | |
| 6843 | + setTimeout(() => { | |
| 6844 | + timerProgressBar.style.transition = `width ${timer / 1000}s linear`; | |
| 6845 | + timerProgressBar.style.width = '0%'; | |
| 6846 | + }, 10); | |
| 6847 | + } | |
| 6848 | + }; | |
| 6849 | + const stopTimerProgressBar = () => { | |
| 6850 | + const timerProgressBar = getTimerProgressBar(); | |
| 6851 | + if (!timerProgressBar) { | |
| 6852 | + return; | |
| 6853 | + } | |
| 6854 | + const timerProgressBarWidth = parseInt(window.getComputedStyle(timerProgressBar).width); | |
| 6855 | + timerProgressBar.style.removeProperty('transition'); | |
| 6856 | + timerProgressBar.style.width = '100%'; | |
| 6857 | + const timerProgressBarFullWidth = parseInt(window.getComputedStyle(timerProgressBar).width); | |
| 6858 | + const timerProgressBarPercent = timerProgressBarWidth / timerProgressBarFullWidth * 100; | |
| 6859 | + timerProgressBar.style.width = `${timerProgressBarPercent}%`; | |
| 6860 | + }; | |
| 6861 | + | |
| 6862 | + /** | |
| 6863 | + * Detect Node env | |
| 6864 | + * | |
| 6865 | + * @returns {boolean} | |
| 6866 | + */ | |
| 6867 | + const isNodeEnv = () => typeof window === 'undefined' || typeof document === 'undefined'; | |
| 6868 | + | |
| 6869 | + const sweetHTML = ` | |
| 6870 | + <div aria-labelledby="${swalClasses.title}" aria-describedby="${swalClasses['html-container']}" class="${swalClasses.popup}" tabindex="-1"> | |
| 6871 | + <button type="button" class="${swalClasses.close}"></button> | |
| 6872 | + <ul class="${swalClasses['progress-steps']}"></ul> | |
| 6873 | + <div class="${swalClasses.icon}"></div> | |
| 6874 | + <img class="${swalClasses.image}" /> | |
| 6875 | + <h2 class="${swalClasses.title}" id="${swalClasses.title}"></h2> | |
| 6876 | + <div class="${swalClasses['html-container']}" id="${swalClasses['html-container']}"></div> | |
| 6877 | + <input class="${swalClasses.input}" id="${swalClasses.input}" /> | |
| 6878 | + <input type="file" class="${swalClasses.file}" /> | |
| 6879 | + <div class="${swalClasses.range}"> | |
| 6880 | + <input type="range" /> | |
| 6881 | + <output></output> | |
| 6882 | + </div> | |
| 6883 | + <select class="${swalClasses.select}" id="${swalClasses.select}"></select> | |
| 6884 | + <div class="${swalClasses.radio}"></div> | |
| 6885 | + <label class="${swalClasses.checkbox}"> | |
| 6886 | + <input type="checkbox" id="${swalClasses.checkbox}" /> | |
| 6887 | + <span class="${swalClasses.label}"></span> | |
| 6888 | + </label> | |
| 6889 | + <textarea class="${swalClasses.textarea}" id="${swalClasses.textarea}"></textarea> | |
| 6890 | + <div class="${swalClasses['validation-message']}" id="${swalClasses['validation-message']}"></div> | |
| 6891 | + <div class="${swalClasses.actions}"> | |
| 6892 | + <div class="${swalClasses.loader}"></div> | |
| 6893 | + <button type="button" class="${swalClasses.confirm}"></button> | |
| 6894 | + <button type="button" class="${swalClasses.deny}"></button> | |
| 6895 | + <button type="button" class="${swalClasses.cancel}"></button> | |
| 6896 | + </div> | |
| 6897 | + <div class="${swalClasses.footer}"></div> | |
| 6898 | + <div class="${swalClasses['timer-progress-bar-container']}"> | |
| 6899 | + <div class="${swalClasses['timer-progress-bar']}"></div> | |
| 6900 | + </div> | |
| 6901 | + </div> | |
| 6902 | +`.replace(/(^|\n)\s*/g, ''); | |
| 6903 | + | |
| 6904 | + /** | |
| 6905 | + * @returns {boolean} | |
| 6906 | + */ | |
| 6907 | + const resetOldContainer = () => { | |
| 6908 | + const oldContainer = getContainer(); | |
| 6909 | + if (!oldContainer) { | |
| 6910 | + return false; | |
| 6911 | + } | |
| 6912 | + oldContainer.remove(); | |
| 6913 | + removeClass([document.documentElement, document.body], [swalClasses['no-backdrop'], swalClasses['toast-shown'], | |
| 6914 | + // @ts-ignore: 'has-column' is not defined in swalClasses but may be set dynamically | |
| 6915 | + swalClasses['has-column']]); | |
| 6916 | + return true; | |
| 6917 | + }; | |
| 6918 | + const resetValidationMessage$1 = () => { | |
| 6919 | + if (globalState.currentInstance) { | |
| 6920 | + globalState.currentInstance.resetValidationMessage(); | |
| 6921 | + } | |
| 6922 | + }; | |
| 6923 | + const addInputChangeListeners = () => { | |
| 6924 | + const popup = getPopup(); | |
| 6925 | + if (!popup) { | |
| 6926 | + return; | |
| 6927 | + } | |
| 6928 | + const input = getDirectChildByClass(popup, swalClasses.input); | |
| 6929 | + const file = getDirectChildByClass(popup, swalClasses.file); | |
| 6930 | + /** @type {HTMLInputElement | null} */ | |
| 6931 | + const range = popup.querySelector(`.${swalClasses.range} input`); | |
| 6932 | + /** @type {HTMLOutputElement | null} */ | |
| 6933 | + const rangeOutput = popup.querySelector(`.${swalClasses.range} output`); | |
| 6934 | + const select = getDirectChildByClass(popup, swalClasses.select); | |
| 6935 | + /** @type {HTMLInputElement | null} */ | |
| 6936 | + const checkbox = popup.querySelector(`.${swalClasses.checkbox} input`); | |
| 6937 | + const textarea = getDirectChildByClass(popup, swalClasses.textarea); | |
| 6938 | + if (input) { | |
| 6939 | + input.oninput = resetValidationMessage$1; | |
| 6940 | + } | |
| 6941 | + if (file) { | |
| 6942 | + file.onchange = resetValidationMessage$1; | |
| 6943 | + } | |
| 6944 | + if (select) { | |
| 6945 | + select.onchange = resetValidationMessage$1; | |
| 6946 | + } | |
| 6947 | + if (checkbox) { | |
| 6948 | + checkbox.onchange = resetValidationMessage$1; | |
| 6949 | + } | |
| 6950 | + if (textarea) { | |
| 6951 | + textarea.oninput = resetValidationMessage$1; | |
| 6952 | + } | |
| 6953 | + if (range && rangeOutput) { | |
| 6954 | + range.oninput = () => { | |
| 6955 | + resetValidationMessage$1(); | |
| 6956 | + rangeOutput.value = range.value; | |
| 6957 | + }; | |
| 6958 | + range.onchange = () => { | |
| 6959 | + resetValidationMessage$1(); | |
| 6960 | + rangeOutput.value = range.value; | |
| 6961 | + }; | |
| 6962 | + } | |
| 6963 | + }; | |
| 6964 | + | |
| 6965 | + /** | |
| 6966 | + * @param {string | HTMLElement} target | |
| 6967 | + * @returns {HTMLElement} | |
| 6968 | + */ | |
| 6969 | + const getTarget = target => { | |
| 6970 | + if (typeof target === 'string') { | |
| 6971 | + const element = document.querySelector(target); | |
| 6972 | + if (!element) { | |
| 6973 | + throw new Error(`Target element "${target}" not found`); | |
| 6974 | + } | |
| 6975 | + return /** @type {HTMLElement} */element; | |
| 6976 | + } | |
| 6977 | + return target; | |
| 6978 | + }; | |
| 6979 | + | |
| 6980 | + /** | |
| 6981 | + * @param {SweetAlertOptions} params | |
| 6982 | + */ | |
| 6983 | + const setupAccessibility = params => { | |
| 6984 | + const popup = getPopup(); | |
| 6985 | + if (!popup) { | |
| 6986 | + return; | |
| 6987 | + } | |
| 6988 | + popup.setAttribute('role', params.toast ? 'alert' : 'dialog'); | |
| 6989 | + popup.setAttribute('aria-live', params.toast ? 'polite' : 'assertive'); | |
| 6990 | + if (!params.toast) { | |
| 6991 | + popup.setAttribute('aria-modal', 'true'); | |
| 6992 | + } | |
| 6993 | + }; | |
| 6994 | + | |
| 6995 | + /** | |
| 6996 | + * @param {HTMLElement} targetElement | |
| 6997 | + */ | |
| 6998 | + const setupRTL = targetElement => { | |
| 6999 | + if (window.getComputedStyle(targetElement).direction === 'rtl') { | |
| 7000 | + addClass(getContainer(), swalClasses.rtl); | |
| 7001 | + globalState.isRTL = true; | |
| 7002 | + } | |
| 7003 | + }; | |
| 7004 | + | |
| 7005 | + /** | |
| 7006 | + * Add modal + backdrop to DOM | |
| 7007 | + * | |
| 7008 | + * @param {SweetAlertOptions} params | |
| 7009 | + */ | |
| 7010 | + const init = params => { | |
| 7011 | + // Clean up the old popup container if it exists | |
| 7012 | + const oldContainerExisted = resetOldContainer(); | |
| 7013 | + if (isNodeEnv()) { | |
| 7014 | + error('SweetAlert2 requires document to initialize'); | |
| 7015 | + return; | |
| 7016 | + } | |
| 7017 | + const container = document.createElement('div'); | |
| 7018 | + container.className = swalClasses.container; | |
| 7019 | + if (oldContainerExisted) { | |
| 7020 | + addClass(container, swalClasses['no-transition']); | |
| 7021 | + } | |
| 7022 | + setInnerHtml(container, sweetHTML); | |
| 7023 | + container.dataset['swal2Theme'] = params.theme; | |
| 7024 | + const targetElement = getTarget(params.target || 'body'); | |
| 7025 | + targetElement.appendChild(container); | |
| 7026 | + if (params.topLayer) { | |
| 7027 | + container.setAttribute('popover', ''); | |
| 7028 | + container.showPopover(); | |
| 7029 | + } | |
| 7030 | + setupAccessibility(params); | |
| 7031 | + setupRTL(targetElement); | |
| 7032 | + addInputChangeListeners(); | |
| 7033 | + }; | |
| 7034 | + | |
| 7035 | + /** | |
| 7036 | + * @param {HTMLElement | object | string} param | |
| 7037 | + * @param {HTMLElement} target | |
| 7038 | + */ | |
| 7039 | + const parseHtmlToContainer = (param, target) => { | |
| 7040 | + // DOM element | |
| 7041 | + if (param instanceof HTMLElement) { | |
| 7042 | + target.appendChild(param); | |
| 7043 | + } | |
| 7044 | + | |
| 7045 | + // Object | |
| 7046 | + else if (typeof param === 'object') { | |
| 7047 | + handleObject(param, target); | |
| 7048 | + } | |
| 7049 | + | |
| 7050 | + // Plain string | |
| 7051 | + else if (param) { | |
| 7052 | + setInnerHtml(target, param); | |
| 7053 | + } | |
| 7054 | + }; | |
| 7055 | + | |
| 7056 | + /** | |
| 7057 | + * @param {object} param | |
| 7058 | + * @param {HTMLElement} target | |
| 7059 | + */ | |
| 7060 | + const handleObject = (param, target) => { | |
| 7061 | + // JQuery element(s) | |
| 7062 | + if ('jquery' in param) { | |
| 7063 | + handleJqueryElem(target, param); | |
| 7064 | + } | |
| 7065 | + | |
| 7066 | + // For other objects use their string representation | |
| 7067 | + else { | |
| 7068 | + setInnerHtml(target, param.toString()); | |
| 7069 | + } | |
| 7070 | + }; | |
| 7071 | + | |
| 7072 | + /** | |
| 7073 | + * @param {HTMLElement} target | |
| 7074 | + * @param {any} elem | |
| 7075 | + */ | |
| 7076 | + const handleJqueryElem = (target, elem) => { | |
| 7077 | + target.textContent = ''; | |
| 7078 | + if (0 in elem) { | |
| 7079 | + for (let i = 0; i in elem; i++) { | |
| 7080 | + target.appendChild(elem[i].cloneNode(true)); | |
| 7081 | + } | |
| 7082 | + } else { | |
| 7083 | + target.appendChild(elem.cloneNode(true)); | |
| 7084 | + } | |
| 7085 | + }; | |
| 7086 | + | |
| 7087 | + /** | |
| 7088 | + * @param {SweetAlert} instance | |
| 7089 | + * @param {SweetAlertOptions} params | |
| 7090 | + */ | |
| 7091 | + const renderActions = (instance, params) => { | |
| 7092 | + const actions = getActions(); | |
| 7093 | + const loader = getLoader(); | |
| 7094 | + if (!actions || !loader) { | |
| 7095 | + return; | |
| 7096 | + } | |
| 7097 | + | |
| 7098 | + // Actions (buttons) wrapper | |
| 7099 | + if (!params.showConfirmButton && !params.showDenyButton && !params.showCancelButton) { | |
| 7100 | + hide(actions); | |
| 7101 | + } else { | |
| 7102 | + show(actions); | |
| 7103 | + } | |
| 7104 | + | |
| 7105 | + // Custom class | |
| 7106 | + applyCustomClass(actions, params, 'actions'); | |
| 7107 | + | |
| 7108 | + // Render all the buttons | |
| 7109 | + renderButtons(actions, loader, params); | |
| 7110 | + | |
| 7111 | + // Loader | |
| 7112 | + setInnerHtml(loader, params.loaderHtml || ''); | |
| 7113 | + applyCustomClass(loader, params, 'loader'); | |
| 7114 | + }; | |
| 7115 | + | |
| 7116 | + /** | |
| 7117 | + * @param {HTMLElement} actions | |
| 7118 | + * @param {HTMLElement} loader | |
| 7119 | + * @param {SweetAlertOptions} params | |
| 7120 | + */ | |
| 7121 | + function renderButtons(actions, loader, params) { | |
| 7122 | + const confirmButton = getConfirmButton(); | |
| 7123 | + const denyButton = getDenyButton(); | |
| 7124 | + const cancelButton = getCancelButton(); | |
| 7125 | + if (!confirmButton || !denyButton || !cancelButton) { | |
| 7126 | + return; | |
| 7127 | + } | |
| 7128 | + | |
| 7129 | + // Render buttons | |
| 7130 | + renderButton(confirmButton, 'confirm', params); | |
| 7131 | + renderButton(denyButton, 'deny', params); | |
| 7132 | + renderButton(cancelButton, 'cancel', params); | |
| 7133 | + handleButtonsStyling(confirmButton, denyButton, cancelButton, params); | |
| 7134 | + if (params.reverseButtons) { | |
| 7135 | + if (params.toast) { | |
| 7136 | + actions.insertBefore(cancelButton, confirmButton); | |
| 7137 | + actions.insertBefore(denyButton, confirmButton); | |
| 7138 | + } else { | |
| 7139 | + actions.insertBefore(cancelButton, loader); | |
| 7140 | + actions.insertBefore(denyButton, loader); | |
| 7141 | + actions.insertBefore(confirmButton, loader); | |
| 7142 | + } | |
| 7143 | + } | |
| 1474 | 7144 | } |
| 1475 | 7145 | |
| 1476 | - var mediaNaturalBBoxSize = rotateSize(mediaSize.naturalWidth, mediaSize.naturalHeight, rotation); | |
| 1477 | - var zoom = clamp(getZoomFromCroppedAreaPixels(croppedAreaPixels, mediaSize, cropSize), minZoom, maxZoom); | |
| 1478 | - var cropZoom = cropSize.height > cropSize.width ? cropSize.height / croppedAreaPixels.height : cropSize.width / croppedAreaPixels.width; | |
| 1479 | - var crop = { | |
| 1480 | - x: ((mediaNaturalBBoxSize.width - croppedAreaPixels.width) / 2 - croppedAreaPixels.x) * cropZoom, | |
| 1481 | - y: ((mediaNaturalBBoxSize.height - croppedAreaPixels.height) / 2 - croppedAreaPixels.y) * cropZoom | |
| 7146 | + /** | |
| 7147 | + * @param {HTMLElement} confirmButton | |
| 7148 | + * @param {HTMLElement} denyButton | |
| 7149 | + * @param {HTMLElement} cancelButton | |
| 7150 | + * @param {SweetAlertOptions} params | |
| 7151 | + */ | |
| 7152 | + function handleButtonsStyling(confirmButton, denyButton, cancelButton, params) { | |
| 7153 | + if (!params.buttonsStyling) { | |
| 7154 | + removeClass([confirmButton, denyButton, cancelButton], swalClasses.styled); | |
| 7155 | + return; | |
| 7156 | + } | |
| 7157 | + addClass([confirmButton, denyButton, cancelButton], swalClasses.styled); | |
| 7158 | + | |
| 7159 | + // Apply custom background colors to action buttons | |
| 7160 | + if (params.confirmButtonColor) { | |
| 7161 | + confirmButton.style.setProperty('--swal2-confirm-button-background-color', params.confirmButtonColor); | |
| 7162 | + } | |
| 7163 | + if (params.denyButtonColor) { | |
| 7164 | + denyButton.style.setProperty('--swal2-deny-button-background-color', params.denyButtonColor); | |
| 7165 | + } | |
| 7166 | + if (params.cancelButtonColor) { | |
| 7167 | + cancelButton.style.setProperty('--swal2-cancel-button-background-color', params.cancelButtonColor); | |
| 7168 | + } | |
| 7169 | + | |
| 7170 | + // Apply the outline color to action buttons | |
| 7171 | + applyOutlineColor(confirmButton); | |
| 7172 | + applyOutlineColor(denyButton); | |
| 7173 | + applyOutlineColor(cancelButton); | |
| 7174 | + } | |
| 7175 | + | |
| 7176 | + /** | |
| 7177 | + * @param {HTMLElement} button | |
| 7178 | + */ | |
| 7179 | + function applyOutlineColor(button) { | |
| 7180 | + const buttonStyle = window.getComputedStyle(button); | |
| 7181 | + if (buttonStyle.getPropertyValue('--swal2-action-button-focus-box-shadow')) { | |
| 7182 | + // If the button already has a custom outline color, no need to change it | |
| 7183 | + return; | |
| 7184 | + } | |
| 7185 | + const outlineColor = buttonStyle.backgroundColor.replace(/rgba?\((\d+), (\d+), (\d+).*/, 'rgba($1, $2, $3, 0.5)'); | |
| 7186 | + button.style.setProperty('--swal2-action-button-focus-box-shadow', buttonStyle.getPropertyValue('--swal2-outline').replace(/ rgba\(.*/, ` ${outlineColor}`)); | |
| 7187 | + } | |
| 7188 | + | |
| 7189 | + /** | |
| 7190 | + * @param {HTMLElement} button | |
| 7191 | + * @param {'confirm' | 'deny' | 'cancel'} buttonType | |
| 7192 | + * @param {SweetAlertOptions} params | |
| 7193 | + */ | |
| 7194 | + function renderButton(button, buttonType, params) { | |
| 7195 | + const buttonName = /** @type {'Confirm' | 'Deny' | 'Cancel'} */capitalizeFirstLetter(buttonType); | |
| 7196 | + toggle(button, params[`show${buttonName}Button`], 'inline-block'); | |
| 7197 | + setInnerHtml(button, params[`${buttonType}ButtonText`] || ''); // Set caption text | |
| 7198 | + button.setAttribute('aria-label', params[`${buttonType}ButtonAriaLabel`] || ''); // ARIA label | |
| 7199 | + | |
| 7200 | + // Add buttons custom classes | |
| 7201 | + button.className = swalClasses[buttonType]; | |
| 7202 | + applyCustomClass(button, params, `${buttonType}Button`); | |
| 7203 | + } | |
| 7204 | + | |
| 7205 | + /** | |
| 7206 | + * @param {SweetAlert} instance | |
| 7207 | + * @param {SweetAlertOptions} params | |
| 7208 | + */ | |
| 7209 | + const renderCloseButton = (instance, params) => { | |
| 7210 | + const closeButton = getCloseButton(); | |
| 7211 | + if (!closeButton) { | |
| 7212 | + return; | |
| 7213 | + } | |
| 7214 | + setInnerHtml(closeButton, params.closeButtonHtml || ''); | |
| 7215 | + | |
| 7216 | + // Custom class | |
| 7217 | + applyCustomClass(closeButton, params, 'closeButton'); | |
| 7218 | + toggle(closeButton, params.showCloseButton); | |
| 7219 | + closeButton.setAttribute('aria-label', params.closeButtonAriaLabel || ''); | |
| 1482 | 7220 | }; |
| 1483 | - return { | |
| 1484 | - crop: crop, | |
| 1485 | - zoom: zoom | |
| 7221 | + | |
| 7222 | + /** | |
| 7223 | + * @param {SweetAlert} instance | |
| 7224 | + * @param {SweetAlertOptions} params | |
| 7225 | + */ | |
| 7226 | + const renderContainer = (instance, params) => { | |
| 7227 | + const container = getContainer(); | |
| 7228 | + if (!container) { | |
| 7229 | + return; | |
| 7230 | + } | |
| 7231 | + handleBackdropParam(container, params.backdrop); | |
| 7232 | + handlePositionParam(container, params.position); | |
| 7233 | + handleGrowParam(container, params.grow); | |
| 7234 | + | |
| 7235 | + // Custom class | |
| 7236 | + applyCustomClass(container, params, 'container'); | |
| 1486 | 7237 | }; |
| 1487 | -} | |
| 1488 | -/** | |
| 1489 | - * Return the point that is the center of point a and b | |
| 1490 | - */ | |
| 1491 | 7238 | |
| 1492 | -function getCenter(a, b) { | |
| 1493 | - return { | |
| 1494 | - x: (b.x + a.x) / 2, | |
| 1495 | - y: (b.y + a.y) / 2 | |
| 7239 | + /** | |
| 7240 | + * @param {HTMLElement} container | |
| 7241 | + * @param {SweetAlertOptions['backdrop']} backdrop | |
| 7242 | + */ | |
| 7243 | + function handleBackdropParam(container, backdrop) { | |
| 7244 | + if (typeof backdrop === 'string') { | |
| 7245 | + container.style.background = backdrop; | |
| 7246 | + } else if (!backdrop) { | |
| 7247 | + addClass([document.documentElement, document.body], swalClasses['no-backdrop']); | |
| 7248 | + } | |
| 7249 | + } | |
| 7250 | + | |
| 7251 | + /** | |
| 7252 | + * @param {HTMLElement} container | |
| 7253 | + * @param {SweetAlertOptions['position']} position | |
| 7254 | + */ | |
| 7255 | + function handlePositionParam(container, position) { | |
| 7256 | + if (!position) { | |
| 7257 | + return; | |
| 7258 | + } | |
| 7259 | + if (position in swalClasses) { | |
| 7260 | + addClass(container, swalClasses[position]); | |
| 7261 | + } else { | |
| 7262 | + warn('The "position" parameter is not valid, defaulting to "center"'); | |
| 7263 | + addClass(container, swalClasses.center); | |
| 7264 | + } | |
| 7265 | + } | |
| 7266 | + | |
| 7267 | + /** | |
| 7268 | + * @param {HTMLElement} container | |
| 7269 | + * @param {SweetAlertOptions['grow']} grow | |
| 7270 | + */ | |
| 7271 | + function handleGrowParam(container, grow) { | |
| 7272 | + if (!grow) { | |
| 7273 | + return; | |
| 7274 | + } | |
| 7275 | + addClass(container, swalClasses[`grow-${grow}`]); | |
| 7276 | + } | |
| 7277 | + | |
| 7278 | + /** | |
| 7279 | + * This module contains `WeakMap`s for each effectively-"private property" that a `Swal` has. | |
| 7280 | + * For example, to set the private property "foo" of `this` to "bar", you can `privateProps.foo.set(this, 'bar')` | |
| 7281 | + * This is the approach that Babel will probably take to implement private methods/fields | |
| 7282 | + * https://github.com/tc39/proposal-private-methods | |
| 7283 | + * https://github.com/babel/babel/pull/7555 | |
| 7284 | + * Once we have the changes from that PR in Babel, and our core class fits reasonable in *one module* | |
| 7285 | + * then we can use that language feature. | |
| 7286 | + */ | |
| 7287 | + | |
| 7288 | + var privateProps = { | |
| 7289 | + innerParams: new WeakMap(), | |
| 7290 | + domCache: new WeakMap() | |
| 1496 | 7291 | }; |
| 1497 | -} | |
| 1498 | -function getRadianAngle(degreeValue) { | |
| 1499 | - return degreeValue * Math.PI / 180; | |
| 1500 | -} | |
| 1501 | -/** | |
| 1502 | - * Returns the new bounding area of a rotated rectangle. | |
| 1503 | - */ | |
| 1504 | 7292 | |
| 1505 | -function rotateSize(width, height, rotation) { | |
| 1506 | - var rotRad = getRadianAngle(rotation); | |
| 1507 | - return { | |
| 1508 | - width: Math.abs(Math.cos(rotRad) * width) + Math.abs(Math.sin(rotRad) * height), | |
| 1509 | - height: Math.abs(Math.sin(rotRad) * width) + Math.abs(Math.cos(rotRad) * height) | |
| 7293 | + /// <reference path="../../../../sweetalert2.d.ts"/> | |
| 7294 | + | |
| 7295 | + | |
| 7296 | + /** @type {InputClass[]} */ | |
| 7297 | + const inputClasses = ['input', 'file', 'range', 'select', 'radio', 'checkbox', 'textarea']; | |
| 7298 | + | |
| 7299 | + /** | |
| 7300 | + * @param {SweetAlert} instance | |
| 7301 | + * @param {SweetAlertOptions} params | |
| 7302 | + */ | |
| 7303 | + const renderInput = (instance, params) => { | |
| 7304 | + const popup = getPopup(); | |
| 7305 | + if (!popup) { | |
| 7306 | + return; | |
| 7307 | + } | |
| 7308 | + const innerParams = privateProps.innerParams.get(instance); | |
| 7309 | + const rerender = !innerParams || params.input !== innerParams.input; | |
| 7310 | + inputClasses.forEach(inputClass => { | |
| 7311 | + const inputContainer = getDirectChildByClass(popup, swalClasses[inputClass]); | |
| 7312 | + if (!inputContainer) { | |
| 7313 | + return; | |
| 7314 | + } | |
| 7315 | + | |
| 7316 | + // set attributes | |
| 7317 | + setAttributes(inputClass, params.inputAttributes); | |
| 7318 | + | |
| 7319 | + // set class | |
| 7320 | + inputContainer.className = swalClasses[inputClass]; | |
| 7321 | + if (rerender) { | |
| 7322 | + hide(inputContainer); | |
| 7323 | + } | |
| 7324 | + }); | |
| 7325 | + if (params.input) { | |
| 7326 | + if (rerender) { | |
| 7327 | + showInput(params); | |
| 7328 | + } | |
| 7329 | + // set custom class | |
| 7330 | + setCustomClass(params); | |
| 7331 | + } | |
| 1510 | 7332 | }; |
| 1511 | -} | |
| 1512 | -/** | |
| 1513 | - * Clamp value between min and max | |
| 1514 | - */ | |
| 1515 | 7333 | |
| 1516 | -function clamp(value, min, max) { | |
| 1517 | - return Math.min(Math.max(value, min), max); | |
| 1518 | -} | |
| 1519 | -/** | |
| 1520 | - * Combine multiple class names into a single string. | |
| 1521 | - */ | |
| 7334 | + /** | |
| 7335 | + * @param {SweetAlertOptions} params | |
| 7336 | + */ | |
| 7337 | + const showInput = params => { | |
| 7338 | + if (!params.input) { | |
| 7339 | + return; | |
| 7340 | + } | |
| 7341 | + if (!renderInputType[params.input]) { | |
| 7342 | + error(`Unexpected type of input! Expected ${Object.keys(renderInputType).join(' | ')}, got "${params.input}"`); | |
| 7343 | + return; | |
| 7344 | + } | |
| 7345 | + const inputContainer = getInputContainer(params.input); | |
| 7346 | + if (!inputContainer) { | |
| 7347 | + return; | |
| 7348 | + } | |
| 7349 | + const input = renderInputType[params.input](inputContainer, params); | |
| 7350 | + show(inputContainer); | |
| 1522 | 7351 | |
| 1523 | -function classNames() { | |
| 1524 | - var args = []; | |
| 7352 | + // input autofocus | |
| 7353 | + if (params.inputAutoFocus) { | |
| 7354 | + setTimeout(() => { | |
| 7355 | + focusInput(input); | |
| 7356 | + }); | |
| 7357 | + } | |
| 7358 | + }; | |
| 1525 | 7359 | |
| 1526 | - for (var _i = 0; _i < arguments.length; _i++) { | |
| 1527 | - args[_i] = arguments[_i]; | |
| 1528 | - } | |
| 7360 | + /** | |
| 7361 | + * @param {HTMLInputElement} input | |
| 7362 | + */ | |
| 7363 | + const removeAttributes = input => { | |
| 7364 | + for (let i = 0; i < input.attributes.length; i++) { | |
| 7365 | + const attrName = input.attributes[i].name; | |
| 7366 | + if (!['id', 'type', 'value', 'style'].includes(attrName)) { | |
| 7367 | + input.removeAttribute(attrName); | |
| 7368 | + } | |
| 7369 | + } | |
| 7370 | + }; | |
| 1529 | 7371 | |
| 1530 | - return args.filter(function (value) { | |
| 1531 | - if (typeof value === 'string' && value.length > 0) { | |
| 1532 | - return true; | |
| 7372 | + /** | |
| 7373 | + * @param {InputClass} inputClass | |
| 7374 | + * @param {SweetAlertOptions['inputAttributes']} inputAttributes | |
| 7375 | + */ | |
| 7376 | + const setAttributes = (inputClass, inputAttributes) => { | |
| 7377 | + const popup = getPopup(); | |
| 7378 | + if (!popup) { | |
| 7379 | + return; | |
| 1533 | 7380 | } |
| 7381 | + const input = getInput$1(popup, inputClass); | |
| 7382 | + if (!input) { | |
| 7383 | + return; | |
| 7384 | + } | |
| 7385 | + removeAttributes(input); | |
| 7386 | + for (const attr in inputAttributes) { | |
| 7387 | + input.setAttribute(attr, inputAttributes[attr]); | |
| 7388 | + } | |
| 7389 | + }; | |
| 1534 | 7390 | |
| 1535 | - return false; | |
| 1536 | - }).join(' ').trim(); | |
| 1537 | -} | |
| 7391 | + /** | |
| 7392 | + * @param {SweetAlertOptions} params | |
| 7393 | + */ | |
| 7394 | + const setCustomClass = params => { | |
| 7395 | + if (!params.input) { | |
| 7396 | + return; | |
| 7397 | + } | |
| 7398 | + const inputContainer = getInputContainer(params.input); | |
| 7399 | + if (inputContainer) { | |
| 7400 | + applyCustomClass(inputContainer, params, 'input'); | |
| 7401 | + } | |
| 7402 | + }; | |
| 1538 | 7403 | |
| 1539 | -var css_248z = ".reactEasyCrop_Container {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n overflow: hidden;\n user-select: none;\n touch-action: none;\n cursor: move;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n.reactEasyCrop_Image,\n.reactEasyCrop_Video {\n will-change: transform; /* this improves performances and prevent painting issues on iOS Chrome */\n}\n\n.reactEasyCrop_Contain {\n max-width: 100%;\n max-height: 100%;\n margin: auto;\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n}\n.reactEasyCrop_Cover_Horizontal {\n width: 100%;\n height: auto;\n}\n.reactEasyCrop_Cover_Vertical {\n width: auto;\n height: 100%;\n}\n\n.reactEasyCrop_CropArea {\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n border: 1px solid rgba(255, 255, 255, 0.5);\n box-sizing: border-box;\n box-shadow: 0 0 0 9999em;\n color: rgba(0, 0, 0, 0.5);\n overflow: hidden;\n}\n\n.reactEasyCrop_CropAreaRound {\n border-radius: 50%;\n}\n\n.reactEasyCrop_CropAreaGrid::before {\n content: ' ';\n box-sizing: border-box;\n position: absolute;\n border: 1px solid rgba(255, 255, 255, 0.5);\n top: 0;\n bottom: 0;\n left: 33.33%;\n right: 33.33%;\n border-top: 0;\n border-bottom: 0;\n}\n\n.reactEasyCrop_CropAreaGrid::after {\n content: ' ';\n box-sizing: border-box;\n position: absolute;\n border: 1px solid rgba(255, 255, 255, 0.5);\n top: 33.33%;\n bottom: 33.33%;\n left: 0;\n right: 0;\n border-left: 0;\n border-right: 0;\n}\n"; | |
| 7404 | + /** | |
| 7405 | + * @param {HTMLInputElement | HTMLTextAreaElement} input | |
| 7406 | + * @param {SweetAlertOptions} params | |
| 7407 | + */ | |
| 7408 | + const setInputPlaceholder = (input, params) => { | |
| 7409 | + if (!input.placeholder && params.inputPlaceholder) { | |
| 7410 | + input.placeholder = params.inputPlaceholder; | |
| 7411 | + } | |
| 7412 | + }; | |
| 1540 | 7413 | |
| 1541 | -var MIN_ZOOM = 1; | |
| 1542 | -var MAX_ZOOM = 3; | |
| 7414 | + /** | |
| 7415 | + * @param {Input} input | |
| 7416 | + * @param {Input} prependTo | |
| 7417 | + * @param {SweetAlertOptions} params | |
| 7418 | + */ | |
| 7419 | + const setInputLabel = (input, prependTo, params) => { | |
| 7420 | + if (params.inputLabel) { | |
| 7421 | + const label = document.createElement('label'); | |
| 7422 | + const labelClass = swalClasses['input-label']; | |
| 7423 | + label.setAttribute('for', input.id); | |
| 7424 | + label.className = labelClass; | |
| 7425 | + if (typeof params.customClass === 'object') { | |
| 7426 | + addClass(label, params.customClass.inputLabel); | |
| 7427 | + } | |
| 7428 | + label.innerText = params.inputLabel; | |
| 7429 | + prependTo.insertAdjacentElement('beforebegin', label); | |
| 7430 | + } | |
| 7431 | + }; | |
| 1543 | 7432 | |
| 1544 | -var Cropper = | |
| 1545 | -/** @class */ | |
| 1546 | -function (_super) { | |
| 1547 | - (0,tslib__WEBPACK_IMPORTED_MODULE_2__.__extends)(Cropper, _super); | |
| 7433 | + /** | |
| 7434 | + * @param {SweetAlertInput} inputType | |
| 7435 | + * @returns {HTMLElement | undefined} | |
| 7436 | + */ | |
| 7437 | + const getInputContainer = inputType => { | |
| 7438 | + const popup = getPopup(); | |
| 7439 | + if (!popup) { | |
| 7440 | + return; | |
| 7441 | + } | |
| 7442 | + return getDirectChildByClass(popup, swalClasses[(/** @type {SwalClass} */inputType)] || swalClasses.input); | |
| 7443 | + }; | |
| 1548 | 7444 | |
| 1549 | - function Cropper() { | |
| 1550 | - var _this = _super !== null && _super.apply(this, arguments) || this; | |
| 7445 | + /** | |
| 7446 | + * @param {HTMLInputElement | HTMLOutputElement | HTMLTextAreaElement} input | |
| 7447 | + * @param {SweetAlertOptions['inputValue']} inputValue | |
| 7448 | + */ | |
| 7449 | + const checkAndSetInputValue = (input, inputValue) => { | |
| 7450 | + if (['string', 'number'].includes(typeof inputValue)) { | |
| 7451 | + input.value = `${inputValue}`; | |
| 7452 | + } else if (!isPromise(inputValue)) { | |
| 7453 | + warn(`Unexpected type of inputValue! Expected "string", "number" or "Promise", got "${typeof inputValue}"`); | |
| 7454 | + } | |
| 7455 | + }; | |
| 1551 | 7456 | |
| 1552 | - _this.imageRef = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createRef(); | |
| 1553 | - _this.videoRef = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createRef(); | |
| 1554 | - _this.containerRef = null; | |
| 1555 | - _this.styleRef = null; | |
| 1556 | - _this.containerRect = null; | |
| 1557 | - _this.mediaSize = { | |
| 1558 | - width: 0, | |
| 1559 | - height: 0, | |
| 1560 | - naturalWidth: 0, | |
| 1561 | - naturalHeight: 0 | |
| 1562 | - }; | |
| 1563 | - _this.dragStartPosition = { | |
| 1564 | - x: 0, | |
| 1565 | - y: 0 | |
| 1566 | - }; | |
| 1567 | - _this.dragStartCrop = { | |
| 1568 | - x: 0, | |
| 1569 | - y: 0 | |
| 1570 | - }; | |
| 1571 | - _this.lastPinchDistance = 0; | |
| 1572 | - _this.lastPinchRotation = 0; | |
| 1573 | - _this.rafDragTimeout = null; | |
| 1574 | - _this.rafPinchTimeout = null; | |
| 1575 | - _this.wheelTimer = null; | |
| 1576 | - _this.state = { | |
| 1577 | - cropSize: null, | |
| 1578 | - hasWheelJustStarted: false | |
| 1579 | - }; // this is to prevent Safari on iOS >= 10 to zoom the page | |
| 7457 | + /** @type {Record<SweetAlertInput, (input: Input | HTMLElement, params: SweetAlertOptions) => Input>} */ | |
| 7458 | + const renderInputType = {}; | |
| 1580 | 7459 | |
| 1581 | - _this.preventZoomSafari = function (e) { | |
| 1582 | - return e.preventDefault(); | |
| 1583 | - }; | |
| 7460 | + /** | |
| 7461 | + * @param {Input | HTMLElement} input | |
| 7462 | + * @param {SweetAlertOptions} params | |
| 7463 | + * @returns {Input} | |
| 7464 | + */ | |
| 7465 | + renderInputType.text = renderInputType.email = renderInputType.password = renderInputType.number = renderInputType.tel = renderInputType.url = renderInputType.search = renderInputType.date = renderInputType['datetime-local'] = renderInputType.time = renderInputType.week = renderInputType.month = /** @type {(input: Input | HTMLElement, params: SweetAlertOptions) => Input} */ | |
| 7466 | + (input, params) => { | |
| 7467 | + const inputElement = /** @type {HTMLInputElement} */input; | |
| 7468 | + checkAndSetInputValue(inputElement, params.inputValue); | |
| 7469 | + setInputLabel(inputElement, inputElement, params); | |
| 7470 | + setInputPlaceholder(inputElement, params); | |
| 7471 | + inputElement.type = /** @type {string} */params.input; | |
| 7472 | + return inputElement; | |
| 7473 | + }; | |
| 1584 | 7474 | |
| 1585 | - _this.cleanEvents = function () { | |
| 1586 | - document.removeEventListener('mousemove', _this.onMouseMove); | |
| 1587 | - document.removeEventListener('mouseup', _this.onDragStopped); | |
| 1588 | - document.removeEventListener('touchmove', _this.onTouchMove); | |
| 1589 | - document.removeEventListener('touchend', _this.onDragStopped); | |
| 1590 | - }; | |
| 7475 | + /** | |
| 7476 | + * @param {Input | HTMLElement} input | |
| 7477 | + * @param {SweetAlertOptions} params | |
| 7478 | + * @returns {Input} | |
| 7479 | + */ | |
| 7480 | + renderInputType.file = (input, params) => { | |
| 7481 | + const inputElement = /** @type {HTMLInputElement} */input; | |
| 7482 | + setInputLabel(inputElement, inputElement, params); | |
| 7483 | + setInputPlaceholder(inputElement, params); | |
| 7484 | + return inputElement; | |
| 7485 | + }; | |
| 1591 | 7486 | |
| 1592 | - _this.clearScrollEvent = function () { | |
| 1593 | - if (_this.containerRef) _this.containerRef.removeEventListener('wheel', _this.onWheel); | |
| 7487 | + /** | |
| 7488 | + * @param {Input | HTMLElement} range | |
| 7489 | + * @param {SweetAlertOptions} params | |
| 7490 | + * @returns {Input} | |
| 7491 | + */ | |
| 7492 | + renderInputType.range = (range, params) => { | |
| 7493 | + const rangeContainer = /** @type {HTMLElement} */range; | |
| 7494 | + const rangeInput = rangeContainer.querySelector('input'); | |
| 7495 | + const rangeOutput = rangeContainer.querySelector('output'); | |
| 7496 | + if (rangeInput) { | |
| 7497 | + checkAndSetInputValue(rangeInput, params.inputValue); | |
| 7498 | + rangeInput.type = /** @type {string} */params.input; | |
| 7499 | + setInputLabel(rangeInput, /** @type {Input} */range, params); | |
| 7500 | + } | |
| 7501 | + if (rangeOutput) { | |
| 7502 | + checkAndSetInputValue(rangeOutput, params.inputValue); | |
| 7503 | + } | |
| 7504 | + return /** @type {Input} */range; | |
| 7505 | + }; | |
| 1594 | 7506 | |
| 1595 | - if (_this.wheelTimer) { | |
| 1596 | - clearTimeout(_this.wheelTimer); | |
| 7507 | + /** | |
| 7508 | + * @param {Input | HTMLElement} select | |
| 7509 | + * @param {SweetAlertOptions} params | |
| 7510 | + * @returns {Input} | |
| 7511 | + */ | |
| 7512 | + renderInputType.select = (select, params) => { | |
| 7513 | + const selectElement = /** @type {HTMLSelectElement} */select; | |
| 7514 | + selectElement.textContent = ''; | |
| 7515 | + if (params.inputPlaceholder) { | |
| 7516 | + const placeholder = document.createElement('option'); | |
| 7517 | + setInnerHtml(placeholder, params.inputPlaceholder); | |
| 7518 | + placeholder.value = ''; | |
| 7519 | + placeholder.disabled = true; | |
| 7520 | + placeholder.selected = true; | |
| 7521 | + selectElement.appendChild(placeholder); | |
| 7522 | + } | |
| 7523 | + setInputLabel(selectElement, selectElement, params); | |
| 7524 | + return selectElement; | |
| 7525 | + }; | |
| 7526 | + | |
| 7527 | + /** | |
| 7528 | + * @param {Input | HTMLElement} radio | |
| 7529 | + * @returns {Input} | |
| 7530 | + */ | |
| 7531 | + renderInputType.radio = radio => { | |
| 7532 | + const radioElement = /** @type {HTMLElement} */radio; | |
| 7533 | + radioElement.textContent = ''; | |
| 7534 | + return /** @type {Input} */radio; | |
| 7535 | + }; | |
| 7536 | + | |
| 7537 | + /** | |
| 7538 | + * @param {Input | HTMLElement} checkboxContainer | |
| 7539 | + * @param {SweetAlertOptions} params | |
| 7540 | + * @returns {Input} | |
| 7541 | + */ | |
| 7542 | + renderInputType.checkbox = (checkboxContainer, params) => { | |
| 7543 | + const popup = getPopup(); | |
| 7544 | + if (!popup) { | |
| 7545 | + throw new Error('Popup not found'); | |
| 7546 | + } | |
| 7547 | + const checkbox = getInput$1(popup, 'checkbox'); | |
| 7548 | + if (!checkbox) { | |
| 7549 | + throw new Error('Checkbox input not found'); | |
| 7550 | + } | |
| 7551 | + checkbox.value = '1'; | |
| 7552 | + checkbox.checked = Boolean(params.inputValue); | |
| 7553 | + const containerElement = /** @type {HTMLElement} */checkboxContainer; | |
| 7554 | + const label = containerElement.querySelector('span'); | |
| 7555 | + if (label) { | |
| 7556 | + const placeholderOrLabel = params.inputPlaceholder || params.inputLabel; | |
| 7557 | + if (placeholderOrLabel) { | |
| 7558 | + setInnerHtml(label, placeholderOrLabel); | |
| 1597 | 7559 | } |
| 1598 | - }; | |
| 7560 | + } | |
| 7561 | + return checkbox; | |
| 7562 | + }; | |
| 1599 | 7563 | |
| 1600 | - _this.onMediaLoad = function () { | |
| 1601 | - var cropSize = _this.computeSizes(); | |
| 7564 | + /** | |
| 7565 | + * @param {Input | HTMLElement} textarea | |
| 7566 | + * @param {SweetAlertOptions} params | |
| 7567 | + * @returns {Input} | |
| 7568 | + */ | |
| 7569 | + renderInputType.textarea = (textarea, params) => { | |
| 7570 | + const textareaElement = /** @type {HTMLTextAreaElement} */textarea; | |
| 7571 | + checkAndSetInputValue(textareaElement, params.inputValue); | |
| 7572 | + setInputPlaceholder(textareaElement, params); | |
| 7573 | + setInputLabel(textareaElement, textareaElement, params); | |
| 1602 | 7574 | |
| 1603 | - if (cropSize) { | |
| 1604 | - _this.emitCropData(); | |
| 7575 | + /** | |
| 7576 | + * @param {HTMLElement} el | |
| 7577 | + * @returns {number} | |
| 7578 | + */ | |
| 7579 | + const getMargin = el => parseInt(window.getComputedStyle(el).marginLeft) + parseInt(window.getComputedStyle(el).marginRight); | |
| 1605 | 7580 | |
| 1606 | - _this.setInitialCrop(cropSize); | |
| 7581 | + // https://github.com/sweetalert2/sweetalert2/issues/2291 | |
| 7582 | + setTimeout(() => { | |
| 7583 | + // https://github.com/sweetalert2/sweetalert2/issues/1699 | |
| 7584 | + if ('MutationObserver' in window) { | |
| 7585 | + const popup = getPopup(); | |
| 7586 | + if (!popup) { | |
| 7587 | + return; | |
| 7588 | + } | |
| 7589 | + const initialPopupWidth = parseInt(window.getComputedStyle(popup).width); | |
| 7590 | + const textareaResizeHandler = () => { | |
| 7591 | + // check if texarea is still in document (i.e. popup wasn't closed in the meantime) | |
| 7592 | + if (!document.body.contains(textareaElement)) { | |
| 7593 | + return; | |
| 7594 | + } | |
| 7595 | + const textareaWidth = textareaElement.offsetWidth + getMargin(textareaElement); | |
| 7596 | + const popupElement = getPopup(); | |
| 7597 | + if (popupElement) { | |
| 7598 | + if (textareaWidth > initialPopupWidth) { | |
| 7599 | + popupElement.style.width = `${textareaWidth}px`; | |
| 7600 | + } else { | |
| 7601 | + applyNumericalStyle(popupElement, 'width', params.width); | |
| 7602 | + } | |
| 7603 | + } | |
| 7604 | + }; | |
| 7605 | + new MutationObserver(textareaResizeHandler).observe(textareaElement, { | |
| 7606 | + attributes: true, | |
| 7607 | + attributeFilter: ['style'] | |
| 7608 | + }); | |
| 1607 | 7609 | } |
| 7610 | + }); | |
| 7611 | + return textareaElement; | |
| 7612 | + }; | |
| 1608 | 7613 | |
| 1609 | - if (_this.props.onMediaLoaded) { | |
| 1610 | - _this.props.onMediaLoaded(_this.mediaSize); | |
| 7614 | + /** | |
| 7615 | + * @param {SweetAlert} instance | |
| 7616 | + * @param {SweetAlertOptions} params | |
| 7617 | + */ | |
| 7618 | + const renderContent = (instance, params) => { | |
| 7619 | + const htmlContainer = getHtmlContainer(); | |
| 7620 | + if (!htmlContainer) { | |
| 7621 | + return; | |
| 7622 | + } | |
| 7623 | + showWhenInnerHtmlPresent(htmlContainer); | |
| 7624 | + applyCustomClass(htmlContainer, params, 'htmlContainer'); | |
| 7625 | + | |
| 7626 | + // Content as HTML | |
| 7627 | + if (params.html) { | |
| 7628 | + parseHtmlToContainer(params.html, htmlContainer); | |
| 7629 | + show(htmlContainer, 'block'); | |
| 7630 | + } | |
| 7631 | + | |
| 7632 | + // Content as plain text | |
| 7633 | + else if (params.text) { | |
| 7634 | + htmlContainer.textContent = params.text; | |
| 7635 | + show(htmlContainer, 'block'); | |
| 7636 | + } | |
| 7637 | + | |
| 7638 | + // No content | |
| 7639 | + else { | |
| 7640 | + hide(htmlContainer); | |
| 7641 | + } | |
| 7642 | + renderInput(instance, params); | |
| 7643 | + }; | |
| 7644 | + | |
| 7645 | + /** | |
| 7646 | + * @param {SweetAlert} instance | |
| 7647 | + * @param {SweetAlertOptions} params | |
| 7648 | + */ | |
| 7649 | + const renderFooter = (instance, params) => { | |
| 7650 | + const footer = getFooter(); | |
| 7651 | + if (!footer) { | |
| 7652 | + return; | |
| 7653 | + } | |
| 7654 | + showWhenInnerHtmlPresent(footer); | |
| 7655 | + toggle(footer, Boolean(params.footer), 'block'); | |
| 7656 | + if (params.footer) { | |
| 7657 | + parseHtmlToContainer(params.footer, footer); | |
| 7658 | + } | |
| 7659 | + | |
| 7660 | + // Custom class | |
| 7661 | + applyCustomClass(footer, params, 'footer'); | |
| 7662 | + }; | |
| 7663 | + | |
| 7664 | + /** | |
| 7665 | + * @param {SweetAlert} instance | |
| 7666 | + * @param {SweetAlertOptions} params | |
| 7667 | + */ | |
| 7668 | + const renderIcon = (instance, params) => { | |
| 7669 | + const innerParams = privateProps.innerParams.get(instance); | |
| 7670 | + const icon = getIcon(); | |
| 7671 | + if (!icon) { | |
| 7672 | + return; | |
| 7673 | + } | |
| 7674 | + | |
| 7675 | + // if the given icon already rendered, apply the styling without re-rendering the icon | |
| 7676 | + if (innerParams && params.icon === innerParams.icon) { | |
| 7677 | + // Custom or default content | |
| 7678 | + setContent(icon, params); | |
| 7679 | + applyStyles(icon, params); | |
| 7680 | + return; | |
| 7681 | + } | |
| 7682 | + if (!params.icon && !params.iconHtml) { | |
| 7683 | + hide(icon); | |
| 7684 | + return; | |
| 7685 | + } | |
| 7686 | + if (params.icon && Object.keys(iconTypes).indexOf(params.icon) === -1) { | |
| 7687 | + error(`Unknown icon! Expected "success", "error", "warning", "info" or "question", got "${params.icon}"`); | |
| 7688 | + hide(icon); | |
| 7689 | + return; | |
| 7690 | + } | |
| 7691 | + show(icon); | |
| 7692 | + | |
| 7693 | + // Custom or default content | |
| 7694 | + setContent(icon, params); | |
| 7695 | + applyStyles(icon, params); | |
| 7696 | + | |
| 7697 | + // Animate icon | |
| 7698 | + addClass(icon, params.showClass && params.showClass.icon); | |
| 7699 | + | |
| 7700 | + // Re-adjust the success icon on system theme change | |
| 7701 | + const colorSchemeQueryList = window.matchMedia('(prefers-color-scheme: dark)'); | |
| 7702 | + colorSchemeQueryList.addEventListener('change', adjustSuccessIconBackgroundColor); | |
| 7703 | + }; | |
| 7704 | + | |
| 7705 | + /** | |
| 7706 | + * @param {HTMLElement} icon | |
| 7707 | + * @param {SweetAlertOptions} params | |
| 7708 | + */ | |
| 7709 | + const applyStyles = (icon, params) => { | |
| 7710 | + for (const [iconType, iconClassName] of Object.entries(iconTypes)) { | |
| 7711 | + if (params.icon !== iconType) { | |
| 7712 | + removeClass(icon, iconClassName); | |
| 1611 | 7713 | } |
| 7714 | + } | |
| 7715 | + addClass(icon, params.icon && iconTypes[params.icon]); | |
| 7716 | + | |
| 7717 | + // Icon color | |
| 7718 | + setColor(icon, params); | |
| 7719 | + | |
| 7720 | + // Success icon background color | |
| 7721 | + adjustSuccessIconBackgroundColor(); | |
| 7722 | + | |
| 7723 | + // Custom class | |
| 7724 | + applyCustomClass(icon, params, 'icon'); | |
| 7725 | + }; | |
| 7726 | + | |
| 7727 | + // Adjust success icon background color to match the popup background color | |
| 7728 | + const adjustSuccessIconBackgroundColor = () => { | |
| 7729 | + const popup = getPopup(); | |
| 7730 | + if (!popup) { | |
| 7731 | + return; | |
| 7732 | + } | |
| 7733 | + const popupBackgroundColor = window.getComputedStyle(popup).getPropertyValue('background-color'); | |
| 7734 | + /** @type {NodeListOf<HTMLElement>} */ | |
| 7735 | + const successIconParts = popup.querySelectorAll('[class^=swal2-success-circular-line], .swal2-success-fix'); | |
| 7736 | + for (let i = 0; i < successIconParts.length; i++) { | |
| 7737 | + successIconParts[i].style.backgroundColor = popupBackgroundColor; | |
| 7738 | + } | |
| 7739 | + }; | |
| 7740 | + | |
| 7741 | + /** | |
| 7742 | + * | |
| 7743 | + * @param {SweetAlertOptions} params | |
| 7744 | + * @returns {string} | |
| 7745 | + */ | |
| 7746 | + const successIconHtml = params => ` | |
| 7747 | + ${params.animation ? '<div class="swal2-success-circular-line-left"></div>' : ''} | |
| 7748 | + <span class="swal2-success-line-tip"></span> <span class="swal2-success-line-long"></span> | |
| 7749 | + <div class="swal2-success-ring"></div> | |
| 7750 | + ${params.animation ? '<div class="swal2-success-fix"></div>' : ''} | |
| 7751 | + ${params.animation ? '<div class="swal2-success-circular-line-right"></div>' : ''} | |
| 7752 | +`; | |
| 7753 | + const errorIconHtml = ` | |
| 7754 | + <span class="swal2-x-mark"> | |
| 7755 | + <span class="swal2-x-mark-line-left"></span> | |
| 7756 | + <span class="swal2-x-mark-line-right"></span> | |
| 7757 | + </span> | |
| 7758 | +`; | |
| 7759 | + | |
| 7760 | + /** | |
| 7761 | + * @param {HTMLElement} icon | |
| 7762 | + * @param {SweetAlertOptions} params | |
| 7763 | + */ | |
| 7764 | + const setContent = (icon, params) => { | |
| 7765 | + if (!params.icon && !params.iconHtml) { | |
| 7766 | + return; | |
| 7767 | + } | |
| 7768 | + let oldContent = icon.innerHTML; | |
| 7769 | + let newContent = ''; | |
| 7770 | + if (params.iconHtml) { | |
| 7771 | + newContent = iconContent(params.iconHtml); | |
| 7772 | + } else if (params.icon === 'success') { | |
| 7773 | + newContent = successIconHtml(params); | |
| 7774 | + oldContent = oldContent.replace(/ style=".*?"/g, ''); // undo adjustSuccessIconBackgroundColor() | |
| 7775 | + } else if (params.icon === 'error') { | |
| 7776 | + newContent = errorIconHtml; | |
| 7777 | + } else if (params.icon) { | |
| 7778 | + const defaultIconHtml = { | |
| 7779 | + question: '?', | |
| 7780 | + warning: '!', | |
| 7781 | + info: 'i' | |
| 7782 | + }; | |
| 7783 | + newContent = iconContent(defaultIconHtml[params.icon]); | |
| 7784 | + } | |
| 7785 | + if (oldContent.trim() !== newContent.trim()) { | |
| 7786 | + setInnerHtml(icon, newContent); | |
| 7787 | + } | |
| 7788 | + }; | |
| 7789 | + | |
| 7790 | + /** | |
| 7791 | + * @param {HTMLElement} icon | |
| 7792 | + * @param {SweetAlertOptions} params | |
| 7793 | + */ | |
| 7794 | + const setColor = (icon, params) => { | |
| 7795 | + if (!params.iconColor) { | |
| 7796 | + return; | |
| 7797 | + } | |
| 7798 | + icon.style.color = params.iconColor; | |
| 7799 | + icon.style.borderColor = params.iconColor; | |
| 7800 | + for (const sel of ['.swal2-success-line-tip', '.swal2-success-line-long', '.swal2-x-mark-line-left', '.swal2-x-mark-line-right']) { | |
| 7801 | + setStyle(icon, sel, 'background-color', params.iconColor); | |
| 7802 | + } | |
| 7803 | + setStyle(icon, '.swal2-success-ring', 'border-color', params.iconColor); | |
| 7804 | + }; | |
| 7805 | + | |
| 7806 | + /** | |
| 7807 | + * @param {string} content | |
| 7808 | + * @returns {string} | |
| 7809 | + */ | |
| 7810 | + const iconContent = content => `<div class="${swalClasses['icon-content']}">${content}</div>`; | |
| 7811 | + | |
| 7812 | + /** | |
| 7813 | + * @param {SweetAlert} instance | |
| 7814 | + * @param {SweetAlertOptions} params | |
| 7815 | + */ | |
| 7816 | + const renderImage = (instance, params) => { | |
| 7817 | + const image = getImage(); | |
| 7818 | + if (!image) { | |
| 7819 | + return; | |
| 7820 | + } | |
| 7821 | + if (!params.imageUrl) { | |
| 7822 | + hide(image); | |
| 7823 | + return; | |
| 7824 | + } | |
| 7825 | + show(image, ''); | |
| 7826 | + | |
| 7827 | + // Src, alt | |
| 7828 | + image.setAttribute('src', params.imageUrl); | |
| 7829 | + image.setAttribute('alt', params.imageAlt || ''); | |
| 7830 | + | |
| 7831 | + // Width, height | |
| 7832 | + applyNumericalStyle(image, 'width', params.imageWidth); | |
| 7833 | + applyNumericalStyle(image, 'height', params.imageHeight); | |
| 7834 | + | |
| 7835 | + // Class | |
| 7836 | + image.className = swalClasses.image; | |
| 7837 | + applyCustomClass(image, params, 'image'); | |
| 7838 | + }; | |
| 7839 | + | |
| 7840 | + let dragging = false; | |
| 7841 | + let mousedownX = 0; | |
| 7842 | + let mousedownY = 0; | |
| 7843 | + let initialX = 0; | |
| 7844 | + let initialY = 0; | |
| 7845 | + | |
| 7846 | + /** | |
| 7847 | + * @param {HTMLElement} popup | |
| 7848 | + */ | |
| 7849 | + const addDraggableListeners = popup => { | |
| 7850 | + popup.addEventListener('mousedown', down); | |
| 7851 | + document.body.addEventListener('mousemove', move); | |
| 7852 | + popup.addEventListener('mouseup', up); | |
| 7853 | + popup.addEventListener('touchstart', down); | |
| 7854 | + document.body.addEventListener('touchmove', move); | |
| 7855 | + popup.addEventListener('touchend', up); | |
| 7856 | + }; | |
| 7857 | + | |
| 7858 | + /** | |
| 7859 | + * @param {HTMLElement} popup | |
| 7860 | + */ | |
| 7861 | + const removeDraggableListeners = popup => { | |
| 7862 | + popup.removeEventListener('mousedown', down); | |
| 7863 | + document.body.removeEventListener('mousemove', move); | |
| 7864 | + popup.removeEventListener('mouseup', up); | |
| 7865 | + popup.removeEventListener('touchstart', down); | |
| 7866 | + document.body.removeEventListener('touchmove', move); | |
| 7867 | + popup.removeEventListener('touchend', up); | |
| 7868 | + }; | |
| 7869 | + | |
| 7870 | + /** | |
| 7871 | + * @param {MouseEvent | TouchEvent} event | |
| 7872 | + */ | |
| 7873 | + const down = event => { | |
| 7874 | + const popup = getPopup(); | |
| 7875 | + if (!popup) { | |
| 7876 | + return; | |
| 7877 | + } | |
| 7878 | + const icon = getIcon(); | |
| 7879 | + if (event.target === popup || icon && icon.contains(/** @type {HTMLElement} */event.target)) { | |
| 7880 | + dragging = true; | |
| 7881 | + const clientXY = getClientXY(event); | |
| 7882 | + mousedownX = clientXY.clientX; | |
| 7883 | + mousedownY = clientXY.clientY; | |
| 7884 | + initialX = parseInt(popup.style.insetInlineStart) || 0; | |
| 7885 | + initialY = parseInt(popup.style.insetBlockStart) || 0; | |
| 7886 | + addClass(popup, 'swal2-dragging'); | |
| 7887 | + } | |
| 7888 | + }; | |
| 7889 | + | |
| 7890 | + /** | |
| 7891 | + * @param {MouseEvent | TouchEvent} event | |
| 7892 | + */ | |
| 7893 | + const move = event => { | |
| 7894 | + const popup = getPopup(); | |
| 7895 | + if (!popup) { | |
| 7896 | + return; | |
| 7897 | + } | |
| 7898 | + if (dragging) { | |
| 7899 | + let { | |
| 7900 | + clientX, | |
| 7901 | + clientY | |
| 7902 | + } = getClientXY(event); | |
| 7903 | + const deltaX = clientX - mousedownX; | |
| 7904 | + // In RTL mode, negate the horizontal delta since insetInlineStart refers to the right edge | |
| 7905 | + popup.style.insetInlineStart = `${initialX + (globalState.isRTL ? -deltaX : deltaX)}px`; | |
| 7906 | + popup.style.insetBlockStart = `${initialY + (clientY - mousedownY)}px`; | |
| 7907 | + } | |
| 7908 | + }; | |
| 7909 | + const up = () => { | |
| 7910 | + const popup = getPopup(); | |
| 7911 | + dragging = false; | |
| 7912 | + removeClass(popup, 'swal2-dragging'); | |
| 7913 | + }; | |
| 7914 | + | |
| 7915 | + /** | |
| 7916 | + * @param {MouseEvent | TouchEvent} event | |
| 7917 | + * @returns {{ clientX: number, clientY: number }} | |
| 7918 | + */ | |
| 7919 | + const getClientXY = event => { | |
| 7920 | + let clientX = 0, | |
| 7921 | + clientY = 0; | |
| 7922 | + if (event.type.startsWith('mouse')) { | |
| 7923 | + clientX = /** @type {MouseEvent} */event.clientX; | |
| 7924 | + clientY = /** @type {MouseEvent} */event.clientY; | |
| 7925 | + } else if (event.type.startsWith('touch')) { | |
| 7926 | + clientX = /** @type {TouchEvent} */event.touches[0].clientX; | |
| 7927 | + clientY = /** @type {TouchEvent} */event.touches[0].clientY; | |
| 7928 | + } | |
| 7929 | + return { | |
| 7930 | + clientX, | |
| 7931 | + clientY | |
| 1612 | 7932 | }; |
| 7933 | + }; | |
| 1613 | 7934 | |
| 1614 | - _this.setInitialCrop = function (cropSize) { | |
| 1615 | - if (_this.props.initialCroppedAreaPercentages) { | |
| 1616 | - var _a = getInitialCropFromCroppedAreaPercentages(_this.props.initialCroppedAreaPercentages, _this.mediaSize, _this.props.rotation, cropSize, _this.props.minZoom, _this.props.maxZoom), | |
| 1617 | - crop = _a.crop, | |
| 1618 | - zoom = _a.zoom; | |
| 7935 | + /** | |
| 7936 | + * @param {SweetAlert} instance | |
| 7937 | + * @param {SweetAlertOptions} params | |
| 7938 | + */ | |
| 7939 | + const renderPopup = (instance, params) => { | |
| 7940 | + const container = getContainer(); | |
| 7941 | + const popup = getPopup(); | |
| 7942 | + if (!container || !popup) { | |
| 7943 | + return; | |
| 7944 | + } | |
| 1619 | 7945 | |
| 1620 | - _this.props.onCropChange(crop); | |
| 7946 | + // Width | |
| 7947 | + // https://github.com/sweetalert2/sweetalert2/issues/2170 | |
| 7948 | + if (params.toast) { | |
| 7949 | + applyNumericalStyle(container, 'width', params.width); | |
| 7950 | + popup.style.width = '100%'; | |
| 7951 | + const loader = getLoader(); | |
| 7952 | + if (loader) { | |
| 7953 | + popup.insertBefore(loader, getIcon()); | |
| 7954 | + } | |
| 7955 | + } else { | |
| 7956 | + applyNumericalStyle(popup, 'width', params.width); | |
| 7957 | + } | |
| 1621 | 7958 | |
| 1622 | - _this.props.onZoomChange && _this.props.onZoomChange(zoom); | |
| 1623 | - } else if (_this.props.initialCroppedAreaPixels) { | |
| 1624 | - var _b = getInitialCropFromCroppedAreaPixels(_this.props.initialCroppedAreaPixels, _this.mediaSize, _this.props.rotation, cropSize, _this.props.minZoom, _this.props.maxZoom), | |
| 1625 | - crop = _b.crop, | |
| 1626 | - zoom = _b.zoom; | |
| 7959 | + // Padding | |
| 7960 | + applyNumericalStyle(popup, 'padding', params.padding); | |
| 1627 | 7961 | |
| 1628 | - _this.props.onCropChange(crop); | |
| 7962 | + // Color | |
| 7963 | + if (params.color) { | |
| 7964 | + popup.style.color = params.color; | |
| 7965 | + } | |
| 1629 | 7966 | |
| 1630 | - _this.props.onZoomChange && _this.props.onZoomChange(zoom); | |
| 7967 | + // Background | |
| 7968 | + if (params.background) { | |
| 7969 | + popup.style.background = params.background; | |
| 7970 | + } | |
| 7971 | + hide(getValidationMessage()); | |
| 7972 | + | |
| 7973 | + // Classes | |
| 7974 | + addClasses$1(popup, params); | |
| 7975 | + if (params.draggable && !params.toast) { | |
| 7976 | + addClass(popup, swalClasses.draggable); | |
| 7977 | + addDraggableListeners(popup); | |
| 7978 | + } else { | |
| 7979 | + removeClass(popup, swalClasses.draggable); | |
| 7980 | + removeDraggableListeners(popup); | |
| 7981 | + } | |
| 7982 | + }; | |
| 7983 | + | |
| 7984 | + /** | |
| 7985 | + * @param {HTMLElement} popup | |
| 7986 | + * @param {SweetAlertOptions} params | |
| 7987 | + */ | |
| 7988 | + const addClasses$1 = (popup, params) => { | |
| 7989 | + const showClass = params.showClass || {}; | |
| 7990 | + // Default Class + showClass when updating Swal.update({}) | |
| 7991 | + popup.className = `${swalClasses.popup} ${isVisible$1(popup) ? showClass.popup : ''}`; | |
| 7992 | + if (params.toast) { | |
| 7993 | + addClass([document.documentElement, document.body], swalClasses['toast-shown']); | |
| 7994 | + addClass(popup, swalClasses.toast); | |
| 7995 | + } else { | |
| 7996 | + addClass(popup, swalClasses.modal); | |
| 7997 | + } | |
| 7998 | + | |
| 7999 | + // Custom class | |
| 8000 | + applyCustomClass(popup, params, 'popup'); | |
| 8001 | + // TODO: remove in the next major | |
| 8002 | + if (typeof params.customClass === 'string') { | |
| 8003 | + addClass(popup, params.customClass); | |
| 8004 | + } | |
| 8005 | + | |
| 8006 | + // Icon class (#1842) | |
| 8007 | + if (params.icon) { | |
| 8008 | + addClass(popup, swalClasses[`icon-${params.icon}`]); | |
| 8009 | + } | |
| 8010 | + }; | |
| 8011 | + | |
| 8012 | + /** | |
| 8013 | + * @param {SweetAlert} instance | |
| 8014 | + * @param {SweetAlertOptions} params | |
| 8015 | + */ | |
| 8016 | + const renderProgressSteps = (instance, params) => { | |
| 8017 | + const progressStepsContainer = getProgressSteps(); | |
| 8018 | + if (!progressStepsContainer) { | |
| 8019 | + return; | |
| 8020 | + } | |
| 8021 | + const { | |
| 8022 | + progressSteps, | |
| 8023 | + currentProgressStep | |
| 8024 | + } = params; | |
| 8025 | + if (!progressSteps || progressSteps.length === 0 || currentProgressStep === undefined) { | |
| 8026 | + hide(progressStepsContainer); | |
| 8027 | + return; | |
| 8028 | + } | |
| 8029 | + show(progressStepsContainer); | |
| 8030 | + progressStepsContainer.textContent = ''; | |
| 8031 | + if (currentProgressStep >= progressSteps.length) { | |
| 8032 | + warn('Invalid currentProgressStep parameter, it should be less than progressSteps.length ' + '(currentProgressStep like JS arrays starts from 0)'); | |
| 8033 | + } | |
| 8034 | + progressSteps.forEach((step, index) => { | |
| 8035 | + const stepEl = createStepElement(step); | |
| 8036 | + progressStepsContainer.appendChild(stepEl); | |
| 8037 | + if (index === currentProgressStep) { | |
| 8038 | + addClass(stepEl, swalClasses['active-progress-step']); | |
| 1631 | 8039 | } |
| 1632 | - }; | |
| 8040 | + if (index !== progressSteps.length - 1) { | |
| 8041 | + const lineEl = createLineElement(params); | |
| 8042 | + progressStepsContainer.appendChild(lineEl); | |
| 8043 | + } | |
| 8044 | + }); | |
| 8045 | + }; | |
| 1633 | 8046 | |
| 1634 | - _this.computeSizes = function () { | |
| 1635 | - var _a, _b, _c, _d, _e, _f; | |
| 8047 | + /** | |
| 8048 | + * @param {string} step | |
| 8049 | + * @returns {HTMLLIElement} | |
| 8050 | + */ | |
| 8051 | + const createStepElement = step => { | |
| 8052 | + const stepEl = document.createElement('li'); | |
| 8053 | + addClass(stepEl, swalClasses['progress-step']); | |
| 8054 | + setInnerHtml(stepEl, step); | |
| 8055 | + return stepEl; | |
| 8056 | + }; | |
| 1636 | 8057 | |
| 1637 | - var mediaRef = _this.imageRef.current || _this.videoRef.current; | |
| 8058 | + /** | |
| 8059 | + * @param {SweetAlertOptions} params | |
| 8060 | + * @returns {HTMLLIElement} | |
| 8061 | + */ | |
| 8062 | + const createLineElement = params => { | |
| 8063 | + const lineEl = document.createElement('li'); | |
| 8064 | + addClass(lineEl, swalClasses['progress-step-line']); | |
| 8065 | + if (params.progressStepsDistance) { | |
| 8066 | + applyNumericalStyle(lineEl, 'width', params.progressStepsDistance); | |
| 8067 | + } | |
| 8068 | + return lineEl; | |
| 8069 | + }; | |
| 1638 | 8070 | |
| 1639 | - if (mediaRef && _this.containerRef) { | |
| 1640 | - _this.containerRect = _this.containerRef.getBoundingClientRect(); | |
| 1641 | - var containerAspect = _this.containerRect.width / _this.containerRect.height; | |
| 1642 | - var naturalWidth = ((_a = _this.imageRef.current) === null || _a === void 0 ? void 0 : _a.naturalWidth) || ((_b = _this.videoRef.current) === null || _b === void 0 ? void 0 : _b.videoWidth) || 0; | |
| 1643 | - var naturalHeight = ((_c = _this.imageRef.current) === null || _c === void 0 ? void 0 : _c.naturalHeight) || ((_d = _this.videoRef.current) === null || _d === void 0 ? void 0 : _d.videoHeight) || 0; | |
| 1644 | - var isMediaScaledDown = mediaRef.offsetWidth < naturalWidth || mediaRef.offsetHeight < naturalHeight; | |
| 1645 | - var mediaAspect = naturalWidth / naturalHeight; // We do not rely on the offsetWidth/offsetHeight if the media is scaled down | |
| 1646 | - // as the values they report are rounded. That will result in precision losses | |
| 1647 | - // when calculating zoom. We use the fact that the media is positionned relative | |
| 1648 | - // to the container. That allows us to use the container's dimensions | |
| 1649 | - // and natural aspect ratio of the media to calculate accurate media size. | |
| 1650 | - // However, for this to work, the container should not be rotated | |
| 8071 | + /** | |
| 8072 | + * @param {SweetAlert} instance | |
| 8073 | + * @param {SweetAlertOptions} params | |
| 8074 | + */ | |
| 8075 | + const renderTitle = (instance, params) => { | |
| 8076 | + const title = getTitle(); | |
| 8077 | + if (!title) { | |
| 8078 | + return; | |
| 8079 | + } | |
| 8080 | + showWhenInnerHtmlPresent(title); | |
| 8081 | + toggle(title, Boolean(params.title || params.titleText), 'block'); | |
| 8082 | + if (params.title) { | |
| 8083 | + parseHtmlToContainer(params.title, title); | |
| 8084 | + } | |
| 8085 | + if (params.titleText) { | |
| 8086 | + title.innerText = params.titleText; | |
| 8087 | + } | |
| 1651 | 8088 | |
| 1652 | - var renderedMediaSize = void 0; | |
| 8089 | + // Custom class | |
| 8090 | + applyCustomClass(title, params, 'title'); | |
| 8091 | + }; | |
| 1653 | 8092 | |
| 1654 | - if (isMediaScaledDown) { | |
| 1655 | - switch (_this.props.objectFit) { | |
| 1656 | - default: | |
| 1657 | - case 'contain': | |
| 1658 | - renderedMediaSize = containerAspect > mediaAspect ? { | |
| 1659 | - width: _this.containerRect.height * mediaAspect, | |
| 1660 | - height: _this.containerRect.height | |
| 1661 | - } : { | |
| 1662 | - width: _this.containerRect.width, | |
| 1663 | - height: _this.containerRect.width / mediaAspect | |
| 1664 | - }; | |
| 1665 | - break; | |
| 8093 | + /** | |
| 8094 | + * @param {SweetAlert} instance | |
| 8095 | + * @param {SweetAlertOptions} params | |
| 8096 | + */ | |
| 8097 | + const render = (instance, params) => { | |
| 8098 | + var _globalState$eventEmi; | |
| 8099 | + renderPopup(instance, params); | |
| 8100 | + renderContainer(instance, params); | |
| 8101 | + renderProgressSteps(instance, params); | |
| 8102 | + renderIcon(instance, params); | |
| 8103 | + renderImage(instance, params); | |
| 8104 | + renderTitle(instance, params); | |
| 8105 | + renderCloseButton(instance, params); | |
| 8106 | + renderContent(instance, params); | |
| 8107 | + renderActions(instance, params); | |
| 8108 | + renderFooter(instance, params); | |
| 8109 | + const popup = getPopup(); | |
| 8110 | + if (typeof params.didRender === 'function' && popup) { | |
| 8111 | + params.didRender(popup); | |
| 8112 | + } | |
| 8113 | + (_globalState$eventEmi = globalState.eventEmitter) === null || _globalState$eventEmi === void 0 || _globalState$eventEmi.emit('didRender', popup); | |
| 8114 | + }; | |
| 1666 | 8115 | |
| 1667 | - case 'horizontal-cover': | |
| 1668 | - renderedMediaSize = { | |
| 1669 | - width: _this.containerRect.width, | |
| 1670 | - height: _this.containerRect.width / mediaAspect | |
| 1671 | - }; | |
| 1672 | - break; | |
| 8116 | + /* | |
| 8117 | + * Global function to determine if SweetAlert2 popup is shown | |
| 8118 | + */ | |
| 8119 | + const isVisible = () => { | |
| 8120 | + return isVisible$1(getPopup()); | |
| 8121 | + }; | |
| 1673 | 8122 | |
| 1674 | - case 'vertical-cover': | |
| 1675 | - renderedMediaSize = { | |
| 1676 | - width: _this.containerRect.height * mediaAspect, | |
| 1677 | - height: _this.containerRect.height | |
| 1678 | - }; | |
| 1679 | - break; | |
| 8123 | + /* | |
| 8124 | + * Global function to click 'Confirm' button | |
| 8125 | + */ | |
| 8126 | + const clickConfirm = () => { | |
| 8127 | + var _dom$getConfirmButton; | |
| 8128 | + return (_dom$getConfirmButton = getConfirmButton()) === null || _dom$getConfirmButton === void 0 ? void 0 : _dom$getConfirmButton.click(); | |
| 8129 | + }; | |
| 1680 | 8130 | |
| 1681 | - case 'auto-cover': | |
| 1682 | - renderedMediaSize = naturalWidth > naturalHeight ? { | |
| 1683 | - width: _this.containerRect.width, | |
| 1684 | - height: _this.containerRect.width / mediaAspect | |
| 1685 | - } : { | |
| 1686 | - width: _this.containerRect.height * mediaAspect, | |
| 1687 | - height: _this.containerRect.height | |
| 1688 | - }; | |
| 1689 | - break; | |
| 1690 | - } | |
| 1691 | - } else { | |
| 1692 | - renderedMediaSize = { | |
| 1693 | - width: mediaRef.offsetWidth, | |
| 1694 | - height: mediaRef.offsetHeight | |
| 1695 | - }; | |
| 1696 | - } | |
| 8131 | + /* | |
| 8132 | + * Global function to click 'Deny' button | |
| 8133 | + */ | |
| 8134 | + const clickDeny = () => { | |
| 8135 | + var _dom$getDenyButton; | |
| 8136 | + return (_dom$getDenyButton = getDenyButton()) === null || _dom$getDenyButton === void 0 ? void 0 : _dom$getDenyButton.click(); | |
| 8137 | + }; | |
| 1697 | 8138 | |
| 1698 | - _this.mediaSize = (0,tslib__WEBPACK_IMPORTED_MODULE_2__.__assign)((0,tslib__WEBPACK_IMPORTED_MODULE_2__.__assign)({}, renderedMediaSize), { | |
| 1699 | - naturalWidth: naturalWidth, | |
| 1700 | - naturalHeight: naturalHeight | |
| 8139 | + /* | |
| 8140 | + * Global function to click 'Cancel' button | |
| 8141 | + */ | |
| 8142 | + const clickCancel = () => { | |
| 8143 | + var _dom$getCancelButton; | |
| 8144 | + return (_dom$getCancelButton = getCancelButton()) === null || _dom$getCancelButton === void 0 ? void 0 : _dom$getCancelButton.click(); | |
| 8145 | + }; | |
| 8146 | + | |
| 8147 | + /** @type {Record<DismissReason, DismissReason>} */ | |
| 8148 | + const DismissReason = Object.freeze({ | |
| 8149 | + cancel: 'cancel', | |
| 8150 | + backdrop: 'backdrop', | |
| 8151 | + close: 'close', | |
| 8152 | + esc: 'esc', | |
| 8153 | + timer: 'timer' | |
| 8154 | + }); | |
| 8155 | + | |
| 8156 | + /** | |
| 8157 | + * @param {GlobalState} globalState | |
| 8158 | + */ | |
| 8159 | + const removeKeydownHandler = globalState => { | |
| 8160 | + if (globalState.keydownTarget && globalState.keydownHandlerAdded && globalState.keydownHandler) { | |
| 8161 | + const handler = /** @type {EventListenerOrEventListenerObject} */ /** @type {unknown} */globalState.keydownHandler; | |
| 8162 | + globalState.keydownTarget.removeEventListener('keydown', handler, { | |
| 8163 | + capture: globalState.keydownListenerCapture | |
| 8164 | + }); | |
| 8165 | + globalState.keydownHandlerAdded = false; | |
| 8166 | + } | |
| 8167 | + }; | |
| 8168 | + | |
| 8169 | + /** | |
| 8170 | + * @param {GlobalState} globalState | |
| 8171 | + * @param {SweetAlertOptions} innerParams | |
| 8172 | + * @param {(dismiss: DismissReason) => void} dismissWith | |
| 8173 | + */ | |
| 8174 | + const addKeydownHandler = (globalState, innerParams, dismissWith) => { | |
| 8175 | + removeKeydownHandler(globalState); | |
| 8176 | + if (!innerParams.toast) { | |
| 8177 | + /** @type {(this: HTMLElement, event: KeyboardEvent) => void} */ | |
| 8178 | + const handler = e => keydownHandler(innerParams, e, dismissWith); | |
| 8179 | + globalState.keydownHandler = handler; | |
| 8180 | + const target = innerParams.keydownListenerCapture ? window : getPopup(); | |
| 8181 | + if (target) { | |
| 8182 | + globalState.keydownTarget = target; | |
| 8183 | + globalState.keydownListenerCapture = innerParams.keydownListenerCapture; | |
| 8184 | + const eventHandler = /** @type {EventListenerOrEventListenerObject} */ /** @type {unknown} */handler; | |
| 8185 | + globalState.keydownTarget.addEventListener('keydown', eventHandler, { | |
| 8186 | + capture: globalState.keydownListenerCapture | |
| 1701 | 8187 | }); |
| 1702 | - var cropSize = _this.props.cropSize ? _this.props.cropSize : getCropSize(_this.mediaSize.width, _this.mediaSize.height, _this.containerRect.width, _this.containerRect.height, _this.props.aspect, _this.props.rotation); | |
| 8188 | + globalState.keydownHandlerAdded = true; | |
| 8189 | + } | |
| 8190 | + } | |
| 8191 | + }; | |
| 1703 | 8192 | |
| 1704 | - if (((_e = _this.state.cropSize) === null || _e === void 0 ? void 0 : _e.height) !== cropSize.height || ((_f = _this.state.cropSize) === null || _f === void 0 ? void 0 : _f.width) !== cropSize.width) { | |
| 1705 | - _this.props.onCropSizeChange && _this.props.onCropSizeChange(cropSize); | |
| 1706 | - } | |
| 8193 | + /** | |
| 8194 | + * @param {number} index | |
| 8195 | + * @param {number} increment | |
| 8196 | + */ | |
| 8197 | + const setFocus = (index, increment) => { | |
| 8198 | + var _dom$getPopup; | |
| 8199 | + const focusableElements = getFocusableElements(); | |
| 8200 | + // search for visible elements and select the next possible match | |
| 8201 | + if (focusableElements.length) { | |
| 8202 | + index = index + increment; | |
| 1707 | 8203 | |
| 1708 | - _this.setState({ | |
| 1709 | - cropSize: cropSize | |
| 1710 | - }, _this.recomputeCropPosition); | |
| 8204 | + // shift + tab when .swal2-popup is focused | |
| 8205 | + if (index === -2) { | |
| 8206 | + index = focusableElements.length - 1; | |
| 8207 | + } | |
| 1711 | 8208 | |
| 1712 | - return cropSize; | |
| 8209 | + // rollover to first item | |
| 8210 | + if (index === focusableElements.length) { | |
| 8211 | + index = 0; | |
| 8212 | + | |
| 8213 | + // go to last item | |
| 8214 | + } else if (index === -1) { | |
| 8215 | + index = focusableElements.length - 1; | |
| 1713 | 8216 | } |
| 1714 | - }; | |
| 8217 | + focusableElements[index].focus(); | |
| 8218 | + return; | |
| 8219 | + } | |
| 8220 | + // no visible focusable elements, focus the popup | |
| 8221 | + (_dom$getPopup = getPopup()) === null || _dom$getPopup === void 0 || _dom$getPopup.focus(); | |
| 8222 | + }; | |
| 8223 | + const arrowKeysNextButton = ['ArrowRight', 'ArrowDown']; | |
| 8224 | + const arrowKeysPreviousButton = ['ArrowLeft', 'ArrowUp']; | |
| 1715 | 8225 | |
| 1716 | - _this.onMouseDown = function (e) { | |
| 1717 | - e.preventDefault(); | |
| 1718 | - document.addEventListener('mousemove', _this.onMouseMove); | |
| 1719 | - document.addEventListener('mouseup', _this.onDragStopped); | |
| 8226 | + /** | |
| 8227 | + * @param {SweetAlertOptions} innerParams | |
| 8228 | + * @param {KeyboardEvent} event | |
| 8229 | + * @param {(dismiss: DismissReason) => void} dismissWith | |
| 8230 | + */ | |
| 8231 | + const keydownHandler = (innerParams, event, dismissWith) => { | |
| 8232 | + if (!innerParams) { | |
| 8233 | + return; // This instance has already been destroyed | |
| 8234 | + } | |
| 1720 | 8235 | |
| 1721 | - _this.onDragStart(Cropper.getMousePoint(e)); | |
| 1722 | - }; | |
| 8236 | + // Ignore keydown during IME composition | |
| 8237 | + // https://developer.mozilla.org/en-US/docs/Web/API/Document/keydown_event#ignoring_keydown_during_ime_composition | |
| 8238 | + // https://github.com/sweetalert2/sweetalert2/issues/720 | |
| 8239 | + // https://github.com/sweetalert2/sweetalert2/issues/2406 | |
| 8240 | + if (event.isComposing || event.keyCode === 229) { | |
| 8241 | + return; | |
| 8242 | + } | |
| 8243 | + if (innerParams.stopKeydownPropagation) { | |
| 8244 | + event.stopPropagation(); | |
| 8245 | + } | |
| 1723 | 8246 | |
| 1724 | - _this.onMouseMove = function (e) { | |
| 1725 | - return _this.onDrag(Cropper.getMousePoint(e)); | |
| 1726 | - }; | |
| 8247 | + // ENTER | |
| 8248 | + if (event.key === 'Enter') { | |
| 8249 | + handleEnter(event, innerParams); | |
| 8250 | + } | |
| 1727 | 8251 | |
| 1728 | - _this.onTouchStart = function (e) { | |
| 1729 | - if (_this.props.onTouchRequest && !_this.props.onTouchRequest(e)) { | |
| 8252 | + // TAB | |
| 8253 | + else if (event.key === 'Tab') { | |
| 8254 | + handleTab(event); | |
| 8255 | + } | |
| 8256 | + | |
| 8257 | + // ARROWS - switch focus between buttons | |
| 8258 | + else if ([...arrowKeysNextButton, ...arrowKeysPreviousButton].includes(event.key)) { | |
| 8259 | + handleArrows(event.key); | |
| 8260 | + } | |
| 8261 | + | |
| 8262 | + // ESC | |
| 8263 | + else if (event.key === 'Escape') { | |
| 8264 | + handleEsc(event, innerParams, dismissWith); | |
| 8265 | + } | |
| 8266 | + }; | |
| 8267 | + | |
| 8268 | + /** | |
| 8269 | + * @param {KeyboardEvent} event | |
| 8270 | + * @param {SweetAlertOptions} innerParams | |
| 8271 | + */ | |
| 8272 | + const handleEnter = (event, innerParams) => { | |
| 8273 | + // https://github.com/sweetalert2/sweetalert2/issues/2386 | |
| 8274 | + if (!callIfFunction(innerParams.allowEnterKey)) { | |
| 8275 | + return; | |
| 8276 | + } | |
| 8277 | + const popup = getPopup(); | |
| 8278 | + if (!popup || !innerParams.input) { | |
| 8279 | + return; | |
| 8280 | + } | |
| 8281 | + const input = getInput$1(popup, innerParams.input); | |
| 8282 | + if (event.target && input && event.target instanceof HTMLElement && event.target.outerHTML === input.outerHTML) { | |
| 8283 | + if (['textarea', 'file'].includes(innerParams.input)) { | |
| 8284 | + return; // do not submit | |
| 8285 | + } | |
| 8286 | + clickConfirm(); | |
| 8287 | + event.preventDefault(); | |
| 8288 | + } | |
| 8289 | + }; | |
| 8290 | + | |
| 8291 | + /** | |
| 8292 | + * @param {KeyboardEvent} event | |
| 8293 | + */ | |
| 8294 | + const handleTab = event => { | |
| 8295 | + const targetElement = event.target; | |
| 8296 | + const focusableElements = getFocusableElements(); | |
| 8297 | + let btnIndex = -1; | |
| 8298 | + for (let i = 0; i < focusableElements.length; i++) { | |
| 8299 | + if (targetElement === focusableElements[i]) { | |
| 8300 | + btnIndex = i; | |
| 8301 | + break; | |
| 8302 | + } | |
| 8303 | + } | |
| 8304 | + | |
| 8305 | + // Cycle to the next button | |
| 8306 | + if (!event.shiftKey) { | |
| 8307 | + setFocus(btnIndex, 1); | |
| 8308 | + } | |
| 8309 | + | |
| 8310 | + // Cycle to the prev button | |
| 8311 | + else { | |
| 8312 | + setFocus(btnIndex, -1); | |
| 8313 | + } | |
| 8314 | + event.stopPropagation(); | |
| 8315 | + event.preventDefault(); | |
| 8316 | + }; | |
| 8317 | + | |
| 8318 | + /** | |
| 8319 | + * @param {string} key | |
| 8320 | + */ | |
| 8321 | + const handleArrows = key => { | |
| 8322 | + const actions = getActions(); | |
| 8323 | + const confirmButton = getConfirmButton(); | |
| 8324 | + const denyButton = getDenyButton(); | |
| 8325 | + const cancelButton = getCancelButton(); | |
| 8326 | + if (!actions || !confirmButton || !denyButton || !cancelButton) { | |
| 8327 | + return; | |
| 8328 | + } | |
| 8329 | + /** @type HTMLElement[] */ | |
| 8330 | + const buttons = [confirmButton, denyButton, cancelButton]; | |
| 8331 | + if (document.activeElement instanceof HTMLElement && !buttons.includes(document.activeElement)) { | |
| 8332 | + return; | |
| 8333 | + } | |
| 8334 | + const sibling = arrowKeysNextButton.includes(key) ? 'nextElementSibling' : 'previousElementSibling'; | |
| 8335 | + let buttonToFocus = document.activeElement; | |
| 8336 | + if (!buttonToFocus) { | |
| 8337 | + return; | |
| 8338 | + } | |
| 8339 | + for (let i = 0; i < actions.children.length; i++) { | |
| 8340 | + buttonToFocus = buttonToFocus[sibling]; | |
| 8341 | + if (!buttonToFocus) { | |
| 1730 | 8342 | return; |
| 1731 | 8343 | } |
| 8344 | + if (buttonToFocus instanceof HTMLButtonElement && isVisible$1(buttonToFocus)) { | |
| 8345 | + break; | |
| 8346 | + } | |
| 8347 | + } | |
| 8348 | + if (buttonToFocus instanceof HTMLButtonElement) { | |
| 8349 | + buttonToFocus.focus(); | |
| 8350 | + } | |
| 8351 | + }; | |
| 1732 | 8352 | |
| 1733 | - document.addEventListener('touchmove', _this.onTouchMove, { | |
| 1734 | - passive: false | |
| 1735 | - }); // iOS 11 now defaults to passive: true | |
| 8353 | + /** | |
| 8354 | + * @param {KeyboardEvent} event | |
| 8355 | + * @param {SweetAlertOptions} innerParams | |
| 8356 | + * @param {(dismiss: DismissReason) => void} dismissWith | |
| 8357 | + */ | |
| 8358 | + const handleEsc = (event, innerParams, dismissWith) => { | |
| 8359 | + event.preventDefault(); | |
| 8360 | + if (callIfFunction(innerParams.allowEscapeKey)) { | |
| 8361 | + dismissWith(DismissReason.esc); | |
| 8362 | + } | |
| 8363 | + }; | |
| 1736 | 8364 | |
| 1737 | - document.addEventListener('touchend', _this.onDragStopped); | |
| 8365 | + /** | |
| 8366 | + * This module contains `WeakMap`s for each effectively-"private property" that a `Swal` has. | |
| 8367 | + * For example, to set the private property "foo" of `this` to "bar", you can `privateProps.foo.set(this, 'bar')` | |
| 8368 | + * This is the approach that Babel will probably take to implement private methods/fields | |
| 8369 | + * https://github.com/tc39/proposal-private-methods | |
| 8370 | + * https://github.com/babel/babel/pull/7555 | |
| 8371 | + * Once we have the changes from that PR in Babel, and our core class fits reasonable in *one module* | |
| 8372 | + * then we can use that language feature. | |
| 8373 | + */ | |
| 1738 | 8374 | |
| 1739 | - if (e.touches.length === 2) { | |
| 1740 | - _this.onPinchStart(e); | |
| 1741 | - } else if (e.touches.length === 1) { | |
| 1742 | - _this.onDragStart(Cropper.getTouchPoint(e.touches[0])); | |
| 8375 | + var privateMethods = { | |
| 8376 | + swalPromiseResolve: new WeakMap(), | |
| 8377 | + swalPromiseReject: new WeakMap() | |
| 8378 | + }; | |
| 8379 | + | |
| 8380 | + // From https://developer.paciellogroup.com/blog/2018/06/the-current-state-of-modal-dialog-accessibility/ | |
| 8381 | + // Adding aria-hidden="true" to elements outside of the active modal dialog ensures that | |
| 8382 | + // elements not within the active modal dialog will not be surfaced if a user opens a screen | |
| 8383 | + // reader’s list of elements (headings, form controls, landmarks, etc.) in the document. | |
| 8384 | + | |
| 8385 | + const setAriaHidden = () => { | |
| 8386 | + const container = getContainer(); | |
| 8387 | + const bodyChildren = Array.from(document.body.children); | |
| 8388 | + bodyChildren.forEach(el => { | |
| 8389 | + if (el.contains(container)) { | |
| 8390 | + return; | |
| 1743 | 8391 | } |
| 8392 | + if (el.hasAttribute('aria-hidden')) { | |
| 8393 | + el.setAttribute('data-previous-aria-hidden', el.getAttribute('aria-hidden') || ''); | |
| 8394 | + } | |
| 8395 | + el.setAttribute('aria-hidden', 'true'); | |
| 8396 | + }); | |
| 8397 | + }; | |
| 8398 | + const unsetAriaHidden = () => { | |
| 8399 | + const bodyChildren = Array.from(document.body.children); | |
| 8400 | + bodyChildren.forEach(el => { | |
| 8401 | + if (el.hasAttribute('data-previous-aria-hidden')) { | |
| 8402 | + el.setAttribute('aria-hidden', el.getAttribute('data-previous-aria-hidden') || ''); | |
| 8403 | + el.removeAttribute('data-previous-aria-hidden'); | |
| 8404 | + } else { | |
| 8405 | + el.removeAttribute('aria-hidden'); | |
| 8406 | + } | |
| 8407 | + }); | |
| 8408 | + }; | |
| 8409 | + | |
| 8410 | + // @ts-ignore | |
| 8411 | + const isSafariOrIOS = typeof window !== 'undefined' && Boolean(window.GestureEvent); // true for Safari desktop + all iOS browsers https://stackoverflow.com/a/70585394 | |
| 8412 | + | |
| 8413 | + /** | |
| 8414 | + * Fix iOS scrolling | |
| 8415 | + * http://stackoverflow.com/q/39626302 | |
| 8416 | + */ | |
| 8417 | + const iOSfix = () => { | |
| 8418 | + if (isSafariOrIOS && !hasClass(document.body, swalClasses.iosfix)) { | |
| 8419 | + const offset = document.body.scrollTop; | |
| 8420 | + document.body.style.top = `${offset * -1}px`; | |
| 8421 | + addClass(document.body, swalClasses.iosfix); | |
| 8422 | + lockBodyScroll(); | |
| 8423 | + } | |
| 8424 | + }; | |
| 8425 | + | |
| 8426 | + /** | |
| 8427 | + * https://github.com/sweetalert2/sweetalert2/issues/1246 | |
| 8428 | + */ | |
| 8429 | + const lockBodyScroll = () => { | |
| 8430 | + const container = getContainer(); | |
| 8431 | + if (!container) { | |
| 8432 | + return; | |
| 8433 | + } | |
| 8434 | + /** @type {boolean} */ | |
| 8435 | + let preventTouchMove; | |
| 8436 | + /** | |
| 8437 | + * @param {TouchEvent} event | |
| 8438 | + */ | |
| 8439 | + container.ontouchstart = event => { | |
| 8440 | + preventTouchMove = shouldPreventTouchMove(event); | |
| 1744 | 8441 | }; |
| 8442 | + /** | |
| 8443 | + * @param {TouchEvent} event | |
| 8444 | + */ | |
| 8445 | + container.ontouchmove = event => { | |
| 8446 | + if (preventTouchMove) { | |
| 8447 | + event.preventDefault(); | |
| 8448 | + event.stopPropagation(); | |
| 8449 | + } | |
| 8450 | + }; | |
| 8451 | + }; | |
| 1745 | 8452 | |
| 1746 | - _this.onTouchMove = function (e) { | |
| 1747 | - // Prevent whole page from scrolling on iOS. | |
| 1748 | - e.preventDefault(); | |
| 8453 | + /** | |
| 8454 | + * @param {TouchEvent} event | |
| 8455 | + * @returns {boolean} | |
| 8456 | + */ | |
| 8457 | + const shouldPreventTouchMove = event => { | |
| 8458 | + const target = event.target; | |
| 8459 | + const container = getContainer(); | |
| 8460 | + const htmlContainer = getHtmlContainer(); | |
| 8461 | + if (!container || !htmlContainer) { | |
| 8462 | + return false; | |
| 8463 | + } | |
| 8464 | + if (isStylus(event) || isZoom(event)) { | |
| 8465 | + return false; | |
| 8466 | + } | |
| 8467 | + if (target === container) { | |
| 8468 | + return true; | |
| 8469 | + } | |
| 8470 | + if (!isScrollable(container) && target instanceof HTMLElement && !selfOrParentIsScrollable(target, htmlContainer) && | |
| 8471 | + // #2823 | |
| 8472 | + target.tagName !== 'INPUT' && | |
| 8473 | + // #1603 | |
| 8474 | + target.tagName !== 'TEXTAREA' && | |
| 8475 | + // #2266 | |
| 8476 | + !(isScrollable(htmlContainer) && | |
| 8477 | + // #1944 | |
| 8478 | + htmlContainer.contains(target))) { | |
| 8479 | + return true; | |
| 8480 | + } | |
| 8481 | + return false; | |
| 8482 | + }; | |
| 1749 | 8483 | |
| 1750 | - if (e.touches.length === 2) { | |
| 1751 | - _this.onPinchMove(e); | |
| 1752 | - } else if (e.touches.length === 1) { | |
| 1753 | - _this.onDrag(Cropper.getTouchPoint(e.touches[0])); | |
| 8484 | + /** | |
| 8485 | + * https://github.com/sweetalert2/sweetalert2/issues/1786 | |
| 8486 | + * | |
| 8487 | + * @param {TouchEvent} event | |
| 8488 | + * @returns {boolean} | |
| 8489 | + */ | |
| 8490 | + const isStylus = event => { | |
| 8491 | + return Boolean(event.touches && event.touches.length && | |
| 8492 | + // @ts-ignore - touchType is not a standard property | |
| 8493 | + event.touches[0].touchType === 'stylus'); | |
| 8494 | + }; | |
| 8495 | + | |
| 8496 | + /** | |
| 8497 | + * https://github.com/sweetalert2/sweetalert2/issues/1891 | |
| 8498 | + * | |
| 8499 | + * @param {TouchEvent} event | |
| 8500 | + * @returns {boolean} | |
| 8501 | + */ | |
| 8502 | + const isZoom = event => { | |
| 8503 | + return event.touches && event.touches.length > 1; | |
| 8504 | + }; | |
| 8505 | + const undoIOSfix = () => { | |
| 8506 | + if (hasClass(document.body, swalClasses.iosfix)) { | |
| 8507 | + const offset = parseInt(document.body.style.top, 10); | |
| 8508 | + removeClass(document.body, swalClasses.iosfix); | |
| 8509 | + document.body.style.top = ''; | |
| 8510 | + document.body.scrollTop = offset * -1; | |
| 8511 | + } | |
| 8512 | + }; | |
| 8513 | + | |
| 8514 | + /** | |
| 8515 | + * Measure scrollbar width for padding body during modal show/hide | |
| 8516 | + * https://github.com/twbs/bootstrap/blob/master/js/src/modal.js | |
| 8517 | + * | |
| 8518 | + * @returns {number} | |
| 8519 | + */ | |
| 8520 | + const measureScrollbar = () => { | |
| 8521 | + const scrollDiv = document.createElement('div'); | |
| 8522 | + scrollDiv.className = swalClasses['scrollbar-measure']; | |
| 8523 | + document.body.appendChild(scrollDiv); | |
| 8524 | + const scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth; | |
| 8525 | + document.body.removeChild(scrollDiv); | |
| 8526 | + return scrollbarWidth; | |
| 8527 | + }; | |
| 8528 | + | |
| 8529 | + /** | |
| 8530 | + * Remember state in cases where opening and handling a modal will fiddle with it. | |
| 8531 | + * @type {number | null} | |
| 8532 | + */ | |
| 8533 | + let previousBodyPadding = null; | |
| 8534 | + | |
| 8535 | + /** | |
| 8536 | + * @param {string} initialBodyOverflow | |
| 8537 | + */ | |
| 8538 | + const replaceScrollbarWithPadding = initialBodyOverflow => { | |
| 8539 | + // for queues, do not do this more than once | |
| 8540 | + if (previousBodyPadding !== null) { | |
| 8541 | + return; | |
| 8542 | + } | |
| 8543 | + // if the body has overflow | |
| 8544 | + if (document.body.scrollHeight > window.innerHeight || initialBodyOverflow === 'scroll' // https://github.com/sweetalert2/sweetalert2/issues/2663 | |
| 8545 | + ) { | |
| 8546 | + // add padding so the content doesn't shift after removal of scrollbar | |
| 8547 | + previousBodyPadding = parseInt(window.getComputedStyle(document.body).getPropertyValue('padding-right')); | |
| 8548 | + document.body.style.paddingRight = `${previousBodyPadding + measureScrollbar()}px`; | |
| 8549 | + } | |
| 8550 | + }; | |
| 8551 | + const undoReplaceScrollbarWithPadding = () => { | |
| 8552 | + if (previousBodyPadding !== null) { | |
| 8553 | + document.body.style.paddingRight = `${previousBodyPadding}px`; | |
| 8554 | + previousBodyPadding = null; | |
| 8555 | + } | |
| 8556 | + }; | |
| 8557 | + | |
| 8558 | + /** | |
| 8559 | + * @param {SweetAlert} instance | |
| 8560 | + * @param {HTMLElement} container | |
| 8561 | + * @param {boolean} returnFocus | |
| 8562 | + * @param {(() => void) | undefined} didClose | |
| 8563 | + */ | |
| 8564 | + function removePopupAndResetState(instance, container, returnFocus, didClose) { | |
| 8565 | + if (isToast()) { | |
| 8566 | + triggerDidCloseAndDispose(instance, didClose); | |
| 8567 | + } else { | |
| 8568 | + restoreActiveElement(returnFocus).then(() => triggerDidCloseAndDispose(instance, didClose)); | |
| 8569 | + removeKeydownHandler(globalState); | |
| 8570 | + } | |
| 8571 | + | |
| 8572 | + // workaround for https://github.com/sweetalert2/sweetalert2/issues/2088 | |
| 8573 | + // for some reason removing the container in Safari will scroll the document to bottom | |
| 8574 | + if (isSafariOrIOS) { | |
| 8575 | + container.setAttribute('style', 'display:none !important'); | |
| 8576 | + container.removeAttribute('class'); | |
| 8577 | + container.innerHTML = ''; | |
| 8578 | + } else { | |
| 8579 | + container.remove(); | |
| 8580 | + } | |
| 8581 | + if (isModal()) { | |
| 8582 | + undoReplaceScrollbarWithPadding(); | |
| 8583 | + undoIOSfix(); | |
| 8584 | + unsetAriaHidden(); | |
| 8585 | + } | |
| 8586 | + removeBodyClasses(); | |
| 8587 | + } | |
| 8588 | + | |
| 8589 | + /** | |
| 8590 | + * Remove SweetAlert2 classes from body | |
| 8591 | + */ | |
| 8592 | + function removeBodyClasses() { | |
| 8593 | + removeClass([document.documentElement, document.body], [swalClasses.shown, swalClasses['height-auto'], swalClasses['no-backdrop'], swalClasses['toast-shown']]); | |
| 8594 | + } | |
| 8595 | + | |
| 8596 | + /** | |
| 8597 | + * Instance method to close sweetAlert | |
| 8598 | + * | |
| 8599 | + * @param {SweetAlertResult | undefined} resolveValue | |
| 8600 | + * @this {SweetAlert} | |
| 8601 | + */ | |
| 8602 | + function close(resolveValue) { | |
| 8603 | + resolveValue = prepareResolveValue(resolveValue); | |
| 8604 | + const swalPromiseResolve = privateMethods.swalPromiseResolve.get(this); | |
| 8605 | + const didClose = triggerClosePopup(this); | |
| 8606 | + if (this.isAwaitingPromise) { | |
| 8607 | + // A swal awaiting for a promise (after a click on Confirm or Deny) cannot be dismissed anymore #2335 | |
| 8608 | + if (!resolveValue.isDismissed) { | |
| 8609 | + handleAwaitingPromise(this); | |
| 8610 | + swalPromiseResolve(resolveValue); | |
| 1754 | 8611 | } |
| 1755 | - }; | |
| 8612 | + } else if (didClose) { | |
| 8613 | + // Resolve Swal promise | |
| 8614 | + swalPromiseResolve(resolveValue); | |
| 8615 | + } | |
| 8616 | + } | |
| 1756 | 8617 | |
| 1757 | - _this.onDragStart = function (_a) { | |
| 1758 | - var _b, _c; | |
| 8618 | + /** | |
| 8619 | + * @param {SweetAlert} instance | |
| 8620 | + * @returns {boolean} | |
| 8621 | + */ | |
| 8622 | + const triggerClosePopup = instance => { | |
| 8623 | + const popup = getPopup(); | |
| 8624 | + if (!popup) { | |
| 8625 | + return false; | |
| 8626 | + } | |
| 8627 | + const innerParams = privateProps.innerParams.get(instance); | |
| 8628 | + if (!innerParams || hasClass(popup, innerParams.hideClass.popup)) { | |
| 8629 | + return false; | |
| 8630 | + } | |
| 8631 | + removeClass(popup, innerParams.showClass.popup); | |
| 8632 | + addClass(popup, innerParams.hideClass.popup); | |
| 8633 | + const backdrop = getContainer(); | |
| 8634 | + removeClass(backdrop, innerParams.showClass.backdrop); | |
| 8635 | + addClass(backdrop, innerParams.hideClass.backdrop); | |
| 8636 | + handlePopupAnimation(instance, popup, innerParams); | |
| 8637 | + return true; | |
| 8638 | + }; | |
| 1759 | 8639 | |
| 1760 | - var x = _a.x, | |
| 1761 | - y = _a.y; | |
| 1762 | - _this.dragStartPosition = { | |
| 1763 | - x: x, | |
| 1764 | - y: y | |
| 8640 | + /** | |
| 8641 | + * @param {Error | string} error | |
| 8642 | + * @this {SweetAlert} | |
| 8643 | + */ | |
| 8644 | + function rejectPromise(error) { | |
| 8645 | + const rejectPromise = privateMethods.swalPromiseReject.get(this); | |
| 8646 | + handleAwaitingPromise(this); | |
| 8647 | + if (rejectPromise) { | |
| 8648 | + // Reject Swal promise | |
| 8649 | + rejectPromise(error); | |
| 8650 | + } | |
| 8651 | + } | |
| 8652 | + | |
| 8653 | + /** | |
| 8654 | + * @param {SweetAlert} instance | |
| 8655 | + */ | |
| 8656 | + const handleAwaitingPromise = instance => { | |
| 8657 | + if (instance.isAwaitingPromise) { | |
| 8658 | + // @ts-ignore | |
| 8659 | + delete instance.isAwaitingPromise; | |
| 8660 | + // The instance might have been previously partly destroyed, we must resume the destroy process in this case #2335 | |
| 8661 | + if (!privateProps.innerParams.get(instance)) { | |
| 8662 | + instance._destroy(); | |
| 8663 | + } | |
| 8664 | + } | |
| 8665 | + }; | |
| 8666 | + | |
| 8667 | + /** | |
| 8668 | + * @param {SweetAlertResult | undefined} resolveValue | |
| 8669 | + * @returns {SweetAlertResult} | |
| 8670 | + */ | |
| 8671 | + const prepareResolveValue = resolveValue => { | |
| 8672 | + // When user calls Swal.close() | |
| 8673 | + if (typeof resolveValue === 'undefined') { | |
| 8674 | + return { | |
| 8675 | + isConfirmed: false, | |
| 8676 | + isDenied: false, | |
| 8677 | + isDismissed: true | |
| 1765 | 8678 | }; |
| 1766 | - _this.dragStartCrop = (0,tslib__WEBPACK_IMPORTED_MODULE_2__.__assign)({}, _this.props.crop); | |
| 1767 | - (_c = (_b = _this.props).onInteractionStart) === null || _c === void 0 ? void 0 : _c.call(_b); | |
| 8679 | + } | |
| 8680 | + return Object.assign({ | |
| 8681 | + isConfirmed: false, | |
| 8682 | + isDenied: false, | |
| 8683 | + isDismissed: false | |
| 8684 | + }, resolveValue); | |
| 8685 | + }; | |
| 8686 | + | |
| 8687 | + /** | |
| 8688 | + * @param {SweetAlert} instance | |
| 8689 | + * @param {HTMLElement} popup | |
| 8690 | + * @param {SweetAlertOptions} innerParams | |
| 8691 | + */ | |
| 8692 | + const handlePopupAnimation = (instance, popup, innerParams) => { | |
| 8693 | + var _globalState$eventEmi; | |
| 8694 | + const container = getContainer(); | |
| 8695 | + // If animation is supported, animate | |
| 8696 | + const animationIsSupported = hasCssAnimation(popup); | |
| 8697 | + if (typeof innerParams.willClose === 'function') { | |
| 8698 | + innerParams.willClose(popup); | |
| 8699 | + } | |
| 8700 | + (_globalState$eventEmi = globalState.eventEmitter) === null || _globalState$eventEmi === void 0 || _globalState$eventEmi.emit('willClose', popup); | |
| 8701 | + if (animationIsSupported && container) { | |
| 8702 | + animatePopup(instance, popup, container, Boolean(innerParams.returnFocus), innerParams.didClose); | |
| 8703 | + } else if (container) { | |
| 8704 | + // Otherwise, remove immediately | |
| 8705 | + removePopupAndResetState(instance, container, Boolean(innerParams.returnFocus), innerParams.didClose); | |
| 8706 | + } | |
| 8707 | + }; | |
| 8708 | + | |
| 8709 | + /** | |
| 8710 | + * @param {SweetAlert} instance | |
| 8711 | + * @param {HTMLElement} popup | |
| 8712 | + * @param {HTMLElement} container | |
| 8713 | + * @param {boolean} returnFocus | |
| 8714 | + * @param {(() => void) | undefined} didClose | |
| 8715 | + */ | |
| 8716 | + const animatePopup = (instance, popup, container, returnFocus, didClose) => { | |
| 8717 | + globalState.swalCloseEventFinishedCallback = removePopupAndResetState.bind(null, instance, container, returnFocus, didClose); | |
| 8718 | + /** | |
| 8719 | + * @param {AnimationEvent | TransitionEvent} e | |
| 8720 | + */ | |
| 8721 | + const swalCloseAnimationFinished = function (e) { | |
| 8722 | + if (e.target === popup) { | |
| 8723 | + var _globalState$swalClos; | |
| 8724 | + (_globalState$swalClos = globalState.swalCloseEventFinishedCallback) === null || _globalState$swalClos === void 0 || _globalState$swalClos.call(globalState); | |
| 8725 | + delete globalState.swalCloseEventFinishedCallback; | |
| 8726 | + popup.removeEventListener('animationend', swalCloseAnimationFinished); | |
| 8727 | + popup.removeEventListener('transitionend', swalCloseAnimationFinished); | |
| 8728 | + } | |
| 1768 | 8729 | }; |
| 8730 | + popup.addEventListener('animationend', swalCloseAnimationFinished); | |
| 8731 | + popup.addEventListener('transitionend', swalCloseAnimationFinished); | |
| 8732 | + }; | |
| 1769 | 8733 | |
| 1770 | - _this.onDrag = function (_a) { | |
| 1771 | - var x = _a.x, | |
| 1772 | - y = _a.y; | |
| 1773 | - if (_this.rafDragTimeout) window.cancelAnimationFrame(_this.rafDragTimeout); | |
| 1774 | - _this.rafDragTimeout = window.requestAnimationFrame(function () { | |
| 1775 | - if (!_this.state.cropSize) return; | |
| 1776 | - if (x === undefined || y === undefined) return; | |
| 1777 | - var offsetX = x - _this.dragStartPosition.x; | |
| 1778 | - var offsetY = y - _this.dragStartPosition.y; | |
| 1779 | - var requestedPosition = { | |
| 1780 | - x: _this.dragStartCrop.x + offsetX, | |
| 1781 | - y: _this.dragStartCrop.y + offsetY | |
| 1782 | - }; | |
| 1783 | - var newPosition = _this.props.restrictPosition ? restrictPosition(requestedPosition, _this.mediaSize, _this.state.cropSize, _this.props.zoom, _this.props.rotation) : requestedPosition; | |
| 8734 | + /** | |
| 8735 | + * @param {SweetAlert} instance | |
| 8736 | + * @param {(() => void) | undefined} didClose | |
| 8737 | + */ | |
| 8738 | + const triggerDidCloseAndDispose = (instance, didClose) => { | |
| 8739 | + setTimeout(() => { | |
| 8740 | + var _globalState$eventEmi2; | |
| 8741 | + if (typeof didClose === 'function') { | |
| 8742 | + didClose.bind(instance.params)(); | |
| 8743 | + } | |
| 8744 | + (_globalState$eventEmi2 = globalState.eventEmitter) === null || _globalState$eventEmi2 === void 0 || _globalState$eventEmi2.emit('didClose'); | |
| 8745 | + // instance might have been destroyed already | |
| 8746 | + if (instance._destroy) { | |
| 8747 | + instance._destroy(); | |
| 8748 | + } | |
| 8749 | + }); | |
| 8750 | + }; | |
| 1784 | 8751 | |
| 1785 | - _this.props.onCropChange(newPosition); | |
| 8752 | + /** | |
| 8753 | + * Shows loader (spinner), this is useful with AJAX requests. | |
| 8754 | + * By default the loader be shown instead of the "Confirm" button. | |
| 8755 | + * | |
| 8756 | + * @param {HTMLButtonElement | null} [buttonToReplace] | |
| 8757 | + */ | |
| 8758 | + const showLoading = buttonToReplace => { | |
| 8759 | + let popup = getPopup(); | |
| 8760 | + if (!popup) { | |
| 8761 | + new Swal(); | |
| 8762 | + } | |
| 8763 | + popup = getPopup(); | |
| 8764 | + if (!popup) { | |
| 8765 | + return; | |
| 8766 | + } | |
| 8767 | + const loader = getLoader(); | |
| 8768 | + if (isToast()) { | |
| 8769 | + hide(getIcon()); | |
| 8770 | + } else { | |
| 8771 | + replaceButton(popup, buttonToReplace); | |
| 8772 | + } | |
| 8773 | + show(loader); | |
| 8774 | + popup.setAttribute('data-loading', 'true'); | |
| 8775 | + popup.setAttribute('aria-busy', 'true'); | |
| 8776 | + popup.focus(); | |
| 8777 | + }; | |
| 8778 | + | |
| 8779 | + /** | |
| 8780 | + * @param {HTMLElement} popup | |
| 8781 | + * @param {HTMLButtonElement | null} [buttonToReplace] | |
| 8782 | + */ | |
| 8783 | + const replaceButton = (popup, buttonToReplace) => { | |
| 8784 | + const actions = getActions(); | |
| 8785 | + const loader = getLoader(); | |
| 8786 | + if (!actions || !loader) { | |
| 8787 | + return; | |
| 8788 | + } | |
| 8789 | + if (!buttonToReplace && isVisible$1(getConfirmButton())) { | |
| 8790 | + buttonToReplace = getConfirmButton(); | |
| 8791 | + } | |
| 8792 | + show(actions); | |
| 8793 | + if (buttonToReplace) { | |
| 8794 | + hide(buttonToReplace); | |
| 8795 | + loader.setAttribute('data-button-to-replace', buttonToReplace.className); | |
| 8796 | + actions.insertBefore(loader, buttonToReplace); | |
| 8797 | + } | |
| 8798 | + addClass([popup, actions], swalClasses.loading); | |
| 8799 | + }; | |
| 8800 | + | |
| 8801 | + /** | |
| 8802 | + * @param {SweetAlert} instance | |
| 8803 | + * @param {SweetAlertOptions} params | |
| 8804 | + */ | |
| 8805 | + const handleInputOptionsAndValue = (instance, params) => { | |
| 8806 | + if (params.input === 'select' || params.input === 'radio') { | |
| 8807 | + handleInputOptions(instance, params); | |
| 8808 | + } else if (['text', 'email', 'number', 'tel', 'textarea'].some(i => i === params.input) && (hasToPromiseFn(params.inputValue) || isPromise(params.inputValue))) { | |
| 8809 | + showLoading(getConfirmButton()); | |
| 8810 | + handleInputValue(instance, params); | |
| 8811 | + } | |
| 8812 | + }; | |
| 8813 | + | |
| 8814 | + /** | |
| 8815 | + * @param {SweetAlert} instance | |
| 8816 | + * @param {SweetAlertOptions} innerParams | |
| 8817 | + * @returns {SweetAlertInputValue} | |
| 8818 | + */ | |
| 8819 | + const getInputValue = (instance, innerParams) => { | |
| 8820 | + const input = instance.getInput(); | |
| 8821 | + if (!input) { | |
| 8822 | + return null; | |
| 8823 | + } | |
| 8824 | + switch (innerParams.input) { | |
| 8825 | + case 'checkbox': | |
| 8826 | + return getCheckboxValue(input); | |
| 8827 | + case 'radio': | |
| 8828 | + return getRadioValue(input); | |
| 8829 | + case 'file': | |
| 8830 | + return getFileValue(input); | |
| 8831 | + default: | |
| 8832 | + return innerParams.inputAutoTrim ? input.value.trim() : input.value; | |
| 8833 | + } | |
| 8834 | + }; | |
| 8835 | + | |
| 8836 | + /** | |
| 8837 | + * @param {HTMLInputElement} input | |
| 8838 | + * @returns {number} | |
| 8839 | + */ | |
| 8840 | + const getCheckboxValue = input => input.checked ? 1 : 0; | |
| 8841 | + | |
| 8842 | + /** | |
| 8843 | + * @param {HTMLInputElement} input | |
| 8844 | + * @returns {string | null} | |
| 8845 | + */ | |
| 8846 | + const getRadioValue = input => input.checked ? input.value : null; | |
| 8847 | + | |
| 8848 | + /** | |
| 8849 | + * @param {HTMLInputElement} input | |
| 8850 | + * @returns {FileList | File | null} | |
| 8851 | + */ | |
| 8852 | + const getFileValue = input => input.files && input.files.length ? input.getAttribute('multiple') !== null ? input.files : input.files[0] : null; | |
| 8853 | + | |
| 8854 | + /** | |
| 8855 | + * @param {SweetAlert} instance | |
| 8856 | + * @param {SweetAlertOptions} params | |
| 8857 | + */ | |
| 8858 | + const handleInputOptions = (instance, params) => { | |
| 8859 | + const popup = getPopup(); | |
| 8860 | + if (!popup) { | |
| 8861 | + return; | |
| 8862 | + } | |
| 8863 | + /** | |
| 8864 | + * @param {*} inputOptions | |
| 8865 | + */ | |
| 8866 | + const processInputOptions = inputOptions => { | |
| 8867 | + if (params.input === 'select') { | |
| 8868 | + populateSelectOptions(popup, formatInputOptions(inputOptions), params); | |
| 8869 | + } else if (params.input === 'radio') { | |
| 8870 | + populateRadioOptions(popup, formatInputOptions(inputOptions), params); | |
| 8871 | + } | |
| 8872 | + }; | |
| 8873 | + if (hasToPromiseFn(params.inputOptions) || isPromise(params.inputOptions)) { | |
| 8874 | + showLoading(getConfirmButton()); | |
| 8875 | + asPromise(params.inputOptions).then(inputOptions => { | |
| 8876 | + instance.hideLoading(); | |
| 8877 | + processInputOptions(inputOptions); | |
| 1786 | 8878 | }); |
| 8879 | + } else if (typeof params.inputOptions === 'object') { | |
| 8880 | + processInputOptions(params.inputOptions); | |
| 8881 | + } else { | |
| 8882 | + error(`Unexpected type of inputOptions! Expected object, Map or Promise, got ${typeof params.inputOptions}`); | |
| 8883 | + } | |
| 8884 | + }; | |
| 8885 | + | |
| 8886 | + /** | |
| 8887 | + * @param {SweetAlert} instance | |
| 8888 | + * @param {SweetAlertOptions} params | |
| 8889 | + */ | |
| 8890 | + const handleInputValue = (instance, params) => { | |
| 8891 | + const input = instance.getInput(); | |
| 8892 | + if (!input) { | |
| 8893 | + return; | |
| 8894 | + } | |
| 8895 | + hide(input); | |
| 8896 | + asPromise(params.inputValue).then(inputValue => { | |
| 8897 | + input.value = params.input === 'number' ? `${parseFloat(inputValue) || 0}` : `${inputValue}`; | |
| 8898 | + show(input); | |
| 8899 | + input.focus(); | |
| 8900 | + instance.hideLoading(); | |
| 8901 | + }).catch(err => { | |
| 8902 | + error(`Error in inputValue promise: ${err}`); | |
| 8903 | + input.value = ''; | |
| 8904 | + show(input); | |
| 8905 | + input.focus(); | |
| 8906 | + instance.hideLoading(); | |
| 8907 | + }); | |
| 8908 | + }; | |
| 8909 | + | |
| 8910 | + /** | |
| 8911 | + * @param {HTMLElement} popup | |
| 8912 | + * @param {InputOptionFlattened[]} inputOptions | |
| 8913 | + * @param {SweetAlertOptions} params | |
| 8914 | + */ | |
| 8915 | + function populateSelectOptions(popup, inputOptions, params) { | |
| 8916 | + const select = getDirectChildByClass(popup, swalClasses.select); | |
| 8917 | + if (!select) { | |
| 8918 | + return; | |
| 8919 | + } | |
| 8920 | + /** | |
| 8921 | + * @param {HTMLElement} parent | |
| 8922 | + * @param {string} optionLabel | |
| 8923 | + * @param {string} optionValue | |
| 8924 | + */ | |
| 8925 | + const renderOption = (parent, optionLabel, optionValue) => { | |
| 8926 | + const option = document.createElement('option'); | |
| 8927 | + option.value = optionValue; | |
| 8928 | + setInnerHtml(option, optionLabel); | |
| 8929 | + option.selected = isSelected(optionValue, params.inputValue); | |
| 8930 | + parent.appendChild(option); | |
| 1787 | 8931 | }; |
| 8932 | + inputOptions.forEach(inputOption => { | |
| 8933 | + const optionValue = inputOption[0]; | |
| 8934 | + const optionLabel = inputOption[1]; | |
| 8935 | + // <optgroup> spec: | |
| 8936 | + // https://www.w3.org/TR/html401/interact/forms.html#h-17.6 | |
| 8937 | + // "...all OPTGROUP elements must be specified directly within a SELECT element (i.e., groups may not be nested)..." | |
| 8938 | + // check whether this is a <optgroup> | |
| 8939 | + if (Array.isArray(optionLabel)) { | |
| 8940 | + // if it is an array, then it is an <optgroup> | |
| 8941 | + const optgroup = document.createElement('optgroup'); | |
| 8942 | + optgroup.label = optionValue; | |
| 8943 | + optgroup.disabled = false; // not configurable for now | |
| 8944 | + select.appendChild(optgroup); | |
| 8945 | + optionLabel.forEach(o => renderOption(optgroup, o[1], o[0])); | |
| 8946 | + } else { | |
| 8947 | + // case of <option> | |
| 8948 | + renderOption(select, optionLabel, optionValue); | |
| 8949 | + } | |
| 8950 | + }); | |
| 8951 | + select.focus(); | |
| 8952 | + } | |
| 1788 | 8953 | |
| 1789 | - _this.onDragStopped = function () { | |
| 1790 | - var _a, _b; | |
| 8954 | + /** | |
| 8955 | + * @param {HTMLElement} popup | |
| 8956 | + * @param {InputOptionFlattened[]} inputOptions | |
| 8957 | + * @param {SweetAlertOptions} params | |
| 8958 | + */ | |
| 8959 | + function populateRadioOptions(popup, inputOptions, params) { | |
| 8960 | + const radio = getDirectChildByClass(popup, swalClasses.radio); | |
| 8961 | + if (!radio) { | |
| 8962 | + return; | |
| 8963 | + } | |
| 8964 | + inputOptions.forEach(inputOption => { | |
| 8965 | + const radioValue = inputOption[0]; | |
| 8966 | + const radioLabel = inputOption[1]; | |
| 8967 | + const radioInput = document.createElement('input'); | |
| 8968 | + const radioLabelElement = document.createElement('label'); | |
| 8969 | + radioInput.type = 'radio'; | |
| 8970 | + radioInput.name = swalClasses.radio; | |
| 8971 | + radioInput.value = radioValue; | |
| 8972 | + if (isSelected(radioValue, params.inputValue)) { | |
| 8973 | + radioInput.checked = true; | |
| 8974 | + } | |
| 8975 | + const label = document.createElement('span'); | |
| 8976 | + setInnerHtml(label, radioLabel); | |
| 8977 | + label.className = swalClasses.label; | |
| 8978 | + radioLabelElement.appendChild(radioInput); | |
| 8979 | + radioLabelElement.appendChild(label); | |
| 8980 | + radio.appendChild(radioLabelElement); | |
| 8981 | + }); | |
| 8982 | + const radios = radio.querySelectorAll('input'); | |
| 8983 | + if (radios.length) { | |
| 8984 | + radios[0].focus(); | |
| 8985 | + } | |
| 8986 | + } | |
| 1791 | 8987 | |
| 1792 | - _this.cleanEvents(); | |
| 8988 | + /** | |
| 8989 | + * Converts `inputOptions` into an array of `[value, label]`s | |
| 8990 | + * | |
| 8991 | + * @param {*} inputOptions | |
| 8992 | + * @typedef {string[]} InputOptionFlattened | |
| 8993 | + * @returns {InputOptionFlattened[]} | |
| 8994 | + */ | |
| 8995 | + const formatInputOptions = inputOptions => { | |
| 8996 | + /** @type {InputOptionFlattened[]} */ | |
| 8997 | + const result = []; | |
| 8998 | + if (inputOptions instanceof Map) { | |
| 8999 | + inputOptions.forEach((value, key) => { | |
| 9000 | + let valueFormatted = value; | |
| 9001 | + if (typeof valueFormatted === 'object') { | |
| 9002 | + // case of <optgroup> | |
| 9003 | + valueFormatted = formatInputOptions(valueFormatted); | |
| 9004 | + } | |
| 9005 | + result.push([key, valueFormatted]); | |
| 9006 | + }); | |
| 9007 | + } else { | |
| 9008 | + Object.keys(inputOptions).forEach(key => { | |
| 9009 | + let valueFormatted = inputOptions[key]; | |
| 9010 | + if (typeof valueFormatted === 'object') { | |
| 9011 | + // case of <optgroup> | |
| 9012 | + valueFormatted = formatInputOptions(valueFormatted); | |
| 9013 | + } | |
| 9014 | + result.push([key, valueFormatted]); | |
| 9015 | + }); | |
| 9016 | + } | |
| 9017 | + return result; | |
| 9018 | + }; | |
| 1793 | 9019 | |
| 1794 | - _this.emitCropData(); | |
| 9020 | + /** | |
| 9021 | + * @param {string} optionValue | |
| 9022 | + * @param {SweetAlertInputValue} inputValue | |
| 9023 | + * @returns {boolean} | |
| 9024 | + */ | |
| 9025 | + const isSelected = (optionValue, inputValue) => { | |
| 9026 | + return Boolean(inputValue) && inputValue !== null && inputValue !== undefined && inputValue.toString() === optionValue.toString(); | |
| 9027 | + }; | |
| 1795 | 9028 | |
| 1796 | - (_b = (_a = _this.props).onInteractionEnd) === null || _b === void 0 ? void 0 : _b.call(_a); | |
| 1797 | - }; | |
| 9029 | + /** | |
| 9030 | + * @param {SweetAlert} instance | |
| 9031 | + */ | |
| 9032 | + const handleConfirmButtonClick = instance => { | |
| 9033 | + const innerParams = privateProps.innerParams.get(instance); | |
| 9034 | + instance.disableButtons(); | |
| 9035 | + if (innerParams.input) { | |
| 9036 | + handleConfirmOrDenyWithInput(instance, 'confirm'); | |
| 9037 | + } else { | |
| 9038 | + confirm(instance, true); | |
| 9039 | + } | |
| 9040 | + }; | |
| 1798 | 9041 | |
| 1799 | - _this.onWheel = function (e) { | |
| 1800 | - if (_this.props.onWheelRequest && !_this.props.onWheelRequest(e)) { | |
| 1801 | - return; | |
| 9042 | + /** | |
| 9043 | + * @param {SweetAlert} instance | |
| 9044 | + */ | |
| 9045 | + const handleDenyButtonClick = instance => { | |
| 9046 | + const innerParams = privateProps.innerParams.get(instance); | |
| 9047 | + instance.disableButtons(); | |
| 9048 | + if (innerParams.returnInputValueOnDeny) { | |
| 9049 | + handleConfirmOrDenyWithInput(instance, 'deny'); | |
| 9050 | + } else { | |
| 9051 | + deny(instance, false); | |
| 9052 | + } | |
| 9053 | + }; | |
| 9054 | + | |
| 9055 | + /** | |
| 9056 | + * @param {SweetAlert} instance | |
| 9057 | + * @param {(dismiss: DismissReason) => void} dismissWith | |
| 9058 | + */ | |
| 9059 | + const handleCancelButtonClick = (instance, dismissWith) => { | |
| 9060 | + instance.disableButtons(); | |
| 9061 | + dismissWith(DismissReason.cancel); | |
| 9062 | + }; | |
| 9063 | + | |
| 9064 | + /** | |
| 9065 | + * @param {SweetAlert} instance | |
| 9066 | + * @param {'confirm' | 'deny'} type | |
| 9067 | + */ | |
| 9068 | + const handleConfirmOrDenyWithInput = (instance, type) => { | |
| 9069 | + const innerParams = privateProps.innerParams.get(instance); | |
| 9070 | + if (!innerParams.input) { | |
| 9071 | + error(`The "input" parameter is needed to be set when using returnInputValueOn${capitalizeFirstLetter(type)}`); | |
| 9072 | + return; | |
| 9073 | + } | |
| 9074 | + const input = instance.getInput(); | |
| 9075 | + const inputValue = getInputValue(instance, innerParams); | |
| 9076 | + if (innerParams.inputValidator) { | |
| 9077 | + handleInputValidator(instance, inputValue, type); | |
| 9078 | + } else if (input && !input.checkValidity()) { | |
| 9079 | + instance.enableButtons(); | |
| 9080 | + instance.showValidationMessage(innerParams.validationMessage || input.validationMessage); | |
| 9081 | + } else if (type === 'deny') { | |
| 9082 | + deny(instance, inputValue); | |
| 9083 | + } else { | |
| 9084 | + confirm(instance, inputValue); | |
| 9085 | + } | |
| 9086 | + }; | |
| 9087 | + | |
| 9088 | + /** | |
| 9089 | + * @param {SweetAlert} instance | |
| 9090 | + * @param {SweetAlertInputValue} inputValue | |
| 9091 | + * @param {'confirm' | 'deny'} type | |
| 9092 | + */ | |
| 9093 | + const handleInputValidator = (instance, inputValue, type) => { | |
| 9094 | + const innerParams = privateProps.innerParams.get(instance); | |
| 9095 | + instance.disableInput(); | |
| 9096 | + const validationPromise = Promise.resolve().then(() => asPromise(innerParams.inputValidator(inputValue, innerParams.validationMessage))); | |
| 9097 | + validationPromise.then(validationMessage => { | |
| 9098 | + instance.enableButtons(); | |
| 9099 | + instance.enableInput(); | |
| 9100 | + if (validationMessage) { | |
| 9101 | + instance.showValidationMessage(validationMessage); | |
| 9102 | + } else if (type === 'deny') { | |
| 9103 | + deny(instance, inputValue); | |
| 9104 | + } else { | |
| 9105 | + confirm(instance, inputValue); | |
| 1802 | 9106 | } |
| 9107 | + }); | |
| 9108 | + }; | |
| 1803 | 9109 | |
| 1804 | - e.preventDefault(); | |
| 1805 | - var point = Cropper.getMousePoint(e); | |
| 1806 | - var pixelY = normalize_wheel__WEBPACK_IMPORTED_MODULE_1___default()(e).pixelY; | |
| 1807 | - var newZoom = _this.props.zoom - pixelY * _this.props.zoomSpeed / 200; | |
| 9110 | + /** | |
| 9111 | + * @param {SweetAlert} instance | |
| 9112 | + * @param {*} value | |
| 9113 | + */ | |
| 9114 | + const deny = (instance, value) => { | |
| 9115 | + const innerParams = privateProps.innerParams.get(instance); | |
| 9116 | + if (innerParams.showLoaderOnDeny) { | |
| 9117 | + showLoading(getDenyButton()); | |
| 9118 | + } | |
| 9119 | + if (innerParams.preDeny) { | |
| 9120 | + instance.isAwaitingPromise = true; // Flagging the instance as awaiting a promise so it's own promise's reject/resolve methods doesn't get destroyed until the result from this preDeny's promise is received | |
| 9121 | + const preDenyPromise = Promise.resolve().then(() => asPromise(innerParams.preDeny(value, innerParams.validationMessage))); | |
| 9122 | + preDenyPromise.then(preDenyValue => { | |
| 9123 | + if (preDenyValue === false) { | |
| 9124 | + instance.hideLoading(); | |
| 9125 | + handleAwaitingPromise(instance); | |
| 9126 | + } else { | |
| 9127 | + instance.close(/** @type SweetAlertResult */{ | |
| 9128 | + isDenied: true, | |
| 9129 | + value: typeof preDenyValue === 'undefined' ? value : preDenyValue | |
| 9130 | + }); | |
| 9131 | + } | |
| 9132 | + }).catch(error => rejectWith(instance, error)); | |
| 9133 | + } else { | |
| 9134 | + instance.close(/** @type SweetAlertResult */{ | |
| 9135 | + isDenied: true, | |
| 9136 | + value | |
| 9137 | + }); | |
| 9138 | + } | |
| 9139 | + }; | |
| 1808 | 9140 | |
| 1809 | - _this.setNewZoom(newZoom, point); | |
| 9141 | + /** | |
| 9142 | + * @param {SweetAlert} instance | |
| 9143 | + * @param {*} value | |
| 9144 | + */ | |
| 9145 | + const succeedWith = (instance, value) => { | |
| 9146 | + instance.close(/** @type SweetAlertResult */{ | |
| 9147 | + isConfirmed: true, | |
| 9148 | + value | |
| 9149 | + }); | |
| 9150 | + }; | |
| 1810 | 9151 | |
| 1811 | - if (!_this.state.hasWheelJustStarted) { | |
| 1812 | - _this.setState({ | |
| 1813 | - hasWheelJustStarted: true | |
| 1814 | - }, function () { | |
| 1815 | - var _a, _b; | |
| 9152 | + /** | |
| 9153 | + * | |
| 9154 | + * @param {SweetAlert} instance | |
| 9155 | + * @param {string} error | |
| 9156 | + */ | |
| 9157 | + const rejectWith = (instance, error) => { | |
| 9158 | + instance.rejectPromise(error); | |
| 9159 | + }; | |
| 1816 | 9160 | |
| 1817 | - return (_b = (_a = _this.props).onInteractionStart) === null || _b === void 0 ? void 0 : _b.call(_a); | |
| 1818 | - }); | |
| 9161 | + /** | |
| 9162 | + * | |
| 9163 | + * @param {SweetAlert} instance | |
| 9164 | + * @param {*} value | |
| 9165 | + */ | |
| 9166 | + const confirm = (instance, value) => { | |
| 9167 | + const innerParams = privateProps.innerParams.get(instance); | |
| 9168 | + if (innerParams.showLoaderOnConfirm) { | |
| 9169 | + showLoading(); | |
| 9170 | + } | |
| 9171 | + if (innerParams.preConfirm) { | |
| 9172 | + instance.resetValidationMessage(); | |
| 9173 | + instance.isAwaitingPromise = true; // Flagging the instance as awaiting a promise so it's own promise's reject/resolve methods doesn't get destroyed until the result from this preConfirm's promise is received | |
| 9174 | + const preConfirmPromise = Promise.resolve().then(() => asPromise(innerParams.preConfirm(value, innerParams.validationMessage))); | |
| 9175 | + preConfirmPromise.then(preConfirmValue => { | |
| 9176 | + if (isVisible$1(getValidationMessage()) || preConfirmValue === false) { | |
| 9177 | + instance.hideLoading(); | |
| 9178 | + handleAwaitingPromise(instance); | |
| 9179 | + } else { | |
| 9180 | + succeedWith(instance, typeof preConfirmValue === 'undefined' ? value : preConfirmValue); | |
| 9181 | + } | |
| 9182 | + }).catch(error => rejectWith(instance, error)); | |
| 9183 | + } else { | |
| 9184 | + succeedWith(instance, value); | |
| 9185 | + } | |
| 9186 | + }; | |
| 9187 | + | |
| 9188 | + /** | |
| 9189 | + * Hides loader and shows back the button which was hidden by .showLoading() | |
| 9190 | + * @this {SweetAlert} | |
| 9191 | + */ | |
| 9192 | + function hideLoading() { | |
| 9193 | + // do nothing if popup is closed | |
| 9194 | + const innerParams = privateProps.innerParams.get(this); | |
| 9195 | + if (!innerParams) { | |
| 9196 | + return; | |
| 9197 | + } | |
| 9198 | + const domCache = privateProps.domCache.get(this); | |
| 9199 | + hide(domCache.loader); | |
| 9200 | + if (isToast()) { | |
| 9201 | + if (innerParams.icon) { | |
| 9202 | + show(getIcon()); | |
| 1819 | 9203 | } |
| 9204 | + } else { | |
| 9205 | + showRelatedButton(domCache); | |
| 9206 | + } | |
| 9207 | + removeClass([domCache.popup, domCache.actions], swalClasses.loading); | |
| 9208 | + domCache.popup.removeAttribute('aria-busy'); | |
| 9209 | + domCache.popup.removeAttribute('data-loading'); | |
| 9210 | + domCache.confirmButton.disabled = false; | |
| 9211 | + domCache.denyButton.disabled = false; | |
| 9212 | + domCache.cancelButton.disabled = false; | |
| 9213 | + } | |
| 1820 | 9214 | |
| 1821 | - if (_this.wheelTimer) { | |
| 1822 | - clearTimeout(_this.wheelTimer); | |
| 9215 | + /** | |
| 9216 | + * @param {DomCache} domCache | |
| 9217 | + */ | |
| 9218 | + const showRelatedButton = domCache => { | |
| 9219 | + const dataButtonToReplace = domCache.loader.getAttribute('data-button-to-replace'); | |
| 9220 | + const buttonToReplace = dataButtonToReplace ? domCache.popup.getElementsByClassName(dataButtonToReplace) : []; | |
| 9221 | + if (buttonToReplace.length) { | |
| 9222 | + show(/** @type {HTMLElement} */buttonToReplace[0], 'inline-block'); | |
| 9223 | + } else if (allButtonsAreHidden()) { | |
| 9224 | + hide(domCache.actions); | |
| 9225 | + } | |
| 9226 | + }; | |
| 9227 | + | |
| 9228 | + /** | |
| 9229 | + * Gets the input DOM node, this method works with input parameter. | |
| 9230 | + * | |
| 9231 | + * @returns {HTMLInputElement | null} | |
| 9232 | + * @this {SweetAlert} | |
| 9233 | + */ | |
| 9234 | + function getInput() { | |
| 9235 | + const innerParams = privateProps.innerParams.get(this); | |
| 9236 | + const domCache = privateProps.domCache.get(this); | |
| 9237 | + if (!domCache) { | |
| 9238 | + return null; | |
| 9239 | + } | |
| 9240 | + return getInput$1(domCache.popup, innerParams.input); | |
| 9241 | + } | |
| 9242 | + | |
| 9243 | + /** | |
| 9244 | + * @param {SweetAlert} instance | |
| 9245 | + * @param {string[]} buttons | |
| 9246 | + * @param {boolean} disabled | |
| 9247 | + */ | |
| 9248 | + function setButtonsDisabled(instance, buttons, disabled) { | |
| 9249 | + const domCache = privateProps.domCache.get(instance); | |
| 9250 | + buttons.forEach(button => { | |
| 9251 | + domCache[button].disabled = disabled; | |
| 9252 | + }); | |
| 9253 | + } | |
| 9254 | + | |
| 9255 | + /** | |
| 9256 | + * @param {HTMLInputElement | null} input | |
| 9257 | + * @param {boolean} disabled | |
| 9258 | + */ | |
| 9259 | + function setInputDisabled(input, disabled) { | |
| 9260 | + const popup = getPopup(); | |
| 9261 | + if (!popup || !input) { | |
| 9262 | + return; | |
| 9263 | + } | |
| 9264 | + if (input.type === 'radio') { | |
| 9265 | + /** @type {NodeListOf<HTMLInputElement>} */ | |
| 9266 | + const radios = popup.querySelectorAll(`[name="${swalClasses.radio}"]`); | |
| 9267 | + for (let i = 0; i < radios.length; i++) { | |
| 9268 | + radios[i].disabled = disabled; | |
| 1823 | 9269 | } |
| 9270 | + } else { | |
| 9271 | + input.disabled = disabled; | |
| 9272 | + } | |
| 9273 | + } | |
| 1824 | 9274 | |
| 1825 | - _this.wheelTimer = window.setTimeout(function () { | |
| 1826 | - return _this.setState({ | |
| 1827 | - hasWheelJustStarted: false | |
| 1828 | - }, function () { | |
| 1829 | - var _a, _b; | |
| 9275 | + /** | |
| 9276 | + * Enable all the buttons | |
| 9277 | + * @this {SweetAlert} | |
| 9278 | + */ | |
| 9279 | + function enableButtons() { | |
| 9280 | + setButtonsDisabled(this, ['confirmButton', 'denyButton', 'cancelButton'], false); | |
| 9281 | + } | |
| 1830 | 9282 | |
| 1831 | - return (_b = (_a = _this.props).onInteractionEnd) === null || _b === void 0 ? void 0 : _b.call(_a); | |
| 1832 | - }); | |
| 1833 | - }, 250); | |
| 1834 | - }; | |
| 9283 | + /** | |
| 9284 | + * Disable all the buttons | |
| 9285 | + * @this {SweetAlert} | |
| 9286 | + */ | |
| 9287 | + function disableButtons() { | |
| 9288 | + setButtonsDisabled(this, ['confirmButton', 'denyButton', 'cancelButton'], true); | |
| 9289 | + } | |
| 1835 | 9290 | |
| 1836 | - _this.getPointOnContainer = function (_a) { | |
| 1837 | - var x = _a.x, | |
| 1838 | - y = _a.y; | |
| 9291 | + /** | |
| 9292 | + * Enable the input field | |
| 9293 | + * @this {SweetAlert} | |
| 9294 | + */ | |
| 9295 | + function enableInput() { | |
| 9296 | + setInputDisabled(this.getInput(), false); | |
| 9297 | + } | |
| 1839 | 9298 | |
| 1840 | - if (!_this.containerRect) { | |
| 1841 | - throw new Error('The Cropper is not mounted'); | |
| 9299 | + /** | |
| 9300 | + * Disable the input field | |
| 9301 | + * @this {SweetAlert} | |
| 9302 | + */ | |
| 9303 | + function disableInput() { | |
| 9304 | + setInputDisabled(this.getInput(), true); | |
| 9305 | + } | |
| 9306 | + | |
| 9307 | + /** | |
| 9308 | + * Show block with validation message | |
| 9309 | + * | |
| 9310 | + * @param {string} error | |
| 9311 | + * @this {SweetAlert} | |
| 9312 | + */ | |
| 9313 | + function showValidationMessage(error) { | |
| 9314 | + const domCache = privateProps.domCache.get(this); | |
| 9315 | + const params = privateProps.innerParams.get(this); | |
| 9316 | + setInnerHtml(domCache.validationMessage, error); | |
| 9317 | + domCache.validationMessage.className = swalClasses['validation-message']; | |
| 9318 | + if (params.customClass && params.customClass.validationMessage) { | |
| 9319 | + addClass(domCache.validationMessage, params.customClass.validationMessage); | |
| 9320 | + } | |
| 9321 | + show(domCache.validationMessage); | |
| 9322 | + const input = this.getInput(); | |
| 9323 | + if (input) { | |
| 9324 | + input.setAttribute('aria-invalid', 'true'); | |
| 9325 | + input.setAttribute('aria-describedby', swalClasses['validation-message']); | |
| 9326 | + focusInput(input); | |
| 9327 | + addClass(input, swalClasses.inputerror); | |
| 9328 | + } | |
| 9329 | + } | |
| 9330 | + | |
| 9331 | + /** | |
| 9332 | + * Hide block with validation message | |
| 9333 | + * | |
| 9334 | + * @this {SweetAlert} | |
| 9335 | + */ | |
| 9336 | + function resetValidationMessage() { | |
| 9337 | + const domCache = privateProps.domCache.get(this); | |
| 9338 | + if (domCache.validationMessage) { | |
| 9339 | + hide(domCache.validationMessage); | |
| 9340 | + } | |
| 9341 | + const input = this.getInput(); | |
| 9342 | + if (input) { | |
| 9343 | + input.removeAttribute('aria-invalid'); | |
| 9344 | + input.removeAttribute('aria-describedby'); | |
| 9345 | + removeClass(input, swalClasses.inputerror); | |
| 9346 | + } | |
| 9347 | + } | |
| 9348 | + | |
| 9349 | + const defaultParams = { | |
| 9350 | + title: '', | |
| 9351 | + titleText: '', | |
| 9352 | + text: '', | |
| 9353 | + html: '', | |
| 9354 | + footer: '', | |
| 9355 | + icon: undefined, | |
| 9356 | + iconColor: undefined, | |
| 9357 | + iconHtml: undefined, | |
| 9358 | + template: undefined, | |
| 9359 | + toast: false, | |
| 9360 | + draggable: false, | |
| 9361 | + animation: true, | |
| 9362 | + theme: 'light', | |
| 9363 | + showClass: { | |
| 9364 | + popup: 'swal2-show', | |
| 9365 | + backdrop: 'swal2-backdrop-show', | |
| 9366 | + icon: 'swal2-icon-show' | |
| 9367 | + }, | |
| 9368 | + hideClass: { | |
| 9369 | + popup: 'swal2-hide', | |
| 9370 | + backdrop: 'swal2-backdrop-hide', | |
| 9371 | + icon: 'swal2-icon-hide' | |
| 9372 | + }, | |
| 9373 | + customClass: {}, | |
| 9374 | + target: 'body', | |
| 9375 | + color: undefined, | |
| 9376 | + backdrop: true, | |
| 9377 | + heightAuto: true, | |
| 9378 | + allowOutsideClick: true, | |
| 9379 | + allowEscapeKey: true, | |
| 9380 | + allowEnterKey: true, | |
| 9381 | + stopKeydownPropagation: true, | |
| 9382 | + keydownListenerCapture: false, | |
| 9383 | + showConfirmButton: true, | |
| 9384 | + showDenyButton: false, | |
| 9385 | + showCancelButton: false, | |
| 9386 | + preConfirm: undefined, | |
| 9387 | + preDeny: undefined, | |
| 9388 | + confirmButtonText: 'OK', | |
| 9389 | + confirmButtonAriaLabel: '', | |
| 9390 | + confirmButtonColor: undefined, | |
| 9391 | + denyButtonText: 'No', | |
| 9392 | + denyButtonAriaLabel: '', | |
| 9393 | + denyButtonColor: undefined, | |
| 9394 | + cancelButtonText: 'Cancel', | |
| 9395 | + cancelButtonAriaLabel: '', | |
| 9396 | + cancelButtonColor: undefined, | |
| 9397 | + buttonsStyling: true, | |
| 9398 | + reverseButtons: false, | |
| 9399 | + focusConfirm: true, | |
| 9400 | + focusDeny: false, | |
| 9401 | + focusCancel: false, | |
| 9402 | + returnFocus: true, | |
| 9403 | + showCloseButton: false, | |
| 9404 | + closeButtonHtml: '×', | |
| 9405 | + closeButtonAriaLabel: 'Close this dialog', | |
| 9406 | + loaderHtml: '', | |
| 9407 | + showLoaderOnConfirm: false, | |
| 9408 | + showLoaderOnDeny: false, | |
| 9409 | + imageUrl: undefined, | |
| 9410 | + imageWidth: undefined, | |
| 9411 | + imageHeight: undefined, | |
| 9412 | + imageAlt: '', | |
| 9413 | + timer: undefined, | |
| 9414 | + timerProgressBar: false, | |
| 9415 | + width: undefined, | |
| 9416 | + padding: undefined, | |
| 9417 | + background: undefined, | |
| 9418 | + input: undefined, | |
| 9419 | + inputPlaceholder: '', | |
| 9420 | + inputLabel: '', | |
| 9421 | + inputValue: '', | |
| 9422 | + inputOptions: {}, | |
| 9423 | + inputAutoFocus: true, | |
| 9424 | + inputAutoTrim: true, | |
| 9425 | + inputAttributes: {}, | |
| 9426 | + inputValidator: undefined, | |
| 9427 | + returnInputValueOnDeny: false, | |
| 9428 | + validationMessage: undefined, | |
| 9429 | + grow: false, | |
| 9430 | + position: 'center', | |
| 9431 | + progressSteps: [], | |
| 9432 | + currentProgressStep: undefined, | |
| 9433 | + progressStepsDistance: undefined, | |
| 9434 | + willOpen: undefined, | |
| 9435 | + didOpen: undefined, | |
| 9436 | + didRender: undefined, | |
| 9437 | + willClose: undefined, | |
| 9438 | + didClose: undefined, | |
| 9439 | + didDestroy: undefined, | |
| 9440 | + scrollbarPadding: true, | |
| 9441 | + topLayer: false | |
| 9442 | + }; | |
| 9443 | + const updatableParams = ['allowEscapeKey', 'allowOutsideClick', 'background', 'buttonsStyling', 'cancelButtonAriaLabel', 'cancelButtonColor', 'cancelButtonText', 'closeButtonAriaLabel', 'closeButtonHtml', 'color', 'confirmButtonAriaLabel', 'confirmButtonColor', 'confirmButtonText', 'currentProgressStep', 'customClass', 'denyButtonAriaLabel', 'denyButtonColor', 'denyButtonText', 'didClose', 'didDestroy', 'draggable', 'footer', 'hideClass', 'html', 'icon', 'iconColor', 'iconHtml', 'imageAlt', 'imageHeight', 'imageUrl', 'imageWidth', 'preConfirm', 'preDeny', 'progressSteps', 'returnFocus', 'reverseButtons', 'showCancelButton', 'showCloseButton', 'showConfirmButton', 'showDenyButton', 'text', 'title', 'titleText', 'theme', 'willClose']; | |
| 9444 | + | |
| 9445 | + /** @type {Record<string, string | undefined>} */ | |
| 9446 | + const deprecatedParams = { | |
| 9447 | + allowEnterKey: undefined | |
| 9448 | + }; | |
| 9449 | + const toastIncompatibleParams = ['allowOutsideClick', 'allowEnterKey', 'backdrop', 'draggable', 'focusConfirm', 'focusDeny', 'focusCancel', 'returnFocus', 'heightAuto', 'keydownListenerCapture']; | |
| 9450 | + | |
| 9451 | + /** | |
| 9452 | + * Is valid parameter | |
| 9453 | + * | |
| 9454 | + * @param {string} paramName | |
| 9455 | + * @returns {boolean} | |
| 9456 | + */ | |
| 9457 | + const isValidParameter = paramName => { | |
| 9458 | + return Object.prototype.hasOwnProperty.call(defaultParams, paramName); | |
| 9459 | + }; | |
| 9460 | + | |
| 9461 | + /** | |
| 9462 | + * Is valid parameter for Swal.update() method | |
| 9463 | + * | |
| 9464 | + * @param {string} paramName | |
| 9465 | + * @returns {boolean} | |
| 9466 | + */ | |
| 9467 | + const isUpdatableParameter = paramName => { | |
| 9468 | + return updatableParams.indexOf(paramName) !== -1; | |
| 9469 | + }; | |
| 9470 | + | |
| 9471 | + /** | |
| 9472 | + * Is deprecated parameter | |
| 9473 | + * | |
| 9474 | + * @param {string} paramName | |
| 9475 | + * @returns {string | undefined} | |
| 9476 | + */ | |
| 9477 | + const isDeprecatedParameter = paramName => { | |
| 9478 | + return deprecatedParams[paramName]; | |
| 9479 | + }; | |
| 9480 | + | |
| 9481 | + /** | |
| 9482 | + * @param {string} param | |
| 9483 | + */ | |
| 9484 | + const checkIfParamIsValid = param => { | |
| 9485 | + if (!isValidParameter(param)) { | |
| 9486 | + warn(`Unknown parameter "${param}"`); | |
| 9487 | + } | |
| 9488 | + }; | |
| 9489 | + | |
| 9490 | + /** | |
| 9491 | + * @param {string} param | |
| 9492 | + */ | |
| 9493 | + const checkIfToastParamIsValid = param => { | |
| 9494 | + if (toastIncompatibleParams.includes(param)) { | |
| 9495 | + warn(`The parameter "${param}" is incompatible with toasts`); | |
| 9496 | + } | |
| 9497 | + }; | |
| 9498 | + | |
| 9499 | + /** | |
| 9500 | + * @param {string} param | |
| 9501 | + */ | |
| 9502 | + const checkIfParamIsDeprecated = param => { | |
| 9503 | + const isDeprecated = isDeprecatedParameter(param); | |
| 9504 | + if (isDeprecated) { | |
| 9505 | + warnAboutDeprecation(param, isDeprecated); | |
| 9506 | + } | |
| 9507 | + }; | |
| 9508 | + | |
| 9509 | + /** | |
| 9510 | + * Show relevant warnings for given params | |
| 9511 | + * | |
| 9512 | + * @param {SweetAlertOptions} params | |
| 9513 | + */ | |
| 9514 | + const showWarningsForParams = params => { | |
| 9515 | + if (params.backdrop === false && params.allowOutsideClick) { | |
| 9516 | + warn('"allowOutsideClick" parameter requires `backdrop` parameter to be set to `true`'); | |
| 9517 | + } | |
| 9518 | + if (params.theme && !['light', 'dark', 'auto', 'minimal', 'borderless', 'bootstrap-4', 'bootstrap-4-light', 'bootstrap-4-dark', 'bootstrap-5', 'bootstrap-5-light', 'bootstrap-5-dark', 'material-ui', 'material-ui-light', 'material-ui-dark', 'embed-iframe', 'bulma', 'bulma-light', 'bulma-dark'].includes(params.theme)) { | |
| 9519 | + warn(`Invalid theme "${params.theme}"`); | |
| 9520 | + } | |
| 9521 | + for (const param in params) { | |
| 9522 | + checkIfParamIsValid(param); | |
| 9523 | + if (params.toast) { | |
| 9524 | + checkIfToastParamIsValid(param); | |
| 1842 | 9525 | } |
| 9526 | + checkIfParamIsDeprecated(param); | |
| 9527 | + } | |
| 9528 | + }; | |
| 1843 | 9529 | |
| 1844 | - return { | |
| 1845 | - x: _this.containerRect.width / 2 - (x - _this.containerRect.left), | |
| 1846 | - y: _this.containerRect.height / 2 - (y - _this.containerRect.top) | |
| 1847 | - }; | |
| 1848 | - }; | |
| 9530 | + /** | |
| 9531 | + * Updates popup parameters. | |
| 9532 | + * | |
| 9533 | + * @this {any} | |
| 9534 | + * @param {SweetAlertOptions} params | |
| 9535 | + */ | |
| 9536 | + function update(params) { | |
| 9537 | + const container = getContainer(); | |
| 9538 | + const popup = getPopup(); | |
| 9539 | + const innerParams = privateProps.innerParams.get(this); | |
| 9540 | + if (!popup || hasClass(popup, innerParams.hideClass.popup)) { | |
| 9541 | + warn(`You're trying to update the closed or closing popup, that won't work. Use the update() method in preConfirm parameter or show a new popup.`); | |
| 9542 | + return; | |
| 9543 | + } | |
| 9544 | + const validUpdatableParams = filterValidParams(params); | |
| 9545 | + const updatedParams = Object.assign({}, innerParams, validUpdatableParams); | |
| 9546 | + showWarningsForParams(updatedParams); | |
| 9547 | + if (container) { | |
| 9548 | + container.dataset['swal2Theme'] = updatedParams.theme; | |
| 9549 | + } | |
| 9550 | + render(this, updatedParams); | |
| 9551 | + privateProps.innerParams.set(this, updatedParams); | |
| 9552 | + Object.defineProperties(this, { | |
| 9553 | + params: { | |
| 9554 | + value: Object.assign({}, this.params, params), | |
| 9555 | + writable: false, | |
| 9556 | + enumerable: true | |
| 9557 | + } | |
| 9558 | + }); | |
| 9559 | + } | |
| 1849 | 9560 | |
| 1850 | - _this.getPointOnMedia = function (_a) { | |
| 1851 | - var x = _a.x, | |
| 1852 | - y = _a.y; | |
| 1853 | - var _b = _this.props, | |
| 1854 | - crop = _b.crop, | |
| 1855 | - zoom = _b.zoom; | |
| 1856 | - return { | |
| 1857 | - x: (x + crop.x) / zoom, | |
| 1858 | - y: (y + crop.y) / zoom | |
| 1859 | - }; | |
| 1860 | - }; | |
| 9561 | + /** | |
| 9562 | + * @param {SweetAlertOptions} params | |
| 9563 | + * @returns {SweetAlertOptions} | |
| 9564 | + */ | |
| 9565 | + const filterValidParams = params => { | |
| 9566 | + /** @type {Record<string, any>} */ | |
| 9567 | + const validUpdatableParams = {}; | |
| 9568 | + Object.keys(params).forEach(param => { | |
| 9569 | + if (isUpdatableParameter(param)) { | |
| 9570 | + const typedParams = /** @type {Record<string, any>} */params; | |
| 9571 | + validUpdatableParams[param] = typedParams[param]; | |
| 9572 | + } else { | |
| 9573 | + warn(`Invalid parameter to update: ${param}`); | |
| 9574 | + } | |
| 9575 | + }); | |
| 9576 | + return validUpdatableParams; | |
| 9577 | + }; | |
| 1861 | 9578 | |
| 1862 | - _this.setNewZoom = function (zoom, point) { | |
| 1863 | - if (!_this.state.cropSize || !_this.props.onZoomChange) return; | |
| 9579 | + /** | |
| 9580 | + * Dispose the current SweetAlert2 instance | |
| 9581 | + * @this {SweetAlert} | |
| 9582 | + */ | |
| 9583 | + function _destroy() { | |
| 9584 | + var _globalState$eventEmi; | |
| 9585 | + const domCache = privateProps.domCache.get(this); | |
| 9586 | + const innerParams = privateProps.innerParams.get(this); | |
| 9587 | + if (!innerParams) { | |
| 9588 | + disposeWeakMaps(this); // The WeakMaps might have been partly destroyed, we must recall it to dispose any remaining WeakMaps #2335 | |
| 9589 | + return; // This instance has already been destroyed | |
| 9590 | + } | |
| 1864 | 9591 | |
| 1865 | - var zoomPoint = _this.getPointOnContainer(point); | |
| 9592 | + // Check if there is another Swal closing | |
| 9593 | + if (domCache.popup && globalState.swalCloseEventFinishedCallback) { | |
| 9594 | + globalState.swalCloseEventFinishedCallback(); | |
| 9595 | + delete globalState.swalCloseEventFinishedCallback; | |
| 9596 | + } | |
| 9597 | + if (typeof innerParams.didDestroy === 'function') { | |
| 9598 | + innerParams.didDestroy(); | |
| 9599 | + } | |
| 9600 | + (_globalState$eventEmi = globalState.eventEmitter) === null || _globalState$eventEmi === void 0 || _globalState$eventEmi.emit('didDestroy'); | |
| 9601 | + disposeSwal(this); | |
| 9602 | + } | |
| 1866 | 9603 | |
| 1867 | - var zoomTarget = _this.getPointOnMedia(zoomPoint); | |
| 9604 | + /** | |
| 9605 | + * @param {SweetAlert} instance | |
| 9606 | + */ | |
| 9607 | + const disposeSwal = instance => { | |
| 9608 | + disposeWeakMaps(instance); | |
| 9609 | + // Unset this.params so GC will dispose it (#1569) | |
| 9610 | + // @ts-ignore | |
| 9611 | + delete instance.params; | |
| 9612 | + // Unset globalState props so GC will dispose globalState (#1569) | |
| 9613 | + delete globalState.keydownHandler; | |
| 9614 | + delete globalState.keydownTarget; | |
| 9615 | + // Unset currentInstance | |
| 9616 | + delete globalState.currentInstance; | |
| 9617 | + }; | |
| 1868 | 9618 | |
| 1869 | - var newZoom = clamp(zoom, _this.props.minZoom, _this.props.maxZoom); | |
| 1870 | - var requestedPosition = { | |
| 1871 | - x: zoomTarget.x * newZoom - zoomPoint.x, | |
| 1872 | - y: zoomTarget.y * newZoom - zoomPoint.y | |
| 1873 | - }; | |
| 1874 | - var newPosition = _this.props.restrictPosition ? restrictPosition(requestedPosition, _this.mediaSize, _this.state.cropSize, newZoom, _this.props.rotation) : requestedPosition; | |
| 9619 | + /** | |
| 9620 | + * @param {SweetAlert} instance | |
| 9621 | + */ | |
| 9622 | + const disposeWeakMaps = instance => { | |
| 9623 | + // If the current instance is awaiting a promise result, we keep the privateMethods to call them once the promise result is retrieved #2335 | |
| 9624 | + if (instance.isAwaitingPromise) { | |
| 9625 | + unsetWeakMaps(privateProps, instance); | |
| 9626 | + instance.isAwaitingPromise = true; | |
| 9627 | + } else { | |
| 9628 | + unsetWeakMaps(privateMethods, instance); | |
| 9629 | + unsetWeakMaps(privateProps, instance); | |
| 1875 | 9630 | |
| 1876 | - _this.props.onCropChange(newPosition); | |
| 9631 | + // @ts-ignore | |
| 9632 | + delete instance.isAwaitingPromise; | |
| 9633 | + // Unset instance methods | |
| 9634 | + // @ts-ignore | |
| 9635 | + delete instance.disableButtons; | |
| 9636 | + // @ts-ignore | |
| 9637 | + delete instance.enableButtons; | |
| 9638 | + // @ts-ignore | |
| 9639 | + delete instance.getInput; | |
| 9640 | + // @ts-ignore | |
| 9641 | + delete instance.disableInput; | |
| 9642 | + // @ts-ignore | |
| 9643 | + delete instance.enableInput; | |
| 9644 | + // @ts-ignore | |
| 9645 | + delete instance.hideLoading; | |
| 9646 | + // @ts-ignore | |
| 9647 | + delete instance.disableLoading; | |
| 9648 | + // @ts-ignore | |
| 9649 | + delete instance.showValidationMessage; | |
| 9650 | + // @ts-ignore | |
| 9651 | + delete instance.resetValidationMessage; | |
| 9652 | + // @ts-ignore | |
| 9653 | + delete instance.close; | |
| 9654 | + // @ts-ignore | |
| 9655 | + delete instance.closePopup; | |
| 9656 | + // @ts-ignore | |
| 9657 | + delete instance.closeModal; | |
| 9658 | + // @ts-ignore | |
| 9659 | + delete instance.closeToast; | |
| 9660 | + // @ts-ignore | |
| 9661 | + delete instance.rejectPromise; | |
| 9662 | + // @ts-ignore | |
| 9663 | + delete instance.update; | |
| 9664 | + // @ts-ignore | |
| 9665 | + delete instance._destroy; | |
| 9666 | + } | |
| 9667 | + }; | |
| 1877 | 9668 | |
| 1878 | - _this.props.onZoomChange(newZoom); | |
| 1879 | - }; | |
| 9669 | + /** | |
| 9670 | + * @param {Record<string, WeakMap<any, any>>} obj | |
| 9671 | + * @param {SweetAlert} instance | |
| 9672 | + */ | |
| 9673 | + const unsetWeakMaps = (obj, instance) => { | |
| 9674 | + for (const i in obj) { | |
| 9675 | + obj[i].delete(instance); | |
| 9676 | + } | |
| 9677 | + }; | |
| 1880 | 9678 | |
| 1881 | - _this.getCropData = function () { | |
| 1882 | - if (!_this.state.cropSize) { | |
| 1883 | - return null; | |
| 1884 | - } // this is to ensure the crop is correctly restricted after a zoom back (https://github.com/ValentinH/react-easy-crop/issues/6) | |
| 9679 | + var instanceMethods = /*#__PURE__*/Object.freeze({ | |
| 9680 | + __proto__: null, | |
| 9681 | + _destroy: _destroy, | |
| 9682 | + close: close, | |
| 9683 | + closeModal: close, | |
| 9684 | + closePopup: close, | |
| 9685 | + closeToast: close, | |
| 9686 | + disableButtons: disableButtons, | |
| 9687 | + disableInput: disableInput, | |
| 9688 | + disableLoading: hideLoading, | |
| 9689 | + enableButtons: enableButtons, | |
| 9690 | + enableInput: enableInput, | |
| 9691 | + getInput: getInput, | |
| 9692 | + handleAwaitingPromise: handleAwaitingPromise, | |
| 9693 | + hideLoading: hideLoading, | |
| 9694 | + rejectPromise: rejectPromise, | |
| 9695 | + resetValidationMessage: resetValidationMessage, | |
| 9696 | + showValidationMessage: showValidationMessage, | |
| 9697 | + update: update | |
| 9698 | + }); | |
| 1885 | 9699 | |
| 9700 | + /** | |
| 9701 | + * @param {SweetAlertOptions} innerParams | |
| 9702 | + * @param {DomCache} domCache | |
| 9703 | + * @param {(dismiss: DismissReason) => void} dismissWith | |
| 9704 | + */ | |
| 9705 | + const handlePopupClick = (innerParams, domCache, dismissWith) => { | |
| 9706 | + if (innerParams.toast) { | |
| 9707 | + handleToastClick(innerParams, domCache, dismissWith); | |
| 9708 | + } else { | |
| 9709 | + // Ignore click events that had mousedown on the popup but mouseup on the container | |
| 9710 | + // This can happen when the user drags a slider | |
| 9711 | + handleModalMousedown(domCache); | |
| 1886 | 9712 | |
| 1887 | - var restrictedPosition = _this.props.restrictPosition ? restrictPosition(_this.props.crop, _this.mediaSize, _this.state.cropSize, _this.props.zoom, _this.props.rotation) : _this.props.crop; | |
| 1888 | - return computeCroppedArea(restrictedPosition, _this.mediaSize, _this.state.cropSize, _this.getAspect(), _this.props.zoom, _this.props.rotation, _this.props.restrictPosition); | |
| 9713 | + // Ignore click events that had mousedown on the container but mouseup on the popup | |
| 9714 | + handleContainerMousedown(domCache); | |
| 9715 | + handleModalClick(innerParams, domCache, dismissWith); | |
| 9716 | + } | |
| 9717 | + }; | |
| 9718 | + | |
| 9719 | + /** | |
| 9720 | + * @param {SweetAlertOptions} innerParams | |
| 9721 | + * @param {DomCache} domCache | |
| 9722 | + * @param {(dismiss: DismissReason) => void} dismissWith | |
| 9723 | + */ | |
| 9724 | + const handleToastClick = (innerParams, domCache, dismissWith) => { | |
| 9725 | + // Closing toast by internal click | |
| 9726 | + domCache.popup.onclick = () => { | |
| 9727 | + if (innerParams && (isAnyButtonShown(innerParams) || innerParams.timer || innerParams.input)) { | |
| 9728 | + return; | |
| 9729 | + } | |
| 9730 | + dismissWith(DismissReason.close); | |
| 1889 | 9731 | }; |
| 9732 | + }; | |
| 1890 | 9733 | |
| 1891 | - _this.emitCropData = function () { | |
| 1892 | - var cropData = _this.getCropData(); | |
| 9734 | + /** | |
| 9735 | + * @param {SweetAlertOptions} innerParams | |
| 9736 | + * @returns {boolean} | |
| 9737 | + */ | |
| 9738 | + const isAnyButtonShown = innerParams => { | |
| 9739 | + return Boolean(innerParams.showConfirmButton || innerParams.showDenyButton || innerParams.showCancelButton || innerParams.showCloseButton); | |
| 9740 | + }; | |
| 9741 | + let ignoreOutsideClick = false; | |
| 1893 | 9742 | |
| 1894 | - if (!cropData) return; | |
| 1895 | - var croppedAreaPercentages = cropData.croppedAreaPercentages, | |
| 1896 | - croppedAreaPixels = cropData.croppedAreaPixels; | |
| 9743 | + /** | |
| 9744 | + * @param {DomCache} domCache | |
| 9745 | + */ | |
| 9746 | + const handleModalMousedown = domCache => { | |
| 9747 | + domCache.popup.onmousedown = () => { | |
| 9748 | + domCache.container.onmouseup = function (e) { | |
| 9749 | + domCache.container.onmouseup = () => {}; | |
| 9750 | + // We only check if the mouseup target is the container because usually it doesn't | |
| 9751 | + // have any other direct children aside of the popup | |
| 9752 | + if (e.target === domCache.container) { | |
| 9753 | + ignoreOutsideClick = true; | |
| 9754 | + } | |
| 9755 | + }; | |
| 9756 | + }; | |
| 9757 | + }; | |
| 1897 | 9758 | |
| 1898 | - if (_this.props.onCropComplete) { | |
| 1899 | - _this.props.onCropComplete(croppedAreaPercentages, croppedAreaPixels); | |
| 9759 | + /** | |
| 9760 | + * @param {DomCache} domCache | |
| 9761 | + */ | |
| 9762 | + const handleContainerMousedown = domCache => { | |
| 9763 | + domCache.container.onmousedown = e => { | |
| 9764 | + // prevent the modal text from being selected on double click on the container (allowOutsideClick: false) | |
| 9765 | + if (e.target === domCache.container) { | |
| 9766 | + e.preventDefault(); | |
| 1900 | 9767 | } |
| 9768 | + domCache.popup.onmouseup = function (e) { | |
| 9769 | + domCache.popup.onmouseup = () => {}; | |
| 9770 | + // We also need to check if the mouseup target is a child of the popup | |
| 9771 | + if (e.target === domCache.popup || e.target instanceof HTMLElement && domCache.popup.contains(e.target)) { | |
| 9772 | + ignoreOutsideClick = true; | |
| 9773 | + } | |
| 9774 | + }; | |
| 9775 | + }; | |
| 9776 | + }; | |
| 1901 | 9777 | |
| 1902 | - if (_this.props.onCropAreaChange) { | |
| 1903 | - _this.props.onCropAreaChange(croppedAreaPercentages, croppedAreaPixels); | |
| 9778 | + /** | |
| 9779 | + * @param {SweetAlertOptions} innerParams | |
| 9780 | + * @param {DomCache} domCache | |
| 9781 | + * @param {(dismiss: DismissReason) => void} dismissWith | |
| 9782 | + */ | |
| 9783 | + const handleModalClick = (innerParams, domCache, dismissWith) => { | |
| 9784 | + domCache.container.onclick = e => { | |
| 9785 | + if (ignoreOutsideClick) { | |
| 9786 | + ignoreOutsideClick = false; | |
| 9787 | + return; | |
| 1904 | 9788 | } |
| 9789 | + if (e.target === domCache.container && callIfFunction(innerParams.allowOutsideClick)) { | |
| 9790 | + dismissWith(DismissReason.backdrop); | |
| 9791 | + } | |
| 1905 | 9792 | }; |
| 9793 | + }; | |
| 1906 | 9794 | |
| 1907 | - _this.emitCropAreaChange = function () { | |
| 1908 | - var cropData = _this.getCropData(); | |
| 9795 | + /** | |
| 9796 | + * @param {any} elem | |
| 9797 | + * @returns {boolean} | |
| 9798 | + */ | |
| 9799 | + const isJqueryElement = elem => typeof elem === 'object' && elem.jquery; | |
| 1909 | 9800 | |
| 1910 | - if (!cropData) return; | |
| 1911 | - var croppedAreaPercentages = cropData.croppedAreaPercentages, | |
| 1912 | - croppedAreaPixels = cropData.croppedAreaPixels; | |
| 9801 | + /** | |
| 9802 | + * @param {any} elem | |
| 9803 | + * @returns {boolean} | |
| 9804 | + */ | |
| 9805 | + const isElement = elem => elem instanceof Element || isJqueryElement(elem); | |
| 1913 | 9806 | |
| 1914 | - if (_this.props.onCropAreaChange) { | |
| 1915 | - _this.props.onCropAreaChange(croppedAreaPercentages, croppedAreaPixels); | |
| 9807 | + /** | |
| 9808 | + * @param {any[]} args | |
| 9809 | + * @returns {SweetAlertOptions} | |
| 9810 | + */ | |
| 9811 | + const argsToParams = args => { | |
| 9812 | + /** @type {Record<string, any>} */ | |
| 9813 | + const params = {}; | |
| 9814 | + if (typeof args[0] === 'object' && !isElement(args[0])) { | |
| 9815 | + Object.assign(params, args[0]); | |
| 9816 | + } else { | |
| 9817 | + ['title', 'html', 'icon'].forEach((name, index) => { | |
| 9818 | + const arg = args[index]; | |
| 9819 | + if (typeof arg === 'string' || isElement(arg)) { | |
| 9820 | + params[name] = arg; | |
| 9821 | + } else if (arg !== undefined) { | |
| 9822 | + error(`Unexpected type of ${name}! Expected "string" or "Element", got ${typeof arg}`); | |
| 9823 | + } | |
| 9824 | + }); | |
| 9825 | + } | |
| 9826 | + return params; | |
| 9827 | + }; | |
| 9828 | + | |
| 9829 | + /** | |
| 9830 | + * Main method to create a new SweetAlert2 popup | |
| 9831 | + * | |
| 9832 | + * @this {new (...args: any[]) => any} | |
| 9833 | + * @param {...SweetAlertOptions} args | |
| 9834 | + * @returns {Promise<SweetAlertResult>} | |
| 9835 | + */ | |
| 9836 | + function fire(...args) { | |
| 9837 | + return new this(...args); | |
| 9838 | + } | |
| 9839 | + | |
| 9840 | + /** | |
| 9841 | + * Returns an extended version of `Swal` containing `params` as defaults. | |
| 9842 | + * Useful for reusing Swal configuration. | |
| 9843 | + * | |
| 9844 | + * For example: | |
| 9845 | + * | |
| 9846 | + * Before: | |
| 9847 | + * const textPromptOptions = { input: 'text', showCancelButton: true } | |
| 9848 | + * const {value: firstName} = await Swal.fire({ ...textPromptOptions, title: 'What is your first name?' }) | |
| 9849 | + * const {value: lastName} = await Swal.fire({ ...textPromptOptions, title: 'What is your last name?' }) | |
| 9850 | + * | |
| 9851 | + * After: | |
| 9852 | + * const TextPrompt = Swal.mixin({ input: 'text', showCancelButton: true }) | |
| 9853 | + * const {value: firstName} = await TextPrompt('What is your first name?') | |
| 9854 | + * const {value: lastName} = await TextPrompt('What is your last name?') | |
| 9855 | + * | |
| 9856 | + * @param {SweetAlertOptions} mixinParams | |
| 9857 | + * @returns {SweetAlert} | |
| 9858 | + * @this {typeof import('../SweetAlert.js').SweetAlert} | |
| 9859 | + */ | |
| 9860 | + function mixin(mixinParams) { | |
| 9861 | + // @ts-ignore: 'this' refers to the SweetAlert constructor | |
| 9862 | + class MixinSwal extends this { | |
| 9863 | + /** | |
| 9864 | + * @param {any} params | |
| 9865 | + * @param {any} priorityMixinParams | |
| 9866 | + */ | |
| 9867 | + _main(params, priorityMixinParams) { | |
| 9868 | + return super._main(params, Object.assign({}, mixinParams, priorityMixinParams)); | |
| 1916 | 9869 | } |
| 1917 | - }; | |
| 9870 | + } | |
| 9871 | + // @ts-ignore | |
| 9872 | + return MixinSwal; | |
| 9873 | + } | |
| 1918 | 9874 | |
| 1919 | - _this.recomputeCropPosition = function () { | |
| 1920 | - if (!_this.state.cropSize) return; | |
| 1921 | - var newPosition = _this.props.restrictPosition ? restrictPosition(_this.props.crop, _this.mediaSize, _this.state.cropSize, _this.props.zoom, _this.props.rotation) : _this.props.crop; | |
| 9875 | + /** | |
| 9876 | + * If `timer` parameter is set, returns number of milliseconds of timer remained. | |
| 9877 | + * Otherwise, returns undefined. | |
| 9878 | + * | |
| 9879 | + * @returns {number | undefined} | |
| 9880 | + */ | |
| 9881 | + const getTimerLeft = () => { | |
| 9882 | + return globalState.timeout && globalState.timeout.getTimerLeft(); | |
| 9883 | + }; | |
| 1922 | 9884 | |
| 1923 | - _this.props.onCropChange(newPosition); | |
| 9885 | + /** | |
| 9886 | + * Stop timer. Returns number of milliseconds of timer remained. | |
| 9887 | + * If `timer` parameter isn't set, returns undefined. | |
| 9888 | + * | |
| 9889 | + * @returns {number | undefined} | |
| 9890 | + */ | |
| 9891 | + const stopTimer = () => { | |
| 9892 | + if (globalState.timeout) { | |
| 9893 | + stopTimerProgressBar(); | |
| 9894 | + return globalState.timeout.stop(); | |
| 9895 | + } | |
| 9896 | + }; | |
| 1924 | 9897 | |
| 1925 | - _this.emitCropData(); | |
| 1926 | - }; | |
| 9898 | + /** | |
| 9899 | + * Resume timer. Returns number of milliseconds of timer remained. | |
| 9900 | + * If `timer` parameter isn't set, returns undefined. | |
| 9901 | + * | |
| 9902 | + * @returns {number | undefined} | |
| 9903 | + */ | |
| 9904 | + const resumeTimer = () => { | |
| 9905 | + if (globalState.timeout) { | |
| 9906 | + const remaining = globalState.timeout.start(); | |
| 9907 | + animateTimerProgressBar(remaining); | |
| 9908 | + return remaining; | |
| 9909 | + } | |
| 9910 | + }; | |
| 1927 | 9911 | |
| 1928 | - return _this; | |
| 9912 | + /** | |
| 9913 | + * Resume timer. Returns number of milliseconds of timer remained. | |
| 9914 | + * If `timer` parameter isn't set, returns undefined. | |
| 9915 | + * | |
| 9916 | + * @returns {number | undefined} | |
| 9917 | + */ | |
| 9918 | + const toggleTimer = () => { | |
| 9919 | + const timer = globalState.timeout; | |
| 9920 | + return timer && (timer.running ? stopTimer() : resumeTimer()); | |
| 9921 | + }; | |
| 9922 | + | |
| 9923 | + /** | |
| 9924 | + * Increase timer. Returns number of milliseconds of an updated timer. | |
| 9925 | + * If `timer` parameter isn't set, returns undefined. | |
| 9926 | + * | |
| 9927 | + * @param {number} ms | |
| 9928 | + * @returns {number | undefined} | |
| 9929 | + */ | |
| 9930 | + const increaseTimer = ms => { | |
| 9931 | + if (globalState.timeout) { | |
| 9932 | + const remaining = globalState.timeout.increase(ms); | |
| 9933 | + animateTimerProgressBar(remaining, true); | |
| 9934 | + return remaining; | |
| 9935 | + } | |
| 9936 | + }; | |
| 9937 | + | |
| 9938 | + /** | |
| 9939 | + * Check if timer is running. Returns true if timer is running | |
| 9940 | + * or false if timer is paused or stopped. | |
| 9941 | + * If `timer` parameter isn't set, returns undefined | |
| 9942 | + * | |
| 9943 | + * @returns {boolean} | |
| 9944 | + */ | |
| 9945 | + const isTimerRunning = () => { | |
| 9946 | + return Boolean(globalState.timeout && globalState.timeout.isRunning()); | |
| 9947 | + }; | |
| 9948 | + | |
| 9949 | + let bodyClickListenerAdded = false; | |
| 9950 | + /** @type {Record<string, any>} */ | |
| 9951 | + const clickHandlers = {}; | |
| 9952 | + | |
| 9953 | + /** | |
| 9954 | + * @this {any} | |
| 9955 | + * @param {string} attr | |
| 9956 | + */ | |
| 9957 | + function bindClickHandler(attr = 'data-swal-template') { | |
| 9958 | + clickHandlers[attr] = this; | |
| 9959 | + if (!bodyClickListenerAdded) { | |
| 9960 | + document.body.addEventListener('click', bodyClickListener); | |
| 9961 | + bodyClickListenerAdded = true; | |
| 9962 | + } | |
| 1929 | 9963 | } |
| 1930 | 9964 | |
| 1931 | - Cropper.prototype.componentDidMount = function () { | |
| 1932 | - window.addEventListener('resize', this.computeSizes); | |
| 9965 | + /** | |
| 9966 | + * @param {MouseEvent} event | |
| 9967 | + */ | |
| 9968 | + const bodyClickListener = event => { | |
| 9969 | + for (let el = /** @type {any} */event.target; el && el !== document; el = el.parentNode) { | |
| 9970 | + for (const attr in clickHandlers) { | |
| 9971 | + const template = el.getAttribute && el.getAttribute(attr); | |
| 9972 | + if (template) { | |
| 9973 | + clickHandlers[attr].fire({ | |
| 9974 | + template | |
| 9975 | + }); | |
| 9976 | + return; | |
| 9977 | + } | |
| 9978 | + } | |
| 9979 | + } | |
| 9980 | + }; | |
| 1933 | 9981 | |
| 1934 | - if (this.containerRef) { | |
| 1935 | - this.props.zoomWithScroll && this.containerRef.addEventListener('wheel', this.onWheel, { | |
| 1936 | - passive: false | |
| 9982 | + // Source: https://gist.github.com/mudge/5830382?permalink_comment_id=2691957#gistcomment-2691957 | |
| 9983 | + | |
| 9984 | + class EventEmitter { | |
| 9985 | + constructor() { | |
| 9986 | + /** @type {Events} */ | |
| 9987 | + this.events = {}; | |
| 9988 | + } | |
| 9989 | + | |
| 9990 | + /** | |
| 9991 | + * @param {string} eventName | |
| 9992 | + * @returns {EventHandlers} | |
| 9993 | + */ | |
| 9994 | + _getHandlersByEventName(eventName) { | |
| 9995 | + if (typeof this.events[eventName] === 'undefined') { | |
| 9996 | + // not Set because we need to keep the FIFO order | |
| 9997 | + // https://github.com/sweetalert2/sweetalert2/pull/2763#discussion_r1748990334 | |
| 9998 | + this.events[eventName] = []; | |
| 9999 | + } | |
| 10000 | + return this.events[eventName]; | |
| 10001 | + } | |
| 10002 | + | |
| 10003 | + /** | |
| 10004 | + * @param {string} eventName | |
| 10005 | + * @param {EventHandler} eventHandler | |
| 10006 | + */ | |
| 10007 | + on(eventName, eventHandler) { | |
| 10008 | + const currentHandlers = this._getHandlersByEventName(eventName); | |
| 10009 | + if (!currentHandlers.includes(eventHandler)) { | |
| 10010 | + currentHandlers.push(eventHandler); | |
| 10011 | + } | |
| 10012 | + } | |
| 10013 | + | |
| 10014 | + /** | |
| 10015 | + * @param {string} eventName | |
| 10016 | + * @param {EventHandler} eventHandler | |
| 10017 | + */ | |
| 10018 | + once(eventName, eventHandler) { | |
| 10019 | + /** | |
| 10020 | + * @param {...any} args | |
| 10021 | + */ | |
| 10022 | + const onceFn = (...args) => { | |
| 10023 | + this.removeListener(eventName, onceFn); | |
| 10024 | + // @ts-ignore | |
| 10025 | + eventHandler.apply(this, args); | |
| 10026 | + }; | |
| 10027 | + this.on(eventName, onceFn); | |
| 10028 | + } | |
| 10029 | + | |
| 10030 | + /** | |
| 10031 | + * @param {string} eventName | |
| 10032 | + * @param {...any} args | |
| 10033 | + */ | |
| 10034 | + emit(eventName, ...args) { | |
| 10035 | + this._getHandlersByEventName(eventName).forEach( | |
| 10036 | + /** | |
| 10037 | + * @param {EventHandler} eventHandler | |
| 10038 | + */ | |
| 10039 | + eventHandler => { | |
| 10040 | + try { | |
| 10041 | + // @ts-ignore | |
| 10042 | + eventHandler.apply(this, args); | |
| 10043 | + } catch (error) { | |
| 10044 | + console.error(error); | |
| 10045 | + } | |
| 1937 | 10046 | }); |
| 1938 | - this.containerRef.addEventListener('gesturestart', this.preventZoomSafari); | |
| 1939 | - this.containerRef.addEventListener('gesturechange', this.preventZoomSafari); | |
| 1940 | 10047 | } |
| 1941 | 10048 | |
| 1942 | - if (!this.props.disableAutomaticStylesInjection) { | |
| 1943 | - this.styleRef = document.createElement('style'); | |
| 1944 | - this.styleRef.setAttribute('type', 'text/css'); | |
| 10049 | + /** | |
| 10050 | + * @param {string} eventName | |
| 10051 | + * @param {EventHandler} eventHandler | |
| 10052 | + */ | |
| 10053 | + removeListener(eventName, eventHandler) { | |
| 10054 | + const currentHandlers = this._getHandlersByEventName(eventName); | |
| 10055 | + const index = currentHandlers.indexOf(eventHandler); | |
| 10056 | + if (index > -1) { | |
| 10057 | + currentHandlers.splice(index, 1); | |
| 10058 | + } | |
| 10059 | + } | |
| 1945 | 10060 | |
| 1946 | - if (this.props.nonce) { | |
| 1947 | - this.styleRef.setAttribute('nonce', this.props.nonce); | |
| 10061 | + /** | |
| 10062 | + * @param {string} eventName | |
| 10063 | + */ | |
| 10064 | + removeAllListeners(eventName) { | |
| 10065 | + if (this.events[eventName] !== undefined) { | |
| 10066 | + // https://github.com/sweetalert2/sweetalert2/pull/2763#discussion_r1749239222 | |
| 10067 | + this.events[eventName].length = 0; | |
| 1948 | 10068 | } |
| 10069 | + } | |
| 10070 | + reset() { | |
| 10071 | + this.events = {}; | |
| 10072 | + } | |
| 10073 | + } | |
| 1949 | 10074 | |
| 1950 | - this.styleRef.innerHTML = css_248z; | |
| 1951 | - document.head.appendChild(this.styleRef); | |
| 1952 | - } // when rendered via SSR, the image can already be loaded and its onLoad callback will never be called | |
| 10075 | + globalState.eventEmitter = new EventEmitter(); | |
| 1953 | 10076 | |
| 10077 | + /** | |
| 10078 | + * @param {string} eventName | |
| 10079 | + * @param {EventHandler} eventHandler | |
| 10080 | + */ | |
| 10081 | + const on = (eventName, eventHandler) => { | |
| 10082 | + if (globalState.eventEmitter) { | |
| 10083 | + globalState.eventEmitter.on(eventName, eventHandler); | |
| 10084 | + } | |
| 10085 | + }; | |
| 1954 | 10086 | |
| 1955 | - if (this.imageRef.current && this.imageRef.current.complete) { | |
| 1956 | - this.onMediaLoad(); | |
| 1957 | - } // set image and video refs in the parent if the callbacks exist | |
| 10087 | + /** | |
| 10088 | + * @param {string} eventName | |
| 10089 | + * @param {EventHandler} eventHandler | |
| 10090 | + */ | |
| 10091 | + const once = (eventName, eventHandler) => { | |
| 10092 | + if (globalState.eventEmitter) { | |
| 10093 | + globalState.eventEmitter.once(eventName, eventHandler); | |
| 10094 | + } | |
| 10095 | + }; | |
| 1958 | 10096 | |
| 10097 | + /** | |
| 10098 | + * @param {string} [eventName] | |
| 10099 | + * @param {EventHandler} [eventHandler] | |
| 10100 | + */ | |
| 10101 | + const off = (eventName, eventHandler) => { | |
| 10102 | + if (!globalState.eventEmitter) { | |
| 10103 | + return; | |
| 10104 | + } | |
| 1959 | 10105 | |
| 1960 | - if (this.props.setImageRef) { | |
| 1961 | - this.props.setImageRef(this.imageRef); | |
| 10106 | + // Remove all handlers for all events | |
| 10107 | + if (!eventName) { | |
| 10108 | + globalState.eventEmitter.reset(); | |
| 10109 | + return; | |
| 1962 | 10110 | } |
| 10111 | + if (eventHandler) { | |
| 10112 | + // Remove a specific handler | |
| 10113 | + globalState.eventEmitter.removeListener(eventName, eventHandler); | |
| 10114 | + } else { | |
| 10115 | + // Remove all handlers for a specific event | |
| 10116 | + globalState.eventEmitter.removeAllListeners(eventName); | |
| 10117 | + } | |
| 10118 | + }; | |
| 1963 | 10119 | |
| 1964 | - if (this.props.setVideoRef) { | |
| 1965 | - this.props.setVideoRef(this.videoRef); | |
| 10120 | + var staticMethods = /*#__PURE__*/Object.freeze({ | |
| 10121 | + __proto__: null, | |
| 10122 | + argsToParams: argsToParams, | |
| 10123 | + bindClickHandler: bindClickHandler, | |
| 10124 | + clickCancel: clickCancel, | |
| 10125 | + clickConfirm: clickConfirm, | |
| 10126 | + clickDeny: clickDeny, | |
| 10127 | + enableLoading: showLoading, | |
| 10128 | + fire: fire, | |
| 10129 | + getActions: getActions, | |
| 10130 | + getCancelButton: getCancelButton, | |
| 10131 | + getCloseButton: getCloseButton, | |
| 10132 | + getConfirmButton: getConfirmButton, | |
| 10133 | + getContainer: getContainer, | |
| 10134 | + getDenyButton: getDenyButton, | |
| 10135 | + getFocusableElements: getFocusableElements, | |
| 10136 | + getFooter: getFooter, | |
| 10137 | + getHtmlContainer: getHtmlContainer, | |
| 10138 | + getIcon: getIcon, | |
| 10139 | + getIconContent: getIconContent, | |
| 10140 | + getImage: getImage, | |
| 10141 | + getInputLabel: getInputLabel, | |
| 10142 | + getLoader: getLoader, | |
| 10143 | + getPopup: getPopup, | |
| 10144 | + getProgressSteps: getProgressSteps, | |
| 10145 | + getTimerLeft: getTimerLeft, | |
| 10146 | + getTimerProgressBar: getTimerProgressBar, | |
| 10147 | + getTitle: getTitle, | |
| 10148 | + getValidationMessage: getValidationMessage, | |
| 10149 | + increaseTimer: increaseTimer, | |
| 10150 | + isDeprecatedParameter: isDeprecatedParameter, | |
| 10151 | + isLoading: isLoading, | |
| 10152 | + isTimerRunning: isTimerRunning, | |
| 10153 | + isUpdatableParameter: isUpdatableParameter, | |
| 10154 | + isValidParameter: isValidParameter, | |
| 10155 | + isVisible: isVisible, | |
| 10156 | + mixin: mixin, | |
| 10157 | + off: off, | |
| 10158 | + on: on, | |
| 10159 | + once: once, | |
| 10160 | + resumeTimer: resumeTimer, | |
| 10161 | + showLoading: showLoading, | |
| 10162 | + stopTimer: stopTimer, | |
| 10163 | + toggleTimer: toggleTimer | |
| 10164 | + }); | |
| 10165 | + | |
| 10166 | + class Timer { | |
| 10167 | + /** | |
| 10168 | + * @param {() => void} callback | |
| 10169 | + * @param {number} delay | |
| 10170 | + */ | |
| 10171 | + constructor(callback, delay) { | |
| 10172 | + this.callback = callback; | |
| 10173 | + this.remaining = delay; | |
| 10174 | + this.running = false; | |
| 10175 | + this.start(); | |
| 1966 | 10176 | } |
| 10177 | + | |
| 10178 | + /** | |
| 10179 | + * @returns {number} | |
| 10180 | + */ | |
| 10181 | + start() { | |
| 10182 | + if (!this.running) { | |
| 10183 | + this.running = true; | |
| 10184 | + this.started = new Date(); | |
| 10185 | + this.id = setTimeout(this.callback, this.remaining); | |
| 10186 | + } | |
| 10187 | + return this.remaining; | |
| 10188 | + } | |
| 10189 | + | |
| 10190 | + /** | |
| 10191 | + * @returns {number} | |
| 10192 | + */ | |
| 10193 | + stop() { | |
| 10194 | + if (this.started && this.running) { | |
| 10195 | + this.running = false; | |
| 10196 | + clearTimeout(this.id); | |
| 10197 | + this.remaining -= new Date().getTime() - this.started.getTime(); | |
| 10198 | + } | |
| 10199 | + return this.remaining; | |
| 10200 | + } | |
| 10201 | + | |
| 10202 | + /** | |
| 10203 | + * @param {number} n | |
| 10204 | + * @returns {number} | |
| 10205 | + */ | |
| 10206 | + increase(n) { | |
| 10207 | + const running = this.running; | |
| 10208 | + if (running) { | |
| 10209 | + this.stop(); | |
| 10210 | + } | |
| 10211 | + this.remaining += n; | |
| 10212 | + if (running) { | |
| 10213 | + this.start(); | |
| 10214 | + } | |
| 10215 | + return this.remaining; | |
| 10216 | + } | |
| 10217 | + | |
| 10218 | + /** | |
| 10219 | + * @returns {number} | |
| 10220 | + */ | |
| 10221 | + getTimerLeft() { | |
| 10222 | + if (this.running) { | |
| 10223 | + this.stop(); | |
| 10224 | + this.start(); | |
| 10225 | + } | |
| 10226 | + return this.remaining; | |
| 10227 | + } | |
| 10228 | + | |
| 10229 | + /** | |
| 10230 | + * @returns {boolean} | |
| 10231 | + */ | |
| 10232 | + isRunning() { | |
| 10233 | + return this.running; | |
| 10234 | + } | |
| 10235 | + } | |
| 10236 | + | |
| 10237 | + const swalStringParams = ['swal-title', 'swal-html', 'swal-footer']; | |
| 10238 | + | |
| 10239 | + /** | |
| 10240 | + * @param {SweetAlertOptions} params | |
| 10241 | + * @returns {SweetAlertOptions} | |
| 10242 | + */ | |
| 10243 | + const getTemplateParams = params => { | |
| 10244 | + const template = typeof params.template === 'string' ? (/** @type {HTMLTemplateElement} */document.querySelector(params.template)) : params.template; | |
| 10245 | + if (!template) { | |
| 10246 | + return {}; | |
| 10247 | + } | |
| 10248 | + /** @type {DocumentFragment} */ | |
| 10249 | + const templateContent = template.content; | |
| 10250 | + showWarningsForElements(templateContent); | |
| 10251 | + const result = Object.assign(getSwalParams(templateContent), getSwalFunctionParams(templateContent), getSwalButtons(templateContent), getSwalImage(templateContent), getSwalIcon(templateContent), getSwalInput(templateContent), getSwalStringParams(templateContent, swalStringParams)); | |
| 10252 | + return result; | |
| 1967 | 10253 | }; |
| 1968 | 10254 | |
| 1969 | - Cropper.prototype.componentWillUnmount = function () { | |
| 1970 | - var _a; | |
| 10255 | + /** | |
| 10256 | + * @param {DocumentFragment} templateContent | |
| 10257 | + * @returns {Record<string, string | boolean | number>} | |
| 10258 | + */ | |
| 10259 | + const getSwalParams = templateContent => { | |
| 10260 | + /** @type {Record<string, string | boolean | number>} */ | |
| 10261 | + const result = {}; | |
| 10262 | + /** @type {HTMLElement[]} */ | |
| 10263 | + const swalParams = Array.from(templateContent.querySelectorAll('swal-param')); | |
| 10264 | + swalParams.forEach(param => { | |
| 10265 | + showWarningsForAttributes(param, ['name', 'value']); | |
| 10266 | + const paramName = /** @type {keyof SweetAlertOptions} */param.getAttribute('name'); | |
| 10267 | + const value = param.getAttribute('value'); | |
| 10268 | + if (!paramName || !value) { | |
| 10269 | + return; | |
| 10270 | + } | |
| 10271 | + if (paramName in defaultParams && typeof defaultParams[(/** @type {keyof typeof defaultParams} */paramName)] === 'boolean') { | |
| 10272 | + result[paramName] = value !== 'false'; | |
| 10273 | + } else if (paramName in defaultParams && typeof defaultParams[(/** @type {keyof typeof defaultParams} */paramName)] === 'object') { | |
| 10274 | + result[paramName] = JSON.parse(value); | |
| 10275 | + } else { | |
| 10276 | + result[paramName] = value; | |
| 10277 | + } | |
| 10278 | + }); | |
| 10279 | + return result; | |
| 10280 | + }; | |
| 1971 | 10281 | |
| 1972 | - window.removeEventListener('resize', this.computeSizes); | |
| 10282 | + /** | |
| 10283 | + * @param {DocumentFragment} templateContent | |
| 10284 | + * @returns {Record<string, () => void>} | |
| 10285 | + */ | |
| 10286 | + const getSwalFunctionParams = templateContent => { | |
| 10287 | + /** @type {Record<string, () => void>} */ | |
| 10288 | + const result = {}; | |
| 10289 | + /** @type {HTMLElement[]} */ | |
| 10290 | + const swalFunctions = Array.from(templateContent.querySelectorAll('swal-function-param')); | |
| 10291 | + swalFunctions.forEach(param => { | |
| 10292 | + const paramName = /** @type {keyof SweetAlertOptions} */param.getAttribute('name'); | |
| 10293 | + const value = param.getAttribute('value'); | |
| 10294 | + if (!paramName || !value) { | |
| 10295 | + return; | |
| 10296 | + } | |
| 10297 | + result[paramName] = new Function(`return ${value}`)(); | |
| 10298 | + }); | |
| 10299 | + return result; | |
| 10300 | + }; | |
| 1973 | 10301 | |
| 1974 | - if (this.containerRef) { | |
| 1975 | - this.containerRef.removeEventListener('gesturestart', this.preventZoomSafari); | |
| 1976 | - this.containerRef.removeEventListener('gesturechange', this.preventZoomSafari); | |
| 10302 | + /** | |
| 10303 | + * @param {DocumentFragment} templateContent | |
| 10304 | + * @returns {Record<string, string | boolean>} | |
| 10305 | + */ | |
| 10306 | + const getSwalButtons = templateContent => { | |
| 10307 | + /** @type {Record<string, string | boolean>} */ | |
| 10308 | + const result = {}; | |
| 10309 | + /** @type {HTMLElement[]} */ | |
| 10310 | + const swalButtons = Array.from(templateContent.querySelectorAll('swal-button')); | |
| 10311 | + swalButtons.forEach(button => { | |
| 10312 | + showWarningsForAttributes(button, ['type', 'color', 'aria-label']); | |
| 10313 | + const type = button.getAttribute('type'); | |
| 10314 | + if (!type || !['confirm', 'cancel', 'deny'].includes(type)) { | |
| 10315 | + return; | |
| 10316 | + } | |
| 10317 | + result[`${type}ButtonText`] = button.innerHTML; | |
| 10318 | + result[`show${capitalizeFirstLetter(type)}Button`] = true; | |
| 10319 | + if (button.hasAttribute('color')) { | |
| 10320 | + const color = button.getAttribute('color'); | |
| 10321 | + if (color !== null) { | |
| 10322 | + result[`${type}ButtonColor`] = color; | |
| 10323 | + } | |
| 10324 | + } | |
| 10325 | + if (button.hasAttribute('aria-label')) { | |
| 10326 | + const ariaLabel = button.getAttribute('aria-label'); | |
| 10327 | + if (ariaLabel !== null) { | |
| 10328 | + result[`${type}ButtonAriaLabel`] = ariaLabel; | |
| 10329 | + } | |
| 10330 | + } | |
| 10331 | + }); | |
| 10332 | + return result; | |
| 10333 | + }; | |
| 10334 | + | |
| 10335 | + /** | |
| 10336 | + * @param {DocumentFragment} templateContent | |
| 10337 | + * @returns {Pick<SweetAlertOptions, 'imageUrl' | 'imageWidth' | 'imageHeight' | 'imageAlt'>} | |
| 10338 | + */ | |
| 10339 | + const getSwalImage = templateContent => { | |
| 10340 | + const result = {}; | |
| 10341 | + /** @type {HTMLElement | null} */ | |
| 10342 | + const image = templateContent.querySelector('swal-image'); | |
| 10343 | + if (image) { | |
| 10344 | + showWarningsForAttributes(image, ['src', 'width', 'height', 'alt']); | |
| 10345 | + if (image.hasAttribute('src')) { | |
| 10346 | + result.imageUrl = image.getAttribute('src') || undefined; | |
| 10347 | + } | |
| 10348 | + if (image.hasAttribute('width')) { | |
| 10349 | + result.imageWidth = image.getAttribute('width') || undefined; | |
| 10350 | + } | |
| 10351 | + if (image.hasAttribute('height')) { | |
| 10352 | + result.imageHeight = image.getAttribute('height') || undefined; | |
| 10353 | + } | |
| 10354 | + if (image.hasAttribute('alt')) { | |
| 10355 | + result.imageAlt = image.getAttribute('alt') || undefined; | |
| 10356 | + } | |
| 1977 | 10357 | } |
| 10358 | + return result; | |
| 10359 | + }; | |
| 1978 | 10360 | |
| 1979 | - if (this.styleRef) { | |
| 1980 | - (_a = this.styleRef.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(this.styleRef); | |
| 10361 | + /** | |
| 10362 | + * @param {DocumentFragment} templateContent | |
| 10363 | + * @returns {object} | |
| 10364 | + */ | |
| 10365 | + const getSwalIcon = templateContent => { | |
| 10366 | + const result = {}; | |
| 10367 | + /** @type {HTMLElement | null} */ | |
| 10368 | + const icon = templateContent.querySelector('swal-icon'); | |
| 10369 | + if (icon) { | |
| 10370 | + showWarningsForAttributes(icon, ['type', 'color']); | |
| 10371 | + if (icon.hasAttribute('type')) { | |
| 10372 | + result.icon = icon.getAttribute('type'); | |
| 10373 | + } | |
| 10374 | + if (icon.hasAttribute('color')) { | |
| 10375 | + result.iconColor = icon.getAttribute('color'); | |
| 10376 | + } | |
| 10377 | + result.iconHtml = icon.innerHTML; | |
| 1981 | 10378 | } |
| 10379 | + return result; | |
| 10380 | + }; | |
| 1982 | 10381 | |
| 1983 | - this.cleanEvents(); | |
| 1984 | - this.props.zoomWithScroll && this.clearScrollEvent(); | |
| 10382 | + /** | |
| 10383 | + * @param {DocumentFragment} templateContent | |
| 10384 | + * @returns {object} | |
| 10385 | + */ | |
| 10386 | + const getSwalInput = templateContent => { | |
| 10387 | + /** @type {Record<string, any>} */ | |
| 10388 | + const result = {}; | |
| 10389 | + /** @type {HTMLElement | null} */ | |
| 10390 | + const input = templateContent.querySelector('swal-input'); | |
| 10391 | + if (input) { | |
| 10392 | + showWarningsForAttributes(input, ['type', 'label', 'placeholder', 'value']); | |
| 10393 | + result.input = input.getAttribute('type') || 'text'; | |
| 10394 | + if (input.hasAttribute('label')) { | |
| 10395 | + result.inputLabel = input.getAttribute('label'); | |
| 10396 | + } | |
| 10397 | + if (input.hasAttribute('placeholder')) { | |
| 10398 | + result.inputPlaceholder = input.getAttribute('placeholder'); | |
| 10399 | + } | |
| 10400 | + if (input.hasAttribute('value')) { | |
| 10401 | + result.inputValue = input.getAttribute('value'); | |
| 10402 | + } | |
| 10403 | + } | |
| 10404 | + /** @type {HTMLElement[]} */ | |
| 10405 | + const inputOptions = Array.from(templateContent.querySelectorAll('swal-input-option')); | |
| 10406 | + if (inputOptions.length) { | |
| 10407 | + result.inputOptions = {}; | |
| 10408 | + inputOptions.forEach(option => { | |
| 10409 | + showWarningsForAttributes(option, ['value']); | |
| 10410 | + const optionValue = option.getAttribute('value'); | |
| 10411 | + if (!optionValue) { | |
| 10412 | + return; | |
| 10413 | + } | |
| 10414 | + const optionName = option.innerHTML; | |
| 10415 | + result.inputOptions[optionValue] = optionName; | |
| 10416 | + }); | |
| 10417 | + } | |
| 10418 | + return result; | |
| 1985 | 10419 | }; |
| 1986 | 10420 | |
| 1987 | - Cropper.prototype.componentDidUpdate = function (prevProps) { | |
| 1988 | - var _a, _b, _c, _d, _e, _f, _g, _h, _j; | |
| 10421 | + /** | |
| 10422 | + * @param {DocumentFragment} templateContent | |
| 10423 | + * @param {string[]} paramNames | |
| 10424 | + * @returns {Record<string, string>} | |
| 10425 | + */ | |
| 10426 | + const getSwalStringParams = (templateContent, paramNames) => { | |
| 10427 | + /** @type {Record<string, string>} */ | |
| 10428 | + const result = {}; | |
| 10429 | + for (const i in paramNames) { | |
| 10430 | + const paramName = paramNames[i]; | |
| 10431 | + /** @type {HTMLElement | null} */ | |
| 10432 | + const tag = templateContent.querySelector(paramName); | |
| 10433 | + if (tag) { | |
| 10434 | + showWarningsForAttributes(tag, []); | |
| 10435 | + result[paramName.replace(/^swal-/, '')] = tag.innerHTML.trim(); | |
| 10436 | + } | |
| 10437 | + } | |
| 10438 | + return result; | |
| 10439 | + }; | |
| 1989 | 10440 | |
| 1990 | - if (prevProps.rotation !== this.props.rotation) { | |
| 1991 | - this.computeSizes(); | |
| 1992 | - this.recomputeCropPosition(); | |
| 1993 | - } else if (prevProps.aspect !== this.props.aspect) { | |
| 1994 | - this.computeSizes(); | |
| 1995 | - } else if (prevProps.zoom !== this.props.zoom) { | |
| 1996 | - this.recomputeCropPosition(); | |
| 1997 | - } else if (((_a = prevProps.cropSize) === null || _a === void 0 ? void 0 : _a.height) !== ((_b = this.props.cropSize) === null || _b === void 0 ? void 0 : _b.height) || ((_c = prevProps.cropSize) === null || _c === void 0 ? void 0 : _c.width) !== ((_d = this.props.cropSize) === null || _d === void 0 ? void 0 : _d.width)) { | |
| 1998 | - this.computeSizes(); | |
| 1999 | - } else if (((_e = prevProps.crop) === null || _e === void 0 ? void 0 : _e.x) !== ((_f = this.props.crop) === null || _f === void 0 ? void 0 : _f.x) || ((_g = prevProps.crop) === null || _g === void 0 ? void 0 : _g.y) !== ((_h = this.props.crop) === null || _h === void 0 ? void 0 : _h.y)) { | |
| 2000 | - this.emitCropAreaChange(); | |
| 10441 | + /** | |
| 10442 | + * @param {DocumentFragment} templateContent | |
| 10443 | + */ | |
| 10444 | + const showWarningsForElements = templateContent => { | |
| 10445 | + const allowedElements = swalStringParams.concat(['swal-param', 'swal-function-param', 'swal-button', 'swal-image', 'swal-icon', 'swal-input', 'swal-input-option']); | |
| 10446 | + Array.from(templateContent.children).forEach(el => { | |
| 10447 | + const tagName = el.tagName.toLowerCase(); | |
| 10448 | + if (!allowedElements.includes(tagName)) { | |
| 10449 | + warn(`Unrecognized element <${tagName}>`); | |
| 10450 | + } | |
| 10451 | + }); | |
| 10452 | + }; | |
| 10453 | + | |
| 10454 | + /** | |
| 10455 | + * @param {HTMLElement} el | |
| 10456 | + * @param {string[]} allowedAttributes | |
| 10457 | + */ | |
| 10458 | + const showWarningsForAttributes = (el, allowedAttributes) => { | |
| 10459 | + Array.from(el.attributes).forEach(attribute => { | |
| 10460 | + if (allowedAttributes.indexOf(attribute.name) === -1) { | |
| 10461 | + warn([`Unrecognized attribute "${attribute.name}" on <${el.tagName.toLowerCase()}>.`, `${allowedAttributes.length ? `Allowed attributes are: ${allowedAttributes.join(', ')}` : 'To set the value, use HTML within the element.'}`]); | |
| 10462 | + } | |
| 10463 | + }); | |
| 10464 | + }; | |
| 10465 | + | |
| 10466 | + const SHOW_CLASS_TIMEOUT = 10; | |
| 10467 | + | |
| 10468 | + /** | |
| 10469 | + * Open popup, add necessary classes and styles, fix scrollbar | |
| 10470 | + * | |
| 10471 | + * @param {SweetAlertOptions} params | |
| 10472 | + */ | |
| 10473 | + const openPopup = params => { | |
| 10474 | + var _globalState$eventEmi, _globalState$eventEmi2; | |
| 10475 | + const container = getContainer(); | |
| 10476 | + const popup = getPopup(); | |
| 10477 | + if (!container || !popup) { | |
| 10478 | + return; | |
| 2001 | 10479 | } |
| 10480 | + if (typeof params.willOpen === 'function') { | |
| 10481 | + params.willOpen(popup); | |
| 10482 | + } | |
| 10483 | + (_globalState$eventEmi = globalState.eventEmitter) === null || _globalState$eventEmi === void 0 || _globalState$eventEmi.emit('willOpen', popup); | |
| 10484 | + const bodyStyles = window.getComputedStyle(document.body); | |
| 10485 | + const initialBodyOverflow = bodyStyles.overflowY; | |
| 10486 | + addClasses(container, popup, params); | |
| 2002 | 10487 | |
| 2003 | - if (prevProps.zoomWithScroll !== this.props.zoomWithScroll && this.containerRef) { | |
| 2004 | - this.props.zoomWithScroll ? this.containerRef.addEventListener('wheel', this.onWheel, { | |
| 2005 | - passive: false | |
| 2006 | - }) : this.clearScrollEvent(); | |
| 10488 | + // scrolling is 'hidden' until animation is done, after that 'auto' | |
| 10489 | + setTimeout(() => { | |
| 10490 | + setScrollingVisibility(container, popup); | |
| 10491 | + }, SHOW_CLASS_TIMEOUT); | |
| 10492 | + if (isModal()) { | |
| 10493 | + // Using ternary instead of ?? operator for Webpack 4 compatibility | |
| 10494 | + fixScrollContainer(container, params.scrollbarPadding !== undefined ? params.scrollbarPadding : false, initialBodyOverflow); | |
| 10495 | + setAriaHidden(); | |
| 2007 | 10496 | } |
| 10497 | + if (!isToast() && !globalState.previousActiveElement) { | |
| 10498 | + globalState.previousActiveElement = document.activeElement; | |
| 10499 | + } | |
| 10500 | + if (typeof params.didOpen === 'function') { | |
| 10501 | + const didOpen = params.didOpen; | |
| 10502 | + setTimeout(() => didOpen(popup)); | |
| 10503 | + } | |
| 10504 | + (_globalState$eventEmi2 = globalState.eventEmitter) === null || _globalState$eventEmi2 === void 0 || _globalState$eventEmi2.emit('didOpen', popup); | |
| 10505 | + }; | |
| 2008 | 10506 | |
| 2009 | - if (prevProps.video !== this.props.video) { | |
| 2010 | - (_j = this.videoRef.current) === null || _j === void 0 ? void 0 : _j.load(); | |
| 10507 | + /** | |
| 10508 | + * @param {Event} event | |
| 10509 | + */ | |
| 10510 | + const swalOpenAnimationFinished = event => { | |
| 10511 | + const popup = getPopup(); | |
| 10512 | + if (!popup || event.target !== popup) { | |
| 10513 | + return; | |
| 2011 | 10514 | } |
| 10515 | + const container = getContainer(); | |
| 10516 | + if (!container) { | |
| 10517 | + return; | |
| 10518 | + } | |
| 10519 | + popup.removeEventListener('animationend', swalOpenAnimationFinished); | |
| 10520 | + popup.removeEventListener('transitionend', swalOpenAnimationFinished); | |
| 10521 | + container.style.overflowY = 'auto'; | |
| 10522 | + | |
| 10523 | + // no-transition is added in init() in case one swal is opened right after another | |
| 10524 | + removeClass(container, swalClasses['no-transition']); | |
| 2012 | 10525 | }; |
| 2013 | 10526 | |
| 2014 | - Cropper.prototype.getAspect = function () { | |
| 2015 | - var _a = this.props, | |
| 2016 | - cropSize = _a.cropSize, | |
| 2017 | - aspect = _a.aspect; | |
| 10527 | + /** | |
| 10528 | + * @param {HTMLElement} container | |
| 10529 | + * @param {HTMLElement} popup | |
| 10530 | + */ | |
| 10531 | + const setScrollingVisibility = (container, popup) => { | |
| 10532 | + if (hasCssAnimation(popup)) { | |
| 10533 | + container.style.overflowY = 'hidden'; | |
| 10534 | + popup.addEventListener('animationend', swalOpenAnimationFinished); | |
| 10535 | + popup.addEventListener('transitionend', swalOpenAnimationFinished); | |
| 10536 | + } else { | |
| 10537 | + container.style.overflowY = 'auto'; | |
| 10538 | + } | |
| 10539 | + }; | |
| 2018 | 10540 | |
| 2019 | - if (cropSize) { | |
| 2020 | - return cropSize.width / cropSize.height; | |
| 10541 | + /** | |
| 10542 | + * @param {HTMLElement} container | |
| 10543 | + * @param {boolean} scrollbarPadding | |
| 10544 | + * @param {string} initialBodyOverflow | |
| 10545 | + */ | |
| 10546 | + const fixScrollContainer = (container, scrollbarPadding, initialBodyOverflow) => { | |
| 10547 | + iOSfix(); | |
| 10548 | + if (scrollbarPadding && initialBodyOverflow !== 'hidden') { | |
| 10549 | + replaceScrollbarWithPadding(initialBodyOverflow); | |
| 2021 | 10550 | } |
| 2022 | 10551 | |
| 2023 | - return aspect; | |
| 10552 | + // sweetalert2/issues/1247 | |
| 10553 | + setTimeout(() => { | |
| 10554 | + container.scrollTop = 0; | |
| 10555 | + }); | |
| 2024 | 10556 | }; |
| 2025 | 10557 | |
| 2026 | - Cropper.prototype.onPinchStart = function (e) { | |
| 2027 | - var pointA = Cropper.getTouchPoint(e.touches[0]); | |
| 2028 | - var pointB = Cropper.getTouchPoint(e.touches[1]); | |
| 2029 | - this.lastPinchDistance = getDistanceBetweenPoints(pointA, pointB); | |
| 2030 | - this.lastPinchRotation = getRotationBetweenPoints(pointA, pointB); | |
| 2031 | - this.onDragStart(getCenter(pointA, pointB)); | |
| 10558 | + /** | |
| 10559 | + * @param {HTMLElement} container | |
| 10560 | + * @param {HTMLElement} popup | |
| 10561 | + * @param {SweetAlertOptions} params | |
| 10562 | + */ | |
| 10563 | + const addClasses = (container, popup, params) => { | |
| 10564 | + var _params$showClass; | |
| 10565 | + if ((_params$showClass = params.showClass) !== null && _params$showClass !== void 0 && _params$showClass.backdrop) { | |
| 10566 | + addClass(container, params.showClass.backdrop); | |
| 10567 | + } | |
| 10568 | + if (params.animation) { | |
| 10569 | + // this workaround with opacity is needed for https://github.com/sweetalert2/sweetalert2/issues/2059 | |
| 10570 | + popup.style.setProperty('opacity', '0', 'important'); | |
| 10571 | + show(popup, 'grid'); | |
| 10572 | + setTimeout(() => { | |
| 10573 | + var _params$showClass2; | |
| 10574 | + // Animate popup right after showing it | |
| 10575 | + if ((_params$showClass2 = params.showClass) !== null && _params$showClass2 !== void 0 && _params$showClass2.popup) { | |
| 10576 | + addClass(popup, params.showClass.popup); | |
| 10577 | + } | |
| 10578 | + // and remove the opacity workaround | |
| 10579 | + popup.style.removeProperty('opacity'); | |
| 10580 | + }, SHOW_CLASS_TIMEOUT); // 10ms in order to fix #2062 | |
| 10581 | + } else { | |
| 10582 | + show(popup, 'grid'); | |
| 10583 | + } | |
| 10584 | + addClass([document.documentElement, document.body], swalClasses.shown); | |
| 10585 | + if (params.heightAuto && params.backdrop && !params.toast) { | |
| 10586 | + addClass([document.documentElement, document.body], swalClasses['height-auto']); | |
| 10587 | + } | |
| 2032 | 10588 | }; |
| 2033 | 10589 | |
| 2034 | - Cropper.prototype.onPinchMove = function (e) { | |
| 2035 | - var _this = this; | |
| 10590 | + var defaultInputValidators = { | |
| 10591 | + /** | |
| 10592 | + * @param {string} string | |
| 10593 | + * @param {string} [validationMessage] | |
| 10594 | + * @returns {Promise<string | void>} | |
| 10595 | + */ | |
| 10596 | + email: (string, validationMessage) => { | |
| 10597 | + return /^[a-zA-Z0-9.+_'-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9-]+$/.test(string) ? Promise.resolve() : Promise.resolve(validationMessage || 'Invalid email address'); | |
| 10598 | + }, | |
| 10599 | + /** | |
| 10600 | + * @param {string} string | |
| 10601 | + * @param {string} [validationMessage] | |
| 10602 | + * @returns {Promise<string | void>} | |
| 10603 | + */ | |
| 10604 | + url: (string, validationMessage) => { | |
| 10605 | + // taken from https://stackoverflow.com/a/3809435 with a small change from #1306 and #2013 | |
| 10606 | + return /^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-z]{2,63}\b([-a-zA-Z0-9@:%_+.~#?&/=]*)$/.test(string) ? Promise.resolve() : Promise.resolve(validationMessage || 'Invalid URL'); | |
| 10607 | + } | |
| 10608 | + }; | |
| 2036 | 10609 | |
| 2037 | - var pointA = Cropper.getTouchPoint(e.touches[0]); | |
| 2038 | - var pointB = Cropper.getTouchPoint(e.touches[1]); | |
| 2039 | - var center = getCenter(pointA, pointB); | |
| 2040 | - this.onDrag(center); | |
| 2041 | - if (this.rafPinchTimeout) window.cancelAnimationFrame(this.rafPinchTimeout); | |
| 2042 | - this.rafPinchTimeout = window.requestAnimationFrame(function () { | |
| 2043 | - var distance = getDistanceBetweenPoints(pointA, pointB); | |
| 2044 | - var newZoom = _this.props.zoom * (distance / _this.lastPinchDistance); | |
| 10610 | + /** | |
| 10611 | + * @param {SweetAlertOptions} params | |
| 10612 | + */ | |
| 10613 | + function setDefaultInputValidators(params) { | |
| 10614 | + // Use default `inputValidator` for supported input types if not provided | |
| 10615 | + if (params.inputValidator) { | |
| 10616 | + return; | |
| 10617 | + } | |
| 10618 | + if (params.input === 'email') { | |
| 10619 | + params.inputValidator = defaultInputValidators['email']; | |
| 10620 | + } | |
| 10621 | + if (params.input === 'url') { | |
| 10622 | + params.inputValidator = defaultInputValidators['url']; | |
| 10623 | + } | |
| 10624 | + } | |
| 2045 | 10625 | |
| 2046 | - _this.setNewZoom(newZoom, center); | |
| 10626 | + /** | |
| 10627 | + * @param {SweetAlertOptions} params | |
| 10628 | + */ | |
| 10629 | + function validateCustomTargetElement(params) { | |
| 10630 | + // Determine if the custom target element is valid | |
| 10631 | + if (!params.target || typeof params.target === 'string' && !document.querySelector(params.target) || typeof params.target !== 'string' && !params.target.appendChild) { | |
| 10632 | + warn('Target parameter is not valid, defaulting to "body"'); | |
| 10633 | + params.target = 'body'; | |
| 10634 | + } | |
| 10635 | + } | |
| 2047 | 10636 | |
| 2048 | - _this.lastPinchDistance = distance; | |
| 2049 | - var rotation = getRotationBetweenPoints(pointA, pointB); | |
| 2050 | - var newRotation = _this.props.rotation + (rotation - _this.lastPinchRotation); | |
| 2051 | - _this.props.onRotationChange && _this.props.onRotationChange(newRotation); | |
| 2052 | - _this.lastPinchRotation = rotation; | |
| 10637 | + /** | |
| 10638 | + * Set type, text and actions on popup | |
| 10639 | + * | |
| 10640 | + * @param {SweetAlertOptions} params | |
| 10641 | + */ | |
| 10642 | + function setParameters(params) { | |
| 10643 | + setDefaultInputValidators(params); | |
| 10644 | + | |
| 10645 | + // showLoaderOnConfirm && preConfirm | |
| 10646 | + if (params.showLoaderOnConfirm && !params.preConfirm) { | |
| 10647 | + warn('showLoaderOnConfirm is set to true, but preConfirm is not defined.\n' + 'showLoaderOnConfirm should be used together with preConfirm, see usage example:\n' + 'https://sweetalert2.github.io/#ajax-request'); | |
| 10648 | + } | |
| 10649 | + validateCustomTargetElement(params); | |
| 10650 | + | |
| 10651 | + // Replace newlines with <br> in title | |
| 10652 | + if (typeof params.title === 'string') { | |
| 10653 | + params.title = params.title.split('\n').join('<br />'); | |
| 10654 | + } | |
| 10655 | + init(params); | |
| 10656 | + } | |
| 10657 | + | |
| 10658 | + /** @type {SweetAlert} */ | |
| 10659 | + let currentInstance; | |
| 10660 | + var _promise = /*#__PURE__*/new WeakMap(); | |
| 10661 | + class SweetAlert { | |
| 10662 | + /** | |
| 10663 | + * @param {...(SweetAlertOptions | string)} args | |
| 10664 | + * @this {SweetAlert} | |
| 10665 | + */ | |
| 10666 | + constructor(...args) { | |
| 10667 | + /** | |
| 10668 | + * @type {Promise<SweetAlertResult>} | |
| 10669 | + */ | |
| 10670 | + _classPrivateFieldInitSpec(this, _promise, /** @type {Promise<SweetAlertResult>} */Promise.resolve({ | |
| 10671 | + isConfirmed: false, | |
| 10672 | + isDenied: false, | |
| 10673 | + isDismissed: true | |
| 10674 | + })); | |
| 10675 | + // Prevent run in Node env | |
| 10676 | + if (typeof window === 'undefined') { | |
| 10677 | + return; | |
| 10678 | + } | |
| 10679 | + currentInstance = this; | |
| 10680 | + | |
| 10681 | + // @ts-ignore | |
| 10682 | + const outerParams = Object.freeze(this.constructor.argsToParams(args)); | |
| 10683 | + | |
| 10684 | + /** @type {Readonly<SweetAlertOptions>} */ | |
| 10685 | + this.params = outerParams; | |
| 10686 | + | |
| 10687 | + /** @type {boolean} */ | |
| 10688 | + this.isAwaitingPromise = false; | |
| 10689 | + _classPrivateFieldSet2(_promise, this, this._main(currentInstance.params)); | |
| 10690 | + } | |
| 10691 | + | |
| 10692 | + /** | |
| 10693 | + * @param {any} userParams | |
| 10694 | + * @param {any} mixinParams | |
| 10695 | + */ | |
| 10696 | + _main(userParams, mixinParams = {}) { | |
| 10697 | + showWarningsForParams(Object.assign({}, mixinParams, userParams)); | |
| 10698 | + if (globalState.currentInstance) { | |
| 10699 | + const swalPromiseResolve = privateMethods.swalPromiseResolve.get(globalState.currentInstance); | |
| 10700 | + const { | |
| 10701 | + isAwaitingPromise | |
| 10702 | + } = globalState.currentInstance; | |
| 10703 | + globalState.currentInstance._destroy(); | |
| 10704 | + if (!isAwaitingPromise) { | |
| 10705 | + swalPromiseResolve({ | |
| 10706 | + isDismissed: true | |
| 10707 | + }); | |
| 10708 | + } | |
| 10709 | + if (isModal()) { | |
| 10710 | + unsetAriaHidden(); | |
| 10711 | + } | |
| 10712 | + } | |
| 10713 | + globalState.currentInstance = currentInstance; | |
| 10714 | + const innerParams = prepareParams(userParams, mixinParams); | |
| 10715 | + setParameters(innerParams); | |
| 10716 | + Object.freeze(innerParams); | |
| 10717 | + | |
| 10718 | + // clear the previous timer | |
| 10719 | + if (globalState.timeout) { | |
| 10720 | + globalState.timeout.stop(); | |
| 10721 | + delete globalState.timeout; | |
| 10722 | + } | |
| 10723 | + | |
| 10724 | + // clear the restore focus timeout | |
| 10725 | + clearTimeout(globalState.restoreFocusTimeout); | |
| 10726 | + const domCache = populateDomCache(currentInstance); | |
| 10727 | + render(currentInstance, innerParams); | |
| 10728 | + privateProps.innerParams.set(currentInstance, innerParams); | |
| 10729 | + return swalPromise(currentInstance, domCache, innerParams); | |
| 10730 | + } | |
| 10731 | + | |
| 10732 | + // `catch` cannot be the name of a module export, so we define our thenable methods here instead | |
| 10733 | + /** | |
| 10734 | + * @param {any} onFulfilled | |
| 10735 | + */ | |
| 10736 | + then(onFulfilled) { | |
| 10737 | + return _classPrivateFieldGet2(_promise, this).then(onFulfilled); | |
| 10738 | + } | |
| 10739 | + | |
| 10740 | + /** | |
| 10741 | + * @param {any} onFinally | |
| 10742 | + */ | |
| 10743 | + finally(onFinally) { | |
| 10744 | + return _classPrivateFieldGet2(_promise, this).finally(onFinally); | |
| 10745 | + } | |
| 10746 | + } | |
| 10747 | + | |
| 10748 | + /** | |
| 10749 | + * @param {SweetAlert} instance | |
| 10750 | + * @param {DomCache} domCache | |
| 10751 | + * @param {SweetAlertOptions} innerParams | |
| 10752 | + * @returns {Promise<SweetAlertResult>} | |
| 10753 | + */ | |
| 10754 | + const swalPromise = (instance, domCache, innerParams) => { | |
| 10755 | + return new Promise((resolve, reject) => { | |
| 10756 | + // functions to handle all closings/dismissals | |
| 10757 | + /** | |
| 10758 | + * @param {DismissReason} dismiss | |
| 10759 | + */ | |
| 10760 | + const dismissWith = dismiss => { | |
| 10761 | + instance.close({ | |
| 10762 | + isDismissed: true, | |
| 10763 | + dismiss, | |
| 10764 | + isConfirmed: false, | |
| 10765 | + isDenied: false | |
| 10766 | + }); | |
| 10767 | + }; | |
| 10768 | + privateMethods.swalPromiseResolve.set(instance, resolve); | |
| 10769 | + privateMethods.swalPromiseReject.set(instance, reject); | |
| 10770 | + domCache.confirmButton.onclick = () => { | |
| 10771 | + handleConfirmButtonClick(instance); | |
| 10772 | + }; | |
| 10773 | + domCache.denyButton.onclick = () => { | |
| 10774 | + handleDenyButtonClick(instance); | |
| 10775 | + }; | |
| 10776 | + domCache.cancelButton.onclick = () => { | |
| 10777 | + handleCancelButtonClick(instance, dismissWith); | |
| 10778 | + }; | |
| 10779 | + domCache.closeButton.onclick = () => { | |
| 10780 | + dismissWith(DismissReason.close); | |
| 10781 | + }; | |
| 10782 | + handlePopupClick(innerParams, domCache, dismissWith); | |
| 10783 | + addKeydownHandler(globalState, innerParams, dismissWith); | |
| 10784 | + handleInputOptionsAndValue(instance, innerParams); | |
| 10785 | + openPopup(innerParams); | |
| 10786 | + setupTimer(globalState, innerParams, dismissWith); | |
| 10787 | + initFocus(domCache, innerParams); | |
| 10788 | + | |
| 10789 | + // Scroll container to top on open (#1247, #1946) | |
| 10790 | + setTimeout(() => { | |
| 10791 | + domCache.container.scrollTop = 0; | |
| 10792 | + }); | |
| 2053 | 10793 | }); |
| 2054 | 10794 | }; |
| 2055 | 10795 | |
| 2056 | - Cropper.prototype.render = function () { | |
| 2057 | - var _this = this; | |
| 10796 | + /** | |
| 10797 | + * @param {SweetAlertOptions} userParams | |
| 10798 | + * @param {SweetAlertOptions} mixinParams | |
| 10799 | + * @returns {SweetAlertOptions} | |
| 10800 | + */ | |
| 10801 | + const prepareParams = (userParams, mixinParams) => { | |
| 10802 | + const templateParams = getTemplateParams(userParams); | |
| 10803 | + const params = Object.assign({}, defaultParams, mixinParams, templateParams, userParams); // precedence is described in #2131 | |
| 10804 | + params.showClass = Object.assign({}, defaultParams.showClass, params.showClass); | |
| 10805 | + params.hideClass = Object.assign({}, defaultParams.hideClass, params.hideClass); | |
| 10806 | + if (params.animation === false) { | |
| 10807 | + params.showClass = { | |
| 10808 | + backdrop: 'swal2-noanimation' | |
| 10809 | + }; | |
| 10810 | + params.hideClass = {}; | |
| 10811 | + } | |
| 10812 | + return params; | |
| 10813 | + }; | |
| 2058 | 10814 | |
| 2059 | - var _a = this.props, | |
| 2060 | - image = _a.image, | |
| 2061 | - video = _a.video, | |
| 2062 | - mediaProps = _a.mediaProps, | |
| 2063 | - transform = _a.transform, | |
| 2064 | - _b = _a.crop, | |
| 2065 | - x = _b.x, | |
| 2066 | - y = _b.y, | |
| 2067 | - rotation = _a.rotation, | |
| 2068 | - zoom = _a.zoom, | |
| 2069 | - cropShape = _a.cropShape, | |
| 2070 | - showGrid = _a.showGrid, | |
| 2071 | - _c = _a.style, | |
| 2072 | - containerStyle = _c.containerStyle, | |
| 2073 | - cropAreaStyle = _c.cropAreaStyle, | |
| 2074 | - mediaStyle = _c.mediaStyle, | |
| 2075 | - _d = _a.classes, | |
| 2076 | - containerClassName = _d.containerClassName, | |
| 2077 | - cropAreaClassName = _d.cropAreaClassName, | |
| 2078 | - mediaClassName = _d.mediaClassName, | |
| 2079 | - objectFit = _a.objectFit; | |
| 2080 | - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { | |
| 2081 | - onMouseDown: this.onMouseDown, | |
| 2082 | - onTouchStart: this.onTouchStart, | |
| 2083 | - ref: function ref(el) { | |
| 2084 | - return _this.containerRef = el; | |
| 2085 | - }, | |
| 2086 | - "data-testid": "container", | |
| 2087 | - style: containerStyle, | |
| 2088 | - className: classNames('reactEasyCrop_Container', containerClassName) | |
| 2089 | - }, image ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("img", (0,tslib__WEBPACK_IMPORTED_MODULE_2__.__assign)({ | |
| 2090 | - alt: "", | |
| 2091 | - className: classNames('reactEasyCrop_Image', objectFit === 'contain' && 'reactEasyCrop_Contain', objectFit === 'horizontal-cover' && 'reactEasyCrop_Cover_Horizontal', objectFit === 'vertical-cover' && 'reactEasyCrop_Cover_Vertical', objectFit === 'auto-cover' && (this.mediaSize.naturalWidth > this.mediaSize.naturalHeight ? 'reactEasyCrop_Cover_Horizontal' : 'reactEasyCrop_Cover_Vertical'), mediaClassName) | |
| 2092 | - }, mediaProps, { | |
| 2093 | - src: image, | |
| 2094 | - ref: this.imageRef, | |
| 2095 | - style: (0,tslib__WEBPACK_IMPORTED_MODULE_2__.__assign)((0,tslib__WEBPACK_IMPORTED_MODULE_2__.__assign)({}, mediaStyle), { | |
| 2096 | - transform: transform || "translate(" + x + "px, " + y + "px) rotate(" + rotation + "deg) scale(" + zoom + ")" | |
| 2097 | - }), | |
| 2098 | - onLoad: this.onMediaLoad | |
| 2099 | - })) : video && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("video", (0,tslib__WEBPACK_IMPORTED_MODULE_2__.__assign)({ | |
| 2100 | - autoPlay: true, | |
| 2101 | - loop: true, | |
| 2102 | - muted: true, | |
| 2103 | - className: classNames('reactEasyCrop_Video', objectFit === 'contain' && 'reactEasyCrop_Contain', objectFit === 'horizontal-cover' && 'reactEasyCrop_Cover_Horizontal', objectFit === 'vertical-cover' && 'reactEasyCrop_Cover_Vertical', objectFit === 'auto-cover' && (this.mediaSize.naturalWidth > this.mediaSize.naturalHeight ? 'reactEasyCrop_Cover_Horizontal' : 'reactEasyCrop_Cover_Vertical'), mediaClassName) | |
| 2104 | - }, mediaProps, { | |
| 2105 | - ref: this.videoRef, | |
| 2106 | - onLoadedMetadata: this.onMediaLoad, | |
| 2107 | - style: (0,tslib__WEBPACK_IMPORTED_MODULE_2__.__assign)((0,tslib__WEBPACK_IMPORTED_MODULE_2__.__assign)({}, mediaStyle), { | |
| 2108 | - transform: transform || "translate(" + x + "px, " + y + "px) rotate(" + rotation + "deg) scale(" + zoom + ")" | |
| 2109 | - }), | |
| 2110 | - controls: false | |
| 2111 | - }), (Array.isArray(video) ? video : [{ | |
| 2112 | - src: video | |
| 2113 | - }]).map(function (item) { | |
| 2114 | - return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("source", (0,tslib__WEBPACK_IMPORTED_MODULE_2__.__assign)({ | |
| 2115 | - key: item.src | |
| 2116 | - }, item)); | |
| 2117 | - })), this.state.cropSize && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { | |
| 2118 | - style: (0,tslib__WEBPACK_IMPORTED_MODULE_2__.__assign)((0,tslib__WEBPACK_IMPORTED_MODULE_2__.__assign)({}, cropAreaStyle), { | |
| 2119 | - width: this.state.cropSize.width, | |
| 2120 | - height: this.state.cropSize.height | |
| 2121 | - }), | |
| 2122 | - "data-testid": "cropper", | |
| 2123 | - className: classNames('reactEasyCrop_CropArea', cropShape === 'round' && 'reactEasyCrop_CropAreaRound', showGrid && 'reactEasyCrop_CropAreaGrid', cropAreaClassName) | |
| 2124 | - })); | |
| 10815 | + /** | |
| 10816 | + * @param {SweetAlert} instance | |
| 10817 | + * @returns {DomCache} | |
| 10818 | + */ | |
| 10819 | + const populateDomCache = instance => { | |
| 10820 | + const domCache = /** @type {DomCache} */{ | |
| 10821 | + popup: (/** @type {HTMLElement} */getPopup()), | |
| 10822 | + container: (/** @type {HTMLElement} */getContainer()), | |
| 10823 | + actions: (/** @type {HTMLElement} */getActions()), | |
| 10824 | + confirmButton: (/** @type {HTMLElement} */getConfirmButton()), | |
| 10825 | + denyButton: (/** @type {HTMLElement} */getDenyButton()), | |
| 10826 | + cancelButton: (/** @type {HTMLElement} */getCancelButton()), | |
| 10827 | + loader: (/** @type {HTMLElement} */getLoader()), | |
| 10828 | + closeButton: (/** @type {HTMLElement} */getCloseButton()), | |
| 10829 | + validationMessage: (/** @type {HTMLElement} */getValidationMessage()), | |
| 10830 | + progressSteps: (/** @type {HTMLElement} */getProgressSteps()) | |
| 10831 | + }; | |
| 10832 | + privateProps.domCache.set(instance, domCache); | |
| 10833 | + return domCache; | |
| 2125 | 10834 | }; |
| 2126 | 10835 | |
| 2127 | - Cropper.defaultProps = { | |
| 2128 | - zoom: 1, | |
| 2129 | - rotation: 0, | |
| 2130 | - aspect: 4 / 3, | |
| 2131 | - maxZoom: MAX_ZOOM, | |
| 2132 | - minZoom: MIN_ZOOM, | |
| 2133 | - cropShape: 'rect', | |
| 2134 | - objectFit: 'contain', | |
| 2135 | - showGrid: true, | |
| 2136 | - style: {}, | |
| 2137 | - classes: {}, | |
| 2138 | - mediaProps: {}, | |
| 2139 | - zoomSpeed: 1, | |
| 2140 | - restrictPosition: true, | |
| 2141 | - zoomWithScroll: true | |
| 10836 | + /** | |
| 10837 | + * @param {GlobalState} globalState | |
| 10838 | + * @param {SweetAlertOptions} innerParams | |
| 10839 | + * @param {(dismiss: DismissReason) => void} dismissWith | |
| 10840 | + */ | |
| 10841 | + const setupTimer = (globalState, innerParams, dismissWith) => { | |
| 10842 | + const timerProgressBar = getTimerProgressBar(); | |
| 10843 | + hide(timerProgressBar); | |
| 10844 | + if (innerParams.timer) { | |
| 10845 | + globalState.timeout = new Timer(() => { | |
| 10846 | + dismissWith('timer'); | |
| 10847 | + delete globalState.timeout; | |
| 10848 | + }, innerParams.timer); | |
| 10849 | + if (innerParams.timerProgressBar && timerProgressBar) { | |
| 10850 | + show(timerProgressBar); | |
| 10851 | + applyCustomClass(timerProgressBar, innerParams, 'timerProgressBar'); | |
| 10852 | + setTimeout(() => { | |
| 10853 | + if (globalState.timeout && globalState.timeout.running) { | |
| 10854 | + // timer can be already stopped or unset at this point | |
| 10855 | + animateTimerProgressBar(/** @type {number} */innerParams.timer); | |
| 10856 | + } | |
| 10857 | + }); | |
| 10858 | + } | |
| 10859 | + } | |
| 2142 | 10860 | }; |
| 2143 | 10861 | |
| 2144 | - Cropper.getMousePoint = function (e) { | |
| 2145 | - return { | |
| 2146 | - x: Number(e.clientX), | |
| 2147 | - y: Number(e.clientY) | |
| 10862 | + /** | |
| 10863 | + * Initialize focus in the popup: | |
| 10864 | + * | |
| 10865 | + * 1. If `toast` is `true`, don't steal focus from the document. | |
| 10866 | + * 2. Else if there is an [autofocus] element, focus it. | |
| 10867 | + * 3. Else if `focusConfirm` is `true` and confirm button is visible, focus it. | |
| 10868 | + * 4. Else if `focusDeny` is `true` and deny button is visible, focus it. | |
| 10869 | + * 5. Else if `focusCancel` is `true` and cancel button is visible, focus it. | |
| 10870 | + * 6. Else focus the first focusable element in a popup (if any). | |
| 10871 | + * | |
| 10872 | + * @param {DomCache} domCache | |
| 10873 | + * @param {SweetAlertOptions} innerParams | |
| 10874 | + */ | |
| 10875 | + const initFocus = (domCache, innerParams) => { | |
| 10876 | + if (innerParams.toast) { | |
| 10877 | + return; | |
| 10878 | + } | |
| 10879 | + // TODO: this is dumb, remove `allowEnterKey` param in the next major version | |
| 10880 | + if (!callIfFunction(innerParams.allowEnterKey)) { | |
| 10881 | + warnAboutDeprecation('allowEnterKey'); | |
| 10882 | + blurActiveElement(); | |
| 10883 | + return; | |
| 10884 | + } | |
| 10885 | + if (focusAutofocus(domCache)) { | |
| 10886 | + return; | |
| 10887 | + } | |
| 10888 | + if (focusButton(domCache, innerParams)) { | |
| 10889 | + return; | |
| 10890 | + } | |
| 10891 | + setFocus(-1, 1); | |
| 10892 | + }; | |
| 10893 | + | |
| 10894 | + /** | |
| 10895 | + * @param {DomCache} domCache | |
| 10896 | + * @returns {boolean} | |
| 10897 | + */ | |
| 10898 | + const focusAutofocus = domCache => { | |
| 10899 | + const autofocusElements = Array.from(domCache.popup.querySelectorAll('[autofocus]')); | |
| 10900 | + for (const autofocusElement of autofocusElements) { | |
| 10901 | + if (autofocusElement instanceof HTMLElement && isVisible$1(autofocusElement)) { | |
| 10902 | + autofocusElement.focus(); | |
| 10903 | + return true; | |
| 10904 | + } | |
| 10905 | + } | |
| 10906 | + return false; | |
| 10907 | + }; | |
| 10908 | + | |
| 10909 | + /** | |
| 10910 | + * @param {DomCache} domCache | |
| 10911 | + * @param {SweetAlertOptions} innerParams | |
| 10912 | + * @returns {boolean} | |
| 10913 | + */ | |
| 10914 | + const focusButton = (domCache, innerParams) => { | |
| 10915 | + if (innerParams.focusDeny && isVisible$1(domCache.denyButton)) { | |
| 10916 | + domCache.denyButton.focus(); | |
| 10917 | + return true; | |
| 10918 | + } | |
| 10919 | + if (innerParams.focusCancel && isVisible$1(domCache.cancelButton)) { | |
| 10920 | + domCache.cancelButton.focus(); | |
| 10921 | + return true; | |
| 10922 | + } | |
| 10923 | + if (innerParams.focusConfirm && isVisible$1(domCache.confirmButton)) { | |
| 10924 | + domCache.confirmButton.focus(); | |
| 10925 | + return true; | |
| 10926 | + } | |
| 10927 | + return false; | |
| 10928 | + }; | |
| 10929 | + const blurActiveElement = () => { | |
| 10930 | + if (document.activeElement instanceof HTMLElement && typeof document.activeElement.blur === 'function') { | |
| 10931 | + document.activeElement.blur(); | |
| 10932 | + } | |
| 10933 | + }; | |
| 10934 | + | |
| 10935 | + // Assign instance methods from src/instanceMethods/*.js to prototype | |
| 10936 | + SweetAlert.prototype.disableButtons = disableButtons; | |
| 10937 | + SweetAlert.prototype.enableButtons = enableButtons; | |
| 10938 | + SweetAlert.prototype.getInput = getInput; | |
| 10939 | + SweetAlert.prototype.disableInput = disableInput; | |
| 10940 | + SweetAlert.prototype.enableInput = enableInput; | |
| 10941 | + SweetAlert.prototype.hideLoading = hideLoading; | |
| 10942 | + SweetAlert.prototype.disableLoading = hideLoading; | |
| 10943 | + SweetAlert.prototype.showValidationMessage = showValidationMessage; | |
| 10944 | + SweetAlert.prototype.resetValidationMessage = resetValidationMessage; | |
| 10945 | + SweetAlert.prototype.close = close; | |
| 10946 | + SweetAlert.prototype.closePopup = close; | |
| 10947 | + SweetAlert.prototype.closeModal = close; | |
| 10948 | + SweetAlert.prototype.closeToast = close; | |
| 10949 | + SweetAlert.prototype.rejectPromise = rejectPromise; | |
| 10950 | + SweetAlert.prototype.update = update; | |
| 10951 | + SweetAlert.prototype._destroy = _destroy; | |
| 10952 | + | |
| 10953 | + // Assign static methods from src/staticMethods/*.js to constructor | |
| 10954 | + Object.assign(SweetAlert, staticMethods); | |
| 10955 | + | |
| 10956 | + // Proxy to instance methods to constructor, for now, for backwards compatibility | |
| 10957 | + Object.keys(instanceMethods).forEach(key => { | |
| 10958 | + /** | |
| 10959 | + * @param {...(SweetAlertOptions | string | undefined)} args | |
| 10960 | + * @returns {SweetAlertResult | Promise<SweetAlertResult> | undefined} | |
| 10961 | + */ | |
| 10962 | + // @ts-ignore: Dynamic property assignment for backwards compatibility | |
| 10963 | + SweetAlert[key] = function (...args) { | |
| 10964 | + // @ts-ignore | |
| 10965 | + if (currentInstance && currentInstance[key]) { | |
| 10966 | + // @ts-ignore | |
| 10967 | + return currentInstance[key](...args); | |
| 10968 | + } | |
| 10969 | + return undefined; | |
| 2148 | 10970 | }; |
| 10971 | + }); | |
| 10972 | + SweetAlert.DismissReason = DismissReason; | |
| 10973 | + SweetAlert.version = '11.26.17'; | |
| 10974 | + | |
| 10975 | + const Swal = SweetAlert; | |
| 10976 | + // @ts-ignore | |
| 10977 | + Swal.default = Swal; | |
| 10978 | + | |
| 10979 | + return Swal; | |
| 10980 | + | |
| 10981 | +})); | |
| 10982 | +if (typeof this !== 'undefined' && this.Sweetalert2){this.swal = this.sweetAlert = this.Swal = this.SweetAlert = this.Sweetalert2} | |
| 10983 | +"undefined"!=typeof document&&function(e,t){var n=e.createElement("style");if(e.getElementsByTagName("head")[0].appendChild(n),n.styleSheet)n.styleSheet.disabled||(n.styleSheet.cssText=t);else try{n.innerHTML=t}catch(e){n.innerText=t}}(document,":root{--swal2-outline: 0 0 0 3px rgba(100, 150, 200, 0.5);--swal2-container-padding: 0.625em;--swal2-backdrop: rgba(0, 0, 0, 0.4);--swal2-backdrop-transition: background-color 0.15s;--swal2-width: 32em;--swal2-padding: 0 0 1.25em;--swal2-border: none;--swal2-border-radius: 0.3125rem;--swal2-background: white;--swal2-color: #545454;--swal2-show-animation: swal2-show 0.3s;--swal2-hide-animation: swal2-hide 0.15s forwards;--swal2-icon-zoom: 1;--swal2-icon-animations: true;--swal2-title-padding: 0.8em 1em 0;--swal2-html-container-padding: 1em 1.6em 0.3em;--swal2-input-border: 1px solid #d9d9d9;--swal2-input-border-radius: 0.1875em;--swal2-input-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.06), 0 0 0 3px transparent;--swal2-input-background: transparent;--swal2-input-transition: border-color 0.2s, box-shadow 0.2s;--swal2-input-hover-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.06), 0 0 0 3px transparent;--swal2-input-focus-border: 1px solid #b4dbed;--swal2-input-focus-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.06), 0 0 0 3px rgba(100, 150, 200, 0.5);--swal2-progress-step-background: #add8e6;--swal2-validation-message-background: #f0f0f0;--swal2-validation-message-color: #666;--swal2-footer-border-color: #eee;--swal2-footer-background: transparent;--swal2-footer-color: inherit;--swal2-timer-progress-bar-background: rgba(0, 0, 0, 0.3);--swal2-close-button-position: initial;--swal2-close-button-inset: auto;--swal2-close-button-font-size: 2.5em;--swal2-close-button-color: #ccc;--swal2-close-button-transition: color 0.2s, box-shadow 0.2s;--swal2-close-button-outline: initial;--swal2-close-button-box-shadow: inset 0 0 0 3px transparent;--swal2-close-button-focus-box-shadow: inset var(--swal2-outline);--swal2-close-button-hover-transform: none;--swal2-actions-justify-content: center;--swal2-actions-width: auto;--swal2-actions-margin: 1.25em auto 0;--swal2-actions-padding: 0;--swal2-actions-border-radius: 0;--swal2-actions-background: transparent;--swal2-action-button-transition: background-color 0.2s, box-shadow 0.2s;--swal2-action-button-hover: black 10%;--swal2-action-button-active: black 10%;--swal2-confirm-button-box-shadow: none;--swal2-confirm-button-border-radius: 0.25em;--swal2-confirm-button-background-color: #7066e0;--swal2-confirm-button-color: #fff;--swal2-deny-button-box-shadow: none;--swal2-deny-button-border-radius: 0.25em;--swal2-deny-button-background-color: #dc3741;--swal2-deny-button-color: #fff;--swal2-cancel-button-box-shadow: none;--swal2-cancel-button-border-radius: 0.25em;--swal2-cancel-button-background-color: #6e7881;--swal2-cancel-button-color: #fff;--swal2-toast-show-animation: swal2-toast-show 0.5s;--swal2-toast-hide-animation: swal2-toast-hide 0.1s forwards;--swal2-toast-border: none;--swal2-toast-box-shadow: 0 0 1px hsl(0deg 0% 0% / 0.075), 0 1px 2px hsl(0deg 0% 0% / 0.075), 1px 2px 4px hsl(0deg 0% 0% / 0.075), 1px 3px 8px hsl(0deg 0% 0% / 0.075), 2px 4px 16px hsl(0deg 0% 0% / 0.075)}[data-swal2-theme=dark]{--swal2-dark-theme-black: #19191a;--swal2-dark-theme-white: #e1e1e1;--swal2-background: var(--swal2-dark-theme-black);--swal2-color: var(--swal2-dark-theme-white);--swal2-footer-border-color: #555;--swal2-input-background: color-mix(in srgb, var(--swal2-dark-theme-black), var(--swal2-dark-theme-white) 10%);--swal2-validation-message-background: color-mix( in srgb, var(--swal2-dark-theme-black), var(--swal2-dark-theme-white) 10% );--swal2-validation-message-color: var(--swal2-dark-theme-white);--swal2-timer-progress-bar-background: rgba(255, 255, 255, 0.7)}@media(prefers-color-scheme: dark){[data-swal2-theme=auto]{--swal2-dark-theme-black: #19191a;--swal2-dark-theme-white: #e1e1e1;--swal2-background: var(--swal2-dark-theme-black);--swal2-color: var(--swal2-dark-theme-white);--swal2-footer-border-color: #555;--swal2-input-background: color-mix(in srgb, var(--swal2-dark-theme-black), var(--swal2-dark-theme-white) 10%);--swal2-validation-message-background: color-mix( in srgb, var(--swal2-dark-theme-black), var(--swal2-dark-theme-white) 10% );--swal2-validation-message-color: var(--swal2-dark-theme-white);--swal2-timer-progress-bar-background: rgba(255, 255, 255, 0.7)}}body.swal2-shown:not(.swal2-no-backdrop,.swal2-toast-shown){overflow:hidden}body.swal2-height-auto{height:auto !important}body.swal2-no-backdrop .swal2-container{background-color:rgba(0,0,0,0) !important;pointer-events:none}body.swal2-no-backdrop .swal2-container .swal2-popup{pointer-events:all}body.swal2-no-backdrop .swal2-container .swal2-modal{box-shadow:0 0 10px var(--swal2-backdrop)}body.swal2-toast-shown .swal2-container{box-sizing:border-box;width:360px;max-width:100%;background-color:rgba(0,0,0,0);pointer-events:none}body.swal2-toast-shown .swal2-container.swal2-top{inset:0 auto auto 50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-top-end,body.swal2-toast-shown .swal2-container.swal2-top-right{inset:0 0 auto auto}body.swal2-toast-shown .swal2-container.swal2-top-start,body.swal2-toast-shown .swal2-container.swal2-top-left{inset:0 auto auto 0}body.swal2-toast-shown .swal2-container.swal2-center-start,body.swal2-toast-shown .swal2-container.swal2-center-left{inset:50% auto auto 0;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-center{inset:50% auto auto 50%;transform:translate(-50%, -50%)}body.swal2-toast-shown .swal2-container.swal2-center-end,body.swal2-toast-shown .swal2-container.swal2-center-right{inset:50% 0 auto auto;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-start,body.swal2-toast-shown .swal2-container.swal2-bottom-left{inset:auto auto 0 0}body.swal2-toast-shown .swal2-container.swal2-bottom{inset:auto auto 0 50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-end,body.swal2-toast-shown .swal2-container.swal2-bottom-right{inset:auto 0 0 auto}@media print{body.swal2-shown:not(.swal2-no-backdrop,.swal2-toast-shown){overflow-y:scroll !important}body.swal2-shown:not(.swal2-no-backdrop,.swal2-toast-shown)>[aria-hidden=true]{display:none}body.swal2-shown:not(.swal2-no-backdrop,.swal2-toast-shown) .swal2-container{position:static !important}}div:where(.swal2-container){display:grid;position:fixed;z-index:1060;inset:0;box-sizing:border-box;grid-template-areas:\"top-start top top-end\" \"center-start center center-end\" \"bottom-start bottom-center bottom-end\";grid-template-rows:minmax(min-content, auto) minmax(min-content, auto) minmax(min-content, auto);height:100%;padding:var(--swal2-container-padding);overflow-x:hidden;transition:var(--swal2-backdrop-transition);-webkit-overflow-scrolling:touch}div:where(.swal2-container).swal2-backdrop-show,div:where(.swal2-container).swal2-noanimation{background:var(--swal2-backdrop)}div:where(.swal2-container).swal2-backdrop-hide{background:rgba(0,0,0,0) !important}div:where(.swal2-container).swal2-top-start,div:where(.swal2-container).swal2-center-start,div:where(.swal2-container).swal2-bottom-start{grid-template-columns:minmax(0, 1fr) auto auto}div:where(.swal2-container).swal2-top,div:where(.swal2-container).swal2-center,div:where(.swal2-container).swal2-bottom{grid-template-columns:auto minmax(0, 1fr) auto}div:where(.swal2-container).swal2-top-end,div:where(.swal2-container).swal2-center-end,div:where(.swal2-container).swal2-bottom-end{grid-template-columns:auto auto minmax(0, 1fr)}div:where(.swal2-container).swal2-top-start>.swal2-popup{align-self:start}div:where(.swal2-container).swal2-top>.swal2-popup{grid-column:2;place-self:start center}div:where(.swal2-container).swal2-top-end>.swal2-popup,div:where(.swal2-container).swal2-top-right>.swal2-popup{grid-column:3;place-self:start end}div:where(.swal2-container).swal2-center-start>.swal2-popup,div:where(.swal2-container).swal2-center-left>.swal2-popup{grid-row:2;align-self:center}div:where(.swal2-container).swal2-center>.swal2-popup{grid-column:2;grid-row:2;place-self:center center}div:where(.swal2-container).swal2-center-end>.swal2-popup,div:where(.swal2-container).swal2-center-right>.swal2-popup{grid-column:3;grid-row:2;place-self:center end}div:where(.swal2-container).swal2-bottom-start>.swal2-popup,div:where(.swal2-container).swal2-bottom-left>.swal2-popup{grid-column:1;grid-row:3;align-self:end}div:where(.swal2-container).swal2-bottom>.swal2-popup{grid-column:2;grid-row:3;place-self:end center}div:where(.swal2-container).swal2-bottom-end>.swal2-popup,div:where(.swal2-container).swal2-bottom-right>.swal2-popup{grid-column:3;grid-row:3;place-self:end end}div:where(.swal2-container).swal2-grow-row>.swal2-popup,div:where(.swal2-container).swal2-grow-fullscreen>.swal2-popup{grid-column:1/4;width:100%}div:where(.swal2-container).swal2-grow-column>.swal2-popup,div:where(.swal2-container).swal2-grow-fullscreen>.swal2-popup{grid-row:1/4;align-self:stretch}div:where(.swal2-container).swal2-no-transition{transition:none !important}div:where(.swal2-container)[popover]{width:auto;border:0}div:where(.swal2-container) div:where(.swal2-popup){display:none;position:relative;box-sizing:border-box;grid-template-columns:minmax(0, 100%);width:var(--swal2-width);max-width:100%;padding:var(--swal2-padding);border:var(--swal2-border);border-radius:var(--swal2-border-radius);background:var(--swal2-background);color:var(--swal2-color);font-family:inherit;font-size:1rem;container-name:swal2-popup}div:where(.swal2-container) div:where(.swal2-popup):focus{outline:none}div:where(.swal2-container) div:where(.swal2-popup).swal2-loading{overflow-y:hidden}div:where(.swal2-container) div:where(.swal2-popup).swal2-draggable{cursor:grab}div:where(.swal2-container) div:where(.swal2-popup).swal2-draggable div:where(.swal2-icon){cursor:grab}div:where(.swal2-container) div:where(.swal2-popup).swal2-dragging{cursor:grabbing}div:where(.swal2-container) div:where(.swal2-popup).swal2-dragging div:where(.swal2-icon){cursor:grabbing}div:where(.swal2-container) h2:where(.swal2-title){position:relative;max-width:100%;margin:0;padding:var(--swal2-title-padding);color:inherit;font-size:1.875em;font-weight:600;text-align:center;text-transform:none;overflow-wrap:break-word;cursor:initial}div:where(.swal2-container) div:where(.swal2-actions){display:flex;z-index:1;box-sizing:border-box;flex-wrap:wrap;align-items:center;justify-content:var(--swal2-actions-justify-content);width:var(--swal2-actions-width);margin:var(--swal2-actions-margin);padding:var(--swal2-actions-padding);border-radius:var(--swal2-actions-border-radius);background:var(--swal2-actions-background)}div:where(.swal2-container) div:where(.swal2-loader){display:none;align-items:center;justify-content:center;width:2.2em;height:2.2em;margin:0 1.875em;animation:swal2-rotate-loading 1.5s linear 0s infinite normal;border-width:.25em;border-style:solid;border-radius:100%;border-color:#2778c4 rgba(0,0,0,0) #2778c4 rgba(0,0,0,0)}div:where(.swal2-container) button:where(.swal2-styled){margin:.3125em;padding:.625em 1.1em;transition:var(--swal2-action-button-transition);border:none;box-shadow:0 0 0 3px rgba(0,0,0,0);font-weight:500}div:where(.swal2-container) button:where(.swal2-styled):not([disabled]){cursor:pointer}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-confirm){border-radius:var(--swal2-confirm-button-border-radius);background:initial;background-color:var(--swal2-confirm-button-background-color);box-shadow:var(--swal2-confirm-button-box-shadow);color:var(--swal2-confirm-button-color);font-size:1em}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-confirm):hover{background-color:color-mix(in srgb, var(--swal2-confirm-button-background-color), var(--swal2-action-button-hover))}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-confirm):active{background-color:color-mix(in srgb, var(--swal2-confirm-button-background-color), var(--swal2-action-button-active))}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-deny){border-radius:var(--swal2-deny-button-border-radius);background:initial;background-color:var(--swal2-deny-button-background-color);box-shadow:var(--swal2-deny-button-box-shadow);color:var(--swal2-deny-button-color);font-size:1em}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-deny):hover{background-color:color-mix(in srgb, var(--swal2-deny-button-background-color), var(--swal2-action-button-hover))}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-deny):active{background-color:color-mix(in srgb, var(--swal2-deny-button-background-color), var(--swal2-action-button-active))}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-cancel){border-radius:var(--swal2-cancel-button-border-radius);background:initial;background-color:var(--swal2-cancel-button-background-color);box-shadow:var(--swal2-cancel-button-box-shadow);color:var(--swal2-cancel-button-color);font-size:1em}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-cancel):hover{background-color:color-mix(in srgb, var(--swal2-cancel-button-background-color), var(--swal2-action-button-hover))}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-cancel):active{background-color:color-mix(in srgb, var(--swal2-cancel-button-background-color), var(--swal2-action-button-active))}div:where(.swal2-container) button:where(.swal2-styled):focus-visible{outline:none;box-shadow:var(--swal2-action-button-focus-box-shadow)}div:where(.swal2-container) button:where(.swal2-styled)[disabled]:not(.swal2-loading){opacity:.4}div:where(.swal2-container) button:where(.swal2-styled)::-moz-focus-inner{border:0}div:where(.swal2-container) div:where(.swal2-footer){margin:1em 0 0;padding:1em 1em 0;border-top:1px solid var(--swal2-footer-border-color);background:var(--swal2-footer-background);color:var(--swal2-footer-color);font-size:1em;text-align:center;cursor:initial}div:where(.swal2-container) .swal2-timer-progress-bar-container{position:absolute;right:0;bottom:0;left:0;grid-column:auto !important;overflow:hidden;border-bottom-right-radius:var(--swal2-border-radius);border-bottom-left-radius:var(--swal2-border-radius)}div:where(.swal2-container) div:where(.swal2-timer-progress-bar){width:100%;height:.25em;background:var(--swal2-timer-progress-bar-background)}div:where(.swal2-container) img:where(.swal2-image){max-width:100%;margin:2em auto 1em;cursor:initial}div:where(.swal2-container) button:where(.swal2-close){position:var(--swal2-close-button-position);inset:var(--swal2-close-button-inset);z-index:2;align-items:center;justify-content:center;width:1.2em;height:1.2em;margin-top:0;margin-right:0;margin-bottom:-1.2em;padding:0;overflow:hidden;transition:var(--swal2-close-button-transition);border:none;border-radius:var(--swal2-border-radius);outline:var(--swal2-close-button-outline);background:rgba(0,0,0,0);color:var(--swal2-close-button-color);font-family:monospace;font-size:var(--swal2-close-button-font-size);cursor:pointer;justify-self:end}div:where(.swal2-container) button:where(.swal2-close):hover{transform:var(--swal2-close-button-hover-transform);background:rgba(0,0,0,0);color:#f27474}div:where(.swal2-container) button:where(.swal2-close):focus-visible{outline:none;box-shadow:var(--swal2-close-button-focus-box-shadow)}div:where(.swal2-container) button:where(.swal2-close)::-moz-focus-inner{border:0}div:where(.swal2-container) div:where(.swal2-html-container){z-index:1;justify-content:center;margin:0;padding:var(--swal2-html-container-padding);overflow:auto;color:inherit;font-size:1.125em;font-weight:normal;line-height:normal;text-align:center;overflow-wrap:break-word;word-break:break-word;cursor:initial}div:where(.swal2-container) input:where(.swal2-input),div:where(.swal2-container) input:where(.swal2-file),div:where(.swal2-container) textarea:where(.swal2-textarea),div:where(.swal2-container) select:where(.swal2-select),div:where(.swal2-container) div:where(.swal2-radio),div:where(.swal2-container) label:where(.swal2-checkbox){margin:1em 2em 3px}div:where(.swal2-container) input:where(.swal2-input),div:where(.swal2-container) input:where(.swal2-file),div:where(.swal2-container) textarea:where(.swal2-textarea){box-sizing:border-box;width:auto;transition:var(--swal2-input-transition);border:var(--swal2-input-border);border-radius:var(--swal2-input-border-radius);background:var(--swal2-input-background);box-shadow:var(--swal2-input-box-shadow);color:inherit;font-size:1.125em}div:where(.swal2-container) input:where(.swal2-input).swal2-inputerror,div:where(.swal2-container) input:where(.swal2-file).swal2-inputerror,div:where(.swal2-container) textarea:where(.swal2-textarea).swal2-inputerror{border-color:#f27474 !important;box-shadow:0 0 2px #f27474 !important}div:where(.swal2-container) input:where(.swal2-input):hover,div:where(.swal2-container) input:where(.swal2-file):hover,div:where(.swal2-container) textarea:where(.swal2-textarea):hover{box-shadow:var(--swal2-input-hover-box-shadow)}div:where(.swal2-container) input:where(.swal2-input):focus,div:where(.swal2-container) input:where(.swal2-file):focus,div:where(.swal2-container) textarea:where(.swal2-textarea):focus{border:var(--swal2-input-focus-border);outline:none;box-shadow:var(--swal2-input-focus-box-shadow)}div:where(.swal2-container) input:where(.swal2-input)::placeholder,div:where(.swal2-container) input:where(.swal2-file)::placeholder,div:where(.swal2-container) textarea:where(.swal2-textarea)::placeholder{color:#ccc}div:where(.swal2-container) .swal2-range{margin:1em 2em 3px;background:var(--swal2-background)}div:where(.swal2-container) .swal2-range input{width:80%}div:where(.swal2-container) .swal2-range output{width:20%;color:inherit;font-weight:600;text-align:center}div:where(.swal2-container) .swal2-range input,div:where(.swal2-container) .swal2-range output{height:2.625em;padding:0;font-size:1.125em;line-height:2.625em}div:where(.swal2-container) .swal2-input{height:2.625em;padding:0 .75em}div:where(.swal2-container) .swal2-file{width:75%;margin-right:auto;margin-left:auto;background:var(--swal2-input-background);font-size:1.125em}div:where(.swal2-container) .swal2-textarea{height:6.75em;padding:.75em}div:where(.swal2-container) .swal2-select{min-width:50%;max-width:100%;padding:.375em .625em;background:var(--swal2-input-background);color:inherit;font-size:1.125em}div:where(.swal2-container) .swal2-radio,div:where(.swal2-container) .swal2-checkbox{align-items:center;justify-content:center;background:var(--swal2-background);color:inherit}div:where(.swal2-container) .swal2-radio label,div:where(.swal2-container) .swal2-checkbox label{margin:0 .6em;font-size:1.125em}div:where(.swal2-container) .swal2-radio input,div:where(.swal2-container) .swal2-checkbox input{flex-shrink:0;margin:0 .4em}div:where(.swal2-container) label:where(.swal2-input-label){display:flex;justify-content:center;margin:1em auto 0}div:where(.swal2-container) div:where(.swal2-validation-message){align-items:center;justify-content:center;margin:1em 0 0;padding:.625em;overflow:hidden;background:var(--swal2-validation-message-background);color:var(--swal2-validation-message-color);font-size:1em;font-weight:300}div:where(.swal2-container) div:where(.swal2-validation-message)::before{content:\"!\";display:inline-block;width:1.5em;min-width:1.5em;height:1.5em;margin:0 .625em;border-radius:50%;background-color:#f27474;color:#fff;font-weight:600;line-height:1.5em;text-align:center}div:where(.swal2-container) .swal2-progress-steps{flex-wrap:wrap;align-items:center;max-width:100%;margin:1.25em auto;padding:0;background:rgba(0,0,0,0);font-weight:600}div:where(.swal2-container) .swal2-progress-steps li{display:inline-block;position:relative}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step{z-index:20;flex-shrink:0;width:2em;height:2em;border-radius:2em;background:#2778c4;color:#fff;line-height:2em;text-align:center}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step.swal2-active-progress-step{background:#2778c4}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step{background:var(--swal2-progress-step-background);color:#fff}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step-line{background:var(--swal2-progress-step-background)}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step-line{z-index:10;flex-shrink:0;width:2.5em;height:.4em;margin:0 -1px;background:#2778c4}div:where(.swal2-icon){position:relative;box-sizing:content-box;justify-content:center;width:5em;height:5em;margin:2.5em auto .6em;zoom:var(--swal2-icon-zoom);border:.25em solid rgba(0,0,0,0);border-radius:50%;border-color:#000;font-family:inherit;line-height:5em;cursor:default;user-select:none}div:where(.swal2-icon) .swal2-icon-content{display:flex;align-items:center;font-size:3.75em}div:where(.swal2-icon).swal2-error{border-color:#f27474;color:#f27474}div:where(.swal2-icon).swal2-error .swal2-x-mark{position:relative;flex-grow:1}div:where(.swal2-icon).swal2-error [class^=swal2-x-mark-line]{display:block;position:absolute;top:2.3125em;width:2.9375em;height:.3125em;border-radius:.125em;background-color:#f27474}div:where(.swal2-icon).swal2-error [class^=swal2-x-mark-line][class$=left]{left:1.0625em;transform:rotate(45deg)}div:where(.swal2-icon).swal2-error [class^=swal2-x-mark-line][class$=right]{right:1em;transform:rotate(-45deg)}@container swal2-popup style(--swal2-icon-animations:true){div:where(.swal2-icon).swal2-error.swal2-icon-show{animation:swal2-animate-error-icon .5s}div:where(.swal2-icon).swal2-error.swal2-icon-show .swal2-x-mark{animation:swal2-animate-error-x-mark .5s}}div:where(.swal2-icon).swal2-warning{border-color:#f8bb86;color:#f8bb86}@container swal2-popup style(--swal2-icon-animations:true){div:where(.swal2-icon).swal2-warning.swal2-icon-show{animation:swal2-animate-error-icon .5s}div:where(.swal2-icon).swal2-warning.swal2-icon-show .swal2-icon-content{animation:swal2-animate-i-mark .5s}}div:where(.swal2-icon).swal2-info{border-color:#3fc3ee;color:#3fc3ee}@container swal2-popup style(--swal2-icon-animations:true){div:where(.swal2-icon).swal2-info.swal2-icon-show{animation:swal2-animate-error-icon .5s}div:where(.swal2-icon).swal2-info.swal2-icon-show .swal2-icon-content{animation:swal2-animate-i-mark .8s}}div:where(.swal2-icon).swal2-question{border-color:#87adbd;color:#87adbd}@container swal2-popup style(--swal2-icon-animations:true){div:where(.swal2-icon).swal2-question.swal2-icon-show{animation:swal2-animate-error-icon .5s}div:where(.swal2-icon).swal2-question.swal2-icon-show .swal2-icon-content{animation:swal2-animate-question-mark .8s}}div:where(.swal2-icon).swal2-success{border-color:#a5dc86;color:#a5dc86}div:where(.swal2-icon).swal2-success [class^=swal2-success-circular-line]{position:absolute;width:3.75em;height:7.5em;border-radius:50%}div:where(.swal2-icon).swal2-success [class^=swal2-success-circular-line][class$=left]{top:-0.4375em;left:-2.0635em;transform:rotate(-45deg);transform-origin:3.75em 3.75em;border-radius:7.5em 0 0 7.5em}div:where(.swal2-icon).swal2-success [class^=swal2-success-circular-line][class$=right]{top:-0.6875em;left:1.875em;transform:rotate(-45deg);transform-origin:0 3.75em;border-radius:0 7.5em 7.5em 0}div:where(.swal2-icon).swal2-success .swal2-success-ring{position:absolute;z-index:2;top:-0.25em;left:-0.25em;box-sizing:content-box;width:100%;height:100%;border:.25em solid rgba(165,220,134,.3);border-radius:50%}div:where(.swal2-icon).swal2-success .swal2-success-fix{position:absolute;z-index:1;top:.5em;left:1.625em;width:.4375em;height:5.625em;transform:rotate(-45deg)}div:where(.swal2-icon).swal2-success [class^=swal2-success-line]{display:block;position:absolute;z-index:2;height:.3125em;border-radius:.125em;background-color:#a5dc86}div:where(.swal2-icon).swal2-success [class^=swal2-success-line][class$=tip]{top:2.875em;left:.8125em;width:1.5625em;transform:rotate(45deg)}div:where(.swal2-icon).swal2-success [class^=swal2-success-line][class$=long]{top:2.375em;right:.5em;width:2.9375em;transform:rotate(-45deg)}@container swal2-popup style(--swal2-icon-animations:true){div:where(.swal2-icon).swal2-success.swal2-icon-show .swal2-success-line-tip{animation:swal2-animate-success-line-tip .75s}div:where(.swal2-icon).swal2-success.swal2-icon-show .swal2-success-line-long{animation:swal2-animate-success-line-long .75s}div:where(.swal2-icon).swal2-success.swal2-icon-show .swal2-success-circular-line-right{animation:swal2-rotate-success-circular-line 4.25s ease-in}}[class^=swal2]{-webkit-tap-highlight-color:rgba(0,0,0,0)}.swal2-show{animation:var(--swal2-show-animation)}.swal2-hide{animation:var(--swal2-hide-animation)}.swal2-noanimation{transition:none}.swal2-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}.swal2-rtl .swal2-close{margin-right:initial;margin-left:0}.swal2-rtl .swal2-timer-progress-bar{right:0;left:auto}.swal2-toast{box-sizing:border-box;grid-column:1/4 !important;grid-row:1/4 !important;grid-template-columns:min-content auto min-content;padding:1em;overflow-y:hidden;border:var(--swal2-toast-border);background:var(--swal2-background);box-shadow:var(--swal2-toast-box-shadow);pointer-events:all}.swal2-toast>*{grid-column:2}.swal2-toast h2:where(.swal2-title){margin:.5em 1em;padding:0;font-size:1em;text-align:initial}.swal2-toast .swal2-loading{justify-content:center}.swal2-toast input:where(.swal2-input){height:2em;margin:.5em;font-size:1em}.swal2-toast .swal2-validation-message{font-size:1em}.swal2-toast div:where(.swal2-footer){margin:.5em 0 0;padding:.5em 0 0;font-size:.8em}.swal2-toast button:where(.swal2-close){grid-column:3/3;grid-row:1/99;align-self:center;width:.8em;height:.8em;margin:0;font-size:2em}.swal2-toast div:where(.swal2-html-container){margin:.5em 1em;padding:0;overflow:initial;font-size:1em;text-align:initial}.swal2-toast div:where(.swal2-html-container):empty{padding:0}.swal2-toast .swal2-loader{grid-column:1;grid-row:1/99;align-self:center;width:2em;height:2em;margin:.25em}.swal2-toast .swal2-icon{grid-column:1;grid-row:1/99;align-self:center;width:2em;min-width:2em;height:2em;margin:0 .5em 0 0}.swal2-toast .swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:1.8em;font-weight:bold}.swal2-toast .swal2-icon.swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line]{top:.875em;width:1.375em}.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:.3125em}.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:.3125em}.swal2-toast div:where(.swal2-actions){justify-content:flex-start;height:auto;margin:0;margin-top:.5em;padding:0 .5em}.swal2-toast button:where(.swal2-styled){margin:.25em .5em;padding:.4em .6em;font-size:1em}.swal2-toast .swal2-success{border-color:#a5dc86}.swal2-toast .swal2-success [class^=swal2-success-circular-line]{position:absolute;width:1.6em;height:3em;border-radius:50%}.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=left]{top:-0.8em;left:-0.5em;transform:rotate(-45deg);transform-origin:2em 2em;border-radius:4em 0 0 4em}.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=right]{top:-0.25em;left:.9375em;transform-origin:0 1.5em;border-radius:0 4em 4em 0}.swal2-toast .swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-toast .swal2-success .swal2-success-fix{top:0;left:.4375em;width:.4375em;height:2.6875em}.swal2-toast .swal2-success [class^=swal2-success-line]{height:.3125em}.swal2-toast .swal2-success [class^=swal2-success-line][class$=tip]{top:1.125em;left:.1875em;width:.75em}.swal2-toast .swal2-success [class^=swal2-success-line][class$=long]{top:.9375em;right:.1875em;width:1.375em}@container swal2-popup style(--swal2-icon-animations:true){.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-tip{animation:swal2-toast-animate-success-line-tip .75s}.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-long{animation:swal2-toast-animate-success-line-long .75s}}.swal2-toast.swal2-show{animation:var(--swal2-toast-show-animation)}.swal2-toast.swal2-hide{animation:var(--swal2-toast-hide-animation)}@keyframes swal2-show{0%{transform:translate3d(0, -50px, 0) scale(0.9);opacity:0}100%{transform:translate3d(0, 0, 0) scale(1);opacity:1}}@keyframes swal2-hide{0%{transform:translate3d(0, 0, 0) scale(1);opacity:1}100%{transform:translate3d(0, -50px, 0) scale(0.9);opacity:0}}@keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-0.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(0.4);opacity:0}50%{margin-top:1.625em;transform:scale(0.4);opacity:0}80%{margin-top:-0.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0deg);opacity:1}}@keyframes swal2-rotate-loading{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}@keyframes swal2-animate-question-mark{0%{transform:rotateY(-360deg)}100%{transform:rotateY(0)}}@keyframes swal2-animate-i-mark{0%{transform:rotateZ(45deg);opacity:0}25%{transform:rotateZ(-25deg);opacity:.4}50%{transform:rotateZ(15deg);opacity:.8}75%{transform:rotateZ(-5deg);opacity:1}100%{transform:rotateX(0);opacity:1}}@keyframes swal2-toast-show{0%{transform:translateY(-0.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(0.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0deg)}}@keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-0.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}"); | |
| 10984 | + | |
| 10985 | +/***/ }, | |
| 10986 | + | |
| 10987 | +/***/ "./node_modules/toastify-js/src/toastify.js" | |
| 10988 | +/*!**************************************************!*\ | |
| 10989 | + !*** ./node_modules/toastify-js/src/toastify.js ***! | |
| 10990 | + \**************************************************/ | |
| 10991 | +(module) { | |
| 10992 | + | |
| 10993 | +/*! | |
| 10994 | + * Toastify js 1.12.0 | |
| 10995 | + * https://github.com/apvarun/toastify-js | |
| 10996 | + * @license MIT licensed | |
| 10997 | + * | |
| 10998 | + * Copyright (C) 2018 Varun A P | |
| 10999 | + */ | |
| 11000 | +(function(root, factory) { | |
| 11001 | + if ( true && module.exports) { | |
| 11002 | + module.exports = factory(); | |
| 11003 | + } else { | |
| 11004 | + root.Toastify = factory(); | |
| 11005 | + } | |
| 11006 | +})(this, function(global) { | |
| 11007 | + // Object initialization | |
| 11008 | + var Toastify = function(options) { | |
| 11009 | + // Returning a new init object | |
| 11010 | + return new Toastify.lib.init(options); | |
| 11011 | + }, | |
| 11012 | + // Library version | |
| 11013 | + version = "1.12.0"; | |
| 11014 | + | |
| 11015 | + // Set the default global options | |
| 11016 | + Toastify.defaults = { | |
| 11017 | + oldestFirst: true, | |
| 11018 | + text: "Toastify is awesome!", | |
| 11019 | + node: undefined, | |
| 11020 | + duration: 3000, | |
| 11021 | + selector: undefined, | |
| 11022 | + callback: function () { | |
| 11023 | + }, | |
| 11024 | + destination: undefined, | |
| 11025 | + newWindow: false, | |
| 11026 | + close: false, | |
| 11027 | + gravity: "toastify-top", | |
| 11028 | + positionLeft: false, | |
| 11029 | + position: '', | |
| 11030 | + backgroundColor: '', | |
| 11031 | + avatar: "", | |
| 11032 | + className: "", | |
| 11033 | + stopOnFocus: true, | |
| 11034 | + onClick: function () { | |
| 11035 | + }, | |
| 11036 | + offset: {x: 0, y: 0}, | |
| 11037 | + escapeMarkup: true, | |
| 11038 | + ariaLive: 'polite', | |
| 11039 | + style: {background: ''} | |
| 2149 | 11040 | }; |
| 2150 | 11041 | |
| 2151 | - Cropper.getTouchPoint = function (touch) { | |
| 2152 | - return { | |
| 2153 | - x: Number(touch.clientX), | |
| 2154 | - y: Number(touch.clientY) | |
| 2155 | - }; | |
| 11042 | + // Defining the prototype of the object | |
| 11043 | + Toastify.lib = Toastify.prototype = { | |
| 11044 | + toastify: version, | |
| 11045 | + | |
| 11046 | + constructor: Toastify, | |
| 11047 | + | |
| 11048 | + // Initializing the object with required parameters | |
| 11049 | + init: function(options) { | |
| 11050 | + // Verifying and validating the input object | |
| 11051 | + if (!options) { | |
| 11052 | + options = {}; | |
| 11053 | + } | |
| 11054 | + | |
| 11055 | + // Creating the options object | |
| 11056 | + this.options = {}; | |
| 11057 | + | |
| 11058 | + this.toastElement = null; | |
| 11059 | + | |
| 11060 | + // Validating the options | |
| 11061 | + this.options.text = options.text || Toastify.defaults.text; // Display message | |
| 11062 | + this.options.node = options.node || Toastify.defaults.node; // Display content as node | |
| 11063 | + this.options.duration = options.duration === 0 ? 0 : options.duration || Toastify.defaults.duration; // Display duration | |
| 11064 | + this.options.selector = options.selector || Toastify.defaults.selector; // Parent selector | |
| 11065 | + this.options.callback = options.callback || Toastify.defaults.callback; // Callback after display | |
| 11066 | + this.options.destination = options.destination || Toastify.defaults.destination; // On-click destination | |
| 11067 | + this.options.newWindow = options.newWindow || Toastify.defaults.newWindow; // Open destination in new window | |
| 11068 | + this.options.close = options.close || Toastify.defaults.close; // Show toast close icon | |
| 11069 | + this.options.gravity = options.gravity === "bottom" ? "toastify-bottom" : Toastify.defaults.gravity; // toast position - top or bottom | |
| 11070 | + this.options.positionLeft = options.positionLeft || Toastify.defaults.positionLeft; // toast position - left or right | |
| 11071 | + this.options.position = options.position || Toastify.defaults.position; // toast position - left or right | |
| 11072 | + this.options.backgroundColor = options.backgroundColor || Toastify.defaults.backgroundColor; // toast background color | |
| 11073 | + this.options.avatar = options.avatar || Toastify.defaults.avatar; // img element src - url or a path | |
| 11074 | + this.options.className = options.className || Toastify.defaults.className; // additional class names for the toast | |
| 11075 | + this.options.stopOnFocus = options.stopOnFocus === undefined ? Toastify.defaults.stopOnFocus : options.stopOnFocus; // stop timeout on focus | |
| 11076 | + this.options.onClick = options.onClick || Toastify.defaults.onClick; // Callback after click | |
| 11077 | + this.options.offset = options.offset || Toastify.defaults.offset; // toast offset | |
| 11078 | + this.options.escapeMarkup = options.escapeMarkup !== undefined ? options.escapeMarkup : Toastify.defaults.escapeMarkup; | |
| 11079 | + this.options.ariaLive = options.ariaLive || Toastify.defaults.ariaLive; | |
| 11080 | + this.options.style = options.style || Toastify.defaults.style; | |
| 11081 | + if(options.backgroundColor) { | |
| 11082 | + this.options.style.background = options.backgroundColor; | |
| 11083 | + } | |
| 11084 | + | |
| 11085 | + // Returning the current object for chaining functions | |
| 11086 | + return this; | |
| 11087 | + }, | |
| 11088 | + | |
| 11089 | + // Building the DOM element | |
| 11090 | + buildToast: function() { | |
| 11091 | + // Validating if the options are defined | |
| 11092 | + if (!this.options) { | |
| 11093 | + throw "Toastify is not initialized"; | |
| 11094 | + } | |
| 11095 | + | |
| 11096 | + // Creating the DOM object | |
| 11097 | + var divElement = document.createElement("div"); | |
| 11098 | + divElement.className = "toastify on " + this.options.className; | |
| 11099 | + | |
| 11100 | + // Positioning toast to left or right or center | |
| 11101 | + if (!!this.options.position) { | |
| 11102 | + divElement.className += " toastify-" + this.options.position; | |
| 11103 | + } else { | |
| 11104 | + // To be depreciated in further versions | |
| 11105 | + if (this.options.positionLeft === true) { | |
| 11106 | + divElement.className += " toastify-left"; | |
| 11107 | + console.warn('Property `positionLeft` will be depreciated in further versions. Please use `position` instead.') | |
| 11108 | + } else { | |
| 11109 | + // Default position | |
| 11110 | + divElement.className += " toastify-right"; | |
| 11111 | + } | |
| 11112 | + } | |
| 11113 | + | |
| 11114 | + // Assigning gravity of element | |
| 11115 | + divElement.className += " " + this.options.gravity; | |
| 11116 | + | |
| 11117 | + if (this.options.backgroundColor) { | |
| 11118 | + // This is being deprecated in favor of using the style HTML DOM property | |
| 11119 | + console.warn('DEPRECATION NOTICE: "backgroundColor" is being deprecated. Please use the "style.background" property.'); | |
| 11120 | + } | |
| 11121 | + | |
| 11122 | + // Loop through our style object and apply styles to divElement | |
| 11123 | + for (var property in this.options.style) { | |
| 11124 | + divElement.style[property] = this.options.style[property]; | |
| 11125 | + } | |
| 11126 | + | |
| 11127 | + // Announce the toast to screen readers | |
| 11128 | + if (this.options.ariaLive) { | |
| 11129 | + divElement.setAttribute('aria-live', this.options.ariaLive) | |
| 11130 | + } | |
| 11131 | + | |
| 11132 | + // Adding the toast message/node | |
| 11133 | + if (this.options.node && this.options.node.nodeType === Node.ELEMENT_NODE) { | |
| 11134 | + // If we have a valid node, we insert it | |
| 11135 | + divElement.appendChild(this.options.node) | |
| 11136 | + } else { | |
| 11137 | + if (this.options.escapeMarkup) { | |
| 11138 | + divElement.innerText = this.options.text; | |
| 11139 | + } else { | |
| 11140 | + divElement.innerHTML = this.options.text; | |
| 11141 | + } | |
| 11142 | + | |
| 11143 | + if (this.options.avatar !== "") { | |
| 11144 | + var avatarElement = document.createElement("img"); | |
| 11145 | + avatarElement.src = this.options.avatar; | |
| 11146 | + | |
| 11147 | + avatarElement.className = "toastify-avatar"; | |
| 11148 | + | |
| 11149 | + if (this.options.position == "left" || this.options.positionLeft === true) { | |
| 11150 | + // Adding close icon on the left of content | |
| 11151 | + divElement.appendChild(avatarElement); | |
| 11152 | + } else { | |
| 11153 | + // Adding close icon on the right of content | |
| 11154 | + divElement.insertAdjacentElement("afterbegin", avatarElement); | |
| 11155 | + } | |
| 11156 | + } | |
| 11157 | + } | |
| 11158 | + | |
| 11159 | + // Adding a close icon to the toast | |
| 11160 | + if (this.options.close === true) { | |
| 11161 | + // Create a span for close element | |
| 11162 | + var closeElement = document.createElement("button"); | |
| 11163 | + closeElement.type = "button"; | |
| 11164 | + closeElement.setAttribute("aria-label", "Close"); | |
| 11165 | + closeElement.className = "toast-close"; | |
| 11166 | + closeElement.innerHTML = "✖"; | |
| 11167 | + | |
| 11168 | + // Triggering the removal of toast from DOM on close click | |
| 11169 | + closeElement.addEventListener( | |
| 11170 | + "click", | |
| 11171 | + function(event) { | |
| 11172 | + event.stopPropagation(); | |
| 11173 | + this.removeElement(this.toastElement); | |
| 11174 | + window.clearTimeout(this.toastElement.timeOutValue); | |
| 11175 | + }.bind(this) | |
| 11176 | + ); | |
| 11177 | + | |
| 11178 | + //Calculating screen width | |
| 11179 | + var width = window.innerWidth > 0 ? window.innerWidth : screen.width; | |
| 11180 | + | |
| 11181 | + // Adding the close icon to the toast element | |
| 11182 | + // Display on the right if screen width is less than or equal to 360px | |
| 11183 | + if ((this.options.position == "left" || this.options.positionLeft === true) && width > 360) { | |
| 11184 | + // Adding close icon on the left of content | |
| 11185 | + divElement.insertAdjacentElement("afterbegin", closeElement); | |
| 11186 | + } else { | |
| 11187 | + // Adding close icon on the right of content | |
| 11188 | + divElement.appendChild(closeElement); | |
| 11189 | + } | |
| 11190 | + } | |
| 11191 | + | |
| 11192 | + // Clear timeout while toast is focused | |
| 11193 | + if (this.options.stopOnFocus && this.options.duration > 0) { | |
| 11194 | + var self = this; | |
| 11195 | + // stop countdown | |
| 11196 | + divElement.addEventListener( | |
| 11197 | + "mouseover", | |
| 11198 | + function(event) { | |
| 11199 | + window.clearTimeout(divElement.timeOutValue); | |
| 11200 | + } | |
| 11201 | + ) | |
| 11202 | + // add back the timeout | |
| 11203 | + divElement.addEventListener( | |
| 11204 | + "mouseleave", | |
| 11205 | + function() { | |
| 11206 | + divElement.timeOutValue = window.setTimeout( | |
| 11207 | + function() { | |
| 11208 | + // Remove the toast from DOM | |
| 11209 | + self.removeElement(divElement); | |
| 11210 | + }, | |
| 11211 | + self.options.duration | |
| 11212 | + ) | |
| 11213 | + } | |
| 11214 | + ) | |
| 11215 | + } | |
| 11216 | + | |
| 11217 | + // Adding an on-click destination path | |
| 11218 | + if (typeof this.options.destination !== "undefined") { | |
| 11219 | + divElement.addEventListener( | |
| 11220 | + "click", | |
| 11221 | + function(event) { | |
| 11222 | + event.stopPropagation(); | |
| 11223 | + if (this.options.newWindow === true) { | |
| 11224 | + window.open(this.options.destination, "_blank"); | |
| 11225 | + } else { | |
| 11226 | + window.location = this.options.destination; | |
| 11227 | + } | |
| 11228 | + }.bind(this) | |
| 11229 | + ); | |
| 11230 | + } | |
| 11231 | + | |
| 11232 | + if (typeof this.options.onClick === "function" && typeof this.options.destination === "undefined") { | |
| 11233 | + divElement.addEventListener( | |
| 11234 | + "click", | |
| 11235 | + function(event) { | |
| 11236 | + event.stopPropagation(); | |
| 11237 | + this.options.onClick(); | |
| 11238 | + }.bind(this) | |
| 11239 | + ); | |
| 11240 | + } | |
| 11241 | + | |
| 11242 | + // Adding offset | |
| 11243 | + if(typeof this.options.offset === "object") { | |
| 11244 | + | |
| 11245 | + var x = getAxisOffsetAValue("x", this.options); | |
| 11246 | + var y = getAxisOffsetAValue("y", this.options); | |
| 11247 | + | |
| 11248 | + var xOffset = this.options.position == "left" ? x : "-" + x; | |
| 11249 | + var yOffset = this.options.gravity == "toastify-top" ? y : "-" + y; | |
| 11250 | + | |
| 11251 | + divElement.style.transform = "translate(" + xOffset + "," + yOffset + ")"; | |
| 11252 | + | |
| 11253 | + } | |
| 11254 | + | |
| 11255 | + // Returning the generated element | |
| 11256 | + return divElement; | |
| 11257 | + }, | |
| 11258 | + | |
| 11259 | + // Displaying the toast | |
| 11260 | + showToast: function() { | |
| 11261 | + // Creating the DOM object for the toast | |
| 11262 | + this.toastElement = this.buildToast(); | |
| 11263 | + | |
| 11264 | + // Getting the root element to with the toast needs to be added | |
| 11265 | + var rootElement; | |
| 11266 | + if (typeof this.options.selector === "string") { | |
| 11267 | + rootElement = document.getElementById(this.options.selector); | |
| 11268 | + } else if (this.options.selector instanceof HTMLElement || (typeof ShadowRoot !== 'undefined' && this.options.selector instanceof ShadowRoot)) { | |
| 11269 | + rootElement = this.options.selector; | |
| 11270 | + } else { | |
| 11271 | + rootElement = document.body; | |
| 11272 | + } | |
| 11273 | + | |
| 11274 | + // Validating if root element is present in DOM | |
| 11275 | + if (!rootElement) { | |
| 11276 | + throw "Root element is not defined"; | |
| 11277 | + } | |
| 11278 | + | |
| 11279 | + // Adding the DOM element | |
| 11280 | + var elementToInsert = Toastify.defaults.oldestFirst ? rootElement.firstChild : rootElement.lastChild; | |
| 11281 | + rootElement.insertBefore(this.toastElement, elementToInsert); | |
| 11282 | + | |
| 11283 | + // Repositioning the toasts in case multiple toasts are present | |
| 11284 | + Toastify.reposition(); | |
| 11285 | + | |
| 11286 | + if (this.options.duration > 0) { | |
| 11287 | + this.toastElement.timeOutValue = window.setTimeout( | |
| 11288 | + function() { | |
| 11289 | + // Remove the toast from DOM | |
| 11290 | + this.removeElement(this.toastElement); | |
| 11291 | + }.bind(this), | |
| 11292 | + this.options.duration | |
| 11293 | + ); // Binding `this` for function invocation | |
| 11294 | + } | |
| 11295 | + | |
| 11296 | + // Supporting function chaining | |
| 11297 | + return this; | |
| 11298 | + }, | |
| 11299 | + | |
| 11300 | + hideToast: function() { | |
| 11301 | + if (this.toastElement.timeOutValue) { | |
| 11302 | + clearTimeout(this.toastElement.timeOutValue); | |
| 11303 | + } | |
| 11304 | + this.removeElement(this.toastElement); | |
| 11305 | + }, | |
| 11306 | + | |
| 11307 | + // Removing the element from the DOM | |
| 11308 | + removeElement: function(toastElement) { | |
| 11309 | + // Hiding the element | |
| 11310 | + // toastElement.classList.remove("on"); | |
| 11311 | + toastElement.className = toastElement.className.replace(" on", ""); | |
| 11312 | + | |
| 11313 | + // Removing the element from DOM after transition end | |
| 11314 | + window.setTimeout( | |
| 11315 | + function() { | |
| 11316 | + // remove options node if any | |
| 11317 | + if (this.options.node && this.options.node.parentNode) { | |
| 11318 | + this.options.node.parentNode.removeChild(this.options.node); | |
| 11319 | + } | |
| 11320 | + | |
| 11321 | + // Remove the element from the DOM, only when the parent node was not removed before. | |
| 11322 | + if (toastElement.parentNode) { | |
| 11323 | + toastElement.parentNode.removeChild(toastElement); | |
| 11324 | + } | |
| 11325 | + | |
| 11326 | + // Calling the callback function | |
| 11327 | + this.options.callback.call(toastElement); | |
| 11328 | + | |
| 11329 | + // Repositioning the toasts again | |
| 11330 | + Toastify.reposition(); | |
| 11331 | + }.bind(this), | |
| 11332 | + 400 | |
| 11333 | + ); // Binding `this` for function invocation | |
| 11334 | + }, | |
| 2156 | 11335 | }; |
| 2157 | 11336 | |
| 2158 | - return Cropper; | |
| 2159 | -}((react__WEBPACK_IMPORTED_MODULE_0___default().Component)); | |
| 11337 | + // Positioning the toasts on the DOM | |
| 11338 | + Toastify.reposition = function() { | |
| 2160 | 11339 | |
| 2161 | -/* harmony default export */ __webpack_exports__["default"] = (Cropper); | |
| 2162 | -//# sourceMappingURL=index.module.js.map | |
| 11340 | + // Top margins with gravity | |
| 11341 | + var topLeftOffsetSize = { | |
| 11342 | + top: 15, | |
| 11343 | + bottom: 15, | |
| 11344 | + }; | |
| 11345 | + var topRightOffsetSize = { | |
| 11346 | + top: 15, | |
| 11347 | + bottom: 15, | |
| 11348 | + }; | |
| 11349 | + var offsetSize = { | |
| 11350 | + top: 15, | |
| 11351 | + bottom: 15, | |
| 11352 | + }; | |
| 2163 | 11353 | |
| 11354 | + // Get all toast messages on the DOM | |
| 11355 | + var allToasts = document.getElementsByClassName("toastify"); | |
| 2164 | 11356 | |
| 2165 | -/***/ }), | |
| 11357 | + var classUsed; | |
| 2166 | 11358 | |
| 2167 | -/***/ "./node_modules/react-easy-crop/node_modules/tslib/tslib.es6.js": | |
| 2168 | -/*!**********************************************************************!*\ | |
| 2169 | - !*** ./node_modules/react-easy-crop/node_modules/tslib/tslib.es6.js ***! | |
| 2170 | - \**********************************************************************/ | |
| 2171 | -/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { | |
| 11359 | + // Modifying the position of each toast element | |
| 11360 | + for (var i = 0; i < allToasts.length; i++) { | |
| 11361 | + // Getting the applied gravity | |
| 11362 | + if (containsClass(allToasts[i], "toastify-top") === true) { | |
| 11363 | + classUsed = "toastify-top"; | |
| 11364 | + } else { | |
| 11365 | + classUsed = "toastify-bottom"; | |
| 11366 | + } | |
| 2172 | 11367 | |
| 2173 | -"use strict"; | |
| 2174 | -__webpack_require__.r(__webpack_exports__); | |
| 2175 | -/* harmony export */ __webpack_require__.d(__webpack_exports__, { | |
| 2176 | -/* harmony export */ "__assign": function() { return /* binding */ __assign; }, | |
| 2177 | -/* harmony export */ "__asyncDelegator": function() { return /* binding */ __asyncDelegator; }, | |
| 2178 | -/* harmony export */ "__asyncGenerator": function() { return /* binding */ __asyncGenerator; }, | |
| 2179 | -/* harmony export */ "__asyncValues": function() { return /* binding */ __asyncValues; }, | |
| 2180 | -/* harmony export */ "__await": function() { return /* binding */ __await; }, | |
| 2181 | -/* harmony export */ "__awaiter": function() { return /* binding */ __awaiter; }, | |
| 2182 | -/* harmony export */ "__classPrivateFieldGet": function() { return /* binding */ __classPrivateFieldGet; }, | |
| 2183 | -/* harmony export */ "__classPrivateFieldSet": function() { return /* binding */ __classPrivateFieldSet; }, | |
| 2184 | -/* harmony export */ "__createBinding": function() { return /* binding */ __createBinding; }, | |
| 2185 | -/* harmony export */ "__decorate": function() { return /* binding */ __decorate; }, | |
| 2186 | -/* harmony export */ "__exportStar": function() { return /* binding */ __exportStar; }, | |
| 2187 | -/* harmony export */ "__extends": function() { return /* binding */ __extends; }, | |
| 2188 | -/* harmony export */ "__generator": function() { return /* binding */ __generator; }, | |
| 2189 | -/* harmony export */ "__importDefault": function() { return /* binding */ __importDefault; }, | |
| 2190 | -/* harmony export */ "__importStar": function() { return /* binding */ __importStar; }, | |
| 2191 | -/* harmony export */ "__makeTemplateObject": function() { return /* binding */ __makeTemplateObject; }, | |
| 2192 | -/* harmony export */ "__metadata": function() { return /* binding */ __metadata; }, | |
| 2193 | -/* harmony export */ "__param": function() { return /* binding */ __param; }, | |
| 2194 | -/* harmony export */ "__read": function() { return /* binding */ __read; }, | |
| 2195 | -/* harmony export */ "__rest": function() { return /* binding */ __rest; }, | |
| 2196 | -/* harmony export */ "__spread": function() { return /* binding */ __spread; }, | |
| 2197 | -/* harmony export */ "__spreadArrays": function() { return /* binding */ __spreadArrays; }, | |
| 2198 | -/* harmony export */ "__values": function() { return /* binding */ __values; } | |
| 2199 | -/* harmony export */ }); | |
| 2200 | -/*! ***************************************************************************** | |
| 2201 | -Copyright (c) Microsoft Corporation. | |
| 2202 | - | |
| 2203 | -Permission to use, copy, modify, and/or distribute this software for any | |
| 2204 | -purpose with or without fee is hereby granted. | |
| 2205 | - | |
| 2206 | -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH | |
| 2207 | -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY | |
| 2208 | -AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, | |
| 2209 | -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM | |
| 2210 | -LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR | |
| 2211 | -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR | |
| 2212 | -PERFORMANCE OF THIS SOFTWARE. | |
| 2213 | -***************************************************************************** */ | |
| 2214 | -/* global Reflect, Promise */ | |
| 2215 | - | |
| 2216 | -var extendStatics = function(d, b) { | |
| 2217 | - extendStatics = Object.setPrototypeOf || | |
| 2218 | - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || | |
| 2219 | - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; | |
| 2220 | - return extendStatics(d, b); | |
| 2221 | -}; | |
| 2222 | - | |
| 2223 | -function __extends(d, b) { | |
| 2224 | - extendStatics(d, b); | |
| 2225 | - function __() { this.constructor = d; } | |
| 2226 | - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); | |
| 2227 | -} | |
| 2228 | - | |
| 2229 | -var __assign = function() { | |
| 2230 | - __assign = Object.assign || function __assign(t) { | |
| 2231 | - for (var s, i = 1, n = arguments.length; i < n; i++) { | |
| 2232 | - s = arguments[i]; | |
| 2233 | - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; | |
| 2234 | - } | |
| 2235 | - return t; | |
| 2236 | - } | |
| 2237 | - return __assign.apply(this, arguments); | |
| 2238 | -} | |
| 2239 | - | |
| 2240 | -function __rest(s, e) { | |
| 2241 | - var t = {}; | |
| 2242 | - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) | |
| 2243 | - t[p] = s[p]; | |
| 2244 | - if (s != null && typeof Object.getOwnPropertySymbols === "function") | |
| 2245 | - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { | |
| 2246 | - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) | |
| 2247 | - t[p[i]] = s[p[i]]; | |
| 2248 | - } | |
| 2249 | - return t; | |
| 2250 | -} | |
| 2251 | - | |
| 2252 | -function __decorate(decorators, target, key, desc) { | |
| 2253 | - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; | |
| 2254 | - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); | |
| 2255 | - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; | |
| 2256 | - return c > 3 && r && Object.defineProperty(target, key, r), r; | |
| 2257 | -} | |
| 2258 | - | |
| 2259 | -function __param(paramIndex, decorator) { | |
| 2260 | - return function (target, key) { decorator(target, key, paramIndex); } | |
| 2261 | -} | |
| 2262 | - | |
| 2263 | -function __metadata(metadataKey, metadataValue) { | |
| 2264 | - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue); | |
| 2265 | -} | |
| 2266 | - | |
| 2267 | -function __awaiter(thisArg, _arguments, P, generator) { | |
| 2268 | - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | |
| 2269 | - return new (P || (P = Promise))(function (resolve, reject) { | |
| 2270 | - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } | |
| 2271 | - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } | |
| 2272 | - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } | |
| 2273 | - step((generator = generator.apply(thisArg, _arguments || [])).next()); | |
| 2274 | - }); | |
| 2275 | -} | |
| 2276 | - | |
| 2277 | -function __generator(thisArg, body) { | |
| 2278 | - var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; | |
| 2279 | - return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; | |
| 2280 | - function verb(n) { return function (v) { return step([n, v]); }; } | |
| 2281 | - function step(op) { | |
| 2282 | - if (f) throw new TypeError("Generator is already executing."); | |
| 2283 | - while (_) try { | |
| 2284 | - if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; | |
| 2285 | - if (y = 0, t) op = [op[0] & 2, t.value]; | |
| 2286 | - switch (op[0]) { | |
| 2287 | - case 0: case 1: t = op; break; | |
| 2288 | - case 4: _.label++; return { value: op[1], done: false }; | |
| 2289 | - case 5: _.label++; y = op[1]; op = [0]; continue; | |
| 2290 | - case 7: op = _.ops.pop(); _.trys.pop(); continue; | |
| 2291 | - default: | |
| 2292 | - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } | |
| 2293 | - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } | |
| 2294 | - if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } | |
| 2295 | - if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } | |
| 2296 | - if (t[2]) _.ops.pop(); | |
| 2297 | - _.trys.pop(); continue; | |
| 2298 | - } | |
| 2299 | - op = body.call(thisArg, _); | |
| 2300 | - } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } | |
| 2301 | - if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; | |
| 2302 | - } | |
| 2303 | -} | |
| 2304 | - | |
| 2305 | -var __createBinding = Object.create ? (function(o, m, k, k2) { | |
| 2306 | - if (k2 === undefined) k2 = k; | |
| 2307 | - Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); | |
| 2308 | -}) : (function(o, m, k, k2) { | |
| 2309 | - if (k2 === undefined) k2 = k; | |
| 2310 | - o[k2] = m[k]; | |
| 2311 | -}); | |
| 2312 | - | |
| 2313 | -function __exportStar(m, o) { | |
| 2314 | - for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p); | |
| 2315 | -} | |
| 2316 | - | |
| 2317 | -function __values(o) { | |
| 2318 | - var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; | |
| 2319 | - if (m) return m.call(o); | |
| 2320 | - if (o && typeof o.length === "number") return { | |
| 2321 | - next: function () { | |
| 2322 | - if (o && i >= o.length) o = void 0; | |
| 2323 | - return { value: o && o[i++], done: !o }; | |
| 2324 | - } | |
| 2325 | - }; | |
| 2326 | - throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); | |
| 2327 | -} | |
| 2328 | - | |
| 2329 | -function __read(o, n) { | |
| 2330 | - var m = typeof Symbol === "function" && o[Symbol.iterator]; | |
| 2331 | - if (!m) return o; | |
| 2332 | - var i = m.call(o), r, ar = [], e; | |
| 2333 | - try { | |
| 2334 | - while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); | |
| 2335 | - } | |
| 2336 | - catch (error) { e = { error: error }; } | |
| 2337 | - finally { | |
| 2338 | - try { | |
| 2339 | - if (r && !r.done && (m = i["return"])) m.call(i); | |
| 2340 | - } | |
| 2341 | - finally { if (e) throw e.error; } | |
| 2342 | - } | |
| 2343 | - return ar; | |
| 2344 | -} | |
| 2345 | - | |
| 2346 | -function __spread() { | |
| 2347 | - for (var ar = [], i = 0; i < arguments.length; i++) | |
| 2348 | - ar = ar.concat(__read(arguments[i])); | |
| 2349 | - return ar; | |
| 2350 | -} | |
| 2351 | - | |
| 2352 | -function __spreadArrays() { | |
| 2353 | - for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; | |
| 2354 | - for (var r = Array(s), k = 0, i = 0; i < il; i++) | |
| 2355 | - for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) | |
| 2356 | - r[k] = a[j]; | |
| 2357 | - return r; | |
| 2358 | -}; | |
| 2359 | - | |
| 2360 | -function __await(v) { | |
| 2361 | - return this instanceof __await ? (this.v = v, this) : new __await(v); | |
| 2362 | -} | |
| 2363 | - | |
| 2364 | -function __asyncGenerator(thisArg, _arguments, generator) { | |
| 2365 | - if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); | |
| 2366 | - var g = generator.apply(thisArg, _arguments || []), i, q = []; | |
| 2367 | - return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; | |
| 2368 | - function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } | |
| 2369 | - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } | |
| 2370 | - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } | |
| 2371 | - function fulfill(value) { resume("next", value); } | |
| 2372 | - function reject(value) { resume("throw", value); } | |
| 2373 | - function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } | |
| 2374 | -} | |
| 2375 | - | |
| 2376 | -function __asyncDelegator(o) { | |
| 2377 | - var i, p; | |
| 2378 | - return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i; | |
| 2379 | - function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; } | |
| 2380 | -} | |
| 2381 | - | |
| 2382 | -function __asyncValues(o) { | |
| 2383 | - if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); | |
| 2384 | - var m = o[Symbol.asyncIterator], i; | |
| 2385 | - return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); | |
| 2386 | - function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } | |
| 2387 | - function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } | |
| 2388 | -} | |
| 2389 | - | |
| 2390 | -function __makeTemplateObject(cooked, raw) { | |
| 2391 | - if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; } | |
| 2392 | - return cooked; | |
| 2393 | -}; | |
| 2394 | - | |
| 2395 | -var __setModuleDefault = Object.create ? (function(o, v) { | |
| 2396 | - Object.defineProperty(o, "default", { enumerable: true, value: v }); | |
| 2397 | -}) : function(o, v) { | |
| 2398 | - o["default"] = v; | |
| 2399 | -}; | |
| 2400 | - | |
| 2401 | -function __importStar(mod) { | |
| 2402 | - if (mod && mod.__esModule) return mod; | |
| 2403 | - var result = {}; | |
| 2404 | - if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); | |
| 2405 | - __setModuleDefault(result, mod); | |
| 2406 | - return result; | |
| 2407 | -} | |
| 2408 | - | |
| 2409 | -function __importDefault(mod) { | |
| 2410 | - return (mod && mod.__esModule) ? mod : { default: mod }; | |
| 2411 | -} | |
| 2412 | - | |
| 2413 | -function __classPrivateFieldGet(receiver, privateMap) { | |
| 2414 | - if (!privateMap.has(receiver)) { | |
| 2415 | - throw new TypeError("attempted to get private field on non-instance"); | |
| 2416 | - } | |
| 2417 | - return privateMap.get(receiver); | |
| 2418 | -} | |
| 2419 | - | |
| 2420 | -function __classPrivateFieldSet(receiver, privateMap, value) { | |
| 2421 | - if (!privateMap.has(receiver)) { | |
| 2422 | - throw new TypeError("attempted to set private field on non-instance"); | |
| 2423 | - } | |
| 2424 | - privateMap.set(receiver, value); | |
| 2425 | - return value; | |
| 2426 | -} | |
| 11368 | + var height = allToasts[i].offsetHeight; | |
| 11369 | + classUsed = classUsed.substr(9, classUsed.length-1) | |
| 11370 | + // Spacing between toasts | |
| 11371 | + var offset = 15; | |
| 2427 | 11372 | |
| 11373 | + var width = window.innerWidth > 0 ? window.innerWidth : screen.width; | |
| 2428 | 11374 | |
| 2429 | -/***/ }), | |
| 11375 | + // Show toast in center if screen with less than or equal to 360px | |
| 11376 | + if (width <= 360) { | |
| 11377 | + // Setting the position | |
| 11378 | + allToasts[i].style[classUsed] = offsetSize[classUsed] + "px"; | |
| 2430 | 11379 | |
| 2431 | -/***/ "react": | |
| 2432 | -/*!************************!*\ | |
| 2433 | - !*** external "React" ***! | |
| 2434 | - \************************/ | |
| 2435 | -/***/ (function(module) { | |
| 11380 | + offsetSize[classUsed] += height + offset; | |
| 11381 | + } else { | |
| 11382 | + if (containsClass(allToasts[i], "toastify-left") === true) { | |
| 11383 | + // Setting the position | |
| 11384 | + allToasts[i].style[classUsed] = topLeftOffsetSize[classUsed] + "px"; | |
| 2436 | 11385 | |
| 2437 | -"use strict"; | |
| 2438 | -module.exports = window["React"]; | |
| 11386 | + topLeftOffsetSize[classUsed] += height + offset; | |
| 11387 | + } else { | |
| 11388 | + // Setting the position | |
| 11389 | + allToasts[i].style[classUsed] = topRightOffsetSize[classUsed] + "px"; | |
| 2439 | 11390 | |
| 2440 | -/***/ }), | |
| 11391 | + topRightOffsetSize[classUsed] += height + offset; | |
| 11392 | + } | |
| 11393 | + } | |
| 11394 | + } | |
| 2441 | 11395 | |
| 2442 | -/***/ "@wordpress/api-fetch": | |
| 2443 | -/*!**********************************!*\ | |
| 2444 | - !*** external ["wp","apiFetch"] ***! | |
| 2445 | - \**********************************/ | |
| 2446 | -/***/ (function(module) { | |
| 11396 | + // Supporting function chaining | |
| 11397 | + return this; | |
| 11398 | + }; | |
| 2447 | 11399 | |
| 2448 | -"use strict"; | |
| 2449 | -module.exports = window["wp"]["apiFetch"]; | |
| 11400 | + // Helper function to get offset. | |
| 11401 | + function getAxisOffsetAValue(axis, options) { | |
| 2450 | 11402 | |
| 2451 | -/***/ }), | |
| 11403 | + if(options.offset[axis]) { | |
| 11404 | + if(isNaN(options.offset[axis])) { | |
| 11405 | + return options.offset[axis]; | |
| 11406 | + } | |
| 11407 | + else { | |
| 11408 | + return options.offset[axis] + 'px'; | |
| 11409 | + } | |
| 11410 | + } | |
| 2452 | 11411 | |
| 2453 | -/***/ "@wordpress/element": | |
| 2454 | -/*!*********************************!*\ | |
| 2455 | - !*** external ["wp","element"] ***! | |
| 2456 | - \*********************************/ | |
| 2457 | -/***/ (function(module) { | |
| 11412 | + return '0px'; | |
| 2458 | 11413 | |
| 2459 | -"use strict"; | |
| 2460 | -module.exports = window["wp"]["element"]; | |
| 11414 | + } | |
| 2461 | 11415 | |
| 2462 | -/***/ }), | |
| 11416 | + function containsClass(elem, yourClass) { | |
| 11417 | + if (!elem || typeof yourClass !== "string") { | |
| 11418 | + return false; | |
| 11419 | + } else if ( | |
| 11420 | + elem.className && | |
| 11421 | + elem.className | |
| 11422 | + .trim() | |
| 11423 | + .split(/\s+/gi) | |
| 11424 | + .indexOf(yourClass) > -1 | |
| 11425 | + ) { | |
| 11426 | + return true; | |
| 11427 | + } else { | |
| 11428 | + return false; | |
| 11429 | + } | |
| 11430 | + } | |
| 2463 | 11431 | |
| 2464 | -/***/ "@wordpress/i18n": | |
| 2465 | -/*!******************************!*\ | |
| 2466 | - !*** external ["wp","i18n"] ***! | |
| 2467 | - \******************************/ | |
| 2468 | -/***/ (function(module) { | |
| 11432 | + // Setting up the prototype for the init object | |
| 11433 | + Toastify.lib.init.prototype = Toastify.lib; | |
| 2469 | 11434 | |
| 2470 | -"use strict"; | |
| 2471 | -module.exports = window["wp"]["i18n"]; | |
| 11435 | + // Returning the Toastify function to be assigned to the window object/module | |
| 11436 | + return Toastify; | |
| 11437 | +}); | |
| 2472 | 11438 | |
| 2473 | -/***/ }), | |
| 2474 | 11439 | |
| 2475 | -/***/ "@wordpress/url": | |
| 2476 | -/*!*****************************!*\ | |
| 2477 | - !*** external ["wp","url"] ***! | |
| 2478 | - \*****************************/ | |
| 2479 | -/***/ (function(module) { | |
| 11440 | +/***/ }, | |
| 2480 | 11441 | |
| 11442 | +/***/ "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAAA3NCSVQICAjb4U/gAAAABlBMVEXMzMz////TjRV2AAAACXBIWXMAAArrAAAK6wGCiw1aAAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAABFJREFUCJlj+M/AgBVhF/0PAH6/D/HkDxOGAAAAAElFTkSuQmCC" | |
| 11443 | +/*!**************************************************************************************************************************************************************************************************************************************************************!*\ | |
| 11444 | + !*** data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAAA3NCSVQICAjb4U/gAAAABlBMVEXMzMz////TjRV2AAAACXBIWXMAAArrAAAK6wGCiw1aAAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAABFJREFUCJlj+M/AgBVhF/0PAH6/D/HkDxOGAAAAAElFTkSuQmCC ***! | |
| 11445 | + \**************************************************************************************************************************************************************************************************************************************************************/ | |
| 11446 | +(module) { | |
| 11447 | + | |
| 2481 | 11448 | "use strict"; |
| 2482 | -module.exports = window["wp"]["url"]; | |
| 11449 | +module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAAA3NCSVQICAjb4U/gAAAABlBMVEXMzMz////TjRV2AAAACXBIWXMAAArrAAAK6wGCiw1aAAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAABFJREFUCJlj+M/AgBVhF/0PAH6/D/HkDxOGAAAAAElFTkSuQmCC"; | |
| 2483 | 11450 | |
| 2484 | -/***/ }) | |
| 11451 | +/***/ } | |
| 2485 | 11452 | |
| 2486 | 11453 | /******/ }); |
| 2487 | 11454 | /************************************************************************/ |
| 2488 | 11455 | /******/ // The module cache |
| @@ -2496,37 +11463,46 @@ | ||
| 2496 | 11463 | /******/ return cachedModule.exports; |
| 2497 | 11464 | /******/ } |
| 2498 | 11465 | /******/ // Create a new module (and put it into the cache) |
| 2499 | 11466 | /******/ var module = __webpack_module_cache__[moduleId] = { |
| 2500 | -/******/ // no module.id needed | |
| 11467 | +/******/ id: moduleId, | |
| 2501 | 11468 | /******/ // no module.loaded needed |
| 2502 | 11469 | /******/ exports: {} |
| 2503 | 11470 | /******/ }; |
| 2504 | 11471 | /******/ |
| 2505 | 11472 | /******/ // Execute the module function |
| 2506 | -/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); | |
| 11473 | +/******/ if (!(moduleId in __webpack_modules__)) { | |
| 11474 | +/******/ delete __webpack_module_cache__[moduleId]; | |
| 11475 | +/******/ var e = new Error("Cannot find module '" + moduleId + "'"); | |
| 11476 | +/******/ e.code = 'MODULE_NOT_FOUND'; | |
| 11477 | +/******/ throw e; | |
| 11478 | +/******/ } | |
| 11479 | +/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__); | |
| 2507 | 11480 | /******/ |
| 2508 | 11481 | /******/ // Return the exports of the module |
| 2509 | 11482 | /******/ return module.exports; |
| 2510 | 11483 | /******/ } |
| 2511 | 11484 | /******/ |
| 11485 | +/******/ // expose the modules object (__webpack_modules__) | |
| 11486 | +/******/ __webpack_require__.m = __webpack_modules__; | |
| 11487 | +/******/ | |
| 2512 | 11488 | /************************************************************************/ |
| 2513 | 11489 | /******/ /* webpack/runtime/compat get default export */ |
| 2514 | -/******/ !function() { | |
| 11490 | +/******/ (() => { | |
| 2515 | 11491 | /******/ // getDefaultExport function for compatibility with non-harmony modules |
| 2516 | -/******/ __webpack_require__.n = function(module) { | |
| 11492 | +/******/ __webpack_require__.n = (module) => { | |
| 2517 | 11493 | /******/ var getter = module && module.__esModule ? |
| 2518 | -/******/ function() { return module['default']; } : | |
| 2519 | -/******/ function() { return module; }; | |
| 11494 | +/******/ () => (module['default']) : | |
| 11495 | +/******/ () => (module); | |
| 2520 | 11496 | /******/ __webpack_require__.d(getter, { a: getter }); |
| 2521 | 11497 | /******/ return getter; |
| 2522 | 11498 | /******/ }; |
| 2523 | -/******/ }(); | |
| 11499 | +/******/ })(); | |
| 2524 | 11500 | /******/ |
| 2525 | 11501 | /******/ /* webpack/runtime/define property getters */ |
| 2526 | -/******/ !function() { | |
| 11502 | +/******/ (() => { | |
| 2527 | 11503 | /******/ // define getter functions for harmony exports |
| 2528 | -/******/ __webpack_require__.d = function(exports, definition) { | |
| 11504 | +/******/ __webpack_require__.d = (exports, definition) => { | |
| 2529 | 11505 | /******/ for(var key in definition) { |
| 2530 | 11506 | /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { |
| 2531 | 11507 | /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); |
| 2532 | 11508 | /******/ } |
| @@ -2531,55 +11507,95 @@ | ||
| 2531 | 11507 | /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); |
| 2532 | 11508 | /******/ } |
| 2533 | 11509 | /******/ } |
| 2534 | 11510 | /******/ }; |
| 2535 | -/******/ }(); | |
| 11511 | +/******/ })(); | |
| 2536 | 11512 | /******/ |
| 2537 | 11513 | /******/ /* webpack/runtime/hasOwnProperty shorthand */ |
| 2538 | -/******/ !function() { | |
| 2539 | -/******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } | |
| 2540 | -/******/ }(); | |
| 11514 | +/******/ (() => { | |
| 11515 | +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) | |
| 11516 | +/******/ })(); | |
| 2541 | 11517 | /******/ |
| 2542 | 11518 | /******/ /* webpack/runtime/make namespace object */ |
| 2543 | -/******/ !function() { | |
| 11519 | +/******/ (() => { | |
| 2544 | 11520 | /******/ // define __esModule on exports |
| 2545 | -/******/ __webpack_require__.r = function(exports) { | |
| 11521 | +/******/ __webpack_require__.r = (exports) => { | |
| 2546 | 11522 | /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { |
| 2547 | 11523 | /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); |
| 2548 | 11524 | /******/ } |
| 2549 | 11525 | /******/ Object.defineProperty(exports, '__esModule', { value: true }); |
| 2550 | 11526 | /******/ }; |
| 2551 | -/******/ }(); | |
| 11527 | +/******/ })(); | |
| 2552 | 11528 | /******/ |
| 11529 | +/******/ /* webpack/runtime/jsonp chunk loading */ | |
| 11530 | +/******/ (() => { | |
| 11531 | +/******/ __webpack_require__.b = (typeof document !== 'undefined' && document.baseURI) || self.location.href; | |
| 11532 | +/******/ | |
| 11533 | +/******/ // object to store loaded and loading chunks | |
| 11534 | +/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched | |
| 11535 | +/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded | |
| 11536 | +/******/ var installedChunks = { | |
| 11537 | +/******/ "./assets/js/dist/frontend/profile": 0 | |
| 11538 | +/******/ }; | |
| 11539 | +/******/ | |
| 11540 | +/******/ // no chunk on demand loading | |
| 11541 | +/******/ | |
| 11542 | +/******/ // no prefetching | |
| 11543 | +/******/ | |
| 11544 | +/******/ // no preloaded | |
| 11545 | +/******/ | |
| 11546 | +/******/ // no HMR | |
| 11547 | +/******/ | |
| 11548 | +/******/ // no HMR manifest | |
| 11549 | +/******/ | |
| 11550 | +/******/ // no on chunks loaded | |
| 11551 | +/******/ | |
| 11552 | +/******/ // no jsonp function | |
| 11553 | +/******/ })(); | |
| 11554 | +/******/ | |
| 11555 | +/******/ /* webpack/runtime/nonce */ | |
| 11556 | +/******/ (() => { | |
| 11557 | +/******/ __webpack_require__.nc = undefined; | |
| 11558 | +/******/ })(); | |
| 11559 | +/******/ | |
| 2553 | 11560 | /************************************************************************/ |
| 2554 | 11561 | var __webpack_exports__ = {}; |
| 2555 | -// This entry need to be wrapped in an IIFE because it need to be in strict mode. | |
| 2556 | -!function() { | |
| 11562 | +// This entry needs to be wrapped in an IIFE because it needs to be in strict mode. | |
| 11563 | +(() => { | |
| 2557 | 11564 | "use strict"; |
| 2558 | -/*!************************************************!*\ | |
| 2559 | - !*** ./assets/src/apps/js/frontend/profile.js ***! | |
| 2560 | - \************************************************/ | |
| 11565 | +/*!*******************************************!*\ | |
| 11566 | + !*** ./assets/src/js/frontend/profile.js ***! | |
| 11567 | + \*******************************************/ | |
| 2561 | 11568 | __webpack_require__.r(__webpack_exports__); |
| 2562 | -/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element"); | |
| 2563 | -/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__); | |
| 2564 | -/* harmony import */ var _profile_course_tab__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./profile/course-tab */ "./assets/src/apps/js/frontend/profile/course-tab.js"); | |
| 2565 | -/* harmony import */ var _profile_statistic__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./profile/statistic */ "./assets/src/apps/js/frontend/profile/statistic.js"); | |
| 2566 | -/* harmony import */ var _profile_order_recover__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./profile/order-recover */ "./assets/src/apps/js/frontend/profile/order-recover.js"); | |
| 2567 | -/* harmony import */ var _profile_avatar__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./profile/avatar */ "./assets/src/apps/js/frontend/profile/avatar.js"); | |
| 11569 | +/* harmony import */ var _profile_course_tab__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./profile/course-tab */ "./assets/src/js/frontend/profile/course-tab.js"); | |
| 11570 | +/* harmony import */ var _profile_statistic__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./profile/statistic */ "./assets/src/js/frontend/profile/statistic.js"); | |
| 11571 | +/* harmony import */ var _profile_order_recover__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./profile/order-recover */ "./assets/src/js/frontend/profile/order-recover.js"); | |
| 11572 | +/* harmony import */ var _profile_cover_image__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./profile/cover-image */ "./assets/src/js/frontend/profile/cover-image.js"); | |
| 11573 | +/* harmony import */ var _profile_avatar__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./profile/avatar */ "./assets/src/js/frontend/profile/avatar.js"); | |
| 11574 | +/* harmony import */ var _profile_quiz__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./profile/quiz */ "./assets/src/js/frontend/profile/quiz.js"); | |
| 11575 | +/* harmony import */ var _profile_order_refund__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./profile/order-refund */ "./assets/src/js/frontend/profile/order-refund.js"); | |
| 11576 | +/* harmony import */ var _admin_courses_view_students_modal__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../admin/courses/view-students-modal */ "./assets/src/js/admin/courses/view-students-modal.js"); | |
| 2568 | 11577 | |
| 2569 | 11578 | |
| 2570 | 11579 | |
| 2571 | 11580 | |
| 2572 | 11581 | |
| 11582 | + | |
| 11583 | + | |
| 11584 | + | |
| 11585 | +(0,_profile_cover_image__WEBPACK_IMPORTED_MODULE_3__["default"])(); | |
| 11586 | +(0,_profile_quiz__WEBPACK_IMPORTED_MODULE_5__["default"])(); | |
| 11587 | +(0,_profile_statistic__WEBPACK_IMPORTED_MODULE_1__["default"])(); | |
| 11588 | +(0,_profile_order_recover__WEBPACK_IMPORTED_MODULE_2__["default"])(); | |
| 11589 | +(0,_profile_order_refund__WEBPACK_IMPORTED_MODULE_6__["default"])(); | |
| 11590 | +new _admin_courses_view_students_modal__WEBPACK_IMPORTED_MODULE_7__.ViewStudentsModal(); | |
| 2573 | 11591 | document.addEventListener('DOMContentLoaded', function (event) { |
| 2574 | - (0,_profile_course_tab__WEBPACK_IMPORTED_MODULE_1__["default"])(); | |
| 2575 | - (0,_profile_statistic__WEBPACK_IMPORTED_MODULE_2__["default"])(); | |
| 2576 | - (0,_profile_order_recover__WEBPACK_IMPORTED_MODULE_3__["default"])(); | |
| 11592 | + (0,_profile_course_tab__WEBPACK_IMPORTED_MODULE_0__["default"])(); | |
| 2577 | 11593 | }); |
| 2578 | - | |
| 2579 | 11594 | if (document.getElementById('learnpress-avatar-upload')) { |
| 2580 | - wp.element.render((0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_profile_avatar__WEBPACK_IMPORTED_MODULE_4__["default"], null), document.getElementById('learnpress-avatar-upload')); | |
| 11595 | + (0,_profile_avatar__WEBPACK_IMPORTED_MODULE_4__["default"])(); | |
| 2581 | 11596 | } |
| 2582 | -}(); | |
| 11597 | +})(); | |
| 11598 | + | |
| 2583 | 11599 | /******/ })() |
| 2584 | 11600 | ; |
| 2585 | 11601 | //# sourceMappingURL=profile.js.map |