/
home
/
maktab
/
admin
/
js
/
File Upload :
llllll
Current File: /home/maktab/admin/js/chunk-914d4b14.008d74ab.js.map
{"version":3,"sources":["webpack:///./src/components/RestFullActionSheet.vue","webpack:///src/components/RestFullActionSheet.vue","webpack:///./src/components/RestFullActionSheet.vue?f6fa","webpack:///./src/components/RestFullActionSheet.vue?ba6a","webpack:///./src/components/InfoItem.vue","webpack:///src/components/InfoItem.vue","webpack:///./src/components/InfoItem.vue?ac29","webpack:///./src/components/InfoItem.vue?261e","webpack:///./src/components/imageCropper/SingleImageCropperUpload.vue","webpack:///./src/components/imageCropper/CropModal.vue","webpack:///src/components/imageCropper/CropModal.vue","webpack:///./src/components/imageCropper/CropModal.vue?b4e1","webpack:///./src/components/imageCropper/CropModal.vue?413a","webpack:///src/components/imageCropper/SingleImageCropperUpload.vue","webpack:///./src/components/imageCropper/SingleImageCropperUpload.vue?5b81","webpack:///./src/components/imageCropper/SingleImageCropperUpload.vue?9ef8","webpack:///./src/components/imageCropper/SingleImageCropperUpload.vue?2dfb","webpack:///./src/components/input/SingleUploadInput.vue?f49c","webpack:///./src/components/ConfirmBtn.vue","webpack:///src/components/ConfirmBtn.vue","webpack:///./src/components/ConfirmBtn.vue?9914","webpack:///./src/components/ConfirmBtn.vue?34ac","webpack:///./node_modules/img-reduce-size-js/index.js","webpack:///./src/views/polino/info_edit.vue","webpack:///./src/views/polino/components/BaseInformationView.vue","webpack:///src/views/polino/components/BaseInformationView.vue","webpack:///./src/views/polino/components/BaseInformationView.vue?1fd4","webpack:///./src/views/polino/components/BaseInformationView.vue?65a3","webpack:///./src/views/polino/components/BaseInformationEdit.vue","webpack:///src/views/polino/components/BaseInformationEdit.vue","webpack:///./src/views/polino/components/BaseInformationEdit.vue?2386","webpack:///./src/views/polino/components/BaseInformationEdit.vue?6064","webpack:///./src/views/polino/components/WorkInformationView.vue","webpack:///src/views/polino/components/WorkInformationView.vue","webpack:///./src/views/polino/components/WorkInformationView.vue?83c1","webpack:///./src/views/polino/components/WorkInformationView.vue?7563","webpack:///./src/views/polino/components/WorkInformationEdit.vue","webpack:///src/views/polino/components/WorkInformationEdit.vue","webpack:///./src/views/polino/components/WorkInformationEdit.vue?7d0e","webpack:///./src/views/polino/components/WorkInformationEdit.vue?01cc","webpack:///./src/views/polino/components/CommentsList.vue","webpack:///./src/table/comments.js","webpack:///src/views/polino/components/CommentsList.vue","webpack:///./src/views/polino/components/CommentsList.vue?9ed0","webpack:///./src/views/polino/components/CommentsList.vue?e7ca","webpack:///src/views/polino/info_edit.vue","webpack:///./src/views/polino/info_edit.vue?14d5","webpack:///./src/views/polino/info_edit.vue?750d","webpack:///./node_modules/cropperjs/dist/cropper.js","webpack:///./src/components/input/SingleUploadInput.vue","webpack:///src/components/input/SingleUploadInput.vue","webpack:///./src/components/input/SingleUploadInput.vue?c9ad","webpack:///./src/components/input/SingleUploadInput.vue?146c"],"names":["render","_vm","this","_c","_self","staticClass","slot","_v","on","$event","$emit","attrs","hasEdit","class","_e","hasDelete","hasActive","_s","concat","isActive","record","activeKey","_t","staticRenderFns","name","components","Icon","ConfirmBtn","props","Object","rowKey","String","Boolean","methods","active","component","value","title","required","url","headers","getData","fileList","handleRemove","handleBeforeUpload","handlePreview","select","handleChange","length","previewVisible","handleCancel","staticStyle","previewImage","srcImageCompressed","closeCropModal","handleOK","loading","ref","imgBeforeCrop","request","data","require","computed","localStorage","getItem","created","_this","$nextTick","that","image","$refs","cropper","Cropper","zoomable","scalable","aspectRatio","crop","newCanvasData","getCroppedCanvas","_this2","toBlob","_ref","_asyncToGenerator","regeneratorRuntime","mark","_callee","blob","formData","wrap","_context","prev","next","FormData","append","axios","method","baseURL","then","response","status","$message","success","catch","error","stop","_x","apply","arguments","getBase64","file","Promise","resolve","reject","reader","FileReader","readAsDataURL","onload","result","onerror","CropModal","limit","type","Number","default","undefined","fileListReserve","openModal","watch","n","o","res","console","log","_handlePreview","preview","originFileObj","sent","event","myCompressor","MAX_WIDTH","MAX_HEIGHT","MIME_TYPE","QUALITY","blobURL","document","getElementById","URL","createObjectURL","img","Image","calculateSize","maxWidth","maxHeight","width","height","Math","round","src","revokeObjectURL","_calculateSize","_calculateSize2","_slicedToArray","newWidth","newHeight","canvas","createElement","ctx","getContext","drawImage","urlCreator","window","webkitURL","imageUrl","has_thumb","has_watermark","subject","okText","cancelText","iconClass","icon","module","exports","imageResize","settings","maxSize","dataURItoBlob","dataURI","bytes","split","indexOf","atob","unescape","mime","max","ia","Uint8Array","i","charCodeAt","Blob","resize","dataUrl","toDataURL","ok","no","match","r","target","toString","Error","isEdit","model","infType","callback","$$v","expression","key","loadProfileData","setLoading","personData","full_src","mobile","_f","birthday","education","description","InfoItem","form","handleSubmit","directives","rawName","inputFa","input","models","$set","picUploaded","picRemove","$form","createForm","file_id","father_birthday","mother_birthday","id","$route","params","e","preventDefault","validateFields","err","values","put","t0","finish","_x2","fetchData","setFieldsValue","photo","push","uid","SingleUploadInput","datepicker","VuePersianDatetimePicker","SingleImageCropUpload","mounted","file_work","job","specialty","job_phone","job_address","file_work_id","cols","scopedSlots","_u","fn","toggleActive","toEdit","deleteItem","setInitialValue","caj","sts","changeActivity","replyCommentItem","body","addModal","last_text","rules","message","initialValue","view","xxl","md","xs","tbl","XTbl","add","Xtc","filterText","filterDate","renderSlot","RestFullActionSheet","XTable","parent_id","pol_user_id","parseInt","post","_changeActivity","_callee2","val","_context2","reason_reject","fetch","_x3","_x4","_toggleActive","_callee3","_context3","get","_x5","text","routerData","$router","path","query","stdid","editid","open","href","focus","row","_deleteItem","_callee4","_context4","delete","_x6","TableCol","BaseInformationView","BaseInformationEdit","WorkInformationView","WorkInformationEdit","CommentsList","_loadProfileData","_yield$axios$get","_created","htab","global","factory","ownKeys","t","keys","getOwnPropertySymbols","filter","getOwnPropertyDescriptor","enumerable","_objectSpread2","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_toPrimitive","Symbol","toPrimitive","call","TypeError","_toPropertyKey","_typeof","iterator","constructor","prototype","_classCallCheck","instance","Constructor","_defineProperties","descriptor","configurable","writable","_createClass","protoProps","staticProps","obj","_toConsumableArray","arr","_arrayWithoutHoles","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","Array","isArray","_arrayLikeToArray","iter","from","minLen","slice","test","len","arr2","IS_BROWSER","WINDOW","IS_TOUCH_DEVICE","documentElement","HAS_POINTER_EVENT","NAMESPACE","ACTION_ALL","ACTION_CROP","ACTION_MOVE","ACTION_ZOOM","ACTION_EAST","ACTION_WEST","ACTION_SOUTH","ACTION_NORTH","ACTION_NORTH_EAST","ACTION_NORTH_WEST","ACTION_SOUTH_EAST","ACTION_SOUTH_WEST","CLASS_CROP","CLASS_DISABLED","CLASS_HIDDEN","CLASS_HIDE","CLASS_INVISIBLE","CLASS_MODAL","CLASS_MOVE","DATA_ACTION","DATA_PREVIEW","DRAG_MODE_CROP","DRAG_MODE_MOVE","DRAG_MODE_NONE","EVENT_CROP","EVENT_CROP_END","EVENT_CROP_MOVE","EVENT_CROP_START","EVENT_DBLCLICK","EVENT_TOUCH_START","EVENT_TOUCH_MOVE","EVENT_TOUCH_END","EVENT_POINTER_DOWN","EVENT_POINTER_MOVE","EVENT_POINTER_UP","EVENT_READY","EVENT_RESIZE","EVENT_WHEEL","EVENT_ZOOM","MIME_TYPE_JPEG","REGEXP_ACTIONS","REGEXP_DATA_URL","REGEXP_DATA_URL_JPEG","REGEXP_TAG_NAME","MIN_CONTAINER_WIDTH","MIN_CONTAINER_HEIGHT","DEFAULTS","viewMode","dragMode","initialAspectRatio","NaN","responsive","restore","checkCrossOrigin","checkOrientation","modal","guides","center","highlight","background","autoCrop","autoCropArea","movable","rotatable","zoomOnTouch","zoomOnWheel","wheelZoomRatio","cropBoxMovable","cropBoxResizable","toggleDragModeOnDblclick","minCanvasWidth","minCanvasHeight","minCropBoxWidth","minCropBoxHeight","minContainerWidth","minContainerHeight","ready","cropstart","cropmove","cropend","zoom","TEMPLATE","isNaN","isNumber","isPositiveNumber","Infinity","isUndefined","isObject","hasOwnProperty","isPlainObject","_constructor","isFunction","toArray","assign","_len","args","_key","arg","REGEXP_DECIMALS","normalizeDecimalNumber","times","REGEXP_SUFFIX","setStyle","element","styles","style","property","hasClass","classList","contains","className","addClass","elem","trim","removeClass","remove","replace","toggleClass","added","REGEXP_CAMEL_CASE","toParamCase","toLowerCase","dataset","getAttribute","setData","setAttribute","removeData","removeAttribute","REGEXP_SPACES","onceSupported","supported","once","listener","options","set","addEventListener","removeEventListener","removeListener","handler","listeners","addListener","_handler","_element$listeners","_len2","_key2","dispatchEvent","Event","CustomEvent","detail","bubbles","cancelable","createEvent","initCustomEvent","getOffset","box","getBoundingClientRect","left","pageXOffset","clientLeft","top","pageYOffset","clientTop","location","REGEXP_ORIGINS","isCrossOriginURL","parts","protocol","hostname","port","addTimestamp","timestamp","Date","getTime","getTransforms","rotate","scaleX","scaleY","translateX","translateY","transform","join","WebkitTransform","msTransform","getMaxZoomRatio","pointers","pointers2","maxRatio","pointer","pointerId","pointer2","x1","abs","startX","y1","startY","x2","endX","y2","endY","z1","sqrt","z2","ratio","getPointer","_ref2","endOnly","pageX","pageY","end","getPointersCenter","count","_ref3","getAdjustedSizes","_ref4","isValidWidth","isValidHeight","adjustedWidth","getRotatedSizes","_ref5","degree","arc","PI","sinArc","sin","cosArc","cos","getSourceCanvas","_ref6","_ref7","_ref8","imageAspectRatio","imageNaturalWidth","naturalWidth","imageNaturalHeight","naturalHeight","_ref6$rotate","_ref6$scaleX","_ref6$scaleY","_ref8$fillColor","fillColor","_ref8$imageSmoothingE","imageSmoothingEnabled","_ref8$imageSmoothingQ","imageSmoothingQuality","_ref8$maxWidth","_ref8$maxHeight","_ref8$minWidth","minWidth","_ref8$minHeight","minHeight","context","maxSizes","minSizes","min","destMaxSizes","destMinSizes","destWidth","destHeight","fillStyle","fillRect","save","translate","scale","map","param","floor","fromCharCode","getStringFromCharCode","dataView","start","str","getUint8","REGEXP_DATA_URL_HEAD","dataURLToArrayBuffer","dataURL","base64","binary","arrayBuffer","ArrayBuffer","uint8","arrayBufferToDataURL","mimeType","chunks","chunkSize","subarray","btoa","resetAndGetOrientation","orientation","DataView","littleEndian","app1Start","ifdStart","byteLength","offset","exifIDCode","tiffOffset","endianness","getUint16","firstIFDOffset","getUint32","_offset","_length","setUint16","parseOrientation","initContainer","initCanvas","initCropBox","renderCanvas","cropped","renderCropBox","container","containerData","offsetWidth","offsetHeight","imageData","rotated","canvasWidth","canvasHeight","canvasData","limited","limitCanvas","oldLeft","oldTop","initialCanvasData","sizeLimited","positionLimited","cropBoxData","_getAdjustedSizes","newCanvasLeft","newCanvasTop","minLeft","minTop","maxLeft","maxTop","changed","transformed","_getRotatedSizes","renderImage","limitCropBox","output","initialCropBoxData","maxCropBoxWidth","maxCropBoxHeight","face","cropBox","disabled","initPreview","crossOrigin","crossOriginUrl","alt","viewBox","appendChild","viewBoxImage","previews","ownerDocument","querySelectorAll","querySelector","el","html","innerHTML","cssText","resetPreview","cropBoxWidth","cropBoxHeight","originalWidth","originalHeight","getElementsByTagName","events","bind","onCropStart","cropStart","onWheel","wheel","passive","capture","onDblclick","dblclick","onCropMove","cropMove","onCropEnd","cropEnd","onResize","unbind","handlers","ratioX","ratioY","getCanvasData","getCropBoxData","setCanvasData","setCropBoxData","setDragMode","dragBox","delta","wheeling","setTimeout","deltaY","wheelDelta","buttons","button","pointerType","ctrlKey","action","changedTouches","touch","identifier","originalEvent","cropping","change","right","bottom","renderable","shiftKey","range","x","y","check","side","move","p","reset","initialImageData","clear","hasSameSize","isImg","replaced","uncreate","load","enable","disable","destroy","originalUrl","offsetX","offsetY","_this$canvasData","moveTo","_originalEvent","zoomTo","pivot","oldRatio","rotateTo","_scaleX","_scaleY","rounded","getContainerData","getImageData","sized","widthChanged","heightChanged","HTMLCanvasElement","source","_this$getData","initialX","initialY","initialWidth","initialHeight","_options$imageSmoothi","srcWidth","srcHeight","dstX","dstY","dstWidth","dstHeight","sourceWidth","sourceHeight","srcX","srcY","setAspectRatio","mode","croppable","AnotherCropper","tagName","reloading","sizing","init","read","clone","xhr","XMLHttpRequest","onabort","ontimeout","onprogress","getResponseHeader","abort","onloadend","responseType","withCredentials","send","_parseOrientation","parentNode","insertBefore","nextSibling","isIOSWebKit","navigator","userAgent","done","build","sizingImage","removeChild","template","getElementsByClassName","unbuild"],"mappings":"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","file":"js/chunk-914d4b14.008d74ab.js","sourcesContent":["var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"flex gap-1 w-full max-w-fit\"},[_c('ATooltip',[_c('template',{slot:\"title\"},[_vm._v(\"\\n نمایش جزئیات\\n \")]),_c('span',{on:{\"click\":function($event){return _vm.$emit('view')}}},[_c('Icon',{staticClass:\"!text-[25px] cursor-pointer\",attrs:{\"icon\":\"vuesax:clipboard-text-linear\"}})],1)],2),(_vm.hasEdit)?_c('ATooltip',{attrs:{\"placement\":\"bottom\"}},[_c('template',{slot:\"title\"},[_vm._v(\"\\n ویرایش\\n \")]),_c('div',{on:{\"click\":function($event){return _vm.$emit('edit')}}},[_c('Icon',{class:`!text-[25px] cursor-pointer text-success`,attrs:{\"icon\":'vuesax:edit-linear'}})],1)],2):_vm._e(),(_vm.hasDelete)?_c('ATooltip',{attrs:{\"placement\":\"bottom\"}},[_c('template',{slot:\"title\"},[_vm._v(\"\\n حذف\\n \")]),_c('ConfirmBtn',{attrs:{\"title\":\"آیتم حذف شود؟\",\"icon\":\"vuesax:trash-linear\",\"iconClass\":`!text-[25px] cursor-pointer text-danger`},on:{\"confirm\":function($event){return _vm.$emit('delete')}}})],2):_vm._e(),(_vm.hasActive)?_c('ATooltip',{attrs:{\"placement\":\"bottom\"}},[_c('template',{slot:\"title\"},[_vm._v(\"\\n \"+_vm._s(`${_vm.isActive(!_vm.record[_vm.activeKey])} کردن`)+\"\\n \")]),_c('ConfirmBtn',{attrs:{\"title\":`آیتم ${_vm.isActive(!_vm.record[_vm.activeKey])} شود؟`,\"icon\":_vm.record[_vm.activeKey] ? 'vuesax:tick-square-linear' : 'vuesax:close-square-linear',\"iconClass\":`!text-[25px] cursor-pointer ${_vm.record[_vm.activeKey] ? 'text-primary' : 'text-danger'}`},on:{\"confirm\":function($event){return _vm.$emit('active')}}})],2):_vm._e(),_vm._t(\"default\")],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <div class=\"flex gap-1 w-full max-w-fit\" slot-scope=\"{record}\">\r\n <ATooltip>\r\n <template slot=\"title\">\r\n نمایش جزئیات\r\n </template>\r\n <span @click=\"$emit('view')\">\r\n <Icon icon=\"vuesax:clipboard-text-linear\" class=\"!text-[25px] cursor-pointer\"/>\r\n </span>\r\n </ATooltip>\r\n <ATooltip v-if=\"hasEdit\" placement=\"bottom\">\r\n <template slot=\"title\">\r\n ویرایش\r\n </template>\r\n <!-- <ConfirmBtn\r\n title=\"آیتم ویرایش شود؟\"\r\n icon=\"vuesax:edit-linear\"\r\n :iconClass=\"`!text-[25px] cursor-pointer text-success`\"\r\n @confirm=\"$emit('edit')\"\r\n />-->\r\n <div @click=\"$emit('edit')\">\r\n <Icon :icon=\"'vuesax:edit-linear'\"\r\n :class=\"`!text-[25px] cursor-pointer text-success`\"/>\r\n </div>\r\n </ATooltip>\r\n <ATooltip v-if=\"hasDelete\" placement=\"bottom\">\r\n <template slot=\"title\">\r\n حذف\r\n </template>\r\n <ConfirmBtn\r\n title=\"آیتم حذف شود؟\"\r\n icon=\"vuesax:trash-linear\"\r\n :iconClass=\"`!text-[25px] cursor-pointer text-danger`\"\r\n @confirm=\"$emit('delete')\"\r\n />\r\n </ATooltip>\r\n <ATooltip v-if=\"hasActive\" placement=\"bottom\">\r\n <template slot=\"title\">\r\n {{ `${isActive(!record[activeKey])} کردن` }}\r\n </template>\r\n <ConfirmBtn\r\n :title=\"`آیتم ${isActive(!record[activeKey])} شود؟`\"\r\n @confirm=\"$emit('active')\"\r\n :icon=\"record[activeKey] ? 'vuesax:tick-square-linear' : 'vuesax:close-square-linear'\"\r\n :iconClass=\"`!text-[25px] cursor-pointer ${record[activeKey] ? 'text-primary' : 'text-danger'}`\"\r\n >\r\n </ConfirmBtn>\r\n </ATooltip>\r\n <slot/>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport ConfirmBtn from '@/components/ConfirmBtn'\r\nimport Icon from '@/assets/icons/UI/Icon'\r\n\r\nexport default {\r\n name: 'RestFullActionSheet',\r\n components: {\r\n Icon,\r\n ConfirmBtn\r\n },\r\n props: {\r\n record: Object,\r\n rowKey: String,\r\n hasActive: Boolean,\r\n hasEdit: Boolean,\r\n hasDelete: Boolean,\r\n activeKey: String\r\n },\r\n methods: {\r\n isActive (active) {\r\n return active ? 'فعال' : 'غیر فعال'\r\n }\r\n }\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n\r\n</style>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RestFullActionSheet.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RestFullActionSheet.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./RestFullActionSheet.vue?vue&type=template&id=3f179bc8&scoped=true\"\nimport script from \"./RestFullActionSheet.vue?vue&type=script&lang=js\"\nexport * from \"./RestFullActionSheet.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3f179bc8\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.value)?_c('div',[_c('div',{staticClass:\"font-bold text-black text-xl\"},[_vm._v(\"\\n \"+_vm._s(_vm.title)+\":\\n \")]),_c('div',{staticClass:\"mt-2\"},[_vm._v(\"\\n \"+_vm._s(_vm.value)+\"\\n \")])]):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <div v-if=\"value\">\r\n <div class=\"font-bold text-black text-xl\">\r\n {{title}}:\r\n </div>\r\n <div class=\"mt-2\">\r\n {{value}}\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nexport default {\r\n name: 'InfoItem',\r\n props: {\r\n title: {required: true},\r\n value: {required: true}\r\n }\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n\r\n</style>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./InfoItem.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./InfoItem.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./InfoItem.vue?vue&type=template&id=4b848b84&scoped=true\"\nimport script from \"./InfoItem.vue?vue&type=script&lang=js\"\nexport * from \"./InfoItem.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4b848b84\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"clearfix\"},[_c('AUpload',{attrs:{\"action\":_vm.url,\"headers\":_vm.headers,\"list-type\":\"picture-card\",\"multiple\":false,\"data\":_vm.getData,\"file-list\":_vm.fileList,\"remove\":_vm.handleRemove,\"before-upload\":_vm.handleBeforeUpload},on:{\"preview\":_vm.handlePreview,\"select\":_vm.select,\"change\":_vm.handleChange}},[(_vm.fileList.length==0)?_c('div',[_c('a-icon',{attrs:{\"type\":\"plus\"}}),_c('div',{staticClass:\"ant-upload-text\"},[_vm._v(\"\\n بارگذاری\\n \")])],1):_vm._e()]),_c('AModal',{attrs:{\"visible\":_vm.previewVisible,\"footer\":null},on:{\"cancel\":_vm.handleCancel}},[_c('img',{staticStyle:{\"width\":\"100%\"},attrs:{\"alt\":\"example\",\"src\":_vm.previewImage}})]),(_vm.srcImageCompressed)?_c('CropModal',{attrs:{\"imgBeforeCrop\":_vm.srcImageCompressed},on:{\"cancel\":_vm.closeCropModal,\"ok\":_vm.handleOK}}):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('a-modal',{attrs:{\"visible\":true,\"footer\":null},on:{\"cancel\":function($event){return _vm.$emit('cancel')}}},[_c('a-spin',{attrs:{\"spinning\":_vm.loading}},[_c('div',{staticClass:\"m-5 rounded\"},[_c('img',{ref:\"image\",staticClass:\"mt-3 w-full\",attrs:{\"alt\":\"example\",\"src\":_vm.imgBeforeCrop}})])]),_c('div',{staticClass:\"text-center w-full\"},[_c('a-button',{staticClass:\"w-22\",attrs:{\"type\":\"primary\"},on:{\"click\":_vm.request}},[_vm._v(\"تایید\")])],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n\t<a-modal :visible=\"true\" :footer=\"null\" @cancel=\"$emit('cancel')\">\r\n\t\t<a-spin :spinning=\"loading\">\r\n\t\t\t<div class=\"m-5 rounded\">\r\n<!--\t\t\t\t<div v-show=\"!afterResize\" class=\"text-center\">در حال پردازش</div>-->\r\n\t\t\t\t<img ref=\"image\" alt=\"example\" :src=\"imgBeforeCrop\"\r\n\t\t\t\t\t class=\"mt-3 w-full\"/>\r\n\t\t\t</div>\r\n\t\t</a-spin>\r\n\t\t<div class=\"text-center w-full\">\r\n\t\t\t<a-button @click=\"request\" class=\"w-22\" type=\"primary\">تایید</a-button>\r\n\t\t</div>\r\n\t\t<!--\t\t\t<div v-if=\"afterResize\">\r\n\t\t\t\t\t\t<img :src=\"afterResize\" style=\"height: 5rem; width: 5rem\">\r\n\r\n\t\t\t\t\t</div>-->\r\n\t</a-modal>\r\n</template>\r\n\r\n<script>\r\nimport axios from \"@/axios\";\r\nimport Cropper from \"cropperjs\";\r\nimport 'cropperjs/dist/cropper.css';\r\nimport {baseURL} from '@/axios'\r\n\r\nexport default {\r\n\tname: \"CropModal\",\r\n\tdata() {\r\n\t\treturn {\r\n\t\t\tloading: false,\r\n\t\t}\r\n\t},\r\n\tprops:{\r\n\t\timgBeforeCrop:{require: true}\r\n\t},\r\n\tcomputed: {\r\n\t\theaders() {\r\n\t\t\treturn {\r\n\t\t\t\t'Authorization': 'Bearer ' + localStorage.getItem(\"accessToken\") || localStorage.accessToken\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\tcreated() {\r\n\r\n\t\tthis.$nextTick(() => {\r\n\r\n\t\t\tconst that = this\r\n\r\n\t\t\t// console.log(this.image)\r\n\t\t\tthis.image = this.$refs.image\r\n\t\t\tthis.cropper = new Cropper(this.image, {\r\n\t\t\t\tzoomable: false,\r\n\t\t\t\tscalable: false,\r\n\t\t\t\taspectRatio: 1,\r\n\t\t\t\tcrop() {\r\n\t\t\t\t\tthat.newCanvasData = this.cropper.getCroppedCanvas()\r\n\t\t\t\t\t// that.newFile = canvas.toDataURL(\"image/png\")\r\n\t\t\t\t},\r\n\r\n\t\t\t})\r\n\t\t})\r\n\t},\r\n\tmethods:{\r\n\t\trequest() {\r\n\t\t\t// console.log('hello')\r\n\t\t\t// const that = this\r\n\t\t\tthis.newCanvasData.toBlob(async (blob)=> {\r\n\t\t\t\t// console.log('ddd',blob)\r\n\t\t\t\tconst formData = new FormData()\r\n\t\t\t\tformData.append(\"file\", blob);\r\n\t\t\t\tformData.append(\"has_thumb\", 1);\r\n\t\t\t\tformData.append(\"has_watermark\", 0);\r\n\t\t\t\tformData.append(\"subject\", 1);\r\n\t\t\t\tformData.append(\"title\", 1);\r\n\t\t\t\tformData.append(\"type\", 3);\r\n\t\t\t\t// const those = this\r\n\t\t\t\tthis.loading = true\r\n\t\t\t\tconst that = this\r\n\t\t\t\tawait axios({\r\n\t\t\t\t\tmethod: \"post\",\r\n\t\t\t\t\turl: `${baseURL}site/file`,\r\n\t\t\t\t\tdata: formData,\r\n\t\t\t\t\theaders: this.headers,\r\n\t\t\t\t})\r\n\t\t\t\t\t.then(function (response) {\r\n\t\t\t\t\t\t//handle success\r\n\t\t\t\t\t\t// console.log(response);\r\n\t\t\t\t\t\tif (response.status === 200 || response.status === 201){\r\n\t\t\t\t\t\t\tthat.$message.success(\"عملیات با موفقیت انجام شد\")\r\n\t\t\t\t\t\t\t// this.imgSrc = response.data.src\r\n\t\t\t\t\t\t\tthat.$emit('ok', response.data)\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tthat.loading = false\r\n\t\t\t\t\t\t// this.editVisible = false\r\n\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.catch(function (response) {\r\n\t\t\t\t\t\t//handle error\r\n\t\t\t\t\t\t// console.log(response);\r\n\t\t\t\t\t\tthat.$message.error(\"خطا در آپلود عکس\")\r\n\t\t\t\t\t});\r\n\t\t\t})\r\n\t\t},\r\n\t}\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n\r\n</style>\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CropModal.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CropModal.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./CropModal.vue?vue&type=template&id=52d1bc84&scoped=true\"\nimport script from \"./CropModal.vue?vue&type=script&lang=js\"\nexport * from \"./CropModal.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"52d1bc84\",\n null\n \n)\n\nexport default component.exports","<template>\r\n <div class=\"clearfix\">\r\n <!--accept=\"image/jpeg\"-->\r\n <AUpload\r\n :action=\"url\"\r\n :headers=\"headers\"\r\n list-type=\"picture-card\"\r\n :multiple=\"false\"\r\n :data=\"getData\"\r\n :file-list=\"fileList\"\r\n :remove=\"handleRemove\"\r\n @preview=\"handlePreview\"\r\n @select=\"select\"\r\n @change=\"handleChange\"\r\n :before-upload=\"handleBeforeUpload\">\r\n <div v-if=\"fileList.length==0\">\r\n <a-icon type=\"plus\"/>\r\n <div class=\"ant-upload-text\">\r\n بارگذاری\r\n </div>\r\n </div>\r\n </AUpload>\r\n <!--\t\t<img :src=\"srcImageCompressed\"/>-->\r\n <AModal :visible=\"previewVisible\" :footer=\"null\" @cancel=\"handleCancel\">\r\n <img alt=\"example\" style=\"width: 100%\" :src=\"previewImage\"/>\r\n </AModal>\r\n <CropModal v-if=\"srcImageCompressed\"\r\n :imgBeforeCrop=\"srcImageCompressed\"\r\n @cancel=\"closeCropModal\"\r\n @ok=\"handleOK\"\r\n />\r\n\r\n </div>\r\n</template>\r\n<script>\r\n\r\n// import imageCompressor from 'vue-image-compressor'\r\n// import CropModal from \"@/components/ImageCropper/CropModal\";\r\nimport CropModal from '@/components/imageCropper/CropModal'\r\nimport {baseURL} from '@/axios'\r\n//import themeConfig from \"/themeConfig\";\r\n//import {baseURL} from \"@/axios\";\r\nimport {imageResize} from 'img-reduce-size-js'\r\n\r\n// import imageCompressor from \"vue-image-compressor\";\r\n\r\nfunction getBase64 (file) {\r\n return new Promise((resolve, reject) => {\r\n const reader = new FileReader()\r\n reader.readAsDataURL(file)\r\n reader.onload = () => resolve(reader.result)\r\n reader.onerror = error => reject(error)\r\n })\r\n}\r\n\r\nexport default {\r\n name: 'UploadInput',\r\n components: {CropModal},\r\n props: {\r\n limit: {\r\n type: Number,\r\n required: false,\r\n default: 20\r\n }\r\n },\r\n data () {\r\n return {\r\n url: `${baseURL}site/file`,\r\n previewVisible: false,\r\n previewImage: '',\r\n srcImageCompressed: undefined,\r\n fileList: [],\r\n fileListReserve: [],\r\n openModal: false\r\n }\r\n },\r\n watch: {\r\n fileList (n, o) {\r\n if (n.length > o.length) {\r\n this.$emit('add-file', n)\r\n } else if (n.length < o.length) {\r\n this.$emit('remove-file', n)\r\n }\r\n }\r\n },\r\n methods: {\r\n handleOK (res) {\r\n /*\t\t\tthis.fileList = this.fileListReserve\r\n this.fileListReserve = []*/\r\n this.$emit('ok', res)\r\n this.srcImageCompressed = undefined\r\n // console.log('gg?', this.srcImageCompressed)\r\n },\r\n closeCropModal () {\r\n this.srcImageCompressed = undefined\r\n this.fileList = []\r\n },\r\n handleRemove (file) {\r\n this.$emit('remove', file)\r\n console.log('remove')\r\n },\r\n handleCancel () {\r\n this.previewVisible = false\r\n },\r\n async handlePreview (file) {\r\n if (!file.url && !file.preview) {\r\n file.preview = await getBase64(file.originFileObj)\r\n // this.imageFunction()\r\n }\r\n this.previewImage = file.url || file.preview\r\n this.previewVisible = true\r\n },\r\n handleChange ({\r\n fileList,\r\n event,\r\n file\r\n }) {\r\n\r\n /*console.log(file.status) this.fileList = fileList\r\n\r\n const reader = new FileReader()\r\n\r\n reader.readAsText(file)\r\n reader.onload = e => {\r\n // console.log(e.target.result)\r\n this.imageCompressor(e.target)\r\n }*/\r\n\r\n\r\n /* if (fileList && fileList.length) {\r\n console.log(fileList,'fileList')\r\n fileList.forEach((item,index)=>{\r\n console.log(\"dssdsd\",fileList,item.thumbUrl,item['thumbUrl'],fileList[0])\r\n })\r\n console.log(fileList[0].thumbUrl.slice(0,5))\r\n }*/\r\n //this.imageCompressor(fileList)\r\n /*\t\t\tconsole.log(fileList);\r\n console.log(event);\r\n console.log(file);*/\r\n if (file.status !== 'removed' /*&& file.response && file.response.id*/) {\r\n // this.$emit('ok', file.response);\r\n this.myCompressor(file)\r\n // this.imageCompressor(file.response.full_src)\r\n // this.imageCompressor(file.response.full_src)\r\n // console.log('ffffff', this.srcImageCompressed)\r\n\r\n }\r\n this.fileList = fileList\r\n // return false\r\n },\r\n\r\n/* imageCompressor (src) {\r\n // const reader = new FileReader();\r\n\r\n // const that = this\r\n\r\n // reader.readAsDataURL(file);\r\n\r\n // reader.onload = function (e) {\r\n const imgElement = document.createElement('img')\r\n // imgElement.src = event.target.result;\r\n imgElement.crossOrigin = '*'\r\n imgElement.src = src\r\n console.log('src ====>', src)\r\n imgElement.onload = async (e) => {\r\n const canvas = document.createElement('canvas')\r\n const MAX_WIDTH = 400\r\n\r\n const scaleSize = MAX_WIDTH / e.target.width\r\n canvas.width = MAX_WIDTH\r\n canvas.height = e.target.height * scaleSize\r\n\r\n const ctx = canvas.getContext('2d')\r\n\r\n await ctx.drawImage(e.target, 0, 0, canvas.width, canvas.height)\r\n\r\n const srcEncoded = ctx.canvas.toDataURL(e.target, 'image/jpeg')\r\n\r\n // document.querySelector(\"#jjjjj\").src = srcEncoded\r\n if (this.editVisible === false) {\r\n this.editVisible = true\r\n // console.log('test2', that.afterResize)\r\n }\r\n this.$nextTick(() => {\r\n this.srcImageCompressed = srcEncoded\r\n // console.log('jjjjj',this.srcImageCompressed)\r\n })\r\n }\r\n // }\r\n\r\n },*/\r\n myCompressor (file) {\r\n // console.log(\"file ====>\", file)\r\n const MAX_WIDTH = 320\r\n const MAX_HEIGHT = 320\r\n const MIME_TYPE = 'image/jpeg'\r\n const QUALITY = 1\r\n const that = this\r\n const input = document.getElementById('img-input')\r\n // const file = ev.target.files[0] // get the file\r\n const blobURL = URL.createObjectURL(file)\r\n const img = new Image()\r\n img.src = blobURL\r\n img.onerror = function () {\r\n URL.revokeObjectURL(this.src)\r\n // Handle the failure properly\r\n console.log('Cannot load image')\r\n }\r\n img.onload = function () {\r\n URL.revokeObjectURL(this.src)\r\n const [newWidth, newHeight] = calculateSize(img, MAX_WIDTH, MAX_HEIGHT)\r\n const canvas = document.createElement('canvas')\r\n canvas.width = newWidth\r\n canvas.height = newHeight\r\n const ctx = canvas.getContext('2d')\r\n ctx.drawImage(img, 0, 0, newWidth, newHeight)\r\n canvas.toBlob(\r\n (blob) => {\r\n // Handle the compressed image. es. upload or save in local state\r\n /* displayInfo('Original file', file)\r\n displayInfo('Compressed file', blob)*/\r\n console.log('Original file', file)\r\n console.log('Compressed file', blob)\r\n let urlCreator = window.URL || window.webkitURL;\r\n let imageUrl = urlCreator.createObjectURL(blob);\r\n/* const myImgElem = document.getElementById('my-img');\r\n myImgElem.src = imageUrl*/\r\n that.$nextTick(() => {\r\n console.log('imageUrl ====>', imageUrl)\r\n that.srcImageCompressed = imageUrl\r\n // console.log('jjjjj',this.srcImageCompressed)\r\n })\r\n },\r\n MIME_TYPE,\r\n QUALITY\r\n )\r\n // document.getElementById('root').append(canvas)\r\n\r\n console.log('ctx ====>', ctx)\r\n /* that.$nextTick(() => {\r\n console.log('canvas ====>', ctx)\r\n that.srcImageCompressed = ctx\r\n // console.log('jjjjj',this.srcImageCompressed)\r\n })*/\r\n }\r\n\r\n function calculateSize (img, maxWidth, maxHeight) {\r\n let width = img.width\r\n let height = img.height\r\n\r\n // calculate the width and height, constraining the proportions\r\n if (width > height) {\r\n if (width > maxWidth) {\r\n height = Math.round((height * maxWidth) / width)\r\n width = maxWidth\r\n }\r\n } else {\r\n if (height > maxHeight) {\r\n width = Math.round((width * maxHeight) / height)\r\n height = maxHeight\r\n }\r\n }\r\n return [width, height]\r\n }\r\n\r\n// Utility functions for demo purpose\r\n\r\n /* function displayInfo (label, file) {\r\n const p = document.createElement('p')\r\n p.innerText = `${label} - ${readableBytes(file.size)}`\r\n document.getElementById('root').append(p)\r\n }*/\r\n\r\n function readableBytes (bytes) {\r\n const i = Math.floor(Math.log(bytes) / Math.log(1024)),\r\n sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']\r\n\r\n return (bytes / Math.pow(1024, i)).toFixed(2) + ' ' + sizes[i]\r\n }\r\n },\r\n /* async imageCompressor (file) {\r\n /!* const response = await fetch(src)\r\n // here image is url/location of image\r\n const blob = await response.blob()\r\n const file = new File([blob], 'image.jpg', {type: blob.type})*!/\r\n console.log('ccccc', file)\r\n const that = this\r\n imageResize({\r\n file: file[0],\r\n maxSize: 500\r\n }).then(function (blob) {\r\n let reader = new FileReader()\r\n reader.readAsDataURL(blob)\r\n reader.onloadend = function () {\r\n\r\n that.srcImageCompressed = reader.result\r\n // that.openModal = true\r\n console.log('jjjjj', that.srcImageCompressed)\r\n }\r\n }).catch(function (err) {\r\n console.error(err)\r\n })\r\n },*/\r\n select () {\r\n // console.log(\"555 ==> \", 555);\r\n },\r\n getData () {\r\n return {\r\n has_thumb: 1,\r\n has_watermark: 0,\r\n subject: 1,\r\n title: 1,\r\n type: 3\r\n }\r\n },\r\n handleBeforeUpload (file) {\r\n /* console.log('this.fileList1 ====>', this.fileList)\r\n console.log('file1 ====>', file)*/\r\n // this.imageCompressor(reader)\r\n\r\n // Prevent upload\r\n return false\r\n }\r\n },\r\n computed: {\r\n headers () {\r\n return {\r\n 'Authorization': 'Bearer ' + localStorage.getItem('accessToken') || localStorage.accessToken\r\n }\r\n }\r\n }\r\n}\r\n</script>\r\n<style>\r\n/* you can make up upload button and sample style by using stylesheets */\r\n.ant-upload-select-picture-card i {\r\n font-size: 32px;\r\n color: #999;\r\n}\r\n\r\n.ant-upload-select-picture-card .ant-upload-text {\r\n margin-top: 8px;\r\n color: #666;\r\n}\r\n</style>\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SingleImageCropperUpload.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SingleImageCropperUpload.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./SingleImageCropperUpload.vue?vue&type=template&id=11ec11ca\"\nimport script from \"./SingleImageCropperUpload.vue?vue&type=script&lang=js\"\nexport * from \"./SingleImageCropperUpload.vue?vue&type=script&lang=js\"\nimport style0 from \"./SingleImageCropperUpload.vue?vue&type=style&index=0&id=11ec11ca&prod&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SingleImageCropperUpload.vue?vue&type=style&index=0&id=11ec11ca&prod&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/index.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SingleUploadInput.vue?vue&type=style&index=0&id=a203b430&prod&lang=css\"","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('APopconfirm',{attrs:{\"ok-text\":_vm.okText || 'بله',\"cancel-text\":_vm.cancelText || 'خیر'},on:{\"confirm\":function($event){return _vm.$emit('confirm')}}},[_c('template',{slot:\"title\"},[_vm._v(\"\\n \"+_vm._s(_vm.title)+\"\\n \")]),_c('Icon',{class:_vm.iconClass,attrs:{\"icon\":_vm.icon}})],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <APopconfirm\r\n :ok-text=\"okText || 'بله'\"\r\n :cancel-text=\"cancelText || 'خیر'\"\r\n @confirm=\"$emit('confirm')\"\r\n >\r\n <template slot=\"title\">\r\n {{title}}\r\n </template>\r\n <Icon :icon=\"icon\" :class=\"iconClass\"/>\r\n </APopconfirm>\r\n</template>\r\n\r\n<script>\r\nimport Icon from '@/assets/icons/UI/Icon'\r\nexport default {\r\n name: \"TooltipBtn\",\r\n components: {Icon},\r\n props: {\r\n icon: {\r\n type: String,\r\n required: true,\r\n },\r\n title: {\r\n type: String,\r\n required: false,\r\n },\r\n iconClass: {\r\n type: String,\r\n required: false,\r\n },\r\n okText: {\r\n type: String,\r\n required: false,\r\n },\r\n cancelText: {\r\n type: String,\r\n required: false,\r\n },\r\n },\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n\r\n</style>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ConfirmBtn.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ConfirmBtn.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./ConfirmBtn.vue?vue&type=template&id=2ae9e054&scoped=true\"\nimport script from \"./ConfirmBtn.vue?vue&type=script&lang=js\"\nexport * from \"./ConfirmBtn.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2ae9e054\",\n null\n \n)\n\nexport default component.exports","module.exports = {\r\n imageResize: (settings) => {\r\n const file = settings.file;\r\n const maxSize = settings.maxSize;\r\n const reader = new FileReader();\r\n let image = new Image();\r\n const canvas = document.createElement('canvas');\r\n const dataURItoBlob = function(dataURI) {\r\n const bytes = dataURI.split(',')[0].indexOf('base64') >= 0 ?\r\n atob(dataURI.split(',')[1]) :\r\n unescape(dataURI.split(',')[1]);\r\n const mime = dataURI.split(',')[0].split(':')[1].split(';')[0];\r\n const max = bytes.length;\r\n const ia = new Uint8Array(max);\r\n for (let i = 0; i < max; i++)\r\n ia[i] = bytes.charCodeAt(i);\r\n return new Blob([ia], { type: mime });\r\n };\r\n const resize = function() {\r\n let width = image.width;\r\n let height = image.height;\r\n if (width > height) {\r\n if (width > maxSize) {\r\n height *= maxSize / width;\r\n width = maxSize;\r\n }\r\n } else {\r\n if (height > maxSize) {\r\n width *= maxSize / height;\r\n height = maxSize;\r\n }\r\n }\r\n canvas.width = width;\r\n canvas.height = height;\r\n canvas.getContext('2d').drawImage(image, 0, 0, width, height);\r\n const dataUrl = canvas.toDataURL('image/jpeg');\r\n return dataURItoBlob(dataUrl);\r\n };\r\n return new Promise(function(ok, no) {\r\n if (!file.type.match(/image.*/)) {\r\n no(new Error(\"Not an image\"));\r\n return;\r\n }\r\n reader.onload = function(r) {\r\n image.onload = function() { return ok(resize()); };\r\n image.src = r.target.result.toString();\r\n };\r\n reader.readAsDataURL(file);\r\n });\r\n }\r\n};","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('a-spin',{attrs:{\"spinning\":_vm.loading},on:{\"submit\":function($event){}}},[_c('vx-card',{attrs:{\"title\":\"مشخصات پلینو\"}},[_c('a-tabs',{attrs:{\"animated\":\"\"},on:{\"change\":function($event){_vm.isEdit = false}},model:{value:(_vm.infType),callback:function ($$v) {_vm.infType=$$v},expression:\"infType\"}},[_c('a-tab-pane',{key:2,attrs:{\"tab\":\"نظرات\"}},[_c('CommentsList')],1),_c('a-tab-pane',{key:1,attrs:{\"tab\":\"اطلاعات محل کار\"}},[(_vm.isEdit)?_c('WorkInformationEdit',{on:{\"not_edit\":function($event){_vm.isEdit = false},\"refresh\":_vm.loadProfileData,\"loading\":_vm.setLoading},model:{value:(_vm.personData),callback:function ($$v) {_vm.personData=$$v},expression:\"personData\"}}):_c('WorkInformationView',{on:{\"edit\":function($event){_vm.isEdit = true}},model:{value:(_vm.personData),callback:function ($$v) {_vm.personData=$$v},expression:\"personData\"}})],1),_c('a-tab-pane',{key:0,attrs:{\"tab\":\"اطلاعات فردی\"}},[(_vm.isEdit)?_c('BaseInformationEdit',{on:{\"not_edit\":function($event){_vm.isEdit = false},\"refresh\":_vm.loadProfileData,\"loading\":_vm.setLoading},model:{value:(_vm.personData),callback:function ($$v) {_vm.personData=$$v},expression:\"personData\"}}):_c('BaseInformationView',{on:{\"edit\":function($event){_vm.isEdit = true}},model:{value:(_vm.personData),callback:function ($$v) {_vm.personData=$$v},expression:\"personData\"}})],1)],1)],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[(_vm.value)?_c('div',{staticClass:\"grid md:grid-cols-5 w-full relative\"},[(_vm.value.file)?_c('div',{staticStyle:{\"width\":\"10rem\",\"height\":\"10rem\"}},[_c('img',{staticClass:\"shadow-lg rounded-lg w-full object-fill\",staticStyle:{\"width\":\"inherit\",\"height\":\"inherit\"},attrs:{\"src\":_vm.value.file.full_src,\"alt\":_vm.value.name}})]):_vm._e(),(_vm.value)?_c('div',{staticClass:\"grid grid-cols-1 md:grid-cols-4 gap-5 md:col-span-4 w-full mt-10 md:mt-0\"},[_c('InfoItem',{attrs:{\"title\":\"نام و نام خانوادگی\",\"value\":_vm.value.name}}),_c('InfoItem',{attrs:{\"title\":\"شماره موبایل\",\"value\":_vm.value.mobile}}),_c('InfoItem',{attrs:{\"title\":\"تاریخ تولد\",\"value\":_vm._f(\"jdateNoTime\")(_vm.value.birthday)}}),_c('InfoItem',{attrs:{\"title\":\"تحصیلات\",\"value\":_vm.value.education}}),_c('InfoItem',{staticClass:\"md:col-span-2\",attrs:{\"title\":\"توضیحات\",\"value\":_vm.value.description}})],1):_vm._e()]):_vm._e(),_c('a-button',{staticClass:\"mt-12\",attrs:{\"type\":\"primary\"},on:{\"click\":function($event){return _vm.$emit('edit')}}},[_vm._v(\" صفحه ویرایش اطلاعات فردی\")])],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n\r\n <div>\r\n <div v-if=\"value\" class=\"grid md:grid-cols-5 w-full relative\">\r\n <div v-if=\"value.file\" class=\"\" style=\"width: 10rem; height: 10rem\">\r\n <img class=\" shadow-lg rounded-lg w-full object-fill\" style=\"width: inherit;height: inherit\" :src=\"value.file.full_src\" :alt=\"value.name\">\r\n </div>\r\n <div v-if=\"value\" class=\"grid grid-cols-1 md:grid-cols-4 gap-5 md:col-span-4 w-full mt-10 md:mt-0\">\r\n <InfoItem title=\"نام و نام خانوادگی\" :value=\"value.name\"/>\r\n <InfoItem title=\"شماره موبایل\" :value=\"value.mobile\"/>\r\n <InfoItem title=\"تاریخ تولد\" :value=\"value.birthday | jdateNoTime\"/>\r\n <InfoItem title=\"تحصیلات\" :value=\"value.education\"/>\r\n <InfoItem title=\"توضیحات\" :value=\"value.description\" class=\"md:col-span-2\"/>\r\n </div>\r\n </div>\r\n <a-button type=\"primary\" class=\"mt-12\" @click=\"$emit('edit')\"> صفحه ویرایش اطلاعات فردی</a-button>\r\n </div>\r\n\r\n</template>\r\n\r\n<script>\r\nimport InfoItem from '@/components/InfoItem'\r\nimport axios from '@/axios'\r\n\r\nexport default {\r\n name: 'BaseInformationView',\r\n components: {InfoItem},\r\n props: {\r\n value: {required: true}\r\n }\r\n\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n\r\n</style>\r\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BaseInformationView.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BaseInformationView.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./BaseInformationView.vue?vue&type=template&id=5520f655&scoped=true\"\nimport script from \"./BaseInformationView.vue?vue&type=script&lang=js\"\nexport * from \"./BaseInformationView.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5520f655\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[_c('a-form',{attrs:{\"form\":_vm.form},on:{\"submit\":_vm.handleSubmit}},[_c('div',{staticClass:\"grid md:grid-cols-3 gap-5\"},[_c('a-form-item',{attrs:{\"label\":\"نام\"}},[_c('a-input',{directives:[{name:\"decorator\",rawName:\"v-decorator\",value:(_vm.inputFa('fname')),expression:\"inputFa('fname')\"}]})],1),_c('a-form-item',{attrs:{\"label\":\"نام خانوادگی\"}},[_c('a-input',{directives:[{name:\"decorator\",rawName:\"v-decorator\",value:(_vm.inputFa('lname')),expression:\"inputFa('lname')\"}]})],1),_c('a-form-item',{attrs:{\"label\":\"شماره همراه\"}},[_c('a-input-number',{directives:[{name:\"decorator\",rawName:\"v-decorator\",value:(_vm.input('mobile')),expression:\"input('mobile')\"}],attrs:{\"type\":\"number\"}})],1),_c('a-form-item',{attrs:{\"label\":\"تاریخ تولد\"}},[_c('datepicker',{attrs:{\"id\":\"birthday\",\"auto-submit\":true,\"display-format\":\"jYYYY-jMM-jDD\"},model:{value:(_vm.models.birthday),callback:function ($$v) {_vm.$set(_vm.models, \"birthday\", $$v)},expression:\"models.birthday\"}})],1),_c('a-form-item',{attrs:{\"label\":\"تحصیلات\"}},[_c('a-input',{directives:[{name:\"decorator\",rawName:\"v-decorator\",value:(_vm.inputFa('education')),expression:\"inputFa('education')\"}]})],1),_c('a-form-item',{attrs:{\"label\":\"توضیحات\"}},[_c('a-textarea',{directives:[{name:\"decorator\",rawName:\"v-decorator\",value:(_vm.input('description',false)),expression:\"input('description',false)\"}]})],1),_c('a-form-item',{attrs:{\"label\":\"تصویر\"}},[_c('SingleImageCropUpload',{ref:\"photo\",on:{\"ok\":_vm.picUploaded,\"remove\":_vm.picRemove}})],1)],1),_c('div',{staticClass:\"flex gap-5\",staticStyle:{\"margin-top\":\"3em\"}},[_c('a-button',{attrs:{\"type\":\"primary\",\"html-type\":\"submit\"}},[_vm._v(\"\\n ویرایش اطلاعات\\n \")]),_c('a-button',{on:{\"click\":function($event){return _vm.$emit('not_edit')}}},[_vm._v(\"\\n بازگشت\\n \")])],1)])],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <div>\r\n <a-form :form=\"form\" @submit=\"handleSubmit\">\r\n <div class=\"grid md:grid-cols-3 gap-5\">\r\n <a-form-item label=\"نام\">\r\n <a-input\r\n v-decorator=\"inputFa('fname')\"\r\n />\r\n </a-form-item>\r\n <a-form-item label=\"نام خانوادگی\">\r\n <a-input\r\n v-decorator=\"inputFa('lname')\"\r\n />\r\n </a-form-item>\r\n <a-form-item label=\"شماره همراه\">\r\n <a-input-number\r\n type=\"number\"\r\n v-decorator=\"input('mobile')\"\r\n />\r\n </a-form-item>\r\n <a-form-item label=\"تاریخ تولد\">\r\n <datepicker id=\"birthday\" :auto-submit=\"true\" v-model=\"models.birthday\"\r\n display-format=\"jYYYY-jMM-jDD\"></datepicker>\r\n </a-form-item>\r\n <a-form-item label=\"تحصیلات\">\r\n <a-input\r\n v-decorator=\"inputFa('education')\"\r\n />\r\n </a-form-item>\r\n <a-form-item label=\"توضیحات\">\r\n <a-textarea\r\n v-decorator=\"input('description',false)\"\r\n />\r\n </a-form-item>\r\n <a-form-item label=\"تصویر\">\r\n <SingleImageCropUpload\r\n ref=\"photo\"\r\n @ok=\"picUploaded\"\r\n @remove=\"picRemove\"/>\r\n </a-form-item>\r\n </div>\r\n <div style=\"margin-top: 3em\" class=\"flex gap-5\">\r\n <a-button type=\"primary\" html-type=\"submit\" >\r\n ویرایش اطلاعات\r\n </a-button>\r\n <a-button @click=\"$emit('not_edit')\">\r\n بازگشت\r\n </a-button>\r\n </div>\r\n </a-form>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport SingleUploadInput from '@/components/input/SingleUploadInput'\r\nimport SingleImageCropUpload from '@/components/imageCropper/SingleImageCropperUpload'\r\nimport VuePersianDatetimePicker from 'vue-persian-datetime-picker'\r\nimport axios from '@/axios'\r\nimport {inputFa,input} from '@/views/utils'\r\n\r\nexport default {\r\n name: 'BaseInformationEdit',\r\n data () {\r\n return {\r\n form: this.$form.createForm(this, {name: 'coordinated'}),\r\n file_id: undefined,\r\n input,\r\n inputFa,\r\n models: {\r\n birthday: undefined,\r\n // loginDate: undefined,\r\n father_birthday: undefined,\r\n mother_birthday: undefined\r\n }\r\n }\r\n },\r\n props: {\r\n value: {}\r\n },\r\n computed: {\r\n id () {\r\n return this.$route.params.id\r\n }\r\n },\r\n methods: {\r\n handleSubmit (e) {\r\n e.preventDefault()\r\n this.form.validateFields(async (err, values) => {\r\n if (!err) {\r\n if (this.models.birthday){\r\n values.birthday = this.models.birthday\r\n }\r\n/* if (this.file_id){\r\n values.file_id = this.file_id\r\n }*/\r\n try {\r\n this.$emit('loading',true)\r\n await axios.put(`/admin/pol/user/${this.id}`, values)\r\n this.$message.success('ویرایش با موفقیت انجام شد')\r\n this.$emit('not_edit')\r\n this.$emit('refresh')\r\n }catch (e) {\r\n this.$message.error('خطا در ثبت اطلاعات')\r\n }\r\n finally {\r\n this.$emit('loading',false)\r\n }\r\n }\r\n })\r\n },\r\n picUploaded (response) {\r\n // this.$emit('pic_upload', response)\r\n // console.log(response)\r\n this.file_id = response.id\r\n },\r\n picRemove (response) {\r\n // this.$emit('pic_remove', response)\r\n this.file_id = undefined\r\n },\r\n fetchData (){\r\n this.form.setFieldsValue(this.value)\r\n this.models.birthday = this.value.birthday\r\n const data = this.value\r\n this.$refs.photo.fileList.push({\r\n uid: data.file.id,\r\n status: 'done',\r\n name: data.file.title,\r\n response: {\r\n id: data.file.id,\r\n image: data.file.full_src\r\n },\r\n url: data.file.full_src\r\n })\r\n console.log(this.value)\r\n }\r\n },\r\n components: {\r\n SingleUploadInput,\r\n datepicker: VuePersianDatetimePicker,\r\n SingleImageCropUpload\r\n },\r\n mounted () {\r\n this.fetchData()\r\n }\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n\r\n</style>\r\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BaseInformationEdit.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BaseInformationEdit.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./BaseInformationEdit.vue?vue&type=template&id=08aaee22&scoped=true\"\nimport script from \"./BaseInformationEdit.vue?vue&type=script&lang=js\"\nexport * from \"./BaseInformationEdit.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"08aaee22\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[(_vm.value)?_c('div',{staticClass:\"grid md:grid-cols-5 w-full relative\"},[(_vm.value.file_work)?_c('div',{staticStyle:{\"width\":\"10rem\",\"height\":\"10rem\"}},[_c('img',{staticClass:\"shadow-lg rounded-lg w-full object-fill\",staticStyle:{\"width\":\"inherit\",\"height\":\"inherit\"},attrs:{\"src\":_vm.value.file_work.full_src,\"alt\":_vm.value.name}})]):_vm._e(),(_vm.value)?_c('div',{staticClass:\"grid grid-cols-1 md:grid-cols-3 gap-5 md:col-span-4 w-full mt-10 md:mt-0\"},[_c('InfoItem',{attrs:{\"title\":\"شغل\",\"value\":_vm.value.job}}),_c('InfoItem',{attrs:{\"title\":\"عنوان محل کار\",\"value\":_vm.value.specialty}}),_c('InfoItem',{attrs:{\"title\":\"تلفن محل کار\",\"value\":_vm.value.job_phone}}),_c('InfoItem',{staticClass:\"md:col-span-2\",attrs:{\"title\":\"آدرس محل کار\",\"value\":_vm.value.job_address}})],1):_vm._e()]):_vm._e(),_c('a-button',{staticClass:\"mt-12\",attrs:{\"type\":\"primary\"},on:{\"click\":function($event){return _vm.$emit('edit')}}},[_vm._v(\" صفحه ویرایش اطلاعات محل کار\")])],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n\r\n <div>\r\n <div v-if=\"value\" class=\"grid md:grid-cols-5 w-full relative\">\r\n <div v-if=\"value.file_work\" class=\"\" style=\"width: 10rem; height: 10rem\">\r\n <img class=\" shadow-lg rounded-lg w-full object-fill\" style=\"width: inherit;height: inherit\" :src=\"value.file_work.full_src\" :alt=\"value.name\">\r\n </div>\r\n <div v-if=\"value\" class=\"grid grid-cols-1 md:grid-cols-3 gap-5 md:col-span-4 w-full mt-10 md:mt-0\">\r\n <InfoItem title=\"شغل\" :value=\"value.job\"/>\r\n <InfoItem title=\"عنوان محل کار\" :value=\"value.specialty\"/>\r\n <InfoItem title=\"تلفن محل کار\" :value=\"value.job_phone\"/>\r\n <InfoItem title=\"آدرس محل کار\" :value=\"value.job_address\" class=\"md:col-span-2\"/>\r\n </div>\r\n </div>\r\n <a-button type=\"primary\" class=\"mt-12\" @click=\"$emit('edit')\"> صفحه ویرایش اطلاعات محل کار</a-button>\r\n </div>\r\n\r\n</template>\r\n\r\n<script>\r\nimport InfoItem from '@/components/InfoItem'\r\nimport axios from '@/axios'\r\n\r\nexport default {\r\n name: 'BaseInformationView',\r\n components: {InfoItem},\r\n props: {\r\n value: {required: true}\r\n }\r\n\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n\r\n</style>\r\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./WorkInformationView.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./WorkInformationView.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./WorkInformationView.vue?vue&type=template&id=3c449848&scoped=true\"\nimport script from \"./WorkInformationView.vue?vue&type=script&lang=js\"\nexport * from \"./WorkInformationView.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3c449848\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[_c('a-form',{attrs:{\"form\":_vm.form},on:{\"submit\":_vm.handleSubmit}},[_c('div',{staticClass:\"grid md:grid-cols-3 gap-5\"},[_c('a-form-item',{attrs:{\"label\":\"شغل\"}},[_c('a-input',{directives:[{name:\"decorator\",rawName:\"v-decorator\",value:(_vm.inputFa('job')),expression:\"inputFa('job')\"}]})],1),_c('a-form-item',{attrs:{\"label\":\"شماره تلفن محل کار\"}},[_c('a-input-number',{directives:[{name:\"decorator\",rawName:\"v-decorator\",value:(_vm.input('job_phone')),expression:\"input('job_phone')\"}],attrs:{\"type\":\"number\"}})],1),_c('a-form-item',{attrs:{\"label\":\"عنوان محل کار\"}},[_c('a-input',{directives:[{name:\"decorator\",rawName:\"v-decorator\",value:(_vm.inputFa('specialty') ),expression:\"inputFa('specialty') \"}]})],1),_c('a-form-item',{staticClass:\"md:col-span-2\",attrs:{\"label\":\"آدرس محل کار\"}},[_c('a-textarea',{directives:[{name:\"decorator\",rawName:\"v-decorator\",value:(_vm.input('job_address')),expression:\"input('job_address')\"}]})],1),_c('a-form-item',{attrs:{\"label\":\"تصویر\"}},[_c('SingleUploadInput',{ref:\"photo\",on:{\"ok\":_vm.picUploaded,\"remove\":_vm.picRemove}})],1)],1),_c('div',{staticClass:\"flex gap-5\",staticStyle:{\"margin-top\":\"3em\"}},[_c('a-button',{attrs:{\"type\":\"primary\",\"html-type\":\"submit\"}},[_vm._v(\"\\n ویرایش اطلاعات\\n \")]),_c('a-button',{on:{\"click\":function($event){return _vm.$emit('not_edit')}}},[_vm._v(\"\\n بازگشت\\n \")])],1)])],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <div>\r\n <a-form :form=\"form\" @submit=\"handleSubmit\">\r\n <div class=\"grid md:grid-cols-3 gap-5\">\r\n <a-form-item label=\"شغل\">\r\n <a-input\r\n v-decorator=\"inputFa('job')\"\r\n />\r\n </a-form-item>\r\n <a-form-item label=\"شماره تلفن محل کار\">\r\n <a-input-number\r\n type=\"number\"\r\n v-decorator=\"input('job_phone')\"/>\r\n </a-form-item>\r\n <a-form-item label=\"عنوان محل کار\">\r\n <a-input\r\n v-decorator=\"inputFa('specialty') \"\r\n />\r\n </a-form-item>\r\n <a-form-item label=\"آدرس محل کار\" class=\"md:col-span-2\">\r\n <a-textarea\r\n v-decorator=\"input('job_address')\"\r\n />\r\n </a-form-item>\r\n <a-form-item label=\"تصویر\">\r\n <SingleUploadInput\r\n ref=\"photo\"\r\n @ok=\"picUploaded\"\r\n @remove=\"picRemove\"/>\r\n </a-form-item>\r\n </div>\r\n <div style=\"margin-top: 3em\" class=\"flex gap-5\">\r\n <a-button type=\"primary\" html-type=\"submit\" >\r\n ویرایش اطلاعات\r\n </a-button>\r\n <a-button @click=\"$emit('not_edit')\">\r\n بازگشت\r\n </a-button>\r\n </div>\r\n </a-form>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport SingleUploadInput from '@/components/input/SingleUploadInput'\r\nimport VuePersianDatetimePicker from 'vue-persian-datetime-picker'\r\nimport axios from '@/axios'\r\n\r\nimport {input,inputFa} from '@/views/utils'\r\n\r\nexport default {\r\n name: 'BaseInformationEdit',\r\n data () {\r\n return {\r\n form: this.$form.createForm(this, {name: 'coordinated'}),\r\n file_work_id: undefined,\r\n input,\r\n inputFa,\r\n models: {\r\n birthday: undefined,\r\n // loginDate: undefined,\r\n father_birthday: undefined,\r\n mother_birthday: undefined\r\n }\r\n }\r\n },\r\n props: {\r\n value: {}\r\n },\r\n computed: {\r\n id () {\r\n return this.$route.params.id\r\n }\r\n },\r\n methods: {\r\n handleSubmit (e) {\r\n e.preventDefault()\r\n this.form.validateFields(async (err, values) => {\r\n if (!err) {\r\n/* if (this.models.birthday){\r\n values.birthday = this.models.birthday\r\n }*/\r\n if (this.file_work_id){\r\n values.file_work_id = this.file_work_id\r\n }\r\n try {\r\n this.$emit('loading',true)\r\n await axios.put(`/admin/pol/user/${this.id}`, values)\r\n this.$message.success('ویرایش با موفقیت انجام شد')\r\n this.$emit('not_edit')\r\n this.$emit('refresh')\r\n }catch (e) {\r\n this.$message.error('خطا در ثبت اطلاعات')\r\n }\r\n finally {\r\n this.$emit('loading',false)\r\n }\r\n }\r\n })\r\n },\r\n picUploaded (response) {\r\n // this.$emit('pic_upload', response)\r\n // console.log(response)\r\n this.file_work_id = response.id\r\n },\r\n picRemove (response) {\r\n // this.$emit('pic_remove', response)\r\n this.file_work_id = undefined\r\n },\r\n fetchData (){\r\n this.form.setFieldsValue(this.value)\r\n this.models.birthday = this.value.birthday\r\n const data = this.value\r\n this.$refs.photo.fileList.push({\r\n uid: data.file_work.id,\r\n status: 'done',\r\n name: data.file_work.title,\r\n response: {\r\n id: data.file_work.id,\r\n image: data.file_work.full_src\r\n },\r\n url: data.file_work.full_src\r\n })\r\n console.log(this.value)\r\n }\r\n },\r\n components: {\r\n SingleUploadInput,\r\n datepicker: VuePersianDatetimePicker\r\n },\r\n mounted () {\r\n this.fetchData()\r\n }\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n\r\n</style>\r\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./WorkInformationEdit.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./WorkInformationEdit.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./WorkInformationEdit.vue?vue&type=template&id=31798548&scoped=true\"\nimport script from \"./WorkInformationEdit.vue?vue&type=script&lang=js\"\nexport * from \"./WorkInformationEdit.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"31798548\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',[_c('div',[_c('XTable',{ref:\"tbl\",attrs:{\"model\":_vm.cols},scopedSlots:_vm._u([{key:\"operator\",fn:function({record}){return [_c('RestFullActionSheet',{attrs:{\"record\":record,\"activeKey\":\"active\",\"has-delete\":true,\"has-active\":false,\"has-edit\":false},on:{\"active\":function($event){return _vm.toggleActive(record.id)},\"edit\":function($event){return _vm.toEdit(record.id)},\"delete\":function($event){return _vm.deleteItem(record.id)},\"view\":function($event){return _vm.setInitialValue(record)}}},[(record.caj)?_c('ATooltip',{attrs:{\"placement\":\"bottom\"}},[_c('template',{slot:\"title\"},[_vm._v(\"\\n \"+_vm._s(`${record.sts === 3 ? 'غیر فعال' : 'فعال'} کردن`)+\"\\n \")]),_c('ConfirmBtn',{attrs:{\"title\":`نظر ${record.sts === 3 ? 'رد':'تایید' } شود؟`,\"icon\":record.sts === 3 ? 'vuesax:tick-square-linear' : 'vuesax:close-square-linear',\"iconClass\":`!text-[25px] cursor-pointer ${record.sts === 3 ? 'text-success' : 'text-danger'}`},on:{\"confirm\":function($event){return _vm.changeActivity(record.id,record.sts)}}})],2):_vm._e(),(record.caj)?_c('ATooltip',{attrs:{\"placement\":\"bottom\"}},[_c('template',{slot:\"title\"},[_vm._v(\"\\n پاسخ\\n \")]),_c('ConfirmBtn',{attrs:{\"title\":\"نظر پاسخ داده شود؟\",\"icon\":\"vuesax:messages-linear\",\"iconClass\":`!text-[25px] cursor-pointer text-primary`},on:{\"confirm\":function($event){return _vm.replyCommentItem(record.id,record.body)}}})],2):_vm._e()],1)]}}])})],1),_c('a-modal',{attrs:{\"footer\":null},model:{value:(_vm.addModal),callback:function ($$v) {_vm.addModal=$$v},expression:\"addModal\"}},[_c('a-spin',{attrs:{\"spinning\":_vm.loading},on:{\"submit\":_vm.handleSubmit}},[_c('a-form',{attrs:{\"form\":_vm.form}},[_c('InfoItem',{attrs:{\"value\":_vm.last_text,\"title\":\"متن نظر\"}}),_vm._v(\"\\n \"+_vm._s(_vm.last_text)+\"\\n\\n \"),_c('a-form-item',{attrs:{\"label\":\"عنوان\"}},[_c('a-input',{directives:[{name:\"decorator\",rawName:\"v-decorator\",value:(['subject', { rules: [{ required: true, message: 'لطفا مقدار را وارد کنید' }] }]),expression:\"['subject', { rules: [{ required: true, message: 'لطفا مقدار را وارد کنید' }] }]\"}]})],1),_c('a-form-item',{attrs:{\"label\":\"متن نظر\"}},[_c('a-textarea',{directives:[{name:\"decorator\",rawName:\"v-decorator\",value:(['body', { rules: [{ required: true, message: 'لطفا مقدار را وارد کنید' }] }]),expression:\"['body', { rules: [{ required: true, message: 'لطفا مقدار را وارد کنید' }] }]\"}],attrs:{\"rows\":4}})],1),_c('a-button',{staticStyle:{\"margin-top\":\"3em\"},attrs:{\"type\":\"primary\",\"html-type\":\"submit\"}},[_vm._v(\"\\n ثبت\\n \")])],1)],1)],1),(_vm.initialValue)?_c('a-modal',{attrs:{\"footer\":null},model:{value:(_vm.view),callback:function ($$v) {_vm.view=$$v},expression:\"view\"}},[_c('div',{staticClass:\"md:flex gap-5 pt-10\"},[_c('div',[_c('a-descriptions',{attrs:{\"title\":\"اطلاعات\",\"column\":{ xxl: 3, md: 2, xs: 1 }}},[_c('a-descriptions-item',{attrs:{\"label\":\"شناسه\"}},[_vm._v(\"\\n \"+_vm._s(_vm.initialValue.id || '-')+\"\\n \")]),_c('a-descriptions-item',{attrs:{\"label\":\"نام و نام خانوادگی\"}},[_vm._v(\"\\n \"+_vm._s(_vm.initialValue.name || '-')+\"\\n \")]),_c('a-descriptions-item',{attrs:{\"label\":\"تاریخ\"}},[_vm._v(\"\\n \"+_vm._s(_vm.initialValue.caj)+\"\\n \")]),_c('a-descriptions-item',{attrs:{\"label\":\"متن نظر\"}},[_vm._v(\"\\n \"+_vm._s(_vm.initialValue.body)+\"\\n \")])],1)],1)])]):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import XTbl, {Xtc} from '@/components/x-table/index';\r\n\r\nconst tbl = new XTbl('/admin/comment/table', 'لیست نظرات')\r\ntbl.add(new Xtc('id', 'شناسه').filterText())\r\ntbl.add(new Xtc('owner.name', 'نام و نام خانوادگی').filterText())\r\ntbl.add(new Xtc('caj', 'تاریخ').filterDate())\r\ntbl.add(new Xtc('body', 'متن نظر').filterText())\r\ntbl.add(new Xtc('operator', 'عملیات').renderSlot('operator'))\r\n\r\nexport default tbl;\r\n\r\n","<template>\r\n <div>\r\n <div>\r\n <!-- <a-button type=\"primary\" class=\"mb-5\" @click=\"addCommentItem\">افزودن نظر جدید</a-button>-->\r\n <XTable :model=\"cols\" ref=\"tbl\">\r\n <template slot=\"operator\" slot-scope=\"{record}\">\r\n\r\n <RestFullActionSheet\r\n :record=\"record\" activeKey=\"active\"\r\n :has-delete=\"true\"\r\n :has-active=\"false\"\r\n :has-edit=\"false\"\r\n @active=\"toggleActive(record.id)\"\r\n @edit=\"toEdit(record.id)\"\r\n @delete=\"deleteItem(record.id)\"\r\n @view=\"setInitialValue(record)\">\r\n <ATooltip placement=\"bottom\" v-if=\"record.caj\">\r\n <template slot=\"title\">\r\n {{ `${record.sts === 3 ? 'غیر فعال' : 'فعال'} کردن` }}\r\n </template>\r\n <ConfirmBtn\r\n :title=\"`نظر ${record.sts === 3 ? 'رد':'تایید' } شود؟`\"\r\n @confirm=\"changeActivity(record.id,record.sts)\"\r\n :icon=\"record.sts === 3 ? 'vuesax:tick-square-linear' : 'vuesax:close-square-linear'\"\r\n :iconClass=\"`!text-[25px] cursor-pointer ${record.sts === 3 ? 'text-success' : 'text-danger'}`\"\r\n >\r\n </ConfirmBtn>\r\n </ATooltip>\r\n <ATooltip placement=\"bottom\" v-if=\"record.caj\">\r\n <template slot=\"title\">\r\n پاسخ\r\n </template>\r\n <ConfirmBtn\r\n title=\"نظر پاسخ داده شود؟\"\r\n icon=\"vuesax:messages-linear\"\r\n :iconClass=\"`!text-[25px] cursor-pointer text-primary`\"\r\n @confirm=\"replyCommentItem(record.id,record.body)\"\r\n />\r\n </ATooltip>\r\n </RestFullActionSheet>\r\n </template>\r\n\r\n </XTable>\r\n </div>\r\n <a-modal v-model=\"addModal\" :footer=\"null\">\r\n <a-spin :spinning=\"loading\" @submit=\"handleSubmit\">\r\n <a-form :form=\"form\">\r\n\r\n <InfoItem :value=\"last_text\" title=\"متن نظر\"/>\r\n {{ last_text }}\r\n\r\n <a-form-item label=\"عنوان\">\r\n <a-input\r\n v-decorator=\"['subject', { rules: [{ required: true, message: 'لطفا مقدار را وارد کنید' }] }]\"\r\n />\r\n </a-form-item>\r\n <a-form-item label=\"متن نظر\">\r\n <a-textarea\r\n :rows=\"4\"\r\n v-decorator=\"['body', { rules: [{ required: true, message: 'لطفا مقدار را وارد کنید' }] }]\"\r\n />\r\n </a-form-item>\r\n\r\n <a-button type=\"primary\" html-type=\"submit\" style=\"margin-top: 3em\">\r\n ثبت\r\n </a-button>\r\n </a-form>\r\n </a-spin>\r\n </a-modal>\r\n <a-modal v-model=\"view\" :footer=\"null\" v-if=\"initialValue\">\r\n <div class=\"md:flex gap-5 pt-10\">\r\n <div>\r\n <a-descriptions title=\"اطلاعات\" :column=\"{ xxl: 3, md: 2, xs: 1 }\">\r\n <a-descriptions-item label=\"شناسه\">\r\n {{ initialValue.id || '-' }}\r\n </a-descriptions-item>\r\n <a-descriptions-item label=\"نام و نام خانوادگی\">\r\n {{ initialValue.name || '-' }}\r\n </a-descriptions-item>\r\n <a-descriptions-item label=\"تاریخ\">\r\n {{ initialValue.caj }}\r\n </a-descriptions-item>\r\n <a-descriptions-item label=\"متن نظر\">\r\n {{ initialValue.body }}\r\n </a-descriptions-item>\r\n <!-- <a-descriptions-item label=\"نقش\">\r\n {{ initialValue.type_cnt.value || '-' }}\r\n </a-descriptions-item>-->\r\n </a-descriptions>\r\n </div>\r\n </div>\r\n </a-modal>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport * as TableCol from '@/table/comments'\r\nimport XTable from '@/components/x-table/XTable'\r\nimport axios from '@/axios'\r\nimport RestFullActionSheet from '@/components/RestFullActionSheet'\r\nimport ConfirmBtn from '@/components/ConfirmBtn'\r\nimport InfoItem from '@/components/InfoItem'\r\n\r\n\r\nexport default {\r\n name: 'list',\r\n components: {\r\n RestFullActionSheet,\r\n XTable,\r\n ConfirmBtn,\r\n InfoItem\r\n },\r\n data () {\r\n return {\r\n cols: null,\r\n initialValue: undefined,\r\n form: this.$form.createForm(this, {name: 'coordinated'}),\r\n loading: false,\r\n view: false,\r\n addModal: false,\r\n parent_id: undefined,\r\n last_text: undefined\r\n }\r\n },\r\n computed: {\r\n id () {\r\n return this.$route.params.id\r\n }\r\n },\r\n methods: {\r\n handleSubmit (e) {\r\n e.preventDefault()\r\n this.form.validateFields(async (err, values) => {\r\n if (this.parent_id) {\r\n values.parent_id = this.parent_id\r\n }\r\n if (this.id) {\r\n values.pol_user_id = parseInt(this.id)\r\n }\r\n if (!err) {\r\n try {\r\n this.loading = true\r\n await axios.post('/admin/comment', values)\r\n this.$message.success('پاسخ پیام با موفقیت ثبت شد')\r\n this.parent_id = undefined\r\n this.last_text = undefined\r\n this.addModal = false\r\n\r\n } catch (e) {\r\n this.$message.error('خطا در پاسخ نظر')\r\n }\r\n finally {\r\n this.loading = false\r\n }\r\n }\r\n })\r\n },\r\n async changeActivity (id,sts) {\r\n console.log(id, ' ', sts)\r\n try {\r\n this.$refs.tbl.loading = true\r\n const val= {id:0}\r\n val.id = id\r\n // debugger\r\n if (sts === 2){\r\n val.sts = 3\r\n }\r\n else if (sts === 3){\r\n val.sts = 2\r\n val.reason_reject = 'نظر رد شد'\r\n }\r\n else {\r\n val.sts = 3\r\n }\r\n await axios.post(`/admin/comment/sts`,val)\r\n this.$refs.tbl.fetch()\r\n }catch (e) {\r\n console.log(e)\r\n }\r\n finally {\r\n this.$refs.tbl.loading = false\r\n }\r\n },\r\n async toggleActive (id) {\r\n try {\r\n this.$refs.tbl.loading = true\r\n await axios.get(`/api/student/active/${id}`)\r\n this.$message.success('وضعیت کاربر با موفقیت تغیر کرد')\r\n await this.$refs.tbl.fetch()\r\n } catch (error) {\r\n console.log(error)\r\n this.$message.error('خطا در تعیین وضعیت')\r\n } finally {\r\n this.$refs.tbl.loading = false\r\n }\r\n },\r\n replyCommentItem (id, text) {\r\n /* const routerData = this.$router.resolve({\r\n path: '/students/info/health/create',\r\n query: {stdid: this.id}\r\n })\r\n window.open(routerData.href, '_blank').focus()*/\r\n this.addModal = true\r\n this.parent_id = id\r\n this.last_text = text\r\n\r\n },\r\n toEdit (id) {\r\n const routerData = this.$router.resolve({\r\n path: '/students/info/health/edit',\r\n query: {\r\n stdid: this.id,\r\n editid: id\r\n }\r\n })\r\n window.open(routerData.href, '_blank').focus()\r\n },\r\n setInitialValue (row) {\r\n this.initialValue = row\r\n console.log(row)\r\n this.view = true\r\n // window.open(`/admin/students/info/${row.id}`, '_blank').focus()\r\n },\r\n async deleteItem (id) {\r\n try {\r\n this.$refs.tbl.loading = true\r\n await axios.delete(`/api/health/${id}`)\r\n await this.$refs.tbl.fetch()\r\n this.$message.success('آیتم با موفقیت حذف شد')\r\n } catch (error) {\r\n this.$message.error('خطا در حذف آیتم')\r\n console.log(error)\r\n } finally {\r\n this.$refs.tbl.loading = false\r\n }\r\n }\r\n },\r\n created () {\r\n this.cols = TableCol.default\r\n }\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n\r\n</style>\r\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CommentsList.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CommentsList.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./CommentsList.vue?vue&type=template&id=d4d23a12&scoped=true\"\nimport script from \"./CommentsList.vue?vue&type=script&lang=js\"\nexport * from \"./CommentsList.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"d4d23a12\",\n null\n \n)\n\nexport default component.exports","<template>\r\n <a-spin :spinning=\"loading\" @submit=\"\">\r\n <vx-card title=\"مشخصات پلینو\">\r\n <a-tabs animated v-model=\"infType\" @change=\"isEdit = false\">\r\n <a-tab-pane :key=\"2\" tab=\"نظرات\">\r\n <!-- <HealthList/>-->\r\n <CommentsList/>\r\n </a-tab-pane>\r\n <a-tab-pane :key=\"1\" tab=\"اطلاعات محل کار\">\r\n <WorkInformationEdit v-if=\"isEdit\" v-model=\"personData\" @not_edit=\"isEdit = false\" @refresh=\"loadProfileData\"\r\n @loading=\"setLoading\"/>\r\n <WorkInformationView v-else v-model=\"personData\" @edit=\"isEdit = true\"/>\r\n </a-tab-pane>\r\n <a-tab-pane :key=\"0\" tab=\"اطلاعات فردی\">\r\n <BaseInformationEdit v-if=\"isEdit\" v-model=\"personData\" @not_edit=\"isEdit = false\" @refresh=\"loadProfileData\"\r\n @loading=\"setLoading\"/>\r\n <BaseInformationView v-else v-model=\"personData\" @edit=\"isEdit = true\"/>\r\n </a-tab-pane>\r\n </a-tabs>\r\n </vx-card>\r\n </a-spin>\r\n</template>\r\n\r\n<script>\r\n// import add from './add'\r\nimport axios from '@/axios'\r\nimport BaseInformationView from '@/views/polino/components/BaseInformationView'\r\nimport BaseInformationEdit from '@/views/polino/components/BaseInformationEdit'\r\nimport WorkInformationView from '@/views/polino/components/WorkInformationView'\r\nimport WorkInformationEdit from '@/views/polino/components/WorkInformationEdit'\r\nimport CommentsList from '@/views/polino/components/CommentsList'\r\n\r\nexport default {\r\n name: 'info-edit',\r\n data () {\r\n return {\r\n\r\n loading: false,\r\n infType: 0,\r\n isEdit: false,\r\n personData: undefined\r\n }\r\n\r\n },\r\n components: {\r\n BaseInformationView,\r\n BaseInformationEdit,\r\n WorkInformationView,\r\n WorkInformationEdit,\r\n CommentsList\r\n },\r\n computed: {\r\n id () {\r\n return this.$route.params.id\r\n }\r\n },\r\n methods: {\r\n async loadProfileData () {\r\n try {\r\n let {data} = await axios.get(`/admin/pol/user/${this.id}`)\r\n this.personData = data\r\n console.log(data)\r\n } catch (e) {\r\n console.log(e)\r\n }\r\n },\r\n setLoading (val) {\r\n this.loading = val\r\n }\r\n },\r\n async created () {\r\n this.loading = true\r\n await this.loadProfileData()\r\n if (this.htab) {\r\n this.infType = 2\r\n }\r\n this.loading = false\r\n }\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n\r\n</style>\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./info_edit.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./info_edit.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./info_edit.vue?vue&type=template&id=3139a744&scoped=true\"\nimport script from \"./info_edit.vue?vue&type=script&lang=js\"\nexport * from \"./info_edit.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3139a744\",\n null\n \n)\n\nexport default component.exports","/*!\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:05.335Z\n */\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Cropper = factory());\n})(this, (function () { 'use strict';\n\n function ownKeys(e, r) {\n var t = Object.keys(e);\n if (Object.getOwnPropertySymbols) {\n var o = Object.getOwnPropertySymbols(e);\n r && (o = o.filter(function (r) {\n return Object.getOwnPropertyDescriptor(e, r).enumerable;\n })), t.push.apply(t, o);\n }\n return t;\n }\n function _objectSpread2(e) {\n for (var r = 1; r < arguments.length; r++) {\n var t = null != arguments[r] ? arguments[r] : {};\n r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {\n _defineProperty(e, r, t[r]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n });\n }\n return e;\n }\n function _toPrimitive(t, r) {\n if (\"object\" != typeof t || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != typeof i) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n }\n function _toPropertyKey(t) {\n var i = _toPrimitive(t, \"string\");\n return \"symbol\" == typeof i ? i : i + \"\";\n }\n function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n }\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor);\n }\n }\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n }\n function _defineProperty(obj, key, value) {\n key = _toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n }\n function _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n }\n function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n }\n function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n }\n function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n }\n function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n }\n function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n\n var IS_BROWSER = typeof window !== 'undefined' && typeof window.document !== 'undefined';\n var WINDOW = IS_BROWSER ? window : {};\n var IS_TOUCH_DEVICE = IS_BROWSER && WINDOW.document.documentElement ? 'ontouchstart' in WINDOW.document.documentElement : false;\n var HAS_POINTER_EVENT = IS_BROWSER ? 'PointerEvent' in WINDOW : false;\n var NAMESPACE = 'cropper';\n\n // Actions\n var ACTION_ALL = 'all';\n var ACTION_CROP = 'crop';\n var ACTION_MOVE = 'move';\n var ACTION_ZOOM = 'zoom';\n var ACTION_EAST = 'e';\n var ACTION_WEST = 'w';\n var ACTION_SOUTH = 's';\n var ACTION_NORTH = 'n';\n var ACTION_NORTH_EAST = 'ne';\n var ACTION_NORTH_WEST = 'nw';\n var ACTION_SOUTH_EAST = 'se';\n var ACTION_SOUTH_WEST = 'sw';\n\n // Classes\n var CLASS_CROP = \"\".concat(NAMESPACE, \"-crop\");\n var CLASS_DISABLED = \"\".concat(NAMESPACE, \"-disabled\");\n var CLASS_HIDDEN = \"\".concat(NAMESPACE, \"-hidden\");\n var CLASS_HIDE = \"\".concat(NAMESPACE, \"-hide\");\n var CLASS_INVISIBLE = \"\".concat(NAMESPACE, \"-invisible\");\n var CLASS_MODAL = \"\".concat(NAMESPACE, \"-modal\");\n var CLASS_MOVE = \"\".concat(NAMESPACE, \"-move\");\n\n // Data keys\n var DATA_ACTION = \"\".concat(NAMESPACE, \"Action\");\n var DATA_PREVIEW = \"\".concat(NAMESPACE, \"Preview\");\n\n // Drag modes\n var DRAG_MODE_CROP = 'crop';\n var DRAG_MODE_MOVE = 'move';\n var DRAG_MODE_NONE = 'none';\n\n // Events\n var EVENT_CROP = 'crop';\n var EVENT_CROP_END = 'cropend';\n var EVENT_CROP_MOVE = 'cropmove';\n var EVENT_CROP_START = 'cropstart';\n var EVENT_DBLCLICK = 'dblclick';\n var EVENT_TOUCH_START = IS_TOUCH_DEVICE ? 'touchstart' : 'mousedown';\n var EVENT_TOUCH_MOVE = IS_TOUCH_DEVICE ? 'touchmove' : 'mousemove';\n var EVENT_TOUCH_END = IS_TOUCH_DEVICE ? 'touchend touchcancel' : 'mouseup';\n var EVENT_POINTER_DOWN = HAS_POINTER_EVENT ? 'pointerdown' : EVENT_TOUCH_START;\n var EVENT_POINTER_MOVE = HAS_POINTER_EVENT ? 'pointermove' : EVENT_TOUCH_MOVE;\n var EVENT_POINTER_UP = HAS_POINTER_EVENT ? 'pointerup pointercancel' : EVENT_TOUCH_END;\n var EVENT_READY = 'ready';\n var EVENT_RESIZE = 'resize';\n var EVENT_WHEEL = 'wheel';\n var EVENT_ZOOM = 'zoom';\n\n // Mime types\n var MIME_TYPE_JPEG = 'image/jpeg';\n\n // RegExps\n var REGEXP_ACTIONS = /^e|w|s|n|se|sw|ne|nw|all|crop|move|zoom$/;\n var REGEXP_DATA_URL = /^data:/;\n var REGEXP_DATA_URL_JPEG = /^data:image\\/jpeg;base64,/;\n var REGEXP_TAG_NAME = /^img|canvas$/i;\n\n // Misc\n // Inspired by the default width and height of a canvas element.\n var MIN_CONTAINER_WIDTH = 200;\n var MIN_CONTAINER_HEIGHT = 100;\n\n var DEFAULTS = {\n // Define the view mode of the cropper\n viewMode: 0,\n // 0, 1, 2, 3\n\n // Define the dragging mode of the cropper\n dragMode: DRAG_MODE_CROP,\n // 'crop', 'move' or 'none'\n\n // Define the initial aspect ratio of the crop box\n initialAspectRatio: NaN,\n // Define the aspect ratio of the crop box\n aspectRatio: NaN,\n // An object with the previous cropping result data\n data: null,\n // A selector for adding extra containers to preview\n preview: '',\n // Re-render the cropper when resize the window\n responsive: true,\n // Restore the cropped area after resize the window\n restore: true,\n // Check if the current image is a cross-origin image\n checkCrossOrigin: true,\n // Check the current image's Exif Orientation information\n checkOrientation: true,\n // Show the black modal\n modal: true,\n // Show the dashed lines for guiding\n guides: true,\n // Show the center indicator for guiding\n center: true,\n // Show the white modal to highlight the crop box\n highlight: true,\n // Show the grid background\n background: true,\n // Enable to crop the image automatically when initialize\n autoCrop: true,\n // Define the percentage of automatic cropping area when initializes\n autoCropArea: 0.8,\n // Enable to move the image\n movable: true,\n // Enable to rotate the image\n rotatable: true,\n // Enable to scale the image\n scalable: true,\n // Enable to zoom the image\n zoomable: true,\n // Enable to zoom the image by dragging touch\n zoomOnTouch: true,\n // Enable to zoom the image by wheeling mouse\n zoomOnWheel: true,\n // Define zoom ratio when zoom the image by wheeling mouse\n wheelZoomRatio: 0.1,\n // Enable to move the crop box\n cropBoxMovable: true,\n // Enable to resize the crop box\n cropBoxResizable: true,\n // Toggle drag mode between \"crop\" and \"move\" when click twice on the cropper\n toggleDragModeOnDblclick: true,\n // Size limitation\n minCanvasWidth: 0,\n minCanvasHeight: 0,\n minCropBoxWidth: 0,\n minCropBoxHeight: 0,\n minContainerWidth: MIN_CONTAINER_WIDTH,\n minContainerHeight: MIN_CONTAINER_HEIGHT,\n // Shortcuts of events\n ready: null,\n cropstart: null,\n cropmove: null,\n cropend: null,\n crop: null,\n zoom: null\n };\n\n 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>';\n\n /**\n * Check if the given value is not a number.\n */\n var isNaN = Number.isNaN || WINDOW.isNaN;\n\n /**\n * Check if the given value is a number.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a number, else `false`.\n */\n function isNumber(value) {\n return typeof value === 'number' && !isNaN(value);\n }\n\n /**\n * Check if the given value is a positive number.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a positive number, else `false`.\n */\n var isPositiveNumber = function isPositiveNumber(value) {\n return value > 0 && value < Infinity;\n };\n\n /**\n * Check if the given value is undefined.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is undefined, else `false`.\n */\n function isUndefined(value) {\n return typeof value === 'undefined';\n }\n\n /**\n * Check if the given value is an object.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is an object, else `false`.\n */\n function isObject(value) {\n return _typeof(value) === 'object' && value !== null;\n }\n var hasOwnProperty = Object.prototype.hasOwnProperty;\n\n /**\n * Check if the given value is a plain object.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a plain object, else `false`.\n */\n function isPlainObject(value) {\n if (!isObject(value)) {\n return false;\n }\n try {\n var _constructor = value.constructor;\n var prototype = _constructor.prototype;\n return _constructor && prototype && hasOwnProperty.call(prototype, 'isPrototypeOf');\n } catch (error) {\n return false;\n }\n }\n\n /**\n * Check if the given value is a function.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a function, else `false`.\n */\n function isFunction(value) {\n return typeof value === 'function';\n }\n var slice = Array.prototype.slice;\n\n /**\n * Convert array-like or iterable object to an array.\n * @param {*} value - The value to convert.\n * @returns {Array} Returns a new array.\n */\n function toArray(value) {\n return Array.from ? Array.from(value) : slice.call(value);\n }\n\n /**\n * Iterate the given data.\n * @param {*} data - The data to iterate.\n * @param {Function} callback - The process function for each element.\n * @returns {*} The original data.\n */\n function forEach(data, callback) {\n if (data && isFunction(callback)) {\n if (Array.isArray(data) || isNumber(data.length) /* array-like */) {\n toArray(data).forEach(function (value, key) {\n callback.call(data, value, key, data);\n });\n } else if (isObject(data)) {\n Object.keys(data).forEach(function (key) {\n callback.call(data, data[key], key, data);\n });\n }\n }\n return data;\n }\n\n /**\n * Extend the given object.\n * @param {*} target - The target object to extend.\n * @param {*} args - The rest objects for merging to the target object.\n * @returns {Object} The extended object.\n */\n var assign = Object.assign || function assign(target) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n if (isObject(target) && args.length > 0) {\n args.forEach(function (arg) {\n if (isObject(arg)) {\n Object.keys(arg).forEach(function (key) {\n target[key] = arg[key];\n });\n }\n });\n }\n return target;\n };\n var REGEXP_DECIMALS = /\\.\\d*(?:0|9){12}\\d*$/;\n\n /**\n * Normalize decimal number.\n * Check out {@link https://0.30000000000000004.com/}\n * @param {number} value - The value to normalize.\n * @param {number} [times=100000000000] - The times for normalizing.\n * @returns {number} Returns the normalized number.\n */\n function normalizeDecimalNumber(value) {\n var times = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 100000000000;\n return REGEXP_DECIMALS.test(value) ? Math.round(value * times) / times : value;\n }\n var REGEXP_SUFFIX = /^width|height|left|top|marginLeft|marginTop$/;\n\n /**\n * Apply styles to the given element.\n * @param {Element} element - The target element.\n * @param {Object} styles - The styles for applying.\n */\n function setStyle(element, styles) {\n var style = element.style;\n forEach(styles, function (value, property) {\n if (REGEXP_SUFFIX.test(property) && isNumber(value)) {\n value = \"\".concat(value, \"px\");\n }\n style[property] = value;\n });\n }\n\n /**\n * Check if the given element has a special class.\n * @param {Element} element - The element to check.\n * @param {string} value - The class to search.\n * @returns {boolean} Returns `true` if the special class was found.\n */\n function hasClass(element, value) {\n return element.classList ? element.classList.contains(value) : element.className.indexOf(value) > -1;\n }\n\n /**\n * Add classes to the given element.\n * @param {Element} element - The target element.\n * @param {string} value - The classes to be added.\n */\n function addClass(element, value) {\n if (!value) {\n return;\n }\n if (isNumber(element.length)) {\n forEach(element, function (elem) {\n addClass(elem, value);\n });\n return;\n }\n if (element.classList) {\n element.classList.add(value);\n return;\n }\n var className = element.className.trim();\n if (!className) {\n element.className = value;\n } else if (className.indexOf(value) < 0) {\n element.className = \"\".concat(className, \" \").concat(value);\n }\n }\n\n /**\n * Remove classes from the given element.\n * @param {Element} element - The target element.\n * @param {string} value - The classes to be removed.\n */\n function removeClass(element, value) {\n if (!value) {\n return;\n }\n if (isNumber(element.length)) {\n forEach(element, function (elem) {\n removeClass(elem, value);\n });\n return;\n }\n if (element.classList) {\n element.classList.remove(value);\n return;\n }\n if (element.className.indexOf(value) >= 0) {\n element.className = element.className.replace(value, '');\n }\n }\n\n /**\n * Add or remove classes from the given element.\n * @param {Element} element - The target element.\n * @param {string} value - The classes to be toggled.\n * @param {boolean} added - Add only.\n */\n function toggleClass(element, value, added) {\n if (!value) {\n return;\n }\n if (isNumber(element.length)) {\n forEach(element, function (elem) {\n toggleClass(elem, value, added);\n });\n return;\n }\n\n // IE10-11 doesn't support the second parameter of `classList.toggle`\n if (added) {\n addClass(element, value);\n } else {\n removeClass(element, value);\n }\n }\n var REGEXP_CAMEL_CASE = /([a-z\\d])([A-Z])/g;\n\n /**\n * Transform the given string from camelCase to kebab-case\n * @param {string} value - The value to transform.\n * @returns {string} The transformed value.\n */\n function toParamCase(value) {\n return value.replace(REGEXP_CAMEL_CASE, '$1-$2').toLowerCase();\n }\n\n /**\n * Get data from the given element.\n * @param {Element} element - The target element.\n * @param {string} name - The data key to get.\n * @returns {string} The data value.\n */\n function getData(element, name) {\n if (isObject(element[name])) {\n return element[name];\n }\n if (element.dataset) {\n return element.dataset[name];\n }\n return element.getAttribute(\"data-\".concat(toParamCase(name)));\n }\n\n /**\n * Set data to the given element.\n * @param {Element} element - The target element.\n * @param {string} name - The data key to set.\n * @param {string} data - The data value.\n */\n function setData(element, name, data) {\n if (isObject(data)) {\n element[name] = data;\n } else if (element.dataset) {\n element.dataset[name] = data;\n } else {\n element.setAttribute(\"data-\".concat(toParamCase(name)), data);\n }\n }\n\n /**\n * Remove data from the given element.\n * @param {Element} element - The target element.\n * @param {string} name - The data key to remove.\n */\n function removeData(element, name) {\n if (isObject(element[name])) {\n try {\n delete element[name];\n } catch (error) {\n element[name] = undefined;\n }\n } else if (element.dataset) {\n // #128 Safari not allows to delete dataset property\n try {\n delete element.dataset[name];\n } catch (error) {\n element.dataset[name] = undefined;\n }\n } else {\n element.removeAttribute(\"data-\".concat(toParamCase(name)));\n }\n }\n var REGEXP_SPACES = /\\s\\s*/;\n var onceSupported = function () {\n var supported = false;\n if (IS_BROWSER) {\n var once = false;\n var listener = function listener() {};\n var options = Object.defineProperty({}, 'once', {\n get: function get() {\n supported = true;\n return once;\n },\n /**\n * This setter can fix a `TypeError` in strict mode\n * {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Getter_only}\n * @param {boolean} value - The value to set\n */\n set: function set(value) {\n once = value;\n }\n });\n WINDOW.addEventListener('test', listener, options);\n WINDOW.removeEventListener('test', listener, options);\n }\n return supported;\n }();\n\n /**\n * Remove event listener from the target element.\n * @param {Element} element - The event target.\n * @param {string} type - The event type(s).\n * @param {Function} listener - The event listener.\n * @param {Object} options - The event options.\n */\n function removeListener(element, type, listener) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var handler = listener;\n type.trim().split(REGEXP_SPACES).forEach(function (event) {\n if (!onceSupported) {\n var listeners = element.listeners;\n if (listeners && listeners[event] && listeners[event][listener]) {\n handler = listeners[event][listener];\n delete listeners[event][listener];\n if (Object.keys(listeners[event]).length === 0) {\n delete listeners[event];\n }\n if (Object.keys(listeners).length === 0) {\n delete element.listeners;\n }\n }\n }\n element.removeEventListener(event, handler, options);\n });\n }\n\n /**\n * Add event listener to the target element.\n * @param {Element} element - The event target.\n * @param {string} type - The event type(s).\n * @param {Function} listener - The event listener.\n * @param {Object} options - The event options.\n */\n function addListener(element, type, listener) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var _handler = listener;\n type.trim().split(REGEXP_SPACES).forEach(function (event) {\n if (options.once && !onceSupported) {\n var _element$listeners = element.listeners,\n listeners = _element$listeners === void 0 ? {} : _element$listeners;\n _handler = function handler() {\n delete listeners[event][listener];\n element.removeEventListener(event, _handler, options);\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n listener.apply(element, args);\n };\n if (!listeners[event]) {\n listeners[event] = {};\n }\n if (listeners[event][listener]) {\n element.removeEventListener(event, listeners[event][listener], options);\n }\n listeners[event][listener] = _handler;\n element.listeners = listeners;\n }\n element.addEventListener(event, _handler, options);\n });\n }\n\n /**\n * Dispatch event on the target element.\n * @param {Element} element - The event target.\n * @param {string} type - The event type(s).\n * @param {Object} data - The additional event data.\n * @returns {boolean} Indicate if the event is default prevented or not.\n */\n function dispatchEvent(element, type, data) {\n var event;\n\n // Event and CustomEvent on IE9-11 are global objects, not constructors\n if (isFunction(Event) && isFunction(CustomEvent)) {\n event = new CustomEvent(type, {\n detail: data,\n bubbles: true,\n cancelable: true\n });\n } else {\n event = document.createEvent('CustomEvent');\n event.initCustomEvent(type, true, true, data);\n }\n return element.dispatchEvent(event);\n }\n\n /**\n * Get the offset base on the document.\n * @param {Element} element - The target element.\n * @returns {Object} The offset data.\n */\n function getOffset(element) {\n var box = element.getBoundingClientRect();\n return {\n left: box.left + (window.pageXOffset - document.documentElement.clientLeft),\n top: box.top + (window.pageYOffset - document.documentElement.clientTop)\n };\n }\n var location = WINDOW.location;\n var REGEXP_ORIGINS = /^(\\w+:)\\/\\/([^:/?#]*):?(\\d*)/i;\n\n /**\n * Check if the given URL is a cross origin URL.\n * @param {string} url - The target URL.\n * @returns {boolean} Returns `true` if the given URL is a cross origin URL, else `false`.\n */\n function isCrossOriginURL(url) {\n var parts = url.match(REGEXP_ORIGINS);\n return parts !== null && (parts[1] !== location.protocol || parts[2] !== location.hostname || parts[3] !== location.port);\n }\n\n /**\n * Add timestamp to the given URL.\n * @param {string} url - The target URL.\n * @returns {string} The result URL.\n */\n function addTimestamp(url) {\n var timestamp = \"timestamp=\".concat(new Date().getTime());\n return url + (url.indexOf('?') === -1 ? '?' : '&') + timestamp;\n }\n\n /**\n * Get transforms base on the given object.\n * @param {Object} obj - The target object.\n * @returns {string} A string contains transform values.\n */\n function getTransforms(_ref) {\n var rotate = _ref.rotate,\n scaleX = _ref.scaleX,\n scaleY = _ref.scaleY,\n translateX = _ref.translateX,\n translateY = _ref.translateY;\n var values = [];\n if (isNumber(translateX) && translateX !== 0) {\n values.push(\"translateX(\".concat(translateX, \"px)\"));\n }\n if (isNumber(translateY) && translateY !== 0) {\n values.push(\"translateY(\".concat(translateY, \"px)\"));\n }\n\n // Rotate should come first before scale to match orientation transform\n if (isNumber(rotate) && rotate !== 0) {\n values.push(\"rotate(\".concat(rotate, \"deg)\"));\n }\n if (isNumber(scaleX) && scaleX !== 1) {\n values.push(\"scaleX(\".concat(scaleX, \")\"));\n }\n if (isNumber(scaleY) && scaleY !== 1) {\n values.push(\"scaleY(\".concat(scaleY, \")\"));\n }\n var transform = values.length ? values.join(' ') : 'none';\n return {\n WebkitTransform: transform,\n msTransform: transform,\n transform: transform\n };\n }\n\n /**\n * Get the max ratio of a group of pointers.\n * @param {string} pointers - The target pointers.\n * @returns {number} The result ratio.\n */\n function getMaxZoomRatio(pointers) {\n var pointers2 = _objectSpread2({}, pointers);\n var maxRatio = 0;\n forEach(pointers, function (pointer, pointerId) {\n delete pointers2[pointerId];\n forEach(pointers2, function (pointer2) {\n var x1 = Math.abs(pointer.startX - pointer2.startX);\n var y1 = Math.abs(pointer.startY - pointer2.startY);\n var x2 = Math.abs(pointer.endX - pointer2.endX);\n var y2 = Math.abs(pointer.endY - pointer2.endY);\n var z1 = Math.sqrt(x1 * x1 + y1 * y1);\n var z2 = Math.sqrt(x2 * x2 + y2 * y2);\n var ratio = (z2 - z1) / z1;\n if (Math.abs(ratio) > Math.abs(maxRatio)) {\n maxRatio = ratio;\n }\n });\n });\n return maxRatio;\n }\n\n /**\n * Get a pointer from an event object.\n * @param {Object} event - The target event object.\n * @param {boolean} endOnly - Indicates if only returns the end point coordinate or not.\n * @returns {Object} The result pointer contains start and/or end point coordinates.\n */\n function getPointer(_ref2, endOnly) {\n var pageX = _ref2.pageX,\n pageY = _ref2.pageY;\n var end = {\n endX: pageX,\n endY: pageY\n };\n return endOnly ? end : _objectSpread2({\n startX: pageX,\n startY: pageY\n }, end);\n }\n\n /**\n * Get the center point coordinate of a group of pointers.\n * @param {Object} pointers - The target pointers.\n * @returns {Object} The center point coordinate.\n */\n function getPointersCenter(pointers) {\n var pageX = 0;\n var pageY = 0;\n var count = 0;\n forEach(pointers, function (_ref3) {\n var startX = _ref3.startX,\n startY = _ref3.startY;\n pageX += startX;\n pageY += startY;\n count += 1;\n });\n pageX /= count;\n pageY /= count;\n return {\n pageX: pageX,\n pageY: pageY\n };\n }\n\n /**\n * Get the max sizes in a rectangle under the given aspect ratio.\n * @param {Object} data - The original sizes.\n * @param {string} [type='contain'] - The adjust type.\n * @returns {Object} The result sizes.\n */\n function getAdjustedSizes(_ref4) {\n var aspectRatio = _ref4.aspectRatio,\n height = _ref4.height,\n width = _ref4.width;\n var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'contain';\n var isValidWidth = isPositiveNumber(width);\n var isValidHeight = isPositiveNumber(height);\n if (isValidWidth && isValidHeight) {\n var adjustedWidth = height * aspectRatio;\n if (type === 'contain' && adjustedWidth > width || type === 'cover' && adjustedWidth < width) {\n height = width / aspectRatio;\n } else {\n width = height * aspectRatio;\n }\n } else if (isValidWidth) {\n height = width / aspectRatio;\n } else if (isValidHeight) {\n width = height * aspectRatio;\n }\n return {\n width: width,\n height: height\n };\n }\n\n /**\n * Get the new sizes of a rectangle after rotated.\n * @param {Object} data - The original sizes.\n * @returns {Object} The result sizes.\n */\n function getRotatedSizes(_ref5) {\n var width = _ref5.width,\n height = _ref5.height,\n degree = _ref5.degree;\n degree = Math.abs(degree) % 180;\n if (degree === 90) {\n return {\n width: height,\n height: width\n };\n }\n var arc = degree % 90 * Math.PI / 180;\n var sinArc = Math.sin(arc);\n var cosArc = Math.cos(arc);\n var newWidth = width * cosArc + height * sinArc;\n var newHeight = width * sinArc + height * cosArc;\n return degree > 90 ? {\n width: newHeight,\n height: newWidth\n } : {\n width: newWidth,\n height: newHeight\n };\n }\n\n /**\n * Get a canvas which drew the given image.\n * @param {HTMLImageElement} image - The image for drawing.\n * @param {Object} imageData - The image data.\n * @param {Object} canvasData - The canvas data.\n * @param {Object} options - The options.\n * @returns {HTMLCanvasElement} The result canvas.\n */\n function getSourceCanvas(image, _ref6, _ref7, _ref8) {\n var imageAspectRatio = _ref6.aspectRatio,\n imageNaturalWidth = _ref6.naturalWidth,\n imageNaturalHeight = _ref6.naturalHeight,\n _ref6$rotate = _ref6.rotate,\n rotate = _ref6$rotate === void 0 ? 0 : _ref6$rotate,\n _ref6$scaleX = _ref6.scaleX,\n scaleX = _ref6$scaleX === void 0 ? 1 : _ref6$scaleX,\n _ref6$scaleY = _ref6.scaleY,\n scaleY = _ref6$scaleY === void 0 ? 1 : _ref6$scaleY;\n var aspectRatio = _ref7.aspectRatio,\n naturalWidth = _ref7.naturalWidth,\n naturalHeight = _ref7.naturalHeight;\n var _ref8$fillColor = _ref8.fillColor,\n fillColor = _ref8$fillColor === void 0 ? 'transparent' : _ref8$fillColor,\n _ref8$imageSmoothingE = _ref8.imageSmoothingEnabled,\n imageSmoothingEnabled = _ref8$imageSmoothingE === void 0 ? true : _ref8$imageSmoothingE,\n _ref8$imageSmoothingQ = _ref8.imageSmoothingQuality,\n imageSmoothingQuality = _ref8$imageSmoothingQ === void 0 ? 'low' : _ref8$imageSmoothingQ,\n _ref8$maxWidth = _ref8.maxWidth,\n maxWidth = _ref8$maxWidth === void 0 ? Infinity : _ref8$maxWidth,\n _ref8$maxHeight = _ref8.maxHeight,\n maxHeight = _ref8$maxHeight === void 0 ? Infinity : _ref8$maxHeight,\n _ref8$minWidth = _ref8.minWidth,\n minWidth = _ref8$minWidth === void 0 ? 0 : _ref8$minWidth,\n _ref8$minHeight = _ref8.minHeight,\n minHeight = _ref8$minHeight === void 0 ? 0 : _ref8$minHeight;\n var canvas = document.createElement('canvas');\n var context = canvas.getContext('2d');\n var maxSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: maxWidth,\n height: maxHeight\n });\n var minSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: minWidth,\n height: minHeight\n }, 'cover');\n var width = Math.min(maxSizes.width, Math.max(minSizes.width, naturalWidth));\n var height = Math.min(maxSizes.height, Math.max(minSizes.height, naturalHeight));\n\n // Note: should always use image's natural sizes for drawing as\n // imageData.naturalWidth === canvasData.naturalHeight when rotate % 180 === 90\n var destMaxSizes = getAdjustedSizes({\n aspectRatio: imageAspectRatio,\n width: maxWidth,\n height: maxHeight\n });\n var destMinSizes = getAdjustedSizes({\n aspectRatio: imageAspectRatio,\n width: minWidth,\n height: minHeight\n }, 'cover');\n var destWidth = Math.min(destMaxSizes.width, Math.max(destMinSizes.width, imageNaturalWidth));\n var destHeight = Math.min(destMaxSizes.height, Math.max(destMinSizes.height, imageNaturalHeight));\n var params = [-destWidth / 2, -destHeight / 2, destWidth, destHeight];\n canvas.width = normalizeDecimalNumber(width);\n canvas.height = normalizeDecimalNumber(height);\n context.fillStyle = fillColor;\n context.fillRect(0, 0, width, height);\n context.save();\n context.translate(width / 2, height / 2);\n context.rotate(rotate * Math.PI / 180);\n context.scale(scaleX, scaleY);\n context.imageSmoothingEnabled = imageSmoothingEnabled;\n context.imageSmoothingQuality = imageSmoothingQuality;\n context.drawImage.apply(context, [image].concat(_toConsumableArray(params.map(function (param) {\n return Math.floor(normalizeDecimalNumber(param));\n }))));\n context.restore();\n return canvas;\n }\n var fromCharCode = String.fromCharCode;\n\n /**\n * Get string from char code in data view.\n * @param {DataView} dataView - The data view for read.\n * @param {number} start - The start index.\n * @param {number} length - The read length.\n * @returns {string} The read result.\n */\n function getStringFromCharCode(dataView, start, length) {\n var str = '';\n length += start;\n for (var i = start; i < length; i += 1) {\n str += fromCharCode(dataView.getUint8(i));\n }\n return str;\n }\n var REGEXP_DATA_URL_HEAD = /^data:.*,/;\n\n /**\n * Transform Data URL to array buffer.\n * @param {string} dataURL - The Data URL to transform.\n * @returns {ArrayBuffer} The result array buffer.\n */\n function dataURLToArrayBuffer(dataURL) {\n var base64 = dataURL.replace(REGEXP_DATA_URL_HEAD, '');\n var binary = atob(base64);\n var arrayBuffer = new ArrayBuffer(binary.length);\n var uint8 = new Uint8Array(arrayBuffer);\n forEach(uint8, function (value, i) {\n uint8[i] = binary.charCodeAt(i);\n });\n return arrayBuffer;\n }\n\n /**\n * Transform array buffer to Data URL.\n * @param {ArrayBuffer} arrayBuffer - The array buffer to transform.\n * @param {string} mimeType - The mime type of the Data URL.\n * @returns {string} The result Data URL.\n */\n function arrayBufferToDataURL(arrayBuffer, mimeType) {\n var chunks = [];\n\n // Chunk Typed Array for better performance (#435)\n var chunkSize = 8192;\n var uint8 = new Uint8Array(arrayBuffer);\n while (uint8.length > 0) {\n // XXX: Babel's `toConsumableArray` helper will throw error in IE or Safari 9\n // eslint-disable-next-line prefer-spread\n chunks.push(fromCharCode.apply(null, toArray(uint8.subarray(0, chunkSize))));\n uint8 = uint8.subarray(chunkSize);\n }\n return \"data:\".concat(mimeType, \";base64,\").concat(btoa(chunks.join('')));\n }\n\n /**\n * Get orientation value from given array buffer.\n * @param {ArrayBuffer} arrayBuffer - The array buffer to read.\n * @returns {number} The read orientation value.\n */\n function resetAndGetOrientation(arrayBuffer) {\n var dataView = new DataView(arrayBuffer);\n var orientation;\n\n // Ignores range error when the image does not have correct Exif information\n try {\n var littleEndian;\n var app1Start;\n var ifdStart;\n\n // Only handle JPEG image (start by 0xFFD8)\n if (dataView.getUint8(0) === 0xFF && dataView.getUint8(1) === 0xD8) {\n var length = dataView.byteLength;\n var offset = 2;\n while (offset + 1 < length) {\n if (dataView.getUint8(offset) === 0xFF && dataView.getUint8(offset + 1) === 0xE1) {\n app1Start = offset;\n break;\n }\n offset += 1;\n }\n }\n if (app1Start) {\n var exifIDCode = app1Start + 4;\n var tiffOffset = app1Start + 10;\n if (getStringFromCharCode(dataView, exifIDCode, 4) === 'Exif') {\n var endianness = dataView.getUint16(tiffOffset);\n littleEndian = endianness === 0x4949;\n if (littleEndian || endianness === 0x4D4D /* bigEndian */) {\n if (dataView.getUint16(tiffOffset + 2, littleEndian) === 0x002A) {\n var firstIFDOffset = dataView.getUint32(tiffOffset + 4, littleEndian);\n if (firstIFDOffset >= 0x00000008) {\n ifdStart = tiffOffset + firstIFDOffset;\n }\n }\n }\n }\n }\n if (ifdStart) {\n var _length = dataView.getUint16(ifdStart, littleEndian);\n var _offset;\n var i;\n for (i = 0; i < _length; i += 1) {\n _offset = ifdStart + i * 12 + 2;\n if (dataView.getUint16(_offset, littleEndian) === 0x0112 /* Orientation */) {\n // 8 is the offset of the current tag's value\n _offset += 8;\n\n // Get the original orientation value\n orientation = dataView.getUint16(_offset, littleEndian);\n\n // Override the orientation with its default value\n dataView.setUint16(_offset, 1, littleEndian);\n break;\n }\n }\n }\n } catch (error) {\n orientation = 1;\n }\n return orientation;\n }\n\n /**\n * Parse Exif Orientation value.\n * @param {number} orientation - The orientation to parse.\n * @returns {Object} The parsed result.\n */\n function parseOrientation(orientation) {\n var rotate = 0;\n var scaleX = 1;\n var scaleY = 1;\n switch (orientation) {\n // Flip horizontal\n case 2:\n scaleX = -1;\n break;\n\n // Rotate left 180°\n case 3:\n rotate = -180;\n break;\n\n // Flip vertical\n case 4:\n scaleY = -1;\n break;\n\n // Flip vertical and rotate right 90°\n case 5:\n rotate = 90;\n scaleY = -1;\n break;\n\n // Rotate right 90°\n case 6:\n rotate = 90;\n break;\n\n // Flip horizontal and rotate right 90°\n case 7:\n rotate = 90;\n scaleX = -1;\n break;\n\n // Rotate left 90°\n case 8:\n rotate = -90;\n break;\n }\n return {\n rotate: rotate,\n scaleX: scaleX,\n scaleY: scaleY\n };\n }\n\n var render = {\n render: function render() {\n this.initContainer();\n this.initCanvas();\n this.initCropBox();\n this.renderCanvas();\n if (this.cropped) {\n this.renderCropBox();\n }\n },\n initContainer: function initContainer() {\n var element = this.element,\n options = this.options,\n container = this.container,\n cropper = this.cropper;\n var minWidth = Number(options.minContainerWidth);\n var minHeight = Number(options.minContainerHeight);\n addClass(cropper, CLASS_HIDDEN);\n removeClass(element, CLASS_HIDDEN);\n var containerData = {\n width: Math.max(container.offsetWidth, minWidth >= 0 ? minWidth : MIN_CONTAINER_WIDTH),\n height: Math.max(container.offsetHeight, minHeight >= 0 ? minHeight : MIN_CONTAINER_HEIGHT)\n };\n this.containerData = containerData;\n setStyle(cropper, {\n width: containerData.width,\n height: containerData.height\n });\n addClass(element, CLASS_HIDDEN);\n removeClass(cropper, CLASS_HIDDEN);\n },\n // Canvas (image wrapper)\n initCanvas: function initCanvas() {\n var containerData = this.containerData,\n imageData = this.imageData;\n var viewMode = this.options.viewMode;\n var rotated = Math.abs(imageData.rotate) % 180 === 90;\n var naturalWidth = rotated ? imageData.naturalHeight : imageData.naturalWidth;\n var naturalHeight = rotated ? imageData.naturalWidth : imageData.naturalHeight;\n var aspectRatio = naturalWidth / naturalHeight;\n var canvasWidth = containerData.width;\n var canvasHeight = containerData.height;\n if (containerData.height * aspectRatio > containerData.width) {\n if (viewMode === 3) {\n canvasWidth = containerData.height * aspectRatio;\n } else {\n canvasHeight = containerData.width / aspectRatio;\n }\n } else if (viewMode === 3) {\n canvasHeight = containerData.width / aspectRatio;\n } else {\n canvasWidth = containerData.height * aspectRatio;\n }\n var canvasData = {\n aspectRatio: aspectRatio,\n naturalWidth: naturalWidth,\n naturalHeight: naturalHeight,\n width: canvasWidth,\n height: canvasHeight\n };\n this.canvasData = canvasData;\n this.limited = viewMode === 1 || viewMode === 2;\n this.limitCanvas(true, true);\n canvasData.width = Math.min(Math.max(canvasData.width, canvasData.minWidth), canvasData.maxWidth);\n canvasData.height = Math.min(Math.max(canvasData.height, canvasData.minHeight), canvasData.maxHeight);\n canvasData.left = (containerData.width - canvasData.width) / 2;\n canvasData.top = (containerData.height - canvasData.height) / 2;\n canvasData.oldLeft = canvasData.left;\n canvasData.oldTop = canvasData.top;\n this.initialCanvasData = assign({}, canvasData);\n },\n limitCanvas: function limitCanvas(sizeLimited, positionLimited) {\n var options = this.options,\n containerData = this.containerData,\n canvasData = this.canvasData,\n cropBoxData = this.cropBoxData;\n var viewMode = options.viewMode;\n var aspectRatio = canvasData.aspectRatio;\n var cropped = this.cropped && cropBoxData;\n if (sizeLimited) {\n var minCanvasWidth = Number(options.minCanvasWidth) || 0;\n var minCanvasHeight = Number(options.minCanvasHeight) || 0;\n if (viewMode > 1) {\n minCanvasWidth = Math.max(minCanvasWidth, containerData.width);\n minCanvasHeight = Math.max(minCanvasHeight, containerData.height);\n if (viewMode === 3) {\n if (minCanvasHeight * aspectRatio > minCanvasWidth) {\n minCanvasWidth = minCanvasHeight * aspectRatio;\n } else {\n minCanvasHeight = minCanvasWidth / aspectRatio;\n }\n }\n } else if (viewMode > 0) {\n if (minCanvasWidth) {\n minCanvasWidth = Math.max(minCanvasWidth, cropped ? cropBoxData.width : 0);\n } else if (minCanvasHeight) {\n minCanvasHeight = Math.max(minCanvasHeight, cropped ? cropBoxData.height : 0);\n } else if (cropped) {\n minCanvasWidth = cropBoxData.width;\n minCanvasHeight = cropBoxData.height;\n if (minCanvasHeight * aspectRatio > minCanvasWidth) {\n minCanvasWidth = minCanvasHeight * aspectRatio;\n } else {\n minCanvasHeight = minCanvasWidth / aspectRatio;\n }\n }\n }\n var _getAdjustedSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: minCanvasWidth,\n height: minCanvasHeight\n });\n minCanvasWidth = _getAdjustedSizes.width;\n minCanvasHeight = _getAdjustedSizes.height;\n canvasData.minWidth = minCanvasWidth;\n canvasData.minHeight = minCanvasHeight;\n canvasData.maxWidth = Infinity;\n canvasData.maxHeight = Infinity;\n }\n if (positionLimited) {\n if (viewMode > (cropped ? 0 : 1)) {\n var newCanvasLeft = containerData.width - canvasData.width;\n var newCanvasTop = containerData.height - canvasData.height;\n canvasData.minLeft = Math.min(0, newCanvasLeft);\n canvasData.minTop = Math.min(0, newCanvasTop);\n canvasData.maxLeft = Math.max(0, newCanvasLeft);\n canvasData.maxTop = Math.max(0, newCanvasTop);\n if (cropped && this.limited) {\n canvasData.minLeft = Math.min(cropBoxData.left, cropBoxData.left + (cropBoxData.width - canvasData.width));\n canvasData.minTop = Math.min(cropBoxData.top, cropBoxData.top + (cropBoxData.height - canvasData.height));\n canvasData.maxLeft = cropBoxData.left;\n canvasData.maxTop = cropBoxData.top;\n if (viewMode === 2) {\n if (canvasData.width >= containerData.width) {\n canvasData.minLeft = Math.min(0, newCanvasLeft);\n canvasData.maxLeft = Math.max(0, newCanvasLeft);\n }\n if (canvasData.height >= containerData.height) {\n canvasData.minTop = Math.min(0, newCanvasTop);\n canvasData.maxTop = Math.max(0, newCanvasTop);\n }\n }\n }\n } else {\n canvasData.minLeft = -canvasData.width;\n canvasData.minTop = -canvasData.height;\n canvasData.maxLeft = containerData.width;\n canvasData.maxTop = containerData.height;\n }\n }\n },\n renderCanvas: function renderCanvas(changed, transformed) {\n var canvasData = this.canvasData,\n imageData = this.imageData;\n if (transformed) {\n var _getRotatedSizes = getRotatedSizes({\n width: imageData.naturalWidth * Math.abs(imageData.scaleX || 1),\n height: imageData.naturalHeight * Math.abs(imageData.scaleY || 1),\n degree: imageData.rotate || 0\n }),\n naturalWidth = _getRotatedSizes.width,\n naturalHeight = _getRotatedSizes.height;\n var width = canvasData.width * (naturalWidth / canvasData.naturalWidth);\n var height = canvasData.height * (naturalHeight / canvasData.naturalHeight);\n canvasData.left -= (width - canvasData.width) / 2;\n canvasData.top -= (height - canvasData.height) / 2;\n canvasData.width = width;\n canvasData.height = height;\n canvasData.aspectRatio = naturalWidth / naturalHeight;\n canvasData.naturalWidth = naturalWidth;\n canvasData.naturalHeight = naturalHeight;\n this.limitCanvas(true, false);\n }\n if (canvasData.width > canvasData.maxWidth || canvasData.width < canvasData.minWidth) {\n canvasData.left = canvasData.oldLeft;\n }\n if (canvasData.height > canvasData.maxHeight || canvasData.height < canvasData.minHeight) {\n canvasData.top = canvasData.oldTop;\n }\n canvasData.width = Math.min(Math.max(canvasData.width, canvasData.minWidth), canvasData.maxWidth);\n canvasData.height = Math.min(Math.max(canvasData.height, canvasData.minHeight), canvasData.maxHeight);\n this.limitCanvas(false, true);\n canvasData.left = Math.min(Math.max(canvasData.left, canvasData.minLeft), canvasData.maxLeft);\n canvasData.top = Math.min(Math.max(canvasData.top, canvasData.minTop), canvasData.maxTop);\n canvasData.oldLeft = canvasData.left;\n canvasData.oldTop = canvasData.top;\n setStyle(this.canvas, assign({\n width: canvasData.width,\n height: canvasData.height\n }, getTransforms({\n translateX: canvasData.left,\n translateY: canvasData.top\n })));\n this.renderImage(changed);\n if (this.cropped && this.limited) {\n this.limitCropBox(true, true);\n }\n },\n renderImage: function renderImage(changed) {\n var canvasData = this.canvasData,\n imageData = this.imageData;\n var width = imageData.naturalWidth * (canvasData.width / canvasData.naturalWidth);\n var height = imageData.naturalHeight * (canvasData.height / canvasData.naturalHeight);\n assign(imageData, {\n width: width,\n height: height,\n left: (canvasData.width - width) / 2,\n top: (canvasData.height - height) / 2\n });\n setStyle(this.image, assign({\n width: imageData.width,\n height: imageData.height\n }, getTransforms(assign({\n translateX: imageData.left,\n translateY: imageData.top\n }, imageData))));\n if (changed) {\n this.output();\n }\n },\n initCropBox: function initCropBox() {\n var options = this.options,\n canvasData = this.canvasData;\n var aspectRatio = options.aspectRatio || options.initialAspectRatio;\n var autoCropArea = Number(options.autoCropArea) || 0.8;\n var cropBoxData = {\n width: canvasData.width,\n height: canvasData.height\n };\n if (aspectRatio) {\n if (canvasData.height * aspectRatio > canvasData.width) {\n cropBoxData.height = cropBoxData.width / aspectRatio;\n } else {\n cropBoxData.width = cropBoxData.height * aspectRatio;\n }\n }\n this.cropBoxData = cropBoxData;\n this.limitCropBox(true, true);\n\n // Initialize auto crop area\n cropBoxData.width = Math.min(Math.max(cropBoxData.width, cropBoxData.minWidth), cropBoxData.maxWidth);\n cropBoxData.height = Math.min(Math.max(cropBoxData.height, cropBoxData.minHeight), cropBoxData.maxHeight);\n\n // The width/height of auto crop area must large than \"minWidth/Height\"\n cropBoxData.width = Math.max(cropBoxData.minWidth, cropBoxData.width * autoCropArea);\n cropBoxData.height = Math.max(cropBoxData.minHeight, cropBoxData.height * autoCropArea);\n cropBoxData.left = canvasData.left + (canvasData.width - cropBoxData.width) / 2;\n cropBoxData.top = canvasData.top + (canvasData.height - cropBoxData.height) / 2;\n cropBoxData.oldLeft = cropBoxData.left;\n cropBoxData.oldTop = cropBoxData.top;\n this.initialCropBoxData = assign({}, cropBoxData);\n },\n limitCropBox: function limitCropBox(sizeLimited, positionLimited) {\n var options = this.options,\n containerData = this.containerData,\n canvasData = this.canvasData,\n cropBoxData = this.cropBoxData,\n limited = this.limited;\n var aspectRatio = options.aspectRatio;\n if (sizeLimited) {\n var minCropBoxWidth = Number(options.minCropBoxWidth) || 0;\n var minCropBoxHeight = Number(options.minCropBoxHeight) || 0;\n var maxCropBoxWidth = limited ? Math.min(containerData.width, canvasData.width, canvasData.width + canvasData.left, containerData.width - canvasData.left) : containerData.width;\n var maxCropBoxHeight = limited ? Math.min(containerData.height, canvasData.height, canvasData.height + canvasData.top, containerData.height - canvasData.top) : containerData.height;\n\n // The min/maxCropBoxWidth/Height must be less than container's width/height\n minCropBoxWidth = Math.min(minCropBoxWidth, containerData.width);\n minCropBoxHeight = Math.min(minCropBoxHeight, containerData.height);\n if (aspectRatio) {\n if (minCropBoxWidth && minCropBoxHeight) {\n if (minCropBoxHeight * aspectRatio > minCropBoxWidth) {\n minCropBoxHeight = minCropBoxWidth / aspectRatio;\n } else {\n minCropBoxWidth = minCropBoxHeight * aspectRatio;\n }\n } else if (minCropBoxWidth) {\n minCropBoxHeight = minCropBoxWidth / aspectRatio;\n } else if (minCropBoxHeight) {\n minCropBoxWidth = minCropBoxHeight * aspectRatio;\n }\n if (maxCropBoxHeight * aspectRatio > maxCropBoxWidth) {\n maxCropBoxHeight = maxCropBoxWidth / aspectRatio;\n } else {\n maxCropBoxWidth = maxCropBoxHeight * aspectRatio;\n }\n }\n\n // The minWidth/Height must be less than maxWidth/Height\n cropBoxData.minWidth = Math.min(minCropBoxWidth, maxCropBoxWidth);\n cropBoxData.minHeight = Math.min(minCropBoxHeight, maxCropBoxHeight);\n cropBoxData.maxWidth = maxCropBoxWidth;\n cropBoxData.maxHeight = maxCropBoxHeight;\n }\n if (positionLimited) {\n if (limited) {\n cropBoxData.minLeft = Math.max(0, canvasData.left);\n cropBoxData.minTop = Math.max(0, canvasData.top);\n cropBoxData.maxLeft = Math.min(containerData.width, canvasData.left + canvasData.width) - cropBoxData.width;\n cropBoxData.maxTop = Math.min(containerData.height, canvasData.top + canvasData.height) - cropBoxData.height;\n } else {\n cropBoxData.minLeft = 0;\n cropBoxData.minTop = 0;\n cropBoxData.maxLeft = containerData.width - cropBoxData.width;\n cropBoxData.maxTop = containerData.height - cropBoxData.height;\n }\n }\n },\n renderCropBox: function renderCropBox() {\n var options = this.options,\n containerData = this.containerData,\n cropBoxData = this.cropBoxData;\n if (cropBoxData.width > cropBoxData.maxWidth || cropBoxData.width < cropBoxData.minWidth) {\n cropBoxData.left = cropBoxData.oldLeft;\n }\n if (cropBoxData.height > cropBoxData.maxHeight || cropBoxData.height < cropBoxData.minHeight) {\n cropBoxData.top = cropBoxData.oldTop;\n }\n cropBoxData.width = Math.min(Math.max(cropBoxData.width, cropBoxData.minWidth), cropBoxData.maxWidth);\n cropBoxData.height = Math.min(Math.max(cropBoxData.height, cropBoxData.minHeight), cropBoxData.maxHeight);\n this.limitCropBox(false, true);\n cropBoxData.left = Math.min(Math.max(cropBoxData.left, cropBoxData.minLeft), cropBoxData.maxLeft);\n cropBoxData.top = Math.min(Math.max(cropBoxData.top, cropBoxData.minTop), cropBoxData.maxTop);\n cropBoxData.oldLeft = cropBoxData.left;\n cropBoxData.oldTop = cropBoxData.top;\n if (options.movable && options.cropBoxMovable) {\n // Turn to move the canvas when the crop box is equal to the container\n setData(this.face, DATA_ACTION, cropBoxData.width >= containerData.width && cropBoxData.height >= containerData.height ? ACTION_MOVE : ACTION_ALL);\n }\n setStyle(this.cropBox, assign({\n width: cropBoxData.width,\n height: cropBoxData.height\n }, getTransforms({\n translateX: cropBoxData.left,\n translateY: cropBoxData.top\n })));\n if (this.cropped && this.limited) {\n this.limitCanvas(true, true);\n }\n if (!this.disabled) {\n this.output();\n }\n },\n output: function output() {\n this.preview();\n dispatchEvent(this.element, EVENT_CROP, this.getData());\n }\n };\n\n var preview = {\n initPreview: function initPreview() {\n var element = this.element,\n crossOrigin = this.crossOrigin;\n var preview = this.options.preview;\n var url = crossOrigin ? this.crossOriginUrl : this.url;\n var alt = element.alt || 'The image to preview';\n var image = document.createElement('img');\n if (crossOrigin) {\n image.crossOrigin = crossOrigin;\n }\n image.src = url;\n image.alt = alt;\n this.viewBox.appendChild(image);\n this.viewBoxImage = image;\n if (!preview) {\n return;\n }\n var previews = preview;\n if (typeof preview === 'string') {\n previews = element.ownerDocument.querySelectorAll(preview);\n } else if (preview.querySelector) {\n previews = [preview];\n }\n this.previews = previews;\n forEach(previews, function (el) {\n var img = document.createElement('img');\n\n // Save the original size for recover\n setData(el, DATA_PREVIEW, {\n width: el.offsetWidth,\n height: el.offsetHeight,\n html: el.innerHTML\n });\n if (crossOrigin) {\n img.crossOrigin = crossOrigin;\n }\n img.src = url;\n img.alt = alt;\n\n /**\n * Override img element styles\n * Add `display:block` to avoid margin top issue\n * Add `height:auto` to override `height` attribute on IE8\n * (Occur only when margin-top <= -height)\n */\n 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;\"';\n el.innerHTML = '';\n el.appendChild(img);\n });\n },\n resetPreview: function resetPreview() {\n forEach(this.previews, function (element) {\n var data = getData(element, DATA_PREVIEW);\n setStyle(element, {\n width: data.width,\n height: data.height\n });\n element.innerHTML = data.html;\n removeData(element, DATA_PREVIEW);\n });\n },\n preview: function preview() {\n var imageData = this.imageData,\n canvasData = this.canvasData,\n cropBoxData = this.cropBoxData;\n var cropBoxWidth = cropBoxData.width,\n cropBoxHeight = cropBoxData.height;\n var width = imageData.width,\n height = imageData.height;\n var left = cropBoxData.left - canvasData.left - imageData.left;\n var top = cropBoxData.top - canvasData.top - imageData.top;\n if (!this.cropped || this.disabled) {\n return;\n }\n setStyle(this.viewBoxImage, assign({\n width: width,\n height: height\n }, getTransforms(assign({\n translateX: -left,\n translateY: -top\n }, imageData))));\n forEach(this.previews, function (element) {\n var data = getData(element, DATA_PREVIEW);\n var originalWidth = data.width;\n var originalHeight = data.height;\n var newWidth = originalWidth;\n var newHeight = originalHeight;\n var ratio = 1;\n if (cropBoxWidth) {\n ratio = originalWidth / cropBoxWidth;\n newHeight = cropBoxHeight * ratio;\n }\n if (cropBoxHeight && newHeight > originalHeight) {\n ratio = originalHeight / cropBoxHeight;\n newWidth = cropBoxWidth * ratio;\n newHeight = originalHeight;\n }\n setStyle(element, {\n width: newWidth,\n height: newHeight\n });\n setStyle(element.getElementsByTagName('img')[0], assign({\n width: width * ratio,\n height: height * ratio\n }, getTransforms(assign({\n translateX: -left * ratio,\n translateY: -top * ratio\n }, imageData))));\n });\n }\n };\n\n var events = {\n bind: function bind() {\n var element = this.element,\n options = this.options,\n cropper = this.cropper;\n if (isFunction(options.cropstart)) {\n addListener(element, EVENT_CROP_START, options.cropstart);\n }\n if (isFunction(options.cropmove)) {\n addListener(element, EVENT_CROP_MOVE, options.cropmove);\n }\n if (isFunction(options.cropend)) {\n addListener(element, EVENT_CROP_END, options.cropend);\n }\n if (isFunction(options.crop)) {\n addListener(element, EVENT_CROP, options.crop);\n }\n if (isFunction(options.zoom)) {\n addListener(element, EVENT_ZOOM, options.zoom);\n }\n addListener(cropper, EVENT_POINTER_DOWN, this.onCropStart = this.cropStart.bind(this));\n if (options.zoomable && options.zoomOnWheel) {\n addListener(cropper, EVENT_WHEEL, this.onWheel = this.wheel.bind(this), {\n passive: false,\n capture: true\n });\n }\n if (options.toggleDragModeOnDblclick) {\n addListener(cropper, EVENT_DBLCLICK, this.onDblclick = this.dblclick.bind(this));\n }\n addListener(element.ownerDocument, EVENT_POINTER_MOVE, this.onCropMove = this.cropMove.bind(this));\n addListener(element.ownerDocument, EVENT_POINTER_UP, this.onCropEnd = this.cropEnd.bind(this));\n if (options.responsive) {\n addListener(window, EVENT_RESIZE, this.onResize = this.resize.bind(this));\n }\n },\n unbind: function unbind() {\n var element = this.element,\n options = this.options,\n cropper = this.cropper;\n if (isFunction(options.cropstart)) {\n removeListener(element, EVENT_CROP_START, options.cropstart);\n }\n if (isFunction(options.cropmove)) {\n removeListener(element, EVENT_CROP_MOVE, options.cropmove);\n }\n if (isFunction(options.cropend)) {\n removeListener(element, EVENT_CROP_END, options.cropend);\n }\n if (isFunction(options.crop)) {\n removeListener(element, EVENT_CROP, options.crop);\n }\n if (isFunction(options.zoom)) {\n removeListener(element, EVENT_ZOOM, options.zoom);\n }\n removeListener(cropper, EVENT_POINTER_DOWN, this.onCropStart);\n if (options.zoomable && options.zoomOnWheel) {\n removeListener(cropper, EVENT_WHEEL, this.onWheel, {\n passive: false,\n capture: true\n });\n }\n if (options.toggleDragModeOnDblclick) {\n removeListener(cropper, EVENT_DBLCLICK, this.onDblclick);\n }\n removeListener(element.ownerDocument, EVENT_POINTER_MOVE, this.onCropMove);\n removeListener(element.ownerDocument, EVENT_POINTER_UP, this.onCropEnd);\n if (options.responsive) {\n removeListener(window, EVENT_RESIZE, this.onResize);\n }\n }\n };\n\n var handlers = {\n resize: function resize() {\n if (this.disabled) {\n return;\n }\n var options = this.options,\n container = this.container,\n containerData = this.containerData;\n var ratioX = container.offsetWidth / containerData.width;\n var ratioY = container.offsetHeight / containerData.height;\n var ratio = Math.abs(ratioX - 1) > Math.abs(ratioY - 1) ? ratioX : ratioY;\n\n // Resize when width changed or height changed\n if (ratio !== 1) {\n var canvasData;\n var cropBoxData;\n if (options.restore) {\n canvasData = this.getCanvasData();\n cropBoxData = this.getCropBoxData();\n }\n this.render();\n if (options.restore) {\n this.setCanvasData(forEach(canvasData, function (n, i) {\n canvasData[i] = n * ratio;\n }));\n this.setCropBoxData(forEach(cropBoxData, function (n, i) {\n cropBoxData[i] = n * ratio;\n }));\n }\n }\n },\n dblclick: function dblclick() {\n if (this.disabled || this.options.dragMode === DRAG_MODE_NONE) {\n return;\n }\n this.setDragMode(hasClass(this.dragBox, CLASS_CROP) ? DRAG_MODE_MOVE : DRAG_MODE_CROP);\n },\n wheel: function wheel(event) {\n var _this = this;\n var ratio = Number(this.options.wheelZoomRatio) || 0.1;\n var delta = 1;\n if (this.disabled) {\n return;\n }\n event.preventDefault();\n\n // Limit wheel speed to prevent zoom too fast (#21)\n if (this.wheeling) {\n return;\n }\n this.wheeling = true;\n setTimeout(function () {\n _this.wheeling = false;\n }, 50);\n if (event.deltaY) {\n delta = event.deltaY > 0 ? 1 : -1;\n } else if (event.wheelDelta) {\n delta = -event.wheelDelta / 120;\n } else if (event.detail) {\n delta = event.detail > 0 ? 1 : -1;\n }\n this.zoom(-delta * ratio, event);\n },\n cropStart: function cropStart(event) {\n var buttons = event.buttons,\n button = event.button;\n if (this.disabled\n\n // Handle mouse event and pointer event and ignore touch event\n || (event.type === 'mousedown' || event.type === 'pointerdown' && event.pointerType === 'mouse') && (\n // No primary button (Usually the left button)\n isNumber(buttons) && buttons !== 1 || isNumber(button) && button !== 0\n\n // Open context menu\n || event.ctrlKey)) {\n return;\n }\n var options = this.options,\n pointers = this.pointers;\n var action;\n if (event.changedTouches) {\n // Handle touch event\n forEach(event.changedTouches, function (touch) {\n pointers[touch.identifier] = getPointer(touch);\n });\n } else {\n // Handle mouse event and pointer event\n pointers[event.pointerId || 0] = getPointer(event);\n }\n if (Object.keys(pointers).length > 1 && options.zoomable && options.zoomOnTouch) {\n action = ACTION_ZOOM;\n } else {\n action = getData(event.target, DATA_ACTION);\n }\n if (!REGEXP_ACTIONS.test(action)) {\n return;\n }\n if (dispatchEvent(this.element, EVENT_CROP_START, {\n originalEvent: event,\n action: action\n }) === false) {\n return;\n }\n\n // This line is required for preventing page zooming in iOS browsers\n event.preventDefault();\n this.action = action;\n this.cropping = false;\n if (action === ACTION_CROP) {\n this.cropping = true;\n addClass(this.dragBox, CLASS_MODAL);\n }\n },\n cropMove: function cropMove(event) {\n var action = this.action;\n if (this.disabled || !action) {\n return;\n }\n var pointers = this.pointers;\n event.preventDefault();\n if (dispatchEvent(this.element, EVENT_CROP_MOVE, {\n originalEvent: event,\n action: action\n }) === false) {\n return;\n }\n if (event.changedTouches) {\n forEach(event.changedTouches, function (touch) {\n // The first parameter should not be undefined (#432)\n assign(pointers[touch.identifier] || {}, getPointer(touch, true));\n });\n } else {\n assign(pointers[event.pointerId || 0] || {}, getPointer(event, true));\n }\n this.change(event);\n },\n cropEnd: function cropEnd(event) {\n if (this.disabled) {\n return;\n }\n var action = this.action,\n pointers = this.pointers;\n if (event.changedTouches) {\n forEach(event.changedTouches, function (touch) {\n delete pointers[touch.identifier];\n });\n } else {\n delete pointers[event.pointerId || 0];\n }\n if (!action) {\n return;\n }\n event.preventDefault();\n if (!Object.keys(pointers).length) {\n this.action = '';\n }\n if (this.cropping) {\n this.cropping = false;\n toggleClass(this.dragBox, CLASS_MODAL, this.cropped && this.options.modal);\n }\n dispatchEvent(this.element, EVENT_CROP_END, {\n originalEvent: event,\n action: action\n });\n }\n };\n\n var change = {\n change: function change(event) {\n var options = this.options,\n canvasData = this.canvasData,\n containerData = this.containerData,\n cropBoxData = this.cropBoxData,\n pointers = this.pointers;\n var action = this.action;\n var aspectRatio = options.aspectRatio;\n var left = cropBoxData.left,\n top = cropBoxData.top,\n width = cropBoxData.width,\n height = cropBoxData.height;\n var right = left + width;\n var bottom = top + height;\n var minLeft = 0;\n var minTop = 0;\n var maxWidth = containerData.width;\n var maxHeight = containerData.height;\n var renderable = true;\n var offset;\n\n // Locking aspect ratio in \"free mode\" by holding shift key\n if (!aspectRatio && event.shiftKey) {\n aspectRatio = width && height ? width / height : 1;\n }\n if (this.limited) {\n minLeft = cropBoxData.minLeft;\n minTop = cropBoxData.minTop;\n maxWidth = minLeft + Math.min(containerData.width, canvasData.width, canvasData.left + canvasData.width);\n maxHeight = minTop + Math.min(containerData.height, canvasData.height, canvasData.top + canvasData.height);\n }\n var pointer = pointers[Object.keys(pointers)[0]];\n var range = {\n x: pointer.endX - pointer.startX,\n y: pointer.endY - pointer.startY\n };\n var check = function check(side) {\n switch (side) {\n case ACTION_EAST:\n if (right + range.x > maxWidth) {\n range.x = maxWidth - right;\n }\n break;\n case ACTION_WEST:\n if (left + range.x < minLeft) {\n range.x = minLeft - left;\n }\n break;\n case ACTION_NORTH:\n if (top + range.y < minTop) {\n range.y = minTop - top;\n }\n break;\n case ACTION_SOUTH:\n if (bottom + range.y > maxHeight) {\n range.y = maxHeight - bottom;\n }\n break;\n }\n };\n switch (action) {\n // Move crop box\n case ACTION_ALL:\n left += range.x;\n top += range.y;\n break;\n\n // Resize crop box\n case ACTION_EAST:\n if (range.x >= 0 && (right >= maxWidth || aspectRatio && (top <= minTop || bottom >= maxHeight))) {\n renderable = false;\n break;\n }\n check(ACTION_EAST);\n width += range.x;\n if (width < 0) {\n action = ACTION_WEST;\n width = -width;\n left -= width;\n }\n if (aspectRatio) {\n height = width / aspectRatio;\n top += (cropBoxData.height - height) / 2;\n }\n break;\n case ACTION_NORTH:\n if (range.y <= 0 && (top <= minTop || aspectRatio && (left <= minLeft || right >= maxWidth))) {\n renderable = false;\n break;\n }\n check(ACTION_NORTH);\n height -= range.y;\n top += range.y;\n if (height < 0) {\n action = ACTION_SOUTH;\n height = -height;\n top -= height;\n }\n if (aspectRatio) {\n width = height * aspectRatio;\n left += (cropBoxData.width - width) / 2;\n }\n break;\n case ACTION_WEST:\n if (range.x <= 0 && (left <= minLeft || aspectRatio && (top <= minTop || bottom >= maxHeight))) {\n renderable = false;\n break;\n }\n check(ACTION_WEST);\n width -= range.x;\n left += range.x;\n if (width < 0) {\n action = ACTION_EAST;\n width = -width;\n left -= width;\n }\n if (aspectRatio) {\n height = width / aspectRatio;\n top += (cropBoxData.height - height) / 2;\n }\n break;\n case ACTION_SOUTH:\n if (range.y >= 0 && (bottom >= maxHeight || aspectRatio && (left <= minLeft || right >= maxWidth))) {\n renderable = false;\n break;\n }\n check(ACTION_SOUTH);\n height += range.y;\n if (height < 0) {\n action = ACTION_NORTH;\n height = -height;\n top -= height;\n }\n if (aspectRatio) {\n width = height * aspectRatio;\n left += (cropBoxData.width - width) / 2;\n }\n break;\n case ACTION_NORTH_EAST:\n if (aspectRatio) {\n if (range.y <= 0 && (top <= minTop || right >= maxWidth)) {\n renderable = false;\n break;\n }\n check(ACTION_NORTH);\n height -= range.y;\n top += range.y;\n width = height * aspectRatio;\n } else {\n check(ACTION_NORTH);\n check(ACTION_EAST);\n if (range.x >= 0) {\n if (right < maxWidth) {\n width += range.x;\n } else if (range.y <= 0 && top <= minTop) {\n renderable = false;\n }\n } else {\n width += range.x;\n }\n if (range.y <= 0) {\n if (top > minTop) {\n height -= range.y;\n top += range.y;\n }\n } else {\n height -= range.y;\n top += range.y;\n }\n }\n if (width < 0 && height < 0) {\n action = ACTION_SOUTH_WEST;\n height = -height;\n width = -width;\n top -= height;\n left -= width;\n } else if (width < 0) {\n action = ACTION_NORTH_WEST;\n width = -width;\n left -= width;\n } else if (height < 0) {\n action = ACTION_SOUTH_EAST;\n height = -height;\n top -= height;\n }\n break;\n case ACTION_NORTH_WEST:\n if (aspectRatio) {\n if (range.y <= 0 && (top <= minTop || left <= minLeft)) {\n renderable = false;\n break;\n }\n check(ACTION_NORTH);\n height -= range.y;\n top += range.y;\n width = height * aspectRatio;\n left += cropBoxData.width - width;\n } else {\n check(ACTION_NORTH);\n check(ACTION_WEST);\n if (range.x <= 0) {\n if (left > minLeft) {\n width -= range.x;\n left += range.x;\n } else if (range.y <= 0 && top <= minTop) {\n renderable = false;\n }\n } else {\n width -= range.x;\n left += range.x;\n }\n if (range.y <= 0) {\n if (top > minTop) {\n height -= range.y;\n top += range.y;\n }\n } else {\n height -= range.y;\n top += range.y;\n }\n }\n if (width < 0 && height < 0) {\n action = ACTION_SOUTH_EAST;\n height = -height;\n width = -width;\n top -= height;\n left -= width;\n } else if (width < 0) {\n action = ACTION_NORTH_EAST;\n width = -width;\n left -= width;\n } else if (height < 0) {\n action = ACTION_SOUTH_WEST;\n height = -height;\n top -= height;\n }\n break;\n case ACTION_SOUTH_WEST:\n if (aspectRatio) {\n if (range.x <= 0 && (left <= minLeft || bottom >= maxHeight)) {\n renderable = false;\n break;\n }\n check(ACTION_WEST);\n width -= range.x;\n left += range.x;\n height = width / aspectRatio;\n } else {\n check(ACTION_SOUTH);\n check(ACTION_WEST);\n if (range.x <= 0) {\n if (left > minLeft) {\n width -= range.x;\n left += range.x;\n } else if (range.y >= 0 && bottom >= maxHeight) {\n renderable = false;\n }\n } else {\n width -= range.x;\n left += range.x;\n }\n if (range.y >= 0) {\n if (bottom < maxHeight) {\n height += range.y;\n }\n } else {\n height += range.y;\n }\n }\n if (width < 0 && height < 0) {\n action = ACTION_NORTH_EAST;\n height = -height;\n width = -width;\n top -= height;\n left -= width;\n } else if (width < 0) {\n action = ACTION_SOUTH_EAST;\n width = -width;\n left -= width;\n } else if (height < 0) {\n action = ACTION_NORTH_WEST;\n height = -height;\n top -= height;\n }\n break;\n case ACTION_SOUTH_EAST:\n if (aspectRatio) {\n if (range.x >= 0 && (right >= maxWidth || bottom >= maxHeight)) {\n renderable = false;\n break;\n }\n check(ACTION_EAST);\n width += range.x;\n height = width / aspectRatio;\n } else {\n check(ACTION_SOUTH);\n check(ACTION_EAST);\n if (range.x >= 0) {\n if (right < maxWidth) {\n width += range.x;\n } else if (range.y >= 0 && bottom >= maxHeight) {\n renderable = false;\n }\n } else {\n width += range.x;\n }\n if (range.y >= 0) {\n if (bottom < maxHeight) {\n height += range.y;\n }\n } else {\n height += range.y;\n }\n }\n if (width < 0 && height < 0) {\n action = ACTION_NORTH_WEST;\n height = -height;\n width = -width;\n top -= height;\n left -= width;\n } else if (width < 0) {\n action = ACTION_SOUTH_WEST;\n width = -width;\n left -= width;\n } else if (height < 0) {\n action = ACTION_NORTH_EAST;\n height = -height;\n top -= height;\n }\n break;\n\n // Move canvas\n case ACTION_MOVE:\n this.move(range.x, range.y);\n renderable = false;\n break;\n\n // Zoom canvas\n case ACTION_ZOOM:\n this.zoom(getMaxZoomRatio(pointers), event);\n renderable = false;\n break;\n\n // Create crop box\n case ACTION_CROP:\n if (!range.x || !range.y) {\n renderable = false;\n break;\n }\n offset = getOffset(this.cropper);\n left = pointer.startX - offset.left;\n top = pointer.startY - offset.top;\n width = cropBoxData.minWidth;\n height = cropBoxData.minHeight;\n if (range.x > 0) {\n action = range.y > 0 ? ACTION_SOUTH_EAST : ACTION_NORTH_EAST;\n } else if (range.x < 0) {\n left -= width;\n action = range.y > 0 ? ACTION_SOUTH_WEST : ACTION_NORTH_WEST;\n }\n if (range.y < 0) {\n top -= height;\n }\n\n // Show the crop box if is hidden\n if (!this.cropped) {\n removeClass(this.cropBox, CLASS_HIDDEN);\n this.cropped = true;\n if (this.limited) {\n this.limitCropBox(true, true);\n }\n }\n break;\n }\n if (renderable) {\n cropBoxData.width = width;\n cropBoxData.height = height;\n cropBoxData.left = left;\n cropBoxData.top = top;\n this.action = action;\n this.renderCropBox();\n }\n\n // Override\n forEach(pointers, function (p) {\n p.startX = p.endX;\n p.startY = p.endY;\n });\n }\n };\n\n var methods = {\n // Show the crop box manually\n crop: function crop() {\n if (this.ready && !this.cropped && !this.disabled) {\n this.cropped = true;\n this.limitCropBox(true, true);\n if (this.options.modal) {\n addClass(this.dragBox, CLASS_MODAL);\n }\n removeClass(this.cropBox, CLASS_HIDDEN);\n this.setCropBoxData(this.initialCropBoxData);\n }\n return this;\n },\n // Reset the image and crop box to their initial states\n reset: function reset() {\n if (this.ready && !this.disabled) {\n this.imageData = assign({}, this.initialImageData);\n this.canvasData = assign({}, this.initialCanvasData);\n this.cropBoxData = assign({}, this.initialCropBoxData);\n this.renderCanvas();\n if (this.cropped) {\n this.renderCropBox();\n }\n }\n return this;\n },\n // Clear the crop box\n clear: function clear() {\n if (this.cropped && !this.disabled) {\n assign(this.cropBoxData, {\n left: 0,\n top: 0,\n width: 0,\n height: 0\n });\n this.cropped = false;\n this.renderCropBox();\n this.limitCanvas(true, true);\n\n // Render canvas after crop box rendered\n this.renderCanvas();\n removeClass(this.dragBox, CLASS_MODAL);\n addClass(this.cropBox, CLASS_HIDDEN);\n }\n return this;\n },\n /**\n * Replace the image's src and rebuild the cropper\n * @param {string} url - The new URL.\n * @param {boolean} [hasSameSize] - Indicate if the new image has the same size as the old one.\n * @returns {Cropper} this\n */\n replace: function replace(url) {\n var hasSameSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n if (!this.disabled && url) {\n if (this.isImg) {\n this.element.src = url;\n }\n if (hasSameSize) {\n this.url = url;\n this.image.src = url;\n if (this.ready) {\n this.viewBoxImage.src = url;\n forEach(this.previews, function (element) {\n element.getElementsByTagName('img')[0].src = url;\n });\n }\n } else {\n if (this.isImg) {\n this.replaced = true;\n }\n this.options.data = null;\n this.uncreate();\n this.load(url);\n }\n }\n return this;\n },\n // Enable (unfreeze) the cropper\n enable: function enable() {\n if (this.ready && this.disabled) {\n this.disabled = false;\n removeClass(this.cropper, CLASS_DISABLED);\n }\n return this;\n },\n // Disable (freeze) the cropper\n disable: function disable() {\n if (this.ready && !this.disabled) {\n this.disabled = true;\n addClass(this.cropper, CLASS_DISABLED);\n }\n return this;\n },\n /**\n * Destroy the cropper and remove the instance from the image\n * @returns {Cropper} this\n */\n destroy: function destroy() {\n var element = this.element;\n if (!element[NAMESPACE]) {\n return this;\n }\n element[NAMESPACE] = undefined;\n if (this.isImg && this.replaced) {\n element.src = this.originalUrl;\n }\n this.uncreate();\n return this;\n },\n /**\n * Move the canvas with relative offsets\n * @param {number} offsetX - The relative offset distance on the x-axis.\n * @param {number} [offsetY=offsetX] - The relative offset distance on the y-axis.\n * @returns {Cropper} this\n */\n move: function move(offsetX) {\n var offsetY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : offsetX;\n var _this$canvasData = this.canvasData,\n left = _this$canvasData.left,\n top = _this$canvasData.top;\n return this.moveTo(isUndefined(offsetX) ? offsetX : left + Number(offsetX), isUndefined(offsetY) ? offsetY : top + Number(offsetY));\n },\n /**\n * Move the canvas to an absolute point\n * @param {number} x - The x-axis coordinate.\n * @param {number} [y=x] - The y-axis coordinate.\n * @returns {Cropper} this\n */\n moveTo: function moveTo(x) {\n var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : x;\n var canvasData = this.canvasData;\n var changed = false;\n x = Number(x);\n y = Number(y);\n if (this.ready && !this.disabled && this.options.movable) {\n if (isNumber(x)) {\n canvasData.left = x;\n changed = true;\n }\n if (isNumber(y)) {\n canvasData.top = y;\n changed = true;\n }\n if (changed) {\n this.renderCanvas(true);\n }\n }\n return this;\n },\n /**\n * Zoom the canvas with a relative ratio\n * @param {number} ratio - The target ratio.\n * @param {Event} _originalEvent - The original event if any.\n * @returns {Cropper} this\n */\n zoom: function zoom(ratio, _originalEvent) {\n var canvasData = this.canvasData;\n ratio = Number(ratio);\n if (ratio < 0) {\n ratio = 1 / (1 - ratio);\n } else {\n ratio = 1 + ratio;\n }\n return this.zoomTo(canvasData.width * ratio / canvasData.naturalWidth, null, _originalEvent);\n },\n /**\n * Zoom the canvas to an absolute ratio\n * @param {number} ratio - The target ratio.\n * @param {Object} pivot - The zoom pivot point coordinate.\n * @param {Event} _originalEvent - The original event if any.\n * @returns {Cropper} this\n */\n zoomTo: function zoomTo(ratio, pivot, _originalEvent) {\n var options = this.options,\n canvasData = this.canvasData;\n var width = canvasData.width,\n height = canvasData.height,\n naturalWidth = canvasData.naturalWidth,\n naturalHeight = canvasData.naturalHeight;\n ratio = Number(ratio);\n if (ratio >= 0 && this.ready && !this.disabled && options.zoomable) {\n var newWidth = naturalWidth * ratio;\n var newHeight = naturalHeight * ratio;\n if (dispatchEvent(this.element, EVENT_ZOOM, {\n ratio: ratio,\n oldRatio: width / naturalWidth,\n originalEvent: _originalEvent\n }) === false) {\n return this;\n }\n if (_originalEvent) {\n var pointers = this.pointers;\n var offset = getOffset(this.cropper);\n var center = pointers && Object.keys(pointers).length ? getPointersCenter(pointers) : {\n pageX: _originalEvent.pageX,\n pageY: _originalEvent.pageY\n };\n\n // Zoom from the triggering point of the event\n canvasData.left -= (newWidth - width) * ((center.pageX - offset.left - canvasData.left) / width);\n canvasData.top -= (newHeight - height) * ((center.pageY - offset.top - canvasData.top) / height);\n } else if (isPlainObject(pivot) && isNumber(pivot.x) && isNumber(pivot.y)) {\n canvasData.left -= (newWidth - width) * ((pivot.x - canvasData.left) / width);\n canvasData.top -= (newHeight - height) * ((pivot.y - canvasData.top) / height);\n } else {\n // Zoom from the center of the canvas\n canvasData.left -= (newWidth - width) / 2;\n canvasData.top -= (newHeight - height) / 2;\n }\n canvasData.width = newWidth;\n canvasData.height = newHeight;\n this.renderCanvas(true);\n }\n return this;\n },\n /**\n * Rotate the canvas with a relative degree\n * @param {number} degree - The rotate degree.\n * @returns {Cropper} this\n */\n rotate: function rotate(degree) {\n return this.rotateTo((this.imageData.rotate || 0) + Number(degree));\n },\n /**\n * Rotate the canvas to an absolute degree\n * @param {number} degree - The rotate degree.\n * @returns {Cropper} this\n */\n rotateTo: function rotateTo(degree) {\n degree = Number(degree);\n if (isNumber(degree) && this.ready && !this.disabled && this.options.rotatable) {\n this.imageData.rotate = degree % 360;\n this.renderCanvas(true, true);\n }\n return this;\n },\n /**\n * Scale the image on the x-axis.\n * @param {number} scaleX - The scale ratio on the x-axis.\n * @returns {Cropper} this\n */\n scaleX: function scaleX(_scaleX) {\n var scaleY = this.imageData.scaleY;\n return this.scale(_scaleX, isNumber(scaleY) ? scaleY : 1);\n },\n /**\n * Scale the image on the y-axis.\n * @param {number} scaleY - The scale ratio on the y-axis.\n * @returns {Cropper} this\n */\n scaleY: function scaleY(_scaleY) {\n var scaleX = this.imageData.scaleX;\n return this.scale(isNumber(scaleX) ? scaleX : 1, _scaleY);\n },\n /**\n * Scale the image\n * @param {number} scaleX - The scale ratio on the x-axis.\n * @param {number} [scaleY=scaleX] - The scale ratio on the y-axis.\n * @returns {Cropper} this\n */\n scale: function scale(scaleX) {\n var scaleY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : scaleX;\n var imageData = this.imageData;\n var transformed = false;\n scaleX = Number(scaleX);\n scaleY = Number(scaleY);\n if (this.ready && !this.disabled && this.options.scalable) {\n if (isNumber(scaleX)) {\n imageData.scaleX = scaleX;\n transformed = true;\n }\n if (isNumber(scaleY)) {\n imageData.scaleY = scaleY;\n transformed = true;\n }\n if (transformed) {\n this.renderCanvas(true, true);\n }\n }\n return this;\n },\n /**\n * Get the cropped area position and size data (base on the original image)\n * @param {boolean} [rounded=false] - Indicate if round the data values or not.\n * @returns {Object} The result cropped data.\n */\n getData: function getData() {\n var rounded = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var options = this.options,\n imageData = this.imageData,\n canvasData = this.canvasData,\n cropBoxData = this.cropBoxData;\n var data;\n if (this.ready && this.cropped) {\n data = {\n x: cropBoxData.left - canvasData.left,\n y: cropBoxData.top - canvasData.top,\n width: cropBoxData.width,\n height: cropBoxData.height\n };\n var ratio = imageData.width / imageData.naturalWidth;\n forEach(data, function (n, i) {\n data[i] = n / ratio;\n });\n if (rounded) {\n // In case rounding off leads to extra 1px in right or bottom border\n // we should round the top-left corner and the dimension (#343).\n var bottom = Math.round(data.y + data.height);\n var right = Math.round(data.x + data.width);\n data.x = Math.round(data.x);\n data.y = Math.round(data.y);\n data.width = right - data.x;\n data.height = bottom - data.y;\n }\n } else {\n data = {\n x: 0,\n y: 0,\n width: 0,\n height: 0\n };\n }\n if (options.rotatable) {\n data.rotate = imageData.rotate || 0;\n }\n if (options.scalable) {\n data.scaleX = imageData.scaleX || 1;\n data.scaleY = imageData.scaleY || 1;\n }\n return data;\n },\n /**\n * Set the cropped area position and size with new data\n * @param {Object} data - The new data.\n * @returns {Cropper} this\n */\n setData: function setData(data) {\n var options = this.options,\n imageData = this.imageData,\n canvasData = this.canvasData;\n var cropBoxData = {};\n if (this.ready && !this.disabled && isPlainObject(data)) {\n var transformed = false;\n if (options.rotatable) {\n if (isNumber(data.rotate) && data.rotate !== imageData.rotate) {\n imageData.rotate = data.rotate;\n transformed = true;\n }\n }\n if (options.scalable) {\n if (isNumber(data.scaleX) && data.scaleX !== imageData.scaleX) {\n imageData.scaleX = data.scaleX;\n transformed = true;\n }\n if (isNumber(data.scaleY) && data.scaleY !== imageData.scaleY) {\n imageData.scaleY = data.scaleY;\n transformed = true;\n }\n }\n if (transformed) {\n this.renderCanvas(true, true);\n }\n var ratio = imageData.width / imageData.naturalWidth;\n if (isNumber(data.x)) {\n cropBoxData.left = data.x * ratio + canvasData.left;\n }\n if (isNumber(data.y)) {\n cropBoxData.top = data.y * ratio + canvasData.top;\n }\n if (isNumber(data.width)) {\n cropBoxData.width = data.width * ratio;\n }\n if (isNumber(data.height)) {\n cropBoxData.height = data.height * ratio;\n }\n this.setCropBoxData(cropBoxData);\n }\n return this;\n },\n /**\n * Get the container size data.\n * @returns {Object} The result container data.\n */\n getContainerData: function getContainerData() {\n return this.ready ? assign({}, this.containerData) : {};\n },\n /**\n * Get the image position and size data.\n * @returns {Object} The result image data.\n */\n getImageData: function getImageData() {\n return this.sized ? assign({}, this.imageData) : {};\n },\n /**\n * Get the canvas position and size data.\n * @returns {Object} The result canvas data.\n */\n getCanvasData: function getCanvasData() {\n var canvasData = this.canvasData;\n var data = {};\n if (this.ready) {\n forEach(['left', 'top', 'width', 'height', 'naturalWidth', 'naturalHeight'], function (n) {\n data[n] = canvasData[n];\n });\n }\n return data;\n },\n /**\n * Set the canvas position and size with new data.\n * @param {Object} data - The new canvas data.\n * @returns {Cropper} this\n */\n setCanvasData: function setCanvasData(data) {\n var canvasData = this.canvasData;\n var aspectRatio = canvasData.aspectRatio;\n if (this.ready && !this.disabled && isPlainObject(data)) {\n if (isNumber(data.left)) {\n canvasData.left = data.left;\n }\n if (isNumber(data.top)) {\n canvasData.top = data.top;\n }\n if (isNumber(data.width)) {\n canvasData.width = data.width;\n canvasData.height = data.width / aspectRatio;\n } else if (isNumber(data.height)) {\n canvasData.height = data.height;\n canvasData.width = data.height * aspectRatio;\n }\n this.renderCanvas(true);\n }\n return this;\n },\n /**\n * Get the crop box position and size data.\n * @returns {Object} The result crop box data.\n */\n getCropBoxData: function getCropBoxData() {\n var cropBoxData = this.cropBoxData;\n var data;\n if (this.ready && this.cropped) {\n data = {\n left: cropBoxData.left,\n top: cropBoxData.top,\n width: cropBoxData.width,\n height: cropBoxData.height\n };\n }\n return data || {};\n },\n /**\n * Set the crop box position and size with new data.\n * @param {Object} data - The new crop box data.\n * @returns {Cropper} this\n */\n setCropBoxData: function setCropBoxData(data) {\n var cropBoxData = this.cropBoxData;\n var aspectRatio = this.options.aspectRatio;\n var widthChanged;\n var heightChanged;\n if (this.ready && this.cropped && !this.disabled && isPlainObject(data)) {\n if (isNumber(data.left)) {\n cropBoxData.left = data.left;\n }\n if (isNumber(data.top)) {\n cropBoxData.top = data.top;\n }\n if (isNumber(data.width) && data.width !== cropBoxData.width) {\n widthChanged = true;\n cropBoxData.width = data.width;\n }\n if (isNumber(data.height) && data.height !== cropBoxData.height) {\n heightChanged = true;\n cropBoxData.height = data.height;\n }\n if (aspectRatio) {\n if (widthChanged) {\n cropBoxData.height = cropBoxData.width / aspectRatio;\n } else if (heightChanged) {\n cropBoxData.width = cropBoxData.height * aspectRatio;\n }\n }\n this.renderCropBox();\n }\n return this;\n },\n /**\n * Get a canvas drawn the cropped image.\n * @param {Object} [options={}] - The config options.\n * @returns {HTMLCanvasElement} - The result canvas.\n */\n getCroppedCanvas: function getCroppedCanvas() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n if (!this.ready || !window.HTMLCanvasElement) {\n return null;\n }\n var canvasData = this.canvasData;\n var source = getSourceCanvas(this.image, this.imageData, canvasData, options);\n\n // Returns the source canvas if it is not cropped.\n if (!this.cropped) {\n return source;\n }\n var _this$getData = this.getData(options.rounded),\n initialX = _this$getData.x,\n initialY = _this$getData.y,\n initialWidth = _this$getData.width,\n initialHeight = _this$getData.height;\n var ratio = source.width / Math.floor(canvasData.naturalWidth);\n if (ratio !== 1) {\n initialX *= ratio;\n initialY *= ratio;\n initialWidth *= ratio;\n initialHeight *= ratio;\n }\n var aspectRatio = initialWidth / initialHeight;\n var maxSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: options.maxWidth || Infinity,\n height: options.maxHeight || Infinity\n });\n var minSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: options.minWidth || 0,\n height: options.minHeight || 0\n }, 'cover');\n var _getAdjustedSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: options.width || (ratio !== 1 ? source.width : initialWidth),\n height: options.height || (ratio !== 1 ? source.height : initialHeight)\n }),\n width = _getAdjustedSizes.width,\n height = _getAdjustedSizes.height;\n width = Math.min(maxSizes.width, Math.max(minSizes.width, width));\n height = Math.min(maxSizes.height, Math.max(minSizes.height, height));\n var canvas = document.createElement('canvas');\n var context = canvas.getContext('2d');\n canvas.width = normalizeDecimalNumber(width);\n canvas.height = normalizeDecimalNumber(height);\n context.fillStyle = options.fillColor || 'transparent';\n context.fillRect(0, 0, width, height);\n var _options$imageSmoothi = options.imageSmoothingEnabled,\n imageSmoothingEnabled = _options$imageSmoothi === void 0 ? true : _options$imageSmoothi,\n imageSmoothingQuality = options.imageSmoothingQuality;\n context.imageSmoothingEnabled = imageSmoothingEnabled;\n if (imageSmoothingQuality) {\n context.imageSmoothingQuality = imageSmoothingQuality;\n }\n\n // https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.drawImage\n var sourceWidth = source.width;\n var sourceHeight = source.height;\n\n // Source canvas parameters\n var srcX = initialX;\n var srcY = initialY;\n var srcWidth;\n var srcHeight;\n\n // Destination canvas parameters\n var dstX;\n var dstY;\n var dstWidth;\n var dstHeight;\n if (srcX <= -initialWidth || srcX > sourceWidth) {\n srcX = 0;\n srcWidth = 0;\n dstX = 0;\n dstWidth = 0;\n } else if (srcX <= 0) {\n dstX = -srcX;\n srcX = 0;\n srcWidth = Math.min(sourceWidth, initialWidth + srcX);\n dstWidth = srcWidth;\n } else if (srcX <= sourceWidth) {\n dstX = 0;\n srcWidth = Math.min(initialWidth, sourceWidth - srcX);\n dstWidth = srcWidth;\n }\n if (srcWidth <= 0 || srcY <= -initialHeight || srcY > sourceHeight) {\n srcY = 0;\n srcHeight = 0;\n dstY = 0;\n dstHeight = 0;\n } else if (srcY <= 0) {\n dstY = -srcY;\n srcY = 0;\n srcHeight = Math.min(sourceHeight, initialHeight + srcY);\n dstHeight = srcHeight;\n } else if (srcY <= sourceHeight) {\n dstY = 0;\n srcHeight = Math.min(initialHeight, sourceHeight - srcY);\n dstHeight = srcHeight;\n }\n var params = [srcX, srcY, srcWidth, srcHeight];\n\n // Avoid \"IndexSizeError\"\n if (dstWidth > 0 && dstHeight > 0) {\n var scale = width / initialWidth;\n params.push(dstX * scale, dstY * scale, dstWidth * scale, dstHeight * scale);\n }\n\n // All the numerical parameters should be integer for `drawImage`\n // https://github.com/fengyuanchen/cropper/issues/476\n context.drawImage.apply(context, [source].concat(_toConsumableArray(params.map(function (param) {\n return Math.floor(normalizeDecimalNumber(param));\n }))));\n return canvas;\n },\n /**\n * Change the aspect ratio of the crop box.\n * @param {number} aspectRatio - The new aspect ratio.\n * @returns {Cropper} this\n */\n setAspectRatio: function setAspectRatio(aspectRatio) {\n var options = this.options;\n if (!this.disabled && !isUndefined(aspectRatio)) {\n // 0 -> NaN\n options.aspectRatio = Math.max(0, aspectRatio) || NaN;\n if (this.ready) {\n this.initCropBox();\n if (this.cropped) {\n this.renderCropBox();\n }\n }\n }\n return this;\n },\n /**\n * Change the drag mode.\n * @param {string} mode - The new drag mode.\n * @returns {Cropper} this\n */\n setDragMode: function setDragMode(mode) {\n var options = this.options,\n dragBox = this.dragBox,\n face = this.face;\n if (this.ready && !this.disabled) {\n var croppable = mode === DRAG_MODE_CROP;\n var movable = options.movable && mode === DRAG_MODE_MOVE;\n mode = croppable || movable ? mode : DRAG_MODE_NONE;\n options.dragMode = mode;\n setData(dragBox, DATA_ACTION, mode);\n toggleClass(dragBox, CLASS_CROP, croppable);\n toggleClass(dragBox, CLASS_MOVE, movable);\n if (!options.cropBoxMovable) {\n // Sync drag mode to crop box when it is not movable\n setData(face, DATA_ACTION, mode);\n toggleClass(face, CLASS_CROP, croppable);\n toggleClass(face, CLASS_MOVE, movable);\n }\n }\n return this;\n }\n };\n\n var AnotherCropper = WINDOW.Cropper;\n var Cropper = /*#__PURE__*/function () {\n /**\n * Create a new Cropper.\n * @param {Element} element - The target element for cropping.\n * @param {Object} [options={}] - The configuration options.\n */\n function Cropper(element) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n _classCallCheck(this, Cropper);\n if (!element || !REGEXP_TAG_NAME.test(element.tagName)) {\n throw new Error('The first argument is required and must be an <img> or <canvas> element.');\n }\n this.element = element;\n this.options = assign({}, DEFAULTS, isPlainObject(options) && options);\n this.cropped = false;\n this.disabled = false;\n this.pointers = {};\n this.ready = false;\n this.reloading = false;\n this.replaced = false;\n this.sized = false;\n this.sizing = false;\n this.init();\n }\n return _createClass(Cropper, [{\n key: \"init\",\n value: function init() {\n var element = this.element;\n var tagName = element.tagName.toLowerCase();\n var url;\n if (element[NAMESPACE]) {\n return;\n }\n element[NAMESPACE] = this;\n if (tagName === 'img') {\n this.isImg = true;\n\n // e.g.: \"img/picture.jpg\"\n url = element.getAttribute('src') || '';\n this.originalUrl = url;\n\n // Stop when it's a blank image\n if (!url) {\n return;\n }\n\n // e.g.: \"https://example.com/img/picture.jpg\"\n url = element.src;\n } else if (tagName === 'canvas' && window.HTMLCanvasElement) {\n url = element.toDataURL();\n }\n this.load(url);\n }\n }, {\n key: \"load\",\n value: function load(url) {\n var _this = this;\n if (!url) {\n return;\n }\n this.url = url;\n this.imageData = {};\n var element = this.element,\n options = this.options;\n if (!options.rotatable && !options.scalable) {\n options.checkOrientation = false;\n }\n\n // Only IE10+ supports Typed Arrays\n if (!options.checkOrientation || !window.ArrayBuffer) {\n this.clone();\n return;\n }\n\n // Detect the mime type of the image directly if it is a Data URL\n if (REGEXP_DATA_URL.test(url)) {\n // Read ArrayBuffer from Data URL of JPEG images directly for better performance\n if (REGEXP_DATA_URL_JPEG.test(url)) {\n this.read(dataURLToArrayBuffer(url));\n } else {\n // Only a JPEG image may contains Exif Orientation information,\n // the rest types of Data URLs are not necessary to check orientation at all.\n this.clone();\n }\n return;\n }\n\n // 1. Detect the mime type of the image by a XMLHttpRequest.\n // 2. Load the image as ArrayBuffer for reading orientation if its a JPEG image.\n var xhr = new XMLHttpRequest();\n var clone = this.clone.bind(this);\n this.reloading = true;\n this.xhr = xhr;\n\n // 1. Cross origin requests are only supported for protocol schemes:\n // http, https, data, chrome, chrome-extension.\n // 2. Access to XMLHttpRequest from a Data URL will be blocked by CORS policy\n // in some browsers as IE11 and Safari.\n xhr.onabort = clone;\n xhr.onerror = clone;\n xhr.ontimeout = clone;\n xhr.onprogress = function () {\n // Abort the request directly if it not a JPEG image for better performance\n if (xhr.getResponseHeader('content-type') !== MIME_TYPE_JPEG) {\n xhr.abort();\n }\n };\n xhr.onload = function () {\n _this.read(xhr.response);\n };\n xhr.onloadend = function () {\n _this.reloading = false;\n _this.xhr = null;\n };\n\n // Bust cache when there is a \"crossOrigin\" property to avoid browser cache error\n if (options.checkCrossOrigin && isCrossOriginURL(url) && element.crossOrigin) {\n url = addTimestamp(url);\n }\n\n // The third parameter is required for avoiding side-effect (#682)\n xhr.open('GET', url, true);\n xhr.responseType = 'arraybuffer';\n xhr.withCredentials = element.crossOrigin === 'use-credentials';\n xhr.send();\n }\n }, {\n key: \"read\",\n value: function read(arrayBuffer) {\n var options = this.options,\n imageData = this.imageData;\n\n // Reset the orientation value to its default value 1\n // as some iOS browsers will render image with its orientation\n var orientation = resetAndGetOrientation(arrayBuffer);\n var rotate = 0;\n var scaleX = 1;\n var scaleY = 1;\n if (orientation > 1) {\n // Generate a new URL which has the default orientation value\n this.url = arrayBufferToDataURL(arrayBuffer, MIME_TYPE_JPEG);\n var _parseOrientation = parseOrientation(orientation);\n rotate = _parseOrientation.rotate;\n scaleX = _parseOrientation.scaleX;\n scaleY = _parseOrientation.scaleY;\n }\n if (options.rotatable) {\n imageData.rotate = rotate;\n }\n if (options.scalable) {\n imageData.scaleX = scaleX;\n imageData.scaleY = scaleY;\n }\n this.clone();\n }\n }, {\n key: \"clone\",\n value: function clone() {\n var element = this.element,\n url = this.url;\n var crossOrigin = element.crossOrigin;\n var crossOriginUrl = url;\n if (this.options.checkCrossOrigin && isCrossOriginURL(url)) {\n if (!crossOrigin) {\n crossOrigin = 'anonymous';\n }\n\n // Bust cache when there is not a \"crossOrigin\" property (#519)\n crossOriginUrl = addTimestamp(url);\n }\n this.crossOrigin = crossOrigin;\n this.crossOriginUrl = crossOriginUrl;\n var image = document.createElement('img');\n if (crossOrigin) {\n image.crossOrigin = crossOrigin;\n }\n image.src = crossOriginUrl || url;\n image.alt = element.alt || 'The image to crop';\n this.image = image;\n image.onload = this.start.bind(this);\n image.onerror = this.stop.bind(this);\n addClass(image, CLASS_HIDE);\n element.parentNode.insertBefore(image, element.nextSibling);\n }\n }, {\n key: \"start\",\n value: function start() {\n var _this2 = this;\n var image = this.image;\n image.onload = null;\n image.onerror = null;\n this.sizing = true;\n\n // Match all browsers that use WebKit as the layout engine in iOS devices,\n // such as Safari for iOS, Chrome for iOS, and in-app browsers.\n var isIOSWebKit = WINDOW.navigator && /(?:iPad|iPhone|iPod).*?AppleWebKit/i.test(WINDOW.navigator.userAgent);\n var done = function done(naturalWidth, naturalHeight) {\n assign(_this2.imageData, {\n naturalWidth: naturalWidth,\n naturalHeight: naturalHeight,\n aspectRatio: naturalWidth / naturalHeight\n });\n _this2.initialImageData = assign({}, _this2.imageData);\n _this2.sizing = false;\n _this2.sized = true;\n _this2.build();\n };\n\n // Most modern browsers (excepts iOS WebKit)\n if (image.naturalWidth && !isIOSWebKit) {\n done(image.naturalWidth, image.naturalHeight);\n return;\n }\n var sizingImage = document.createElement('img');\n var body = document.body || document.documentElement;\n this.sizingImage = sizingImage;\n sizingImage.onload = function () {\n done(sizingImage.width, sizingImage.height);\n if (!isIOSWebKit) {\n body.removeChild(sizingImage);\n }\n };\n sizingImage.src = image.src;\n\n // iOS WebKit will convert the image automatically\n // with its orientation once append it into DOM (#279)\n if (!isIOSWebKit) {\n 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;';\n body.appendChild(sizingImage);\n }\n }\n }, {\n key: \"stop\",\n value: function stop() {\n var image = this.image;\n image.onload = null;\n image.onerror = null;\n image.parentNode.removeChild(image);\n this.image = null;\n }\n }, {\n key: \"build\",\n value: function build() {\n if (!this.sized || this.ready) {\n return;\n }\n var element = this.element,\n options = this.options,\n image = this.image;\n\n // Create cropper elements\n var container = element.parentNode;\n var template = document.createElement('div');\n template.innerHTML = TEMPLATE;\n var cropper = template.querySelector(\".\".concat(NAMESPACE, \"-container\"));\n var canvas = cropper.querySelector(\".\".concat(NAMESPACE, \"-canvas\"));\n var dragBox = cropper.querySelector(\".\".concat(NAMESPACE, \"-drag-box\"));\n var cropBox = cropper.querySelector(\".\".concat(NAMESPACE, \"-crop-box\"));\n var face = cropBox.querySelector(\".\".concat(NAMESPACE, \"-face\"));\n this.container = container;\n this.cropper = cropper;\n this.canvas = canvas;\n this.dragBox = dragBox;\n this.cropBox = cropBox;\n this.viewBox = cropper.querySelector(\".\".concat(NAMESPACE, \"-view-box\"));\n this.face = face;\n canvas.appendChild(image);\n\n // Hide the original image\n addClass(element, CLASS_HIDDEN);\n\n // Inserts the cropper after to the current image\n container.insertBefore(cropper, element.nextSibling);\n\n // Show the hidden image\n removeClass(image, CLASS_HIDE);\n this.initPreview();\n this.bind();\n options.initialAspectRatio = Math.max(0, options.initialAspectRatio) || NaN;\n options.aspectRatio = Math.max(0, options.aspectRatio) || NaN;\n options.viewMode = Math.max(0, Math.min(3, Math.round(options.viewMode))) || 0;\n addClass(cropBox, CLASS_HIDDEN);\n if (!options.guides) {\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-dashed\")), CLASS_HIDDEN);\n }\n if (!options.center) {\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-center\")), CLASS_HIDDEN);\n }\n if (options.background) {\n addClass(cropper, \"\".concat(NAMESPACE, \"-bg\"));\n }\n if (!options.highlight) {\n addClass(face, CLASS_INVISIBLE);\n }\n if (options.cropBoxMovable) {\n addClass(face, CLASS_MOVE);\n setData(face, DATA_ACTION, ACTION_ALL);\n }\n if (!options.cropBoxResizable) {\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-line\")), CLASS_HIDDEN);\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-point\")), CLASS_HIDDEN);\n }\n this.render();\n this.ready = true;\n this.setDragMode(options.dragMode);\n if (options.autoCrop) {\n this.crop();\n }\n this.setData(options.data);\n if (isFunction(options.ready)) {\n addListener(element, EVENT_READY, options.ready, {\n once: true\n });\n }\n dispatchEvent(element, EVENT_READY);\n }\n }, {\n key: \"unbuild\",\n value: function unbuild() {\n if (!this.ready) {\n return;\n }\n this.ready = false;\n this.unbind();\n this.resetPreview();\n var parentNode = this.cropper.parentNode;\n if (parentNode) {\n parentNode.removeChild(this.cropper);\n }\n removeClass(this.element, CLASS_HIDDEN);\n }\n }, {\n key: \"uncreate\",\n value: function uncreate() {\n if (this.ready) {\n this.unbuild();\n this.ready = false;\n this.cropped = false;\n } else if (this.sizing) {\n this.sizingImage.onload = null;\n this.sizing = false;\n this.sized = false;\n } else if (this.reloading) {\n this.xhr.onabort = null;\n this.xhr.abort();\n } else if (this.image) {\n this.stop();\n }\n }\n\n /**\n * Get the no conflict cropper class.\n * @returns {Cropper} The cropper class.\n */\n }], [{\n key: \"noConflict\",\n value: function noConflict() {\n window.Cropper = AnotherCropper;\n return Cropper;\n }\n\n /**\n * Change the default options.\n * @param {Object} options - The new default options.\n */\n }, {\n key: \"setDefaults\",\n value: function setDefaults(options) {\n assign(DEFAULTS, isPlainObject(options) && options);\n }\n }]);\n }();\n assign(Cropper.prototype, render, preview, events, handlers, change, methods);\n\n return Cropper;\n\n}));\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"clearfix\"},[_c('AUpload',{attrs:{\"action\":_vm.url,\"headers\":_vm.headers,\"list-type\":\"picture-card\",\"multiple\":false,\"data\":_vm.getData,\"file-list\":_vm.fileList,\"remove\":_vm.handleRemove},on:{\"preview\":_vm.handlePreview,\"select\":_vm.select,\"change\":_vm.handleChange}},[(_vm.fileList.length===0)?_c('div',[_c('a-icon',{attrs:{\"type\":\"plus\"}}),_c('div',{staticClass:\"ant-upload-text\"},[_vm._v(\"\\n بارگذاری\\n \")])],1):_vm._e()]),_c('AModal',{attrs:{\"visible\":_vm.previewVisible,\"footer\":null},on:{\"cancel\":_vm.handleCancel}},[_c('img',{staticStyle:{\"width\":\"100%\"},attrs:{\"alt\":\"example\",\"src\":_vm.previewImage}})])],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <div class=\"clearfix\">\r\n <!--accept=\"image/jpeg\"-->\r\n <AUpload\r\n :action=\"url\"\r\n :headers=\"headers\"\r\n list-type=\"picture-card\"\r\n :multiple=\"false\"\r\n :data=\"getData\"\r\n :file-list=\"fileList\"\r\n :remove=\"handleRemove\"\r\n @preview=\"handlePreview\"\r\n @select=\"select\"\r\n @change=\"handleChange\">\r\n <div v-if=\"fileList.length===0\">\r\n <a-icon type=\"plus\"/>\r\n <div class=\"ant-upload-text\">\r\n بارگذاری\r\n </div>\r\n </div>\r\n </AUpload>\r\n <AModal :visible=\"previewVisible\" :footer=\"null\" @cancel=\"handleCancel\">\r\n <img alt=\"example\" style=\"width: 100%\" :src=\"previewImage\"/>\r\n </AModal>\r\n </div>\r\n</template>\r\n<script>\r\nfunction getBase64(file) {\r\n return new Promise((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.readAsDataURL(file);\r\n reader.onload = () => resolve(reader.result);\r\n reader.onerror = error => reject(error);\r\n });\r\n}\r\n\r\n//import themeConfig from \"/themeConfig\";\r\nimport {baseURL} from \"../../axios\";\r\n\r\nexport default {\r\n name: 'UploadInput',\r\n props:{\r\n limit:{\r\n type: Number,\r\n required:false,\r\n default:20\r\n },\r\n },\r\n data() {\r\n return {\r\n url: (baseURL+'site/file'),\r\n previewVisible: false,\r\n previewImage: '',\r\n fileList: [],\r\n };\r\n },\r\n watch: {\r\n fileList(n, o) {\r\n if (n.length > o.length) {\r\n this.$emit('add-file', n);\r\n } else if (n.length < o.length) {\r\n this.$emit('remove-file', n);\r\n }\r\n }\r\n },\r\n methods: {\r\n handleRemove(file){\r\n // console.log(file,'fileeee')\r\n this.$emit('remove',file);\r\n },\r\n handleCancel() {\r\n this.previewVisible = false;\r\n },\r\n async handlePreview(file) {\r\n if (!file.url && !file.preview) {\r\n file.preview = await getBase64(file.originFileObj);\r\n }\r\n this.previewImage = file.url || file.preview;\r\n this.previewVisible = true;\r\n },\r\n handleChange({fileList, event, file}) {\r\n // console.log(fileList);\r\n // console.log(event);\r\n // console.log(file);\r\n if (file.status==='done' && file.response && file.response.id) {\r\n this.$emit('ok', file.response);\r\n }\r\n this.fileList = fileList;\r\n },\r\n select() {\r\n // console.log(\"555 ==> \", 555);\r\n },\r\n getData() {\r\n return {\r\n has_thumb: 1,\r\n has_watermark: 0,\r\n subject: 1,\r\n title: 1\r\n }\r\n },\r\n },\r\n computed: {\r\n headers() {\r\n return {\r\n 'Authorization': 'Bearer ' + localStorage.getItem(\"token\") || localStorage.token\r\n }\r\n }\r\n }\r\n};\r\n</script>\r\n<style>\r\n/* you can make up upload button and sample style by using stylesheets */\r\n.ant-upload-select-picture-card i {\r\n font-size: 32px;\r\n color: #999;\r\n}\r\n\r\n.ant-upload-select-picture-card .ant-upload-text {\r\n margin-top: 8px;\r\n color: #666;\r\n}\r\n</style>\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SingleUploadInput.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SingleUploadInput.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./SingleUploadInput.vue?vue&type=template&id=a203b430\"\nimport script from \"./SingleUploadInput.vue?vue&type=script&lang=js\"\nexport * from \"./SingleUploadInput.vue?vue&type=script&lang=js\"\nimport style0 from \"./SingleUploadInput.vue?vue&type=style&index=0&id=a203b430&prod&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports"],"sourceRoot":""}
Copyright ©2k19 -
Hexid
|
Tex7ure