From 89479afeab28ebe8f618eaaa62dd44d3fe3d9e95 Mon Sep 17 00:00:00 2001 From: proyection <78162471+proyection@users.noreply.github.com> Date: Thu, 28 Jan 2021 16:47:06 -0600 Subject: [PATCH 1/2] Reverse logic of detectSwipe on touchend event to match expected result on tap vs swipe. --- dist/bundles/angular-file.umd.js | 15 +++++++++------ dist/bundles/angular-file.umd.js.map | 2 +- dist/bundles/angular-file.umd.min.js | 2 +- dist/bundles/angular-file.umd.min.js.map | 2 +- .../file-upload/doc-event-help.functions.js | 17 ++++++++++------- dist/fesm2015/angular-file.js | 15 +++++++++------ dist/fesm2015/angular-file.js.map | 2 +- src/file-upload/doc-event-help.functions.ts | 15 +++++++++------ 8 files changed, 41 insertions(+), 29 deletions(-) diff --git a/dist/bundles/angular-file.umd.js b/dist/bundles/angular-file.umd.js index f715fc53..0c8606bc 100644 --- a/dist/bundles/angular-file.umd.js +++ b/dist/bundles/angular-file.umd.js @@ -317,14 +317,17 @@ var currentY = touches[0].clientY; if ((Math.abs(currentX - initialTouchStartX) > 20) || (Math.abs(currentY - initialTouchStartY) > 20)) { - evt.stopPropagation(); - if (evt.cancelable) { - evt.preventDefault(); - } - return false; + // Swipe detected + return true; + } + // touch was a 'tap' so prevent propogation and prevent + // device follow-up actions (click, mouseup, mousedown, etc.) + evt.stopPropagation(); + if (evt.cancelable) { + evt.preventDefault(); } } - return true; + return false; } } return false; diff --git a/dist/bundles/angular-file.umd.js.map b/dist/bundles/angular-file.umd.js.map index 06e0e6fd..d28d26e9 100644 --- a/dist/bundles/angular-file.umd.js.map +++ b/dist/bundles/angular-file.umd.js.map @@ -1 +1 @@ -{"version":3,"file":"angular-file.umd.js","sources":["../../node_modules/tslib/tslib.es6.js","../src/file-upload/doc-event-help.functions.ts","../src/file-upload/fileTools.ts","../src/file-upload/ngf.directive.ts","../src/file-upload/ngfSelect.directive.ts","../src/file-upload/ngfDrop.directive.ts","../src/file-upload/ngfBackground.directive.ts","../src/file-upload/ngfUploadStatus.directive.ts","../src/file-upload/ngfFormData.directive.ts","../src/file-upload/ngfSrc.directive.ts","../src/file-upload/ngf.module.ts","../../src/public-api.ts","../../src/angular-file.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","export const isFileInput = function(elm:any){\n const ty = elm.getAttribute('type')\n return elm.tagName.toLowerCase() === 'input' && ty && ty.toLowerCase() === 'file';\n}\n\nlet initialTouchStartY = 0;\nlet initialTouchStartX = 0;\nexport const detectSwipe = function(evt:any):boolean {\n var touches = evt.changedTouches || (evt.originalEvent && evt.originalEvent.changedTouches);\n if (touches) {\n if (evt.type === 'touchstart') {\n initialTouchStartX = touches[0].clientX;\n initialTouchStartY = touches[0].clientY;\n return true; // don't block event default\n } else {\n // prevent scroll from triggering event\n if (evt.type === 'touchend') {\n var currentX = touches[0].clientX;\n var currentY = touches[0].clientY;\n if ((Math.abs(currentX - initialTouchStartX) > 20) ||\n (Math.abs(currentY - initialTouchStartY) > 20)) {\n evt.stopPropagation();\n if (evt.cancelable) {\n evt.preventDefault();\n }\n return false;\n }\n }\n return true;\n }\n }\n return false\n}\n\nexport const createInvisibleFileInputWrap = function() {\n var fileElem = createFileInput()\n var label = document.createElement('label');\n label.innerHTML = 'upload'\n label.style.visibility = 'hidden'\n label.style.position = 'absolute'\n label.style.overflow = 'hidden'\n label.style.width = '0px'\n label.style.height = '0px'\n label.style.border = 'none'\n label.style.margin = '0px'\n label.style.padding = '0px'\n label.setAttribute('tabindex','-1')\n \n //bindAttrToFileInput(fileElem, label);\n //generatedElems.push({el: elem, ref: label});\n\n label.appendChild( fileElem )\n //document.body.appendChild( label );\n\n return label;\n}\n\nexport const createFileInput = function() {\n var fileElem = document.createElement('input');\n fileElem.type=\"file\"\n return fileElem;\n}\n","export function getWindow():any{return window}\n\nexport function acceptType(accept:string, type:string, name?:string):boolean { \n if( !accept ){\n return true\n }\n\n const defs = accept.split(',')\n let regx:RegExp\n let acceptRegString:string\n\n for(let x=defs.length-1; x >= 0; --x){\n //Escapes dots in mimetype \n acceptRegString = defs[x]\n //trim\n acceptRegString = acceptRegString.replace(/(^\\s+|\\s+$)/g,'')\n //Escapes stars in mimetype \n acceptRegString = acceptRegString.replace(/\\*/g,'.*')\n //let acceptReg = '^((' + acceptRegString\n //acceptReg = acceptReg.replace(/,/g,')|(') + '))$'\n \n //try by mime\n regx = new RegExp(acceptRegString, 'gi')\n if( type.search(regx)>=0 ){\n return true\n }\n\n //try by ext\n if( acceptRegString.substring(0, 1)=='.' ){ \n acceptRegString = '\\\\'+ acceptRegString//.substring(1, acceptRegString.length-1)//remove dot at front\n regx = new RegExp(acceptRegString+'$', 'i')\n if( (name||type).search(regx)>=0 ){\n return true\n }\n }\n }\n return false\n}\n\nexport interface InvalidFileItem{\n file:File\n type:string\n}\n\nexport function arrayBufferToBase64(buffer:any) {\n var binary = '';\n var bytes = new Uint8Array(buffer);\n var len = bytes.byteLength;\n for (var i = 0; i < len; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return window.btoa(binary);\n}\n\nexport function dataUrltoBlob(\n dataurl:string,\n name:string,\n origSize?:any\n):Blob{\n var arr = dataurl.split(',');\n var mimeMatch = arr[0].match(/:(.*?);/)\n var mime:string = mimeMatch ? mimeMatch[1] : 'text/plain'\n var bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);\n while (n--) {\n u8arr[n] = bstr.charCodeAt(n);\n }\n var blob = new window.Blob([u8arr], {type: mime});\n blob[\"name\"] = name;\n blob[\"$ngfOrigSize\"] = origSize;\n return blob;\n}\n\nexport interface orientationMeta{\n orientation: number\n fixedArrayBuffer?:any[]\n}\n\nexport function applyTransform(\n ctx:CanvasRenderingContext2D,\n orientation:number,\n width:number,\n height:number\n) {\n switch (orientation) {\n case 2:\n return ctx.transform(-1, 0, 0, 1, width, 0);\n case 3:\n return ctx.transform(-1, 0, 0, -1, width, height);\n case 4:\n return ctx.transform(1, 0, 0, -1, 0, height);\n case 5:\n return ctx.transform(0, 1, 1, 0, 0, 0);\n case 6:\n return ctx.transform(0, 1, -1, 0, height, 0);\n case 7:\n return ctx.transform(0, -1, -1, 0, height, width);\n case 8:\n return ctx.transform(0, -1, 1, 0, 0, width);\n }\n}\n\nexport function fixFileOrientationByMeta(\n file:File, result:orientationMeta\n):Promise{\n return dataUrl(file, true)\n .then(url=>{\n var canvas = document.createElement('canvas');\n var img = document.createElement('img');\n\n return >new Promise(function(res,rej){\n img.onload = function () {\n try {\n canvas.width = result.orientation > 4 ? img.height : img.width\n canvas.height = result.orientation > 4 ? img.width : img.height\n var ctx = canvas.getContext('2d')\n applyTransform(ctx, result.orientation, img.width, img.height)\n ctx.drawImage(img, 0, 0);\n var dataUrl = canvas.toDataURL(file.type || 'image/WebP', 0.934)\n const base = arrayBufferToBase64(result.fixedArrayBuffer)\n dataUrl = restoreExif(base, dataUrl)\n var blob = dataUrltoBlob(dataUrl, file.name)\n const newFile = blobToFile(blob, file.name);\n res(newFile);\n } catch (e) {\n rej(e)\n }\n };\n img.onerror = rej;\n img.src = url; \n })\n })\n}\n\nexport function applyExifRotation(\n file:File\n):Promise{\n if (file.type.indexOf('image/jpeg') !== 0) {\n return Promise.resolve(file);\n }\n\n return readOrientation(file)\n .then((result:orientationMeta)=>{\n if (result.orientation < 2 || result.orientation > 8) {\n return file\n }\n \n return fixFileOrientationByMeta(file,result)\n })\n}\n\nexport function readOrientation(\n file:File\n):Promise{\n return new Promise((res,rej)=>{\n var reader = new FileReader();\n var slicedFile = file.slice ? file.slice(0, 64 * 1024) : file;\n reader.readAsArrayBuffer(slicedFile);\n reader.onerror = rej\n reader.onload = function (e:any) {\n var result:orientationMeta = {orientation: 1};\n var view = new DataView( this.result );\n if (view.getUint16(0, false) !== 0xFFD8) return res(result);\n\n var length = view.byteLength,\n offset = 2;\n while (offset < length) {\n var marker = view.getUint16(offset, false);\n offset += 2;\n if (marker === 0xFFE1) {\n if (view.getUint32(offset += 2, false) !== 0x45786966) return res(result);\n\n var little = view.getUint16(offset += 6, false) === 0x4949;\n offset += view.getUint32(offset + 4, little);\n var tags = view.getUint16(offset, little);\n offset += 2;\n for (var i = 0; i < tags; i++)\n if (view.getUint16(offset + (i * 12), little) === 0x0112) {\n var orientation = view.getUint16(offset + (i * 12) + 8, little);\n if (orientation >= 2 && orientation <= 8) {\n view.setUint16(offset + (i * 12) + 8, 1, little);\n result.fixedArrayBuffer = e.target.result;\n }\n result.orientation = orientation;\n return res(result);\n }\n } else if ((marker & 0xFF00) !== 0xFF00) break;\n else offset += view.getUint16(offset, false);\n }\n return res(result);\n };\n })\n}\n\n/** converts file-input file into base64 dataUri */\nexport function dataUrl(\n file:any,\n disallowObjectUrl?:any\n):Promise{\n if (!file) return Promise.resolve(file)\n \n if ((disallowObjectUrl && file.$ngfDataUrl != null) || (!disallowObjectUrl && file.$ngfBlobUrl != null)) {\n return Promise.resolve( disallowObjectUrl ? file.$ngfDataUrl : file.$ngfBlobUrl )\n }\n\n var p = disallowObjectUrl ? file.$$ngfDataUrlPromise : file.$$ngfBlobUrlPromise;\n if (p) return p;\n\n const win = getWindow()\n let deferred:Promise\n if (win.FileReader && file &&\n (!win.FileAPI || navigator.userAgent.indexOf('MSIE 8') === -1 || file.size < 20000) &&\n (!win.FileAPI || navigator.userAgent.indexOf('MSIE 9') === -1 || file.size < 4000000)) {\n //prefer URL.createObjectURL for handling refrences to files of all sizes\n //since it doesn´t build a large string in memory\n var URL = win.URL || win.webkitURL;\n if (FileReader) {\n deferred = new Promise((res,rej)=>{\n var fileReader = new FileReader();\n fileReader.onload = function (event:any) {\n file.$ngfDataUrl = event.target.result;\n delete file.$ngfDataUrl;\n res( event.target.result )\n };\n fileReader.onerror = function (e) {\n file.$ngfDataUrl = '';\n rej(e)\n };\n fileReader.readAsDataURL(file);\n })\n } else {\n var url:any;\n try {\n url = URL.createObjectURL(file);\n } catch (e) {\n return Promise.reject(e);\n }\n \n deferred = Promise.resolve( url )\n file.$ngfBlobUrl = url;\n }\n } else {\n file[disallowObjectUrl ? '$ngfDataUrl' : '$ngfBlobUrl'] = '';\n return Promise.reject( new Error('Browser does not support window.FileReader, window.FileReader, or window.FileAPI') )//deferred.reject();\n }\n\n if (disallowObjectUrl) {\n p = file.$$ngfDataUrlPromise = deferred;\n } else {\n p = file.$$ngfBlobUrlPromise = deferred;\n }\n\n p = p.then((x:any)=>{\n delete file[disallowObjectUrl ? '$$ngfDataUrlPromise' : '$$ngfBlobUrlPromise'];\n return x\n })\n\n return p;\n}\n\nexport function restoreExif(orig:any, resized:any) {\n var ExifRestorer:any = {\n KEY_STR:'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='\n }\n\n ExifRestorer.encode64 = function (input:any) {\n var output = '',\n chr1, chr2, chr3:any = '',\n enc1, enc2, enc3, enc4:any = '',\n i = 0;\n\n do {\n chr1 = input[i++];\n chr2 = input[i++];\n chr3 = input[i++];\n\n enc1 = chr1 >> 2;\n enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);\n enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);\n enc4 = chr3 & 63;\n\n if (isNaN(chr2)) {\n enc3 = enc4 = 64;\n } else if (isNaN(chr3)) {\n enc4 = 64;\n }\n\n output = output +\n this.KEY_STR.charAt(enc1) +\n this.KEY_STR.charAt(enc2) +\n this.KEY_STR.charAt(enc3) +\n this.KEY_STR.charAt(enc4);\n chr1 = chr2 = chr3 = '';\n enc1 = enc2 = enc3 = enc4 = '';\n } while (i < input.length);\n\n return output;\n };\n\n ExifRestorer.restore = function (origFileBase64:any, resizedFileBase64:any) {\n if (origFileBase64.match('data:image/jpeg;base64,')) {\n origFileBase64 = origFileBase64.replace('data:image/jpeg;base64,', '');\n }\n\n var rawImage:number[] = this.decode64(origFileBase64);\n var segments = this.slice2Segments(rawImage);\n\n var image = this.exifManipulation(resizedFileBase64, segments);\n\n return 'data:image/jpeg;base64,' + this.encode64(image);\n };\n\n\n ExifRestorer.exifManipulation = function (resizedFileBase64:any, segments:any) {\n var exifArray = this.getExifArray(segments),\n newImageArray = this.insertExif(resizedFileBase64, exifArray);\n return new Uint8Array(newImageArray);\n };\n\n ExifRestorer.getExifArray = function (segments:number[][]) {\n var seg;\n for (var x = 0; x < segments.length; x++) {\n seg = segments[x];\n if (seg[0] === 255 && seg[1] === 225) //(ff e1)\n {\n return seg;\n }\n }\n return [];\n };\n\n\n ExifRestorer.insertExif = function (resizedFileBase64:any, exifArray:any) {\n var imageData = resizedFileBase64.replace('data:image/jpeg;base64,', ''),\n buf = this.decode64(imageData),\n separatePoint = buf.indexOf(255, 3),\n mae = buf.slice(0, separatePoint),\n ato = buf.slice(separatePoint),\n array = mae;\n\n array = array.concat(exifArray);\n array = array.concat(ato);\n return array;\n };\n\n\n ExifRestorer.slice2Segments = function(\n rawImageArray:number[]\n ) {\n var head:number = 0,\n segments:number[][] = [];\n\n while (1) {\n if (rawImageArray[head] === 255 && rawImageArray[head + 1] === 218) {\n break;\n }\n if (rawImageArray[head] === 255 && rawImageArray[head + 1] === 216) {\n head += 2;\n }\n else {\n var length = rawImageArray[head + 2] * 256 + rawImageArray[head + 3]\n var endPoint = head + length + 2\n var seg:number[] = rawImageArray.slice(head, endPoint)\n segments.push(seg);\n head = endPoint;\n }\n if (head > rawImageArray.length) {\n break;\n }\n }\n\n return segments;\n };\n\n\n ExifRestorer.decode64 = function (\n input:any\n ):number[]{\n var chr1, chr2, chr3:any = '',\n enc1, enc2, enc3, enc4:any = '',\n i = 0,\n buf:number[] = [];\n\n // remove all characters that are not A-Z, a-z, 0-9, +, /, or =\n var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n if (base64test.exec(input)) {\n console.log('There were invalid base64 characters in the input text.');\n }\n input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, '');\n\n do {\n enc1 = this.KEY_STR.indexOf(input.charAt(i++));\n enc2 = this.KEY_STR.indexOf(input.charAt(i++));\n enc3 = this.KEY_STR.indexOf(input.charAt(i++));\n enc4 = this.KEY_STR.indexOf(input.charAt(i++));\n\n chr1 = (enc1 << 2) | (enc2 >> 4);\n chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\n chr3 = ((enc3 & 3) << 6) | enc4;\n\n buf.push(chr1);\n\n if (enc3 !== 64) {\n buf.push(chr2);\n }\n if (enc4 !== 64) {\n buf.push(chr3);\n }\n\n chr1 = chr2 = chr3 = '';\n enc1 = enc2 = enc3 = enc4 = '';\n\n } while (i < input.length);\n\n return buf;\n };\n\n return ExifRestorer.restore(orig, resized); //<= EXIF\n};\n\nfunction blobToFile(theBlob: Blob, fileName:string): File {\n var b: any = theBlob;\n //A Blob() is almost a File() - it's just missing the two properties below which we will add\n b.lastModifiedDate = new Date();\n b.name = fileName;\n\n //Cast to a File() type\n return theBlob;\n}\n","import { Directive, EventEmitter, ElementRef, Input, Output, HostListener, ChangeDetectionStrategy } from '@angular/core';\nimport { createInvisibleFileInputWrap, isFileInput, detectSwipe } from \"./doc-event-help.functions\"\nimport {\n acceptType, InvalidFileItem,\n applyExifRotation, dataUrl\n} from \"./fileTools\"\n\nexport interface dragMeta{\n type:string\n kind:string\n}\n\n/** A master base set of logic intended to support file select/drag/drop operations\n NOTE: Use ngfDrop for full drag/drop. Use ngfSelect for selecting\n*/\n@Directive({\n selector: \"[ngf]\",\n exportAs:\"ngf\"\n})\nexport class ngf {\n fileElm:any\n filters:{name:string, fn:(file:File)=>boolean}[] = []\n lastFileCount:number=0\n\n @Input() multiple !:string\n @Input() accept !:string\n @Input() maxSize !:number\n //@Input() forceFilename:string\n //@Input() forcePostname:string\n @Input() ngfFixOrientation:boolean = true\n\n @Input() fileDropDisabled:boolean = false\n @Input() selectable: boolean | string = false\n @Output('init') directiveInit:EventEmitter = new EventEmitter()\n\n @Input() lastInvalids:InvalidFileItem[] = []\n @Output() lastInvalidsChange:EventEmitter<{file:File,type:string}[]> = new EventEmitter()\n\n @Input() lastBaseUrl !: string//base64 last file uploaded url\n @Output() lastBaseUrlChange:EventEmitter = new EventEmitter()\n\n @Input() file !: File//last file uploaded\n @Output() fileChange:EventEmitter = new EventEmitter()\n\n @Input() files:File[] = []\n @Output() filesChange:EventEmitter = new EventEmitter();\n\n @Input() capturePaste: boolean; // window paste file watching (empty string turns on)\n pasteCapturer !: (e: Event) => void;\n\n constructor(public element:ElementRef){\n this.initFilters()\n }\n\n initFilters(){\n // the order is important\n this.filters.push({name: 'accept', fn: this._acceptFilter})\n this.filters.push({name: 'fileSize', fn: this._fileSizeFilter})\n\n //this.filters.push({name: 'fileType', fn: this._fileTypeFilter})\n //this.filters.push({name: 'queueLimit', fn: this._queueLimitFilter})\n //this.filters.push({name: 'mimeType', fn: this._mimeTypeFilter})\n }\n\n ngOnDestroy(){\n delete this.fileElm//faster memory release of dom element\n this.destroyPasteListener();\n }\n\n ngOnInit(){\n const selectable = (this.selectable || this.selectable==='') && !['false', 'null', '0'].includes(this.selectable as string);\n if( selectable ){\n this.enableSelecting()\n }\n\n if( this.multiple ){\n this.paramFileElm().setAttribute('multiple', this.multiple)\n }\n\n this.evalCapturePaste();\n\n //create reference to this class with one cycle delay to avoid ExpressionChangedAfterItHasBeenCheckedError\n setTimeout(()=>{\n this.directiveInit.emit(this)\n }, 0)\n }\n\n ngOnChanges( changes ){\n if( changes.accept ){\n this.paramFileElm().setAttribute('accept', changes.accept.currentValue || '*')\n }\n\n if (changes.capturePaste) {\n this.evalCapturePaste();\n }\n }\n\n evalCapturePaste() {\n const isActive = this.capturePaste || (this.capturePaste as any)==='' || ['false', '0', 'null'].includes(this.capturePaste as any);\n\n if (isActive) {\n if (this.pasteCapturer) {\n return; // already listening\n }\n\n this.pasteCapturer = (e: Event) => {\n const clip = (e as any).clipboardData;\n if (clip && clip.files && clip.files.length) {\n this.handleFiles(clip.files);\n e.preventDefault();\n }\n }\n\n window.addEventListener('paste', this.pasteCapturer);\n\n return;\n }\n\n this.destroyPasteListener();\n }\n\n destroyPasteListener() {\n if (this.pasteCapturer) {\n window.removeEventListener('paste', this.pasteCapturer);\n delete this.pasteCapturer;\n }\n }\n\n paramFileElm(){\n if( this.fileElm )return this.fileElm//already defined\n\n //elm is a file input\n const isFile = isFileInput( this.element.nativeElement )\n if(isFile)return this.fileElm = this.element.nativeElement\n\n //create foo file input\n const label = createInvisibleFileInputWrap()\n this.fileElm = label.getElementsByTagName('input')[0]\n this.fileElm.addEventListener('change', this.changeFn.bind(this));\n this.element.nativeElement.appendChild( label )\n return this.fileElm\n }\n\n enableSelecting(){\n let elm = this.element.nativeElement\n\n if( isFileInput(elm) ){\n const bindedHandler = _ev=>this.beforeSelect()\n elm.addEventListener('click', bindedHandler)\n elm.addEventListener('touchstart', bindedHandler)\n return\n }\n\n const bindedHandler = ev=>this.clickHandler(ev)\n elm.addEventListener('click', bindedHandler)\n elm.addEventListener('touchstart', bindedHandler)\n elm.addEventListener('touchend', bindedHandler)\n }\n\n getValidFiles( files:File[] ):File[]{\n const rtn:File[] = []\n for(let x=files.length-1; x >= 0; --x){\n if( this.isFileValid(files[x]) ){\n rtn.push( files[x] )\n }\n }\n return rtn\n }\n\n getInvalidFiles(files:File[]):InvalidFileItem[]{\n const rtn:InvalidFileItem[] = []\n for(let x=files.length-1; x >= 0; --x){\n let failReason = this.getFileFilterFailName(files[x])\n if( failReason ){\n rtn.push({\n file : files[x],\n type : failReason\n })\n }\n }\n return rtn\n }\n\n // Primary handler of files coming in\n handleFiles(files:File[]){\n const valids = this.getValidFiles(files)\n\n if(files.length!=valids.length){\n this.lastInvalids = this.getInvalidFiles(files)\n }else{\n delete this.lastInvalids\n }\n\n this.lastInvalidsChange.emit(this.lastInvalids)\n\n if( valids.length ){\n if( this.ngfFixOrientation ){\n this.applyExifRotations(valids)\n .then( fixedFiles=>this.que(fixedFiles) )\n }else{\n this.que(valids)\n }\n }\n\n if (this.isEmptyAfterSelection()) {\n this.element.nativeElement.value = ''\n }\n }\n\n que( files:File[] ){\n this.files = this.files || []\n Array.prototype.push.apply(this.files, files)\n\n //below break memory ref and doesnt act like a que\n //this.files = files//causes memory change which triggers bindings like \n\n this.filesChange.emit( this.files )\n\n if(files.length){\n this.fileChange.emit( this.file=files[0] )\n\n if(this.lastBaseUrlChange.observers.length){\n dataUrl( files[0] )\n .then( url=>this.lastBaseUrlChange.emit(url) )\n }\n }\n\n //will be checked for input value clearing\n this.lastFileCount = this.files.length\n }\n\n /** called when input has files */\n changeFn(event:any) {\n var fileList = event.__files_ || (event.target && event.target.files)\n\n if (!fileList) return;\n\n this.stopEvent(event);\n this.handleFiles(fileList)\n }\n\n clickHandler(evt:any){\n const elm = this.element.nativeElement\n if (elm.getAttribute('disabled') || this.fileDropDisabled){\n return false;\n }\n\n var r = detectSwipe(evt);\n // prevent the click if it is a swipe\n if ( r!==false ) return r;\n\n const fileElm = this.paramFileElm()\n fileElm.click()\n //fileElm.dispatchEvent( new Event('click') );\n this.beforeSelect()\n\n return false;\n }\n\n beforeSelect(){\n if( this.files && this.lastFileCount===this.files.length )return\n\n //if no files in array, be sure browser doesnt prevent reselect of same file (see github issue 27)\n this.fileElm.value = null\n }\n\n isEmptyAfterSelection():boolean {\n return !!this.element.nativeElement.attributes.multiple;\n }\n\n eventToTransfer(event:any):any {\n if(event.dataTransfer)return event.dataTransfer\n return event.originalEvent ? event.originalEvent.dataTransfer : null\n }\n\n stopEvent(event:any):any {\n event.preventDefault();\n event.stopPropagation();\n }\n\n transferHasFiles(transfer:any):any {\n if (!transfer.types) {\n return false;\n }\n\n if (transfer.types.indexOf) {\n return transfer.types.indexOf('Files') !== -1;\n } else if (transfer.types.contains) {\n return transfer.types.contains('Files');\n } else {\n return false;\n }\n }\n\n eventToFiles(event:Event){\n const transfer = this.eventToTransfer(event);\n if( transfer ){\n if(transfer.files && transfer.files.length){\n return transfer.files\n }\n if(transfer.items && transfer.items.length){\n return transfer.items\n }\n }\n return []\n }\n\n applyExifRotations(\n files:File[]\n ):Promise{\n const mapper = (\n file:File,index:number\n ):Promise=>{\n return applyExifRotation(file)\n .then( fixedFile=>files.splice(index, 1, fixedFile) )\n }\n\n const proms:Promise[] = []\n for(let x=files.length-1; x >= 0; --x){\n proms[x] = mapper( files[x], x )\n }\n return Promise.all( proms ).then( ()=>files )\n }\n\n @HostListener('change', ['$event'])\n onChange(event:Event):void {\n let files = this.element.nativeElement.files || this.eventToFiles(event)\n\n if(!files.length)return\n\n this.stopEvent(event);\n this.handleFiles(files)\n }\n\n getFileFilterFailName(\n file:File\n ):string | undefined{\n for(let i = 0; i < this.filters.length; i++){\n if( !this.filters[i].fn.call(this, file) ){\n return this.filters[i].name\n }\n }\n return undefined\n }\n\n isFileValid(file:File):boolean{\n const noFilters = !this.accept && (!this.filters || !this.filters.length)\n if( noFilters ){\n return true//we have no filters so all files are valid\n }\n\n return this.getFileFilterFailName(file) ? false : true\n }\n\n isFilesValid(files:File[]){\n for(let x=files.length-1; x >= 0; --x){\n if( !this.isFileValid(files[x]) ){\n return false\n }\n }\n return true\n }\n\n protected _acceptFilter(item:File):boolean {\n return acceptType(this.accept, item.type, item.name)\n }\n\n protected _fileSizeFilter(item:File):boolean {\n return !(this.maxSize && item.size > this.maxSize);\n }\n\n /** browsers try hard to conceal data about file drags, this tends to undo that */\n filesToWriteableObject( files:File[] ):dragMeta[]{\n const jsonFiles:dragMeta[] = []\n for(let x=0; x < files.length; ++x){\n jsonFiles.push({\n type:files[x].type,\n kind:files[x][\"kind\"]\n })\n }\n return jsonFiles\n }\n}\n","import { Directive, Input } from \"@angular/core\"\nimport { ngf } from \"./ngf.directive\"\n\n@Directive({\n selector: \"[ngfSelect]\",\n exportAs: \"ngfSelect\"\n})\nexport class ngfSelect extends ngf {\n @Input() selectable:any = true\n}","import {\n Directive, EventEmitter,\n HostListener, Input, Output\n} from '@angular/core';\nimport { ngf, dragMeta } from \"./ngf.directive\"\n\n@Directive({\n selector: \"[ngfDrop]\",\n exportAs: \"ngfDrop\"\n})\nexport class ngfDrop extends ngf {\n @Output() fileOver:EventEmitter = new EventEmitter();\n\n @Input() validDrag:boolean = false\n @Output() validDragChange:EventEmitter = new EventEmitter()\n\n @Input() invalidDrag = false\n @Output() invalidDragChange:EventEmitter = new EventEmitter()\n\n @Input() dragFiles !: dragMeta[]\n @Output() dragFilesChange:EventEmitter = new EventEmitter()\n\n @HostListener('drop', ['$event'])\n onDrop(event:Event):void {\n if(this.fileDropDisabled){\n this.stopEvent(event);\n return\n }\n\n this.closeDrags()\n let files = this.eventToFiles(event)\n\n if(!files.length)return\n\n this.stopEvent(event);\n this.handleFiles(files)\n }\n\n handleFiles(files:File[]){\n this.fileOver.emit(false)//turn-off dragover\n super.handleFiles(files)\n }\n\n @HostListener('dragover', ['$event'])\n onDragOver(event:Event):void {\n if(this.fileDropDisabled){\n this.stopEvent(event);\n return\n }\n\n const transfer = this.eventToTransfer(event)\n\n let files = this.eventToFiles(event)\n\n let jsonFiles = this.filesToWriteableObject(files)\n this.dragFilesChange.emit( this.dragFiles=jsonFiles )\n\n if( files.length ){\n this.validDrag = this.isFilesValid(files)\n }else{\n //Safari, IE11 & some browsers do NOT tell you about dragged files until dropped. Always consider a valid drag\n this.validDrag = true\n }\n\n this.validDragChange.emit(this.validDrag)\n\n this.invalidDrag = !this.validDrag\n this.invalidDragChange.emit(this.invalidDrag)\n\n transfer.dropEffect = 'copy'//change cursor and such\n this.stopEvent(event)\n this.fileOver.emit(true)\n }\n\n closeDrags(){\n delete this.validDrag\n this.validDragChange.emit(this.validDrag)\n this.invalidDrag = false\n this.invalidDragChange.emit(this.invalidDrag)\n delete this.dragFiles\n this.dragFilesChange.emit( this.dragFiles )\n }\n\n @HostListener('dragleave', ['$event'])\n onDragLeave(event:Event):any {\n if(this.fileDropDisabled){\n this.stopEvent(event);\n return\n }\n \n this.closeDrags()\n\n if ((this as any).element) {\n if (event.currentTarget === (this as any).element[0]) {\n return;\n }\n }\n\n this.stopEvent(event);\n this.fileOver.emit(false);\n }\n}","import { Directive, ElementRef, Input } from '@angular/core';\nimport { dataUrl } from './fileTools';\n\n@Directive({selector: '[ngfBackground]'})\nexport class ngfBackground {\n @Input('ngfBackground') file:any\n\n constructor(public ElementRef:ElementRef){}\n\n ngOnChanges( _changes:any ){\n dataUrl(this.file)\n .then(src=>{\n const urlString = 'url(\\'' + (src || '') + '\\')'\n this.ElementRef.nativeElement.style.backgroundImage = urlString\n })\n }\n}\n","import { Directive, EventEmitter, Output, Input } from '@angular/core';\n\n@Directive({selector: 'ngfUploadStatus'})\nexport class ngfUploadStatus {\n @Input() percent:number = 0\n @Output() percentChange:EventEmitter = new EventEmitter()\n @Input() httpEvent !: Event\n\n ngOnChanges( changes ){\n if( changes.httpEvent && changes.httpEvent.currentValue ){\n const event = changes.httpEvent.currentValue\n if (event.loaded && event.total) {\n setTimeout(()=>{\n this.percent = Math.round(100 * event.loaded / event.total);\n this.percentChange.emit( this.percent )\n }, 0)\n }\n }\n }\n}","import {\n IterableDiffer,\n IterableDiffers,\n Directive, EventEmitter,\n Output, Input\n} from '@angular/core';\n\n@Directive({selector: 'ngfFormData'})\nexport class ngfFormData {\n @Input() files !: File[]\n @Input() postName:string = \"file\"\n @Input() fileName !: string//force file name\n\n @Input() FormData:FormData = new FormData()\n @Output() FormDataChange:EventEmitter = new EventEmitter()\n\n differ:IterableDiffer<{}>\n\n constructor(IterableDiffers: IterableDiffers){\n this.differ = IterableDiffers.find([]).create()\n }\n\n ngDoCheck(){\n var changes = this.differ.diff( this.files );\n\n if (changes) {\n setTimeout(()=>this.buildFormData(), 0)\n }\n }\n\n buildFormData(){\n const isArray = typeof(this.files)==='object' && this.files.constructor===Array\n\n if( isArray ){\n this.FormData = new FormData()\n const files = this.files || []\n files.forEach(file=>\n this.FormData.append(this.postName, file, this.fileName||file.name)\n )\n this.FormDataChange.emit( this.FormData )\n }else{\n delete this.FormData\n }\n }\n}","import { Directive, ElementRef, Input } from '@angular/core';\nimport { dataUrl } from './fileTools';\n\n@Directive({ selector: '[ngfSrc]' })\nexport class ngfSrc {\n @Input('ngfSrc') file: any\n\n constructor(public ElementRef: ElementRef) { }\n\n ngOnChanges(_changes: any) {\n dataUrl(this.file)\n .then(src=>\n this.ElementRef.nativeElement.src = src\n )\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { ngfBackground } from './ngfBackground.directive';\nimport { ngfDrop } from './ngfDrop.directive';\nimport { ngf } from './ngf.directive';\nimport { ngfSelect } from './ngfSelect.directive';\nimport { ngfUploadStatus } from './ngfUploadStatus.directive';\nimport { ngfFormData } from './ngfFormData.directive';\nimport { ngfSrc } from './ngfSrc.directive';\n//import{ HttpModule } from '@angular/http';\n\nconst declarations = [\n ngfDrop,\n ngfSelect,\n ngfBackground,\n ngfSrc,\n ngfUploadStatus,\n ngfFormData,\n ngf\n]\n\n@NgModule({\n imports: [\n CommonModule\n //,HttpModule\n ],\n declarations: declarations,\n exports: declarations//[HttpModule, ...declarations]\n}) export class ngfModule {}","/*\n * Public API Surface of angular-file\n */\n\nexport * from './file-upload/ngfSelect.directive';\nexport * from './file-upload/ngfDrop.directive';\nexport * from './file-upload/ngf.directive';\nexport * from './file-upload/ngf.module';\nexport { ngfBackground } from './file-upload/ngfBackground.directive';\nexport { ngfSrc } from './file-upload/ngfSrc.directive';\nexport { ngfUploadStatus } from './file-upload/ngfUploadStatus.directive';\nexport { ngfFormData } from './file-upload/ngfFormData.directive';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["EventEmitter","Directive","ElementRef","Input","Output","HostListener","IterableDiffers","NgModule","CommonModule"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"angular-file.umd.js","sources":["../../node_modules/tslib/tslib.es6.js","../src/file-upload/doc-event-help.functions.ts","../src/file-upload/fileTools.ts","../src/file-upload/ngf.directive.ts","../src/file-upload/ngfSelect.directive.ts","../src/file-upload/ngfDrop.directive.ts","../src/file-upload/ngfBackground.directive.ts","../src/file-upload/ngfUploadStatus.directive.ts","../src/file-upload/ngfFormData.directive.ts","../src/file-upload/ngfSrc.directive.ts","../src/file-upload/ngf.module.ts","../../src/public-api.ts","../../src/angular-file.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","export const isFileInput = function(elm:any){\n const ty = elm.getAttribute('type')\n return elm.tagName.toLowerCase() === 'input' && ty && ty.toLowerCase() === 'file';\n}\n\nlet initialTouchStartY = 0;\nlet initialTouchStartX = 0;\nexport const detectSwipe = function(evt:any):boolean {\n var touches = evt.changedTouches || (evt.originalEvent && evt.originalEvent.changedTouches);\n if (touches) {\n if (evt.type === 'touchstart') {\n initialTouchStartX = touches[0].clientX;\n initialTouchStartY = touches[0].clientY;\n return true; // don't block event default\n } else {\n // prevent scroll from triggering event\n if (evt.type === 'touchend') {\n var currentX = touches[0].clientX;\n var currentY = touches[0].clientY;\n if ((Math.abs(currentX - initialTouchStartX) > 20) ||\n (Math.abs(currentY - initialTouchStartY) > 20)) {\n // Swipe detected\n return true;\n }\n // touch was a 'tap' so prevent propogation and prevent\n // device follow-up actions (click, mouseup, mousedown, etc.)\n evt.stopPropagation();\n if (evt.cancelable) {\n evt.preventDefault();\n }\n }\n return false;\n }\n }\n return false\n}\n\nexport const createInvisibleFileInputWrap = function() {\n var fileElem = createFileInput()\n var label = document.createElement('label');\n label.innerHTML = 'upload'\n label.style.visibility = 'hidden'\n label.style.position = 'absolute'\n label.style.overflow = 'hidden'\n label.style.width = '0px'\n label.style.height = '0px'\n label.style.border = 'none'\n label.style.margin = '0px'\n label.style.padding = '0px'\n label.setAttribute('tabindex','-1')\n \n //bindAttrToFileInput(fileElem, label);\n //generatedElems.push({el: elem, ref: label});\n\n label.appendChild( fileElem )\n //document.body.appendChild( label );\n\n return label;\n}\n\nexport const createFileInput = function() {\n var fileElem = document.createElement('input');\n fileElem.type=\"file\"\n return fileElem;\n}\n","export function getWindow():any{return window}\n\nexport function acceptType(accept:string, type:string, name?:string):boolean { \n if( !accept ){\n return true\n }\n\n const defs = accept.split(',')\n let regx:RegExp\n let acceptRegString:string\n\n for(let x=defs.length-1; x >= 0; --x){\n //Escapes dots in mimetype \n acceptRegString = defs[x]\n //trim\n acceptRegString = acceptRegString.replace(/(^\\s+|\\s+$)/g,'')\n //Escapes stars in mimetype \n acceptRegString = acceptRegString.replace(/\\*/g,'.*')\n //let acceptReg = '^((' + acceptRegString\n //acceptReg = acceptReg.replace(/,/g,')|(') + '))$'\n \n //try by mime\n regx = new RegExp(acceptRegString, 'gi')\n if( type.search(regx)>=0 ){\n return true\n }\n\n //try by ext\n if( acceptRegString.substring(0, 1)=='.' ){ \n acceptRegString = '\\\\'+ acceptRegString//.substring(1, acceptRegString.length-1)//remove dot at front\n regx = new RegExp(acceptRegString+'$', 'i')\n if( (name||type).search(regx)>=0 ){\n return true\n }\n }\n }\n return false\n}\n\nexport interface InvalidFileItem{\n file:File\n type:string\n}\n\nexport function arrayBufferToBase64(buffer:any) {\n var binary = '';\n var bytes = new Uint8Array(buffer);\n var len = bytes.byteLength;\n for (var i = 0; i < len; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return window.btoa(binary);\n}\n\nexport function dataUrltoBlob(\n dataurl:string,\n name:string,\n origSize?:any\n):Blob{\n var arr = dataurl.split(',');\n var mimeMatch = arr[0].match(/:(.*?);/)\n var mime:string = mimeMatch ? mimeMatch[1] : 'text/plain'\n var bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);\n while (n--) {\n u8arr[n] = bstr.charCodeAt(n);\n }\n var blob = new window.Blob([u8arr], {type: mime});\n blob[\"name\"] = name;\n blob[\"$ngfOrigSize\"] = origSize;\n return blob;\n}\n\nexport interface orientationMeta{\n orientation: number\n fixedArrayBuffer?:any[]\n}\n\nexport function applyTransform(\n ctx:CanvasRenderingContext2D,\n orientation:number,\n width:number,\n height:number\n) {\n switch (orientation) {\n case 2:\n return ctx.transform(-1, 0, 0, 1, width, 0);\n case 3:\n return ctx.transform(-1, 0, 0, -1, width, height);\n case 4:\n return ctx.transform(1, 0, 0, -1, 0, height);\n case 5:\n return ctx.transform(0, 1, 1, 0, 0, 0);\n case 6:\n return ctx.transform(0, 1, -1, 0, height, 0);\n case 7:\n return ctx.transform(0, -1, -1, 0, height, width);\n case 8:\n return ctx.transform(0, -1, 1, 0, 0, width);\n }\n}\n\nexport function fixFileOrientationByMeta(\n file:File, result:orientationMeta\n):Promise{\n return dataUrl(file, true)\n .then(url=>{\n var canvas = document.createElement('canvas');\n var img = document.createElement('img');\n\n return >new Promise(function(res,rej){\n img.onload = function () {\n try {\n canvas.width = result.orientation > 4 ? img.height : img.width\n canvas.height = result.orientation > 4 ? img.width : img.height\n var ctx = canvas.getContext('2d')\n applyTransform(ctx, result.orientation, img.width, img.height)\n ctx.drawImage(img, 0, 0);\n var dataUrl = canvas.toDataURL(file.type || 'image/WebP', 0.934)\n const base = arrayBufferToBase64(result.fixedArrayBuffer)\n dataUrl = restoreExif(base, dataUrl)\n var blob = dataUrltoBlob(dataUrl, file.name)\n const newFile = blobToFile(blob, file.name);\n res(newFile);\n } catch (e) {\n rej(e)\n }\n };\n img.onerror = rej;\n img.src = url; \n })\n })\n}\n\nexport function applyExifRotation(\n file:File\n):Promise{\n if (file.type.indexOf('image/jpeg') !== 0) {\n return Promise.resolve(file);\n }\n\n return readOrientation(file)\n .then((result:orientationMeta)=>{\n if (result.orientation < 2 || result.orientation > 8) {\n return file\n }\n \n return fixFileOrientationByMeta(file,result)\n })\n}\n\nexport function readOrientation(\n file:File\n):Promise{\n return new Promise((res,rej)=>{\n var reader = new FileReader();\n var slicedFile = file.slice ? file.slice(0, 64 * 1024) : file;\n reader.readAsArrayBuffer(slicedFile);\n reader.onerror = rej\n reader.onload = function (e:any) {\n var result:orientationMeta = {orientation: 1};\n var view = new DataView( this.result );\n if (view.getUint16(0, false) !== 0xFFD8) return res(result);\n\n var length = view.byteLength,\n offset = 2;\n while (offset < length) {\n var marker = view.getUint16(offset, false);\n offset += 2;\n if (marker === 0xFFE1) {\n if (view.getUint32(offset += 2, false) !== 0x45786966) return res(result);\n\n var little = view.getUint16(offset += 6, false) === 0x4949;\n offset += view.getUint32(offset + 4, little);\n var tags = view.getUint16(offset, little);\n offset += 2;\n for (var i = 0; i < tags; i++)\n if (view.getUint16(offset + (i * 12), little) === 0x0112) {\n var orientation = view.getUint16(offset + (i * 12) + 8, little);\n if (orientation >= 2 && orientation <= 8) {\n view.setUint16(offset + (i * 12) + 8, 1, little);\n result.fixedArrayBuffer = e.target.result;\n }\n result.orientation = orientation;\n return res(result);\n }\n } else if ((marker & 0xFF00) !== 0xFF00) break;\n else offset += view.getUint16(offset, false);\n }\n return res(result);\n };\n })\n}\n\n/** converts file-input file into base64 dataUri */\nexport function dataUrl(\n file:any,\n disallowObjectUrl?:any\n):Promise{\n if (!file) return Promise.resolve(file)\n \n if ((disallowObjectUrl && file.$ngfDataUrl != null) || (!disallowObjectUrl && file.$ngfBlobUrl != null)) {\n return Promise.resolve( disallowObjectUrl ? file.$ngfDataUrl : file.$ngfBlobUrl )\n }\n\n var p = disallowObjectUrl ? file.$$ngfDataUrlPromise : file.$$ngfBlobUrlPromise;\n if (p) return p;\n\n const win = getWindow()\n let deferred:Promise\n if (win.FileReader && file &&\n (!win.FileAPI || navigator.userAgent.indexOf('MSIE 8') === -1 || file.size < 20000) &&\n (!win.FileAPI || navigator.userAgent.indexOf('MSIE 9') === -1 || file.size < 4000000)) {\n //prefer URL.createObjectURL for handling refrences to files of all sizes\n //since it doesn´t build a large string in memory\n var URL = win.URL || win.webkitURL;\n if (FileReader) {\n deferred = new Promise((res,rej)=>{\n var fileReader = new FileReader();\n fileReader.onload = function (event:any) {\n file.$ngfDataUrl = event.target.result;\n delete file.$ngfDataUrl;\n res( event.target.result )\n };\n fileReader.onerror = function (e) {\n file.$ngfDataUrl = '';\n rej(e)\n };\n fileReader.readAsDataURL(file);\n })\n } else {\n var url:any;\n try {\n url = URL.createObjectURL(file);\n } catch (e) {\n return Promise.reject(e);\n }\n \n deferred = Promise.resolve( url )\n file.$ngfBlobUrl = url;\n }\n } else {\n file[disallowObjectUrl ? '$ngfDataUrl' : '$ngfBlobUrl'] = '';\n return Promise.reject( new Error('Browser does not support window.FileReader, window.FileReader, or window.FileAPI') )//deferred.reject();\n }\n\n if (disallowObjectUrl) {\n p = file.$$ngfDataUrlPromise = deferred;\n } else {\n p = file.$$ngfBlobUrlPromise = deferred;\n }\n\n p = p.then((x:any)=>{\n delete file[disallowObjectUrl ? '$$ngfDataUrlPromise' : '$$ngfBlobUrlPromise'];\n return x\n })\n\n return p;\n}\n\nexport function restoreExif(orig:any, resized:any) {\n var ExifRestorer:any = {\n KEY_STR:'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='\n }\n\n ExifRestorer.encode64 = function (input:any) {\n var output = '',\n chr1, chr2, chr3:any = '',\n enc1, enc2, enc3, enc4:any = '',\n i = 0;\n\n do {\n chr1 = input[i++];\n chr2 = input[i++];\n chr3 = input[i++];\n\n enc1 = chr1 >> 2;\n enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);\n enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);\n enc4 = chr3 & 63;\n\n if (isNaN(chr2)) {\n enc3 = enc4 = 64;\n } else if (isNaN(chr3)) {\n enc4 = 64;\n }\n\n output = output +\n this.KEY_STR.charAt(enc1) +\n this.KEY_STR.charAt(enc2) +\n this.KEY_STR.charAt(enc3) +\n this.KEY_STR.charAt(enc4);\n chr1 = chr2 = chr3 = '';\n enc1 = enc2 = enc3 = enc4 = '';\n } while (i < input.length);\n\n return output;\n };\n\n ExifRestorer.restore = function (origFileBase64:any, resizedFileBase64:any) {\n if (origFileBase64.match('data:image/jpeg;base64,')) {\n origFileBase64 = origFileBase64.replace('data:image/jpeg;base64,', '');\n }\n\n var rawImage:number[] = this.decode64(origFileBase64);\n var segments = this.slice2Segments(rawImage);\n\n var image = this.exifManipulation(resizedFileBase64, segments);\n\n return 'data:image/jpeg;base64,' + this.encode64(image);\n };\n\n\n ExifRestorer.exifManipulation = function (resizedFileBase64:any, segments:any) {\n var exifArray = this.getExifArray(segments),\n newImageArray = this.insertExif(resizedFileBase64, exifArray);\n return new Uint8Array(newImageArray);\n };\n\n ExifRestorer.getExifArray = function (segments:number[][]) {\n var seg;\n for (var x = 0; x < segments.length; x++) {\n seg = segments[x];\n if (seg[0] === 255 && seg[1] === 225) //(ff e1)\n {\n return seg;\n }\n }\n return [];\n };\n\n\n ExifRestorer.insertExif = function (resizedFileBase64:any, exifArray:any) {\n var imageData = resizedFileBase64.replace('data:image/jpeg;base64,', ''),\n buf = this.decode64(imageData),\n separatePoint = buf.indexOf(255, 3),\n mae = buf.slice(0, separatePoint),\n ato = buf.slice(separatePoint),\n array = mae;\n\n array = array.concat(exifArray);\n array = array.concat(ato);\n return array;\n };\n\n\n ExifRestorer.slice2Segments = function(\n rawImageArray:number[]\n ) {\n var head:number = 0,\n segments:number[][] = [];\n\n while (1) {\n if (rawImageArray[head] === 255 && rawImageArray[head + 1] === 218) {\n break;\n }\n if (rawImageArray[head] === 255 && rawImageArray[head + 1] === 216) {\n head += 2;\n }\n else {\n var length = rawImageArray[head + 2] * 256 + rawImageArray[head + 3]\n var endPoint = head + length + 2\n var seg:number[] = rawImageArray.slice(head, endPoint)\n segments.push(seg);\n head = endPoint;\n }\n if (head > rawImageArray.length) {\n break;\n }\n }\n\n return segments;\n };\n\n\n ExifRestorer.decode64 = function (\n input:any\n ):number[]{\n var chr1, chr2, chr3:any = '',\n enc1, enc2, enc3, enc4:any = '',\n i = 0,\n buf:number[] = [];\n\n // remove all characters that are not A-Z, a-z, 0-9, +, /, or =\n var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n if (base64test.exec(input)) {\n console.log('There were invalid base64 characters in the input text.');\n }\n input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, '');\n\n do {\n enc1 = this.KEY_STR.indexOf(input.charAt(i++));\n enc2 = this.KEY_STR.indexOf(input.charAt(i++));\n enc3 = this.KEY_STR.indexOf(input.charAt(i++));\n enc4 = this.KEY_STR.indexOf(input.charAt(i++));\n\n chr1 = (enc1 << 2) | (enc2 >> 4);\n chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\n chr3 = ((enc3 & 3) << 6) | enc4;\n\n buf.push(chr1);\n\n if (enc3 !== 64) {\n buf.push(chr2);\n }\n if (enc4 !== 64) {\n buf.push(chr3);\n }\n\n chr1 = chr2 = chr3 = '';\n enc1 = enc2 = enc3 = enc4 = '';\n\n } while (i < input.length);\n\n return buf;\n };\n\n return ExifRestorer.restore(orig, resized); //<= EXIF\n};\n\nfunction blobToFile(theBlob: Blob, fileName:string): File {\n var b: any = theBlob;\n //A Blob() is almost a File() - it's just missing the two properties below which we will add\n b.lastModifiedDate = new Date();\n b.name = fileName;\n\n //Cast to a File() type\n return theBlob;\n}\n","import { Directive, EventEmitter, ElementRef, Input, Output, HostListener, ChangeDetectionStrategy } from '@angular/core';\nimport { createInvisibleFileInputWrap, isFileInput, detectSwipe } from \"./doc-event-help.functions\"\nimport {\n acceptType, InvalidFileItem,\n applyExifRotation, dataUrl\n} from \"./fileTools\"\n\nexport interface dragMeta{\n type:string\n kind:string\n}\n\n/** A master base set of logic intended to support file select/drag/drop operations\n NOTE: Use ngfDrop for full drag/drop. Use ngfSelect for selecting\n*/\n@Directive({\n selector: \"[ngf]\",\n exportAs:\"ngf\"\n})\nexport class ngf {\n fileElm:any\n filters:{name:string, fn:(file:File)=>boolean}[] = []\n lastFileCount:number=0\n\n @Input() multiple !:string\n @Input() accept !:string\n @Input() maxSize !:number\n //@Input() forceFilename:string\n //@Input() forcePostname:string\n @Input() ngfFixOrientation:boolean = true\n\n @Input() fileDropDisabled:boolean = false\n @Input() selectable: boolean | string = false\n @Output('init') directiveInit:EventEmitter = new EventEmitter()\n\n @Input() lastInvalids:InvalidFileItem[] = []\n @Output() lastInvalidsChange:EventEmitter<{file:File,type:string}[]> = new EventEmitter()\n\n @Input() lastBaseUrl !: string//base64 last file uploaded url\n @Output() lastBaseUrlChange:EventEmitter = new EventEmitter()\n\n @Input() file !: File//last file uploaded\n @Output() fileChange:EventEmitter = new EventEmitter()\n\n @Input() files:File[] = []\n @Output() filesChange:EventEmitter = new EventEmitter();\n\n @Input() capturePaste: boolean; // window paste file watching (empty string turns on)\n pasteCapturer !: (e: Event) => void;\n\n constructor(public element:ElementRef){\n this.initFilters()\n }\n\n initFilters(){\n // the order is important\n this.filters.push({name: 'accept', fn: this._acceptFilter})\n this.filters.push({name: 'fileSize', fn: this._fileSizeFilter})\n\n //this.filters.push({name: 'fileType', fn: this._fileTypeFilter})\n //this.filters.push({name: 'queueLimit', fn: this._queueLimitFilter})\n //this.filters.push({name: 'mimeType', fn: this._mimeTypeFilter})\n }\n\n ngOnDestroy(){\n delete this.fileElm//faster memory release of dom element\n this.destroyPasteListener();\n }\n\n ngOnInit(){\n const selectable = (this.selectable || this.selectable==='') && !['false', 'null', '0'].includes(this.selectable as string);\n if( selectable ){\n this.enableSelecting()\n }\n\n if( this.multiple ){\n this.paramFileElm().setAttribute('multiple', this.multiple)\n }\n\n this.evalCapturePaste();\n\n //create reference to this class with one cycle delay to avoid ExpressionChangedAfterItHasBeenCheckedError\n setTimeout(()=>{\n this.directiveInit.emit(this)\n }, 0)\n }\n\n ngOnChanges( changes ){\n if( changes.accept ){\n this.paramFileElm().setAttribute('accept', changes.accept.currentValue || '*')\n }\n\n if (changes.capturePaste) {\n this.evalCapturePaste();\n }\n }\n\n evalCapturePaste() {\n const isActive = this.capturePaste || (this.capturePaste as any)==='' || ['false', '0', 'null'].includes(this.capturePaste as any);\n\n if (isActive) {\n if (this.pasteCapturer) {\n return; // already listening\n }\n\n this.pasteCapturer = (e: Event) => {\n const clip = (e as any).clipboardData;\n if (clip && clip.files && clip.files.length) {\n this.handleFiles(clip.files);\n e.preventDefault();\n }\n }\n\n window.addEventListener('paste', this.pasteCapturer);\n\n return;\n }\n\n this.destroyPasteListener();\n }\n\n destroyPasteListener() {\n if (this.pasteCapturer) {\n window.removeEventListener('paste', this.pasteCapturer);\n delete this.pasteCapturer;\n }\n }\n\n paramFileElm(){\n if( this.fileElm )return this.fileElm//already defined\n\n //elm is a file input\n const isFile = isFileInput( this.element.nativeElement )\n if(isFile)return this.fileElm = this.element.nativeElement\n\n //create foo file input\n const label = createInvisibleFileInputWrap()\n this.fileElm = label.getElementsByTagName('input')[0]\n this.fileElm.addEventListener('change', this.changeFn.bind(this));\n this.element.nativeElement.appendChild( label )\n return this.fileElm\n }\n\n enableSelecting(){\n let elm = this.element.nativeElement\n\n if( isFileInput(elm) ){\n const bindedHandler = _ev=>this.beforeSelect()\n elm.addEventListener('click', bindedHandler)\n elm.addEventListener('touchstart', bindedHandler)\n return\n }\n\n const bindedHandler = ev=>this.clickHandler(ev)\n elm.addEventListener('click', bindedHandler)\n elm.addEventListener('touchstart', bindedHandler)\n elm.addEventListener('touchend', bindedHandler)\n }\n\n getValidFiles( files:File[] ):File[]{\n const rtn:File[] = []\n for(let x=files.length-1; x >= 0; --x){\n if( this.isFileValid(files[x]) ){\n rtn.push( files[x] )\n }\n }\n return rtn\n }\n\n getInvalidFiles(files:File[]):InvalidFileItem[]{\n const rtn:InvalidFileItem[] = []\n for(let x=files.length-1; x >= 0; --x){\n let failReason = this.getFileFilterFailName(files[x])\n if( failReason ){\n rtn.push({\n file : files[x],\n type : failReason\n })\n }\n }\n return rtn\n }\n\n // Primary handler of files coming in\n handleFiles(files:File[]){\n const valids = this.getValidFiles(files)\n\n if(files.length!=valids.length){\n this.lastInvalids = this.getInvalidFiles(files)\n }else{\n delete this.lastInvalids\n }\n\n this.lastInvalidsChange.emit(this.lastInvalids)\n\n if( valids.length ){\n if( this.ngfFixOrientation ){\n this.applyExifRotations(valids)\n .then( fixedFiles=>this.que(fixedFiles) )\n }else{\n this.que(valids)\n }\n }\n\n if (this.isEmptyAfterSelection()) {\n this.element.nativeElement.value = ''\n }\n }\n\n que( files:File[] ){\n this.files = this.files || []\n Array.prototype.push.apply(this.files, files)\n\n //below break memory ref and doesnt act like a que\n //this.files = files//causes memory change which triggers bindings like \n\n this.filesChange.emit( this.files )\n\n if(files.length){\n this.fileChange.emit( this.file=files[0] )\n\n if(this.lastBaseUrlChange.observers.length){\n dataUrl( files[0] )\n .then( url=>this.lastBaseUrlChange.emit(url) )\n }\n }\n\n //will be checked for input value clearing\n this.lastFileCount = this.files.length\n }\n\n /** called when input has files */\n changeFn(event:any) {\n var fileList = event.__files_ || (event.target && event.target.files)\n\n if (!fileList) return;\n\n this.stopEvent(event);\n this.handleFiles(fileList)\n }\n\n clickHandler(evt:any){\n const elm = this.element.nativeElement\n if (elm.getAttribute('disabled') || this.fileDropDisabled){\n return false;\n }\n\n var r = detectSwipe(evt);\n // prevent the click if it is a swipe\n if ( r!==false ) return r;\n\n const fileElm = this.paramFileElm()\n fileElm.click()\n //fileElm.dispatchEvent( new Event('click') );\n this.beforeSelect()\n\n return false;\n }\n\n beforeSelect(){\n if( this.files && this.lastFileCount===this.files.length )return\n\n //if no files in array, be sure browser doesnt prevent reselect of same file (see github issue 27)\n this.fileElm.value = null\n }\n\n isEmptyAfterSelection():boolean {\n return !!this.element.nativeElement.attributes.multiple;\n }\n\n eventToTransfer(event:any):any {\n if(event.dataTransfer)return event.dataTransfer\n return event.originalEvent ? event.originalEvent.dataTransfer : null\n }\n\n stopEvent(event:any):any {\n event.preventDefault();\n event.stopPropagation();\n }\n\n transferHasFiles(transfer:any):any {\n if (!transfer.types) {\n return false;\n }\n\n if (transfer.types.indexOf) {\n return transfer.types.indexOf('Files') !== -1;\n } else if (transfer.types.contains) {\n return transfer.types.contains('Files');\n } else {\n return false;\n }\n }\n\n eventToFiles(event:Event){\n const transfer = this.eventToTransfer(event);\n if( transfer ){\n if(transfer.files && transfer.files.length){\n return transfer.files\n }\n if(transfer.items && transfer.items.length){\n return transfer.items\n }\n }\n return []\n }\n\n applyExifRotations(\n files:File[]\n ):Promise{\n const mapper = (\n file:File,index:number\n ):Promise=>{\n return applyExifRotation(file)\n .then( fixedFile=>files.splice(index, 1, fixedFile) )\n }\n\n const proms:Promise[] = []\n for(let x=files.length-1; x >= 0; --x){\n proms[x] = mapper( files[x], x )\n }\n return Promise.all( proms ).then( ()=>files )\n }\n\n @HostListener('change', ['$event'])\n onChange(event:Event):void {\n let files = this.element.nativeElement.files || this.eventToFiles(event)\n\n if(!files.length)return\n\n this.stopEvent(event);\n this.handleFiles(files)\n }\n\n getFileFilterFailName(\n file:File\n ):string | undefined{\n for(let i = 0; i < this.filters.length; i++){\n if( !this.filters[i].fn.call(this, file) ){\n return this.filters[i].name\n }\n }\n return undefined\n }\n\n isFileValid(file:File):boolean{\n const noFilters = !this.accept && (!this.filters || !this.filters.length)\n if( noFilters ){\n return true//we have no filters so all files are valid\n }\n\n return this.getFileFilterFailName(file) ? false : true\n }\n\n isFilesValid(files:File[]){\n for(let x=files.length-1; x >= 0; --x){\n if( !this.isFileValid(files[x]) ){\n return false\n }\n }\n return true\n }\n\n protected _acceptFilter(item:File):boolean {\n return acceptType(this.accept, item.type, item.name)\n }\n\n protected _fileSizeFilter(item:File):boolean {\n return !(this.maxSize && item.size > this.maxSize);\n }\n\n /** browsers try hard to conceal data about file drags, this tends to undo that */\n filesToWriteableObject( files:File[] ):dragMeta[]{\n const jsonFiles:dragMeta[] = []\n for(let x=0; x < files.length; ++x){\n jsonFiles.push({\n type:files[x].type,\n kind:files[x][\"kind\"]\n })\n }\n return jsonFiles\n }\n}\n","import { Directive, Input } from \"@angular/core\"\nimport { ngf } from \"./ngf.directive\"\n\n@Directive({\n selector: \"[ngfSelect]\",\n exportAs: \"ngfSelect\"\n})\nexport class ngfSelect extends ngf {\n @Input() selectable:any = true\n}","import {\n Directive, EventEmitter,\n HostListener, Input, Output\n} from '@angular/core';\nimport { ngf, dragMeta } from \"./ngf.directive\"\n\n@Directive({\n selector: \"[ngfDrop]\",\n exportAs: \"ngfDrop\"\n})\nexport class ngfDrop extends ngf {\n @Output() fileOver:EventEmitter = new EventEmitter();\n\n @Input() validDrag:boolean = false\n @Output() validDragChange:EventEmitter = new EventEmitter()\n\n @Input() invalidDrag = false\n @Output() invalidDragChange:EventEmitter = new EventEmitter()\n\n @Input() dragFiles !: dragMeta[]\n @Output() dragFilesChange:EventEmitter = new EventEmitter()\n\n @HostListener('drop', ['$event'])\n onDrop(event:Event):void {\n if(this.fileDropDisabled){\n this.stopEvent(event);\n return\n }\n\n this.closeDrags()\n let files = this.eventToFiles(event)\n\n if(!files.length)return\n\n this.stopEvent(event);\n this.handleFiles(files)\n }\n\n handleFiles(files:File[]){\n this.fileOver.emit(false)//turn-off dragover\n super.handleFiles(files)\n }\n\n @HostListener('dragover', ['$event'])\n onDragOver(event:Event):void {\n if(this.fileDropDisabled){\n this.stopEvent(event);\n return\n }\n\n const transfer = this.eventToTransfer(event)\n\n let files = this.eventToFiles(event)\n\n let jsonFiles = this.filesToWriteableObject(files)\n this.dragFilesChange.emit( this.dragFiles=jsonFiles )\n\n if( files.length ){\n this.validDrag = this.isFilesValid(files)\n }else{\n //Safari, IE11 & some browsers do NOT tell you about dragged files until dropped. Always consider a valid drag\n this.validDrag = true\n }\n\n this.validDragChange.emit(this.validDrag)\n\n this.invalidDrag = !this.validDrag\n this.invalidDragChange.emit(this.invalidDrag)\n\n transfer.dropEffect = 'copy'//change cursor and such\n this.stopEvent(event)\n this.fileOver.emit(true)\n }\n\n closeDrags(){\n delete this.validDrag\n this.validDragChange.emit(this.validDrag)\n this.invalidDrag = false\n this.invalidDragChange.emit(this.invalidDrag)\n delete this.dragFiles\n this.dragFilesChange.emit( this.dragFiles )\n }\n\n @HostListener('dragleave', ['$event'])\n onDragLeave(event:Event):any {\n if(this.fileDropDisabled){\n this.stopEvent(event);\n return\n }\n \n this.closeDrags()\n\n if ((this as any).element) {\n if (event.currentTarget === (this as any).element[0]) {\n return;\n }\n }\n\n this.stopEvent(event);\n this.fileOver.emit(false);\n }\n}","import { Directive, ElementRef, Input } from '@angular/core';\nimport { dataUrl } from './fileTools';\n\n@Directive({selector: '[ngfBackground]'})\nexport class ngfBackground {\n @Input('ngfBackground') file:any\n\n constructor(public ElementRef:ElementRef){}\n\n ngOnChanges( _changes:any ){\n dataUrl(this.file)\n .then(src=>{\n const urlString = 'url(\\'' + (src || '') + '\\')'\n this.ElementRef.nativeElement.style.backgroundImage = urlString\n })\n }\n}\n","import { Directive, EventEmitter, Output, Input } from '@angular/core';\n\n@Directive({selector: 'ngfUploadStatus'})\nexport class ngfUploadStatus {\n @Input() percent:number = 0\n @Output() percentChange:EventEmitter = new EventEmitter()\n @Input() httpEvent !: Event\n\n ngOnChanges( changes ){\n if( changes.httpEvent && changes.httpEvent.currentValue ){\n const event = changes.httpEvent.currentValue\n if (event.loaded && event.total) {\n setTimeout(()=>{\n this.percent = Math.round(100 * event.loaded / event.total);\n this.percentChange.emit( this.percent )\n }, 0)\n }\n }\n }\n}","import {\n IterableDiffer,\n IterableDiffers,\n Directive, EventEmitter,\n Output, Input\n} from '@angular/core';\n\n@Directive({selector: 'ngfFormData'})\nexport class ngfFormData {\n @Input() files !: File[]\n @Input() postName:string = \"file\"\n @Input() fileName !: string//force file name\n\n @Input() FormData:FormData = new FormData()\n @Output() FormDataChange:EventEmitter = new EventEmitter()\n\n differ:IterableDiffer<{}>\n\n constructor(IterableDiffers: IterableDiffers){\n this.differ = IterableDiffers.find([]).create()\n }\n\n ngDoCheck(){\n var changes = this.differ.diff( this.files );\n\n if (changes) {\n setTimeout(()=>this.buildFormData(), 0)\n }\n }\n\n buildFormData(){\n const isArray = typeof(this.files)==='object' && this.files.constructor===Array\n\n if( isArray ){\n this.FormData = new FormData()\n const files = this.files || []\n files.forEach(file=>\n this.FormData.append(this.postName, file, this.fileName||file.name)\n )\n this.FormDataChange.emit( this.FormData )\n }else{\n delete this.FormData\n }\n }\n}","import { Directive, ElementRef, Input } from '@angular/core';\nimport { dataUrl } from './fileTools';\n\n@Directive({ selector: '[ngfSrc]' })\nexport class ngfSrc {\n @Input('ngfSrc') file: any\n\n constructor(public ElementRef: ElementRef) { }\n\n ngOnChanges(_changes: any) {\n dataUrl(this.file)\n .then(src=>\n this.ElementRef.nativeElement.src = src\n )\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { ngfBackground } from './ngfBackground.directive';\nimport { ngfDrop } from './ngfDrop.directive';\nimport { ngf } from './ngf.directive';\nimport { ngfSelect } from './ngfSelect.directive';\nimport { ngfUploadStatus } from './ngfUploadStatus.directive';\nimport { ngfFormData } from './ngfFormData.directive';\nimport { ngfSrc } from './ngfSrc.directive';\n//import{ HttpModule } from '@angular/http';\n\nconst declarations = [\n ngfDrop,\n ngfSelect,\n ngfBackground,\n ngfSrc,\n ngfUploadStatus,\n ngfFormData,\n ngf\n]\n\n@NgModule({\n imports: [\n CommonModule\n //,HttpModule\n ],\n declarations: declarations,\n exports: declarations//[HttpModule, ...declarations]\n}) export class ngfModule {}","/*\n * Public API Surface of angular-file\n */\n\nexport * from './file-upload/ngfSelect.directive';\nexport * from './file-upload/ngfDrop.directive';\nexport * from './file-upload/ngf.directive';\nexport * from './file-upload/ngf.module';\nexport { ngfBackground } from './file-upload/ngfBackground.directive';\nexport { ngfSrc } from './file-upload/ngfSrc.directive';\nexport { ngfUploadStatus } from './file-upload/ngfUploadStatus.directive';\nexport { ngfFormData } from './file-upload/ngfFormData.directive';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["EventEmitter","Directive","ElementRef","Input","Output","HostListener","IterableDiffers","NgModule","CommonModule"],"mappings":"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"} \ No newline at end of file diff --git a/dist/bundles/angular-file.umd.min.js b/dist/bundles/angular-file.umd.min.js index fc2ce038..795527cb 100644 --- a/dist/bundles/angular-file.umd.min.js +++ b/dist/bundles/angular-file.umd.min.js @@ -12,5 +12,5 @@ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - ***************************************************************************** */var i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)};function r(e,t){function n(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}function a(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var i,r,a=n.call(e),s=[];try{for(;(void 0===t||t-- >0)&&!(i=a.next()).done;)s.push(i.value)}catch(e){r={error:e}}finally{try{i&&!i.done&&(n=a.return)&&n.call(a)}finally{if(r)throw r.error}}return s}function s(){for(var e=[],t=0;t4?r.height:r.width,i.height=t.orientation>4?r.width:r.height;var n=i.getContext("2d");!function(e,t,n,i){switch(t){case 2:return e.transform(-1,0,0,1,n,0);case 3:return e.transform(-1,0,0,-1,n,i);case 4:return e.transform(1,0,0,-1,0,i);case 5:return e.transform(0,1,1,0,0,0);case 6:return e.transform(0,1,-1,0,i,0);case 7:return e.transform(0,-1,-1,0,i,n);case 8:e.transform(0,-1,1,0,0,n)}}(n,t.orientation,r.width,r.height),n.drawImage(r,0,0);var o=i.toDataURL(e.type||"image/WebP",.934),l=function(e){for(var t="",n=new Uint8Array(e),i=n.byteLength,r=0;r>2,r=(3&t)<<4|(n=e[u++])>>4,a=(15&n)<<2|(o=e[u++])>>6,l=63&o,isNaN(n)?a=l=64:isNaN(o)&&(l=64),s=s+this.KEY_STR.charAt(i)+this.KEY_STR.charAt(r)+this.KEY_STR.charAt(a)+this.KEY_STR.charAt(l),t=n=o="",i=r=a=l=""}while(ue.length)break}return n},decode64:function(e){var t,n,i,r,a="",s="",o=0,l=[];/[^A-Za-z0-9\+\/\=]/g.exec(e)&&console.log("There were invalid base64 characters in the input text."),e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{t=this.KEY_STR.indexOf(e.charAt(o++))<<2|(i=this.KEY_STR.indexOf(e.charAt(o++)))>>4,n=(15&i)<<4|(r=this.KEY_STR.indexOf(e.charAt(o++)))>>2,a=(3&r)<<6|(s=this.KEY_STR.indexOf(e.charAt(o++))),l.push(t),64!==r&&l.push(n),64!==s&&l.push(a),t=n=a="",i=r=s=""}while(o=2&&f<=8&&(i.setUint16(a+12*u+8,1,o),n.fixedArrayBuffer=e.target.result),n.orientation=f,t(n)}}else{if(65280!=(65280&s))break;a+=i.getUint16(a,!1)}}return t(n)}}))}(e).then((function(t){return t.orientation<2||t.orientation>8?e:p(e,t)}))}function c(e,t){if(!e)return Promise.resolve(e);if(t&&null!=e.$ngfDataUrl||!t&&null!=e.$ngfBlobUrl)return Promise.resolve(t?e.$ngfDataUrl:e.$ngfBlobUrl);var n=t?e.$$ngfDataUrlPromise:e.$$ngfBlobUrlPromise;if(n)return n;var i,r=window;if(!r.FileReader||!e||r.FileAPI&&-1!==navigator.userAgent.indexOf("MSIE 8")&&!(e.size<2e4)||r.FileAPI&&-1!==navigator.userAgent.indexOf("MSIE 9")&&!(e.size<4e6))return e[t?"$ngfDataUrl":"$ngfBlobUrl"]="",Promise.reject(new Error("Browser does not support window.FileReader, window.FileReader, or window.FileAPI"));var a=r.URL||r.webkitURL;if(FileReader)i=new Promise((function(t,n){var i=new FileReader;i.onload=function(n){e.$ngfDataUrl=n.target.result,delete e.$ngfDataUrl,t(n.target.result)},i.onerror=function(t){e.$ngfDataUrl="",n(t)},i.readAsDataURL(e)}));else{var s;try{s=a.createObjectURL(e)}catch(e){return Promise.reject(e)}i=Promise.resolve(s),e.$ngfBlobUrl=s}return n=(n=t?e.$$ngfDataUrlPromise=i:e.$$ngfBlobUrlPromise=i).then((function(n){return delete e[t?"$$ngfDataUrlPromise":"$$ngfBlobUrlPromise"],n}))}var g=function(){function e(e){this.element=e,this.filters=[],this.lastFileCount=0,this.ngfFixOrientation=!0,this.fileDropDisabled=!1,this.selectable=!1,this.directiveInit=new t.EventEmitter,this.lastInvalids=[],this.lastInvalidsChange=new t.EventEmitter,this.lastBaseUrlChange=new t.EventEmitter,this.fileChange=new t.EventEmitter,this.files=[],this.filesChange=new t.EventEmitter,this.initFilters()}return e.prototype.initFilters=function(){this.filters.push({name:"accept",fn:this._acceptFilter}),this.filters.push({name:"fileSize",fn:this._fileSizeFilter})},e.prototype.ngOnDestroy=function(){delete this.fileElm,this.destroyPasteListener()},e.prototype.ngOnInit=function(){var e=this;(this.selectable||""===this.selectable)&&!["false","null","0"].includes(this.selectable)&&this.enableSelecting(),this.multiple&&this.paramFileElm().setAttribute("multiple",this.multiple),this.evalCapturePaste(),setTimeout((function(){e.directiveInit.emit(e)}),0)},e.prototype.ngOnChanges=function(e){e.accept&&this.paramFileElm().setAttribute("accept",e.accept.currentValue||"*"),e.capturePaste&&this.evalCapturePaste()},e.prototype.evalCapturePaste=function(){var e=this;if(this.capturePaste||""===this.capturePaste||["false","0","null"].includes(this.capturePaste)){if(this.pasteCapturer)return;return this.pasteCapturer=function(t){var n=t.clipboardData;n&&n.files&&n.files.length&&(e.handleFiles(n.files),t.preventDefault())},void window.addEventListener("paste",this.pasteCapturer)}this.destroyPasteListener()},e.prototype.destroyPasteListener=function(){this.pasteCapturer&&(window.removeEventListener("paste",this.pasteCapturer),delete this.pasteCapturer)},e.prototype.paramFileElm=function(){if(this.fileElm)return this.fileElm;if(o(this.element.nativeElement))return this.fileElm=this.element.nativeElement;var e=function(){var e=f(),t=document.createElement("label");return t.innerHTML="upload",t.style.visibility="hidden",t.style.position="absolute",t.style.overflow="hidden",t.style.width="0px",t.style.height="0px",t.style.border="none",t.style.margin="0px",t.style.padding="0px",t.setAttribute("tabindex","-1"),t.appendChild(e),t}();return this.fileElm=e.getElementsByTagName("input")[0],this.fileElm.addEventListener("change",this.changeFn.bind(this)),this.element.nativeElement.appendChild(e),this.fileElm},e.prototype.enableSelecting=function(){var e=this,t=this.element.nativeElement;if(o(t)){var n=function(t){return e.beforeSelect()};return t.addEventListener("click",n),void t.addEventListener("touchstart",n)}var i=function(t){return e.clickHandler(t)};t.addEventListener("click",i),t.addEventListener("touchstart",i),t.addEventListener("touchend",i)},e.prototype.getValidFiles=function(e){for(var t=[],n=e.length-1;n>=0;--n)this.isFileValid(e[n])&&t.push(e[n]);return t},e.prototype.getInvalidFiles=function(e){for(var t=[],n=e.length-1;n>=0;--n){var i=this.getFileFilterFailName(e[n]);i&&t.push({file:e[n],type:i})}return t},e.prototype.handleFiles=function(e){var t=this,n=this.getValidFiles(e);e.length!=n.length?this.lastInvalids=this.getInvalidFiles(e):delete this.lastInvalids,this.lastInvalidsChange.emit(this.lastInvalids),n.length&&(this.ngfFixOrientation?this.applyExifRotations(n).then((function(e){return t.que(e)})):this.que(n)),this.isEmptyAfterSelection()&&(this.element.nativeElement.value="")},e.prototype.que=function(e){var t=this;this.files=this.files||[],Array.prototype.push.apply(this.files,e),this.filesChange.emit(this.files),e.length&&(this.fileChange.emit(this.file=e[0]),this.lastBaseUrlChange.observers.length&&c(e[0]).then((function(e){return t.lastBaseUrlChange.emit(e)}))),this.lastFileCount=this.files.length},e.prototype.changeFn=function(e){var t=e.__files_||e.target&&e.target.files;t&&(this.stopEvent(e),this.handleFiles(t))},e.prototype.clickHandler=function(e){if(this.element.nativeElement.getAttribute("disabled")||this.fileDropDisabled)return!1;var t=function(e){var t=e.changedTouches||e.originalEvent&&e.originalEvent.changedTouches;if(t){if("touchstart"===e.type)return u=t[0].clientX,l=t[0].clientY,!0;if("touchend"===e.type){var n=t[0].clientX,i=t[0].clientY;if(Math.abs(n-u)>20||Math.abs(i-l)>20)return e.stopPropagation(),e.cancelable&&e.preventDefault(),!1}return!0}return!1}(e);return!1!==t?t:(this.paramFileElm().click(),this.beforeSelect(),!1)},e.prototype.beforeSelect=function(){this.files&&this.lastFileCount===this.files.length||(this.fileElm.value=null)},e.prototype.isEmptyAfterSelection=function(){return!!this.element.nativeElement.attributes.multiple},e.prototype.eventToTransfer=function(e){return e.dataTransfer?e.dataTransfer:e.originalEvent?e.originalEvent.dataTransfer:null},e.prototype.stopEvent=function(e){e.preventDefault(),e.stopPropagation()},e.prototype.transferHasFiles=function(e){return!!e.types&&(e.types.indexOf?-1!==e.types.indexOf("Files"):!!e.types.contains&&e.types.contains("Files"))},e.prototype.eventToFiles=function(e){var t=this.eventToTransfer(e);if(t){if(t.files&&t.files.length)return t.files;if(t.items&&t.items.length)return t.items}return[]},e.prototype.applyExifRotations=function(e){for(var t=function(t,n){return h(t).then((function(t){return e.splice(n,1,t)}))},n=[],i=e.length-1;i>=0;--i)n[i]=t(e[i],i);return Promise.all(n).then((function(){return e}))},e.prototype.onChange=function(e){var t=this.element.nativeElement.files||this.eventToFiles(e);t.length&&(this.stopEvent(e),this.handleFiles(t))},e.prototype.getFileFilterFailName=function(e){for(var t=0;t=0;--t)if(!this.isFileValid(e[t]))return!1;return!0},e.prototype._acceptFilter=function(e){return function(e,t,n){if(!e)return!0;for(var i,r,a=e.split(","),s=a.length-1;s>=0;--s){if(r=(r=(r=a[s]).replace(/(^\s+|\s+$)/g,"")).replace(/\*/g,".*"),i=new RegExp(r,"gi"),t.search(i)>=0)return!0;if("."==r.substring(0,1)&&(r="\\"+r,i=new RegExp(r+"$","i"),(n||t).search(i)>=0))return!0}return!1}(this.accept,e.type,e.name)},e.prototype._fileSizeFilter=function(e){return!(this.maxSize&&e.size>this.maxSize)},e.prototype.filesToWriteableObject=function(e){for(var t=[],n=0;n0)&&!(i=a.next()).done;)s.push(i.value)}catch(e){r={error:e}}finally{try{i&&!i.done&&(n=a.return)&&n.call(a)}finally{if(r)throw r.error}}return s}function s(){for(var e=[],t=0;t4?r.height:r.width,i.height=t.orientation>4?r.width:r.height;var n=i.getContext("2d");!function(e,t,n,i){switch(t){case 2:return e.transform(-1,0,0,1,n,0);case 3:return e.transform(-1,0,0,-1,n,i);case 4:return e.transform(1,0,0,-1,0,i);case 5:return e.transform(0,1,1,0,0,0);case 6:return e.transform(0,1,-1,0,i,0);case 7:return e.transform(0,-1,-1,0,i,n);case 8:e.transform(0,-1,1,0,0,n)}}(n,t.orientation,r.width,r.height),n.drawImage(r,0,0);var o=i.toDataURL(e.type||"image/WebP",.934),l=function(e){for(var t="",n=new Uint8Array(e),i=n.byteLength,r=0;r>2,r=(3&t)<<4|(n=e[u++])>>4,a=(15&n)<<2|(o=e[u++])>>6,l=63&o,isNaN(n)?a=l=64:isNaN(o)&&(l=64),s=s+this.KEY_STR.charAt(i)+this.KEY_STR.charAt(r)+this.KEY_STR.charAt(a)+this.KEY_STR.charAt(l),t=n=o="",i=r=a=l=""}while(ue.length)break}return n},decode64:function(e){var t,n,i,r,a="",s="",o=0,l=[];/[^A-Za-z0-9\+\/\=]/g.exec(e)&&console.log("There were invalid base64 characters in the input text."),e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{t=this.KEY_STR.indexOf(e.charAt(o++))<<2|(i=this.KEY_STR.indexOf(e.charAt(o++)))>>4,n=(15&i)<<4|(r=this.KEY_STR.indexOf(e.charAt(o++)))>>2,a=(3&r)<<6|(s=this.KEY_STR.indexOf(e.charAt(o++))),l.push(t),64!==r&&l.push(n),64!==s&&l.push(a),t=n=a="",i=r=s=""}while(o=2&&f<=8&&(i.setUint16(a+12*u+8,1,o),n.fixedArrayBuffer=e.target.result),n.orientation=f,t(n)}}else{if(65280!=(65280&s))break;a+=i.getUint16(a,!1)}}return t(n)}}))}(e).then((function(t){return t.orientation<2||t.orientation>8?e:p(e,t)}))}function c(e,t){if(!e)return Promise.resolve(e);if(t&&null!=e.$ngfDataUrl||!t&&null!=e.$ngfBlobUrl)return Promise.resolve(t?e.$ngfDataUrl:e.$ngfBlobUrl);var n=t?e.$$ngfDataUrlPromise:e.$$ngfBlobUrlPromise;if(n)return n;var i,r=window;if(!r.FileReader||!e||r.FileAPI&&-1!==navigator.userAgent.indexOf("MSIE 8")&&!(e.size<2e4)||r.FileAPI&&-1!==navigator.userAgent.indexOf("MSIE 9")&&!(e.size<4e6))return e[t?"$ngfDataUrl":"$ngfBlobUrl"]="",Promise.reject(new Error("Browser does not support window.FileReader, window.FileReader, or window.FileAPI"));var a=r.URL||r.webkitURL;if(FileReader)i=new Promise((function(t,n){var i=new FileReader;i.onload=function(n){e.$ngfDataUrl=n.target.result,delete e.$ngfDataUrl,t(n.target.result)},i.onerror=function(t){e.$ngfDataUrl="",n(t)},i.readAsDataURL(e)}));else{var s;try{s=a.createObjectURL(e)}catch(e){return Promise.reject(e)}i=Promise.resolve(s),e.$ngfBlobUrl=s}return n=(n=t?e.$$ngfDataUrlPromise=i:e.$$ngfBlobUrlPromise=i).then((function(n){return delete e[t?"$$ngfDataUrlPromise":"$$ngfBlobUrlPromise"],n}))}var g=function(){function e(e){this.element=e,this.filters=[],this.lastFileCount=0,this.ngfFixOrientation=!0,this.fileDropDisabled=!1,this.selectable=!1,this.directiveInit=new t.EventEmitter,this.lastInvalids=[],this.lastInvalidsChange=new t.EventEmitter,this.lastBaseUrlChange=new t.EventEmitter,this.fileChange=new t.EventEmitter,this.files=[],this.filesChange=new t.EventEmitter,this.initFilters()}return e.prototype.initFilters=function(){this.filters.push({name:"accept",fn:this._acceptFilter}),this.filters.push({name:"fileSize",fn:this._fileSizeFilter})},e.prototype.ngOnDestroy=function(){delete this.fileElm,this.destroyPasteListener()},e.prototype.ngOnInit=function(){var e=this;(this.selectable||""===this.selectable)&&!["false","null","0"].includes(this.selectable)&&this.enableSelecting(),this.multiple&&this.paramFileElm().setAttribute("multiple",this.multiple),this.evalCapturePaste(),setTimeout((function(){e.directiveInit.emit(e)}),0)},e.prototype.ngOnChanges=function(e){e.accept&&this.paramFileElm().setAttribute("accept",e.accept.currentValue||"*"),e.capturePaste&&this.evalCapturePaste()},e.prototype.evalCapturePaste=function(){var e=this;if(this.capturePaste||""===this.capturePaste||["false","0","null"].includes(this.capturePaste)){if(this.pasteCapturer)return;return this.pasteCapturer=function(t){var n=t.clipboardData;n&&n.files&&n.files.length&&(e.handleFiles(n.files),t.preventDefault())},void window.addEventListener("paste",this.pasteCapturer)}this.destroyPasteListener()},e.prototype.destroyPasteListener=function(){this.pasteCapturer&&(window.removeEventListener("paste",this.pasteCapturer),delete this.pasteCapturer)},e.prototype.paramFileElm=function(){if(this.fileElm)return this.fileElm;if(o(this.element.nativeElement))return this.fileElm=this.element.nativeElement;var e=function(){var e=f(),t=document.createElement("label");return t.innerHTML="upload",t.style.visibility="hidden",t.style.position="absolute",t.style.overflow="hidden",t.style.width="0px",t.style.height="0px",t.style.border="none",t.style.margin="0px",t.style.padding="0px",t.setAttribute("tabindex","-1"),t.appendChild(e),t}();return this.fileElm=e.getElementsByTagName("input")[0],this.fileElm.addEventListener("change",this.changeFn.bind(this)),this.element.nativeElement.appendChild(e),this.fileElm},e.prototype.enableSelecting=function(){var e=this,t=this.element.nativeElement;if(o(t)){var n=function(t){return e.beforeSelect()};return t.addEventListener("click",n),void t.addEventListener("touchstart",n)}var i=function(t){return e.clickHandler(t)};t.addEventListener("click",i),t.addEventListener("touchstart",i),t.addEventListener("touchend",i)},e.prototype.getValidFiles=function(e){for(var t=[],n=e.length-1;n>=0;--n)this.isFileValid(e[n])&&t.push(e[n]);return t},e.prototype.getInvalidFiles=function(e){for(var t=[],n=e.length-1;n>=0;--n){var i=this.getFileFilterFailName(e[n]);i&&t.push({file:e[n],type:i})}return t},e.prototype.handleFiles=function(e){var t=this,n=this.getValidFiles(e);e.length!=n.length?this.lastInvalids=this.getInvalidFiles(e):delete this.lastInvalids,this.lastInvalidsChange.emit(this.lastInvalids),n.length&&(this.ngfFixOrientation?this.applyExifRotations(n).then((function(e){return t.que(e)})):this.que(n)),this.isEmptyAfterSelection()&&(this.element.nativeElement.value="")},e.prototype.que=function(e){var t=this;this.files=this.files||[],Array.prototype.push.apply(this.files,e),this.filesChange.emit(this.files),e.length&&(this.fileChange.emit(this.file=e[0]),this.lastBaseUrlChange.observers.length&&c(e[0]).then((function(e){return t.lastBaseUrlChange.emit(e)}))),this.lastFileCount=this.files.length},e.prototype.changeFn=function(e){var t=e.__files_||e.target&&e.target.files;t&&(this.stopEvent(e),this.handleFiles(t))},e.prototype.clickHandler=function(e){if(this.element.nativeElement.getAttribute("disabled")||this.fileDropDisabled)return!1;var t=function(e){var t=e.changedTouches||e.originalEvent&&e.originalEvent.changedTouches;if(t){if("touchstart"===e.type)return u=t[0].clientX,l=t[0].clientY,!0;if("touchend"===e.type){var n=t[0].clientX,i=t[0].clientY;if(Math.abs(n-u)>20||Math.abs(i-l)>20)return!0;e.stopPropagation(),e.cancelable&&e.preventDefault()}return!1}return!1}(e);return!1!==t?t:(this.paramFileElm().click(),this.beforeSelect(),!1)},e.prototype.beforeSelect=function(){this.files&&this.lastFileCount===this.files.length||(this.fileElm.value=null)},e.prototype.isEmptyAfterSelection=function(){return!!this.element.nativeElement.attributes.multiple},e.prototype.eventToTransfer=function(e){return e.dataTransfer?e.dataTransfer:e.originalEvent?e.originalEvent.dataTransfer:null},e.prototype.stopEvent=function(e){e.preventDefault(),e.stopPropagation()},e.prototype.transferHasFiles=function(e){return!!e.types&&(e.types.indexOf?-1!==e.types.indexOf("Files"):!!e.types.contains&&e.types.contains("Files"))},e.prototype.eventToFiles=function(e){var t=this.eventToTransfer(e);if(t){if(t.files&&t.files.length)return t.files;if(t.items&&t.items.length)return t.items}return[]},e.prototype.applyExifRotations=function(e){for(var t=function(t,n){return h(t).then((function(t){return e.splice(n,1,t)}))},n=[],i=e.length-1;i>=0;--i)n[i]=t(e[i],i);return Promise.all(n).then((function(){return e}))},e.prototype.onChange=function(e){var t=this.element.nativeElement.files||this.eventToFiles(e);t.length&&(this.stopEvent(e),this.handleFiles(t))},e.prototype.getFileFilterFailName=function(e){for(var t=0;t=0;--t)if(!this.isFileValid(e[t]))return!1;return!0},e.prototype._acceptFilter=function(e){return function(e,t,n){if(!e)return!0;for(var i,r,a=e.split(","),s=a.length-1;s>=0;--s){if(r=(r=(r=a[s]).replace(/(^\s+|\s+$)/g,"")).replace(/\*/g,".*"),i=new RegExp(r,"gi"),t.search(i)>=0)return!0;if("."==r.substring(0,1)&&(r="\\"+r,i=new RegExp(r+"$","i"),(n||t).search(i)>=0))return!0}return!1}(this.accept,e.type,e.name)},e.prototype._fileSizeFilter=function(e){return!(this.maxSize&&e.size>this.maxSize)},e.prototype.filesToWriteableObject=function(e){for(var t=[],n=0;n= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","export const isFileInput = function(elm:any){\n const ty = elm.getAttribute('type')\n return elm.tagName.toLowerCase() === 'input' && ty && ty.toLowerCase() === 'file';\n}\n\nlet initialTouchStartY = 0;\nlet initialTouchStartX = 0;\nexport const detectSwipe = function(evt:any):boolean {\n var touches = evt.changedTouches || (evt.originalEvent && evt.originalEvent.changedTouches);\n if (touches) {\n if (evt.type === 'touchstart') {\n initialTouchStartX = touches[0].clientX;\n initialTouchStartY = touches[0].clientY;\n return true; // don't block event default\n } else {\n // prevent scroll from triggering event\n if (evt.type === 'touchend') {\n var currentX = touches[0].clientX;\n var currentY = touches[0].clientY;\n if ((Math.abs(currentX - initialTouchStartX) > 20) ||\n (Math.abs(currentY - initialTouchStartY) > 20)) {\n evt.stopPropagation();\n if (evt.cancelable) {\n evt.preventDefault();\n }\n return false;\n }\n }\n return true;\n }\n }\n return false\n}\n\nexport const createInvisibleFileInputWrap = function() {\n var fileElem = createFileInput()\n var label = document.createElement('label');\n label.innerHTML = 'upload'\n label.style.visibility = 'hidden'\n label.style.position = 'absolute'\n label.style.overflow = 'hidden'\n label.style.width = '0px'\n label.style.height = '0px'\n label.style.border = 'none'\n label.style.margin = '0px'\n label.style.padding = '0px'\n label.setAttribute('tabindex','-1')\n \n //bindAttrToFileInput(fileElem, label);\n //generatedElems.push({el: elem, ref: label});\n\n label.appendChild( fileElem )\n //document.body.appendChild( label );\n\n return label;\n}\n\nexport const createFileInput = function() {\n var fileElem = document.createElement('input');\n fileElem.type=\"file\"\n return fileElem;\n}\n","export function getWindow():any{return window}\n\nexport function acceptType(accept:string, type:string, name?:string):boolean { \n if( !accept ){\n return true\n }\n\n const defs = accept.split(',')\n let regx:RegExp\n let acceptRegString:string\n\n for(let x=defs.length-1; x >= 0; --x){\n //Escapes dots in mimetype \n acceptRegString = defs[x]\n //trim\n acceptRegString = acceptRegString.replace(/(^\\s+|\\s+$)/g,'')\n //Escapes stars in mimetype \n acceptRegString = acceptRegString.replace(/\\*/g,'.*')\n //let acceptReg = '^((' + acceptRegString\n //acceptReg = acceptReg.replace(/,/g,')|(') + '))$'\n \n //try by mime\n regx = new RegExp(acceptRegString, 'gi')\n if( type.search(regx)>=0 ){\n return true\n }\n\n //try by ext\n if( acceptRegString.substring(0, 1)=='.' ){ \n acceptRegString = '\\\\'+ acceptRegString//.substring(1, acceptRegString.length-1)//remove dot at front\n regx = new RegExp(acceptRegString+'$', 'i')\n if( (name||type).search(regx)>=0 ){\n return true\n }\n }\n }\n return false\n}\n\nexport interface InvalidFileItem{\n file:File\n type:string\n}\n\nexport function arrayBufferToBase64(buffer:any) {\n var binary = '';\n var bytes = new Uint8Array(buffer);\n var len = bytes.byteLength;\n for (var i = 0; i < len; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return window.btoa(binary);\n}\n\nexport function dataUrltoBlob(\n dataurl:string,\n name:string,\n origSize?:any\n):Blob{\n var arr = dataurl.split(',');\n var mimeMatch = arr[0].match(/:(.*?);/)\n var mime:string = mimeMatch ? mimeMatch[1] : 'text/plain'\n var bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);\n while (n--) {\n u8arr[n] = bstr.charCodeAt(n);\n }\n var blob = new window.Blob([u8arr], {type: mime});\n blob[\"name\"] = name;\n blob[\"$ngfOrigSize\"] = origSize;\n return blob;\n}\n\nexport interface orientationMeta{\n orientation: number\n fixedArrayBuffer?:any[]\n}\n\nexport function applyTransform(\n ctx:CanvasRenderingContext2D,\n orientation:number,\n width:number,\n height:number\n) {\n switch (orientation) {\n case 2:\n return ctx.transform(-1, 0, 0, 1, width, 0);\n case 3:\n return ctx.transform(-1, 0, 0, -1, width, height);\n case 4:\n return ctx.transform(1, 0, 0, -1, 0, height);\n case 5:\n return ctx.transform(0, 1, 1, 0, 0, 0);\n case 6:\n return ctx.transform(0, 1, -1, 0, height, 0);\n case 7:\n return ctx.transform(0, -1, -1, 0, height, width);\n case 8:\n return ctx.transform(0, -1, 1, 0, 0, width);\n }\n}\n\nexport function fixFileOrientationByMeta(\n file:File, result:orientationMeta\n):Promise{\n return dataUrl(file, true)\n .then(url=>{\n var canvas = document.createElement('canvas');\n var img = document.createElement('img');\n\n return >new Promise(function(res,rej){\n img.onload = function () {\n try {\n canvas.width = result.orientation > 4 ? img.height : img.width\n canvas.height = result.orientation > 4 ? img.width : img.height\n var ctx = canvas.getContext('2d')\n applyTransform(ctx, result.orientation, img.width, img.height)\n ctx.drawImage(img, 0, 0);\n var dataUrl = canvas.toDataURL(file.type || 'image/WebP', 0.934)\n const base = arrayBufferToBase64(result.fixedArrayBuffer)\n dataUrl = restoreExif(base, dataUrl)\n var blob = dataUrltoBlob(dataUrl, file.name)\n const newFile = blobToFile(blob, file.name);\n res(newFile);\n } catch (e) {\n rej(e)\n }\n };\n img.onerror = rej;\n img.src = url; \n })\n })\n}\n\nexport function applyExifRotation(\n file:File\n):Promise{\n if (file.type.indexOf('image/jpeg') !== 0) {\n return Promise.resolve(file);\n }\n\n return readOrientation(file)\n .then((result:orientationMeta)=>{\n if (result.orientation < 2 || result.orientation > 8) {\n return file\n }\n \n return fixFileOrientationByMeta(file,result)\n })\n}\n\nexport function readOrientation(\n file:File\n):Promise{\n return new Promise((res,rej)=>{\n var reader = new FileReader();\n var slicedFile = file.slice ? file.slice(0, 64 * 1024) : file;\n reader.readAsArrayBuffer(slicedFile);\n reader.onerror = rej\n reader.onload = function (e:any) {\n var result:orientationMeta = {orientation: 1};\n var view = new DataView( this.result );\n if (view.getUint16(0, false) !== 0xFFD8) return res(result);\n\n var length = view.byteLength,\n offset = 2;\n while (offset < length) {\n var marker = view.getUint16(offset, false);\n offset += 2;\n if (marker === 0xFFE1) {\n if (view.getUint32(offset += 2, false) !== 0x45786966) return res(result);\n\n var little = view.getUint16(offset += 6, false) === 0x4949;\n offset += view.getUint32(offset + 4, little);\n var tags = view.getUint16(offset, little);\n offset += 2;\n for (var i = 0; i < tags; i++)\n if (view.getUint16(offset + (i * 12), little) === 0x0112) {\n var orientation = view.getUint16(offset + (i * 12) + 8, little);\n if (orientation >= 2 && orientation <= 8) {\n view.setUint16(offset + (i * 12) + 8, 1, little);\n result.fixedArrayBuffer = e.target.result;\n }\n result.orientation = orientation;\n return res(result);\n }\n } else if ((marker & 0xFF00) !== 0xFF00) break;\n else offset += view.getUint16(offset, false);\n }\n return res(result);\n };\n })\n}\n\n/** converts file-input file into base64 dataUri */\nexport function dataUrl(\n file:any,\n disallowObjectUrl?:any\n):Promise{\n if (!file) return Promise.resolve(file)\n \n if ((disallowObjectUrl && file.$ngfDataUrl != null) || (!disallowObjectUrl && file.$ngfBlobUrl != null)) {\n return Promise.resolve( disallowObjectUrl ? file.$ngfDataUrl : file.$ngfBlobUrl )\n }\n\n var p = disallowObjectUrl ? file.$$ngfDataUrlPromise : file.$$ngfBlobUrlPromise;\n if (p) return p;\n\n const win = getWindow()\n let deferred:Promise\n if (win.FileReader && file &&\n (!win.FileAPI || navigator.userAgent.indexOf('MSIE 8') === -1 || file.size < 20000) &&\n (!win.FileAPI || navigator.userAgent.indexOf('MSIE 9') === -1 || file.size < 4000000)) {\n //prefer URL.createObjectURL for handling refrences to files of all sizes\n //since it doesn´t build a large string in memory\n var URL = win.URL || win.webkitURL;\n if (FileReader) {\n deferred = new Promise((res,rej)=>{\n var fileReader = new FileReader();\n fileReader.onload = function (event:any) {\n file.$ngfDataUrl = event.target.result;\n delete file.$ngfDataUrl;\n res( event.target.result )\n };\n fileReader.onerror = function (e) {\n file.$ngfDataUrl = '';\n rej(e)\n };\n fileReader.readAsDataURL(file);\n })\n } else {\n var url:any;\n try {\n url = URL.createObjectURL(file);\n } catch (e) {\n return Promise.reject(e);\n }\n \n deferred = Promise.resolve( url )\n file.$ngfBlobUrl = url;\n }\n } else {\n file[disallowObjectUrl ? '$ngfDataUrl' : '$ngfBlobUrl'] = '';\n return Promise.reject( new Error('Browser does not support window.FileReader, window.FileReader, or window.FileAPI') )//deferred.reject();\n }\n\n if (disallowObjectUrl) {\n p = file.$$ngfDataUrlPromise = deferred;\n } else {\n p = file.$$ngfBlobUrlPromise = deferred;\n }\n\n p = p.then((x:any)=>{\n delete file[disallowObjectUrl ? '$$ngfDataUrlPromise' : '$$ngfBlobUrlPromise'];\n return x\n })\n\n return p;\n}\n\nexport function restoreExif(orig:any, resized:any) {\n var ExifRestorer:any = {\n KEY_STR:'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='\n }\n\n ExifRestorer.encode64 = function (input:any) {\n var output = '',\n chr1, chr2, chr3:any = '',\n enc1, enc2, enc3, enc4:any = '',\n i = 0;\n\n do {\n chr1 = input[i++];\n chr2 = input[i++];\n chr3 = input[i++];\n\n enc1 = chr1 >> 2;\n enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);\n enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);\n enc4 = chr3 & 63;\n\n if (isNaN(chr2)) {\n enc3 = enc4 = 64;\n } else if (isNaN(chr3)) {\n enc4 = 64;\n }\n\n output = output +\n this.KEY_STR.charAt(enc1) +\n this.KEY_STR.charAt(enc2) +\n this.KEY_STR.charAt(enc3) +\n this.KEY_STR.charAt(enc4);\n chr1 = chr2 = chr3 = '';\n enc1 = enc2 = enc3 = enc4 = '';\n } while (i < input.length);\n\n return output;\n };\n\n ExifRestorer.restore = function (origFileBase64:any, resizedFileBase64:any) {\n if (origFileBase64.match('data:image/jpeg;base64,')) {\n origFileBase64 = origFileBase64.replace('data:image/jpeg;base64,', '');\n }\n\n var rawImage:number[] = this.decode64(origFileBase64);\n var segments = this.slice2Segments(rawImage);\n\n var image = this.exifManipulation(resizedFileBase64, segments);\n\n return 'data:image/jpeg;base64,' + this.encode64(image);\n };\n\n\n ExifRestorer.exifManipulation = function (resizedFileBase64:any, segments:any) {\n var exifArray = this.getExifArray(segments),\n newImageArray = this.insertExif(resizedFileBase64, exifArray);\n return new Uint8Array(newImageArray);\n };\n\n ExifRestorer.getExifArray = function (segments:number[][]) {\n var seg;\n for (var x = 0; x < segments.length; x++) {\n seg = segments[x];\n if (seg[0] === 255 && seg[1] === 225) //(ff e1)\n {\n return seg;\n }\n }\n return [];\n };\n\n\n ExifRestorer.insertExif = function (resizedFileBase64:any, exifArray:any) {\n var imageData = resizedFileBase64.replace('data:image/jpeg;base64,', ''),\n buf = this.decode64(imageData),\n separatePoint = buf.indexOf(255, 3),\n mae = buf.slice(0, separatePoint),\n ato = buf.slice(separatePoint),\n array = mae;\n\n array = array.concat(exifArray);\n array = array.concat(ato);\n return array;\n };\n\n\n ExifRestorer.slice2Segments = function(\n rawImageArray:number[]\n ) {\n var head:number = 0,\n segments:number[][] = [];\n\n while (1) {\n if (rawImageArray[head] === 255 && rawImageArray[head + 1] === 218) {\n break;\n }\n if (rawImageArray[head] === 255 && rawImageArray[head + 1] === 216) {\n head += 2;\n }\n else {\n var length = rawImageArray[head + 2] * 256 + rawImageArray[head + 3]\n var endPoint = head + length + 2\n var seg:number[] = rawImageArray.slice(head, endPoint)\n segments.push(seg);\n head = endPoint;\n }\n if (head > rawImageArray.length) {\n break;\n }\n }\n\n return segments;\n };\n\n\n ExifRestorer.decode64 = function (\n input:any\n ):number[]{\n var chr1, chr2, chr3:any = '',\n enc1, enc2, enc3, enc4:any = '',\n i = 0,\n buf:number[] = [];\n\n // remove all characters that are not A-Z, a-z, 0-9, +, /, or =\n var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n if (base64test.exec(input)) {\n console.log('There were invalid base64 characters in the input text.');\n }\n input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, '');\n\n do {\n enc1 = this.KEY_STR.indexOf(input.charAt(i++));\n enc2 = this.KEY_STR.indexOf(input.charAt(i++));\n enc3 = this.KEY_STR.indexOf(input.charAt(i++));\n enc4 = this.KEY_STR.indexOf(input.charAt(i++));\n\n chr1 = (enc1 << 2) | (enc2 >> 4);\n chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\n chr3 = ((enc3 & 3) << 6) | enc4;\n\n buf.push(chr1);\n\n if (enc3 !== 64) {\n buf.push(chr2);\n }\n if (enc4 !== 64) {\n buf.push(chr3);\n }\n\n chr1 = chr2 = chr3 = '';\n enc1 = enc2 = enc3 = enc4 = '';\n\n } while (i < input.length);\n\n return buf;\n };\n\n return ExifRestorer.restore(orig, resized); //<= EXIF\n};\n\nfunction blobToFile(theBlob: Blob, fileName:string): File {\n var b: any = theBlob;\n //A Blob() is almost a File() - it's just missing the two properties below which we will add\n b.lastModifiedDate = new Date();\n b.name = fileName;\n\n //Cast to a File() type\n return theBlob;\n}\n","import { Directive, EventEmitter, ElementRef, Input, Output, HostListener, ChangeDetectionStrategy } from '@angular/core';\nimport { createInvisibleFileInputWrap, isFileInput, detectSwipe } from \"./doc-event-help.functions\"\nimport {\n acceptType, InvalidFileItem,\n applyExifRotation, dataUrl\n} from \"./fileTools\"\n\nexport interface dragMeta{\n type:string\n kind:string\n}\n\n/** A master base set of logic intended to support file select/drag/drop operations\n NOTE: Use ngfDrop for full drag/drop. Use ngfSelect for selecting\n*/\n@Directive({\n selector: \"[ngf]\",\n exportAs:\"ngf\"\n})\nexport class ngf {\n fileElm:any\n filters:{name:string, fn:(file:File)=>boolean}[] = []\n lastFileCount:number=0\n\n @Input() multiple !:string\n @Input() accept !:string\n @Input() maxSize !:number\n //@Input() forceFilename:string\n //@Input() forcePostname:string\n @Input() ngfFixOrientation:boolean = true\n\n @Input() fileDropDisabled:boolean = false\n @Input() selectable: boolean | string = false\n @Output('init') directiveInit:EventEmitter = new EventEmitter()\n\n @Input() lastInvalids:InvalidFileItem[] = []\n @Output() lastInvalidsChange:EventEmitter<{file:File,type:string}[]> = new EventEmitter()\n\n @Input() lastBaseUrl !: string//base64 last file uploaded url\n @Output() lastBaseUrlChange:EventEmitter = new EventEmitter()\n\n @Input() file !: File//last file uploaded\n @Output() fileChange:EventEmitter = new EventEmitter()\n\n @Input() files:File[] = []\n @Output() filesChange:EventEmitter = new EventEmitter();\n\n @Input() capturePaste: boolean; // window paste file watching (empty string turns on)\n pasteCapturer !: (e: Event) => void;\n\n constructor(public element:ElementRef){\n this.initFilters()\n }\n\n initFilters(){\n // the order is important\n this.filters.push({name: 'accept', fn: this._acceptFilter})\n this.filters.push({name: 'fileSize', fn: this._fileSizeFilter})\n\n //this.filters.push({name: 'fileType', fn: this._fileTypeFilter})\n //this.filters.push({name: 'queueLimit', fn: this._queueLimitFilter})\n //this.filters.push({name: 'mimeType', fn: this._mimeTypeFilter})\n }\n\n ngOnDestroy(){\n delete this.fileElm//faster memory release of dom element\n this.destroyPasteListener();\n }\n\n ngOnInit(){\n const selectable = (this.selectable || this.selectable==='') && !['false', 'null', '0'].includes(this.selectable as string);\n if( selectable ){\n this.enableSelecting()\n }\n\n if( this.multiple ){\n this.paramFileElm().setAttribute('multiple', this.multiple)\n }\n\n this.evalCapturePaste();\n\n //create reference to this class with one cycle delay to avoid ExpressionChangedAfterItHasBeenCheckedError\n setTimeout(()=>{\n this.directiveInit.emit(this)\n }, 0)\n }\n\n ngOnChanges( changes ){\n if( changes.accept ){\n this.paramFileElm().setAttribute('accept', changes.accept.currentValue || '*')\n }\n\n if (changes.capturePaste) {\n this.evalCapturePaste();\n }\n }\n\n evalCapturePaste() {\n const isActive = this.capturePaste || (this.capturePaste as any)==='' || ['false', '0', 'null'].includes(this.capturePaste as any);\n\n if (isActive) {\n if (this.pasteCapturer) {\n return; // already listening\n }\n\n this.pasteCapturer = (e: Event) => {\n const clip = (e as any).clipboardData;\n if (clip && clip.files && clip.files.length) {\n this.handleFiles(clip.files);\n e.preventDefault();\n }\n }\n\n window.addEventListener('paste', this.pasteCapturer);\n\n return;\n }\n\n this.destroyPasteListener();\n }\n\n destroyPasteListener() {\n if (this.pasteCapturer) {\n window.removeEventListener('paste', this.pasteCapturer);\n delete this.pasteCapturer;\n }\n }\n\n paramFileElm(){\n if( this.fileElm )return this.fileElm//already defined\n\n //elm is a file input\n const isFile = isFileInput( this.element.nativeElement )\n if(isFile)return this.fileElm = this.element.nativeElement\n\n //create foo file input\n const label = createInvisibleFileInputWrap()\n this.fileElm = label.getElementsByTagName('input')[0]\n this.fileElm.addEventListener('change', this.changeFn.bind(this));\n this.element.nativeElement.appendChild( label )\n return this.fileElm\n }\n\n enableSelecting(){\n let elm = this.element.nativeElement\n\n if( isFileInput(elm) ){\n const bindedHandler = _ev=>this.beforeSelect()\n elm.addEventListener('click', bindedHandler)\n elm.addEventListener('touchstart', bindedHandler)\n return\n }\n\n const bindedHandler = ev=>this.clickHandler(ev)\n elm.addEventListener('click', bindedHandler)\n elm.addEventListener('touchstart', bindedHandler)\n elm.addEventListener('touchend', bindedHandler)\n }\n\n getValidFiles( files:File[] ):File[]{\n const rtn:File[] = []\n for(let x=files.length-1; x >= 0; --x){\n if( this.isFileValid(files[x]) ){\n rtn.push( files[x] )\n }\n }\n return rtn\n }\n\n getInvalidFiles(files:File[]):InvalidFileItem[]{\n const rtn:InvalidFileItem[] = []\n for(let x=files.length-1; x >= 0; --x){\n let failReason = this.getFileFilterFailName(files[x])\n if( failReason ){\n rtn.push({\n file : files[x],\n type : failReason\n })\n }\n }\n return rtn\n }\n\n // Primary handler of files coming in\n handleFiles(files:File[]){\n const valids = this.getValidFiles(files)\n\n if(files.length!=valids.length){\n this.lastInvalids = this.getInvalidFiles(files)\n }else{\n delete this.lastInvalids\n }\n\n this.lastInvalidsChange.emit(this.lastInvalids)\n\n if( valids.length ){\n if( this.ngfFixOrientation ){\n this.applyExifRotations(valids)\n .then( fixedFiles=>this.que(fixedFiles) )\n }else{\n this.que(valids)\n }\n }\n\n if (this.isEmptyAfterSelection()) {\n this.element.nativeElement.value = ''\n }\n }\n\n que( files:File[] ){\n this.files = this.files || []\n Array.prototype.push.apply(this.files, files)\n\n //below break memory ref and doesnt act like a que\n //this.files = files//causes memory change which triggers bindings like \n\n this.filesChange.emit( this.files )\n\n if(files.length){\n this.fileChange.emit( this.file=files[0] )\n\n if(this.lastBaseUrlChange.observers.length){\n dataUrl( files[0] )\n .then( url=>this.lastBaseUrlChange.emit(url) )\n }\n }\n\n //will be checked for input value clearing\n this.lastFileCount = this.files.length\n }\n\n /** called when input has files */\n changeFn(event:any) {\n var fileList = event.__files_ || (event.target && event.target.files)\n\n if (!fileList) return;\n\n this.stopEvent(event);\n this.handleFiles(fileList)\n }\n\n clickHandler(evt:any){\n const elm = this.element.nativeElement\n if (elm.getAttribute('disabled') || this.fileDropDisabled){\n return false;\n }\n\n var r = detectSwipe(evt);\n // prevent the click if it is a swipe\n if ( r!==false ) return r;\n\n const fileElm = this.paramFileElm()\n fileElm.click()\n //fileElm.dispatchEvent( new Event('click') );\n this.beforeSelect()\n\n return false;\n }\n\n beforeSelect(){\n if( this.files && this.lastFileCount===this.files.length )return\n\n //if no files in array, be sure browser doesnt prevent reselect of same file (see github issue 27)\n this.fileElm.value = null\n }\n\n isEmptyAfterSelection():boolean {\n return !!this.element.nativeElement.attributes.multiple;\n }\n\n eventToTransfer(event:any):any {\n if(event.dataTransfer)return event.dataTransfer\n return event.originalEvent ? event.originalEvent.dataTransfer : null\n }\n\n stopEvent(event:any):any {\n event.preventDefault();\n event.stopPropagation();\n }\n\n transferHasFiles(transfer:any):any {\n if (!transfer.types) {\n return false;\n }\n\n if (transfer.types.indexOf) {\n return transfer.types.indexOf('Files') !== -1;\n } else if (transfer.types.contains) {\n return transfer.types.contains('Files');\n } else {\n return false;\n }\n }\n\n eventToFiles(event:Event){\n const transfer = this.eventToTransfer(event);\n if( transfer ){\n if(transfer.files && transfer.files.length){\n return transfer.files\n }\n if(transfer.items && transfer.items.length){\n return transfer.items\n }\n }\n return []\n }\n\n applyExifRotations(\n files:File[]\n ):Promise{\n const mapper = (\n file:File,index:number\n ):Promise=>{\n return applyExifRotation(file)\n .then( fixedFile=>files.splice(index, 1, fixedFile) )\n }\n\n const proms:Promise[] = []\n for(let x=files.length-1; x >= 0; --x){\n proms[x] = mapper( files[x], x )\n }\n return Promise.all( proms ).then( ()=>files )\n }\n\n @HostListener('change', ['$event'])\n onChange(event:Event):void {\n let files = this.element.nativeElement.files || this.eventToFiles(event)\n\n if(!files.length)return\n\n this.stopEvent(event);\n this.handleFiles(files)\n }\n\n getFileFilterFailName(\n file:File\n ):string | undefined{\n for(let i = 0; i < this.filters.length; i++){\n if( !this.filters[i].fn.call(this, file) ){\n return this.filters[i].name\n }\n }\n return undefined\n }\n\n isFileValid(file:File):boolean{\n const noFilters = !this.accept && (!this.filters || !this.filters.length)\n if( noFilters ){\n return true//we have no filters so all files are valid\n }\n\n return this.getFileFilterFailName(file) ? false : true\n }\n\n isFilesValid(files:File[]){\n for(let x=files.length-1; x >= 0; --x){\n if( !this.isFileValid(files[x]) ){\n return false\n }\n }\n return true\n }\n\n protected _acceptFilter(item:File):boolean {\n return acceptType(this.accept, item.type, item.name)\n }\n\n protected _fileSizeFilter(item:File):boolean {\n return !(this.maxSize && item.size > this.maxSize);\n }\n\n /** browsers try hard to conceal data about file drags, this tends to undo that */\n filesToWriteableObject( files:File[] ):dragMeta[]{\n const jsonFiles:dragMeta[] = []\n for(let x=0; x < files.length; ++x){\n jsonFiles.push({\n type:files[x].type,\n kind:files[x][\"kind\"]\n })\n }\n return jsonFiles\n }\n}\n","import { Directive, Input } from \"@angular/core\"\nimport { ngf } from \"./ngf.directive\"\n\n@Directive({\n selector: \"[ngfSelect]\",\n exportAs: \"ngfSelect\"\n})\nexport class ngfSelect extends ngf {\n @Input() selectable:any = true\n}","import {\n Directive, EventEmitter,\n HostListener, Input, Output\n} from '@angular/core';\nimport { ngf, dragMeta } from \"./ngf.directive\"\n\n@Directive({\n selector: \"[ngfDrop]\",\n exportAs: \"ngfDrop\"\n})\nexport class ngfDrop extends ngf {\n @Output() fileOver:EventEmitter = new EventEmitter();\n\n @Input() validDrag:boolean = false\n @Output() validDragChange:EventEmitter = new EventEmitter()\n\n @Input() invalidDrag = false\n @Output() invalidDragChange:EventEmitter = new EventEmitter()\n\n @Input() dragFiles !: dragMeta[]\n @Output() dragFilesChange:EventEmitter = new EventEmitter()\n\n @HostListener('drop', ['$event'])\n onDrop(event:Event):void {\n if(this.fileDropDisabled){\n this.stopEvent(event);\n return\n }\n\n this.closeDrags()\n let files = this.eventToFiles(event)\n\n if(!files.length)return\n\n this.stopEvent(event);\n this.handleFiles(files)\n }\n\n handleFiles(files:File[]){\n this.fileOver.emit(false)//turn-off dragover\n super.handleFiles(files)\n }\n\n @HostListener('dragover', ['$event'])\n onDragOver(event:Event):void {\n if(this.fileDropDisabled){\n this.stopEvent(event);\n return\n }\n\n const transfer = this.eventToTransfer(event)\n\n let files = this.eventToFiles(event)\n\n let jsonFiles = this.filesToWriteableObject(files)\n this.dragFilesChange.emit( this.dragFiles=jsonFiles )\n\n if( files.length ){\n this.validDrag = this.isFilesValid(files)\n }else{\n //Safari, IE11 & some browsers do NOT tell you about dragged files until dropped. Always consider a valid drag\n this.validDrag = true\n }\n\n this.validDragChange.emit(this.validDrag)\n\n this.invalidDrag = !this.validDrag\n this.invalidDragChange.emit(this.invalidDrag)\n\n transfer.dropEffect = 'copy'//change cursor and such\n this.stopEvent(event)\n this.fileOver.emit(true)\n }\n\n closeDrags(){\n delete this.validDrag\n this.validDragChange.emit(this.validDrag)\n this.invalidDrag = false\n this.invalidDragChange.emit(this.invalidDrag)\n delete this.dragFiles\n this.dragFilesChange.emit( this.dragFiles )\n }\n\n @HostListener('dragleave', ['$event'])\n onDragLeave(event:Event):any {\n if(this.fileDropDisabled){\n this.stopEvent(event);\n return\n }\n \n this.closeDrags()\n\n if ((this as any).element) {\n if (event.currentTarget === (this as any).element[0]) {\n return;\n }\n }\n\n this.stopEvent(event);\n this.fileOver.emit(false);\n }\n}","import { Directive, ElementRef, Input } from '@angular/core';\nimport { dataUrl } from './fileTools';\n\n@Directive({selector: '[ngfBackground]'})\nexport class ngfBackground {\n @Input('ngfBackground') file:any\n\n constructor(public ElementRef:ElementRef){}\n\n ngOnChanges( _changes:any ){\n dataUrl(this.file)\n .then(src=>{\n const urlString = 'url(\\'' + (src || '') + '\\')'\n this.ElementRef.nativeElement.style.backgroundImage = urlString\n })\n }\n}\n","import { Directive, EventEmitter, Output, Input } from '@angular/core';\n\n@Directive({selector: 'ngfUploadStatus'})\nexport class ngfUploadStatus {\n @Input() percent:number = 0\n @Output() percentChange:EventEmitter = new EventEmitter()\n @Input() httpEvent !: Event\n\n ngOnChanges( changes ){\n if( changes.httpEvent && changes.httpEvent.currentValue ){\n const event = changes.httpEvent.currentValue\n if (event.loaded && event.total) {\n setTimeout(()=>{\n this.percent = Math.round(100 * event.loaded / event.total);\n this.percentChange.emit( this.percent )\n }, 0)\n }\n }\n }\n}","import {\n IterableDiffer,\n IterableDiffers,\n Directive, EventEmitter,\n Output, Input\n} from '@angular/core';\n\n@Directive({selector: 'ngfFormData'})\nexport class ngfFormData {\n @Input() files !: File[]\n @Input() postName:string = \"file\"\n @Input() fileName !: string//force file name\n\n @Input() FormData:FormData = new FormData()\n @Output() FormDataChange:EventEmitter = new EventEmitter()\n\n differ:IterableDiffer<{}>\n\n constructor(IterableDiffers: IterableDiffers){\n this.differ = IterableDiffers.find([]).create()\n }\n\n ngDoCheck(){\n var changes = this.differ.diff( this.files );\n\n if (changes) {\n setTimeout(()=>this.buildFormData(), 0)\n }\n }\n\n buildFormData(){\n const isArray = typeof(this.files)==='object' && this.files.constructor===Array\n\n if( isArray ){\n this.FormData = new FormData()\n const files = this.files || []\n files.forEach(file=>\n this.FormData.append(this.postName, file, this.fileName||file.name)\n )\n this.FormDataChange.emit( this.FormData )\n }else{\n delete this.FormData\n }\n }\n}","import { Directive, ElementRef, Input } from '@angular/core';\nimport { dataUrl } from './fileTools';\n\n@Directive({ selector: '[ngfSrc]' })\nexport class ngfSrc {\n @Input('ngfSrc') file: any\n\n constructor(public ElementRef: ElementRef) { }\n\n ngOnChanges(_changes: any) {\n dataUrl(this.file)\n .then(src=>\n this.ElementRef.nativeElement.src = src\n )\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { ngfBackground } from './ngfBackground.directive';\nimport { ngfDrop } from './ngfDrop.directive';\nimport { ngf } from './ngf.directive';\nimport { ngfSelect } from './ngfSelect.directive';\nimport { ngfUploadStatus } from './ngfUploadStatus.directive';\nimport { ngfFormData } from './ngfFormData.directive';\nimport { ngfSrc } from './ngfSrc.directive';\n//import{ HttpModule } from '@angular/http';\n\nconst declarations = [\n ngfDrop,\n ngfSelect,\n ngfBackground,\n ngfSrc,\n ngfUploadStatus,\n ngfFormData,\n ngf\n]\n\n@NgModule({\n imports: [\n CommonModule\n //,HttpModule\n ],\n declarations: declarations,\n exports: declarations//[HttpModule, ...declarations]\n}) export class ngfModule {}"]} \ No newline at end of file +{"version":3,"sources":["../../node_modules/tslib/tslib.es6.js","../src/file-upload/doc-event-help.functions.ts","../src/file-upload/fileTools.ts","../src/file-upload/ngf.directive.ts","../src/file-upload/ngfSelect.directive.ts","../src/file-upload/ngfDrop.directive.ts","../src/file-upload/ngfBackground.directive.ts","../src/file-upload/ngfUploadStatus.directive.ts","../src/file-upload/ngfFormData.directive.ts","../src/file-upload/ngfSrc.directive.ts","../src/file-upload/ngf.module.ts"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__extends","__","this","constructor","prototype","create","__read","o","n","m","Symbol","iterator","r","e","i","call","ar","next","done","push","value","error","__spread","arguments","length","concat","isFileInput","elm","ty","getAttribute","tagName","toLowerCase","initialTouchStartY","initialTouchStartX","createFileInput","fileElem","document","createElement","type","fixFileOrientationByMeta","file","result","dataUrl","then","url","canvas","img","Promise","res","rej","onload","width","orientation","height","ctx","getContext","transform","applyTransform","drawImage","toDataURL","base","buffer","binary","bytes","Uint8Array","len","byteLength","String","fromCharCode","window","btoa","arrayBufferToBase64","fixedArrayBuffer","blob","dataurl","name","origSize","arr","split","mimeMatch","match","mime","bstr","atob","u8arr","charCodeAt","Blob","dataUrltoBlob","KEY_STR","encode64","input","chr1","chr2","enc1","enc2","enc3","output","chr3","enc4","isNaN","charAt","restore","origFileBase64","resizedFileBase64","replace","rawImage","decode64","segments","slice2Segments","image","exifManipulation","exifArray","getExifArray","newImageArray","insertExif","seg","x","imageData","buf","separatePoint","indexOf","mae","slice","ato","array","rawImageArray","head","endPoint","exec","console","log","newFile","theBlob","fileName","lastModifiedDate","Date","onerror","src","applyExifRotation","resolve","reader","FileReader","slicedFile","readAsArrayBuffer","view","DataView","getUint16","offset","marker","getUint32","little","tags","setUint16","target","readOrientation","disallowObjectUrl","$ngfDataUrl","$ngfBlobUrl","$$ngfDataUrlPromise","$$ngfBlobUrlPromise","deferred","win","FileAPI","navigator","userAgent","size","reject","Error","URL","webkitURL","fileReader","event","readAsDataURL","createObjectURL","ngf","element","filters","lastFileCount","ngfFixOrientation","fileDropDisabled","selectable","directiveInit","EventEmitter","lastInvalids","lastInvalidsChange","lastBaseUrlChange","fileChange","files","filesChange","initFilters","fn","_acceptFilter","_fileSizeFilter","ngOnDestroy","fileElm","destroyPasteListener","ngOnInit","_this","includes","enableSelecting","multiple","paramFileElm","setAttribute","evalCapturePaste","setTimeout","emit","ngOnChanges","changes","accept","currentValue","capturePaste","pasteCapturer","clip","clipboardData","handleFiles","preventDefault","addEventListener","removeEventListener","nativeElement","label","innerHTML","style","visibility","position","overflow","border","margin","padding","appendChild","createInvisibleFileInputWrap","getElementsByTagName","changeFn","bind","bindedHandler_1","_ev","beforeSelect","bindedHandler","ev","clickHandler","getValidFiles","rtn","isFileValid","getInvalidFiles","failReason","getFileFilterFailName","valids","applyExifRotations","fixedFiles","que","isEmptyAfterSelection","apply","observers","fileList","__files_","stopEvent","evt","touches","changedTouches","originalEvent","clientX","clientY","currentX","currentY","Math","abs","stopPropagation","cancelable","detectSwipe","click","attributes","eventToTransfer","dataTransfer","transferHasFiles","transfer","types","contains","eventToFiles","items","mapper","index","fixedFile","splice","proms","all","onChange","isFilesValid","item","regx","acceptRegString","defs","RegExp","search","substring","acceptType","maxSize","filesToWriteableObject","jsonFiles","kind","Directive","args","selector","exportAs","ElementRef","Input","Output","HostListener","ngfSelect","_super","ngfDrop","fileOver","validDrag","validDragChange","invalidDrag","invalidDragChange","dragFilesChange","onDrop","closeDrags","onDragOver","dragFiles","dropEffect","onDragLeave","currentTarget","ngfBackground","_changes","urlString","backgroundImage","ngfUploadStatus","percent","percentChange","httpEvent","event_1","loaded","total","round","ngfFormData","IterableDiffers","postName","FormData","FormDataChange","differ","find","ngDoCheck","diff","buildFormData","forEach","append","ngfSrc","declarations","NgModule","imports","CommonModule","exports"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","export const isFileInput = function(elm:any){\n const ty = elm.getAttribute('type')\n return elm.tagName.toLowerCase() === 'input' && ty && ty.toLowerCase() === 'file';\n}\n\nlet initialTouchStartY = 0;\nlet initialTouchStartX = 0;\nexport const detectSwipe = function(evt:any):boolean {\n var touches = evt.changedTouches || (evt.originalEvent && evt.originalEvent.changedTouches);\n if (touches) {\n if (evt.type === 'touchstart') {\n initialTouchStartX = touches[0].clientX;\n initialTouchStartY = touches[0].clientY;\n return true; // don't block event default\n } else {\n // prevent scroll from triggering event\n if (evt.type === 'touchend') {\n var currentX = touches[0].clientX;\n var currentY = touches[0].clientY;\n if ((Math.abs(currentX - initialTouchStartX) > 20) ||\n (Math.abs(currentY - initialTouchStartY) > 20)) {\n // Swipe detected\n return true;\n }\n // touch was a 'tap' so prevent propogation and prevent\n // device follow-up actions (click, mouseup, mousedown, etc.)\n evt.stopPropagation();\n if (evt.cancelable) {\n evt.preventDefault();\n }\n }\n return false;\n }\n }\n return false\n}\n\nexport const createInvisibleFileInputWrap = function() {\n var fileElem = createFileInput()\n var label = document.createElement('label');\n label.innerHTML = 'upload'\n label.style.visibility = 'hidden'\n label.style.position = 'absolute'\n label.style.overflow = 'hidden'\n label.style.width = '0px'\n label.style.height = '0px'\n label.style.border = 'none'\n label.style.margin = '0px'\n label.style.padding = '0px'\n label.setAttribute('tabindex','-1')\n \n //bindAttrToFileInput(fileElem, label);\n //generatedElems.push({el: elem, ref: label});\n\n label.appendChild( fileElem )\n //document.body.appendChild( label );\n\n return label;\n}\n\nexport const createFileInput = function() {\n var fileElem = document.createElement('input');\n fileElem.type=\"file\"\n return fileElem;\n}\n","export function getWindow():any{return window}\n\nexport function acceptType(accept:string, type:string, name?:string):boolean { \n if( !accept ){\n return true\n }\n\n const defs = accept.split(',')\n let regx:RegExp\n let acceptRegString:string\n\n for(let x=defs.length-1; x >= 0; --x){\n //Escapes dots in mimetype \n acceptRegString = defs[x]\n //trim\n acceptRegString = acceptRegString.replace(/(^\\s+|\\s+$)/g,'')\n //Escapes stars in mimetype \n acceptRegString = acceptRegString.replace(/\\*/g,'.*')\n //let acceptReg = '^((' + acceptRegString\n //acceptReg = acceptReg.replace(/,/g,')|(') + '))$'\n \n //try by mime\n regx = new RegExp(acceptRegString, 'gi')\n if( type.search(regx)>=0 ){\n return true\n }\n\n //try by ext\n if( acceptRegString.substring(0, 1)=='.' ){ \n acceptRegString = '\\\\'+ acceptRegString//.substring(1, acceptRegString.length-1)//remove dot at front\n regx = new RegExp(acceptRegString+'$', 'i')\n if( (name||type).search(regx)>=0 ){\n return true\n }\n }\n }\n return false\n}\n\nexport interface InvalidFileItem{\n file:File\n type:string\n}\n\nexport function arrayBufferToBase64(buffer:any) {\n var binary = '';\n var bytes = new Uint8Array(buffer);\n var len = bytes.byteLength;\n for (var i = 0; i < len; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return window.btoa(binary);\n}\n\nexport function dataUrltoBlob(\n dataurl:string,\n name:string,\n origSize?:any\n):Blob{\n var arr = dataurl.split(',');\n var mimeMatch = arr[0].match(/:(.*?);/)\n var mime:string = mimeMatch ? mimeMatch[1] : 'text/plain'\n var bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);\n while (n--) {\n u8arr[n] = bstr.charCodeAt(n);\n }\n var blob = new window.Blob([u8arr], {type: mime});\n blob[\"name\"] = name;\n blob[\"$ngfOrigSize\"] = origSize;\n return blob;\n}\n\nexport interface orientationMeta{\n orientation: number\n fixedArrayBuffer?:any[]\n}\n\nexport function applyTransform(\n ctx:CanvasRenderingContext2D,\n orientation:number,\n width:number,\n height:number\n) {\n switch (orientation) {\n case 2:\n return ctx.transform(-1, 0, 0, 1, width, 0);\n case 3:\n return ctx.transform(-1, 0, 0, -1, width, height);\n case 4:\n return ctx.transform(1, 0, 0, -1, 0, height);\n case 5:\n return ctx.transform(0, 1, 1, 0, 0, 0);\n case 6:\n return ctx.transform(0, 1, -1, 0, height, 0);\n case 7:\n return ctx.transform(0, -1, -1, 0, height, width);\n case 8:\n return ctx.transform(0, -1, 1, 0, 0, width);\n }\n}\n\nexport function fixFileOrientationByMeta(\n file:File, result:orientationMeta\n):Promise{\n return dataUrl(file, true)\n .then(url=>{\n var canvas = document.createElement('canvas');\n var img = document.createElement('img');\n\n return >new Promise(function(res,rej){\n img.onload = function () {\n try {\n canvas.width = result.orientation > 4 ? img.height : img.width\n canvas.height = result.orientation > 4 ? img.width : img.height\n var ctx = canvas.getContext('2d')\n applyTransform(ctx, result.orientation, img.width, img.height)\n ctx.drawImage(img, 0, 0);\n var dataUrl = canvas.toDataURL(file.type || 'image/WebP', 0.934)\n const base = arrayBufferToBase64(result.fixedArrayBuffer)\n dataUrl = restoreExif(base, dataUrl)\n var blob = dataUrltoBlob(dataUrl, file.name)\n const newFile = blobToFile(blob, file.name);\n res(newFile);\n } catch (e) {\n rej(e)\n }\n };\n img.onerror = rej;\n img.src = url; \n })\n })\n}\n\nexport function applyExifRotation(\n file:File\n):Promise{\n if (file.type.indexOf('image/jpeg') !== 0) {\n return Promise.resolve(file);\n }\n\n return readOrientation(file)\n .then((result:orientationMeta)=>{\n if (result.orientation < 2 || result.orientation > 8) {\n return file\n }\n \n return fixFileOrientationByMeta(file,result)\n })\n}\n\nexport function readOrientation(\n file:File\n):Promise{\n return new Promise((res,rej)=>{\n var reader = new FileReader();\n var slicedFile = file.slice ? file.slice(0, 64 * 1024) : file;\n reader.readAsArrayBuffer(slicedFile);\n reader.onerror = rej\n reader.onload = function (e:any) {\n var result:orientationMeta = {orientation: 1};\n var view = new DataView( this.result );\n if (view.getUint16(0, false) !== 0xFFD8) return res(result);\n\n var length = view.byteLength,\n offset = 2;\n while (offset < length) {\n var marker = view.getUint16(offset, false);\n offset += 2;\n if (marker === 0xFFE1) {\n if (view.getUint32(offset += 2, false) !== 0x45786966) return res(result);\n\n var little = view.getUint16(offset += 6, false) === 0x4949;\n offset += view.getUint32(offset + 4, little);\n var tags = view.getUint16(offset, little);\n offset += 2;\n for (var i = 0; i < tags; i++)\n if (view.getUint16(offset + (i * 12), little) === 0x0112) {\n var orientation = view.getUint16(offset + (i * 12) + 8, little);\n if (orientation >= 2 && orientation <= 8) {\n view.setUint16(offset + (i * 12) + 8, 1, little);\n result.fixedArrayBuffer = e.target.result;\n }\n result.orientation = orientation;\n return res(result);\n }\n } else if ((marker & 0xFF00) !== 0xFF00) break;\n else offset += view.getUint16(offset, false);\n }\n return res(result);\n };\n })\n}\n\n/** converts file-input file into base64 dataUri */\nexport function dataUrl(\n file:any,\n disallowObjectUrl?:any\n):Promise{\n if (!file) return Promise.resolve(file)\n \n if ((disallowObjectUrl && file.$ngfDataUrl != null) || (!disallowObjectUrl && file.$ngfBlobUrl != null)) {\n return Promise.resolve( disallowObjectUrl ? file.$ngfDataUrl : file.$ngfBlobUrl )\n }\n\n var p = disallowObjectUrl ? file.$$ngfDataUrlPromise : file.$$ngfBlobUrlPromise;\n if (p) return p;\n\n const win = getWindow()\n let deferred:Promise\n if (win.FileReader && file &&\n (!win.FileAPI || navigator.userAgent.indexOf('MSIE 8') === -1 || file.size < 20000) &&\n (!win.FileAPI || navigator.userAgent.indexOf('MSIE 9') === -1 || file.size < 4000000)) {\n //prefer URL.createObjectURL for handling refrences to files of all sizes\n //since it doesn´t build a large string in memory\n var URL = win.URL || win.webkitURL;\n if (FileReader) {\n deferred = new Promise((res,rej)=>{\n var fileReader = new FileReader();\n fileReader.onload = function (event:any) {\n file.$ngfDataUrl = event.target.result;\n delete file.$ngfDataUrl;\n res( event.target.result )\n };\n fileReader.onerror = function (e) {\n file.$ngfDataUrl = '';\n rej(e)\n };\n fileReader.readAsDataURL(file);\n })\n } else {\n var url:any;\n try {\n url = URL.createObjectURL(file);\n } catch (e) {\n return Promise.reject(e);\n }\n \n deferred = Promise.resolve( url )\n file.$ngfBlobUrl = url;\n }\n } else {\n file[disallowObjectUrl ? '$ngfDataUrl' : '$ngfBlobUrl'] = '';\n return Promise.reject( new Error('Browser does not support window.FileReader, window.FileReader, or window.FileAPI') )//deferred.reject();\n }\n\n if (disallowObjectUrl) {\n p = file.$$ngfDataUrlPromise = deferred;\n } else {\n p = file.$$ngfBlobUrlPromise = deferred;\n }\n\n p = p.then((x:any)=>{\n delete file[disallowObjectUrl ? '$$ngfDataUrlPromise' : '$$ngfBlobUrlPromise'];\n return x\n })\n\n return p;\n}\n\nexport function restoreExif(orig:any, resized:any) {\n var ExifRestorer:any = {\n KEY_STR:'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='\n }\n\n ExifRestorer.encode64 = function (input:any) {\n var output = '',\n chr1, chr2, chr3:any = '',\n enc1, enc2, enc3, enc4:any = '',\n i = 0;\n\n do {\n chr1 = input[i++];\n chr2 = input[i++];\n chr3 = input[i++];\n\n enc1 = chr1 >> 2;\n enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);\n enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);\n enc4 = chr3 & 63;\n\n if (isNaN(chr2)) {\n enc3 = enc4 = 64;\n } else if (isNaN(chr3)) {\n enc4 = 64;\n }\n\n output = output +\n this.KEY_STR.charAt(enc1) +\n this.KEY_STR.charAt(enc2) +\n this.KEY_STR.charAt(enc3) +\n this.KEY_STR.charAt(enc4);\n chr1 = chr2 = chr3 = '';\n enc1 = enc2 = enc3 = enc4 = '';\n } while (i < input.length);\n\n return output;\n };\n\n ExifRestorer.restore = function (origFileBase64:any, resizedFileBase64:any) {\n if (origFileBase64.match('data:image/jpeg;base64,')) {\n origFileBase64 = origFileBase64.replace('data:image/jpeg;base64,', '');\n }\n\n var rawImage:number[] = this.decode64(origFileBase64);\n var segments = this.slice2Segments(rawImage);\n\n var image = this.exifManipulation(resizedFileBase64, segments);\n\n return 'data:image/jpeg;base64,' + this.encode64(image);\n };\n\n\n ExifRestorer.exifManipulation = function (resizedFileBase64:any, segments:any) {\n var exifArray = this.getExifArray(segments),\n newImageArray = this.insertExif(resizedFileBase64, exifArray);\n return new Uint8Array(newImageArray);\n };\n\n ExifRestorer.getExifArray = function (segments:number[][]) {\n var seg;\n for (var x = 0; x < segments.length; x++) {\n seg = segments[x];\n if (seg[0] === 255 && seg[1] === 225) //(ff e1)\n {\n return seg;\n }\n }\n return [];\n };\n\n\n ExifRestorer.insertExif = function (resizedFileBase64:any, exifArray:any) {\n var imageData = resizedFileBase64.replace('data:image/jpeg;base64,', ''),\n buf = this.decode64(imageData),\n separatePoint = buf.indexOf(255, 3),\n mae = buf.slice(0, separatePoint),\n ato = buf.slice(separatePoint),\n array = mae;\n\n array = array.concat(exifArray);\n array = array.concat(ato);\n return array;\n };\n\n\n ExifRestorer.slice2Segments = function(\n rawImageArray:number[]\n ) {\n var head:number = 0,\n segments:number[][] = [];\n\n while (1) {\n if (rawImageArray[head] === 255 && rawImageArray[head + 1] === 218) {\n break;\n }\n if (rawImageArray[head] === 255 && rawImageArray[head + 1] === 216) {\n head += 2;\n }\n else {\n var length = rawImageArray[head + 2] * 256 + rawImageArray[head + 3]\n var endPoint = head + length + 2\n var seg:number[] = rawImageArray.slice(head, endPoint)\n segments.push(seg);\n head = endPoint;\n }\n if (head > rawImageArray.length) {\n break;\n }\n }\n\n return segments;\n };\n\n\n ExifRestorer.decode64 = function (\n input:any\n ):number[]{\n var chr1, chr2, chr3:any = '',\n enc1, enc2, enc3, enc4:any = '',\n i = 0,\n buf:number[] = [];\n\n // remove all characters that are not A-Z, a-z, 0-9, +, /, or =\n var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n if (base64test.exec(input)) {\n console.log('There were invalid base64 characters in the input text.');\n }\n input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, '');\n\n do {\n enc1 = this.KEY_STR.indexOf(input.charAt(i++));\n enc2 = this.KEY_STR.indexOf(input.charAt(i++));\n enc3 = this.KEY_STR.indexOf(input.charAt(i++));\n enc4 = this.KEY_STR.indexOf(input.charAt(i++));\n\n chr1 = (enc1 << 2) | (enc2 >> 4);\n chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\n chr3 = ((enc3 & 3) << 6) | enc4;\n\n buf.push(chr1);\n\n if (enc3 !== 64) {\n buf.push(chr2);\n }\n if (enc4 !== 64) {\n buf.push(chr3);\n }\n\n chr1 = chr2 = chr3 = '';\n enc1 = enc2 = enc3 = enc4 = '';\n\n } while (i < input.length);\n\n return buf;\n };\n\n return ExifRestorer.restore(orig, resized); //<= EXIF\n};\n\nfunction blobToFile(theBlob: Blob, fileName:string): File {\n var b: any = theBlob;\n //A Blob() is almost a File() - it's just missing the two properties below which we will add\n b.lastModifiedDate = new Date();\n b.name = fileName;\n\n //Cast to a File() type\n return theBlob;\n}\n","import { Directive, EventEmitter, ElementRef, Input, Output, HostListener, ChangeDetectionStrategy } from '@angular/core';\nimport { createInvisibleFileInputWrap, isFileInput, detectSwipe } from \"./doc-event-help.functions\"\nimport {\n acceptType, InvalidFileItem,\n applyExifRotation, dataUrl\n} from \"./fileTools\"\n\nexport interface dragMeta{\n type:string\n kind:string\n}\n\n/** A master base set of logic intended to support file select/drag/drop operations\n NOTE: Use ngfDrop for full drag/drop. Use ngfSelect for selecting\n*/\n@Directive({\n selector: \"[ngf]\",\n exportAs:\"ngf\"\n})\nexport class ngf {\n fileElm:any\n filters:{name:string, fn:(file:File)=>boolean}[] = []\n lastFileCount:number=0\n\n @Input() multiple !:string\n @Input() accept !:string\n @Input() maxSize !:number\n //@Input() forceFilename:string\n //@Input() forcePostname:string\n @Input() ngfFixOrientation:boolean = true\n\n @Input() fileDropDisabled:boolean = false\n @Input() selectable: boolean | string = false\n @Output('init') directiveInit:EventEmitter = new EventEmitter()\n\n @Input() lastInvalids:InvalidFileItem[] = []\n @Output() lastInvalidsChange:EventEmitter<{file:File,type:string}[]> = new EventEmitter()\n\n @Input() lastBaseUrl !: string//base64 last file uploaded url\n @Output() lastBaseUrlChange:EventEmitter = new EventEmitter()\n\n @Input() file !: File//last file uploaded\n @Output() fileChange:EventEmitter = new EventEmitter()\n\n @Input() files:File[] = []\n @Output() filesChange:EventEmitter = new EventEmitter();\n\n @Input() capturePaste: boolean; // window paste file watching (empty string turns on)\n pasteCapturer !: (e: Event) => void;\n\n constructor(public element:ElementRef){\n this.initFilters()\n }\n\n initFilters(){\n // the order is important\n this.filters.push({name: 'accept', fn: this._acceptFilter})\n this.filters.push({name: 'fileSize', fn: this._fileSizeFilter})\n\n //this.filters.push({name: 'fileType', fn: this._fileTypeFilter})\n //this.filters.push({name: 'queueLimit', fn: this._queueLimitFilter})\n //this.filters.push({name: 'mimeType', fn: this._mimeTypeFilter})\n }\n\n ngOnDestroy(){\n delete this.fileElm//faster memory release of dom element\n this.destroyPasteListener();\n }\n\n ngOnInit(){\n const selectable = (this.selectable || this.selectable==='') && !['false', 'null', '0'].includes(this.selectable as string);\n if( selectable ){\n this.enableSelecting()\n }\n\n if( this.multiple ){\n this.paramFileElm().setAttribute('multiple', this.multiple)\n }\n\n this.evalCapturePaste();\n\n //create reference to this class with one cycle delay to avoid ExpressionChangedAfterItHasBeenCheckedError\n setTimeout(()=>{\n this.directiveInit.emit(this)\n }, 0)\n }\n\n ngOnChanges( changes ){\n if( changes.accept ){\n this.paramFileElm().setAttribute('accept', changes.accept.currentValue || '*')\n }\n\n if (changes.capturePaste) {\n this.evalCapturePaste();\n }\n }\n\n evalCapturePaste() {\n const isActive = this.capturePaste || (this.capturePaste as any)==='' || ['false', '0', 'null'].includes(this.capturePaste as any);\n\n if (isActive) {\n if (this.pasteCapturer) {\n return; // already listening\n }\n\n this.pasteCapturer = (e: Event) => {\n const clip = (e as any).clipboardData;\n if (clip && clip.files && clip.files.length) {\n this.handleFiles(clip.files);\n e.preventDefault();\n }\n }\n\n window.addEventListener('paste', this.pasteCapturer);\n\n return;\n }\n\n this.destroyPasteListener();\n }\n\n destroyPasteListener() {\n if (this.pasteCapturer) {\n window.removeEventListener('paste', this.pasteCapturer);\n delete this.pasteCapturer;\n }\n }\n\n paramFileElm(){\n if( this.fileElm )return this.fileElm//already defined\n\n //elm is a file input\n const isFile = isFileInput( this.element.nativeElement )\n if(isFile)return this.fileElm = this.element.nativeElement\n\n //create foo file input\n const label = createInvisibleFileInputWrap()\n this.fileElm = label.getElementsByTagName('input')[0]\n this.fileElm.addEventListener('change', this.changeFn.bind(this));\n this.element.nativeElement.appendChild( label )\n return this.fileElm\n }\n\n enableSelecting(){\n let elm = this.element.nativeElement\n\n if( isFileInput(elm) ){\n const bindedHandler = _ev=>this.beforeSelect()\n elm.addEventListener('click', bindedHandler)\n elm.addEventListener('touchstart', bindedHandler)\n return\n }\n\n const bindedHandler = ev=>this.clickHandler(ev)\n elm.addEventListener('click', bindedHandler)\n elm.addEventListener('touchstart', bindedHandler)\n elm.addEventListener('touchend', bindedHandler)\n }\n\n getValidFiles( files:File[] ):File[]{\n const rtn:File[] = []\n for(let x=files.length-1; x >= 0; --x){\n if( this.isFileValid(files[x]) ){\n rtn.push( files[x] )\n }\n }\n return rtn\n }\n\n getInvalidFiles(files:File[]):InvalidFileItem[]{\n const rtn:InvalidFileItem[] = []\n for(let x=files.length-1; x >= 0; --x){\n let failReason = this.getFileFilterFailName(files[x])\n if( failReason ){\n rtn.push({\n file : files[x],\n type : failReason\n })\n }\n }\n return rtn\n }\n\n // Primary handler of files coming in\n handleFiles(files:File[]){\n const valids = this.getValidFiles(files)\n\n if(files.length!=valids.length){\n this.lastInvalids = this.getInvalidFiles(files)\n }else{\n delete this.lastInvalids\n }\n\n this.lastInvalidsChange.emit(this.lastInvalids)\n\n if( valids.length ){\n if( this.ngfFixOrientation ){\n this.applyExifRotations(valids)\n .then( fixedFiles=>this.que(fixedFiles) )\n }else{\n this.que(valids)\n }\n }\n\n if (this.isEmptyAfterSelection()) {\n this.element.nativeElement.value = ''\n }\n }\n\n que( files:File[] ){\n this.files = this.files || []\n Array.prototype.push.apply(this.files, files)\n\n //below break memory ref and doesnt act like a que\n //this.files = files//causes memory change which triggers bindings like \n\n this.filesChange.emit( this.files )\n\n if(files.length){\n this.fileChange.emit( this.file=files[0] )\n\n if(this.lastBaseUrlChange.observers.length){\n dataUrl( files[0] )\n .then( url=>this.lastBaseUrlChange.emit(url) )\n }\n }\n\n //will be checked for input value clearing\n this.lastFileCount = this.files.length\n }\n\n /** called when input has files */\n changeFn(event:any) {\n var fileList = event.__files_ || (event.target && event.target.files)\n\n if (!fileList) return;\n\n this.stopEvent(event);\n this.handleFiles(fileList)\n }\n\n clickHandler(evt:any){\n const elm = this.element.nativeElement\n if (elm.getAttribute('disabled') || this.fileDropDisabled){\n return false;\n }\n\n var r = detectSwipe(evt);\n // prevent the click if it is a swipe\n if ( r!==false ) return r;\n\n const fileElm = this.paramFileElm()\n fileElm.click()\n //fileElm.dispatchEvent( new Event('click') );\n this.beforeSelect()\n\n return false;\n }\n\n beforeSelect(){\n if( this.files && this.lastFileCount===this.files.length )return\n\n //if no files in array, be sure browser doesnt prevent reselect of same file (see github issue 27)\n this.fileElm.value = null\n }\n\n isEmptyAfterSelection():boolean {\n return !!this.element.nativeElement.attributes.multiple;\n }\n\n eventToTransfer(event:any):any {\n if(event.dataTransfer)return event.dataTransfer\n return event.originalEvent ? event.originalEvent.dataTransfer : null\n }\n\n stopEvent(event:any):any {\n event.preventDefault();\n event.stopPropagation();\n }\n\n transferHasFiles(transfer:any):any {\n if (!transfer.types) {\n return false;\n }\n\n if (transfer.types.indexOf) {\n return transfer.types.indexOf('Files') !== -1;\n } else if (transfer.types.contains) {\n return transfer.types.contains('Files');\n } else {\n return false;\n }\n }\n\n eventToFiles(event:Event){\n const transfer = this.eventToTransfer(event);\n if( transfer ){\n if(transfer.files && transfer.files.length){\n return transfer.files\n }\n if(transfer.items && transfer.items.length){\n return transfer.items\n }\n }\n return []\n }\n\n applyExifRotations(\n files:File[]\n ):Promise{\n const mapper = (\n file:File,index:number\n ):Promise=>{\n return applyExifRotation(file)\n .then( fixedFile=>files.splice(index, 1, fixedFile) )\n }\n\n const proms:Promise[] = []\n for(let x=files.length-1; x >= 0; --x){\n proms[x] = mapper( files[x], x )\n }\n return Promise.all( proms ).then( ()=>files )\n }\n\n @HostListener('change', ['$event'])\n onChange(event:Event):void {\n let files = this.element.nativeElement.files || this.eventToFiles(event)\n\n if(!files.length)return\n\n this.stopEvent(event);\n this.handleFiles(files)\n }\n\n getFileFilterFailName(\n file:File\n ):string | undefined{\n for(let i = 0; i < this.filters.length; i++){\n if( !this.filters[i].fn.call(this, file) ){\n return this.filters[i].name\n }\n }\n return undefined\n }\n\n isFileValid(file:File):boolean{\n const noFilters = !this.accept && (!this.filters || !this.filters.length)\n if( noFilters ){\n return true//we have no filters so all files are valid\n }\n\n return this.getFileFilterFailName(file) ? false : true\n }\n\n isFilesValid(files:File[]){\n for(let x=files.length-1; x >= 0; --x){\n if( !this.isFileValid(files[x]) ){\n return false\n }\n }\n return true\n }\n\n protected _acceptFilter(item:File):boolean {\n return acceptType(this.accept, item.type, item.name)\n }\n\n protected _fileSizeFilter(item:File):boolean {\n return !(this.maxSize && item.size > this.maxSize);\n }\n\n /** browsers try hard to conceal data about file drags, this tends to undo that */\n filesToWriteableObject( files:File[] ):dragMeta[]{\n const jsonFiles:dragMeta[] = []\n for(let x=0; x < files.length; ++x){\n jsonFiles.push({\n type:files[x].type,\n kind:files[x][\"kind\"]\n })\n }\n return jsonFiles\n }\n}\n","import { Directive, Input } from \"@angular/core\"\nimport { ngf } from \"./ngf.directive\"\n\n@Directive({\n selector: \"[ngfSelect]\",\n exportAs: \"ngfSelect\"\n})\nexport class ngfSelect extends ngf {\n @Input() selectable:any = true\n}","import {\n Directive, EventEmitter,\n HostListener, Input, Output\n} from '@angular/core';\nimport { ngf, dragMeta } from \"./ngf.directive\"\n\n@Directive({\n selector: \"[ngfDrop]\",\n exportAs: \"ngfDrop\"\n})\nexport class ngfDrop extends ngf {\n @Output() fileOver:EventEmitter = new EventEmitter();\n\n @Input() validDrag:boolean = false\n @Output() validDragChange:EventEmitter = new EventEmitter()\n\n @Input() invalidDrag = false\n @Output() invalidDragChange:EventEmitter = new EventEmitter()\n\n @Input() dragFiles !: dragMeta[]\n @Output() dragFilesChange:EventEmitter = new EventEmitter()\n\n @HostListener('drop', ['$event'])\n onDrop(event:Event):void {\n if(this.fileDropDisabled){\n this.stopEvent(event);\n return\n }\n\n this.closeDrags()\n let files = this.eventToFiles(event)\n\n if(!files.length)return\n\n this.stopEvent(event);\n this.handleFiles(files)\n }\n\n handleFiles(files:File[]){\n this.fileOver.emit(false)//turn-off dragover\n super.handleFiles(files)\n }\n\n @HostListener('dragover', ['$event'])\n onDragOver(event:Event):void {\n if(this.fileDropDisabled){\n this.stopEvent(event);\n return\n }\n\n const transfer = this.eventToTransfer(event)\n\n let files = this.eventToFiles(event)\n\n let jsonFiles = this.filesToWriteableObject(files)\n this.dragFilesChange.emit( this.dragFiles=jsonFiles )\n\n if( files.length ){\n this.validDrag = this.isFilesValid(files)\n }else{\n //Safari, IE11 & some browsers do NOT tell you about dragged files until dropped. Always consider a valid drag\n this.validDrag = true\n }\n\n this.validDragChange.emit(this.validDrag)\n\n this.invalidDrag = !this.validDrag\n this.invalidDragChange.emit(this.invalidDrag)\n\n transfer.dropEffect = 'copy'//change cursor and such\n this.stopEvent(event)\n this.fileOver.emit(true)\n }\n\n closeDrags(){\n delete this.validDrag\n this.validDragChange.emit(this.validDrag)\n this.invalidDrag = false\n this.invalidDragChange.emit(this.invalidDrag)\n delete this.dragFiles\n this.dragFilesChange.emit( this.dragFiles )\n }\n\n @HostListener('dragleave', ['$event'])\n onDragLeave(event:Event):any {\n if(this.fileDropDisabled){\n this.stopEvent(event);\n return\n }\n \n this.closeDrags()\n\n if ((this as any).element) {\n if (event.currentTarget === (this as any).element[0]) {\n return;\n }\n }\n\n this.stopEvent(event);\n this.fileOver.emit(false);\n }\n}","import { Directive, ElementRef, Input } from '@angular/core';\nimport { dataUrl } from './fileTools';\n\n@Directive({selector: '[ngfBackground]'})\nexport class ngfBackground {\n @Input('ngfBackground') file:any\n\n constructor(public ElementRef:ElementRef){}\n\n ngOnChanges( _changes:any ){\n dataUrl(this.file)\n .then(src=>{\n const urlString = 'url(\\'' + (src || '') + '\\')'\n this.ElementRef.nativeElement.style.backgroundImage = urlString\n })\n }\n}\n","import { Directive, EventEmitter, Output, Input } from '@angular/core';\n\n@Directive({selector: 'ngfUploadStatus'})\nexport class ngfUploadStatus {\n @Input() percent:number = 0\n @Output() percentChange:EventEmitter = new EventEmitter()\n @Input() httpEvent !: Event\n\n ngOnChanges( changes ){\n if( changes.httpEvent && changes.httpEvent.currentValue ){\n const event = changes.httpEvent.currentValue\n if (event.loaded && event.total) {\n setTimeout(()=>{\n this.percent = Math.round(100 * event.loaded / event.total);\n this.percentChange.emit( this.percent )\n }, 0)\n }\n }\n }\n}","import {\n IterableDiffer,\n IterableDiffers,\n Directive, EventEmitter,\n Output, Input\n} from '@angular/core';\n\n@Directive({selector: 'ngfFormData'})\nexport class ngfFormData {\n @Input() files !: File[]\n @Input() postName:string = \"file\"\n @Input() fileName !: string//force file name\n\n @Input() FormData:FormData = new FormData()\n @Output() FormDataChange:EventEmitter = new EventEmitter()\n\n differ:IterableDiffer<{}>\n\n constructor(IterableDiffers: IterableDiffers){\n this.differ = IterableDiffers.find([]).create()\n }\n\n ngDoCheck(){\n var changes = this.differ.diff( this.files );\n\n if (changes) {\n setTimeout(()=>this.buildFormData(), 0)\n }\n }\n\n buildFormData(){\n const isArray = typeof(this.files)==='object' && this.files.constructor===Array\n\n if( isArray ){\n this.FormData = new FormData()\n const files = this.files || []\n files.forEach(file=>\n this.FormData.append(this.postName, file, this.fileName||file.name)\n )\n this.FormDataChange.emit( this.FormData )\n }else{\n delete this.FormData\n }\n }\n}","import { Directive, ElementRef, Input } from '@angular/core';\nimport { dataUrl } from './fileTools';\n\n@Directive({ selector: '[ngfSrc]' })\nexport class ngfSrc {\n @Input('ngfSrc') file: any\n\n constructor(public ElementRef: ElementRef) { }\n\n ngOnChanges(_changes: any) {\n dataUrl(this.file)\n .then(src=>\n this.ElementRef.nativeElement.src = src\n )\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { ngfBackground } from './ngfBackground.directive';\nimport { ngfDrop } from './ngfDrop.directive';\nimport { ngf } from './ngf.directive';\nimport { ngfSelect } from './ngfSelect.directive';\nimport { ngfUploadStatus } from './ngfUploadStatus.directive';\nimport { ngfFormData } from './ngfFormData.directive';\nimport { ngfSrc } from './ngfSrc.directive';\n//import{ HttpModule } from '@angular/http';\n\nconst declarations = [\n ngfDrop,\n ngfSelect,\n ngfBackground,\n ngfSrc,\n ngfUploadStatus,\n ngfFormData,\n ngf\n]\n\n@NgModule({\n imports: [\n CommonModule\n //,HttpModule\n ],\n declarations: declarations,\n exports: declarations//[HttpModule, ...declarations]\n}) export class ngfModule {}"]} \ No newline at end of file diff --git a/dist/esm2015/file-upload/doc-event-help.functions.js b/dist/esm2015/file-upload/doc-event-help.functions.js index b3d97a21..776d23e9 100644 --- a/dist/esm2015/file-upload/doc-event-help.functions.js +++ b/dist/esm2015/file-upload/doc-event-help.functions.js @@ -19,14 +19,17 @@ export const detectSwipe = function (evt) { var currentY = touches[0].clientY; if ((Math.abs(currentX - initialTouchStartX) > 20) || (Math.abs(currentY - initialTouchStartY) > 20)) { - evt.stopPropagation(); - if (evt.cancelable) { - evt.preventDefault(); - } - return false; + // Swipe detected + return true; + } + // touch was a 'tap' so prevent propogation and prevent + // device follow-up actions (click, mouseup, mousedown, etc.) + evt.stopPropagation(); + if (evt.cancelable) { + evt.preventDefault(); } } - return true; + return false; } } return false; @@ -55,4 +58,4 @@ export const createFileInput = function () { fileElem.type = "file"; return fileElem; }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jLWV2ZW50LWhlbHAuZnVuY3Rpb25zLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uL3NyYy8iLCJzb3VyY2VzIjpbImZpbGUtdXBsb2FkL2RvYy1ldmVudC1oZWxwLmZ1bmN0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsVUFBUyxHQUFPO0lBQ3pDLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDbkMsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxLQUFLLE9BQU8sSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxLQUFLLE1BQU0sQ0FBQztBQUNwRixDQUFDLENBQUE7QUFFRCxJQUFJLGtCQUFrQixHQUFHLENBQUMsQ0FBQztBQUMzQixJQUFJLGtCQUFrQixHQUFHLENBQUMsQ0FBQztBQUMzQixNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsVUFBUyxHQUFPO0lBQ3pDLElBQUksT0FBTyxHQUFHLEdBQUcsQ0FBQyxjQUFjLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxJQUFJLEdBQUcsQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDNUYsSUFBSSxPQUFPLEVBQUU7UUFDWCxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssWUFBWSxFQUFFO1lBQzdCLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDeEMsa0JBQWtCLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUN4QyxPQUFPLElBQUksQ0FBQyxDQUFDLDRCQUE0QjtTQUMxQzthQUFNO1lBQ0wsdUNBQXVDO1lBQ3ZDLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxVQUFVLEVBQUU7Z0JBQzNCLElBQUksUUFBUSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7Z0JBQ2xDLElBQUksUUFBUSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsR0FBRyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDaEQsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsR0FBRyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO29CQUNoRCxHQUFHLENBQUMsZUFBZSxFQUFFLENBQUM7b0JBQ3RCLElBQUksR0FBRyxDQUFDLFVBQVUsRUFBRTt3QkFDbEIsR0FBRyxDQUFDLGNBQWMsRUFBRSxDQUFDO3FCQUN0QjtvQkFDRCxPQUFPLEtBQUssQ0FBQztpQkFDZDthQUNGO1lBQ0QsT0FBTyxJQUFJLENBQUM7U0FDYjtLQUNGO0lBQ0QsT0FBTyxLQUFLLENBQUE7QUFDZCxDQUFDLENBQUE7QUFFRCxNQUFNLENBQUMsTUFBTSw0QkFBNEIsR0FBRztJQUMxQyxJQUFJLFFBQVEsR0FBRyxlQUFlLEVBQUUsQ0FBQTtJQUNoQyxJQUFJLEtBQUssR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzVDLEtBQUssQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFBO0lBQzFCLEtBQUssQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQTtJQUNqQyxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUE7SUFDakMsS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFBO0lBQy9CLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQTtJQUN6QixLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUE7SUFDMUIsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFBO0lBQzNCLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQTtJQUMxQixLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUE7SUFDM0IsS0FBSyxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUMsSUFBSSxDQUFDLENBQUE7SUFFbkMsdUNBQXVDO0lBQ3ZDLDhDQUE4QztJQUU5QyxLQUFLLENBQUMsV0FBVyxDQUFFLFFBQVEsQ0FBRSxDQUFBO0lBQzdCLHFDQUFxQztJQUVyQyxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMsQ0FBQTtBQUVELE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRztJQUM3QixJQUFJLFFBQVEsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQy9DLFFBQVEsQ0FBQyxJQUFJLEdBQUMsTUFBTSxDQUFBO0lBQ3BCLE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBpc0ZpbGVJbnB1dCA9IGZ1bmN0aW9uKGVsbTphbnkpe1xuICBjb25zdCB0eSA9IGVsbS5nZXRBdHRyaWJ1dGUoJ3R5cGUnKVxuICByZXR1cm4gZWxtLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2lucHV0JyAmJiB0eSAmJiB0eS50b0xvd2VyQ2FzZSgpID09PSAnZmlsZSc7XG59XG5cbmxldCBpbml0aWFsVG91Y2hTdGFydFkgPSAwO1xubGV0IGluaXRpYWxUb3VjaFN0YXJ0WCA9IDA7XG5leHBvcnQgY29uc3QgZGV0ZWN0U3dpcGUgPSBmdW5jdGlvbihldnQ6YW55KTpib29sZWFuIHtcbiAgdmFyIHRvdWNoZXMgPSBldnQuY2hhbmdlZFRvdWNoZXMgfHwgKGV2dC5vcmlnaW5hbEV2ZW50ICYmIGV2dC5vcmlnaW5hbEV2ZW50LmNoYW5nZWRUb3VjaGVzKTtcbiAgaWYgKHRvdWNoZXMpIHtcbiAgICBpZiAoZXZ0LnR5cGUgPT09ICd0b3VjaHN0YXJ0Jykge1xuICAgICAgaW5pdGlhbFRvdWNoU3RhcnRYID0gdG91Y2hlc1swXS5jbGllbnRYO1xuICAgICAgaW5pdGlhbFRvdWNoU3RhcnRZID0gdG91Y2hlc1swXS5jbGllbnRZO1xuICAgICAgcmV0dXJuIHRydWU7IC8vIGRvbid0IGJsb2NrIGV2ZW50IGRlZmF1bHRcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gcHJldmVudCBzY3JvbGwgZnJvbSB0cmlnZ2VyaW5nIGV2ZW50XG4gICAgICBpZiAoZXZ0LnR5cGUgPT09ICd0b3VjaGVuZCcpIHtcbiAgICAgICAgdmFyIGN1cnJlbnRYID0gdG91Y2hlc1swXS5jbGllbnRYO1xuICAgICAgICB2YXIgY3VycmVudFkgPSB0b3VjaGVzWzBdLmNsaWVudFk7XG4gICAgICAgIGlmICgoTWF0aC5hYnMoY3VycmVudFggLSBpbml0aWFsVG91Y2hTdGFydFgpID4gMjApIHx8XG4gICAgICAgICAgKE1hdGguYWJzKGN1cnJlbnRZIC0gaW5pdGlhbFRvdWNoU3RhcnRZKSA+IDIwKSkge1xuICAgICAgICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBpZiAoZXZ0LmNhbmNlbGFibGUpIHtcbiAgICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUludmlzaWJsZUZpbGVJbnB1dFdyYXAgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGZpbGVFbGVtID0gY3JlYXRlRmlsZUlucHV0KClcbiAgdmFyIGxhYmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGFiZWwnKTtcbiAgbGFiZWwuaW5uZXJIVE1MID0gJ3VwbG9hZCdcbiAgbGFiZWwuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nXG4gIGxhYmVsLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJ1xuICBsYWJlbC5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nXG4gIGxhYmVsLnN0eWxlLndpZHRoID0gJzBweCdcbiAgbGFiZWwuc3R5bGUuaGVpZ2h0ID0gJzBweCdcbiAgbGFiZWwuc3R5bGUuYm9yZGVyID0gJ25vbmUnXG4gIGxhYmVsLnN0eWxlLm1hcmdpbiA9ICcwcHgnXG4gIGxhYmVsLnN0eWxlLnBhZGRpbmcgPSAnMHB4J1xuICBsYWJlbC5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywnLTEnKVxuICBcbiAgLy9iaW5kQXR0clRvRmlsZUlucHV0KGZpbGVFbGVtLCBsYWJlbCk7XG4gIC8vZ2VuZXJhdGVkRWxlbXMucHVzaCh7ZWw6IGVsZW0sIHJlZjogbGFiZWx9KTtcblxuICBsYWJlbC5hcHBlbmRDaGlsZCggZmlsZUVsZW0gKVxuICAvL2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoIGxhYmVsICk7XG5cbiAgcmV0dXJuIGxhYmVsO1xufVxuXG5leHBvcnQgY29uc3QgY3JlYXRlRmlsZUlucHV0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBmaWxlRWxlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XG4gIGZpbGVFbGVtLnR5cGU9XCJmaWxlXCJcbiAgcmV0dXJuIGZpbGVFbGVtO1xufVxuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jLWV2ZW50LWhlbHAuZnVuY3Rpb25zLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uL3NyYy8iLCJzb3VyY2VzIjpbImZpbGUtdXBsb2FkL2RvYy1ldmVudC1oZWxwLmZ1bmN0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsVUFBUyxHQUFPO0lBQ3pDLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDbkMsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxLQUFLLE9BQU8sSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxLQUFLLE1BQU0sQ0FBQztBQUNwRixDQUFDLENBQUE7QUFFRCxJQUFJLGtCQUFrQixHQUFHLENBQUMsQ0FBQztBQUMzQixJQUFJLGtCQUFrQixHQUFHLENBQUMsQ0FBQztBQUMzQixNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsVUFBUyxHQUFPO0lBQ3pDLElBQUksT0FBTyxHQUFHLEdBQUcsQ0FBQyxjQUFjLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxJQUFJLEdBQUcsQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDNUYsSUFBSSxPQUFPLEVBQUU7UUFDWCxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssWUFBWSxFQUFFO1lBQzdCLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDeEMsa0JBQWtCLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUN4QyxPQUFPLElBQUksQ0FBQyxDQUFDLDRCQUE0QjtTQUMxQzthQUFNO1lBQ0wsdUNBQXVDO1lBQ3ZDLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxVQUFVLEVBQUU7Z0JBQzNCLElBQUksUUFBUSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7Z0JBQ2xDLElBQUksUUFBUSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsR0FBRyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDaEQsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsR0FBRyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO29CQUNoRCxpQkFBaUI7b0JBQ2pCLE9BQU8sSUFBSSxDQUFDO2lCQUNiO2dCQUNELHVEQUF1RDtnQkFDdkQsNkRBQTZEO2dCQUM3RCxHQUFHLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ3RCLElBQUksR0FBRyxDQUFDLFVBQVUsRUFBRTtvQkFDbEIsR0FBRyxDQUFDLGNBQWMsRUFBRSxDQUFDO2lCQUN0QjthQUNGO1lBQ0QsT0FBTyxLQUFLLENBQUM7U0FDZDtLQUNGO0lBQ0QsT0FBTyxLQUFLLENBQUE7QUFDZCxDQUFDLENBQUE7QUFFRCxNQUFNLENBQUMsTUFBTSw0QkFBNEIsR0FBRztJQUMxQyxJQUFJLFFBQVEsR0FBRyxlQUFlLEVBQUUsQ0FBQTtJQUNoQyxJQUFJLEtBQUssR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzVDLEtBQUssQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFBO0lBQzFCLEtBQUssQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQTtJQUNqQyxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUE7SUFDakMsS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFBO0lBQy9CLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQTtJQUN6QixLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUE7SUFDMUIsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFBO0lBQzNCLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQTtJQUMxQixLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUE7SUFDM0IsS0FBSyxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUMsSUFBSSxDQUFDLENBQUE7SUFFbkMsdUNBQXVDO0lBQ3ZDLDhDQUE4QztJQUU5QyxLQUFLLENBQUMsV0FBVyxDQUFFLFFBQVEsQ0FBRSxDQUFBO0lBQzdCLHFDQUFxQztJQUVyQyxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMsQ0FBQTtBQUVELE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRztJQUM3QixJQUFJLFFBQVEsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQy9DLFFBQVEsQ0FBQyxJQUFJLEdBQUMsTUFBTSxDQUFBO0lBQ3BCLE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBpc0ZpbGVJbnB1dCA9IGZ1bmN0aW9uKGVsbTphbnkpe1xuICBjb25zdCB0eSA9IGVsbS5nZXRBdHRyaWJ1dGUoJ3R5cGUnKVxuICByZXR1cm4gZWxtLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2lucHV0JyAmJiB0eSAmJiB0eS50b0xvd2VyQ2FzZSgpID09PSAnZmlsZSc7XG59XG5cbmxldCBpbml0aWFsVG91Y2hTdGFydFkgPSAwO1xubGV0IGluaXRpYWxUb3VjaFN0YXJ0WCA9IDA7XG5leHBvcnQgY29uc3QgZGV0ZWN0U3dpcGUgPSBmdW5jdGlvbihldnQ6YW55KTpib29sZWFuIHtcbiAgdmFyIHRvdWNoZXMgPSBldnQuY2hhbmdlZFRvdWNoZXMgfHwgKGV2dC5vcmlnaW5hbEV2ZW50ICYmIGV2dC5vcmlnaW5hbEV2ZW50LmNoYW5nZWRUb3VjaGVzKTtcbiAgaWYgKHRvdWNoZXMpIHtcbiAgICBpZiAoZXZ0LnR5cGUgPT09ICd0b3VjaHN0YXJ0Jykge1xuICAgICAgaW5pdGlhbFRvdWNoU3RhcnRYID0gdG91Y2hlc1swXS5jbGllbnRYO1xuICAgICAgaW5pdGlhbFRvdWNoU3RhcnRZID0gdG91Y2hlc1swXS5jbGllbnRZO1xuICAgICAgcmV0dXJuIHRydWU7IC8vIGRvbid0IGJsb2NrIGV2ZW50IGRlZmF1bHRcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gcHJldmVudCBzY3JvbGwgZnJvbSB0cmlnZ2VyaW5nIGV2ZW50XG4gICAgICBpZiAoZXZ0LnR5cGUgPT09ICd0b3VjaGVuZCcpIHtcbiAgICAgICAgdmFyIGN1cnJlbnRYID0gdG91Y2hlc1swXS5jbGllbnRYO1xuICAgICAgICB2YXIgY3VycmVudFkgPSB0b3VjaGVzWzBdLmNsaWVudFk7XG4gICAgICAgIGlmICgoTWF0aC5hYnMoY3VycmVudFggLSBpbml0aWFsVG91Y2hTdGFydFgpID4gMjApIHx8XG4gICAgICAgICAgKE1hdGguYWJzKGN1cnJlbnRZIC0gaW5pdGlhbFRvdWNoU3RhcnRZKSA+IDIwKSkge1xuICAgICAgICAgIC8vIFN3aXBlIGRldGVjdGVkXG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gdG91Y2ggd2FzIGEgJ3RhcCcgc28gcHJldmVudCBwcm9wb2dhdGlvbiBhbmQgcHJldmVudFxuICAgICAgICAvLyBkZXZpY2UgZm9sbG93LXVwIGFjdGlvbnMgKGNsaWNrLCBtb3VzZXVwLCBtb3VzZWRvd24sIGV0Yy4pXG4gICAgICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgaWYgKGV2dC5jYW5jZWxhYmxlKSB7XG4gICAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVJbnZpc2libGVGaWxlSW5wdXRXcmFwID0gZnVuY3Rpb24oKSB7XG4gIHZhciBmaWxlRWxlbSA9IGNyZWF0ZUZpbGVJbnB1dCgpXG4gIHZhciBsYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xhYmVsJyk7XG4gIGxhYmVsLmlubmVySFRNTCA9ICd1cGxvYWQnXG4gIGxhYmVsLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJ1xuICBsYWJlbC5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSdcbiAgbGFiZWwuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJ1xuICBsYWJlbC5zdHlsZS53aWR0aCA9ICcwcHgnXG4gIGxhYmVsLnN0eWxlLmhlaWdodCA9ICcwcHgnXG4gIGxhYmVsLnN0eWxlLmJvcmRlciA9ICdub25lJ1xuICBsYWJlbC5zdHlsZS5tYXJnaW4gPSAnMHB4J1xuICBsYWJlbC5zdHlsZS5wYWRkaW5nID0gJzBweCdcbiAgbGFiZWwuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsJy0xJylcbiAgXG4gIC8vYmluZEF0dHJUb0ZpbGVJbnB1dChmaWxlRWxlbSwgbGFiZWwpO1xuICAvL2dlbmVyYXRlZEVsZW1zLnB1c2goe2VsOiBlbGVtLCByZWY6IGxhYmVsfSk7XG5cbiAgbGFiZWwuYXBwZW5kQ2hpbGQoIGZpbGVFbGVtIClcbiAgLy9kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKCBsYWJlbCApO1xuXG4gIHJldHVybiBsYWJlbDtcbn1cblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUZpbGVJbnB1dCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgZmlsZUVsZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuICBmaWxlRWxlbS50eXBlPVwiZmlsZVwiXG4gIHJldHVybiBmaWxlRWxlbTtcbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/fesm2015/angular-file.js b/dist/fesm2015/angular-file.js index 83cb8371..50932688 100644 --- a/dist/fesm2015/angular-file.js +++ b/dist/fesm2015/angular-file.js @@ -22,14 +22,17 @@ const detectSwipe = function (evt) { var currentY = touches[0].clientY; if ((Math.abs(currentX - initialTouchStartX) > 20) || (Math.abs(currentY - initialTouchStartY) > 20)) { - evt.stopPropagation(); - if (evt.cancelable) { - evt.preventDefault(); - } - return false; + // Swipe detected + return true; + } + // touch was a 'tap' so prevent propogation and prevent + // device follow-up actions (click, mouseup, mousedown, etc.) + evt.stopPropagation(); + if (evt.cancelable) { + evt.preventDefault(); } } - return true; + return false; } } return false; diff --git a/dist/fesm2015/angular-file.js.map b/dist/fesm2015/angular-file.js.map index 5042e624..bff1dcde 100644 --- a/dist/fesm2015/angular-file.js.map +++ b/dist/fesm2015/angular-file.js.map @@ -1 +1 @@ -{"version":3,"file":"angular-file.js","sources":["../src/file-upload/doc-event-help.functions.ts","../src/file-upload/fileTools.ts","../src/file-upload/ngf.directive.ts","../src/file-upload/ngfSelect.directive.ts","../src/file-upload/ngfDrop.directive.ts","../src/file-upload/ngfBackground.directive.ts","../src/file-upload/ngfUploadStatus.directive.ts","../src/file-upload/ngfFormData.directive.ts","../src/file-upload/ngfSrc.directive.ts","../src/file-upload/ngf.module.ts","../../src/public-api.ts","../../src/angular-file.ts"],"sourcesContent":["export const isFileInput = function(elm:any){\n const ty = elm.getAttribute('type')\n return elm.tagName.toLowerCase() === 'input' && ty && ty.toLowerCase() === 'file';\n}\n\nlet initialTouchStartY = 0;\nlet initialTouchStartX = 0;\nexport const detectSwipe = function(evt:any):boolean {\n var touches = evt.changedTouches || (evt.originalEvent && evt.originalEvent.changedTouches);\n if (touches) {\n if (evt.type === 'touchstart') {\n initialTouchStartX = touches[0].clientX;\n initialTouchStartY = touches[0].clientY;\n return true; // don't block event default\n } else {\n // prevent scroll from triggering event\n if (evt.type === 'touchend') {\n var currentX = touches[0].clientX;\n var currentY = touches[0].clientY;\n if ((Math.abs(currentX - initialTouchStartX) > 20) ||\n (Math.abs(currentY - initialTouchStartY) > 20)) {\n evt.stopPropagation();\n if (evt.cancelable) {\n evt.preventDefault();\n }\n return false;\n }\n }\n return true;\n }\n }\n return false\n}\n\nexport const createInvisibleFileInputWrap = function() {\n var fileElem = createFileInput()\n var label = document.createElement('label');\n label.innerHTML = 'upload'\n label.style.visibility = 'hidden'\n label.style.position = 'absolute'\n label.style.overflow = 'hidden'\n label.style.width = '0px'\n label.style.height = '0px'\n label.style.border = 'none'\n label.style.margin = '0px'\n label.style.padding = '0px'\n label.setAttribute('tabindex','-1')\n \n //bindAttrToFileInput(fileElem, label);\n //generatedElems.push({el: elem, ref: label});\n\n label.appendChild( fileElem )\n //document.body.appendChild( label );\n\n return label;\n}\n\nexport const createFileInput = function() {\n var fileElem = document.createElement('input');\n fileElem.type=\"file\"\n return fileElem;\n}\n","export function getWindow():any{return window}\n\nexport function acceptType(accept:string, type:string, name?:string):boolean { \n if( !accept ){\n return true\n }\n\n const defs = accept.split(',')\n let regx:RegExp\n let acceptRegString:string\n\n for(let x=defs.length-1; x >= 0; --x){\n //Escapes dots in mimetype \n acceptRegString = defs[x]\n //trim\n acceptRegString = acceptRegString.replace(/(^\\s+|\\s+$)/g,'')\n //Escapes stars in mimetype \n acceptRegString = acceptRegString.replace(/\\*/g,'.*')\n //let acceptReg = '^((' + acceptRegString\n //acceptReg = acceptReg.replace(/,/g,')|(') + '))$'\n \n //try by mime\n regx = new RegExp(acceptRegString, 'gi')\n if( type.search(regx)>=0 ){\n return true\n }\n\n //try by ext\n if( acceptRegString.substring(0, 1)=='.' ){ \n acceptRegString = '\\\\'+ acceptRegString//.substring(1, acceptRegString.length-1)//remove dot at front\n regx = new RegExp(acceptRegString+'$', 'i')\n if( (name||type).search(regx)>=0 ){\n return true\n }\n }\n }\n return false\n}\n\nexport interface InvalidFileItem{\n file:File\n type:string\n}\n\nexport function arrayBufferToBase64(buffer:any) {\n var binary = '';\n var bytes = new Uint8Array(buffer);\n var len = bytes.byteLength;\n for (var i = 0; i < len; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return window.btoa(binary);\n}\n\nexport function dataUrltoBlob(\n dataurl:string,\n name:string,\n origSize?:any\n):Blob{\n var arr = dataurl.split(',');\n var mimeMatch = arr[0].match(/:(.*?);/)\n var mime:string = mimeMatch ? mimeMatch[1] : 'text/plain'\n var bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);\n while (n--) {\n u8arr[n] = bstr.charCodeAt(n);\n }\n var blob = new window.Blob([u8arr], {type: mime});\n blob[\"name\"] = name;\n blob[\"$ngfOrigSize\"] = origSize;\n return blob;\n}\n\nexport interface orientationMeta{\n orientation: number\n fixedArrayBuffer?:any[]\n}\n\nexport function applyTransform(\n ctx:CanvasRenderingContext2D,\n orientation:number,\n width:number,\n height:number\n) {\n switch (orientation) {\n case 2:\n return ctx.transform(-1, 0, 0, 1, width, 0);\n case 3:\n return ctx.transform(-1, 0, 0, -1, width, height);\n case 4:\n return ctx.transform(1, 0, 0, -1, 0, height);\n case 5:\n return ctx.transform(0, 1, 1, 0, 0, 0);\n case 6:\n return ctx.transform(0, 1, -1, 0, height, 0);\n case 7:\n return ctx.transform(0, -1, -1, 0, height, width);\n case 8:\n return ctx.transform(0, -1, 1, 0, 0, width);\n }\n}\n\nexport function fixFileOrientationByMeta(\n file:File, result:orientationMeta\n):Promise{\n return dataUrl(file, true)\n .then(url=>{\n var canvas = document.createElement('canvas');\n var img = document.createElement('img');\n\n return >new Promise(function(res,rej){\n img.onload = function () {\n try {\n canvas.width = result.orientation > 4 ? img.height : img.width\n canvas.height = result.orientation > 4 ? img.width : img.height\n var ctx = canvas.getContext('2d')\n applyTransform(ctx, result.orientation, img.width, img.height)\n ctx.drawImage(img, 0, 0);\n var dataUrl = canvas.toDataURL(file.type || 'image/WebP', 0.934)\n const base = arrayBufferToBase64(result.fixedArrayBuffer)\n dataUrl = restoreExif(base, dataUrl)\n var blob = dataUrltoBlob(dataUrl, file.name)\n const newFile = blobToFile(blob, file.name);\n res(newFile);\n } catch (e) {\n rej(e)\n }\n };\n img.onerror = rej;\n img.src = url; \n })\n })\n}\n\nexport function applyExifRotation(\n file:File\n):Promise{\n if (file.type.indexOf('image/jpeg') !== 0) {\n return Promise.resolve(file);\n }\n\n return readOrientation(file)\n .then((result:orientationMeta)=>{\n if (result.orientation < 2 || result.orientation > 8) {\n return file\n }\n \n return fixFileOrientationByMeta(file,result)\n })\n}\n\nexport function readOrientation(\n file:File\n):Promise{\n return new Promise((res,rej)=>{\n var reader = new FileReader();\n var slicedFile = file.slice ? file.slice(0, 64 * 1024) : file;\n reader.readAsArrayBuffer(slicedFile);\n reader.onerror = rej\n reader.onload = function (e:any) {\n var result:orientationMeta = {orientation: 1};\n var view = new DataView( this.result );\n if (view.getUint16(0, false) !== 0xFFD8) return res(result);\n\n var length = view.byteLength,\n offset = 2;\n while (offset < length) {\n var marker = view.getUint16(offset, false);\n offset += 2;\n if (marker === 0xFFE1) {\n if (view.getUint32(offset += 2, false) !== 0x45786966) return res(result);\n\n var little = view.getUint16(offset += 6, false) === 0x4949;\n offset += view.getUint32(offset + 4, little);\n var tags = view.getUint16(offset, little);\n offset += 2;\n for (var i = 0; i < tags; i++)\n if (view.getUint16(offset + (i * 12), little) === 0x0112) {\n var orientation = view.getUint16(offset + (i * 12) + 8, little);\n if (orientation >= 2 && orientation <= 8) {\n view.setUint16(offset + (i * 12) + 8, 1, little);\n result.fixedArrayBuffer = e.target.result;\n }\n result.orientation = orientation;\n return res(result);\n }\n } else if ((marker & 0xFF00) !== 0xFF00) break;\n else offset += view.getUint16(offset, false);\n }\n return res(result);\n };\n })\n}\n\n/** converts file-input file into base64 dataUri */\nexport function dataUrl(\n file:any,\n disallowObjectUrl?:any\n):Promise{\n if (!file) return Promise.resolve(file)\n \n if ((disallowObjectUrl && file.$ngfDataUrl != null) || (!disallowObjectUrl && file.$ngfBlobUrl != null)) {\n return Promise.resolve( disallowObjectUrl ? file.$ngfDataUrl : file.$ngfBlobUrl )\n }\n\n var p = disallowObjectUrl ? file.$$ngfDataUrlPromise : file.$$ngfBlobUrlPromise;\n if (p) return p;\n\n const win = getWindow()\n let deferred:Promise\n if (win.FileReader && file &&\n (!win.FileAPI || navigator.userAgent.indexOf('MSIE 8') === -1 || file.size < 20000) &&\n (!win.FileAPI || navigator.userAgent.indexOf('MSIE 9') === -1 || file.size < 4000000)) {\n //prefer URL.createObjectURL for handling refrences to files of all sizes\n //since it doesn´t build a large string in memory\n var URL = win.URL || win.webkitURL;\n if (FileReader) {\n deferred = new Promise((res,rej)=>{\n var fileReader = new FileReader();\n fileReader.onload = function (event:any) {\n file.$ngfDataUrl = event.target.result;\n delete file.$ngfDataUrl;\n res( event.target.result )\n };\n fileReader.onerror = function (e) {\n file.$ngfDataUrl = '';\n rej(e)\n };\n fileReader.readAsDataURL(file);\n })\n } else {\n var url:any;\n try {\n url = URL.createObjectURL(file);\n } catch (e) {\n return Promise.reject(e);\n }\n \n deferred = Promise.resolve( url )\n file.$ngfBlobUrl = url;\n }\n } else {\n file[disallowObjectUrl ? '$ngfDataUrl' : '$ngfBlobUrl'] = '';\n return Promise.reject( new Error('Browser does not support window.FileReader, window.FileReader, or window.FileAPI') )//deferred.reject();\n }\n\n if (disallowObjectUrl) {\n p = file.$$ngfDataUrlPromise = deferred;\n } else {\n p = file.$$ngfBlobUrlPromise = deferred;\n }\n\n p = p.then((x:any)=>{\n delete file[disallowObjectUrl ? '$$ngfDataUrlPromise' : '$$ngfBlobUrlPromise'];\n return x\n })\n\n return p;\n}\n\nexport function restoreExif(orig:any, resized:any) {\n var ExifRestorer:any = {\n KEY_STR:'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='\n }\n\n ExifRestorer.encode64 = function (input:any) {\n var output = '',\n chr1, chr2, chr3:any = '',\n enc1, enc2, enc3, enc4:any = '',\n i = 0;\n\n do {\n chr1 = input[i++];\n chr2 = input[i++];\n chr3 = input[i++];\n\n enc1 = chr1 >> 2;\n enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);\n enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);\n enc4 = chr3 & 63;\n\n if (isNaN(chr2)) {\n enc3 = enc4 = 64;\n } else if (isNaN(chr3)) {\n enc4 = 64;\n }\n\n output = output +\n this.KEY_STR.charAt(enc1) +\n this.KEY_STR.charAt(enc2) +\n this.KEY_STR.charAt(enc3) +\n this.KEY_STR.charAt(enc4);\n chr1 = chr2 = chr3 = '';\n enc1 = enc2 = enc3 = enc4 = '';\n } while (i < input.length);\n\n return output;\n };\n\n ExifRestorer.restore = function (origFileBase64:any, resizedFileBase64:any) {\n if (origFileBase64.match('data:image/jpeg;base64,')) {\n origFileBase64 = origFileBase64.replace('data:image/jpeg;base64,', '');\n }\n\n var rawImage:number[] = this.decode64(origFileBase64);\n var segments = this.slice2Segments(rawImage);\n\n var image = this.exifManipulation(resizedFileBase64, segments);\n\n return 'data:image/jpeg;base64,' + this.encode64(image);\n };\n\n\n ExifRestorer.exifManipulation = function (resizedFileBase64:any, segments:any) {\n var exifArray = this.getExifArray(segments),\n newImageArray = this.insertExif(resizedFileBase64, exifArray);\n return new Uint8Array(newImageArray);\n };\n\n ExifRestorer.getExifArray = function (segments:number[][]) {\n var seg;\n for (var x = 0; x < segments.length; x++) {\n seg = segments[x];\n if (seg[0] === 255 && seg[1] === 225) //(ff e1)\n {\n return seg;\n }\n }\n return [];\n };\n\n\n ExifRestorer.insertExif = function (resizedFileBase64:any, exifArray:any) {\n var imageData = resizedFileBase64.replace('data:image/jpeg;base64,', ''),\n buf = this.decode64(imageData),\n separatePoint = buf.indexOf(255, 3),\n mae = buf.slice(0, separatePoint),\n ato = buf.slice(separatePoint),\n array = mae;\n\n array = array.concat(exifArray);\n array = array.concat(ato);\n return array;\n };\n\n\n ExifRestorer.slice2Segments = function(\n rawImageArray:number[]\n ) {\n var head:number = 0,\n segments:number[][] = [];\n\n while (1) {\n if (rawImageArray[head] === 255 && rawImageArray[head + 1] === 218) {\n break;\n }\n if (rawImageArray[head] === 255 && rawImageArray[head + 1] === 216) {\n head += 2;\n }\n else {\n var length = rawImageArray[head + 2] * 256 + rawImageArray[head + 3]\n var endPoint = head + length + 2\n var seg:number[] = rawImageArray.slice(head, endPoint)\n segments.push(seg);\n head = endPoint;\n }\n if (head > rawImageArray.length) {\n break;\n }\n }\n\n return segments;\n };\n\n\n ExifRestorer.decode64 = function (\n input:any\n ):number[]{\n var chr1, chr2, chr3:any = '',\n enc1, enc2, enc3, enc4:any = '',\n i = 0,\n buf:number[] = [];\n\n // remove all characters that are not A-Z, a-z, 0-9, +, /, or =\n var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n if (base64test.exec(input)) {\n console.log('There were invalid base64 characters in the input text.');\n }\n input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, '');\n\n do {\n enc1 = this.KEY_STR.indexOf(input.charAt(i++));\n enc2 = this.KEY_STR.indexOf(input.charAt(i++));\n enc3 = this.KEY_STR.indexOf(input.charAt(i++));\n enc4 = this.KEY_STR.indexOf(input.charAt(i++));\n\n chr1 = (enc1 << 2) | (enc2 >> 4);\n chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\n chr3 = ((enc3 & 3) << 6) | enc4;\n\n buf.push(chr1);\n\n if (enc3 !== 64) {\n buf.push(chr2);\n }\n if (enc4 !== 64) {\n buf.push(chr3);\n }\n\n chr1 = chr2 = chr3 = '';\n enc1 = enc2 = enc3 = enc4 = '';\n\n } while (i < input.length);\n\n return buf;\n };\n\n return ExifRestorer.restore(orig, resized); //<= EXIF\n};\n\nfunction blobToFile(theBlob: Blob, fileName:string): File {\n var b: any = theBlob;\n //A Blob() is almost a File() - it's just missing the two properties below which we will add\n b.lastModifiedDate = new Date();\n b.name = fileName;\n\n //Cast to a File() type\n return theBlob;\n}\n","import { Directive, EventEmitter, ElementRef, Input, Output, HostListener, ChangeDetectionStrategy } from '@angular/core';\nimport { createInvisibleFileInputWrap, isFileInput, detectSwipe } from \"./doc-event-help.functions\"\nimport {\n acceptType, InvalidFileItem,\n applyExifRotation, dataUrl\n} from \"./fileTools\"\n\nexport interface dragMeta{\n type:string\n kind:string\n}\n\n/** A master base set of logic intended to support file select/drag/drop operations\n NOTE: Use ngfDrop for full drag/drop. Use ngfSelect for selecting\n*/\n@Directive({\n selector: \"[ngf]\",\n exportAs:\"ngf\"\n})\nexport class ngf {\n fileElm:any\n filters:{name:string, fn:(file:File)=>boolean}[] = []\n lastFileCount:number=0\n\n @Input() multiple !:string\n @Input() accept !:string\n @Input() maxSize !:number\n //@Input() forceFilename:string\n //@Input() forcePostname:string\n @Input() ngfFixOrientation:boolean = true\n\n @Input() fileDropDisabled:boolean = false\n @Input() selectable: boolean | string = false\n @Output('init') directiveInit:EventEmitter = new EventEmitter()\n\n @Input() lastInvalids:InvalidFileItem[] = []\n @Output() lastInvalidsChange:EventEmitter<{file:File,type:string}[]> = new EventEmitter()\n\n @Input() lastBaseUrl !: string//base64 last file uploaded url\n @Output() lastBaseUrlChange:EventEmitter = new EventEmitter()\n\n @Input() file !: File//last file uploaded\n @Output() fileChange:EventEmitter = new EventEmitter()\n\n @Input() files:File[] = []\n @Output() filesChange:EventEmitter = new EventEmitter();\n\n @Input() capturePaste: boolean; // window paste file watching (empty string turns on)\n pasteCapturer !: (e: Event) => void;\n\n constructor(public element:ElementRef){\n this.initFilters()\n }\n\n initFilters(){\n // the order is important\n this.filters.push({name: 'accept', fn: this._acceptFilter})\n this.filters.push({name: 'fileSize', fn: this._fileSizeFilter})\n\n //this.filters.push({name: 'fileType', fn: this._fileTypeFilter})\n //this.filters.push({name: 'queueLimit', fn: this._queueLimitFilter})\n //this.filters.push({name: 'mimeType', fn: this._mimeTypeFilter})\n }\n\n ngOnDestroy(){\n delete this.fileElm//faster memory release of dom element\n this.destroyPasteListener();\n }\n\n ngOnInit(){\n const selectable = (this.selectable || this.selectable==='') && !['false', 'null', '0'].includes(this.selectable as string);\n if( selectable ){\n this.enableSelecting()\n }\n\n if( this.multiple ){\n this.paramFileElm().setAttribute('multiple', this.multiple)\n }\n\n this.evalCapturePaste();\n\n //create reference to this class with one cycle delay to avoid ExpressionChangedAfterItHasBeenCheckedError\n setTimeout(()=>{\n this.directiveInit.emit(this)\n }, 0)\n }\n\n ngOnChanges( changes ){\n if( changes.accept ){\n this.paramFileElm().setAttribute('accept', changes.accept.currentValue || '*')\n }\n\n if (changes.capturePaste) {\n this.evalCapturePaste();\n }\n }\n\n evalCapturePaste() {\n const isActive = this.capturePaste || (this.capturePaste as any)==='' || ['false', '0', 'null'].includes(this.capturePaste as any);\n\n if (isActive) {\n if (this.pasteCapturer) {\n return; // already listening\n }\n\n this.pasteCapturer = (e: Event) => {\n const clip = (e as any).clipboardData;\n if (clip && clip.files && clip.files.length) {\n this.handleFiles(clip.files);\n e.preventDefault();\n }\n }\n\n window.addEventListener('paste', this.pasteCapturer);\n\n return;\n }\n\n this.destroyPasteListener();\n }\n\n destroyPasteListener() {\n if (this.pasteCapturer) {\n window.removeEventListener('paste', this.pasteCapturer);\n delete this.pasteCapturer;\n }\n }\n\n paramFileElm(){\n if( this.fileElm )return this.fileElm//already defined\n\n //elm is a file input\n const isFile = isFileInput( this.element.nativeElement )\n if(isFile)return this.fileElm = this.element.nativeElement\n\n //create foo file input\n const label = createInvisibleFileInputWrap()\n this.fileElm = label.getElementsByTagName('input')[0]\n this.fileElm.addEventListener('change', this.changeFn.bind(this));\n this.element.nativeElement.appendChild( label )\n return this.fileElm\n }\n\n enableSelecting(){\n let elm = this.element.nativeElement\n\n if( isFileInput(elm) ){\n const bindedHandler = _ev=>this.beforeSelect()\n elm.addEventListener('click', bindedHandler)\n elm.addEventListener('touchstart', bindedHandler)\n return\n }\n\n const bindedHandler = ev=>this.clickHandler(ev)\n elm.addEventListener('click', bindedHandler)\n elm.addEventListener('touchstart', bindedHandler)\n elm.addEventListener('touchend', bindedHandler)\n }\n\n getValidFiles( files:File[] ):File[]{\n const rtn:File[] = []\n for(let x=files.length-1; x >= 0; --x){\n if( this.isFileValid(files[x]) ){\n rtn.push( files[x] )\n }\n }\n return rtn\n }\n\n getInvalidFiles(files:File[]):InvalidFileItem[]{\n const rtn:InvalidFileItem[] = []\n for(let x=files.length-1; x >= 0; --x){\n let failReason = this.getFileFilterFailName(files[x])\n if( failReason ){\n rtn.push({\n file : files[x],\n type : failReason\n })\n }\n }\n return rtn\n }\n\n // Primary handler of files coming in\n handleFiles(files:File[]){\n const valids = this.getValidFiles(files)\n\n if(files.length!=valids.length){\n this.lastInvalids = this.getInvalidFiles(files)\n }else{\n delete this.lastInvalids\n }\n\n this.lastInvalidsChange.emit(this.lastInvalids)\n\n if( valids.length ){\n if( this.ngfFixOrientation ){\n this.applyExifRotations(valids)\n .then( fixedFiles=>this.que(fixedFiles) )\n }else{\n this.que(valids)\n }\n }\n\n if (this.isEmptyAfterSelection()) {\n this.element.nativeElement.value = ''\n }\n }\n\n que( files:File[] ){\n this.files = this.files || []\n Array.prototype.push.apply(this.files, files)\n\n //below break memory ref and doesnt act like a que\n //this.files = files//causes memory change which triggers bindings like \n\n this.filesChange.emit( this.files )\n\n if(files.length){\n this.fileChange.emit( this.file=files[0] )\n\n if(this.lastBaseUrlChange.observers.length){\n dataUrl( files[0] )\n .then( url=>this.lastBaseUrlChange.emit(url) )\n }\n }\n\n //will be checked for input value clearing\n this.lastFileCount = this.files.length\n }\n\n /** called when input has files */\n changeFn(event:any) {\n var fileList = event.__files_ || (event.target && event.target.files)\n\n if (!fileList) return;\n\n this.stopEvent(event);\n this.handleFiles(fileList)\n }\n\n clickHandler(evt:any){\n const elm = this.element.nativeElement\n if (elm.getAttribute('disabled') || this.fileDropDisabled){\n return false;\n }\n\n var r = detectSwipe(evt);\n // prevent the click if it is a swipe\n if ( r!==false ) return r;\n\n const fileElm = this.paramFileElm()\n fileElm.click()\n //fileElm.dispatchEvent( new Event('click') );\n this.beforeSelect()\n\n return false;\n }\n\n beforeSelect(){\n if( this.files && this.lastFileCount===this.files.length )return\n\n //if no files in array, be sure browser doesnt prevent reselect of same file (see github issue 27)\n this.fileElm.value = null\n }\n\n isEmptyAfterSelection():boolean {\n return !!this.element.nativeElement.attributes.multiple;\n }\n\n eventToTransfer(event:any):any {\n if(event.dataTransfer)return event.dataTransfer\n return event.originalEvent ? event.originalEvent.dataTransfer : null\n }\n\n stopEvent(event:any):any {\n event.preventDefault();\n event.stopPropagation();\n }\n\n transferHasFiles(transfer:any):any {\n if (!transfer.types) {\n return false;\n }\n\n if (transfer.types.indexOf) {\n return transfer.types.indexOf('Files') !== -1;\n } else if (transfer.types.contains) {\n return transfer.types.contains('Files');\n } else {\n return false;\n }\n }\n\n eventToFiles(event:Event){\n const transfer = this.eventToTransfer(event);\n if( transfer ){\n if(transfer.files && transfer.files.length){\n return transfer.files\n }\n if(transfer.items && transfer.items.length){\n return transfer.items\n }\n }\n return []\n }\n\n applyExifRotations(\n files:File[]\n ):Promise{\n const mapper = (\n file:File,index:number\n ):Promise=>{\n return applyExifRotation(file)\n .then( fixedFile=>files.splice(index, 1, fixedFile) )\n }\n\n const proms:Promise[] = []\n for(let x=files.length-1; x >= 0; --x){\n proms[x] = mapper( files[x], x )\n }\n return Promise.all( proms ).then( ()=>files )\n }\n\n @HostListener('change', ['$event'])\n onChange(event:Event):void {\n let files = this.element.nativeElement.files || this.eventToFiles(event)\n\n if(!files.length)return\n\n this.stopEvent(event);\n this.handleFiles(files)\n }\n\n getFileFilterFailName(\n file:File\n ):string | undefined{\n for(let i = 0; i < this.filters.length; i++){\n if( !this.filters[i].fn.call(this, file) ){\n return this.filters[i].name\n }\n }\n return undefined\n }\n\n isFileValid(file:File):boolean{\n const noFilters = !this.accept && (!this.filters || !this.filters.length)\n if( noFilters ){\n return true//we have no filters so all files are valid\n }\n\n return this.getFileFilterFailName(file) ? false : true\n }\n\n isFilesValid(files:File[]){\n for(let x=files.length-1; x >= 0; --x){\n if( !this.isFileValid(files[x]) ){\n return false\n }\n }\n return true\n }\n\n protected _acceptFilter(item:File):boolean {\n return acceptType(this.accept, item.type, item.name)\n }\n\n protected _fileSizeFilter(item:File):boolean {\n return !(this.maxSize && item.size > this.maxSize);\n }\n\n /** browsers try hard to conceal data about file drags, this tends to undo that */\n filesToWriteableObject( files:File[] ):dragMeta[]{\n const jsonFiles:dragMeta[] = []\n for(let x=0; x < files.length; ++x){\n jsonFiles.push({\n type:files[x].type,\n kind:files[x][\"kind\"]\n })\n }\n return jsonFiles\n }\n}\n","import { Directive, Input } from \"@angular/core\"\nimport { ngf } from \"./ngf.directive\"\n\n@Directive({\n selector: \"[ngfSelect]\",\n exportAs: \"ngfSelect\"\n})\nexport class ngfSelect extends ngf {\n @Input() selectable:any = true\n}","import {\n Directive, EventEmitter,\n HostListener, Input, Output\n} from '@angular/core';\nimport { ngf, dragMeta } from \"./ngf.directive\"\n\n@Directive({\n selector: \"[ngfDrop]\",\n exportAs: \"ngfDrop\"\n})\nexport class ngfDrop extends ngf {\n @Output() fileOver:EventEmitter = new EventEmitter();\n\n @Input() validDrag:boolean = false\n @Output() validDragChange:EventEmitter = new EventEmitter()\n\n @Input() invalidDrag = false\n @Output() invalidDragChange:EventEmitter = new EventEmitter()\n\n @Input() dragFiles !: dragMeta[]\n @Output() dragFilesChange:EventEmitter = new EventEmitter()\n\n @HostListener('drop', ['$event'])\n onDrop(event:Event):void {\n if(this.fileDropDisabled){\n this.stopEvent(event);\n return\n }\n\n this.closeDrags()\n let files = this.eventToFiles(event)\n\n if(!files.length)return\n\n this.stopEvent(event);\n this.handleFiles(files)\n }\n\n handleFiles(files:File[]){\n this.fileOver.emit(false)//turn-off dragover\n super.handleFiles(files)\n }\n\n @HostListener('dragover', ['$event'])\n onDragOver(event:Event):void {\n if(this.fileDropDisabled){\n this.stopEvent(event);\n return\n }\n\n const transfer = this.eventToTransfer(event)\n\n let files = this.eventToFiles(event)\n\n let jsonFiles = this.filesToWriteableObject(files)\n this.dragFilesChange.emit( this.dragFiles=jsonFiles )\n\n if( files.length ){\n this.validDrag = this.isFilesValid(files)\n }else{\n //Safari, IE11 & some browsers do NOT tell you about dragged files until dropped. Always consider a valid drag\n this.validDrag = true\n }\n\n this.validDragChange.emit(this.validDrag)\n\n this.invalidDrag = !this.validDrag\n this.invalidDragChange.emit(this.invalidDrag)\n\n transfer.dropEffect = 'copy'//change cursor and such\n this.stopEvent(event)\n this.fileOver.emit(true)\n }\n\n closeDrags(){\n delete this.validDrag\n this.validDragChange.emit(this.validDrag)\n this.invalidDrag = false\n this.invalidDragChange.emit(this.invalidDrag)\n delete this.dragFiles\n this.dragFilesChange.emit( this.dragFiles )\n }\n\n @HostListener('dragleave', ['$event'])\n onDragLeave(event:Event):any {\n if(this.fileDropDisabled){\n this.stopEvent(event);\n return\n }\n \n this.closeDrags()\n\n if ((this as any).element) {\n if (event.currentTarget === (this as any).element[0]) {\n return;\n }\n }\n\n this.stopEvent(event);\n this.fileOver.emit(false);\n }\n}","import { Directive, ElementRef, Input } from '@angular/core';\nimport { dataUrl } from './fileTools';\n\n@Directive({selector: '[ngfBackground]'})\nexport class ngfBackground {\n @Input('ngfBackground') file:any\n\n constructor(public ElementRef:ElementRef){}\n\n ngOnChanges( _changes:any ){\n dataUrl(this.file)\n .then(src=>{\n const urlString = 'url(\\'' + (src || '') + '\\')'\n this.ElementRef.nativeElement.style.backgroundImage = urlString\n })\n }\n}\n","import { Directive, EventEmitter, Output, Input } from '@angular/core';\n\n@Directive({selector: 'ngfUploadStatus'})\nexport class ngfUploadStatus {\n @Input() percent:number = 0\n @Output() percentChange:EventEmitter = new EventEmitter()\n @Input() httpEvent !: Event\n\n ngOnChanges( changes ){\n if( changes.httpEvent && changes.httpEvent.currentValue ){\n const event = changes.httpEvent.currentValue\n if (event.loaded && event.total) {\n setTimeout(()=>{\n this.percent = Math.round(100 * event.loaded / event.total);\n this.percentChange.emit( this.percent )\n }, 0)\n }\n }\n }\n}","import {\n IterableDiffer,\n IterableDiffers,\n Directive, EventEmitter,\n Output, Input\n} from '@angular/core';\n\n@Directive({selector: 'ngfFormData'})\nexport class ngfFormData {\n @Input() files !: File[]\n @Input() postName:string = \"file\"\n @Input() fileName !: string//force file name\n\n @Input() FormData:FormData = new FormData()\n @Output() FormDataChange:EventEmitter = new EventEmitter()\n\n differ:IterableDiffer<{}>\n\n constructor(IterableDiffers: IterableDiffers){\n this.differ = IterableDiffers.find([]).create()\n }\n\n ngDoCheck(){\n var changes = this.differ.diff( this.files );\n\n if (changes) {\n setTimeout(()=>this.buildFormData(), 0)\n }\n }\n\n buildFormData(){\n const isArray = typeof(this.files)==='object' && this.files.constructor===Array\n\n if( isArray ){\n this.FormData = new FormData()\n const files = this.files || []\n files.forEach(file=>\n this.FormData.append(this.postName, file, this.fileName||file.name)\n )\n this.FormDataChange.emit( this.FormData )\n }else{\n delete this.FormData\n }\n }\n}","import { Directive, ElementRef, Input } from '@angular/core';\nimport { dataUrl } from './fileTools';\n\n@Directive({ selector: '[ngfSrc]' })\nexport class ngfSrc {\n @Input('ngfSrc') file: any\n\n constructor(public ElementRef: ElementRef) { }\n\n ngOnChanges(_changes: any) {\n dataUrl(this.file)\n .then(src=>\n this.ElementRef.nativeElement.src = src\n )\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { ngfBackground } from './ngfBackground.directive';\nimport { ngfDrop } from './ngfDrop.directive';\nimport { ngf } from './ngf.directive';\nimport { ngfSelect } from './ngfSelect.directive';\nimport { ngfUploadStatus } from './ngfUploadStatus.directive';\nimport { ngfFormData } from './ngfFormData.directive';\nimport { ngfSrc } from './ngfSrc.directive';\n//import{ HttpModule } from '@angular/http';\n\nconst declarations = [\n ngfDrop,\n ngfSelect,\n ngfBackground,\n ngfSrc,\n ngfUploadStatus,\n ngfFormData,\n ngf\n]\n\n@NgModule({\n imports: [\n CommonModule\n //,HttpModule\n ],\n declarations: declarations,\n exports: declarations//[HttpModule, ...declarations]\n}) export class ngfModule {}","/*\n * Public API Surface of angular-file\n */\n\nexport * from './file-upload/ngfSelect.directive';\nexport * from './file-upload/ngfDrop.directive';\nexport * from './file-upload/ngf.directive';\nexport * from './file-upload/ngf.module';\nexport { ngfBackground } from './file-upload/ngfBackground.directive';\nexport { ngfSrc } from './file-upload/ngfSrc.directive';\nexport { ngfUploadStatus } from './file-upload/ngfUploadStatus.directive';\nexport { ngfFormData } from './file-upload/ngfFormData.directive';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"angular-file.js","sources":["../src/file-upload/doc-event-help.functions.ts","../src/file-upload/fileTools.ts","../src/file-upload/ngf.directive.ts","../src/file-upload/ngfSelect.directive.ts","../src/file-upload/ngfDrop.directive.ts","../src/file-upload/ngfBackground.directive.ts","../src/file-upload/ngfUploadStatus.directive.ts","../src/file-upload/ngfFormData.directive.ts","../src/file-upload/ngfSrc.directive.ts","../src/file-upload/ngf.module.ts","../../src/public-api.ts","../../src/angular-file.ts"],"sourcesContent":["export const isFileInput = function(elm:any){\n const ty = elm.getAttribute('type')\n return elm.tagName.toLowerCase() === 'input' && ty && ty.toLowerCase() === 'file';\n}\n\nlet initialTouchStartY = 0;\nlet initialTouchStartX = 0;\nexport const detectSwipe = function(evt:any):boolean {\n var touches = evt.changedTouches || (evt.originalEvent && evt.originalEvent.changedTouches);\n if (touches) {\n if (evt.type === 'touchstart') {\n initialTouchStartX = touches[0].clientX;\n initialTouchStartY = touches[0].clientY;\n return true; // don't block event default\n } else {\n // prevent scroll from triggering event\n if (evt.type === 'touchend') {\n var currentX = touches[0].clientX;\n var currentY = touches[0].clientY;\n if ((Math.abs(currentX - initialTouchStartX) > 20) ||\n (Math.abs(currentY - initialTouchStartY) > 20)) {\n // Swipe detected\n return true;\n }\n // touch was a 'tap' so prevent propogation and prevent\n // device follow-up actions (click, mouseup, mousedown, etc.)\n evt.stopPropagation();\n if (evt.cancelable) {\n evt.preventDefault();\n }\n }\n return false;\n }\n }\n return false\n}\n\nexport const createInvisibleFileInputWrap = function() {\n var fileElem = createFileInput()\n var label = document.createElement('label');\n label.innerHTML = 'upload'\n label.style.visibility = 'hidden'\n label.style.position = 'absolute'\n label.style.overflow = 'hidden'\n label.style.width = '0px'\n label.style.height = '0px'\n label.style.border = 'none'\n label.style.margin = '0px'\n label.style.padding = '0px'\n label.setAttribute('tabindex','-1')\n \n //bindAttrToFileInput(fileElem, label);\n //generatedElems.push({el: elem, ref: label});\n\n label.appendChild( fileElem )\n //document.body.appendChild( label );\n\n return label;\n}\n\nexport const createFileInput = function() {\n var fileElem = document.createElement('input');\n fileElem.type=\"file\"\n return fileElem;\n}\n","export function getWindow():any{return window}\n\nexport function acceptType(accept:string, type:string, name?:string):boolean { \n if( !accept ){\n return true\n }\n\n const defs = accept.split(',')\n let regx:RegExp\n let acceptRegString:string\n\n for(let x=defs.length-1; x >= 0; --x){\n //Escapes dots in mimetype \n acceptRegString = defs[x]\n //trim\n acceptRegString = acceptRegString.replace(/(^\\s+|\\s+$)/g,'')\n //Escapes stars in mimetype \n acceptRegString = acceptRegString.replace(/\\*/g,'.*')\n //let acceptReg = '^((' + acceptRegString\n //acceptReg = acceptReg.replace(/,/g,')|(') + '))$'\n \n //try by mime\n regx = new RegExp(acceptRegString, 'gi')\n if( type.search(regx)>=0 ){\n return true\n }\n\n //try by ext\n if( acceptRegString.substring(0, 1)=='.' ){ \n acceptRegString = '\\\\'+ acceptRegString//.substring(1, acceptRegString.length-1)//remove dot at front\n regx = new RegExp(acceptRegString+'$', 'i')\n if( (name||type).search(regx)>=0 ){\n return true\n }\n }\n }\n return false\n}\n\nexport interface InvalidFileItem{\n file:File\n type:string\n}\n\nexport function arrayBufferToBase64(buffer:any) {\n var binary = '';\n var bytes = new Uint8Array(buffer);\n var len = bytes.byteLength;\n for (var i = 0; i < len; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return window.btoa(binary);\n}\n\nexport function dataUrltoBlob(\n dataurl:string,\n name:string,\n origSize?:any\n):Blob{\n var arr = dataurl.split(',');\n var mimeMatch = arr[0].match(/:(.*?);/)\n var mime:string = mimeMatch ? mimeMatch[1] : 'text/plain'\n var bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);\n while (n--) {\n u8arr[n] = bstr.charCodeAt(n);\n }\n var blob = new window.Blob([u8arr], {type: mime});\n blob[\"name\"] = name;\n blob[\"$ngfOrigSize\"] = origSize;\n return blob;\n}\n\nexport interface orientationMeta{\n orientation: number\n fixedArrayBuffer?:any[]\n}\n\nexport function applyTransform(\n ctx:CanvasRenderingContext2D,\n orientation:number,\n width:number,\n height:number\n) {\n switch (orientation) {\n case 2:\n return ctx.transform(-1, 0, 0, 1, width, 0);\n case 3:\n return ctx.transform(-1, 0, 0, -1, width, height);\n case 4:\n return ctx.transform(1, 0, 0, -1, 0, height);\n case 5:\n return ctx.transform(0, 1, 1, 0, 0, 0);\n case 6:\n return ctx.transform(0, 1, -1, 0, height, 0);\n case 7:\n return ctx.transform(0, -1, -1, 0, height, width);\n case 8:\n return ctx.transform(0, -1, 1, 0, 0, width);\n }\n}\n\nexport function fixFileOrientationByMeta(\n file:File, result:orientationMeta\n):Promise{\n return dataUrl(file, true)\n .then(url=>{\n var canvas = document.createElement('canvas');\n var img = document.createElement('img');\n\n return >new Promise(function(res,rej){\n img.onload = function () {\n try {\n canvas.width = result.orientation > 4 ? img.height : img.width\n canvas.height = result.orientation > 4 ? img.width : img.height\n var ctx = canvas.getContext('2d')\n applyTransform(ctx, result.orientation, img.width, img.height)\n ctx.drawImage(img, 0, 0);\n var dataUrl = canvas.toDataURL(file.type || 'image/WebP', 0.934)\n const base = arrayBufferToBase64(result.fixedArrayBuffer)\n dataUrl = restoreExif(base, dataUrl)\n var blob = dataUrltoBlob(dataUrl, file.name)\n const newFile = blobToFile(blob, file.name);\n res(newFile);\n } catch (e) {\n rej(e)\n }\n };\n img.onerror = rej;\n img.src = url; \n })\n })\n}\n\nexport function applyExifRotation(\n file:File\n):Promise{\n if (file.type.indexOf('image/jpeg') !== 0) {\n return Promise.resolve(file);\n }\n\n return readOrientation(file)\n .then((result:orientationMeta)=>{\n if (result.orientation < 2 || result.orientation > 8) {\n return file\n }\n \n return fixFileOrientationByMeta(file,result)\n })\n}\n\nexport function readOrientation(\n file:File\n):Promise{\n return new Promise((res,rej)=>{\n var reader = new FileReader();\n var slicedFile = file.slice ? file.slice(0, 64 * 1024) : file;\n reader.readAsArrayBuffer(slicedFile);\n reader.onerror = rej\n reader.onload = function (e:any) {\n var result:orientationMeta = {orientation: 1};\n var view = new DataView( this.result );\n if (view.getUint16(0, false) !== 0xFFD8) return res(result);\n\n var length = view.byteLength,\n offset = 2;\n while (offset < length) {\n var marker = view.getUint16(offset, false);\n offset += 2;\n if (marker === 0xFFE1) {\n if (view.getUint32(offset += 2, false) !== 0x45786966) return res(result);\n\n var little = view.getUint16(offset += 6, false) === 0x4949;\n offset += view.getUint32(offset + 4, little);\n var tags = view.getUint16(offset, little);\n offset += 2;\n for (var i = 0; i < tags; i++)\n if (view.getUint16(offset + (i * 12), little) === 0x0112) {\n var orientation = view.getUint16(offset + (i * 12) + 8, little);\n if (orientation >= 2 && orientation <= 8) {\n view.setUint16(offset + (i * 12) + 8, 1, little);\n result.fixedArrayBuffer = e.target.result;\n }\n result.orientation = orientation;\n return res(result);\n }\n } else if ((marker & 0xFF00) !== 0xFF00) break;\n else offset += view.getUint16(offset, false);\n }\n return res(result);\n };\n })\n}\n\n/** converts file-input file into base64 dataUri */\nexport function dataUrl(\n file:any,\n disallowObjectUrl?:any\n):Promise{\n if (!file) return Promise.resolve(file)\n \n if ((disallowObjectUrl && file.$ngfDataUrl != null) || (!disallowObjectUrl && file.$ngfBlobUrl != null)) {\n return Promise.resolve( disallowObjectUrl ? file.$ngfDataUrl : file.$ngfBlobUrl )\n }\n\n var p = disallowObjectUrl ? file.$$ngfDataUrlPromise : file.$$ngfBlobUrlPromise;\n if (p) return p;\n\n const win = getWindow()\n let deferred:Promise\n if (win.FileReader && file &&\n (!win.FileAPI || navigator.userAgent.indexOf('MSIE 8') === -1 || file.size < 20000) &&\n (!win.FileAPI || navigator.userAgent.indexOf('MSIE 9') === -1 || file.size < 4000000)) {\n //prefer URL.createObjectURL for handling refrences to files of all sizes\n //since it doesn´t build a large string in memory\n var URL = win.URL || win.webkitURL;\n if (FileReader) {\n deferred = new Promise((res,rej)=>{\n var fileReader = new FileReader();\n fileReader.onload = function (event:any) {\n file.$ngfDataUrl = event.target.result;\n delete file.$ngfDataUrl;\n res( event.target.result )\n };\n fileReader.onerror = function (e) {\n file.$ngfDataUrl = '';\n rej(e)\n };\n fileReader.readAsDataURL(file);\n })\n } else {\n var url:any;\n try {\n url = URL.createObjectURL(file);\n } catch (e) {\n return Promise.reject(e);\n }\n \n deferred = Promise.resolve( url )\n file.$ngfBlobUrl = url;\n }\n } else {\n file[disallowObjectUrl ? '$ngfDataUrl' : '$ngfBlobUrl'] = '';\n return Promise.reject( new Error('Browser does not support window.FileReader, window.FileReader, or window.FileAPI') )//deferred.reject();\n }\n\n if (disallowObjectUrl) {\n p = file.$$ngfDataUrlPromise = deferred;\n } else {\n p = file.$$ngfBlobUrlPromise = deferred;\n }\n\n p = p.then((x:any)=>{\n delete file[disallowObjectUrl ? '$$ngfDataUrlPromise' : '$$ngfBlobUrlPromise'];\n return x\n })\n\n return p;\n}\n\nexport function restoreExif(orig:any, resized:any) {\n var ExifRestorer:any = {\n KEY_STR:'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='\n }\n\n ExifRestorer.encode64 = function (input:any) {\n var output = '',\n chr1, chr2, chr3:any = '',\n enc1, enc2, enc3, enc4:any = '',\n i = 0;\n\n do {\n chr1 = input[i++];\n chr2 = input[i++];\n chr3 = input[i++];\n\n enc1 = chr1 >> 2;\n enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);\n enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);\n enc4 = chr3 & 63;\n\n if (isNaN(chr2)) {\n enc3 = enc4 = 64;\n } else if (isNaN(chr3)) {\n enc4 = 64;\n }\n\n output = output +\n this.KEY_STR.charAt(enc1) +\n this.KEY_STR.charAt(enc2) +\n this.KEY_STR.charAt(enc3) +\n this.KEY_STR.charAt(enc4);\n chr1 = chr2 = chr3 = '';\n enc1 = enc2 = enc3 = enc4 = '';\n } while (i < input.length);\n\n return output;\n };\n\n ExifRestorer.restore = function (origFileBase64:any, resizedFileBase64:any) {\n if (origFileBase64.match('data:image/jpeg;base64,')) {\n origFileBase64 = origFileBase64.replace('data:image/jpeg;base64,', '');\n }\n\n var rawImage:number[] = this.decode64(origFileBase64);\n var segments = this.slice2Segments(rawImage);\n\n var image = this.exifManipulation(resizedFileBase64, segments);\n\n return 'data:image/jpeg;base64,' + this.encode64(image);\n };\n\n\n ExifRestorer.exifManipulation = function (resizedFileBase64:any, segments:any) {\n var exifArray = this.getExifArray(segments),\n newImageArray = this.insertExif(resizedFileBase64, exifArray);\n return new Uint8Array(newImageArray);\n };\n\n ExifRestorer.getExifArray = function (segments:number[][]) {\n var seg;\n for (var x = 0; x < segments.length; x++) {\n seg = segments[x];\n if (seg[0] === 255 && seg[1] === 225) //(ff e1)\n {\n return seg;\n }\n }\n return [];\n };\n\n\n ExifRestorer.insertExif = function (resizedFileBase64:any, exifArray:any) {\n var imageData = resizedFileBase64.replace('data:image/jpeg;base64,', ''),\n buf = this.decode64(imageData),\n separatePoint = buf.indexOf(255, 3),\n mae = buf.slice(0, separatePoint),\n ato = buf.slice(separatePoint),\n array = mae;\n\n array = array.concat(exifArray);\n array = array.concat(ato);\n return array;\n };\n\n\n ExifRestorer.slice2Segments = function(\n rawImageArray:number[]\n ) {\n var head:number = 0,\n segments:number[][] = [];\n\n while (1) {\n if (rawImageArray[head] === 255 && rawImageArray[head + 1] === 218) {\n break;\n }\n if (rawImageArray[head] === 255 && rawImageArray[head + 1] === 216) {\n head += 2;\n }\n else {\n var length = rawImageArray[head + 2] * 256 + rawImageArray[head + 3]\n var endPoint = head + length + 2\n var seg:number[] = rawImageArray.slice(head, endPoint)\n segments.push(seg);\n head = endPoint;\n }\n if (head > rawImageArray.length) {\n break;\n }\n }\n\n return segments;\n };\n\n\n ExifRestorer.decode64 = function (\n input:any\n ):number[]{\n var chr1, chr2, chr3:any = '',\n enc1, enc2, enc3, enc4:any = '',\n i = 0,\n buf:number[] = [];\n\n // remove all characters that are not A-Z, a-z, 0-9, +, /, or =\n var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n if (base64test.exec(input)) {\n console.log('There were invalid base64 characters in the input text.');\n }\n input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, '');\n\n do {\n enc1 = this.KEY_STR.indexOf(input.charAt(i++));\n enc2 = this.KEY_STR.indexOf(input.charAt(i++));\n enc3 = this.KEY_STR.indexOf(input.charAt(i++));\n enc4 = this.KEY_STR.indexOf(input.charAt(i++));\n\n chr1 = (enc1 << 2) | (enc2 >> 4);\n chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\n chr3 = ((enc3 & 3) << 6) | enc4;\n\n buf.push(chr1);\n\n if (enc3 !== 64) {\n buf.push(chr2);\n }\n if (enc4 !== 64) {\n buf.push(chr3);\n }\n\n chr1 = chr2 = chr3 = '';\n enc1 = enc2 = enc3 = enc4 = '';\n\n } while (i < input.length);\n\n return buf;\n };\n\n return ExifRestorer.restore(orig, resized); //<= EXIF\n};\n\nfunction blobToFile(theBlob: Blob, fileName:string): File {\n var b: any = theBlob;\n //A Blob() is almost a File() - it's just missing the two properties below which we will add\n b.lastModifiedDate = new Date();\n b.name = fileName;\n\n //Cast to a File() type\n return theBlob;\n}\n","import { Directive, EventEmitter, ElementRef, Input, Output, HostListener, ChangeDetectionStrategy } from '@angular/core';\nimport { createInvisibleFileInputWrap, isFileInput, detectSwipe } from \"./doc-event-help.functions\"\nimport {\n acceptType, InvalidFileItem,\n applyExifRotation, dataUrl\n} from \"./fileTools\"\n\nexport interface dragMeta{\n type:string\n kind:string\n}\n\n/** A master base set of logic intended to support file select/drag/drop operations\n NOTE: Use ngfDrop for full drag/drop. Use ngfSelect for selecting\n*/\n@Directive({\n selector: \"[ngf]\",\n exportAs:\"ngf\"\n})\nexport class ngf {\n fileElm:any\n filters:{name:string, fn:(file:File)=>boolean}[] = []\n lastFileCount:number=0\n\n @Input() multiple !:string\n @Input() accept !:string\n @Input() maxSize !:number\n //@Input() forceFilename:string\n //@Input() forcePostname:string\n @Input() ngfFixOrientation:boolean = true\n\n @Input() fileDropDisabled:boolean = false\n @Input() selectable: boolean | string = false\n @Output('init') directiveInit:EventEmitter = new EventEmitter()\n\n @Input() lastInvalids:InvalidFileItem[] = []\n @Output() lastInvalidsChange:EventEmitter<{file:File,type:string}[]> = new EventEmitter()\n\n @Input() lastBaseUrl !: string//base64 last file uploaded url\n @Output() lastBaseUrlChange:EventEmitter = new EventEmitter()\n\n @Input() file !: File//last file uploaded\n @Output() fileChange:EventEmitter = new EventEmitter()\n\n @Input() files:File[] = []\n @Output() filesChange:EventEmitter = new EventEmitter();\n\n @Input() capturePaste: boolean; // window paste file watching (empty string turns on)\n pasteCapturer !: (e: Event) => void;\n\n constructor(public element:ElementRef){\n this.initFilters()\n }\n\n initFilters(){\n // the order is important\n this.filters.push({name: 'accept', fn: this._acceptFilter})\n this.filters.push({name: 'fileSize', fn: this._fileSizeFilter})\n\n //this.filters.push({name: 'fileType', fn: this._fileTypeFilter})\n //this.filters.push({name: 'queueLimit', fn: this._queueLimitFilter})\n //this.filters.push({name: 'mimeType', fn: this._mimeTypeFilter})\n }\n\n ngOnDestroy(){\n delete this.fileElm//faster memory release of dom element\n this.destroyPasteListener();\n }\n\n ngOnInit(){\n const selectable = (this.selectable || this.selectable==='') && !['false', 'null', '0'].includes(this.selectable as string);\n if( selectable ){\n this.enableSelecting()\n }\n\n if( this.multiple ){\n this.paramFileElm().setAttribute('multiple', this.multiple)\n }\n\n this.evalCapturePaste();\n\n //create reference to this class with one cycle delay to avoid ExpressionChangedAfterItHasBeenCheckedError\n setTimeout(()=>{\n this.directiveInit.emit(this)\n }, 0)\n }\n\n ngOnChanges( changes ){\n if( changes.accept ){\n this.paramFileElm().setAttribute('accept', changes.accept.currentValue || '*')\n }\n\n if (changes.capturePaste) {\n this.evalCapturePaste();\n }\n }\n\n evalCapturePaste() {\n const isActive = this.capturePaste || (this.capturePaste as any)==='' || ['false', '0', 'null'].includes(this.capturePaste as any);\n\n if (isActive) {\n if (this.pasteCapturer) {\n return; // already listening\n }\n\n this.pasteCapturer = (e: Event) => {\n const clip = (e as any).clipboardData;\n if (clip && clip.files && clip.files.length) {\n this.handleFiles(clip.files);\n e.preventDefault();\n }\n }\n\n window.addEventListener('paste', this.pasteCapturer);\n\n return;\n }\n\n this.destroyPasteListener();\n }\n\n destroyPasteListener() {\n if (this.pasteCapturer) {\n window.removeEventListener('paste', this.pasteCapturer);\n delete this.pasteCapturer;\n }\n }\n\n paramFileElm(){\n if( this.fileElm )return this.fileElm//already defined\n\n //elm is a file input\n const isFile = isFileInput( this.element.nativeElement )\n if(isFile)return this.fileElm = this.element.nativeElement\n\n //create foo file input\n const label = createInvisibleFileInputWrap()\n this.fileElm = label.getElementsByTagName('input')[0]\n this.fileElm.addEventListener('change', this.changeFn.bind(this));\n this.element.nativeElement.appendChild( label )\n return this.fileElm\n }\n\n enableSelecting(){\n let elm = this.element.nativeElement\n\n if( isFileInput(elm) ){\n const bindedHandler = _ev=>this.beforeSelect()\n elm.addEventListener('click', bindedHandler)\n elm.addEventListener('touchstart', bindedHandler)\n return\n }\n\n const bindedHandler = ev=>this.clickHandler(ev)\n elm.addEventListener('click', bindedHandler)\n elm.addEventListener('touchstart', bindedHandler)\n elm.addEventListener('touchend', bindedHandler)\n }\n\n getValidFiles( files:File[] ):File[]{\n const rtn:File[] = []\n for(let x=files.length-1; x >= 0; --x){\n if( this.isFileValid(files[x]) ){\n rtn.push( files[x] )\n }\n }\n return rtn\n }\n\n getInvalidFiles(files:File[]):InvalidFileItem[]{\n const rtn:InvalidFileItem[] = []\n for(let x=files.length-1; x >= 0; --x){\n let failReason = this.getFileFilterFailName(files[x])\n if( failReason ){\n rtn.push({\n file : files[x],\n type : failReason\n })\n }\n }\n return rtn\n }\n\n // Primary handler of files coming in\n handleFiles(files:File[]){\n const valids = this.getValidFiles(files)\n\n if(files.length!=valids.length){\n this.lastInvalids = this.getInvalidFiles(files)\n }else{\n delete this.lastInvalids\n }\n\n this.lastInvalidsChange.emit(this.lastInvalids)\n\n if( valids.length ){\n if( this.ngfFixOrientation ){\n this.applyExifRotations(valids)\n .then( fixedFiles=>this.que(fixedFiles) )\n }else{\n this.que(valids)\n }\n }\n\n if (this.isEmptyAfterSelection()) {\n this.element.nativeElement.value = ''\n }\n }\n\n que( files:File[] ){\n this.files = this.files || []\n Array.prototype.push.apply(this.files, files)\n\n //below break memory ref and doesnt act like a que\n //this.files = files//causes memory change which triggers bindings like \n\n this.filesChange.emit( this.files )\n\n if(files.length){\n this.fileChange.emit( this.file=files[0] )\n\n if(this.lastBaseUrlChange.observers.length){\n dataUrl( files[0] )\n .then( url=>this.lastBaseUrlChange.emit(url) )\n }\n }\n\n //will be checked for input value clearing\n this.lastFileCount = this.files.length\n }\n\n /** called when input has files */\n changeFn(event:any) {\n var fileList = event.__files_ || (event.target && event.target.files)\n\n if (!fileList) return;\n\n this.stopEvent(event);\n this.handleFiles(fileList)\n }\n\n clickHandler(evt:any){\n const elm = this.element.nativeElement\n if (elm.getAttribute('disabled') || this.fileDropDisabled){\n return false;\n }\n\n var r = detectSwipe(evt);\n // prevent the click if it is a swipe\n if ( r!==false ) return r;\n\n const fileElm = this.paramFileElm()\n fileElm.click()\n //fileElm.dispatchEvent( new Event('click') );\n this.beforeSelect()\n\n return false;\n }\n\n beforeSelect(){\n if( this.files && this.lastFileCount===this.files.length )return\n\n //if no files in array, be sure browser doesnt prevent reselect of same file (see github issue 27)\n this.fileElm.value = null\n }\n\n isEmptyAfterSelection():boolean {\n return !!this.element.nativeElement.attributes.multiple;\n }\n\n eventToTransfer(event:any):any {\n if(event.dataTransfer)return event.dataTransfer\n return event.originalEvent ? event.originalEvent.dataTransfer : null\n }\n\n stopEvent(event:any):any {\n event.preventDefault();\n event.stopPropagation();\n }\n\n transferHasFiles(transfer:any):any {\n if (!transfer.types) {\n return false;\n }\n\n if (transfer.types.indexOf) {\n return transfer.types.indexOf('Files') !== -1;\n } else if (transfer.types.contains) {\n return transfer.types.contains('Files');\n } else {\n return false;\n }\n }\n\n eventToFiles(event:Event){\n const transfer = this.eventToTransfer(event);\n if( transfer ){\n if(transfer.files && transfer.files.length){\n return transfer.files\n }\n if(transfer.items && transfer.items.length){\n return transfer.items\n }\n }\n return []\n }\n\n applyExifRotations(\n files:File[]\n ):Promise{\n const mapper = (\n file:File,index:number\n ):Promise=>{\n return applyExifRotation(file)\n .then( fixedFile=>files.splice(index, 1, fixedFile) )\n }\n\n const proms:Promise[] = []\n for(let x=files.length-1; x >= 0; --x){\n proms[x] = mapper( files[x], x )\n }\n return Promise.all( proms ).then( ()=>files )\n }\n\n @HostListener('change', ['$event'])\n onChange(event:Event):void {\n let files = this.element.nativeElement.files || this.eventToFiles(event)\n\n if(!files.length)return\n\n this.stopEvent(event);\n this.handleFiles(files)\n }\n\n getFileFilterFailName(\n file:File\n ):string | undefined{\n for(let i = 0; i < this.filters.length; i++){\n if( !this.filters[i].fn.call(this, file) ){\n return this.filters[i].name\n }\n }\n return undefined\n }\n\n isFileValid(file:File):boolean{\n const noFilters = !this.accept && (!this.filters || !this.filters.length)\n if( noFilters ){\n return true//we have no filters so all files are valid\n }\n\n return this.getFileFilterFailName(file) ? false : true\n }\n\n isFilesValid(files:File[]){\n for(let x=files.length-1; x >= 0; --x){\n if( !this.isFileValid(files[x]) ){\n return false\n }\n }\n return true\n }\n\n protected _acceptFilter(item:File):boolean {\n return acceptType(this.accept, item.type, item.name)\n }\n\n protected _fileSizeFilter(item:File):boolean {\n return !(this.maxSize && item.size > this.maxSize);\n }\n\n /** browsers try hard to conceal data about file drags, this tends to undo that */\n filesToWriteableObject( files:File[] ):dragMeta[]{\n const jsonFiles:dragMeta[] = []\n for(let x=0; x < files.length; ++x){\n jsonFiles.push({\n type:files[x].type,\n kind:files[x][\"kind\"]\n })\n }\n return jsonFiles\n }\n}\n","import { Directive, Input } from \"@angular/core\"\nimport { ngf } from \"./ngf.directive\"\n\n@Directive({\n selector: \"[ngfSelect]\",\n exportAs: \"ngfSelect\"\n})\nexport class ngfSelect extends ngf {\n @Input() selectable:any = true\n}","import {\n Directive, EventEmitter,\n HostListener, Input, Output\n} from '@angular/core';\nimport { ngf, dragMeta } from \"./ngf.directive\"\n\n@Directive({\n selector: \"[ngfDrop]\",\n exportAs: \"ngfDrop\"\n})\nexport class ngfDrop extends ngf {\n @Output() fileOver:EventEmitter = new EventEmitter();\n\n @Input() validDrag:boolean = false\n @Output() validDragChange:EventEmitter = new EventEmitter()\n\n @Input() invalidDrag = false\n @Output() invalidDragChange:EventEmitter = new EventEmitter()\n\n @Input() dragFiles !: dragMeta[]\n @Output() dragFilesChange:EventEmitter = new EventEmitter()\n\n @HostListener('drop', ['$event'])\n onDrop(event:Event):void {\n if(this.fileDropDisabled){\n this.stopEvent(event);\n return\n }\n\n this.closeDrags()\n let files = this.eventToFiles(event)\n\n if(!files.length)return\n\n this.stopEvent(event);\n this.handleFiles(files)\n }\n\n handleFiles(files:File[]){\n this.fileOver.emit(false)//turn-off dragover\n super.handleFiles(files)\n }\n\n @HostListener('dragover', ['$event'])\n onDragOver(event:Event):void {\n if(this.fileDropDisabled){\n this.stopEvent(event);\n return\n }\n\n const transfer = this.eventToTransfer(event)\n\n let files = this.eventToFiles(event)\n\n let jsonFiles = this.filesToWriteableObject(files)\n this.dragFilesChange.emit( this.dragFiles=jsonFiles )\n\n if( files.length ){\n this.validDrag = this.isFilesValid(files)\n }else{\n //Safari, IE11 & some browsers do NOT tell you about dragged files until dropped. Always consider a valid drag\n this.validDrag = true\n }\n\n this.validDragChange.emit(this.validDrag)\n\n this.invalidDrag = !this.validDrag\n this.invalidDragChange.emit(this.invalidDrag)\n\n transfer.dropEffect = 'copy'//change cursor and such\n this.stopEvent(event)\n this.fileOver.emit(true)\n }\n\n closeDrags(){\n delete this.validDrag\n this.validDragChange.emit(this.validDrag)\n this.invalidDrag = false\n this.invalidDragChange.emit(this.invalidDrag)\n delete this.dragFiles\n this.dragFilesChange.emit( this.dragFiles )\n }\n\n @HostListener('dragleave', ['$event'])\n onDragLeave(event:Event):any {\n if(this.fileDropDisabled){\n this.stopEvent(event);\n return\n }\n \n this.closeDrags()\n\n if ((this as any).element) {\n if (event.currentTarget === (this as any).element[0]) {\n return;\n }\n }\n\n this.stopEvent(event);\n this.fileOver.emit(false);\n }\n}","import { Directive, ElementRef, Input } from '@angular/core';\nimport { dataUrl } from './fileTools';\n\n@Directive({selector: '[ngfBackground]'})\nexport class ngfBackground {\n @Input('ngfBackground') file:any\n\n constructor(public ElementRef:ElementRef){}\n\n ngOnChanges( _changes:any ){\n dataUrl(this.file)\n .then(src=>{\n const urlString = 'url(\\'' + (src || '') + '\\')'\n this.ElementRef.nativeElement.style.backgroundImage = urlString\n })\n }\n}\n","import { Directive, EventEmitter, Output, Input } from '@angular/core';\n\n@Directive({selector: 'ngfUploadStatus'})\nexport class ngfUploadStatus {\n @Input() percent:number = 0\n @Output() percentChange:EventEmitter = new EventEmitter()\n @Input() httpEvent !: Event\n\n ngOnChanges( changes ){\n if( changes.httpEvent && changes.httpEvent.currentValue ){\n const event = changes.httpEvent.currentValue\n if (event.loaded && event.total) {\n setTimeout(()=>{\n this.percent = Math.round(100 * event.loaded / event.total);\n this.percentChange.emit( this.percent )\n }, 0)\n }\n }\n }\n}","import {\n IterableDiffer,\n IterableDiffers,\n Directive, EventEmitter,\n Output, Input\n} from '@angular/core';\n\n@Directive({selector: 'ngfFormData'})\nexport class ngfFormData {\n @Input() files !: File[]\n @Input() postName:string = \"file\"\n @Input() fileName !: string//force file name\n\n @Input() FormData:FormData = new FormData()\n @Output() FormDataChange:EventEmitter = new EventEmitter()\n\n differ:IterableDiffer<{}>\n\n constructor(IterableDiffers: IterableDiffers){\n this.differ = IterableDiffers.find([]).create()\n }\n\n ngDoCheck(){\n var changes = this.differ.diff( this.files );\n\n if (changes) {\n setTimeout(()=>this.buildFormData(), 0)\n }\n }\n\n buildFormData(){\n const isArray = typeof(this.files)==='object' && this.files.constructor===Array\n\n if( isArray ){\n this.FormData = new FormData()\n const files = this.files || []\n files.forEach(file=>\n this.FormData.append(this.postName, file, this.fileName||file.name)\n )\n this.FormDataChange.emit( this.FormData )\n }else{\n delete this.FormData\n }\n }\n}","import { Directive, ElementRef, Input } from '@angular/core';\nimport { dataUrl } from './fileTools';\n\n@Directive({ selector: '[ngfSrc]' })\nexport class ngfSrc {\n @Input('ngfSrc') file: any\n\n constructor(public ElementRef: ElementRef) { }\n\n ngOnChanges(_changes: any) {\n dataUrl(this.file)\n .then(src=>\n this.ElementRef.nativeElement.src = src\n )\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { ngfBackground } from './ngfBackground.directive';\nimport { ngfDrop } from './ngfDrop.directive';\nimport { ngf } from './ngf.directive';\nimport { ngfSelect } from './ngfSelect.directive';\nimport { ngfUploadStatus } from './ngfUploadStatus.directive';\nimport { ngfFormData } from './ngfFormData.directive';\nimport { ngfSrc } from './ngfSrc.directive';\n//import{ HttpModule } from '@angular/http';\n\nconst declarations = [\n ngfDrop,\n ngfSelect,\n ngfBackground,\n ngfSrc,\n ngfUploadStatus,\n ngfFormData,\n ngf\n]\n\n@NgModule({\n imports: [\n CommonModule\n //,HttpModule\n ],\n declarations: declarations,\n exports: declarations//[HttpModule, ...declarations]\n}) export class ngfModule {}","/*\n * Public API Surface of angular-file\n */\n\nexport * from './file-upload/ngfSelect.directive';\nexport * from './file-upload/ngfDrop.directive';\nexport * from './file-upload/ngf.directive';\nexport * from './file-upload/ngf.module';\nexport { ngfBackground } from './file-upload/ngfBackground.directive';\nexport { ngfSrc } from './file-upload/ngfSrc.directive';\nexport { ngfUploadStatus } from './file-upload/ngfUploadStatus.directive';\nexport { ngfFormData } from './file-upload/ngfFormData.directive';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/file-upload/doc-event-help.functions.ts b/src/file-upload/doc-event-help.functions.ts index b3cb61b3..46384cdd 100644 --- a/src/file-upload/doc-event-help.functions.ts +++ b/src/file-upload/doc-event-help.functions.ts @@ -19,14 +19,17 @@ export const detectSwipe = function(evt:any):boolean { var currentY = touches[0].clientY; if ((Math.abs(currentX - initialTouchStartX) > 20) || (Math.abs(currentY - initialTouchStartY) > 20)) { - evt.stopPropagation(); - if (evt.cancelable) { - evt.preventDefault(); - } - return false; + // Swipe detected + return true; + } + // touch was a 'tap' so prevent propogation and prevent + // device follow-up actions (click, mouseup, mousedown, etc.) + evt.stopPropagation(); + if (evt.cancelable) { + evt.preventDefault(); } } - return true; + return false; } } return false From d085be4ff9f830dd0f38d58943ea1bdc680a186d Mon Sep 17 00:00:00 2001 From: proyection <78162471+proyection@users.noreply.github.com> Date: Fri, 29 Jan 2021 08:55:51 -0600 Subject: [PATCH 2/2] Added commented code with reasoning for removal. --- dist/bundles/angular-file.umd.js | 13 +++++++++++-- dist/bundles/angular-file.umd.js.map | 2 +- dist/bundles/angular-file.umd.min.js.map | 2 +- .../file-upload/doc-event-help.functions.js | 15 ++++++++++++--- dist/fesm2015/angular-file.js | 13 +++++++++++-- dist/fesm2015/angular-file.js.map | 2 +- src/file-upload/doc-event-help.functions.ts | 13 +++++++++++-- 7 files changed, 48 insertions(+), 12 deletions(-) diff --git a/dist/bundles/angular-file.umd.js b/dist/bundles/angular-file.umd.js index 0c8606bc..c6c128db 100644 --- a/dist/bundles/angular-file.umd.js +++ b/dist/bundles/angular-file.umd.js @@ -317,16 +317,25 @@ var currentY = touches[0].clientY; if ((Math.abs(currentX - initialTouchStartX) > 20) || (Math.abs(currentY - initialTouchStartY) > 20)) { + // 29JAN2021 Removed/moved to inverse condition. + // Should be run during tap detection. + // evt.stopPropagation(); + // if (evt.cancelable) { + // evt.preventDefault(); + // } + // 29JAN2021 Swipe detected should return true instead of false. + // return false; // Swipe detected return true; } - // touch was a 'tap' so prevent propogation and prevent - // device follow-up actions (click, mouseup, mousedown, etc.) + // tap detected evt.stopPropagation(); if (evt.cancelable) { evt.preventDefault(); } } + // 29JAN2021 Non-swipe condition should return false instead of true. + // return true; return false; } } diff --git a/dist/bundles/angular-file.umd.js.map b/dist/bundles/angular-file.umd.js.map index d28d26e9..b6b9de22 100644 --- a/dist/bundles/angular-file.umd.js.map +++ b/dist/bundles/angular-file.umd.js.map @@ -1 +1 @@ -{"version":3,"file":"angular-file.umd.js","sources":["../../node_modules/tslib/tslib.es6.js","../src/file-upload/doc-event-help.functions.ts","../src/file-upload/fileTools.ts","../src/file-upload/ngf.directive.ts","../src/file-upload/ngfSelect.directive.ts","../src/file-upload/ngfDrop.directive.ts","../src/file-upload/ngfBackground.directive.ts","../src/file-upload/ngfUploadStatus.directive.ts","../src/file-upload/ngfFormData.directive.ts","../src/file-upload/ngfSrc.directive.ts","../src/file-upload/ngf.module.ts","../../src/public-api.ts","../../src/angular-file.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","export const isFileInput = function(elm:any){\n const ty = elm.getAttribute('type')\n return elm.tagName.toLowerCase() === 'input' && ty && ty.toLowerCase() === 'file';\n}\n\nlet initialTouchStartY = 0;\nlet initialTouchStartX = 0;\nexport const detectSwipe = function(evt:any):boolean {\n var touches = evt.changedTouches || (evt.originalEvent && evt.originalEvent.changedTouches);\n if (touches) {\n if (evt.type === 'touchstart') {\n initialTouchStartX = touches[0].clientX;\n initialTouchStartY = touches[0].clientY;\n return true; // don't block event default\n } else {\n // prevent scroll from triggering event\n if (evt.type === 'touchend') {\n var currentX = touches[0].clientX;\n var currentY = touches[0].clientY;\n if ((Math.abs(currentX - initialTouchStartX) > 20) ||\n (Math.abs(currentY - initialTouchStartY) > 20)) {\n // Swipe detected\n return true;\n }\n // touch was a 'tap' so prevent propogation and prevent\n // device follow-up actions (click, mouseup, mousedown, etc.)\n evt.stopPropagation();\n if (evt.cancelable) {\n evt.preventDefault();\n }\n }\n return false;\n }\n }\n return false\n}\n\nexport const createInvisibleFileInputWrap = function() {\n var fileElem = createFileInput()\n var label = document.createElement('label');\n label.innerHTML = 'upload'\n label.style.visibility = 'hidden'\n label.style.position = 'absolute'\n label.style.overflow = 'hidden'\n label.style.width = '0px'\n label.style.height = '0px'\n label.style.border = 'none'\n label.style.margin = '0px'\n label.style.padding = '0px'\n label.setAttribute('tabindex','-1')\n \n //bindAttrToFileInput(fileElem, label);\n //generatedElems.push({el: elem, ref: label});\n\n label.appendChild( fileElem )\n //document.body.appendChild( label );\n\n return label;\n}\n\nexport const createFileInput = function() {\n var fileElem = document.createElement('input');\n fileElem.type=\"file\"\n return fileElem;\n}\n","export function getWindow():any{return window}\n\nexport function acceptType(accept:string, type:string, name?:string):boolean { \n if( !accept ){\n return true\n }\n\n const defs = accept.split(',')\n let regx:RegExp\n let acceptRegString:string\n\n for(let x=defs.length-1; x >= 0; --x){\n //Escapes dots in mimetype \n acceptRegString = defs[x]\n //trim\n acceptRegString = acceptRegString.replace(/(^\\s+|\\s+$)/g,'')\n //Escapes stars in mimetype \n acceptRegString = acceptRegString.replace(/\\*/g,'.*')\n //let acceptReg = '^((' + acceptRegString\n //acceptReg = acceptReg.replace(/,/g,')|(') + '))$'\n \n //try by mime\n regx = new RegExp(acceptRegString, 'gi')\n if( type.search(regx)>=0 ){\n return true\n }\n\n //try by ext\n if( acceptRegString.substring(0, 1)=='.' ){ \n acceptRegString = '\\\\'+ acceptRegString//.substring(1, acceptRegString.length-1)//remove dot at front\n regx = new RegExp(acceptRegString+'$', 'i')\n if( (name||type).search(regx)>=0 ){\n return true\n }\n }\n }\n return false\n}\n\nexport interface InvalidFileItem{\n file:File\n type:string\n}\n\nexport function arrayBufferToBase64(buffer:any) {\n var binary = '';\n var bytes = new Uint8Array(buffer);\n var len = bytes.byteLength;\n for (var i = 0; i < len; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return window.btoa(binary);\n}\n\nexport function dataUrltoBlob(\n dataurl:string,\n name:string,\n origSize?:any\n):Blob{\n var arr = dataurl.split(',');\n var mimeMatch = arr[0].match(/:(.*?);/)\n var mime:string = mimeMatch ? mimeMatch[1] : 'text/plain'\n var bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);\n while (n--) {\n u8arr[n] = bstr.charCodeAt(n);\n }\n var blob = new window.Blob([u8arr], {type: mime});\n blob[\"name\"] = name;\n blob[\"$ngfOrigSize\"] = origSize;\n return blob;\n}\n\nexport interface orientationMeta{\n orientation: number\n fixedArrayBuffer?:any[]\n}\n\nexport function applyTransform(\n ctx:CanvasRenderingContext2D,\n orientation:number,\n width:number,\n height:number\n) {\n switch (orientation) {\n case 2:\n return ctx.transform(-1, 0, 0, 1, width, 0);\n case 3:\n return ctx.transform(-1, 0, 0, -1, width, height);\n case 4:\n return ctx.transform(1, 0, 0, -1, 0, height);\n case 5:\n return ctx.transform(0, 1, 1, 0, 0, 0);\n case 6:\n return ctx.transform(0, 1, -1, 0, height, 0);\n case 7:\n return ctx.transform(0, -1, -1, 0, height, width);\n case 8:\n return ctx.transform(0, -1, 1, 0, 0, width);\n }\n}\n\nexport function fixFileOrientationByMeta(\n file:File, result:orientationMeta\n):Promise{\n return dataUrl(file, true)\n .then(url=>{\n var canvas = document.createElement('canvas');\n var img = document.createElement('img');\n\n return >new Promise(function(res,rej){\n img.onload = function () {\n try {\n canvas.width = result.orientation > 4 ? img.height : img.width\n canvas.height = result.orientation > 4 ? img.width : img.height\n var ctx = canvas.getContext('2d')\n applyTransform(ctx, result.orientation, img.width, img.height)\n ctx.drawImage(img, 0, 0);\n var dataUrl = canvas.toDataURL(file.type || 'image/WebP', 0.934)\n const base = arrayBufferToBase64(result.fixedArrayBuffer)\n dataUrl = restoreExif(base, dataUrl)\n var blob = dataUrltoBlob(dataUrl, file.name)\n const newFile = blobToFile(blob, file.name);\n res(newFile);\n } catch (e) {\n rej(e)\n }\n };\n img.onerror = rej;\n img.src = url; \n })\n })\n}\n\nexport function applyExifRotation(\n file:File\n):Promise{\n if (file.type.indexOf('image/jpeg') !== 0) {\n return Promise.resolve(file);\n }\n\n return readOrientation(file)\n .then((result:orientationMeta)=>{\n if (result.orientation < 2 || result.orientation > 8) {\n return file\n }\n \n return fixFileOrientationByMeta(file,result)\n })\n}\n\nexport function readOrientation(\n file:File\n):Promise{\n return new Promise((res,rej)=>{\n var reader = new FileReader();\n var slicedFile = file.slice ? file.slice(0, 64 * 1024) : file;\n reader.readAsArrayBuffer(slicedFile);\n reader.onerror = rej\n reader.onload = function (e:any) {\n var result:orientationMeta = {orientation: 1};\n var view = new DataView( this.result );\n if (view.getUint16(0, false) !== 0xFFD8) return res(result);\n\n var length = view.byteLength,\n offset = 2;\n while (offset < length) {\n var marker = view.getUint16(offset, false);\n offset += 2;\n if (marker === 0xFFE1) {\n if (view.getUint32(offset += 2, false) !== 0x45786966) return res(result);\n\n var little = view.getUint16(offset += 6, false) === 0x4949;\n offset += view.getUint32(offset + 4, little);\n var tags = view.getUint16(offset, little);\n offset += 2;\n for (var i = 0; i < tags; i++)\n if (view.getUint16(offset + (i * 12), little) === 0x0112) {\n var orientation = view.getUint16(offset + (i * 12) + 8, little);\n if (orientation >= 2 && orientation <= 8) {\n view.setUint16(offset + (i * 12) + 8, 1, little);\n result.fixedArrayBuffer = e.target.result;\n }\n result.orientation = orientation;\n return res(result);\n }\n } else if ((marker & 0xFF00) !== 0xFF00) break;\n else offset += view.getUint16(offset, false);\n }\n return res(result);\n };\n })\n}\n\n/** converts file-input file into base64 dataUri */\nexport function dataUrl(\n file:any,\n disallowObjectUrl?:any\n):Promise{\n if (!file) return Promise.resolve(file)\n \n if ((disallowObjectUrl && file.$ngfDataUrl != null) || (!disallowObjectUrl && file.$ngfBlobUrl != null)) {\n return Promise.resolve( disallowObjectUrl ? file.$ngfDataUrl : file.$ngfBlobUrl )\n }\n\n var p = disallowObjectUrl ? file.$$ngfDataUrlPromise : file.$$ngfBlobUrlPromise;\n if (p) return p;\n\n const win = getWindow()\n let deferred:Promise\n if (win.FileReader && file &&\n (!win.FileAPI || navigator.userAgent.indexOf('MSIE 8') === -1 || file.size < 20000) &&\n (!win.FileAPI || navigator.userAgent.indexOf('MSIE 9') === -1 || file.size < 4000000)) {\n //prefer URL.createObjectURL for handling refrences to files of all sizes\n //since it doesn´t build a large string in memory\n var URL = win.URL || win.webkitURL;\n if (FileReader) {\n deferred = new Promise((res,rej)=>{\n var fileReader = new FileReader();\n fileReader.onload = function (event:any) {\n file.$ngfDataUrl = event.target.result;\n delete file.$ngfDataUrl;\n res( event.target.result )\n };\n fileReader.onerror = function (e) {\n file.$ngfDataUrl = '';\n rej(e)\n };\n fileReader.readAsDataURL(file);\n })\n } else {\n var url:any;\n try {\n url = URL.createObjectURL(file);\n } catch (e) {\n return Promise.reject(e);\n }\n \n deferred = Promise.resolve( url )\n file.$ngfBlobUrl = url;\n }\n } else {\n file[disallowObjectUrl ? '$ngfDataUrl' : '$ngfBlobUrl'] = '';\n return Promise.reject( new Error('Browser does not support window.FileReader, window.FileReader, or window.FileAPI') )//deferred.reject();\n }\n\n if (disallowObjectUrl) {\n p = file.$$ngfDataUrlPromise = deferred;\n } else {\n p = file.$$ngfBlobUrlPromise = deferred;\n }\n\n p = p.then((x:any)=>{\n delete file[disallowObjectUrl ? '$$ngfDataUrlPromise' : '$$ngfBlobUrlPromise'];\n return x\n })\n\n return p;\n}\n\nexport function restoreExif(orig:any, resized:any) {\n var ExifRestorer:any = {\n KEY_STR:'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='\n }\n\n ExifRestorer.encode64 = function (input:any) {\n var output = '',\n chr1, chr2, chr3:any = '',\n enc1, enc2, enc3, enc4:any = '',\n i = 0;\n\n do {\n chr1 = input[i++];\n chr2 = input[i++];\n chr3 = input[i++];\n\n enc1 = chr1 >> 2;\n enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);\n enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);\n enc4 = chr3 & 63;\n\n if (isNaN(chr2)) {\n enc3 = enc4 = 64;\n } else if (isNaN(chr3)) {\n enc4 = 64;\n }\n\n output = output +\n this.KEY_STR.charAt(enc1) +\n this.KEY_STR.charAt(enc2) +\n this.KEY_STR.charAt(enc3) +\n this.KEY_STR.charAt(enc4);\n chr1 = chr2 = chr3 = '';\n enc1 = enc2 = enc3 = enc4 = '';\n } while (i < input.length);\n\n return output;\n };\n\n ExifRestorer.restore = function (origFileBase64:any, resizedFileBase64:any) {\n if (origFileBase64.match('data:image/jpeg;base64,')) {\n origFileBase64 = origFileBase64.replace('data:image/jpeg;base64,', '');\n }\n\n var rawImage:number[] = this.decode64(origFileBase64);\n var segments = this.slice2Segments(rawImage);\n\n var image = this.exifManipulation(resizedFileBase64, segments);\n\n return 'data:image/jpeg;base64,' + this.encode64(image);\n };\n\n\n ExifRestorer.exifManipulation = function (resizedFileBase64:any, segments:any) {\n var exifArray = this.getExifArray(segments),\n newImageArray = this.insertExif(resizedFileBase64, exifArray);\n return new Uint8Array(newImageArray);\n };\n\n ExifRestorer.getExifArray = function (segments:number[][]) {\n var seg;\n for (var x = 0; x < segments.length; x++) {\n seg = segments[x];\n if (seg[0] === 255 && seg[1] === 225) //(ff e1)\n {\n return seg;\n }\n }\n return [];\n };\n\n\n ExifRestorer.insertExif = function (resizedFileBase64:any, exifArray:any) {\n var imageData = resizedFileBase64.replace('data:image/jpeg;base64,', ''),\n buf = this.decode64(imageData),\n separatePoint = buf.indexOf(255, 3),\n mae = buf.slice(0, separatePoint),\n ato = buf.slice(separatePoint),\n array = mae;\n\n array = array.concat(exifArray);\n array = array.concat(ato);\n return array;\n };\n\n\n ExifRestorer.slice2Segments = function(\n rawImageArray:number[]\n ) {\n var head:number = 0,\n segments:number[][] = [];\n\n while (1) {\n if (rawImageArray[head] === 255 && rawImageArray[head + 1] === 218) {\n break;\n }\n if (rawImageArray[head] === 255 && rawImageArray[head + 1] === 216) {\n head += 2;\n }\n else {\n var length = rawImageArray[head + 2] * 256 + rawImageArray[head + 3]\n var endPoint = head + length + 2\n var seg:number[] = rawImageArray.slice(head, endPoint)\n segments.push(seg);\n head = endPoint;\n }\n if (head > rawImageArray.length) {\n break;\n }\n }\n\n return segments;\n };\n\n\n ExifRestorer.decode64 = function (\n input:any\n ):number[]{\n var chr1, chr2, chr3:any = '',\n enc1, enc2, enc3, enc4:any = '',\n i = 0,\n buf:number[] = [];\n\n // remove all characters that are not A-Z, a-z, 0-9, +, /, or =\n var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n if (base64test.exec(input)) {\n console.log('There were invalid base64 characters in the input text.');\n }\n input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, '');\n\n do {\n enc1 = this.KEY_STR.indexOf(input.charAt(i++));\n enc2 = this.KEY_STR.indexOf(input.charAt(i++));\n enc3 = this.KEY_STR.indexOf(input.charAt(i++));\n enc4 = this.KEY_STR.indexOf(input.charAt(i++));\n\n chr1 = (enc1 << 2) | (enc2 >> 4);\n chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\n chr3 = ((enc3 & 3) << 6) | enc4;\n\n buf.push(chr1);\n\n if (enc3 !== 64) {\n buf.push(chr2);\n }\n if (enc4 !== 64) {\n buf.push(chr3);\n }\n\n chr1 = chr2 = chr3 = '';\n enc1 = enc2 = enc3 = enc4 = '';\n\n } while (i < input.length);\n\n return buf;\n };\n\n return ExifRestorer.restore(orig, resized); //<= EXIF\n};\n\nfunction blobToFile(theBlob: Blob, fileName:string): File {\n var b: any = theBlob;\n //A Blob() is almost a File() - it's just missing the two properties below which we will add\n b.lastModifiedDate = new Date();\n b.name = fileName;\n\n //Cast to a File() type\n return theBlob;\n}\n","import { Directive, EventEmitter, ElementRef, Input, Output, HostListener, ChangeDetectionStrategy } from '@angular/core';\nimport { createInvisibleFileInputWrap, isFileInput, detectSwipe } from \"./doc-event-help.functions\"\nimport {\n acceptType, InvalidFileItem,\n applyExifRotation, dataUrl\n} from \"./fileTools\"\n\nexport interface dragMeta{\n type:string\n kind:string\n}\n\n/** A master base set of logic intended to support file select/drag/drop operations\n NOTE: Use ngfDrop for full drag/drop. Use ngfSelect for selecting\n*/\n@Directive({\n selector: \"[ngf]\",\n exportAs:\"ngf\"\n})\nexport class ngf {\n fileElm:any\n filters:{name:string, fn:(file:File)=>boolean}[] = []\n lastFileCount:number=0\n\n @Input() multiple !:string\n @Input() accept !:string\n @Input() maxSize !:number\n //@Input() forceFilename:string\n //@Input() forcePostname:string\n @Input() ngfFixOrientation:boolean = true\n\n @Input() fileDropDisabled:boolean = false\n @Input() selectable: boolean | string = false\n @Output('init') directiveInit:EventEmitter = new EventEmitter()\n\n @Input() lastInvalids:InvalidFileItem[] = []\n @Output() lastInvalidsChange:EventEmitter<{file:File,type:string}[]> = new EventEmitter()\n\n @Input() lastBaseUrl !: string//base64 last file uploaded url\n @Output() lastBaseUrlChange:EventEmitter = new EventEmitter()\n\n @Input() file !: File//last file uploaded\n @Output() fileChange:EventEmitter = new EventEmitter()\n\n @Input() files:File[] = []\n @Output() filesChange:EventEmitter = new EventEmitter();\n\n @Input() capturePaste: boolean; // window paste file watching (empty string turns on)\n pasteCapturer !: (e: Event) => void;\n\n constructor(public element:ElementRef){\n this.initFilters()\n }\n\n initFilters(){\n // the order is important\n this.filters.push({name: 'accept', fn: this._acceptFilter})\n this.filters.push({name: 'fileSize', fn: this._fileSizeFilter})\n\n //this.filters.push({name: 'fileType', fn: this._fileTypeFilter})\n //this.filters.push({name: 'queueLimit', fn: this._queueLimitFilter})\n //this.filters.push({name: 'mimeType', fn: this._mimeTypeFilter})\n }\n\n ngOnDestroy(){\n delete this.fileElm//faster memory release of dom element\n this.destroyPasteListener();\n }\n\n ngOnInit(){\n const selectable = (this.selectable || this.selectable==='') && !['false', 'null', '0'].includes(this.selectable as string);\n if( selectable ){\n this.enableSelecting()\n }\n\n if( this.multiple ){\n this.paramFileElm().setAttribute('multiple', this.multiple)\n }\n\n this.evalCapturePaste();\n\n //create reference to this class with one cycle delay to avoid ExpressionChangedAfterItHasBeenCheckedError\n setTimeout(()=>{\n this.directiveInit.emit(this)\n }, 0)\n }\n\n ngOnChanges( changes ){\n if( changes.accept ){\n this.paramFileElm().setAttribute('accept', changes.accept.currentValue || '*')\n }\n\n if (changes.capturePaste) {\n this.evalCapturePaste();\n }\n }\n\n evalCapturePaste() {\n const isActive = this.capturePaste || (this.capturePaste as any)==='' || ['false', '0', 'null'].includes(this.capturePaste as any);\n\n if (isActive) {\n if (this.pasteCapturer) {\n return; // already listening\n }\n\n this.pasteCapturer = (e: Event) => {\n const clip = (e as any).clipboardData;\n if (clip && clip.files && clip.files.length) {\n this.handleFiles(clip.files);\n e.preventDefault();\n }\n }\n\n window.addEventListener('paste', this.pasteCapturer);\n\n return;\n }\n\n this.destroyPasteListener();\n }\n\n destroyPasteListener() {\n if (this.pasteCapturer) {\n window.removeEventListener('paste', this.pasteCapturer);\n delete this.pasteCapturer;\n }\n }\n\n paramFileElm(){\n if( this.fileElm )return this.fileElm//already defined\n\n //elm is a file input\n const isFile = isFileInput( this.element.nativeElement )\n if(isFile)return this.fileElm = this.element.nativeElement\n\n //create foo file input\n const label = createInvisibleFileInputWrap()\n this.fileElm = label.getElementsByTagName('input')[0]\n this.fileElm.addEventListener('change', this.changeFn.bind(this));\n this.element.nativeElement.appendChild( label )\n return this.fileElm\n }\n\n enableSelecting(){\n let elm = this.element.nativeElement\n\n if( isFileInput(elm) ){\n const bindedHandler = _ev=>this.beforeSelect()\n elm.addEventListener('click', bindedHandler)\n elm.addEventListener('touchstart', bindedHandler)\n return\n }\n\n const bindedHandler = ev=>this.clickHandler(ev)\n elm.addEventListener('click', bindedHandler)\n elm.addEventListener('touchstart', bindedHandler)\n elm.addEventListener('touchend', bindedHandler)\n }\n\n getValidFiles( files:File[] ):File[]{\n const rtn:File[] = []\n for(let x=files.length-1; x >= 0; --x){\n if( this.isFileValid(files[x]) ){\n rtn.push( files[x] )\n }\n }\n return rtn\n }\n\n getInvalidFiles(files:File[]):InvalidFileItem[]{\n const rtn:InvalidFileItem[] = []\n for(let x=files.length-1; x >= 0; --x){\n let failReason = this.getFileFilterFailName(files[x])\n if( failReason ){\n rtn.push({\n file : files[x],\n type : failReason\n })\n }\n }\n return rtn\n }\n\n // Primary handler of files coming in\n handleFiles(files:File[]){\n const valids = this.getValidFiles(files)\n\n if(files.length!=valids.length){\n this.lastInvalids = this.getInvalidFiles(files)\n }else{\n delete this.lastInvalids\n }\n\n this.lastInvalidsChange.emit(this.lastInvalids)\n\n if( valids.length ){\n if( this.ngfFixOrientation ){\n this.applyExifRotations(valids)\n .then( fixedFiles=>this.que(fixedFiles) )\n }else{\n this.que(valids)\n }\n }\n\n if (this.isEmptyAfterSelection()) {\n this.element.nativeElement.value = ''\n }\n }\n\n que( files:File[] ){\n this.files = this.files || []\n Array.prototype.push.apply(this.files, files)\n\n //below break memory ref and doesnt act like a que\n //this.files = files//causes memory change which triggers bindings like \n\n this.filesChange.emit( this.files )\n\n if(files.length){\n this.fileChange.emit( this.file=files[0] )\n\n if(this.lastBaseUrlChange.observers.length){\n dataUrl( files[0] )\n .then( url=>this.lastBaseUrlChange.emit(url) )\n }\n }\n\n //will be checked for input value clearing\n this.lastFileCount = this.files.length\n }\n\n /** called when input has files */\n changeFn(event:any) {\n var fileList = event.__files_ || (event.target && event.target.files)\n\n if (!fileList) return;\n\n this.stopEvent(event);\n this.handleFiles(fileList)\n }\n\n clickHandler(evt:any){\n const elm = this.element.nativeElement\n if (elm.getAttribute('disabled') || this.fileDropDisabled){\n return false;\n }\n\n var r = detectSwipe(evt);\n // prevent the click if it is a swipe\n if ( r!==false ) return r;\n\n const fileElm = this.paramFileElm()\n fileElm.click()\n //fileElm.dispatchEvent( new Event('click') );\n this.beforeSelect()\n\n return false;\n }\n\n beforeSelect(){\n if( this.files && this.lastFileCount===this.files.length )return\n\n //if no files in array, be sure browser doesnt prevent reselect of same file (see github issue 27)\n this.fileElm.value = null\n }\n\n isEmptyAfterSelection():boolean {\n return !!this.element.nativeElement.attributes.multiple;\n }\n\n eventToTransfer(event:any):any {\n if(event.dataTransfer)return event.dataTransfer\n return event.originalEvent ? event.originalEvent.dataTransfer : null\n }\n\n stopEvent(event:any):any {\n event.preventDefault();\n event.stopPropagation();\n }\n\n transferHasFiles(transfer:any):any {\n if (!transfer.types) {\n return false;\n }\n\n if (transfer.types.indexOf) {\n return transfer.types.indexOf('Files') !== -1;\n } else if (transfer.types.contains) {\n return transfer.types.contains('Files');\n } else {\n return false;\n }\n }\n\n eventToFiles(event:Event){\n const transfer = this.eventToTransfer(event);\n if( transfer ){\n if(transfer.files && transfer.files.length){\n return transfer.files\n }\n if(transfer.items && transfer.items.length){\n return transfer.items\n }\n }\n return []\n }\n\n applyExifRotations(\n files:File[]\n ):Promise{\n const mapper = (\n file:File,index:number\n ):Promise=>{\n return applyExifRotation(file)\n .then( fixedFile=>files.splice(index, 1, fixedFile) )\n }\n\n const proms:Promise[] = []\n for(let x=files.length-1; x >= 0; --x){\n proms[x] = mapper( files[x], x )\n }\n return Promise.all( proms ).then( ()=>files )\n }\n\n @HostListener('change', ['$event'])\n onChange(event:Event):void {\n let files = this.element.nativeElement.files || this.eventToFiles(event)\n\n if(!files.length)return\n\n this.stopEvent(event);\n this.handleFiles(files)\n }\n\n getFileFilterFailName(\n file:File\n ):string | undefined{\n for(let i = 0; i < this.filters.length; i++){\n if( !this.filters[i].fn.call(this, file) ){\n return this.filters[i].name\n }\n }\n return undefined\n }\n\n isFileValid(file:File):boolean{\n const noFilters = !this.accept && (!this.filters || !this.filters.length)\n if( noFilters ){\n return true//we have no filters so all files are valid\n }\n\n return this.getFileFilterFailName(file) ? false : true\n }\n\n isFilesValid(files:File[]){\n for(let x=files.length-1; x >= 0; --x){\n if( !this.isFileValid(files[x]) ){\n return false\n }\n }\n return true\n }\n\n protected _acceptFilter(item:File):boolean {\n return acceptType(this.accept, item.type, item.name)\n }\n\n protected _fileSizeFilter(item:File):boolean {\n return !(this.maxSize && item.size > this.maxSize);\n }\n\n /** browsers try hard to conceal data about file drags, this tends to undo that */\n filesToWriteableObject( files:File[] ):dragMeta[]{\n const jsonFiles:dragMeta[] = []\n for(let x=0; x < files.length; ++x){\n jsonFiles.push({\n type:files[x].type,\n kind:files[x][\"kind\"]\n })\n }\n return jsonFiles\n }\n}\n","import { Directive, Input } from \"@angular/core\"\nimport { ngf } from \"./ngf.directive\"\n\n@Directive({\n selector: \"[ngfSelect]\",\n exportAs: \"ngfSelect\"\n})\nexport class ngfSelect extends ngf {\n @Input() selectable:any = true\n}","import {\n Directive, EventEmitter,\n HostListener, Input, Output\n} from '@angular/core';\nimport { ngf, dragMeta } from \"./ngf.directive\"\n\n@Directive({\n selector: \"[ngfDrop]\",\n exportAs: \"ngfDrop\"\n})\nexport class ngfDrop extends ngf {\n @Output() fileOver:EventEmitter = new EventEmitter();\n\n @Input() validDrag:boolean = false\n @Output() validDragChange:EventEmitter = new EventEmitter()\n\n @Input() invalidDrag = false\n @Output() invalidDragChange:EventEmitter = new EventEmitter()\n\n @Input() dragFiles !: dragMeta[]\n @Output() dragFilesChange:EventEmitter = new EventEmitter()\n\n @HostListener('drop', ['$event'])\n onDrop(event:Event):void {\n if(this.fileDropDisabled){\n this.stopEvent(event);\n return\n }\n\n this.closeDrags()\n let files = this.eventToFiles(event)\n\n if(!files.length)return\n\n this.stopEvent(event);\n this.handleFiles(files)\n }\n\n handleFiles(files:File[]){\n this.fileOver.emit(false)//turn-off dragover\n super.handleFiles(files)\n }\n\n @HostListener('dragover', ['$event'])\n onDragOver(event:Event):void {\n if(this.fileDropDisabled){\n this.stopEvent(event);\n return\n }\n\n const transfer = this.eventToTransfer(event)\n\n let files = this.eventToFiles(event)\n\n let jsonFiles = this.filesToWriteableObject(files)\n this.dragFilesChange.emit( this.dragFiles=jsonFiles )\n\n if( files.length ){\n this.validDrag = this.isFilesValid(files)\n }else{\n //Safari, IE11 & some browsers do NOT tell you about dragged files until dropped. Always consider a valid drag\n this.validDrag = true\n }\n\n this.validDragChange.emit(this.validDrag)\n\n this.invalidDrag = !this.validDrag\n this.invalidDragChange.emit(this.invalidDrag)\n\n transfer.dropEffect = 'copy'//change cursor and such\n this.stopEvent(event)\n this.fileOver.emit(true)\n }\n\n closeDrags(){\n delete this.validDrag\n this.validDragChange.emit(this.validDrag)\n this.invalidDrag = false\n this.invalidDragChange.emit(this.invalidDrag)\n delete this.dragFiles\n this.dragFilesChange.emit( this.dragFiles )\n }\n\n @HostListener('dragleave', ['$event'])\n onDragLeave(event:Event):any {\n if(this.fileDropDisabled){\n this.stopEvent(event);\n return\n }\n \n this.closeDrags()\n\n if ((this as any).element) {\n if (event.currentTarget === (this as any).element[0]) {\n return;\n }\n }\n\n this.stopEvent(event);\n this.fileOver.emit(false);\n }\n}","import { Directive, ElementRef, Input } from '@angular/core';\nimport { dataUrl } from './fileTools';\n\n@Directive({selector: '[ngfBackground]'})\nexport class ngfBackground {\n @Input('ngfBackground') file:any\n\n constructor(public ElementRef:ElementRef){}\n\n ngOnChanges( _changes:any ){\n dataUrl(this.file)\n .then(src=>{\n const urlString = 'url(\\'' + (src || '') + '\\')'\n this.ElementRef.nativeElement.style.backgroundImage = urlString\n })\n }\n}\n","import { Directive, EventEmitter, Output, Input } from '@angular/core';\n\n@Directive({selector: 'ngfUploadStatus'})\nexport class ngfUploadStatus {\n @Input() percent:number = 0\n @Output() percentChange:EventEmitter = new EventEmitter()\n @Input() httpEvent !: Event\n\n ngOnChanges( changes ){\n if( changes.httpEvent && changes.httpEvent.currentValue ){\n const event = changes.httpEvent.currentValue\n if (event.loaded && event.total) {\n setTimeout(()=>{\n this.percent = Math.round(100 * event.loaded / event.total);\n this.percentChange.emit( this.percent )\n }, 0)\n }\n }\n }\n}","import {\n IterableDiffer,\n IterableDiffers,\n Directive, EventEmitter,\n Output, Input\n} from '@angular/core';\n\n@Directive({selector: 'ngfFormData'})\nexport class ngfFormData {\n @Input() files !: File[]\n @Input() postName:string = \"file\"\n @Input() fileName !: string//force file name\n\n @Input() FormData:FormData = new FormData()\n @Output() FormDataChange:EventEmitter = new EventEmitter()\n\n differ:IterableDiffer<{}>\n\n constructor(IterableDiffers: IterableDiffers){\n this.differ = IterableDiffers.find([]).create()\n }\n\n ngDoCheck(){\n var changes = this.differ.diff( this.files );\n\n if (changes) {\n setTimeout(()=>this.buildFormData(), 0)\n }\n }\n\n buildFormData(){\n const isArray = typeof(this.files)==='object' && this.files.constructor===Array\n\n if( isArray ){\n this.FormData = new FormData()\n const files = this.files || []\n files.forEach(file=>\n this.FormData.append(this.postName, file, this.fileName||file.name)\n )\n this.FormDataChange.emit( this.FormData )\n }else{\n delete this.FormData\n }\n }\n}","import { Directive, ElementRef, Input } from '@angular/core';\nimport { dataUrl } from './fileTools';\n\n@Directive({ selector: '[ngfSrc]' })\nexport class ngfSrc {\n @Input('ngfSrc') file: any\n\n constructor(public ElementRef: ElementRef) { }\n\n ngOnChanges(_changes: any) {\n dataUrl(this.file)\n .then(src=>\n this.ElementRef.nativeElement.src = src\n )\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { ngfBackground } from './ngfBackground.directive';\nimport { ngfDrop } from './ngfDrop.directive';\nimport { ngf } from './ngf.directive';\nimport { ngfSelect } from './ngfSelect.directive';\nimport { ngfUploadStatus } from './ngfUploadStatus.directive';\nimport { ngfFormData } from './ngfFormData.directive';\nimport { ngfSrc } from './ngfSrc.directive';\n//import{ HttpModule } from '@angular/http';\n\nconst declarations = [\n ngfDrop,\n ngfSelect,\n ngfBackground,\n ngfSrc,\n ngfUploadStatus,\n ngfFormData,\n ngf\n]\n\n@NgModule({\n imports: [\n CommonModule\n //,HttpModule\n ],\n declarations: declarations,\n exports: declarations//[HttpModule, ...declarations]\n}) export class ngfModule {}","/*\n * Public API Surface of angular-file\n */\n\nexport * from './file-upload/ngfSelect.directive';\nexport * from './file-upload/ngfDrop.directive';\nexport * from './file-upload/ngf.directive';\nexport * from './file-upload/ngf.module';\nexport { ngfBackground } from './file-upload/ngfBackground.directive';\nexport { ngfSrc } from './file-upload/ngfSrc.directive';\nexport { ngfUploadStatus } from './file-upload/ngfUploadStatus.directive';\nexport { ngfFormData } from './file-upload/ngfFormData.directive';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["EventEmitter","Directive","ElementRef","Input","Output","HostListener","IterableDiffers","NgModule","CommonModule"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"angular-file.umd.js","sources":["../../node_modules/tslib/tslib.es6.js","../src/file-upload/doc-event-help.functions.ts","../src/file-upload/fileTools.ts","../src/file-upload/ngf.directive.ts","../src/file-upload/ngfSelect.directive.ts","../src/file-upload/ngfDrop.directive.ts","../src/file-upload/ngfBackground.directive.ts","../src/file-upload/ngfUploadStatus.directive.ts","../src/file-upload/ngfFormData.directive.ts","../src/file-upload/ngfSrc.directive.ts","../src/file-upload/ngf.module.ts","../../src/public-api.ts","../../src/angular-file.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","export const isFileInput = function(elm:any){\n const ty = elm.getAttribute('type')\n return elm.tagName.toLowerCase() === 'input' && ty && ty.toLowerCase() === 'file';\n}\n\nlet initialTouchStartY = 0;\nlet initialTouchStartX = 0;\nexport const detectSwipe = function(evt:any):boolean {\n var touches = evt.changedTouches || (evt.originalEvent && evt.originalEvent.changedTouches);\n if (touches) {\n if (evt.type === 'touchstart') {\n initialTouchStartX = touches[0].clientX;\n initialTouchStartY = touches[0].clientY;\n return true; // don't block event default\n } else {\n // prevent scroll from triggering event\n if (evt.type === 'touchend') {\n var currentX = touches[0].clientX;\n var currentY = touches[0].clientY;\n if ((Math.abs(currentX - initialTouchStartX) > 20) ||\n (Math.abs(currentY - initialTouchStartY) > 20)) {\n // 29JAN2021 Removed/moved to inverse condition.\n // Should be run during tap detection.\n // evt.stopPropagation();\n // if (evt.cancelable) {\n // evt.preventDefault();\n // }\n // 29JAN2021 Swipe detected should return true instead of false.\n // return false;\n // Swipe detected\n return true;\n }\n // tap detected\n evt.stopPropagation();\n if (evt.cancelable) {\n evt.preventDefault();\n }\n }\n // 29JAN2021 Non-swipe condition should return false instead of true.\n // return true;\n return false;\n }\n }\n return false\n}\n\nexport const createInvisibleFileInputWrap = function() {\n var fileElem = createFileInput()\n var label = document.createElement('label');\n label.innerHTML = 'upload'\n label.style.visibility = 'hidden'\n label.style.position = 'absolute'\n label.style.overflow = 'hidden'\n label.style.width = '0px'\n label.style.height = '0px'\n label.style.border = 'none'\n label.style.margin = '0px'\n label.style.padding = '0px'\n label.setAttribute('tabindex','-1')\n \n //bindAttrToFileInput(fileElem, label);\n //generatedElems.push({el: elem, ref: label});\n\n label.appendChild( fileElem )\n //document.body.appendChild( label );\n\n return label;\n}\n\nexport const createFileInput = function() {\n var fileElem = document.createElement('input');\n fileElem.type=\"file\"\n return fileElem;\n}\n","export function getWindow():any{return window}\n\nexport function acceptType(accept:string, type:string, name?:string):boolean { \n if( !accept ){\n return true\n }\n\n const defs = accept.split(',')\n let regx:RegExp\n let acceptRegString:string\n\n for(let x=defs.length-1; x >= 0; --x){\n //Escapes dots in mimetype \n acceptRegString = defs[x]\n //trim\n acceptRegString = acceptRegString.replace(/(^\\s+|\\s+$)/g,'')\n //Escapes stars in mimetype \n acceptRegString = acceptRegString.replace(/\\*/g,'.*')\n //let acceptReg = '^((' + acceptRegString\n //acceptReg = acceptReg.replace(/,/g,')|(') + '))$'\n \n //try by mime\n regx = new RegExp(acceptRegString, 'gi')\n if( type.search(regx)>=0 ){\n return true\n }\n\n //try by ext\n if( acceptRegString.substring(0, 1)=='.' ){ \n acceptRegString = '\\\\'+ acceptRegString//.substring(1, acceptRegString.length-1)//remove dot at front\n regx = new RegExp(acceptRegString+'$', 'i')\n if( (name||type).search(regx)>=0 ){\n return true\n }\n }\n }\n return false\n}\n\nexport interface InvalidFileItem{\n file:File\n type:string\n}\n\nexport function arrayBufferToBase64(buffer:any) {\n var binary = '';\n var bytes = new Uint8Array(buffer);\n var len = bytes.byteLength;\n for (var i = 0; i < len; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return window.btoa(binary);\n}\n\nexport function dataUrltoBlob(\n dataurl:string,\n name:string,\n origSize?:any\n):Blob{\n var arr = dataurl.split(',');\n var mimeMatch = arr[0].match(/:(.*?);/)\n var mime:string = mimeMatch ? mimeMatch[1] : 'text/plain'\n var bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);\n while (n--) {\n u8arr[n] = bstr.charCodeAt(n);\n }\n var blob = new window.Blob([u8arr], {type: mime});\n blob[\"name\"] = name;\n blob[\"$ngfOrigSize\"] = origSize;\n return blob;\n}\n\nexport interface orientationMeta{\n orientation: number\n fixedArrayBuffer?:any[]\n}\n\nexport function applyTransform(\n ctx:CanvasRenderingContext2D,\n orientation:number,\n width:number,\n height:number\n) {\n switch (orientation) {\n case 2:\n return ctx.transform(-1, 0, 0, 1, width, 0);\n case 3:\n return ctx.transform(-1, 0, 0, -1, width, height);\n case 4:\n return ctx.transform(1, 0, 0, -1, 0, height);\n case 5:\n return ctx.transform(0, 1, 1, 0, 0, 0);\n case 6:\n return ctx.transform(0, 1, -1, 0, height, 0);\n case 7:\n return ctx.transform(0, -1, -1, 0, height, width);\n case 8:\n return ctx.transform(0, -1, 1, 0, 0, width);\n }\n}\n\nexport function fixFileOrientationByMeta(\n file:File, result:orientationMeta\n):Promise{\n return dataUrl(file, true)\n .then(url=>{\n var canvas = document.createElement('canvas');\n var img = document.createElement('img');\n\n return >new Promise(function(res,rej){\n img.onload = function () {\n try {\n canvas.width = result.orientation > 4 ? img.height : img.width\n canvas.height = result.orientation > 4 ? img.width : img.height\n var ctx = canvas.getContext('2d')\n applyTransform(ctx, result.orientation, img.width, img.height)\n ctx.drawImage(img, 0, 0);\n var dataUrl = canvas.toDataURL(file.type || 'image/WebP', 0.934)\n const base = arrayBufferToBase64(result.fixedArrayBuffer)\n dataUrl = restoreExif(base, dataUrl)\n var blob = dataUrltoBlob(dataUrl, file.name)\n const newFile = blobToFile(blob, file.name);\n res(newFile);\n } catch (e) {\n rej(e)\n }\n };\n img.onerror = rej;\n img.src = url; \n })\n })\n}\n\nexport function applyExifRotation(\n file:File\n):Promise{\n if (file.type.indexOf('image/jpeg') !== 0) {\n return Promise.resolve(file);\n }\n\n return readOrientation(file)\n .then((result:orientationMeta)=>{\n if (result.orientation < 2 || result.orientation > 8) {\n return file\n }\n \n return fixFileOrientationByMeta(file,result)\n })\n}\n\nexport function readOrientation(\n file:File\n):Promise{\n return new Promise((res,rej)=>{\n var reader = new FileReader();\n var slicedFile = file.slice ? file.slice(0, 64 * 1024) : file;\n reader.readAsArrayBuffer(slicedFile);\n reader.onerror = rej\n reader.onload = function (e:any) {\n var result:orientationMeta = {orientation: 1};\n var view = new DataView( this.result );\n if (view.getUint16(0, false) !== 0xFFD8) return res(result);\n\n var length = view.byteLength,\n offset = 2;\n while (offset < length) {\n var marker = view.getUint16(offset, false);\n offset += 2;\n if (marker === 0xFFE1) {\n if (view.getUint32(offset += 2, false) !== 0x45786966) return res(result);\n\n var little = view.getUint16(offset += 6, false) === 0x4949;\n offset += view.getUint32(offset + 4, little);\n var tags = view.getUint16(offset, little);\n offset += 2;\n for (var i = 0; i < tags; i++)\n if (view.getUint16(offset + (i * 12), little) === 0x0112) {\n var orientation = view.getUint16(offset + (i * 12) + 8, little);\n if (orientation >= 2 && orientation <= 8) {\n view.setUint16(offset + (i * 12) + 8, 1, little);\n result.fixedArrayBuffer = e.target.result;\n }\n result.orientation = orientation;\n return res(result);\n }\n } else if ((marker & 0xFF00) !== 0xFF00) break;\n else offset += view.getUint16(offset, false);\n }\n return res(result);\n };\n })\n}\n\n/** converts file-input file into base64 dataUri */\nexport function dataUrl(\n file:any,\n disallowObjectUrl?:any\n):Promise{\n if (!file) return Promise.resolve(file)\n \n if ((disallowObjectUrl && file.$ngfDataUrl != null) || (!disallowObjectUrl && file.$ngfBlobUrl != null)) {\n return Promise.resolve( disallowObjectUrl ? file.$ngfDataUrl : file.$ngfBlobUrl )\n }\n\n var p = disallowObjectUrl ? file.$$ngfDataUrlPromise : file.$$ngfBlobUrlPromise;\n if (p) return p;\n\n const win = getWindow()\n let deferred:Promise\n if (win.FileReader && file &&\n (!win.FileAPI || navigator.userAgent.indexOf('MSIE 8') === -1 || file.size < 20000) &&\n (!win.FileAPI || navigator.userAgent.indexOf('MSIE 9') === -1 || file.size < 4000000)) {\n //prefer URL.createObjectURL for handling refrences to files of all sizes\n //since it doesn´t build a large string in memory\n var URL = win.URL || win.webkitURL;\n if (FileReader) {\n deferred = new Promise((res,rej)=>{\n var fileReader = new FileReader();\n fileReader.onload = function (event:any) {\n file.$ngfDataUrl = event.target.result;\n delete file.$ngfDataUrl;\n res( event.target.result )\n };\n fileReader.onerror = function (e) {\n file.$ngfDataUrl = '';\n rej(e)\n };\n fileReader.readAsDataURL(file);\n })\n } else {\n var url:any;\n try {\n url = URL.createObjectURL(file);\n } catch (e) {\n return Promise.reject(e);\n }\n \n deferred = Promise.resolve( url )\n file.$ngfBlobUrl = url;\n }\n } else {\n file[disallowObjectUrl ? '$ngfDataUrl' : '$ngfBlobUrl'] = '';\n return Promise.reject( new Error('Browser does not support window.FileReader, window.FileReader, or window.FileAPI') )//deferred.reject();\n }\n\n if (disallowObjectUrl) {\n p = file.$$ngfDataUrlPromise = deferred;\n } else {\n p = file.$$ngfBlobUrlPromise = deferred;\n }\n\n p = p.then((x:any)=>{\n delete file[disallowObjectUrl ? '$$ngfDataUrlPromise' : '$$ngfBlobUrlPromise'];\n return x\n })\n\n return p;\n}\n\nexport function restoreExif(orig:any, resized:any) {\n var ExifRestorer:any = {\n KEY_STR:'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='\n }\n\n ExifRestorer.encode64 = function (input:any) {\n var output = '',\n chr1, chr2, chr3:any = '',\n enc1, enc2, enc3, enc4:any = '',\n i = 0;\n\n do {\n chr1 = input[i++];\n chr2 = input[i++];\n chr3 = input[i++];\n\n enc1 = chr1 >> 2;\n enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);\n enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);\n enc4 = chr3 & 63;\n\n if (isNaN(chr2)) {\n enc3 = enc4 = 64;\n } else if (isNaN(chr3)) {\n enc4 = 64;\n }\n\n output = output +\n this.KEY_STR.charAt(enc1) +\n this.KEY_STR.charAt(enc2) +\n this.KEY_STR.charAt(enc3) +\n this.KEY_STR.charAt(enc4);\n chr1 = chr2 = chr3 = '';\n enc1 = enc2 = enc3 = enc4 = '';\n } while (i < input.length);\n\n return output;\n };\n\n ExifRestorer.restore = function (origFileBase64:any, resizedFileBase64:any) {\n if (origFileBase64.match('data:image/jpeg;base64,')) {\n origFileBase64 = origFileBase64.replace('data:image/jpeg;base64,', '');\n }\n\n var rawImage:number[] = this.decode64(origFileBase64);\n var segments = this.slice2Segments(rawImage);\n\n var image = this.exifManipulation(resizedFileBase64, segments);\n\n return 'data:image/jpeg;base64,' + this.encode64(image);\n };\n\n\n ExifRestorer.exifManipulation = function (resizedFileBase64:any, segments:any) {\n var exifArray = this.getExifArray(segments),\n newImageArray = this.insertExif(resizedFileBase64, exifArray);\n return new Uint8Array(newImageArray);\n };\n\n ExifRestorer.getExifArray = function (segments:number[][]) {\n var seg;\n for (var x = 0; x < segments.length; x++) {\n seg = segments[x];\n if (seg[0] === 255 && seg[1] === 225) //(ff e1)\n {\n return seg;\n }\n }\n return [];\n };\n\n\n ExifRestorer.insertExif = function (resizedFileBase64:any, exifArray:any) {\n var imageData = resizedFileBase64.replace('data:image/jpeg;base64,', ''),\n buf = this.decode64(imageData),\n separatePoint = buf.indexOf(255, 3),\n mae = buf.slice(0, separatePoint),\n ato = buf.slice(separatePoint),\n array = mae;\n\n array = array.concat(exifArray);\n array = array.concat(ato);\n return array;\n };\n\n\n ExifRestorer.slice2Segments = function(\n rawImageArray:number[]\n ) {\n var head:number = 0,\n segments:number[][] = [];\n\n while (1) {\n if (rawImageArray[head] === 255 && rawImageArray[head + 1] === 218) {\n break;\n }\n if (rawImageArray[head] === 255 && rawImageArray[head + 1] === 216) {\n head += 2;\n }\n else {\n var length = rawImageArray[head + 2] * 256 + rawImageArray[head + 3]\n var endPoint = head + length + 2\n var seg:number[] = rawImageArray.slice(head, endPoint)\n segments.push(seg);\n head = endPoint;\n }\n if (head > rawImageArray.length) {\n break;\n }\n }\n\n return segments;\n };\n\n\n ExifRestorer.decode64 = function (\n input:any\n ):number[]{\n var chr1, chr2, chr3:any = '',\n enc1, enc2, enc3, enc4:any = '',\n i = 0,\n buf:number[] = [];\n\n // remove all characters that are not A-Z, a-z, 0-9, +, /, or =\n var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n if (base64test.exec(input)) {\n console.log('There were invalid base64 characters in the input text.');\n }\n input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, '');\n\n do {\n enc1 = this.KEY_STR.indexOf(input.charAt(i++));\n enc2 = this.KEY_STR.indexOf(input.charAt(i++));\n enc3 = this.KEY_STR.indexOf(input.charAt(i++));\n enc4 = this.KEY_STR.indexOf(input.charAt(i++));\n\n chr1 = (enc1 << 2) | (enc2 >> 4);\n chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\n chr3 = ((enc3 & 3) << 6) | enc4;\n\n buf.push(chr1);\n\n if (enc3 !== 64) {\n buf.push(chr2);\n }\n if (enc4 !== 64) {\n buf.push(chr3);\n }\n\n chr1 = chr2 = chr3 = '';\n enc1 = enc2 = enc3 = enc4 = '';\n\n } while (i < input.length);\n\n return buf;\n };\n\n return ExifRestorer.restore(orig, resized); //<= EXIF\n};\n\nfunction blobToFile(theBlob: Blob, fileName:string): File {\n var b: any = theBlob;\n //A Blob() is almost a File() - it's just missing the two properties below which we will add\n b.lastModifiedDate = new Date();\n b.name = fileName;\n\n //Cast to a File() type\n return theBlob;\n}\n","import { Directive, EventEmitter, ElementRef, Input, Output, HostListener, ChangeDetectionStrategy } from '@angular/core';\nimport { createInvisibleFileInputWrap, isFileInput, detectSwipe } from \"./doc-event-help.functions\"\nimport {\n acceptType, InvalidFileItem,\n applyExifRotation, dataUrl\n} from \"./fileTools\"\n\nexport interface dragMeta{\n type:string\n kind:string\n}\n\n/** A master base set of logic intended to support file select/drag/drop operations\n NOTE: Use ngfDrop for full drag/drop. Use ngfSelect for selecting\n*/\n@Directive({\n selector: \"[ngf]\",\n exportAs:\"ngf\"\n})\nexport class ngf {\n fileElm:any\n filters:{name:string, fn:(file:File)=>boolean}[] = []\n lastFileCount:number=0\n\n @Input() multiple !:string\n @Input() accept !:string\n @Input() maxSize !:number\n //@Input() forceFilename:string\n //@Input() forcePostname:string\n @Input() ngfFixOrientation:boolean = true\n\n @Input() fileDropDisabled:boolean = false\n @Input() selectable: boolean | string = false\n @Output('init') directiveInit:EventEmitter = new EventEmitter()\n\n @Input() lastInvalids:InvalidFileItem[] = []\n @Output() lastInvalidsChange:EventEmitter<{file:File,type:string}[]> = new EventEmitter()\n\n @Input() lastBaseUrl !: string//base64 last file uploaded url\n @Output() lastBaseUrlChange:EventEmitter = new EventEmitter()\n\n @Input() file !: File//last file uploaded\n @Output() fileChange:EventEmitter = new EventEmitter()\n\n @Input() files:File[] = []\n @Output() filesChange:EventEmitter = new EventEmitter();\n\n @Input() capturePaste: boolean; // window paste file watching (empty string turns on)\n pasteCapturer !: (e: Event) => void;\n\n constructor(public element:ElementRef){\n this.initFilters()\n }\n\n initFilters(){\n // the order is important\n this.filters.push({name: 'accept', fn: this._acceptFilter})\n this.filters.push({name: 'fileSize', fn: this._fileSizeFilter})\n\n //this.filters.push({name: 'fileType', fn: this._fileTypeFilter})\n //this.filters.push({name: 'queueLimit', fn: this._queueLimitFilter})\n //this.filters.push({name: 'mimeType', fn: this._mimeTypeFilter})\n }\n\n ngOnDestroy(){\n delete this.fileElm//faster memory release of dom element\n this.destroyPasteListener();\n }\n\n ngOnInit(){\n const selectable = (this.selectable || this.selectable==='') && !['false', 'null', '0'].includes(this.selectable as string);\n if( selectable ){\n this.enableSelecting()\n }\n\n if( this.multiple ){\n this.paramFileElm().setAttribute('multiple', this.multiple)\n }\n\n this.evalCapturePaste();\n\n //create reference to this class with one cycle delay to avoid ExpressionChangedAfterItHasBeenCheckedError\n setTimeout(()=>{\n this.directiveInit.emit(this)\n }, 0)\n }\n\n ngOnChanges( changes ){\n if( changes.accept ){\n this.paramFileElm().setAttribute('accept', changes.accept.currentValue || '*')\n }\n\n if (changes.capturePaste) {\n this.evalCapturePaste();\n }\n }\n\n evalCapturePaste() {\n const isActive = this.capturePaste || (this.capturePaste as any)==='' || ['false', '0', 'null'].includes(this.capturePaste as any);\n\n if (isActive) {\n if (this.pasteCapturer) {\n return; // already listening\n }\n\n this.pasteCapturer = (e: Event) => {\n const clip = (e as any).clipboardData;\n if (clip && clip.files && clip.files.length) {\n this.handleFiles(clip.files);\n e.preventDefault();\n }\n }\n\n window.addEventListener('paste', this.pasteCapturer);\n\n return;\n }\n\n this.destroyPasteListener();\n }\n\n destroyPasteListener() {\n if (this.pasteCapturer) {\n window.removeEventListener('paste', this.pasteCapturer);\n delete this.pasteCapturer;\n }\n }\n\n paramFileElm(){\n if( this.fileElm )return this.fileElm//already defined\n\n //elm is a file input\n const isFile = isFileInput( this.element.nativeElement )\n if(isFile)return this.fileElm = this.element.nativeElement\n\n //create foo file input\n const label = createInvisibleFileInputWrap()\n this.fileElm = label.getElementsByTagName('input')[0]\n this.fileElm.addEventListener('change', this.changeFn.bind(this));\n this.element.nativeElement.appendChild( label )\n return this.fileElm\n }\n\n enableSelecting(){\n let elm = this.element.nativeElement\n\n if( isFileInput(elm) ){\n const bindedHandler = _ev=>this.beforeSelect()\n elm.addEventListener('click', bindedHandler)\n elm.addEventListener('touchstart', bindedHandler)\n return\n }\n\n const bindedHandler = ev=>this.clickHandler(ev)\n elm.addEventListener('click', bindedHandler)\n elm.addEventListener('touchstart', bindedHandler)\n elm.addEventListener('touchend', bindedHandler)\n }\n\n getValidFiles( files:File[] ):File[]{\n const rtn:File[] = []\n for(let x=files.length-1; x >= 0; --x){\n if( this.isFileValid(files[x]) ){\n rtn.push( files[x] )\n }\n }\n return rtn\n }\n\n getInvalidFiles(files:File[]):InvalidFileItem[]{\n const rtn:InvalidFileItem[] = []\n for(let x=files.length-1; x >= 0; --x){\n let failReason = this.getFileFilterFailName(files[x])\n if( failReason ){\n rtn.push({\n file : files[x],\n type : failReason\n })\n }\n }\n return rtn\n }\n\n // Primary handler of files coming in\n handleFiles(files:File[]){\n const valids = this.getValidFiles(files)\n\n if(files.length!=valids.length){\n this.lastInvalids = this.getInvalidFiles(files)\n }else{\n delete this.lastInvalids\n }\n\n this.lastInvalidsChange.emit(this.lastInvalids)\n\n if( valids.length ){\n if( this.ngfFixOrientation ){\n this.applyExifRotations(valids)\n .then( fixedFiles=>this.que(fixedFiles) )\n }else{\n this.que(valids)\n }\n }\n\n if (this.isEmptyAfterSelection()) {\n this.element.nativeElement.value = ''\n }\n }\n\n que( files:File[] ){\n this.files = this.files || []\n Array.prototype.push.apply(this.files, files)\n\n //below break memory ref and doesnt act like a que\n //this.files = files//causes memory change which triggers bindings like \n\n this.filesChange.emit( this.files )\n\n if(files.length){\n this.fileChange.emit( this.file=files[0] )\n\n if(this.lastBaseUrlChange.observers.length){\n dataUrl( files[0] )\n .then( url=>this.lastBaseUrlChange.emit(url) )\n }\n }\n\n //will be checked for input value clearing\n this.lastFileCount = this.files.length\n }\n\n /** called when input has files */\n changeFn(event:any) {\n var fileList = event.__files_ || (event.target && event.target.files)\n\n if (!fileList) return;\n\n this.stopEvent(event);\n this.handleFiles(fileList)\n }\n\n clickHandler(evt:any){\n const elm = this.element.nativeElement\n if (elm.getAttribute('disabled') || this.fileDropDisabled){\n return false;\n }\n\n var r = detectSwipe(evt);\n // prevent the click if it is a swipe\n if ( r!==false ) return r;\n\n const fileElm = this.paramFileElm()\n fileElm.click()\n //fileElm.dispatchEvent( new Event('click') );\n this.beforeSelect()\n\n return false;\n }\n\n beforeSelect(){\n if( this.files && this.lastFileCount===this.files.length )return\n\n //if no files in array, be sure browser doesnt prevent reselect of same file (see github issue 27)\n this.fileElm.value = null\n }\n\n isEmptyAfterSelection():boolean {\n return !!this.element.nativeElement.attributes.multiple;\n }\n\n eventToTransfer(event:any):any {\n if(event.dataTransfer)return event.dataTransfer\n return event.originalEvent ? event.originalEvent.dataTransfer : null\n }\n\n stopEvent(event:any):any {\n event.preventDefault();\n event.stopPropagation();\n }\n\n transferHasFiles(transfer:any):any {\n if (!transfer.types) {\n return false;\n }\n\n if (transfer.types.indexOf) {\n return transfer.types.indexOf('Files') !== -1;\n } else if (transfer.types.contains) {\n return transfer.types.contains('Files');\n } else {\n return false;\n }\n }\n\n eventToFiles(event:Event){\n const transfer = this.eventToTransfer(event);\n if( transfer ){\n if(transfer.files && transfer.files.length){\n return transfer.files\n }\n if(transfer.items && transfer.items.length){\n return transfer.items\n }\n }\n return []\n }\n\n applyExifRotations(\n files:File[]\n ):Promise{\n const mapper = (\n file:File,index:number\n ):Promise=>{\n return applyExifRotation(file)\n .then( fixedFile=>files.splice(index, 1, fixedFile) )\n }\n\n const proms:Promise[] = []\n for(let x=files.length-1; x >= 0; --x){\n proms[x] = mapper( files[x], x )\n }\n return Promise.all( proms ).then( ()=>files )\n }\n\n @HostListener('change', ['$event'])\n onChange(event:Event):void {\n let files = this.element.nativeElement.files || this.eventToFiles(event)\n\n if(!files.length)return\n\n this.stopEvent(event);\n this.handleFiles(files)\n }\n\n getFileFilterFailName(\n file:File\n ):string | undefined{\n for(let i = 0; i < this.filters.length; i++){\n if( !this.filters[i].fn.call(this, file) ){\n return this.filters[i].name\n }\n }\n return undefined\n }\n\n isFileValid(file:File):boolean{\n const noFilters = !this.accept && (!this.filters || !this.filters.length)\n if( noFilters ){\n return true//we have no filters so all files are valid\n }\n\n return this.getFileFilterFailName(file) ? false : true\n }\n\n isFilesValid(files:File[]){\n for(let x=files.length-1; x >= 0; --x){\n if( !this.isFileValid(files[x]) ){\n return false\n }\n }\n return true\n }\n\n protected _acceptFilter(item:File):boolean {\n return acceptType(this.accept, item.type, item.name)\n }\n\n protected _fileSizeFilter(item:File):boolean {\n return !(this.maxSize && item.size > this.maxSize);\n }\n\n /** browsers try hard to conceal data about file drags, this tends to undo that */\n filesToWriteableObject( files:File[] ):dragMeta[]{\n const jsonFiles:dragMeta[] = []\n for(let x=0; x < files.length; ++x){\n jsonFiles.push({\n type:files[x].type,\n kind:files[x][\"kind\"]\n })\n }\n return jsonFiles\n }\n}\n","import { Directive, Input } from \"@angular/core\"\nimport { ngf } from \"./ngf.directive\"\n\n@Directive({\n selector: \"[ngfSelect]\",\n exportAs: \"ngfSelect\"\n})\nexport class ngfSelect extends ngf {\n @Input() selectable:any = true\n}","import {\n Directive, EventEmitter,\n HostListener, Input, Output\n} from '@angular/core';\nimport { ngf, dragMeta } from \"./ngf.directive\"\n\n@Directive({\n selector: \"[ngfDrop]\",\n exportAs: \"ngfDrop\"\n})\nexport class ngfDrop extends ngf {\n @Output() fileOver:EventEmitter = new EventEmitter();\n\n @Input() validDrag:boolean = false\n @Output() validDragChange:EventEmitter = new EventEmitter()\n\n @Input() invalidDrag = false\n @Output() invalidDragChange:EventEmitter = new EventEmitter()\n\n @Input() dragFiles !: dragMeta[]\n @Output() dragFilesChange:EventEmitter = new EventEmitter()\n\n @HostListener('drop', ['$event'])\n onDrop(event:Event):void {\n if(this.fileDropDisabled){\n this.stopEvent(event);\n return\n }\n\n this.closeDrags()\n let files = this.eventToFiles(event)\n\n if(!files.length)return\n\n this.stopEvent(event);\n this.handleFiles(files)\n }\n\n handleFiles(files:File[]){\n this.fileOver.emit(false)//turn-off dragover\n super.handleFiles(files)\n }\n\n @HostListener('dragover', ['$event'])\n onDragOver(event:Event):void {\n if(this.fileDropDisabled){\n this.stopEvent(event);\n return\n }\n\n const transfer = this.eventToTransfer(event)\n\n let files = this.eventToFiles(event)\n\n let jsonFiles = this.filesToWriteableObject(files)\n this.dragFilesChange.emit( this.dragFiles=jsonFiles )\n\n if( files.length ){\n this.validDrag = this.isFilesValid(files)\n }else{\n //Safari, IE11 & some browsers do NOT tell you about dragged files until dropped. Always consider a valid drag\n this.validDrag = true\n }\n\n this.validDragChange.emit(this.validDrag)\n\n this.invalidDrag = !this.validDrag\n this.invalidDragChange.emit(this.invalidDrag)\n\n transfer.dropEffect = 'copy'//change cursor and such\n this.stopEvent(event)\n this.fileOver.emit(true)\n }\n\n closeDrags(){\n delete this.validDrag\n this.validDragChange.emit(this.validDrag)\n this.invalidDrag = false\n this.invalidDragChange.emit(this.invalidDrag)\n delete this.dragFiles\n this.dragFilesChange.emit( this.dragFiles )\n }\n\n @HostListener('dragleave', ['$event'])\n onDragLeave(event:Event):any {\n if(this.fileDropDisabled){\n this.stopEvent(event);\n return\n }\n \n this.closeDrags()\n\n if ((this as any).element) {\n if (event.currentTarget === (this as any).element[0]) {\n return;\n }\n }\n\n this.stopEvent(event);\n this.fileOver.emit(false);\n }\n}","import { Directive, ElementRef, Input } from '@angular/core';\nimport { dataUrl } from './fileTools';\n\n@Directive({selector: '[ngfBackground]'})\nexport class ngfBackground {\n @Input('ngfBackground') file:any\n\n constructor(public ElementRef:ElementRef){}\n\n ngOnChanges( _changes:any ){\n dataUrl(this.file)\n .then(src=>{\n const urlString = 'url(\\'' + (src || '') + '\\')'\n this.ElementRef.nativeElement.style.backgroundImage = urlString\n })\n }\n}\n","import { Directive, EventEmitter, Output, Input } from '@angular/core';\n\n@Directive({selector: 'ngfUploadStatus'})\nexport class ngfUploadStatus {\n @Input() percent:number = 0\n @Output() percentChange:EventEmitter = new EventEmitter()\n @Input() httpEvent !: Event\n\n ngOnChanges( changes ){\n if( changes.httpEvent && changes.httpEvent.currentValue ){\n const event = changes.httpEvent.currentValue\n if (event.loaded && event.total) {\n setTimeout(()=>{\n this.percent = Math.round(100 * event.loaded / event.total);\n this.percentChange.emit( this.percent )\n }, 0)\n }\n }\n }\n}","import {\n IterableDiffer,\n IterableDiffers,\n Directive, EventEmitter,\n Output, Input\n} from '@angular/core';\n\n@Directive({selector: 'ngfFormData'})\nexport class ngfFormData {\n @Input() files !: File[]\n @Input() postName:string = \"file\"\n @Input() fileName !: string//force file name\n\n @Input() FormData:FormData = new FormData()\n @Output() FormDataChange:EventEmitter = new EventEmitter()\n\n differ:IterableDiffer<{}>\n\n constructor(IterableDiffers: IterableDiffers){\n this.differ = IterableDiffers.find([]).create()\n }\n\n ngDoCheck(){\n var changes = this.differ.diff( this.files );\n\n if (changes) {\n setTimeout(()=>this.buildFormData(), 0)\n }\n }\n\n buildFormData(){\n const isArray = typeof(this.files)==='object' && this.files.constructor===Array\n\n if( isArray ){\n this.FormData = new FormData()\n const files = this.files || []\n files.forEach(file=>\n this.FormData.append(this.postName, file, this.fileName||file.name)\n )\n this.FormDataChange.emit( this.FormData )\n }else{\n delete this.FormData\n }\n }\n}","import { Directive, ElementRef, Input } from '@angular/core';\nimport { dataUrl } from './fileTools';\n\n@Directive({ selector: '[ngfSrc]' })\nexport class ngfSrc {\n @Input('ngfSrc') file: any\n\n constructor(public ElementRef: ElementRef) { }\n\n ngOnChanges(_changes: any) {\n dataUrl(this.file)\n .then(src=>\n this.ElementRef.nativeElement.src = src\n )\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { ngfBackground } from './ngfBackground.directive';\nimport { ngfDrop } from './ngfDrop.directive';\nimport { ngf } from './ngf.directive';\nimport { ngfSelect } from './ngfSelect.directive';\nimport { ngfUploadStatus } from './ngfUploadStatus.directive';\nimport { ngfFormData } from './ngfFormData.directive';\nimport { ngfSrc } from './ngfSrc.directive';\n//import{ HttpModule } from '@angular/http';\n\nconst declarations = [\n ngfDrop,\n ngfSelect,\n ngfBackground,\n ngfSrc,\n ngfUploadStatus,\n ngfFormData,\n ngf\n]\n\n@NgModule({\n imports: [\n CommonModule\n //,HttpModule\n ],\n declarations: declarations,\n exports: declarations//[HttpModule, ...declarations]\n}) export class ngfModule {}","/*\n * Public API Surface of angular-file\n */\n\nexport * from './file-upload/ngfSelect.directive';\nexport * from './file-upload/ngfDrop.directive';\nexport * from './file-upload/ngf.directive';\nexport * from './file-upload/ngf.module';\nexport { ngfBackground } from './file-upload/ngfBackground.directive';\nexport { ngfSrc } from './file-upload/ngfSrc.directive';\nexport { ngfUploadStatus } from './file-upload/ngfUploadStatus.directive';\nexport { ngfFormData } from './file-upload/ngfFormData.directive';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["EventEmitter","Directive","ElementRef","Input","Output","HostListener","IterableDiffers","NgModule","CommonModule"],"mappings":"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"} \ No newline at end of file diff --git a/dist/bundles/angular-file.umd.min.js.map b/dist/bundles/angular-file.umd.min.js.map index 3c89fab0..0e57b258 100644 --- a/dist/bundles/angular-file.umd.min.js.map +++ b/dist/bundles/angular-file.umd.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../../node_modules/tslib/tslib.es6.js","../src/file-upload/doc-event-help.functions.ts","../src/file-upload/fileTools.ts","../src/file-upload/ngf.directive.ts","../src/file-upload/ngfSelect.directive.ts","../src/file-upload/ngfDrop.directive.ts","../src/file-upload/ngfBackground.directive.ts","../src/file-upload/ngfUploadStatus.directive.ts","../src/file-upload/ngfFormData.directive.ts","../src/file-upload/ngfSrc.directive.ts","../src/file-upload/ngf.module.ts"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__extends","__","this","constructor","prototype","create","__read","o","n","m","Symbol","iterator","r","e","i","call","ar","next","done","push","value","error","__spread","arguments","length","concat","isFileInput","elm","ty","getAttribute","tagName","toLowerCase","initialTouchStartY","initialTouchStartX","createFileInput","fileElem","document","createElement","type","fixFileOrientationByMeta","file","result","dataUrl","then","url","canvas","img","Promise","res","rej","onload","width","orientation","height","ctx","getContext","transform","applyTransform","drawImage","toDataURL","base","buffer","binary","bytes","Uint8Array","len","byteLength","String","fromCharCode","window","btoa","arrayBufferToBase64","fixedArrayBuffer","blob","dataurl","name","origSize","arr","split","mimeMatch","match","mime","bstr","atob","u8arr","charCodeAt","Blob","dataUrltoBlob","KEY_STR","encode64","input","chr1","chr2","enc1","enc2","enc3","output","chr3","enc4","isNaN","charAt","restore","origFileBase64","resizedFileBase64","replace","rawImage","decode64","segments","slice2Segments","image","exifManipulation","exifArray","getExifArray","newImageArray","insertExif","seg","x","imageData","buf","separatePoint","indexOf","mae","slice","ato","array","rawImageArray","head","endPoint","exec","console","log","newFile","theBlob","fileName","lastModifiedDate","Date","onerror","src","applyExifRotation","resolve","reader","FileReader","slicedFile","readAsArrayBuffer","view","DataView","getUint16","offset","marker","getUint32","little","tags","setUint16","target","readOrientation","disallowObjectUrl","$ngfDataUrl","$ngfBlobUrl","$$ngfDataUrlPromise","$$ngfBlobUrlPromise","deferred","win","FileAPI","navigator","userAgent","size","reject","Error","URL","webkitURL","fileReader","event","readAsDataURL","createObjectURL","ngf","element","filters","lastFileCount","ngfFixOrientation","fileDropDisabled","selectable","directiveInit","EventEmitter","lastInvalids","lastInvalidsChange","lastBaseUrlChange","fileChange","files","filesChange","initFilters","fn","_acceptFilter","_fileSizeFilter","ngOnDestroy","fileElm","destroyPasteListener","ngOnInit","_this","includes","enableSelecting","multiple","paramFileElm","setAttribute","evalCapturePaste","setTimeout","emit","ngOnChanges","changes","accept","currentValue","capturePaste","pasteCapturer","clip","clipboardData","handleFiles","preventDefault","addEventListener","removeEventListener","nativeElement","label","innerHTML","style","visibility","position","overflow","border","margin","padding","appendChild","createInvisibleFileInputWrap","getElementsByTagName","changeFn","bind","bindedHandler_1","_ev","beforeSelect","bindedHandler","ev","clickHandler","getValidFiles","rtn","isFileValid","getInvalidFiles","failReason","getFileFilterFailName","valids","applyExifRotations","fixedFiles","que","isEmptyAfterSelection","apply","observers","fileList","__files_","stopEvent","evt","touches","changedTouches","originalEvent","clientX","clientY","currentX","currentY","Math","abs","stopPropagation","cancelable","detectSwipe","click","attributes","eventToTransfer","dataTransfer","transferHasFiles","transfer","types","contains","eventToFiles","items","mapper","index","fixedFile","splice","proms","all","onChange","isFilesValid","item","regx","acceptRegString","defs","RegExp","search","substring","acceptType","maxSize","filesToWriteableObject","jsonFiles","kind","Directive","args","selector","exportAs","ElementRef","Input","Output","HostListener","ngfSelect","_super","ngfDrop","fileOver","validDrag","validDragChange","invalidDrag","invalidDragChange","dragFilesChange","onDrop","closeDrags","onDragOver","dragFiles","dropEffect","onDragLeave","currentTarget","ngfBackground","_changes","urlString","backgroundImage","ngfUploadStatus","percent","percentChange","httpEvent","event_1","loaded","total","round","ngfFormData","IterableDiffers","postName","FormData","FormDataChange","differ","find","ngDoCheck","diff","buildFormData","forEach","append","ngfSrc","declarations","NgModule","imports","CommonModule","exports"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","export const isFileInput = function(elm:any){\n const ty = elm.getAttribute('type')\n return elm.tagName.toLowerCase() === 'input' && ty && ty.toLowerCase() === 'file';\n}\n\nlet initialTouchStartY = 0;\nlet initialTouchStartX = 0;\nexport const detectSwipe = function(evt:any):boolean {\n var touches = evt.changedTouches || (evt.originalEvent && evt.originalEvent.changedTouches);\n if (touches) {\n if (evt.type === 'touchstart') {\n initialTouchStartX = touches[0].clientX;\n initialTouchStartY = touches[0].clientY;\n return true; // don't block event default\n } else {\n // prevent scroll from triggering event\n if (evt.type === 'touchend') {\n var currentX = touches[0].clientX;\n var currentY = touches[0].clientY;\n if ((Math.abs(currentX - initialTouchStartX) > 20) ||\n (Math.abs(currentY - initialTouchStartY) > 20)) {\n // Swipe detected\n return true;\n }\n // touch was a 'tap' so prevent propogation and prevent\n // device follow-up actions (click, mouseup, mousedown, etc.)\n evt.stopPropagation();\n if (evt.cancelable) {\n evt.preventDefault();\n }\n }\n return false;\n }\n }\n return false\n}\n\nexport const createInvisibleFileInputWrap = function() {\n var fileElem = createFileInput()\n var label = document.createElement('label');\n label.innerHTML = 'upload'\n label.style.visibility = 'hidden'\n label.style.position = 'absolute'\n label.style.overflow = 'hidden'\n label.style.width = '0px'\n label.style.height = '0px'\n label.style.border = 'none'\n label.style.margin = '0px'\n label.style.padding = '0px'\n label.setAttribute('tabindex','-1')\n \n //bindAttrToFileInput(fileElem, label);\n //generatedElems.push({el: elem, ref: label});\n\n label.appendChild( fileElem )\n //document.body.appendChild( label );\n\n return label;\n}\n\nexport const createFileInput = function() {\n var fileElem = document.createElement('input');\n fileElem.type=\"file\"\n return fileElem;\n}\n","export function getWindow():any{return window}\n\nexport function acceptType(accept:string, type:string, name?:string):boolean { \n if( !accept ){\n return true\n }\n\n const defs = accept.split(',')\n let regx:RegExp\n let acceptRegString:string\n\n for(let x=defs.length-1; x >= 0; --x){\n //Escapes dots in mimetype \n acceptRegString = defs[x]\n //trim\n acceptRegString = acceptRegString.replace(/(^\\s+|\\s+$)/g,'')\n //Escapes stars in mimetype \n acceptRegString = acceptRegString.replace(/\\*/g,'.*')\n //let acceptReg = '^((' + acceptRegString\n //acceptReg = acceptReg.replace(/,/g,')|(') + '))$'\n \n //try by mime\n regx = new RegExp(acceptRegString, 'gi')\n if( type.search(regx)>=0 ){\n return true\n }\n\n //try by ext\n if( acceptRegString.substring(0, 1)=='.' ){ \n acceptRegString = '\\\\'+ acceptRegString//.substring(1, acceptRegString.length-1)//remove dot at front\n regx = new RegExp(acceptRegString+'$', 'i')\n if( (name||type).search(regx)>=0 ){\n return true\n }\n }\n }\n return false\n}\n\nexport interface InvalidFileItem{\n file:File\n type:string\n}\n\nexport function arrayBufferToBase64(buffer:any) {\n var binary = '';\n var bytes = new Uint8Array(buffer);\n var len = bytes.byteLength;\n for (var i = 0; i < len; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return window.btoa(binary);\n}\n\nexport function dataUrltoBlob(\n dataurl:string,\n name:string,\n origSize?:any\n):Blob{\n var arr = dataurl.split(',');\n var mimeMatch = arr[0].match(/:(.*?);/)\n var mime:string = mimeMatch ? mimeMatch[1] : 'text/plain'\n var bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);\n while (n--) {\n u8arr[n] = bstr.charCodeAt(n);\n }\n var blob = new window.Blob([u8arr], {type: mime});\n blob[\"name\"] = name;\n blob[\"$ngfOrigSize\"] = origSize;\n return blob;\n}\n\nexport interface orientationMeta{\n orientation: number\n fixedArrayBuffer?:any[]\n}\n\nexport function applyTransform(\n ctx:CanvasRenderingContext2D,\n orientation:number,\n width:number,\n height:number\n) {\n switch (orientation) {\n case 2:\n return ctx.transform(-1, 0, 0, 1, width, 0);\n case 3:\n return ctx.transform(-1, 0, 0, -1, width, height);\n case 4:\n return ctx.transform(1, 0, 0, -1, 0, height);\n case 5:\n return ctx.transform(0, 1, 1, 0, 0, 0);\n case 6:\n return ctx.transform(0, 1, -1, 0, height, 0);\n case 7:\n return ctx.transform(0, -1, -1, 0, height, width);\n case 8:\n return ctx.transform(0, -1, 1, 0, 0, width);\n }\n}\n\nexport function fixFileOrientationByMeta(\n file:File, result:orientationMeta\n):Promise{\n return dataUrl(file, true)\n .then(url=>{\n var canvas = document.createElement('canvas');\n var img = document.createElement('img');\n\n return >new Promise(function(res,rej){\n img.onload = function () {\n try {\n canvas.width = result.orientation > 4 ? img.height : img.width\n canvas.height = result.orientation > 4 ? img.width : img.height\n var ctx = canvas.getContext('2d')\n applyTransform(ctx, result.orientation, img.width, img.height)\n ctx.drawImage(img, 0, 0);\n var dataUrl = canvas.toDataURL(file.type || 'image/WebP', 0.934)\n const base = arrayBufferToBase64(result.fixedArrayBuffer)\n dataUrl = restoreExif(base, dataUrl)\n var blob = dataUrltoBlob(dataUrl, file.name)\n const newFile = blobToFile(blob, file.name);\n res(newFile);\n } catch (e) {\n rej(e)\n }\n };\n img.onerror = rej;\n img.src = url; \n })\n })\n}\n\nexport function applyExifRotation(\n file:File\n):Promise{\n if (file.type.indexOf('image/jpeg') !== 0) {\n return Promise.resolve(file);\n }\n\n return readOrientation(file)\n .then((result:orientationMeta)=>{\n if (result.orientation < 2 || result.orientation > 8) {\n return file\n }\n \n return fixFileOrientationByMeta(file,result)\n })\n}\n\nexport function readOrientation(\n file:File\n):Promise{\n return new Promise((res,rej)=>{\n var reader = new FileReader();\n var slicedFile = file.slice ? file.slice(0, 64 * 1024) : file;\n reader.readAsArrayBuffer(slicedFile);\n reader.onerror = rej\n reader.onload = function (e:any) {\n var result:orientationMeta = {orientation: 1};\n var view = new DataView( this.result );\n if (view.getUint16(0, false) !== 0xFFD8) return res(result);\n\n var length = view.byteLength,\n offset = 2;\n while (offset < length) {\n var marker = view.getUint16(offset, false);\n offset += 2;\n if (marker === 0xFFE1) {\n if (view.getUint32(offset += 2, false) !== 0x45786966) return res(result);\n\n var little = view.getUint16(offset += 6, false) === 0x4949;\n offset += view.getUint32(offset + 4, little);\n var tags = view.getUint16(offset, little);\n offset += 2;\n for (var i = 0; i < tags; i++)\n if (view.getUint16(offset + (i * 12), little) === 0x0112) {\n var orientation = view.getUint16(offset + (i * 12) + 8, little);\n if (orientation >= 2 && orientation <= 8) {\n view.setUint16(offset + (i * 12) + 8, 1, little);\n result.fixedArrayBuffer = e.target.result;\n }\n result.orientation = orientation;\n return res(result);\n }\n } else if ((marker & 0xFF00) !== 0xFF00) break;\n else offset += view.getUint16(offset, false);\n }\n return res(result);\n };\n })\n}\n\n/** converts file-input file into base64 dataUri */\nexport function dataUrl(\n file:any,\n disallowObjectUrl?:any\n):Promise{\n if (!file) return Promise.resolve(file)\n \n if ((disallowObjectUrl && file.$ngfDataUrl != null) || (!disallowObjectUrl && file.$ngfBlobUrl != null)) {\n return Promise.resolve( disallowObjectUrl ? file.$ngfDataUrl : file.$ngfBlobUrl )\n }\n\n var p = disallowObjectUrl ? file.$$ngfDataUrlPromise : file.$$ngfBlobUrlPromise;\n if (p) return p;\n\n const win = getWindow()\n let deferred:Promise\n if (win.FileReader && file &&\n (!win.FileAPI || navigator.userAgent.indexOf('MSIE 8') === -1 || file.size < 20000) &&\n (!win.FileAPI || navigator.userAgent.indexOf('MSIE 9') === -1 || file.size < 4000000)) {\n //prefer URL.createObjectURL for handling refrences to files of all sizes\n //since it doesn´t build a large string in memory\n var URL = win.URL || win.webkitURL;\n if (FileReader) {\n deferred = new Promise((res,rej)=>{\n var fileReader = new FileReader();\n fileReader.onload = function (event:any) {\n file.$ngfDataUrl = event.target.result;\n delete file.$ngfDataUrl;\n res( event.target.result )\n };\n fileReader.onerror = function (e) {\n file.$ngfDataUrl = '';\n rej(e)\n };\n fileReader.readAsDataURL(file);\n })\n } else {\n var url:any;\n try {\n url = URL.createObjectURL(file);\n } catch (e) {\n return Promise.reject(e);\n }\n \n deferred = Promise.resolve( url )\n file.$ngfBlobUrl = url;\n }\n } else {\n file[disallowObjectUrl ? '$ngfDataUrl' : '$ngfBlobUrl'] = '';\n return Promise.reject( new Error('Browser does not support window.FileReader, window.FileReader, or window.FileAPI') )//deferred.reject();\n }\n\n if (disallowObjectUrl) {\n p = file.$$ngfDataUrlPromise = deferred;\n } else {\n p = file.$$ngfBlobUrlPromise = deferred;\n }\n\n p = p.then((x:any)=>{\n delete file[disallowObjectUrl ? '$$ngfDataUrlPromise' : '$$ngfBlobUrlPromise'];\n return x\n })\n\n return p;\n}\n\nexport function restoreExif(orig:any, resized:any) {\n var ExifRestorer:any = {\n KEY_STR:'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='\n }\n\n ExifRestorer.encode64 = function (input:any) {\n var output = '',\n chr1, chr2, chr3:any = '',\n enc1, enc2, enc3, enc4:any = '',\n i = 0;\n\n do {\n chr1 = input[i++];\n chr2 = input[i++];\n chr3 = input[i++];\n\n enc1 = chr1 >> 2;\n enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);\n enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);\n enc4 = chr3 & 63;\n\n if (isNaN(chr2)) {\n enc3 = enc4 = 64;\n } else if (isNaN(chr3)) {\n enc4 = 64;\n }\n\n output = output +\n this.KEY_STR.charAt(enc1) +\n this.KEY_STR.charAt(enc2) +\n this.KEY_STR.charAt(enc3) +\n this.KEY_STR.charAt(enc4);\n chr1 = chr2 = chr3 = '';\n enc1 = enc2 = enc3 = enc4 = '';\n } while (i < input.length);\n\n return output;\n };\n\n ExifRestorer.restore = function (origFileBase64:any, resizedFileBase64:any) {\n if (origFileBase64.match('data:image/jpeg;base64,')) {\n origFileBase64 = origFileBase64.replace('data:image/jpeg;base64,', '');\n }\n\n var rawImage:number[] = this.decode64(origFileBase64);\n var segments = this.slice2Segments(rawImage);\n\n var image = this.exifManipulation(resizedFileBase64, segments);\n\n return 'data:image/jpeg;base64,' + this.encode64(image);\n };\n\n\n ExifRestorer.exifManipulation = function (resizedFileBase64:any, segments:any) {\n var exifArray = this.getExifArray(segments),\n newImageArray = this.insertExif(resizedFileBase64, exifArray);\n return new Uint8Array(newImageArray);\n };\n\n ExifRestorer.getExifArray = function (segments:number[][]) {\n var seg;\n for (var x = 0; x < segments.length; x++) {\n seg = segments[x];\n if (seg[0] === 255 && seg[1] === 225) //(ff e1)\n {\n return seg;\n }\n }\n return [];\n };\n\n\n ExifRestorer.insertExif = function (resizedFileBase64:any, exifArray:any) {\n var imageData = resizedFileBase64.replace('data:image/jpeg;base64,', ''),\n buf = this.decode64(imageData),\n separatePoint = buf.indexOf(255, 3),\n mae = buf.slice(0, separatePoint),\n ato = buf.slice(separatePoint),\n array = mae;\n\n array = array.concat(exifArray);\n array = array.concat(ato);\n return array;\n };\n\n\n ExifRestorer.slice2Segments = function(\n rawImageArray:number[]\n ) {\n var head:number = 0,\n segments:number[][] = [];\n\n while (1) {\n if (rawImageArray[head] === 255 && rawImageArray[head + 1] === 218) {\n break;\n }\n if (rawImageArray[head] === 255 && rawImageArray[head + 1] === 216) {\n head += 2;\n }\n else {\n var length = rawImageArray[head + 2] * 256 + rawImageArray[head + 3]\n var endPoint = head + length + 2\n var seg:number[] = rawImageArray.slice(head, endPoint)\n segments.push(seg);\n head = endPoint;\n }\n if (head > rawImageArray.length) {\n break;\n }\n }\n\n return segments;\n };\n\n\n ExifRestorer.decode64 = function (\n input:any\n ):number[]{\n var chr1, chr2, chr3:any = '',\n enc1, enc2, enc3, enc4:any = '',\n i = 0,\n buf:number[] = [];\n\n // remove all characters that are not A-Z, a-z, 0-9, +, /, or =\n var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n if (base64test.exec(input)) {\n console.log('There were invalid base64 characters in the input text.');\n }\n input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, '');\n\n do {\n enc1 = this.KEY_STR.indexOf(input.charAt(i++));\n enc2 = this.KEY_STR.indexOf(input.charAt(i++));\n enc3 = this.KEY_STR.indexOf(input.charAt(i++));\n enc4 = this.KEY_STR.indexOf(input.charAt(i++));\n\n chr1 = (enc1 << 2) | (enc2 >> 4);\n chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\n chr3 = ((enc3 & 3) << 6) | enc4;\n\n buf.push(chr1);\n\n if (enc3 !== 64) {\n buf.push(chr2);\n }\n if (enc4 !== 64) {\n buf.push(chr3);\n }\n\n chr1 = chr2 = chr3 = '';\n enc1 = enc2 = enc3 = enc4 = '';\n\n } while (i < input.length);\n\n return buf;\n };\n\n return ExifRestorer.restore(orig, resized); //<= EXIF\n};\n\nfunction blobToFile(theBlob: Blob, fileName:string): File {\n var b: any = theBlob;\n //A Blob() is almost a File() - it's just missing the two properties below which we will add\n b.lastModifiedDate = new Date();\n b.name = fileName;\n\n //Cast to a File() type\n return theBlob;\n}\n","import { Directive, EventEmitter, ElementRef, Input, Output, HostListener, ChangeDetectionStrategy } from '@angular/core';\nimport { createInvisibleFileInputWrap, isFileInput, detectSwipe } from \"./doc-event-help.functions\"\nimport {\n acceptType, InvalidFileItem,\n applyExifRotation, dataUrl\n} from \"./fileTools\"\n\nexport interface dragMeta{\n type:string\n kind:string\n}\n\n/** A master base set of logic intended to support file select/drag/drop operations\n NOTE: Use ngfDrop for full drag/drop. Use ngfSelect for selecting\n*/\n@Directive({\n selector: \"[ngf]\",\n exportAs:\"ngf\"\n})\nexport class ngf {\n fileElm:any\n filters:{name:string, fn:(file:File)=>boolean}[] = []\n lastFileCount:number=0\n\n @Input() multiple !:string\n @Input() accept !:string\n @Input() maxSize !:number\n //@Input() forceFilename:string\n //@Input() forcePostname:string\n @Input() ngfFixOrientation:boolean = true\n\n @Input() fileDropDisabled:boolean = false\n @Input() selectable: boolean | string = false\n @Output('init') directiveInit:EventEmitter = new EventEmitter()\n\n @Input() lastInvalids:InvalidFileItem[] = []\n @Output() lastInvalidsChange:EventEmitter<{file:File,type:string}[]> = new EventEmitter()\n\n @Input() lastBaseUrl !: string//base64 last file uploaded url\n @Output() lastBaseUrlChange:EventEmitter = new EventEmitter()\n\n @Input() file !: File//last file uploaded\n @Output() fileChange:EventEmitter = new EventEmitter()\n\n @Input() files:File[] = []\n @Output() filesChange:EventEmitter = new EventEmitter();\n\n @Input() capturePaste: boolean; // window paste file watching (empty string turns on)\n pasteCapturer !: (e: Event) => void;\n\n constructor(public element:ElementRef){\n this.initFilters()\n }\n\n initFilters(){\n // the order is important\n this.filters.push({name: 'accept', fn: this._acceptFilter})\n this.filters.push({name: 'fileSize', fn: this._fileSizeFilter})\n\n //this.filters.push({name: 'fileType', fn: this._fileTypeFilter})\n //this.filters.push({name: 'queueLimit', fn: this._queueLimitFilter})\n //this.filters.push({name: 'mimeType', fn: this._mimeTypeFilter})\n }\n\n ngOnDestroy(){\n delete this.fileElm//faster memory release of dom element\n this.destroyPasteListener();\n }\n\n ngOnInit(){\n const selectable = (this.selectable || this.selectable==='') && !['false', 'null', '0'].includes(this.selectable as string);\n if( selectable ){\n this.enableSelecting()\n }\n\n if( this.multiple ){\n this.paramFileElm().setAttribute('multiple', this.multiple)\n }\n\n this.evalCapturePaste();\n\n //create reference to this class with one cycle delay to avoid ExpressionChangedAfterItHasBeenCheckedError\n setTimeout(()=>{\n this.directiveInit.emit(this)\n }, 0)\n }\n\n ngOnChanges( changes ){\n if( changes.accept ){\n this.paramFileElm().setAttribute('accept', changes.accept.currentValue || '*')\n }\n\n if (changes.capturePaste) {\n this.evalCapturePaste();\n }\n }\n\n evalCapturePaste() {\n const isActive = this.capturePaste || (this.capturePaste as any)==='' || ['false', '0', 'null'].includes(this.capturePaste as any);\n\n if (isActive) {\n if (this.pasteCapturer) {\n return; // already listening\n }\n\n this.pasteCapturer = (e: Event) => {\n const clip = (e as any).clipboardData;\n if (clip && clip.files && clip.files.length) {\n this.handleFiles(clip.files);\n e.preventDefault();\n }\n }\n\n window.addEventListener('paste', this.pasteCapturer);\n\n return;\n }\n\n this.destroyPasteListener();\n }\n\n destroyPasteListener() {\n if (this.pasteCapturer) {\n window.removeEventListener('paste', this.pasteCapturer);\n delete this.pasteCapturer;\n }\n }\n\n paramFileElm(){\n if( this.fileElm )return this.fileElm//already defined\n\n //elm is a file input\n const isFile = isFileInput( this.element.nativeElement )\n if(isFile)return this.fileElm = this.element.nativeElement\n\n //create foo file input\n const label = createInvisibleFileInputWrap()\n this.fileElm = label.getElementsByTagName('input')[0]\n this.fileElm.addEventListener('change', this.changeFn.bind(this));\n this.element.nativeElement.appendChild( label )\n return this.fileElm\n }\n\n enableSelecting(){\n let elm = this.element.nativeElement\n\n if( isFileInput(elm) ){\n const bindedHandler = _ev=>this.beforeSelect()\n elm.addEventListener('click', bindedHandler)\n elm.addEventListener('touchstart', bindedHandler)\n return\n }\n\n const bindedHandler = ev=>this.clickHandler(ev)\n elm.addEventListener('click', bindedHandler)\n elm.addEventListener('touchstart', bindedHandler)\n elm.addEventListener('touchend', bindedHandler)\n }\n\n getValidFiles( files:File[] ):File[]{\n const rtn:File[] = []\n for(let x=files.length-1; x >= 0; --x){\n if( this.isFileValid(files[x]) ){\n rtn.push( files[x] )\n }\n }\n return rtn\n }\n\n getInvalidFiles(files:File[]):InvalidFileItem[]{\n const rtn:InvalidFileItem[] = []\n for(let x=files.length-1; x >= 0; --x){\n let failReason = this.getFileFilterFailName(files[x])\n if( failReason ){\n rtn.push({\n file : files[x],\n type : failReason\n })\n }\n }\n return rtn\n }\n\n // Primary handler of files coming in\n handleFiles(files:File[]){\n const valids = this.getValidFiles(files)\n\n if(files.length!=valids.length){\n this.lastInvalids = this.getInvalidFiles(files)\n }else{\n delete this.lastInvalids\n }\n\n this.lastInvalidsChange.emit(this.lastInvalids)\n\n if( valids.length ){\n if( this.ngfFixOrientation ){\n this.applyExifRotations(valids)\n .then( fixedFiles=>this.que(fixedFiles) )\n }else{\n this.que(valids)\n }\n }\n\n if (this.isEmptyAfterSelection()) {\n this.element.nativeElement.value = ''\n }\n }\n\n que( files:File[] ){\n this.files = this.files || []\n Array.prototype.push.apply(this.files, files)\n\n //below break memory ref and doesnt act like a que\n //this.files = files//causes memory change which triggers bindings like \n\n this.filesChange.emit( this.files )\n\n if(files.length){\n this.fileChange.emit( this.file=files[0] )\n\n if(this.lastBaseUrlChange.observers.length){\n dataUrl( files[0] )\n .then( url=>this.lastBaseUrlChange.emit(url) )\n }\n }\n\n //will be checked for input value clearing\n this.lastFileCount = this.files.length\n }\n\n /** called when input has files */\n changeFn(event:any) {\n var fileList = event.__files_ || (event.target && event.target.files)\n\n if (!fileList) return;\n\n this.stopEvent(event);\n this.handleFiles(fileList)\n }\n\n clickHandler(evt:any){\n const elm = this.element.nativeElement\n if (elm.getAttribute('disabled') || this.fileDropDisabled){\n return false;\n }\n\n var r = detectSwipe(evt);\n // prevent the click if it is a swipe\n if ( r!==false ) return r;\n\n const fileElm = this.paramFileElm()\n fileElm.click()\n //fileElm.dispatchEvent( new Event('click') );\n this.beforeSelect()\n\n return false;\n }\n\n beforeSelect(){\n if( this.files && this.lastFileCount===this.files.length )return\n\n //if no files in array, be sure browser doesnt prevent reselect of same file (see github issue 27)\n this.fileElm.value = null\n }\n\n isEmptyAfterSelection():boolean {\n return !!this.element.nativeElement.attributes.multiple;\n }\n\n eventToTransfer(event:any):any {\n if(event.dataTransfer)return event.dataTransfer\n return event.originalEvent ? event.originalEvent.dataTransfer : null\n }\n\n stopEvent(event:any):any {\n event.preventDefault();\n event.stopPropagation();\n }\n\n transferHasFiles(transfer:any):any {\n if (!transfer.types) {\n return false;\n }\n\n if (transfer.types.indexOf) {\n return transfer.types.indexOf('Files') !== -1;\n } else if (transfer.types.contains) {\n return transfer.types.contains('Files');\n } else {\n return false;\n }\n }\n\n eventToFiles(event:Event){\n const transfer = this.eventToTransfer(event);\n if( transfer ){\n if(transfer.files && transfer.files.length){\n return transfer.files\n }\n if(transfer.items && transfer.items.length){\n return transfer.items\n }\n }\n return []\n }\n\n applyExifRotations(\n files:File[]\n ):Promise{\n const mapper = (\n file:File,index:number\n ):Promise=>{\n return applyExifRotation(file)\n .then( fixedFile=>files.splice(index, 1, fixedFile) )\n }\n\n const proms:Promise[] = []\n for(let x=files.length-1; x >= 0; --x){\n proms[x] = mapper( files[x], x )\n }\n return Promise.all( proms ).then( ()=>files )\n }\n\n @HostListener('change', ['$event'])\n onChange(event:Event):void {\n let files = this.element.nativeElement.files || this.eventToFiles(event)\n\n if(!files.length)return\n\n this.stopEvent(event);\n this.handleFiles(files)\n }\n\n getFileFilterFailName(\n file:File\n ):string | undefined{\n for(let i = 0; i < this.filters.length; i++){\n if( !this.filters[i].fn.call(this, file) ){\n return this.filters[i].name\n }\n }\n return undefined\n }\n\n isFileValid(file:File):boolean{\n const noFilters = !this.accept && (!this.filters || !this.filters.length)\n if( noFilters ){\n return true//we have no filters so all files are valid\n }\n\n return this.getFileFilterFailName(file) ? false : true\n }\n\n isFilesValid(files:File[]){\n for(let x=files.length-1; x >= 0; --x){\n if( !this.isFileValid(files[x]) ){\n return false\n }\n }\n return true\n }\n\n protected _acceptFilter(item:File):boolean {\n return acceptType(this.accept, item.type, item.name)\n }\n\n protected _fileSizeFilter(item:File):boolean {\n return !(this.maxSize && item.size > this.maxSize);\n }\n\n /** browsers try hard to conceal data about file drags, this tends to undo that */\n filesToWriteableObject( files:File[] ):dragMeta[]{\n const jsonFiles:dragMeta[] = []\n for(let x=0; x < files.length; ++x){\n jsonFiles.push({\n type:files[x].type,\n kind:files[x][\"kind\"]\n })\n }\n return jsonFiles\n }\n}\n","import { Directive, Input } from \"@angular/core\"\nimport { ngf } from \"./ngf.directive\"\n\n@Directive({\n selector: \"[ngfSelect]\",\n exportAs: \"ngfSelect\"\n})\nexport class ngfSelect extends ngf {\n @Input() selectable:any = true\n}","import {\n Directive, EventEmitter,\n HostListener, Input, Output\n} from '@angular/core';\nimport { ngf, dragMeta } from \"./ngf.directive\"\n\n@Directive({\n selector: \"[ngfDrop]\",\n exportAs: \"ngfDrop\"\n})\nexport class ngfDrop extends ngf {\n @Output() fileOver:EventEmitter = new EventEmitter();\n\n @Input() validDrag:boolean = false\n @Output() validDragChange:EventEmitter = new EventEmitter()\n\n @Input() invalidDrag = false\n @Output() invalidDragChange:EventEmitter = new EventEmitter()\n\n @Input() dragFiles !: dragMeta[]\n @Output() dragFilesChange:EventEmitter = new EventEmitter()\n\n @HostListener('drop', ['$event'])\n onDrop(event:Event):void {\n if(this.fileDropDisabled){\n this.stopEvent(event);\n return\n }\n\n this.closeDrags()\n let files = this.eventToFiles(event)\n\n if(!files.length)return\n\n this.stopEvent(event);\n this.handleFiles(files)\n }\n\n handleFiles(files:File[]){\n this.fileOver.emit(false)//turn-off dragover\n super.handleFiles(files)\n }\n\n @HostListener('dragover', ['$event'])\n onDragOver(event:Event):void {\n if(this.fileDropDisabled){\n this.stopEvent(event);\n return\n }\n\n const transfer = this.eventToTransfer(event)\n\n let files = this.eventToFiles(event)\n\n let jsonFiles = this.filesToWriteableObject(files)\n this.dragFilesChange.emit( this.dragFiles=jsonFiles )\n\n if( files.length ){\n this.validDrag = this.isFilesValid(files)\n }else{\n //Safari, IE11 & some browsers do NOT tell you about dragged files until dropped. Always consider a valid drag\n this.validDrag = true\n }\n\n this.validDragChange.emit(this.validDrag)\n\n this.invalidDrag = !this.validDrag\n this.invalidDragChange.emit(this.invalidDrag)\n\n transfer.dropEffect = 'copy'//change cursor and such\n this.stopEvent(event)\n this.fileOver.emit(true)\n }\n\n closeDrags(){\n delete this.validDrag\n this.validDragChange.emit(this.validDrag)\n this.invalidDrag = false\n this.invalidDragChange.emit(this.invalidDrag)\n delete this.dragFiles\n this.dragFilesChange.emit( this.dragFiles )\n }\n\n @HostListener('dragleave', ['$event'])\n onDragLeave(event:Event):any {\n if(this.fileDropDisabled){\n this.stopEvent(event);\n return\n }\n \n this.closeDrags()\n\n if ((this as any).element) {\n if (event.currentTarget === (this as any).element[0]) {\n return;\n }\n }\n\n this.stopEvent(event);\n this.fileOver.emit(false);\n }\n}","import { Directive, ElementRef, Input } from '@angular/core';\nimport { dataUrl } from './fileTools';\n\n@Directive({selector: '[ngfBackground]'})\nexport class ngfBackground {\n @Input('ngfBackground') file:any\n\n constructor(public ElementRef:ElementRef){}\n\n ngOnChanges( _changes:any ){\n dataUrl(this.file)\n .then(src=>{\n const urlString = 'url(\\'' + (src || '') + '\\')'\n this.ElementRef.nativeElement.style.backgroundImage = urlString\n })\n }\n}\n","import { Directive, EventEmitter, Output, Input } from '@angular/core';\n\n@Directive({selector: 'ngfUploadStatus'})\nexport class ngfUploadStatus {\n @Input() percent:number = 0\n @Output() percentChange:EventEmitter = new EventEmitter()\n @Input() httpEvent !: Event\n\n ngOnChanges( changes ){\n if( changes.httpEvent && changes.httpEvent.currentValue ){\n const event = changes.httpEvent.currentValue\n if (event.loaded && event.total) {\n setTimeout(()=>{\n this.percent = Math.round(100 * event.loaded / event.total);\n this.percentChange.emit( this.percent )\n }, 0)\n }\n }\n }\n}","import {\n IterableDiffer,\n IterableDiffers,\n Directive, EventEmitter,\n Output, Input\n} from '@angular/core';\n\n@Directive({selector: 'ngfFormData'})\nexport class ngfFormData {\n @Input() files !: File[]\n @Input() postName:string = \"file\"\n @Input() fileName !: string//force file name\n\n @Input() FormData:FormData = new FormData()\n @Output() FormDataChange:EventEmitter = new EventEmitter()\n\n differ:IterableDiffer<{}>\n\n constructor(IterableDiffers: IterableDiffers){\n this.differ = IterableDiffers.find([]).create()\n }\n\n ngDoCheck(){\n var changes = this.differ.diff( this.files );\n\n if (changes) {\n setTimeout(()=>this.buildFormData(), 0)\n }\n }\n\n buildFormData(){\n const isArray = typeof(this.files)==='object' && this.files.constructor===Array\n\n if( isArray ){\n this.FormData = new FormData()\n const files = this.files || []\n files.forEach(file=>\n this.FormData.append(this.postName, file, this.fileName||file.name)\n )\n this.FormDataChange.emit( this.FormData )\n }else{\n delete this.FormData\n }\n }\n}","import { Directive, ElementRef, Input } from '@angular/core';\nimport { dataUrl } from './fileTools';\n\n@Directive({ selector: '[ngfSrc]' })\nexport class ngfSrc {\n @Input('ngfSrc') file: any\n\n constructor(public ElementRef: ElementRef) { }\n\n ngOnChanges(_changes: any) {\n dataUrl(this.file)\n .then(src=>\n this.ElementRef.nativeElement.src = src\n )\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { ngfBackground } from './ngfBackground.directive';\nimport { ngfDrop } from './ngfDrop.directive';\nimport { ngf } from './ngf.directive';\nimport { ngfSelect } from './ngfSelect.directive';\nimport { ngfUploadStatus } from './ngfUploadStatus.directive';\nimport { ngfFormData } from './ngfFormData.directive';\nimport { ngfSrc } from './ngfSrc.directive';\n//import{ HttpModule } from '@angular/http';\n\nconst declarations = [\n ngfDrop,\n ngfSelect,\n ngfBackground,\n ngfSrc,\n ngfUploadStatus,\n ngfFormData,\n ngf\n]\n\n@NgModule({\n imports: [\n CommonModule\n //,HttpModule\n ],\n declarations: declarations,\n exports: declarations//[HttpModule, ...declarations]\n}) export class ngfModule {}"]} \ No newline at end of file +{"version":3,"sources":["../../node_modules/tslib/tslib.es6.js","../src/file-upload/doc-event-help.functions.ts","../src/file-upload/fileTools.ts","../src/file-upload/ngf.directive.ts","../src/file-upload/ngfSelect.directive.ts","../src/file-upload/ngfDrop.directive.ts","../src/file-upload/ngfBackground.directive.ts","../src/file-upload/ngfUploadStatus.directive.ts","../src/file-upload/ngfFormData.directive.ts","../src/file-upload/ngfSrc.directive.ts","../src/file-upload/ngf.module.ts"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__extends","__","this","constructor","prototype","create","__read","o","n","m","Symbol","iterator","r","e","i","call","ar","next","done","push","value","error","__spread","arguments","length","concat","isFileInput","elm","ty","getAttribute","tagName","toLowerCase","initialTouchStartY","initialTouchStartX","createFileInput","fileElem","document","createElement","type","fixFileOrientationByMeta","file","result","dataUrl","then","url","canvas","img","Promise","res","rej","onload","width","orientation","height","ctx","getContext","transform","applyTransform","drawImage","toDataURL","base","buffer","binary","bytes","Uint8Array","len","byteLength","String","fromCharCode","window","btoa","arrayBufferToBase64","fixedArrayBuffer","blob","dataurl","name","origSize","arr","split","mimeMatch","match","mime","bstr","atob","u8arr","charCodeAt","Blob","dataUrltoBlob","KEY_STR","encode64","input","chr1","chr2","enc1","enc2","enc3","output","chr3","enc4","isNaN","charAt","restore","origFileBase64","resizedFileBase64","replace","rawImage","decode64","segments","slice2Segments","image","exifManipulation","exifArray","getExifArray","newImageArray","insertExif","seg","x","imageData","buf","separatePoint","indexOf","mae","slice","ato","array","rawImageArray","head","endPoint","exec","console","log","newFile","theBlob","fileName","lastModifiedDate","Date","onerror","src","applyExifRotation","resolve","reader","FileReader","slicedFile","readAsArrayBuffer","view","DataView","getUint16","offset","marker","getUint32","little","tags","setUint16","target","readOrientation","disallowObjectUrl","$ngfDataUrl","$ngfBlobUrl","$$ngfDataUrlPromise","$$ngfBlobUrlPromise","deferred","win","FileAPI","navigator","userAgent","size","reject","Error","URL","webkitURL","fileReader","event","readAsDataURL","createObjectURL","ngf","element","filters","lastFileCount","ngfFixOrientation","fileDropDisabled","selectable","directiveInit","EventEmitter","lastInvalids","lastInvalidsChange","lastBaseUrlChange","fileChange","files","filesChange","initFilters","fn","_acceptFilter","_fileSizeFilter","ngOnDestroy","fileElm","destroyPasteListener","ngOnInit","_this","includes","enableSelecting","multiple","paramFileElm","setAttribute","evalCapturePaste","setTimeout","emit","ngOnChanges","changes","accept","currentValue","capturePaste","pasteCapturer","clip","clipboardData","handleFiles","preventDefault","addEventListener","removeEventListener","nativeElement","label","innerHTML","style","visibility","position","overflow","border","margin","padding","appendChild","createInvisibleFileInputWrap","getElementsByTagName","changeFn","bind","bindedHandler_1","_ev","beforeSelect","bindedHandler","ev","clickHandler","getValidFiles","rtn","isFileValid","getInvalidFiles","failReason","getFileFilterFailName","valids","applyExifRotations","fixedFiles","que","isEmptyAfterSelection","apply","observers","fileList","__files_","stopEvent","evt","touches","changedTouches","originalEvent","clientX","clientY","currentX","currentY","Math","abs","stopPropagation","cancelable","detectSwipe","click","attributes","eventToTransfer","dataTransfer","transferHasFiles","transfer","types","contains","eventToFiles","items","mapper","index","fixedFile","splice","proms","all","onChange","isFilesValid","item","regx","acceptRegString","defs","RegExp","search","substring","acceptType","maxSize","filesToWriteableObject","jsonFiles","kind","Directive","args","selector","exportAs","ElementRef","Input","Output","HostListener","ngfSelect","_super","ngfDrop","fileOver","validDrag","validDragChange","invalidDrag","invalidDragChange","dragFilesChange","onDrop","closeDrags","onDragOver","dragFiles","dropEffect","onDragLeave","currentTarget","ngfBackground","_changes","urlString","backgroundImage","ngfUploadStatus","percent","percentChange","httpEvent","event_1","loaded","total","round","ngfFormData","IterableDiffers","postName","FormData","FormDataChange","differ","find","ngDoCheck","diff","buildFormData","forEach","append","ngfSrc","declarations","NgModule","imports","CommonModule","exports"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","export const isFileInput = function(elm:any){\n const ty = elm.getAttribute('type')\n return elm.tagName.toLowerCase() === 'input' && ty && ty.toLowerCase() === 'file';\n}\n\nlet initialTouchStartY = 0;\nlet initialTouchStartX = 0;\nexport const detectSwipe = function(evt:any):boolean {\n var touches = evt.changedTouches || (evt.originalEvent && evt.originalEvent.changedTouches);\n if (touches) {\n if (evt.type === 'touchstart') {\n initialTouchStartX = touches[0].clientX;\n initialTouchStartY = touches[0].clientY;\n return true; // don't block event default\n } else {\n // prevent scroll from triggering event\n if (evt.type === 'touchend') {\n var currentX = touches[0].clientX;\n var currentY = touches[0].clientY;\n if ((Math.abs(currentX - initialTouchStartX) > 20) ||\n (Math.abs(currentY - initialTouchStartY) > 20)) {\n // 29JAN2021 Removed/moved to inverse condition.\n // Should be run during tap detection.\n // evt.stopPropagation();\n // if (evt.cancelable) {\n // evt.preventDefault();\n // }\n // 29JAN2021 Swipe detected should return true instead of false.\n // return false;\n // Swipe detected\n return true;\n }\n // tap detected\n evt.stopPropagation();\n if (evt.cancelable) {\n evt.preventDefault();\n }\n }\n // 29JAN2021 Non-swipe condition should return false instead of true.\n // return true;\n return false;\n }\n }\n return false\n}\n\nexport const createInvisibleFileInputWrap = function() {\n var fileElem = createFileInput()\n var label = document.createElement('label');\n label.innerHTML = 'upload'\n label.style.visibility = 'hidden'\n label.style.position = 'absolute'\n label.style.overflow = 'hidden'\n label.style.width = '0px'\n label.style.height = '0px'\n label.style.border = 'none'\n label.style.margin = '0px'\n label.style.padding = '0px'\n label.setAttribute('tabindex','-1')\n \n //bindAttrToFileInput(fileElem, label);\n //generatedElems.push({el: elem, ref: label});\n\n label.appendChild( fileElem )\n //document.body.appendChild( label );\n\n return label;\n}\n\nexport const createFileInput = function() {\n var fileElem = document.createElement('input');\n fileElem.type=\"file\"\n return fileElem;\n}\n","export function getWindow():any{return window}\n\nexport function acceptType(accept:string, type:string, name?:string):boolean { \n if( !accept ){\n return true\n }\n\n const defs = accept.split(',')\n let regx:RegExp\n let acceptRegString:string\n\n for(let x=defs.length-1; x >= 0; --x){\n //Escapes dots in mimetype \n acceptRegString = defs[x]\n //trim\n acceptRegString = acceptRegString.replace(/(^\\s+|\\s+$)/g,'')\n //Escapes stars in mimetype \n acceptRegString = acceptRegString.replace(/\\*/g,'.*')\n //let acceptReg = '^((' + acceptRegString\n //acceptReg = acceptReg.replace(/,/g,')|(') + '))$'\n \n //try by mime\n regx = new RegExp(acceptRegString, 'gi')\n if( type.search(regx)>=0 ){\n return true\n }\n\n //try by ext\n if( acceptRegString.substring(0, 1)=='.' ){ \n acceptRegString = '\\\\'+ acceptRegString//.substring(1, acceptRegString.length-1)//remove dot at front\n regx = new RegExp(acceptRegString+'$', 'i')\n if( (name||type).search(regx)>=0 ){\n return true\n }\n }\n }\n return false\n}\n\nexport interface InvalidFileItem{\n file:File\n type:string\n}\n\nexport function arrayBufferToBase64(buffer:any) {\n var binary = '';\n var bytes = new Uint8Array(buffer);\n var len = bytes.byteLength;\n for (var i = 0; i < len; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return window.btoa(binary);\n}\n\nexport function dataUrltoBlob(\n dataurl:string,\n name:string,\n origSize?:any\n):Blob{\n var arr = dataurl.split(',');\n var mimeMatch = arr[0].match(/:(.*?);/)\n var mime:string = mimeMatch ? mimeMatch[1] : 'text/plain'\n var bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);\n while (n--) {\n u8arr[n] = bstr.charCodeAt(n);\n }\n var blob = new window.Blob([u8arr], {type: mime});\n blob[\"name\"] = name;\n blob[\"$ngfOrigSize\"] = origSize;\n return blob;\n}\n\nexport interface orientationMeta{\n orientation: number\n fixedArrayBuffer?:any[]\n}\n\nexport function applyTransform(\n ctx:CanvasRenderingContext2D,\n orientation:number,\n width:number,\n height:number\n) {\n switch (orientation) {\n case 2:\n return ctx.transform(-1, 0, 0, 1, width, 0);\n case 3:\n return ctx.transform(-1, 0, 0, -1, width, height);\n case 4:\n return ctx.transform(1, 0, 0, -1, 0, height);\n case 5:\n return ctx.transform(0, 1, 1, 0, 0, 0);\n case 6:\n return ctx.transform(0, 1, -1, 0, height, 0);\n case 7:\n return ctx.transform(0, -1, -1, 0, height, width);\n case 8:\n return ctx.transform(0, -1, 1, 0, 0, width);\n }\n}\n\nexport function fixFileOrientationByMeta(\n file:File, result:orientationMeta\n):Promise{\n return dataUrl(file, true)\n .then(url=>{\n var canvas = document.createElement('canvas');\n var img = document.createElement('img');\n\n return >new Promise(function(res,rej){\n img.onload = function () {\n try {\n canvas.width = result.orientation > 4 ? img.height : img.width\n canvas.height = result.orientation > 4 ? img.width : img.height\n var ctx = canvas.getContext('2d')\n applyTransform(ctx, result.orientation, img.width, img.height)\n ctx.drawImage(img, 0, 0);\n var dataUrl = canvas.toDataURL(file.type || 'image/WebP', 0.934)\n const base = arrayBufferToBase64(result.fixedArrayBuffer)\n dataUrl = restoreExif(base, dataUrl)\n var blob = dataUrltoBlob(dataUrl, file.name)\n const newFile = blobToFile(blob, file.name);\n res(newFile);\n } catch (e) {\n rej(e)\n }\n };\n img.onerror = rej;\n img.src = url; \n })\n })\n}\n\nexport function applyExifRotation(\n file:File\n):Promise{\n if (file.type.indexOf('image/jpeg') !== 0) {\n return Promise.resolve(file);\n }\n\n return readOrientation(file)\n .then((result:orientationMeta)=>{\n if (result.orientation < 2 || result.orientation > 8) {\n return file\n }\n \n return fixFileOrientationByMeta(file,result)\n })\n}\n\nexport function readOrientation(\n file:File\n):Promise{\n return new Promise((res,rej)=>{\n var reader = new FileReader();\n var slicedFile = file.slice ? file.slice(0, 64 * 1024) : file;\n reader.readAsArrayBuffer(slicedFile);\n reader.onerror = rej\n reader.onload = function (e:any) {\n var result:orientationMeta = {orientation: 1};\n var view = new DataView( this.result );\n if (view.getUint16(0, false) !== 0xFFD8) return res(result);\n\n var length = view.byteLength,\n offset = 2;\n while (offset < length) {\n var marker = view.getUint16(offset, false);\n offset += 2;\n if (marker === 0xFFE1) {\n if (view.getUint32(offset += 2, false) !== 0x45786966) return res(result);\n\n var little = view.getUint16(offset += 6, false) === 0x4949;\n offset += view.getUint32(offset + 4, little);\n var tags = view.getUint16(offset, little);\n offset += 2;\n for (var i = 0; i < tags; i++)\n if (view.getUint16(offset + (i * 12), little) === 0x0112) {\n var orientation = view.getUint16(offset + (i * 12) + 8, little);\n if (orientation >= 2 && orientation <= 8) {\n view.setUint16(offset + (i * 12) + 8, 1, little);\n result.fixedArrayBuffer = e.target.result;\n }\n result.orientation = orientation;\n return res(result);\n }\n } else if ((marker & 0xFF00) !== 0xFF00) break;\n else offset += view.getUint16(offset, false);\n }\n return res(result);\n };\n })\n}\n\n/** converts file-input file into base64 dataUri */\nexport function dataUrl(\n file:any,\n disallowObjectUrl?:any\n):Promise{\n if (!file) return Promise.resolve(file)\n \n if ((disallowObjectUrl && file.$ngfDataUrl != null) || (!disallowObjectUrl && file.$ngfBlobUrl != null)) {\n return Promise.resolve( disallowObjectUrl ? file.$ngfDataUrl : file.$ngfBlobUrl )\n }\n\n var p = disallowObjectUrl ? file.$$ngfDataUrlPromise : file.$$ngfBlobUrlPromise;\n if (p) return p;\n\n const win = getWindow()\n let deferred:Promise\n if (win.FileReader && file &&\n (!win.FileAPI || navigator.userAgent.indexOf('MSIE 8') === -1 || file.size < 20000) &&\n (!win.FileAPI || navigator.userAgent.indexOf('MSIE 9') === -1 || file.size < 4000000)) {\n //prefer URL.createObjectURL for handling refrences to files of all sizes\n //since it doesn´t build a large string in memory\n var URL = win.URL || win.webkitURL;\n if (FileReader) {\n deferred = new Promise((res,rej)=>{\n var fileReader = new FileReader();\n fileReader.onload = function (event:any) {\n file.$ngfDataUrl = event.target.result;\n delete file.$ngfDataUrl;\n res( event.target.result )\n };\n fileReader.onerror = function (e) {\n file.$ngfDataUrl = '';\n rej(e)\n };\n fileReader.readAsDataURL(file);\n })\n } else {\n var url:any;\n try {\n url = URL.createObjectURL(file);\n } catch (e) {\n return Promise.reject(e);\n }\n \n deferred = Promise.resolve( url )\n file.$ngfBlobUrl = url;\n }\n } else {\n file[disallowObjectUrl ? '$ngfDataUrl' : '$ngfBlobUrl'] = '';\n return Promise.reject( new Error('Browser does not support window.FileReader, window.FileReader, or window.FileAPI') )//deferred.reject();\n }\n\n if (disallowObjectUrl) {\n p = file.$$ngfDataUrlPromise = deferred;\n } else {\n p = file.$$ngfBlobUrlPromise = deferred;\n }\n\n p = p.then((x:any)=>{\n delete file[disallowObjectUrl ? '$$ngfDataUrlPromise' : '$$ngfBlobUrlPromise'];\n return x\n })\n\n return p;\n}\n\nexport function restoreExif(orig:any, resized:any) {\n var ExifRestorer:any = {\n KEY_STR:'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='\n }\n\n ExifRestorer.encode64 = function (input:any) {\n var output = '',\n chr1, chr2, chr3:any = '',\n enc1, enc2, enc3, enc4:any = '',\n i = 0;\n\n do {\n chr1 = input[i++];\n chr2 = input[i++];\n chr3 = input[i++];\n\n enc1 = chr1 >> 2;\n enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);\n enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);\n enc4 = chr3 & 63;\n\n if (isNaN(chr2)) {\n enc3 = enc4 = 64;\n } else if (isNaN(chr3)) {\n enc4 = 64;\n }\n\n output = output +\n this.KEY_STR.charAt(enc1) +\n this.KEY_STR.charAt(enc2) +\n this.KEY_STR.charAt(enc3) +\n this.KEY_STR.charAt(enc4);\n chr1 = chr2 = chr3 = '';\n enc1 = enc2 = enc3 = enc4 = '';\n } while (i < input.length);\n\n return output;\n };\n\n ExifRestorer.restore = function (origFileBase64:any, resizedFileBase64:any) {\n if (origFileBase64.match('data:image/jpeg;base64,')) {\n origFileBase64 = origFileBase64.replace('data:image/jpeg;base64,', '');\n }\n\n var rawImage:number[] = this.decode64(origFileBase64);\n var segments = this.slice2Segments(rawImage);\n\n var image = this.exifManipulation(resizedFileBase64, segments);\n\n return 'data:image/jpeg;base64,' + this.encode64(image);\n };\n\n\n ExifRestorer.exifManipulation = function (resizedFileBase64:any, segments:any) {\n var exifArray = this.getExifArray(segments),\n newImageArray = this.insertExif(resizedFileBase64, exifArray);\n return new Uint8Array(newImageArray);\n };\n\n ExifRestorer.getExifArray = function (segments:number[][]) {\n var seg;\n for (var x = 0; x < segments.length; x++) {\n seg = segments[x];\n if (seg[0] === 255 && seg[1] === 225) //(ff e1)\n {\n return seg;\n }\n }\n return [];\n };\n\n\n ExifRestorer.insertExif = function (resizedFileBase64:any, exifArray:any) {\n var imageData = resizedFileBase64.replace('data:image/jpeg;base64,', ''),\n buf = this.decode64(imageData),\n separatePoint = buf.indexOf(255, 3),\n mae = buf.slice(0, separatePoint),\n ato = buf.slice(separatePoint),\n array = mae;\n\n array = array.concat(exifArray);\n array = array.concat(ato);\n return array;\n };\n\n\n ExifRestorer.slice2Segments = function(\n rawImageArray:number[]\n ) {\n var head:number = 0,\n segments:number[][] = [];\n\n while (1) {\n if (rawImageArray[head] === 255 && rawImageArray[head + 1] === 218) {\n break;\n }\n if (rawImageArray[head] === 255 && rawImageArray[head + 1] === 216) {\n head += 2;\n }\n else {\n var length = rawImageArray[head + 2] * 256 + rawImageArray[head + 3]\n var endPoint = head + length + 2\n var seg:number[] = rawImageArray.slice(head, endPoint)\n segments.push(seg);\n head = endPoint;\n }\n if (head > rawImageArray.length) {\n break;\n }\n }\n\n return segments;\n };\n\n\n ExifRestorer.decode64 = function (\n input:any\n ):number[]{\n var chr1, chr2, chr3:any = '',\n enc1, enc2, enc3, enc4:any = '',\n i = 0,\n buf:number[] = [];\n\n // remove all characters that are not A-Z, a-z, 0-9, +, /, or =\n var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n if (base64test.exec(input)) {\n console.log('There were invalid base64 characters in the input text.');\n }\n input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, '');\n\n do {\n enc1 = this.KEY_STR.indexOf(input.charAt(i++));\n enc2 = this.KEY_STR.indexOf(input.charAt(i++));\n enc3 = this.KEY_STR.indexOf(input.charAt(i++));\n enc4 = this.KEY_STR.indexOf(input.charAt(i++));\n\n chr1 = (enc1 << 2) | (enc2 >> 4);\n chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\n chr3 = ((enc3 & 3) << 6) | enc4;\n\n buf.push(chr1);\n\n if (enc3 !== 64) {\n buf.push(chr2);\n }\n if (enc4 !== 64) {\n buf.push(chr3);\n }\n\n chr1 = chr2 = chr3 = '';\n enc1 = enc2 = enc3 = enc4 = '';\n\n } while (i < input.length);\n\n return buf;\n };\n\n return ExifRestorer.restore(orig, resized); //<= EXIF\n};\n\nfunction blobToFile(theBlob: Blob, fileName:string): File {\n var b: any = theBlob;\n //A Blob() is almost a File() - it's just missing the two properties below which we will add\n b.lastModifiedDate = new Date();\n b.name = fileName;\n\n //Cast to a File() type\n return theBlob;\n}\n","import { Directive, EventEmitter, ElementRef, Input, Output, HostListener, ChangeDetectionStrategy } from '@angular/core';\nimport { createInvisibleFileInputWrap, isFileInput, detectSwipe } from \"./doc-event-help.functions\"\nimport {\n acceptType, InvalidFileItem,\n applyExifRotation, dataUrl\n} from \"./fileTools\"\n\nexport interface dragMeta{\n type:string\n kind:string\n}\n\n/** A master base set of logic intended to support file select/drag/drop operations\n NOTE: Use ngfDrop for full drag/drop. Use ngfSelect for selecting\n*/\n@Directive({\n selector: \"[ngf]\",\n exportAs:\"ngf\"\n})\nexport class ngf {\n fileElm:any\n filters:{name:string, fn:(file:File)=>boolean}[] = []\n lastFileCount:number=0\n\n @Input() multiple !:string\n @Input() accept !:string\n @Input() maxSize !:number\n //@Input() forceFilename:string\n //@Input() forcePostname:string\n @Input() ngfFixOrientation:boolean = true\n\n @Input() fileDropDisabled:boolean = false\n @Input() selectable: boolean | string = false\n @Output('init') directiveInit:EventEmitter = new EventEmitter()\n\n @Input() lastInvalids:InvalidFileItem[] = []\n @Output() lastInvalidsChange:EventEmitter<{file:File,type:string}[]> = new EventEmitter()\n\n @Input() lastBaseUrl !: string//base64 last file uploaded url\n @Output() lastBaseUrlChange:EventEmitter = new EventEmitter()\n\n @Input() file !: File//last file uploaded\n @Output() fileChange:EventEmitter = new EventEmitter()\n\n @Input() files:File[] = []\n @Output() filesChange:EventEmitter = new EventEmitter();\n\n @Input() capturePaste: boolean; // window paste file watching (empty string turns on)\n pasteCapturer !: (e: Event) => void;\n\n constructor(public element:ElementRef){\n this.initFilters()\n }\n\n initFilters(){\n // the order is important\n this.filters.push({name: 'accept', fn: this._acceptFilter})\n this.filters.push({name: 'fileSize', fn: this._fileSizeFilter})\n\n //this.filters.push({name: 'fileType', fn: this._fileTypeFilter})\n //this.filters.push({name: 'queueLimit', fn: this._queueLimitFilter})\n //this.filters.push({name: 'mimeType', fn: this._mimeTypeFilter})\n }\n\n ngOnDestroy(){\n delete this.fileElm//faster memory release of dom element\n this.destroyPasteListener();\n }\n\n ngOnInit(){\n const selectable = (this.selectable || this.selectable==='') && !['false', 'null', '0'].includes(this.selectable as string);\n if( selectable ){\n this.enableSelecting()\n }\n\n if( this.multiple ){\n this.paramFileElm().setAttribute('multiple', this.multiple)\n }\n\n this.evalCapturePaste();\n\n //create reference to this class with one cycle delay to avoid ExpressionChangedAfterItHasBeenCheckedError\n setTimeout(()=>{\n this.directiveInit.emit(this)\n }, 0)\n }\n\n ngOnChanges( changes ){\n if( changes.accept ){\n this.paramFileElm().setAttribute('accept', changes.accept.currentValue || '*')\n }\n\n if (changes.capturePaste) {\n this.evalCapturePaste();\n }\n }\n\n evalCapturePaste() {\n const isActive = this.capturePaste || (this.capturePaste as any)==='' || ['false', '0', 'null'].includes(this.capturePaste as any);\n\n if (isActive) {\n if (this.pasteCapturer) {\n return; // already listening\n }\n\n this.pasteCapturer = (e: Event) => {\n const clip = (e as any).clipboardData;\n if (clip && clip.files && clip.files.length) {\n this.handleFiles(clip.files);\n e.preventDefault();\n }\n }\n\n window.addEventListener('paste', this.pasteCapturer);\n\n return;\n }\n\n this.destroyPasteListener();\n }\n\n destroyPasteListener() {\n if (this.pasteCapturer) {\n window.removeEventListener('paste', this.pasteCapturer);\n delete this.pasteCapturer;\n }\n }\n\n paramFileElm(){\n if( this.fileElm )return this.fileElm//already defined\n\n //elm is a file input\n const isFile = isFileInput( this.element.nativeElement )\n if(isFile)return this.fileElm = this.element.nativeElement\n\n //create foo file input\n const label = createInvisibleFileInputWrap()\n this.fileElm = label.getElementsByTagName('input')[0]\n this.fileElm.addEventListener('change', this.changeFn.bind(this));\n this.element.nativeElement.appendChild( label )\n return this.fileElm\n }\n\n enableSelecting(){\n let elm = this.element.nativeElement\n\n if( isFileInput(elm) ){\n const bindedHandler = _ev=>this.beforeSelect()\n elm.addEventListener('click', bindedHandler)\n elm.addEventListener('touchstart', bindedHandler)\n return\n }\n\n const bindedHandler = ev=>this.clickHandler(ev)\n elm.addEventListener('click', bindedHandler)\n elm.addEventListener('touchstart', bindedHandler)\n elm.addEventListener('touchend', bindedHandler)\n }\n\n getValidFiles( files:File[] ):File[]{\n const rtn:File[] = []\n for(let x=files.length-1; x >= 0; --x){\n if( this.isFileValid(files[x]) ){\n rtn.push( files[x] )\n }\n }\n return rtn\n }\n\n getInvalidFiles(files:File[]):InvalidFileItem[]{\n const rtn:InvalidFileItem[] = []\n for(let x=files.length-1; x >= 0; --x){\n let failReason = this.getFileFilterFailName(files[x])\n if( failReason ){\n rtn.push({\n file : files[x],\n type : failReason\n })\n }\n }\n return rtn\n }\n\n // Primary handler of files coming in\n handleFiles(files:File[]){\n const valids = this.getValidFiles(files)\n\n if(files.length!=valids.length){\n this.lastInvalids = this.getInvalidFiles(files)\n }else{\n delete this.lastInvalids\n }\n\n this.lastInvalidsChange.emit(this.lastInvalids)\n\n if( valids.length ){\n if( this.ngfFixOrientation ){\n this.applyExifRotations(valids)\n .then( fixedFiles=>this.que(fixedFiles) )\n }else{\n this.que(valids)\n }\n }\n\n if (this.isEmptyAfterSelection()) {\n this.element.nativeElement.value = ''\n }\n }\n\n que( files:File[] ){\n this.files = this.files || []\n Array.prototype.push.apply(this.files, files)\n\n //below break memory ref and doesnt act like a que\n //this.files = files//causes memory change which triggers bindings like \n\n this.filesChange.emit( this.files )\n\n if(files.length){\n this.fileChange.emit( this.file=files[0] )\n\n if(this.lastBaseUrlChange.observers.length){\n dataUrl( files[0] )\n .then( url=>this.lastBaseUrlChange.emit(url) )\n }\n }\n\n //will be checked for input value clearing\n this.lastFileCount = this.files.length\n }\n\n /** called when input has files */\n changeFn(event:any) {\n var fileList = event.__files_ || (event.target && event.target.files)\n\n if (!fileList) return;\n\n this.stopEvent(event);\n this.handleFiles(fileList)\n }\n\n clickHandler(evt:any){\n const elm = this.element.nativeElement\n if (elm.getAttribute('disabled') || this.fileDropDisabled){\n return false;\n }\n\n var r = detectSwipe(evt);\n // prevent the click if it is a swipe\n if ( r!==false ) return r;\n\n const fileElm = this.paramFileElm()\n fileElm.click()\n //fileElm.dispatchEvent( new Event('click') );\n this.beforeSelect()\n\n return false;\n }\n\n beforeSelect(){\n if( this.files && this.lastFileCount===this.files.length )return\n\n //if no files in array, be sure browser doesnt prevent reselect of same file (see github issue 27)\n this.fileElm.value = null\n }\n\n isEmptyAfterSelection():boolean {\n return !!this.element.nativeElement.attributes.multiple;\n }\n\n eventToTransfer(event:any):any {\n if(event.dataTransfer)return event.dataTransfer\n return event.originalEvent ? event.originalEvent.dataTransfer : null\n }\n\n stopEvent(event:any):any {\n event.preventDefault();\n event.stopPropagation();\n }\n\n transferHasFiles(transfer:any):any {\n if (!transfer.types) {\n return false;\n }\n\n if (transfer.types.indexOf) {\n return transfer.types.indexOf('Files') !== -1;\n } else if (transfer.types.contains) {\n return transfer.types.contains('Files');\n } else {\n return false;\n }\n }\n\n eventToFiles(event:Event){\n const transfer = this.eventToTransfer(event);\n if( transfer ){\n if(transfer.files && transfer.files.length){\n return transfer.files\n }\n if(transfer.items && transfer.items.length){\n return transfer.items\n }\n }\n return []\n }\n\n applyExifRotations(\n files:File[]\n ):Promise{\n const mapper = (\n file:File,index:number\n ):Promise=>{\n return applyExifRotation(file)\n .then( fixedFile=>files.splice(index, 1, fixedFile) )\n }\n\n const proms:Promise[] = []\n for(let x=files.length-1; x >= 0; --x){\n proms[x] = mapper( files[x], x )\n }\n return Promise.all( proms ).then( ()=>files )\n }\n\n @HostListener('change', ['$event'])\n onChange(event:Event):void {\n let files = this.element.nativeElement.files || this.eventToFiles(event)\n\n if(!files.length)return\n\n this.stopEvent(event);\n this.handleFiles(files)\n }\n\n getFileFilterFailName(\n file:File\n ):string | undefined{\n for(let i = 0; i < this.filters.length; i++){\n if( !this.filters[i].fn.call(this, file) ){\n return this.filters[i].name\n }\n }\n return undefined\n }\n\n isFileValid(file:File):boolean{\n const noFilters = !this.accept && (!this.filters || !this.filters.length)\n if( noFilters ){\n return true//we have no filters so all files are valid\n }\n\n return this.getFileFilterFailName(file) ? false : true\n }\n\n isFilesValid(files:File[]){\n for(let x=files.length-1; x >= 0; --x){\n if( !this.isFileValid(files[x]) ){\n return false\n }\n }\n return true\n }\n\n protected _acceptFilter(item:File):boolean {\n return acceptType(this.accept, item.type, item.name)\n }\n\n protected _fileSizeFilter(item:File):boolean {\n return !(this.maxSize && item.size > this.maxSize);\n }\n\n /** browsers try hard to conceal data about file drags, this tends to undo that */\n filesToWriteableObject( files:File[] ):dragMeta[]{\n const jsonFiles:dragMeta[] = []\n for(let x=0; x < files.length; ++x){\n jsonFiles.push({\n type:files[x].type,\n kind:files[x][\"kind\"]\n })\n }\n return jsonFiles\n }\n}\n","import { Directive, Input } from \"@angular/core\"\nimport { ngf } from \"./ngf.directive\"\n\n@Directive({\n selector: \"[ngfSelect]\",\n exportAs: \"ngfSelect\"\n})\nexport class ngfSelect extends ngf {\n @Input() selectable:any = true\n}","import {\n Directive, EventEmitter,\n HostListener, Input, Output\n} from '@angular/core';\nimport { ngf, dragMeta } from \"./ngf.directive\"\n\n@Directive({\n selector: \"[ngfDrop]\",\n exportAs: \"ngfDrop\"\n})\nexport class ngfDrop extends ngf {\n @Output() fileOver:EventEmitter = new EventEmitter();\n\n @Input() validDrag:boolean = false\n @Output() validDragChange:EventEmitter = new EventEmitter()\n\n @Input() invalidDrag = false\n @Output() invalidDragChange:EventEmitter = new EventEmitter()\n\n @Input() dragFiles !: dragMeta[]\n @Output() dragFilesChange:EventEmitter = new EventEmitter()\n\n @HostListener('drop', ['$event'])\n onDrop(event:Event):void {\n if(this.fileDropDisabled){\n this.stopEvent(event);\n return\n }\n\n this.closeDrags()\n let files = this.eventToFiles(event)\n\n if(!files.length)return\n\n this.stopEvent(event);\n this.handleFiles(files)\n }\n\n handleFiles(files:File[]){\n this.fileOver.emit(false)//turn-off dragover\n super.handleFiles(files)\n }\n\n @HostListener('dragover', ['$event'])\n onDragOver(event:Event):void {\n if(this.fileDropDisabled){\n this.stopEvent(event);\n return\n }\n\n const transfer = this.eventToTransfer(event)\n\n let files = this.eventToFiles(event)\n\n let jsonFiles = this.filesToWriteableObject(files)\n this.dragFilesChange.emit( this.dragFiles=jsonFiles )\n\n if( files.length ){\n this.validDrag = this.isFilesValid(files)\n }else{\n //Safari, IE11 & some browsers do NOT tell you about dragged files until dropped. Always consider a valid drag\n this.validDrag = true\n }\n\n this.validDragChange.emit(this.validDrag)\n\n this.invalidDrag = !this.validDrag\n this.invalidDragChange.emit(this.invalidDrag)\n\n transfer.dropEffect = 'copy'//change cursor and such\n this.stopEvent(event)\n this.fileOver.emit(true)\n }\n\n closeDrags(){\n delete this.validDrag\n this.validDragChange.emit(this.validDrag)\n this.invalidDrag = false\n this.invalidDragChange.emit(this.invalidDrag)\n delete this.dragFiles\n this.dragFilesChange.emit( this.dragFiles )\n }\n\n @HostListener('dragleave', ['$event'])\n onDragLeave(event:Event):any {\n if(this.fileDropDisabled){\n this.stopEvent(event);\n return\n }\n \n this.closeDrags()\n\n if ((this as any).element) {\n if (event.currentTarget === (this as any).element[0]) {\n return;\n }\n }\n\n this.stopEvent(event);\n this.fileOver.emit(false);\n }\n}","import { Directive, ElementRef, Input } from '@angular/core';\nimport { dataUrl } from './fileTools';\n\n@Directive({selector: '[ngfBackground]'})\nexport class ngfBackground {\n @Input('ngfBackground') file:any\n\n constructor(public ElementRef:ElementRef){}\n\n ngOnChanges( _changes:any ){\n dataUrl(this.file)\n .then(src=>{\n const urlString = 'url(\\'' + (src || '') + '\\')'\n this.ElementRef.nativeElement.style.backgroundImage = urlString\n })\n }\n}\n","import { Directive, EventEmitter, Output, Input } from '@angular/core';\n\n@Directive({selector: 'ngfUploadStatus'})\nexport class ngfUploadStatus {\n @Input() percent:number = 0\n @Output() percentChange:EventEmitter = new EventEmitter()\n @Input() httpEvent !: Event\n\n ngOnChanges( changes ){\n if( changes.httpEvent && changes.httpEvent.currentValue ){\n const event = changes.httpEvent.currentValue\n if (event.loaded && event.total) {\n setTimeout(()=>{\n this.percent = Math.round(100 * event.loaded / event.total);\n this.percentChange.emit( this.percent )\n }, 0)\n }\n }\n }\n}","import {\n IterableDiffer,\n IterableDiffers,\n Directive, EventEmitter,\n Output, Input\n} from '@angular/core';\n\n@Directive({selector: 'ngfFormData'})\nexport class ngfFormData {\n @Input() files !: File[]\n @Input() postName:string = \"file\"\n @Input() fileName !: string//force file name\n\n @Input() FormData:FormData = new FormData()\n @Output() FormDataChange:EventEmitter = new EventEmitter()\n\n differ:IterableDiffer<{}>\n\n constructor(IterableDiffers: IterableDiffers){\n this.differ = IterableDiffers.find([]).create()\n }\n\n ngDoCheck(){\n var changes = this.differ.diff( this.files );\n\n if (changes) {\n setTimeout(()=>this.buildFormData(), 0)\n }\n }\n\n buildFormData(){\n const isArray = typeof(this.files)==='object' && this.files.constructor===Array\n\n if( isArray ){\n this.FormData = new FormData()\n const files = this.files || []\n files.forEach(file=>\n this.FormData.append(this.postName, file, this.fileName||file.name)\n )\n this.FormDataChange.emit( this.FormData )\n }else{\n delete this.FormData\n }\n }\n}","import { Directive, ElementRef, Input } from '@angular/core';\nimport { dataUrl } from './fileTools';\n\n@Directive({ selector: '[ngfSrc]' })\nexport class ngfSrc {\n @Input('ngfSrc') file: any\n\n constructor(public ElementRef: ElementRef) { }\n\n ngOnChanges(_changes: any) {\n dataUrl(this.file)\n .then(src=>\n this.ElementRef.nativeElement.src = src\n )\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { ngfBackground } from './ngfBackground.directive';\nimport { ngfDrop } from './ngfDrop.directive';\nimport { ngf } from './ngf.directive';\nimport { ngfSelect } from './ngfSelect.directive';\nimport { ngfUploadStatus } from './ngfUploadStatus.directive';\nimport { ngfFormData } from './ngfFormData.directive';\nimport { ngfSrc } from './ngfSrc.directive';\n//import{ HttpModule } from '@angular/http';\n\nconst declarations = [\n ngfDrop,\n ngfSelect,\n ngfBackground,\n ngfSrc,\n ngfUploadStatus,\n ngfFormData,\n ngf\n]\n\n@NgModule({\n imports: [\n CommonModule\n //,HttpModule\n ],\n declarations: declarations,\n exports: declarations//[HttpModule, ...declarations]\n}) export class ngfModule {}"]} \ No newline at end of file diff --git a/dist/esm2015/file-upload/doc-event-help.functions.js b/dist/esm2015/file-upload/doc-event-help.functions.js index 776d23e9..8e347b1a 100644 --- a/dist/esm2015/file-upload/doc-event-help.functions.js +++ b/dist/esm2015/file-upload/doc-event-help.functions.js @@ -19,16 +19,25 @@ export const detectSwipe = function (evt) { var currentY = touches[0].clientY; if ((Math.abs(currentX - initialTouchStartX) > 20) || (Math.abs(currentY - initialTouchStartY) > 20)) { + // 29JAN2021 Removed/moved to inverse condition. + // Should be run during tap detection. + // evt.stopPropagation(); + // if (evt.cancelable) { + // evt.preventDefault(); + // } + // 29JAN2021 Swipe detected should return true instead of false. + // return false; // Swipe detected return true; } - // touch was a 'tap' so prevent propogation and prevent - // device follow-up actions (click, mouseup, mousedown, etc.) + // tap detected evt.stopPropagation(); if (evt.cancelable) { evt.preventDefault(); } } + // 29JAN2021 Non-swipe condition should return false instead of true. + // return true; return false; } } @@ -58,4 +67,4 @@ export const createFileInput = function () { fileElem.type = "file"; return fileElem; }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jLWV2ZW50LWhlbHAuZnVuY3Rpb25zLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uL3NyYy8iLCJzb3VyY2VzIjpbImZpbGUtdXBsb2FkL2RvYy1ldmVudC1oZWxwLmZ1bmN0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsVUFBUyxHQUFPO0lBQ3pDLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDbkMsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxLQUFLLE9BQU8sSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxLQUFLLE1BQU0sQ0FBQztBQUNwRixDQUFDLENBQUE7QUFFRCxJQUFJLGtCQUFrQixHQUFHLENBQUMsQ0FBQztBQUMzQixJQUFJLGtCQUFrQixHQUFHLENBQUMsQ0FBQztBQUMzQixNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsVUFBUyxHQUFPO0lBQ3pDLElBQUksT0FBTyxHQUFHLEdBQUcsQ0FBQyxjQUFjLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxJQUFJLEdBQUcsQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDNUYsSUFBSSxPQUFPLEVBQUU7UUFDWCxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssWUFBWSxFQUFFO1lBQzdCLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDeEMsa0JBQWtCLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUN4QyxPQUFPLElBQUksQ0FBQyxDQUFDLDRCQUE0QjtTQUMxQzthQUFNO1lBQ0wsdUNBQXVDO1lBQ3ZDLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxVQUFVLEVBQUU7Z0JBQzNCLElBQUksUUFBUSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7Z0JBQ2xDLElBQUksUUFBUSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsR0FBRyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDaEQsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsR0FBRyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO29CQUNoRCxpQkFBaUI7b0JBQ2pCLE9BQU8sSUFBSSxDQUFDO2lCQUNiO2dCQUNELHVEQUF1RDtnQkFDdkQsNkRBQTZEO2dCQUM3RCxHQUFHLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ3RCLElBQUksR0FBRyxDQUFDLFVBQVUsRUFBRTtvQkFDbEIsR0FBRyxDQUFDLGNBQWMsRUFBRSxDQUFDO2lCQUN0QjthQUNGO1lBQ0QsT0FBTyxLQUFLLENBQUM7U0FDZDtLQUNGO0lBQ0QsT0FBTyxLQUFLLENBQUE7QUFDZCxDQUFDLENBQUE7QUFFRCxNQUFNLENBQUMsTUFBTSw0QkFBNEIsR0FBRztJQUMxQyxJQUFJLFFBQVEsR0FBRyxlQUFlLEVBQUUsQ0FBQTtJQUNoQyxJQUFJLEtBQUssR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzVDLEtBQUssQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFBO0lBQzFCLEtBQUssQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQTtJQUNqQyxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUE7SUFDakMsS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFBO0lBQy9CLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQTtJQUN6QixLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUE7SUFDMUIsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFBO0lBQzNCLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQTtJQUMxQixLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUE7SUFDM0IsS0FBSyxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUMsSUFBSSxDQUFDLENBQUE7SUFFbkMsdUNBQXVDO0lBQ3ZDLDhDQUE4QztJQUU5QyxLQUFLLENBQUMsV0FBVyxDQUFFLFFBQVEsQ0FBRSxDQUFBO0lBQzdCLHFDQUFxQztJQUVyQyxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMsQ0FBQTtBQUVELE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRztJQUM3QixJQUFJLFFBQVEsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQy9DLFFBQVEsQ0FBQyxJQUFJLEdBQUMsTUFBTSxDQUFBO0lBQ3BCLE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBpc0ZpbGVJbnB1dCA9IGZ1bmN0aW9uKGVsbTphbnkpe1xuICBjb25zdCB0eSA9IGVsbS5nZXRBdHRyaWJ1dGUoJ3R5cGUnKVxuICByZXR1cm4gZWxtLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2lucHV0JyAmJiB0eSAmJiB0eS50b0xvd2VyQ2FzZSgpID09PSAnZmlsZSc7XG59XG5cbmxldCBpbml0aWFsVG91Y2hTdGFydFkgPSAwO1xubGV0IGluaXRpYWxUb3VjaFN0YXJ0WCA9IDA7XG5leHBvcnQgY29uc3QgZGV0ZWN0U3dpcGUgPSBmdW5jdGlvbihldnQ6YW55KTpib29sZWFuIHtcbiAgdmFyIHRvdWNoZXMgPSBldnQuY2hhbmdlZFRvdWNoZXMgfHwgKGV2dC5vcmlnaW5hbEV2ZW50ICYmIGV2dC5vcmlnaW5hbEV2ZW50LmNoYW5nZWRUb3VjaGVzKTtcbiAgaWYgKHRvdWNoZXMpIHtcbiAgICBpZiAoZXZ0LnR5cGUgPT09ICd0b3VjaHN0YXJ0Jykge1xuICAgICAgaW5pdGlhbFRvdWNoU3RhcnRYID0gdG91Y2hlc1swXS5jbGllbnRYO1xuICAgICAgaW5pdGlhbFRvdWNoU3RhcnRZID0gdG91Y2hlc1swXS5jbGllbnRZO1xuICAgICAgcmV0dXJuIHRydWU7IC8vIGRvbid0IGJsb2NrIGV2ZW50IGRlZmF1bHRcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gcHJldmVudCBzY3JvbGwgZnJvbSB0cmlnZ2VyaW5nIGV2ZW50XG4gICAgICBpZiAoZXZ0LnR5cGUgPT09ICd0b3VjaGVuZCcpIHtcbiAgICAgICAgdmFyIGN1cnJlbnRYID0gdG91Y2hlc1swXS5jbGllbnRYO1xuICAgICAgICB2YXIgY3VycmVudFkgPSB0b3VjaGVzWzBdLmNsaWVudFk7XG4gICAgICAgIGlmICgoTWF0aC5hYnMoY3VycmVudFggLSBpbml0aWFsVG91Y2hTdGFydFgpID4gMjApIHx8XG4gICAgICAgICAgKE1hdGguYWJzKGN1cnJlbnRZIC0gaW5pdGlhbFRvdWNoU3RhcnRZKSA+IDIwKSkge1xuICAgICAgICAgIC8vIFN3aXBlIGRldGVjdGVkXG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gdG91Y2ggd2FzIGEgJ3RhcCcgc28gcHJldmVudCBwcm9wb2dhdGlvbiBhbmQgcHJldmVudFxuICAgICAgICAvLyBkZXZpY2UgZm9sbG93LXVwIGFjdGlvbnMgKGNsaWNrLCBtb3VzZXVwLCBtb3VzZWRvd24sIGV0Yy4pXG4gICAgICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgaWYgKGV2dC5jYW5jZWxhYmxlKSB7XG4gICAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVJbnZpc2libGVGaWxlSW5wdXRXcmFwID0gZnVuY3Rpb24oKSB7XG4gIHZhciBmaWxlRWxlbSA9IGNyZWF0ZUZpbGVJbnB1dCgpXG4gIHZhciBsYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xhYmVsJyk7XG4gIGxhYmVsLmlubmVySFRNTCA9ICd1cGxvYWQnXG4gIGxhYmVsLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJ1xuICBsYWJlbC5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSdcbiAgbGFiZWwuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJ1xuICBsYWJlbC5zdHlsZS53aWR0aCA9ICcwcHgnXG4gIGxhYmVsLnN0eWxlLmhlaWdodCA9ICcwcHgnXG4gIGxhYmVsLnN0eWxlLmJvcmRlciA9ICdub25lJ1xuICBsYWJlbC5zdHlsZS5tYXJnaW4gPSAnMHB4J1xuICBsYWJlbC5zdHlsZS5wYWRkaW5nID0gJzBweCdcbiAgbGFiZWwuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsJy0xJylcbiAgXG4gIC8vYmluZEF0dHJUb0ZpbGVJbnB1dChmaWxlRWxlbSwgbGFiZWwpO1xuICAvL2dlbmVyYXRlZEVsZW1zLnB1c2goe2VsOiBlbGVtLCByZWY6IGxhYmVsfSk7XG5cbiAgbGFiZWwuYXBwZW5kQ2hpbGQoIGZpbGVFbGVtIClcbiAgLy9kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKCBsYWJlbCApO1xuXG4gIHJldHVybiBsYWJlbDtcbn1cblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUZpbGVJbnB1dCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgZmlsZUVsZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuICBmaWxlRWxlbS50eXBlPVwiZmlsZVwiXG4gIHJldHVybiBmaWxlRWxlbTtcbn1cbiJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jLWV2ZW50LWhlbHAuZnVuY3Rpb25zLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uL3NyYy8iLCJzb3VyY2VzIjpbImZpbGUtdXBsb2FkL2RvYy1ldmVudC1oZWxwLmZ1bmN0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsVUFBUyxHQUFPO0lBQ3pDLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDbkMsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxLQUFLLE9BQU8sSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxLQUFLLE1BQU0sQ0FBQztBQUNwRixDQUFDLENBQUE7QUFFRCxJQUFJLGtCQUFrQixHQUFHLENBQUMsQ0FBQztBQUMzQixJQUFJLGtCQUFrQixHQUFHLENBQUMsQ0FBQztBQUMzQixNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsVUFBUyxHQUFPO0lBQ3pDLElBQUksT0FBTyxHQUFHLEdBQUcsQ0FBQyxjQUFjLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxJQUFJLEdBQUcsQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDNUYsSUFBSSxPQUFPLEVBQUU7UUFDWCxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssWUFBWSxFQUFFO1lBQzdCLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDeEMsa0JBQWtCLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUN4QyxPQUFPLElBQUksQ0FBQyxDQUFDLDRCQUE0QjtTQUMxQzthQUFNO1lBQ0wsdUNBQXVDO1lBQ3ZDLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxVQUFVLEVBQUU7Z0JBQzNCLElBQUksUUFBUSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7Z0JBQ2xDLElBQUksUUFBUSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsR0FBRyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDaEQsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsR0FBRyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFO29CQUNoRCxnREFBZ0Q7b0JBQ2hELGdEQUFnRDtvQkFDaEQseUJBQXlCO29CQUN6Qix3QkFBd0I7b0JBQ3hCLDBCQUEwQjtvQkFDMUIsSUFBSTtvQkFDSixnRUFBZ0U7b0JBQ2hFLGdCQUFnQjtvQkFDaEIsaUJBQWlCO29CQUNqQixPQUFPLElBQUksQ0FBQztpQkFDYjtnQkFDRCxlQUFlO2dCQUNmLEdBQUcsQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDdEIsSUFBSSxHQUFHLENBQUMsVUFBVSxFQUFFO29CQUNsQixHQUFHLENBQUMsY0FBYyxFQUFFLENBQUM7aUJBQ3RCO2FBQ0Y7WUFDRCxxRUFBcUU7WUFDckUsZUFBZTtZQUNmLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7S0FDRjtJQUNELE9BQU8sS0FBSyxDQUFBO0FBQ2QsQ0FBQyxDQUFBO0FBRUQsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBQUc7SUFDMUMsSUFBSSxRQUFRLEdBQUcsZUFBZSxFQUFFLENBQUE7SUFDaEMsSUFBSSxLQUFLLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM1QyxLQUFLLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQTtJQUMxQixLQUFLLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUE7SUFDakMsS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFBO0lBQ2pDLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQTtJQUMvQixLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUE7SUFDekIsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFBO0lBQzFCLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQTtJQUMzQixLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUE7SUFDMUIsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFBO0lBQzNCLEtBQUssQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFDLElBQUksQ0FBQyxDQUFBO0lBRW5DLHVDQUF1QztJQUN2Qyw4Q0FBOEM7SUFFOUMsS0FBSyxDQUFDLFdBQVcsQ0FBRSxRQUFRLENBQUUsQ0FBQTtJQUM3QixxQ0FBcUM7SUFFckMsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDLENBQUE7QUFFRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUc7SUFDN0IsSUFBSSxRQUFRLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMvQyxRQUFRLENBQUMsSUFBSSxHQUFDLE1BQU0sQ0FBQTtJQUNwQixPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgaXNGaWxlSW5wdXQgPSBmdW5jdGlvbihlbG06YW55KXtcbiAgY29uc3QgdHkgPSBlbG0uZ2V0QXR0cmlidXRlKCd0eXBlJylcbiAgcmV0dXJuIGVsbS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdpbnB1dCcgJiYgdHkgJiYgdHkudG9Mb3dlckNhc2UoKSA9PT0gJ2ZpbGUnO1xufVxuXG5sZXQgaW5pdGlhbFRvdWNoU3RhcnRZID0gMDtcbmxldCBpbml0aWFsVG91Y2hTdGFydFggPSAwO1xuZXhwb3J0IGNvbnN0IGRldGVjdFN3aXBlID0gZnVuY3Rpb24oZXZ0OmFueSk6Ym9vbGVhbiB7XG4gIHZhciB0b3VjaGVzID0gZXZ0LmNoYW5nZWRUb3VjaGVzIHx8IChldnQub3JpZ2luYWxFdmVudCAmJiBldnQub3JpZ2luYWxFdmVudC5jaGFuZ2VkVG91Y2hlcyk7XG4gIGlmICh0b3VjaGVzKSB7XG4gICAgaWYgKGV2dC50eXBlID09PSAndG91Y2hzdGFydCcpIHtcbiAgICAgIGluaXRpYWxUb3VjaFN0YXJ0WCA9IHRvdWNoZXNbMF0uY2xpZW50WDtcbiAgICAgIGluaXRpYWxUb3VjaFN0YXJ0WSA9IHRvdWNoZXNbMF0uY2xpZW50WTtcbiAgICAgIHJldHVybiB0cnVlOyAvLyBkb24ndCBibG9jayBldmVudCBkZWZhdWx0XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHByZXZlbnQgc2Nyb2xsIGZyb20gdHJpZ2dlcmluZyBldmVudFxuICAgICAgaWYgKGV2dC50eXBlID09PSAndG91Y2hlbmQnKSB7XG4gICAgICAgIHZhciBjdXJyZW50WCA9IHRvdWNoZXNbMF0uY2xpZW50WDtcbiAgICAgICAgdmFyIGN1cnJlbnRZID0gdG91Y2hlc1swXS5jbGllbnRZO1xuICAgICAgICBpZiAoKE1hdGguYWJzKGN1cnJlbnRYIC0gaW5pdGlhbFRvdWNoU3RhcnRYKSA+IDIwKSB8fFxuICAgICAgICAgIChNYXRoLmFicyhjdXJyZW50WSAtIGluaXRpYWxUb3VjaFN0YXJ0WSkgPiAyMCkpIHtcbiAgICAgICAgICAvLyAyOUpBTjIwMjEgUmVtb3ZlZC9tb3ZlZCB0byBpbnZlcnNlIGNvbmRpdGlvbi5cbiAgICAgICAgICAvLyAgICAgICAgICAgU2hvdWxkIGJlIHJ1biBkdXJpbmcgdGFwIGRldGVjdGlvbi5cbiAgICAgICAgICAvLyBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgLy8gaWYgKGV2dC5jYW5jZWxhYmxlKSB7XG4gICAgICAgICAgLy8gICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAvLyB9XG4gICAgICAgICAgLy8gMjlKQU4yMDIxIFN3aXBlIGRldGVjdGVkIHNob3VsZCByZXR1cm4gdHJ1ZSBpbnN0ZWFkIG9mIGZhbHNlLlxuICAgICAgICAgIC8vIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAvLyBTd2lwZSBkZXRlY3RlZFxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIHRhcCBkZXRlY3RlZFxuICAgICAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGlmIChldnQuY2FuY2VsYWJsZSkge1xuICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyAyOUpBTjIwMjEgTm9uLXN3aXBlIGNvbmRpdGlvbiBzaG91bGQgcmV0dXJuIGZhbHNlIGluc3RlYWQgb2YgdHJ1ZS5cbiAgICAgIC8vIHJldHVybiB0cnVlO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUludmlzaWJsZUZpbGVJbnB1dFdyYXAgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGZpbGVFbGVtID0gY3JlYXRlRmlsZUlucHV0KClcbiAgdmFyIGxhYmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGFiZWwnKTtcbiAgbGFiZWwuaW5uZXJIVE1MID0gJ3VwbG9hZCdcbiAgbGFiZWwuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nXG4gIGxhYmVsLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJ1xuICBsYWJlbC5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nXG4gIGxhYmVsLnN0eWxlLndpZHRoID0gJzBweCdcbiAgbGFiZWwuc3R5bGUuaGVpZ2h0ID0gJzBweCdcbiAgbGFiZWwuc3R5bGUuYm9yZGVyID0gJ25vbmUnXG4gIGxhYmVsLnN0eWxlLm1hcmdpbiA9ICcwcHgnXG4gIGxhYmVsLnN0eWxlLnBhZGRpbmcgPSAnMHB4J1xuICBsYWJlbC5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywnLTEnKVxuICBcbiAgLy9iaW5kQXR0clRvRmlsZUlucHV0KGZpbGVFbGVtLCBsYWJlbCk7XG4gIC8vZ2VuZXJhdGVkRWxlbXMucHVzaCh7ZWw6IGVsZW0sIHJlZjogbGFiZWx9KTtcblxuICBsYWJlbC5hcHBlbmRDaGlsZCggZmlsZUVsZW0gKVxuICAvL2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoIGxhYmVsICk7XG5cbiAgcmV0dXJuIGxhYmVsO1xufVxuXG5leHBvcnQgY29uc3QgY3JlYXRlRmlsZUlucHV0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBmaWxlRWxlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XG4gIGZpbGVFbGVtLnR5cGU9XCJmaWxlXCJcbiAgcmV0dXJuIGZpbGVFbGVtO1xufVxuIl19 \ No newline at end of file diff --git a/dist/fesm2015/angular-file.js b/dist/fesm2015/angular-file.js index 50932688..c767b5d2 100644 --- a/dist/fesm2015/angular-file.js +++ b/dist/fesm2015/angular-file.js @@ -22,16 +22,25 @@ const detectSwipe = function (evt) { var currentY = touches[0].clientY; if ((Math.abs(currentX - initialTouchStartX) > 20) || (Math.abs(currentY - initialTouchStartY) > 20)) { + // 29JAN2021 Removed/moved to inverse condition. + // Should be run during tap detection. + // evt.stopPropagation(); + // if (evt.cancelable) { + // evt.preventDefault(); + // } + // 29JAN2021 Swipe detected should return true instead of false. + // return false; // Swipe detected return true; } - // touch was a 'tap' so prevent propogation and prevent - // device follow-up actions (click, mouseup, mousedown, etc.) + // tap detected evt.stopPropagation(); if (evt.cancelable) { evt.preventDefault(); } } + // 29JAN2021 Non-swipe condition should return false instead of true. + // return true; return false; } } diff --git a/dist/fesm2015/angular-file.js.map b/dist/fesm2015/angular-file.js.map index bff1dcde..431305b4 100644 --- a/dist/fesm2015/angular-file.js.map +++ b/dist/fesm2015/angular-file.js.map @@ -1 +1 @@ -{"version":3,"file":"angular-file.js","sources":["../src/file-upload/doc-event-help.functions.ts","../src/file-upload/fileTools.ts","../src/file-upload/ngf.directive.ts","../src/file-upload/ngfSelect.directive.ts","../src/file-upload/ngfDrop.directive.ts","../src/file-upload/ngfBackground.directive.ts","../src/file-upload/ngfUploadStatus.directive.ts","../src/file-upload/ngfFormData.directive.ts","../src/file-upload/ngfSrc.directive.ts","../src/file-upload/ngf.module.ts","../../src/public-api.ts","../../src/angular-file.ts"],"sourcesContent":["export const isFileInput = function(elm:any){\n const ty = elm.getAttribute('type')\n return elm.tagName.toLowerCase() === 'input' && ty && ty.toLowerCase() === 'file';\n}\n\nlet initialTouchStartY = 0;\nlet initialTouchStartX = 0;\nexport const detectSwipe = function(evt:any):boolean {\n var touches = evt.changedTouches || (evt.originalEvent && evt.originalEvent.changedTouches);\n if (touches) {\n if (evt.type === 'touchstart') {\n initialTouchStartX = touches[0].clientX;\n initialTouchStartY = touches[0].clientY;\n return true; // don't block event default\n } else {\n // prevent scroll from triggering event\n if (evt.type === 'touchend') {\n var currentX = touches[0].clientX;\n var currentY = touches[0].clientY;\n if ((Math.abs(currentX - initialTouchStartX) > 20) ||\n (Math.abs(currentY - initialTouchStartY) > 20)) {\n // Swipe detected\n return true;\n }\n // touch was a 'tap' so prevent propogation and prevent\n // device follow-up actions (click, mouseup, mousedown, etc.)\n evt.stopPropagation();\n if (evt.cancelable) {\n evt.preventDefault();\n }\n }\n return false;\n }\n }\n return false\n}\n\nexport const createInvisibleFileInputWrap = function() {\n var fileElem = createFileInput()\n var label = document.createElement('label');\n label.innerHTML = 'upload'\n label.style.visibility = 'hidden'\n label.style.position = 'absolute'\n label.style.overflow = 'hidden'\n label.style.width = '0px'\n label.style.height = '0px'\n label.style.border = 'none'\n label.style.margin = '0px'\n label.style.padding = '0px'\n label.setAttribute('tabindex','-1')\n \n //bindAttrToFileInput(fileElem, label);\n //generatedElems.push({el: elem, ref: label});\n\n label.appendChild( fileElem )\n //document.body.appendChild( label );\n\n return label;\n}\n\nexport const createFileInput = function() {\n var fileElem = document.createElement('input');\n fileElem.type=\"file\"\n return fileElem;\n}\n","export function getWindow():any{return window}\n\nexport function acceptType(accept:string, type:string, name?:string):boolean { \n if( !accept ){\n return true\n }\n\n const defs = accept.split(',')\n let regx:RegExp\n let acceptRegString:string\n\n for(let x=defs.length-1; x >= 0; --x){\n //Escapes dots in mimetype \n acceptRegString = defs[x]\n //trim\n acceptRegString = acceptRegString.replace(/(^\\s+|\\s+$)/g,'')\n //Escapes stars in mimetype \n acceptRegString = acceptRegString.replace(/\\*/g,'.*')\n //let acceptReg = '^((' + acceptRegString\n //acceptReg = acceptReg.replace(/,/g,')|(') + '))$'\n \n //try by mime\n regx = new RegExp(acceptRegString, 'gi')\n if( type.search(regx)>=0 ){\n return true\n }\n\n //try by ext\n if( acceptRegString.substring(0, 1)=='.' ){ \n acceptRegString = '\\\\'+ acceptRegString//.substring(1, acceptRegString.length-1)//remove dot at front\n regx = new RegExp(acceptRegString+'$', 'i')\n if( (name||type).search(regx)>=0 ){\n return true\n }\n }\n }\n return false\n}\n\nexport interface InvalidFileItem{\n file:File\n type:string\n}\n\nexport function arrayBufferToBase64(buffer:any) {\n var binary = '';\n var bytes = new Uint8Array(buffer);\n var len = bytes.byteLength;\n for (var i = 0; i < len; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return window.btoa(binary);\n}\n\nexport function dataUrltoBlob(\n dataurl:string,\n name:string,\n origSize?:any\n):Blob{\n var arr = dataurl.split(',');\n var mimeMatch = arr[0].match(/:(.*?);/)\n var mime:string = mimeMatch ? mimeMatch[1] : 'text/plain'\n var bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);\n while (n--) {\n u8arr[n] = bstr.charCodeAt(n);\n }\n var blob = new window.Blob([u8arr], {type: mime});\n blob[\"name\"] = name;\n blob[\"$ngfOrigSize\"] = origSize;\n return blob;\n}\n\nexport interface orientationMeta{\n orientation: number\n fixedArrayBuffer?:any[]\n}\n\nexport function applyTransform(\n ctx:CanvasRenderingContext2D,\n orientation:number,\n width:number,\n height:number\n) {\n switch (orientation) {\n case 2:\n return ctx.transform(-1, 0, 0, 1, width, 0);\n case 3:\n return ctx.transform(-1, 0, 0, -1, width, height);\n case 4:\n return ctx.transform(1, 0, 0, -1, 0, height);\n case 5:\n return ctx.transform(0, 1, 1, 0, 0, 0);\n case 6:\n return ctx.transform(0, 1, -1, 0, height, 0);\n case 7:\n return ctx.transform(0, -1, -1, 0, height, width);\n case 8:\n return ctx.transform(0, -1, 1, 0, 0, width);\n }\n}\n\nexport function fixFileOrientationByMeta(\n file:File, result:orientationMeta\n):Promise{\n return dataUrl(file, true)\n .then(url=>{\n var canvas = document.createElement('canvas');\n var img = document.createElement('img');\n\n return >new Promise(function(res,rej){\n img.onload = function () {\n try {\n canvas.width = result.orientation > 4 ? img.height : img.width\n canvas.height = result.orientation > 4 ? img.width : img.height\n var ctx = canvas.getContext('2d')\n applyTransform(ctx, result.orientation, img.width, img.height)\n ctx.drawImage(img, 0, 0);\n var dataUrl = canvas.toDataURL(file.type || 'image/WebP', 0.934)\n const base = arrayBufferToBase64(result.fixedArrayBuffer)\n dataUrl = restoreExif(base, dataUrl)\n var blob = dataUrltoBlob(dataUrl, file.name)\n const newFile = blobToFile(blob, file.name);\n res(newFile);\n } catch (e) {\n rej(e)\n }\n };\n img.onerror = rej;\n img.src = url; \n })\n })\n}\n\nexport function applyExifRotation(\n file:File\n):Promise{\n if (file.type.indexOf('image/jpeg') !== 0) {\n return Promise.resolve(file);\n }\n\n return readOrientation(file)\n .then((result:orientationMeta)=>{\n if (result.orientation < 2 || result.orientation > 8) {\n return file\n }\n \n return fixFileOrientationByMeta(file,result)\n })\n}\n\nexport function readOrientation(\n file:File\n):Promise{\n return new Promise((res,rej)=>{\n var reader = new FileReader();\n var slicedFile = file.slice ? file.slice(0, 64 * 1024) : file;\n reader.readAsArrayBuffer(slicedFile);\n reader.onerror = rej\n reader.onload = function (e:any) {\n var result:orientationMeta = {orientation: 1};\n var view = new DataView( this.result );\n if (view.getUint16(0, false) !== 0xFFD8) return res(result);\n\n var length = view.byteLength,\n offset = 2;\n while (offset < length) {\n var marker = view.getUint16(offset, false);\n offset += 2;\n if (marker === 0xFFE1) {\n if (view.getUint32(offset += 2, false) !== 0x45786966) return res(result);\n\n var little = view.getUint16(offset += 6, false) === 0x4949;\n offset += view.getUint32(offset + 4, little);\n var tags = view.getUint16(offset, little);\n offset += 2;\n for (var i = 0; i < tags; i++)\n if (view.getUint16(offset + (i * 12), little) === 0x0112) {\n var orientation = view.getUint16(offset + (i * 12) + 8, little);\n if (orientation >= 2 && orientation <= 8) {\n view.setUint16(offset + (i * 12) + 8, 1, little);\n result.fixedArrayBuffer = e.target.result;\n }\n result.orientation = orientation;\n return res(result);\n }\n } else if ((marker & 0xFF00) !== 0xFF00) break;\n else offset += view.getUint16(offset, false);\n }\n return res(result);\n };\n })\n}\n\n/** converts file-input file into base64 dataUri */\nexport function dataUrl(\n file:any,\n disallowObjectUrl?:any\n):Promise{\n if (!file) return Promise.resolve(file)\n \n if ((disallowObjectUrl && file.$ngfDataUrl != null) || (!disallowObjectUrl && file.$ngfBlobUrl != null)) {\n return Promise.resolve( disallowObjectUrl ? file.$ngfDataUrl : file.$ngfBlobUrl )\n }\n\n var p = disallowObjectUrl ? file.$$ngfDataUrlPromise : file.$$ngfBlobUrlPromise;\n if (p) return p;\n\n const win = getWindow()\n let deferred:Promise\n if (win.FileReader && file &&\n (!win.FileAPI || navigator.userAgent.indexOf('MSIE 8') === -1 || file.size < 20000) &&\n (!win.FileAPI || navigator.userAgent.indexOf('MSIE 9') === -1 || file.size < 4000000)) {\n //prefer URL.createObjectURL for handling refrences to files of all sizes\n //since it doesn´t build a large string in memory\n var URL = win.URL || win.webkitURL;\n if (FileReader) {\n deferred = new Promise((res,rej)=>{\n var fileReader = new FileReader();\n fileReader.onload = function (event:any) {\n file.$ngfDataUrl = event.target.result;\n delete file.$ngfDataUrl;\n res( event.target.result )\n };\n fileReader.onerror = function (e) {\n file.$ngfDataUrl = '';\n rej(e)\n };\n fileReader.readAsDataURL(file);\n })\n } else {\n var url:any;\n try {\n url = URL.createObjectURL(file);\n } catch (e) {\n return Promise.reject(e);\n }\n \n deferred = Promise.resolve( url )\n file.$ngfBlobUrl = url;\n }\n } else {\n file[disallowObjectUrl ? '$ngfDataUrl' : '$ngfBlobUrl'] = '';\n return Promise.reject( new Error('Browser does not support window.FileReader, window.FileReader, or window.FileAPI') )//deferred.reject();\n }\n\n if (disallowObjectUrl) {\n p = file.$$ngfDataUrlPromise = deferred;\n } else {\n p = file.$$ngfBlobUrlPromise = deferred;\n }\n\n p = p.then((x:any)=>{\n delete file[disallowObjectUrl ? '$$ngfDataUrlPromise' : '$$ngfBlobUrlPromise'];\n return x\n })\n\n return p;\n}\n\nexport function restoreExif(orig:any, resized:any) {\n var ExifRestorer:any = {\n KEY_STR:'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='\n }\n\n ExifRestorer.encode64 = function (input:any) {\n var output = '',\n chr1, chr2, chr3:any = '',\n enc1, enc2, enc3, enc4:any = '',\n i = 0;\n\n do {\n chr1 = input[i++];\n chr2 = input[i++];\n chr3 = input[i++];\n\n enc1 = chr1 >> 2;\n enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);\n enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);\n enc4 = chr3 & 63;\n\n if (isNaN(chr2)) {\n enc3 = enc4 = 64;\n } else if (isNaN(chr3)) {\n enc4 = 64;\n }\n\n output = output +\n this.KEY_STR.charAt(enc1) +\n this.KEY_STR.charAt(enc2) +\n this.KEY_STR.charAt(enc3) +\n this.KEY_STR.charAt(enc4);\n chr1 = chr2 = chr3 = '';\n enc1 = enc2 = enc3 = enc4 = '';\n } while (i < input.length);\n\n return output;\n };\n\n ExifRestorer.restore = function (origFileBase64:any, resizedFileBase64:any) {\n if (origFileBase64.match('data:image/jpeg;base64,')) {\n origFileBase64 = origFileBase64.replace('data:image/jpeg;base64,', '');\n }\n\n var rawImage:number[] = this.decode64(origFileBase64);\n var segments = this.slice2Segments(rawImage);\n\n var image = this.exifManipulation(resizedFileBase64, segments);\n\n return 'data:image/jpeg;base64,' + this.encode64(image);\n };\n\n\n ExifRestorer.exifManipulation = function (resizedFileBase64:any, segments:any) {\n var exifArray = this.getExifArray(segments),\n newImageArray = this.insertExif(resizedFileBase64, exifArray);\n return new Uint8Array(newImageArray);\n };\n\n ExifRestorer.getExifArray = function (segments:number[][]) {\n var seg;\n for (var x = 0; x < segments.length; x++) {\n seg = segments[x];\n if (seg[0] === 255 && seg[1] === 225) //(ff e1)\n {\n return seg;\n }\n }\n return [];\n };\n\n\n ExifRestorer.insertExif = function (resizedFileBase64:any, exifArray:any) {\n var imageData = resizedFileBase64.replace('data:image/jpeg;base64,', ''),\n buf = this.decode64(imageData),\n separatePoint = buf.indexOf(255, 3),\n mae = buf.slice(0, separatePoint),\n ato = buf.slice(separatePoint),\n array = mae;\n\n array = array.concat(exifArray);\n array = array.concat(ato);\n return array;\n };\n\n\n ExifRestorer.slice2Segments = function(\n rawImageArray:number[]\n ) {\n var head:number = 0,\n segments:number[][] = [];\n\n while (1) {\n if (rawImageArray[head] === 255 && rawImageArray[head + 1] === 218) {\n break;\n }\n if (rawImageArray[head] === 255 && rawImageArray[head + 1] === 216) {\n head += 2;\n }\n else {\n var length = rawImageArray[head + 2] * 256 + rawImageArray[head + 3]\n var endPoint = head + length + 2\n var seg:number[] = rawImageArray.slice(head, endPoint)\n segments.push(seg);\n head = endPoint;\n }\n if (head > rawImageArray.length) {\n break;\n }\n }\n\n return segments;\n };\n\n\n ExifRestorer.decode64 = function (\n input:any\n ):number[]{\n var chr1, chr2, chr3:any = '',\n enc1, enc2, enc3, enc4:any = '',\n i = 0,\n buf:number[] = [];\n\n // remove all characters that are not A-Z, a-z, 0-9, +, /, or =\n var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n if (base64test.exec(input)) {\n console.log('There were invalid base64 characters in the input text.');\n }\n input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, '');\n\n do {\n enc1 = this.KEY_STR.indexOf(input.charAt(i++));\n enc2 = this.KEY_STR.indexOf(input.charAt(i++));\n enc3 = this.KEY_STR.indexOf(input.charAt(i++));\n enc4 = this.KEY_STR.indexOf(input.charAt(i++));\n\n chr1 = (enc1 << 2) | (enc2 >> 4);\n chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\n chr3 = ((enc3 & 3) << 6) | enc4;\n\n buf.push(chr1);\n\n if (enc3 !== 64) {\n buf.push(chr2);\n }\n if (enc4 !== 64) {\n buf.push(chr3);\n }\n\n chr1 = chr2 = chr3 = '';\n enc1 = enc2 = enc3 = enc4 = '';\n\n } while (i < input.length);\n\n return buf;\n };\n\n return ExifRestorer.restore(orig, resized); //<= EXIF\n};\n\nfunction blobToFile(theBlob: Blob, fileName:string): File {\n var b: any = theBlob;\n //A Blob() is almost a File() - it's just missing the two properties below which we will add\n b.lastModifiedDate = new Date();\n b.name = fileName;\n\n //Cast to a File() type\n return theBlob;\n}\n","import { Directive, EventEmitter, ElementRef, Input, Output, HostListener, ChangeDetectionStrategy } from '@angular/core';\nimport { createInvisibleFileInputWrap, isFileInput, detectSwipe } from \"./doc-event-help.functions\"\nimport {\n acceptType, InvalidFileItem,\n applyExifRotation, dataUrl\n} from \"./fileTools\"\n\nexport interface dragMeta{\n type:string\n kind:string\n}\n\n/** A master base set of logic intended to support file select/drag/drop operations\n NOTE: Use ngfDrop for full drag/drop. Use ngfSelect for selecting\n*/\n@Directive({\n selector: \"[ngf]\",\n exportAs:\"ngf\"\n})\nexport class ngf {\n fileElm:any\n filters:{name:string, fn:(file:File)=>boolean}[] = []\n lastFileCount:number=0\n\n @Input() multiple !:string\n @Input() accept !:string\n @Input() maxSize !:number\n //@Input() forceFilename:string\n //@Input() forcePostname:string\n @Input() ngfFixOrientation:boolean = true\n\n @Input() fileDropDisabled:boolean = false\n @Input() selectable: boolean | string = false\n @Output('init') directiveInit:EventEmitter = new EventEmitter()\n\n @Input() lastInvalids:InvalidFileItem[] = []\n @Output() lastInvalidsChange:EventEmitter<{file:File,type:string}[]> = new EventEmitter()\n\n @Input() lastBaseUrl !: string//base64 last file uploaded url\n @Output() lastBaseUrlChange:EventEmitter = new EventEmitter()\n\n @Input() file !: File//last file uploaded\n @Output() fileChange:EventEmitter = new EventEmitter()\n\n @Input() files:File[] = []\n @Output() filesChange:EventEmitter = new EventEmitter();\n\n @Input() capturePaste: boolean; // window paste file watching (empty string turns on)\n pasteCapturer !: (e: Event) => void;\n\n constructor(public element:ElementRef){\n this.initFilters()\n }\n\n initFilters(){\n // the order is important\n this.filters.push({name: 'accept', fn: this._acceptFilter})\n this.filters.push({name: 'fileSize', fn: this._fileSizeFilter})\n\n //this.filters.push({name: 'fileType', fn: this._fileTypeFilter})\n //this.filters.push({name: 'queueLimit', fn: this._queueLimitFilter})\n //this.filters.push({name: 'mimeType', fn: this._mimeTypeFilter})\n }\n\n ngOnDestroy(){\n delete this.fileElm//faster memory release of dom element\n this.destroyPasteListener();\n }\n\n ngOnInit(){\n const selectable = (this.selectable || this.selectable==='') && !['false', 'null', '0'].includes(this.selectable as string);\n if( selectable ){\n this.enableSelecting()\n }\n\n if( this.multiple ){\n this.paramFileElm().setAttribute('multiple', this.multiple)\n }\n\n this.evalCapturePaste();\n\n //create reference to this class with one cycle delay to avoid ExpressionChangedAfterItHasBeenCheckedError\n setTimeout(()=>{\n this.directiveInit.emit(this)\n }, 0)\n }\n\n ngOnChanges( changes ){\n if( changes.accept ){\n this.paramFileElm().setAttribute('accept', changes.accept.currentValue || '*')\n }\n\n if (changes.capturePaste) {\n this.evalCapturePaste();\n }\n }\n\n evalCapturePaste() {\n const isActive = this.capturePaste || (this.capturePaste as any)==='' || ['false', '0', 'null'].includes(this.capturePaste as any);\n\n if (isActive) {\n if (this.pasteCapturer) {\n return; // already listening\n }\n\n this.pasteCapturer = (e: Event) => {\n const clip = (e as any).clipboardData;\n if (clip && clip.files && clip.files.length) {\n this.handleFiles(clip.files);\n e.preventDefault();\n }\n }\n\n window.addEventListener('paste', this.pasteCapturer);\n\n return;\n }\n\n this.destroyPasteListener();\n }\n\n destroyPasteListener() {\n if (this.pasteCapturer) {\n window.removeEventListener('paste', this.pasteCapturer);\n delete this.pasteCapturer;\n }\n }\n\n paramFileElm(){\n if( this.fileElm )return this.fileElm//already defined\n\n //elm is a file input\n const isFile = isFileInput( this.element.nativeElement )\n if(isFile)return this.fileElm = this.element.nativeElement\n\n //create foo file input\n const label = createInvisibleFileInputWrap()\n this.fileElm = label.getElementsByTagName('input')[0]\n this.fileElm.addEventListener('change', this.changeFn.bind(this));\n this.element.nativeElement.appendChild( label )\n return this.fileElm\n }\n\n enableSelecting(){\n let elm = this.element.nativeElement\n\n if( isFileInput(elm) ){\n const bindedHandler = _ev=>this.beforeSelect()\n elm.addEventListener('click', bindedHandler)\n elm.addEventListener('touchstart', bindedHandler)\n return\n }\n\n const bindedHandler = ev=>this.clickHandler(ev)\n elm.addEventListener('click', bindedHandler)\n elm.addEventListener('touchstart', bindedHandler)\n elm.addEventListener('touchend', bindedHandler)\n }\n\n getValidFiles( files:File[] ):File[]{\n const rtn:File[] = []\n for(let x=files.length-1; x >= 0; --x){\n if( this.isFileValid(files[x]) ){\n rtn.push( files[x] )\n }\n }\n return rtn\n }\n\n getInvalidFiles(files:File[]):InvalidFileItem[]{\n const rtn:InvalidFileItem[] = []\n for(let x=files.length-1; x >= 0; --x){\n let failReason = this.getFileFilterFailName(files[x])\n if( failReason ){\n rtn.push({\n file : files[x],\n type : failReason\n })\n }\n }\n return rtn\n }\n\n // Primary handler of files coming in\n handleFiles(files:File[]){\n const valids = this.getValidFiles(files)\n\n if(files.length!=valids.length){\n this.lastInvalids = this.getInvalidFiles(files)\n }else{\n delete this.lastInvalids\n }\n\n this.lastInvalidsChange.emit(this.lastInvalids)\n\n if( valids.length ){\n if( this.ngfFixOrientation ){\n this.applyExifRotations(valids)\n .then( fixedFiles=>this.que(fixedFiles) )\n }else{\n this.que(valids)\n }\n }\n\n if (this.isEmptyAfterSelection()) {\n this.element.nativeElement.value = ''\n }\n }\n\n que( files:File[] ){\n this.files = this.files || []\n Array.prototype.push.apply(this.files, files)\n\n //below break memory ref and doesnt act like a que\n //this.files = files//causes memory change which triggers bindings like \n\n this.filesChange.emit( this.files )\n\n if(files.length){\n this.fileChange.emit( this.file=files[0] )\n\n if(this.lastBaseUrlChange.observers.length){\n dataUrl( files[0] )\n .then( url=>this.lastBaseUrlChange.emit(url) )\n }\n }\n\n //will be checked for input value clearing\n this.lastFileCount = this.files.length\n }\n\n /** called when input has files */\n changeFn(event:any) {\n var fileList = event.__files_ || (event.target && event.target.files)\n\n if (!fileList) return;\n\n this.stopEvent(event);\n this.handleFiles(fileList)\n }\n\n clickHandler(evt:any){\n const elm = this.element.nativeElement\n if (elm.getAttribute('disabled') || this.fileDropDisabled){\n return false;\n }\n\n var r = detectSwipe(evt);\n // prevent the click if it is a swipe\n if ( r!==false ) return r;\n\n const fileElm = this.paramFileElm()\n fileElm.click()\n //fileElm.dispatchEvent( new Event('click') );\n this.beforeSelect()\n\n return false;\n }\n\n beforeSelect(){\n if( this.files && this.lastFileCount===this.files.length )return\n\n //if no files in array, be sure browser doesnt prevent reselect of same file (see github issue 27)\n this.fileElm.value = null\n }\n\n isEmptyAfterSelection():boolean {\n return !!this.element.nativeElement.attributes.multiple;\n }\n\n eventToTransfer(event:any):any {\n if(event.dataTransfer)return event.dataTransfer\n return event.originalEvent ? event.originalEvent.dataTransfer : null\n }\n\n stopEvent(event:any):any {\n event.preventDefault();\n event.stopPropagation();\n }\n\n transferHasFiles(transfer:any):any {\n if (!transfer.types) {\n return false;\n }\n\n if (transfer.types.indexOf) {\n return transfer.types.indexOf('Files') !== -1;\n } else if (transfer.types.contains) {\n return transfer.types.contains('Files');\n } else {\n return false;\n }\n }\n\n eventToFiles(event:Event){\n const transfer = this.eventToTransfer(event);\n if( transfer ){\n if(transfer.files && transfer.files.length){\n return transfer.files\n }\n if(transfer.items && transfer.items.length){\n return transfer.items\n }\n }\n return []\n }\n\n applyExifRotations(\n files:File[]\n ):Promise{\n const mapper = (\n file:File,index:number\n ):Promise=>{\n return applyExifRotation(file)\n .then( fixedFile=>files.splice(index, 1, fixedFile) )\n }\n\n const proms:Promise[] = []\n for(let x=files.length-1; x >= 0; --x){\n proms[x] = mapper( files[x], x )\n }\n return Promise.all( proms ).then( ()=>files )\n }\n\n @HostListener('change', ['$event'])\n onChange(event:Event):void {\n let files = this.element.nativeElement.files || this.eventToFiles(event)\n\n if(!files.length)return\n\n this.stopEvent(event);\n this.handleFiles(files)\n }\n\n getFileFilterFailName(\n file:File\n ):string | undefined{\n for(let i = 0; i < this.filters.length; i++){\n if( !this.filters[i].fn.call(this, file) ){\n return this.filters[i].name\n }\n }\n return undefined\n }\n\n isFileValid(file:File):boolean{\n const noFilters = !this.accept && (!this.filters || !this.filters.length)\n if( noFilters ){\n return true//we have no filters so all files are valid\n }\n\n return this.getFileFilterFailName(file) ? false : true\n }\n\n isFilesValid(files:File[]){\n for(let x=files.length-1; x >= 0; --x){\n if( !this.isFileValid(files[x]) ){\n return false\n }\n }\n return true\n }\n\n protected _acceptFilter(item:File):boolean {\n return acceptType(this.accept, item.type, item.name)\n }\n\n protected _fileSizeFilter(item:File):boolean {\n return !(this.maxSize && item.size > this.maxSize);\n }\n\n /** browsers try hard to conceal data about file drags, this tends to undo that */\n filesToWriteableObject( files:File[] ):dragMeta[]{\n const jsonFiles:dragMeta[] = []\n for(let x=0; x < files.length; ++x){\n jsonFiles.push({\n type:files[x].type,\n kind:files[x][\"kind\"]\n })\n }\n return jsonFiles\n }\n}\n","import { Directive, Input } from \"@angular/core\"\nimport { ngf } from \"./ngf.directive\"\n\n@Directive({\n selector: \"[ngfSelect]\",\n exportAs: \"ngfSelect\"\n})\nexport class ngfSelect extends ngf {\n @Input() selectable:any = true\n}","import {\n Directive, EventEmitter,\n HostListener, Input, Output\n} from '@angular/core';\nimport { ngf, dragMeta } from \"./ngf.directive\"\n\n@Directive({\n selector: \"[ngfDrop]\",\n exportAs: \"ngfDrop\"\n})\nexport class ngfDrop extends ngf {\n @Output() fileOver:EventEmitter = new EventEmitter();\n\n @Input() validDrag:boolean = false\n @Output() validDragChange:EventEmitter = new EventEmitter()\n\n @Input() invalidDrag = false\n @Output() invalidDragChange:EventEmitter = new EventEmitter()\n\n @Input() dragFiles !: dragMeta[]\n @Output() dragFilesChange:EventEmitter = new EventEmitter()\n\n @HostListener('drop', ['$event'])\n onDrop(event:Event):void {\n if(this.fileDropDisabled){\n this.stopEvent(event);\n return\n }\n\n this.closeDrags()\n let files = this.eventToFiles(event)\n\n if(!files.length)return\n\n this.stopEvent(event);\n this.handleFiles(files)\n }\n\n handleFiles(files:File[]){\n this.fileOver.emit(false)//turn-off dragover\n super.handleFiles(files)\n }\n\n @HostListener('dragover', ['$event'])\n onDragOver(event:Event):void {\n if(this.fileDropDisabled){\n this.stopEvent(event);\n return\n }\n\n const transfer = this.eventToTransfer(event)\n\n let files = this.eventToFiles(event)\n\n let jsonFiles = this.filesToWriteableObject(files)\n this.dragFilesChange.emit( this.dragFiles=jsonFiles )\n\n if( files.length ){\n this.validDrag = this.isFilesValid(files)\n }else{\n //Safari, IE11 & some browsers do NOT tell you about dragged files until dropped. Always consider a valid drag\n this.validDrag = true\n }\n\n this.validDragChange.emit(this.validDrag)\n\n this.invalidDrag = !this.validDrag\n this.invalidDragChange.emit(this.invalidDrag)\n\n transfer.dropEffect = 'copy'//change cursor and such\n this.stopEvent(event)\n this.fileOver.emit(true)\n }\n\n closeDrags(){\n delete this.validDrag\n this.validDragChange.emit(this.validDrag)\n this.invalidDrag = false\n this.invalidDragChange.emit(this.invalidDrag)\n delete this.dragFiles\n this.dragFilesChange.emit( this.dragFiles )\n }\n\n @HostListener('dragleave', ['$event'])\n onDragLeave(event:Event):any {\n if(this.fileDropDisabled){\n this.stopEvent(event);\n return\n }\n \n this.closeDrags()\n\n if ((this as any).element) {\n if (event.currentTarget === (this as any).element[0]) {\n return;\n }\n }\n\n this.stopEvent(event);\n this.fileOver.emit(false);\n }\n}","import { Directive, ElementRef, Input } from '@angular/core';\nimport { dataUrl } from './fileTools';\n\n@Directive({selector: '[ngfBackground]'})\nexport class ngfBackground {\n @Input('ngfBackground') file:any\n\n constructor(public ElementRef:ElementRef){}\n\n ngOnChanges( _changes:any ){\n dataUrl(this.file)\n .then(src=>{\n const urlString = 'url(\\'' + (src || '') + '\\')'\n this.ElementRef.nativeElement.style.backgroundImage = urlString\n })\n }\n}\n","import { Directive, EventEmitter, Output, Input } from '@angular/core';\n\n@Directive({selector: 'ngfUploadStatus'})\nexport class ngfUploadStatus {\n @Input() percent:number = 0\n @Output() percentChange:EventEmitter = new EventEmitter()\n @Input() httpEvent !: Event\n\n ngOnChanges( changes ){\n if( changes.httpEvent && changes.httpEvent.currentValue ){\n const event = changes.httpEvent.currentValue\n if (event.loaded && event.total) {\n setTimeout(()=>{\n this.percent = Math.round(100 * event.loaded / event.total);\n this.percentChange.emit( this.percent )\n }, 0)\n }\n }\n }\n}","import {\n IterableDiffer,\n IterableDiffers,\n Directive, EventEmitter,\n Output, Input\n} from '@angular/core';\n\n@Directive({selector: 'ngfFormData'})\nexport class ngfFormData {\n @Input() files !: File[]\n @Input() postName:string = \"file\"\n @Input() fileName !: string//force file name\n\n @Input() FormData:FormData = new FormData()\n @Output() FormDataChange:EventEmitter = new EventEmitter()\n\n differ:IterableDiffer<{}>\n\n constructor(IterableDiffers: IterableDiffers){\n this.differ = IterableDiffers.find([]).create()\n }\n\n ngDoCheck(){\n var changes = this.differ.diff( this.files );\n\n if (changes) {\n setTimeout(()=>this.buildFormData(), 0)\n }\n }\n\n buildFormData(){\n const isArray = typeof(this.files)==='object' && this.files.constructor===Array\n\n if( isArray ){\n this.FormData = new FormData()\n const files = this.files || []\n files.forEach(file=>\n this.FormData.append(this.postName, file, this.fileName||file.name)\n )\n this.FormDataChange.emit( this.FormData )\n }else{\n delete this.FormData\n }\n }\n}","import { Directive, ElementRef, Input } from '@angular/core';\nimport { dataUrl } from './fileTools';\n\n@Directive({ selector: '[ngfSrc]' })\nexport class ngfSrc {\n @Input('ngfSrc') file: any\n\n constructor(public ElementRef: ElementRef) { }\n\n ngOnChanges(_changes: any) {\n dataUrl(this.file)\n .then(src=>\n this.ElementRef.nativeElement.src = src\n )\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { ngfBackground } from './ngfBackground.directive';\nimport { ngfDrop } from './ngfDrop.directive';\nimport { ngf } from './ngf.directive';\nimport { ngfSelect } from './ngfSelect.directive';\nimport { ngfUploadStatus } from './ngfUploadStatus.directive';\nimport { ngfFormData } from './ngfFormData.directive';\nimport { ngfSrc } from './ngfSrc.directive';\n//import{ HttpModule } from '@angular/http';\n\nconst declarations = [\n ngfDrop,\n ngfSelect,\n ngfBackground,\n ngfSrc,\n ngfUploadStatus,\n ngfFormData,\n ngf\n]\n\n@NgModule({\n imports: [\n CommonModule\n //,HttpModule\n ],\n declarations: declarations,\n exports: declarations//[HttpModule, ...declarations]\n}) export class ngfModule {}","/*\n * Public API Surface of angular-file\n */\n\nexport * from './file-upload/ngfSelect.directive';\nexport * from './file-upload/ngfDrop.directive';\nexport * from './file-upload/ngf.directive';\nexport * from './file-upload/ngf.module';\nexport { ngfBackground } from './file-upload/ngfBackground.directive';\nexport { ngfSrc } from './file-upload/ngfSrc.directive';\nexport { ngfUploadStatus } from './file-upload/ngfUploadStatus.directive';\nexport { ngfFormData } from './file-upload/ngfFormData.directive';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"angular-file.js","sources":["../src/file-upload/doc-event-help.functions.ts","../src/file-upload/fileTools.ts","../src/file-upload/ngf.directive.ts","../src/file-upload/ngfSelect.directive.ts","../src/file-upload/ngfDrop.directive.ts","../src/file-upload/ngfBackground.directive.ts","../src/file-upload/ngfUploadStatus.directive.ts","../src/file-upload/ngfFormData.directive.ts","../src/file-upload/ngfSrc.directive.ts","../src/file-upload/ngf.module.ts","../../src/public-api.ts","../../src/angular-file.ts"],"sourcesContent":["export const isFileInput = function(elm:any){\n const ty = elm.getAttribute('type')\n return elm.tagName.toLowerCase() === 'input' && ty && ty.toLowerCase() === 'file';\n}\n\nlet initialTouchStartY = 0;\nlet initialTouchStartX = 0;\nexport const detectSwipe = function(evt:any):boolean {\n var touches = evt.changedTouches || (evt.originalEvent && evt.originalEvent.changedTouches);\n if (touches) {\n if (evt.type === 'touchstart') {\n initialTouchStartX = touches[0].clientX;\n initialTouchStartY = touches[0].clientY;\n return true; // don't block event default\n } else {\n // prevent scroll from triggering event\n if (evt.type === 'touchend') {\n var currentX = touches[0].clientX;\n var currentY = touches[0].clientY;\n if ((Math.abs(currentX - initialTouchStartX) > 20) ||\n (Math.abs(currentY - initialTouchStartY) > 20)) {\n // 29JAN2021 Removed/moved to inverse condition.\n // Should be run during tap detection.\n // evt.stopPropagation();\n // if (evt.cancelable) {\n // evt.preventDefault();\n // }\n // 29JAN2021 Swipe detected should return true instead of false.\n // return false;\n // Swipe detected\n return true;\n }\n // tap detected\n evt.stopPropagation();\n if (evt.cancelable) {\n evt.preventDefault();\n }\n }\n // 29JAN2021 Non-swipe condition should return false instead of true.\n // return true;\n return false;\n }\n }\n return false\n}\n\nexport const createInvisibleFileInputWrap = function() {\n var fileElem = createFileInput()\n var label = document.createElement('label');\n label.innerHTML = 'upload'\n label.style.visibility = 'hidden'\n label.style.position = 'absolute'\n label.style.overflow = 'hidden'\n label.style.width = '0px'\n label.style.height = '0px'\n label.style.border = 'none'\n label.style.margin = '0px'\n label.style.padding = '0px'\n label.setAttribute('tabindex','-1')\n \n //bindAttrToFileInput(fileElem, label);\n //generatedElems.push({el: elem, ref: label});\n\n label.appendChild( fileElem )\n //document.body.appendChild( label );\n\n return label;\n}\n\nexport const createFileInput = function() {\n var fileElem = document.createElement('input');\n fileElem.type=\"file\"\n return fileElem;\n}\n","export function getWindow():any{return window}\n\nexport function acceptType(accept:string, type:string, name?:string):boolean { \n if( !accept ){\n return true\n }\n\n const defs = accept.split(',')\n let regx:RegExp\n let acceptRegString:string\n\n for(let x=defs.length-1; x >= 0; --x){\n //Escapes dots in mimetype \n acceptRegString = defs[x]\n //trim\n acceptRegString = acceptRegString.replace(/(^\\s+|\\s+$)/g,'')\n //Escapes stars in mimetype \n acceptRegString = acceptRegString.replace(/\\*/g,'.*')\n //let acceptReg = '^((' + acceptRegString\n //acceptReg = acceptReg.replace(/,/g,')|(') + '))$'\n \n //try by mime\n regx = new RegExp(acceptRegString, 'gi')\n if( type.search(regx)>=0 ){\n return true\n }\n\n //try by ext\n if( acceptRegString.substring(0, 1)=='.' ){ \n acceptRegString = '\\\\'+ acceptRegString//.substring(1, acceptRegString.length-1)//remove dot at front\n regx = new RegExp(acceptRegString+'$', 'i')\n if( (name||type).search(regx)>=0 ){\n return true\n }\n }\n }\n return false\n}\n\nexport interface InvalidFileItem{\n file:File\n type:string\n}\n\nexport function arrayBufferToBase64(buffer:any) {\n var binary = '';\n var bytes = new Uint8Array(buffer);\n var len = bytes.byteLength;\n for (var i = 0; i < len; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return window.btoa(binary);\n}\n\nexport function dataUrltoBlob(\n dataurl:string,\n name:string,\n origSize?:any\n):Blob{\n var arr = dataurl.split(',');\n var mimeMatch = arr[0].match(/:(.*?);/)\n var mime:string = mimeMatch ? mimeMatch[1] : 'text/plain'\n var bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);\n while (n--) {\n u8arr[n] = bstr.charCodeAt(n);\n }\n var blob = new window.Blob([u8arr], {type: mime});\n blob[\"name\"] = name;\n blob[\"$ngfOrigSize\"] = origSize;\n return blob;\n}\n\nexport interface orientationMeta{\n orientation: number\n fixedArrayBuffer?:any[]\n}\n\nexport function applyTransform(\n ctx:CanvasRenderingContext2D,\n orientation:number,\n width:number,\n height:number\n) {\n switch (orientation) {\n case 2:\n return ctx.transform(-1, 0, 0, 1, width, 0);\n case 3:\n return ctx.transform(-1, 0, 0, -1, width, height);\n case 4:\n return ctx.transform(1, 0, 0, -1, 0, height);\n case 5:\n return ctx.transform(0, 1, 1, 0, 0, 0);\n case 6:\n return ctx.transform(0, 1, -1, 0, height, 0);\n case 7:\n return ctx.transform(0, -1, -1, 0, height, width);\n case 8:\n return ctx.transform(0, -1, 1, 0, 0, width);\n }\n}\n\nexport function fixFileOrientationByMeta(\n file:File, result:orientationMeta\n):Promise{\n return dataUrl(file, true)\n .then(url=>{\n var canvas = document.createElement('canvas');\n var img = document.createElement('img');\n\n return >new Promise(function(res,rej){\n img.onload = function () {\n try {\n canvas.width = result.orientation > 4 ? img.height : img.width\n canvas.height = result.orientation > 4 ? img.width : img.height\n var ctx = canvas.getContext('2d')\n applyTransform(ctx, result.orientation, img.width, img.height)\n ctx.drawImage(img, 0, 0);\n var dataUrl = canvas.toDataURL(file.type || 'image/WebP', 0.934)\n const base = arrayBufferToBase64(result.fixedArrayBuffer)\n dataUrl = restoreExif(base, dataUrl)\n var blob = dataUrltoBlob(dataUrl, file.name)\n const newFile = blobToFile(blob, file.name);\n res(newFile);\n } catch (e) {\n rej(e)\n }\n };\n img.onerror = rej;\n img.src = url; \n })\n })\n}\n\nexport function applyExifRotation(\n file:File\n):Promise{\n if (file.type.indexOf('image/jpeg') !== 0) {\n return Promise.resolve(file);\n }\n\n return readOrientation(file)\n .then((result:orientationMeta)=>{\n if (result.orientation < 2 || result.orientation > 8) {\n return file\n }\n \n return fixFileOrientationByMeta(file,result)\n })\n}\n\nexport function readOrientation(\n file:File\n):Promise{\n return new Promise((res,rej)=>{\n var reader = new FileReader();\n var slicedFile = file.slice ? file.slice(0, 64 * 1024) : file;\n reader.readAsArrayBuffer(slicedFile);\n reader.onerror = rej\n reader.onload = function (e:any) {\n var result:orientationMeta = {orientation: 1};\n var view = new DataView( this.result );\n if (view.getUint16(0, false) !== 0xFFD8) return res(result);\n\n var length = view.byteLength,\n offset = 2;\n while (offset < length) {\n var marker = view.getUint16(offset, false);\n offset += 2;\n if (marker === 0xFFE1) {\n if (view.getUint32(offset += 2, false) !== 0x45786966) return res(result);\n\n var little = view.getUint16(offset += 6, false) === 0x4949;\n offset += view.getUint32(offset + 4, little);\n var tags = view.getUint16(offset, little);\n offset += 2;\n for (var i = 0; i < tags; i++)\n if (view.getUint16(offset + (i * 12), little) === 0x0112) {\n var orientation = view.getUint16(offset + (i * 12) + 8, little);\n if (orientation >= 2 && orientation <= 8) {\n view.setUint16(offset + (i * 12) + 8, 1, little);\n result.fixedArrayBuffer = e.target.result;\n }\n result.orientation = orientation;\n return res(result);\n }\n } else if ((marker & 0xFF00) !== 0xFF00) break;\n else offset += view.getUint16(offset, false);\n }\n return res(result);\n };\n })\n}\n\n/** converts file-input file into base64 dataUri */\nexport function dataUrl(\n file:any,\n disallowObjectUrl?:any\n):Promise{\n if (!file) return Promise.resolve(file)\n \n if ((disallowObjectUrl && file.$ngfDataUrl != null) || (!disallowObjectUrl && file.$ngfBlobUrl != null)) {\n return Promise.resolve( disallowObjectUrl ? file.$ngfDataUrl : file.$ngfBlobUrl )\n }\n\n var p = disallowObjectUrl ? file.$$ngfDataUrlPromise : file.$$ngfBlobUrlPromise;\n if (p) return p;\n\n const win = getWindow()\n let deferred:Promise\n if (win.FileReader && file &&\n (!win.FileAPI || navigator.userAgent.indexOf('MSIE 8') === -1 || file.size < 20000) &&\n (!win.FileAPI || navigator.userAgent.indexOf('MSIE 9') === -1 || file.size < 4000000)) {\n //prefer URL.createObjectURL for handling refrences to files of all sizes\n //since it doesn´t build a large string in memory\n var URL = win.URL || win.webkitURL;\n if (FileReader) {\n deferred = new Promise((res,rej)=>{\n var fileReader = new FileReader();\n fileReader.onload = function (event:any) {\n file.$ngfDataUrl = event.target.result;\n delete file.$ngfDataUrl;\n res( event.target.result )\n };\n fileReader.onerror = function (e) {\n file.$ngfDataUrl = '';\n rej(e)\n };\n fileReader.readAsDataURL(file);\n })\n } else {\n var url:any;\n try {\n url = URL.createObjectURL(file);\n } catch (e) {\n return Promise.reject(e);\n }\n \n deferred = Promise.resolve( url )\n file.$ngfBlobUrl = url;\n }\n } else {\n file[disallowObjectUrl ? '$ngfDataUrl' : '$ngfBlobUrl'] = '';\n return Promise.reject( new Error('Browser does not support window.FileReader, window.FileReader, or window.FileAPI') )//deferred.reject();\n }\n\n if (disallowObjectUrl) {\n p = file.$$ngfDataUrlPromise = deferred;\n } else {\n p = file.$$ngfBlobUrlPromise = deferred;\n }\n\n p = p.then((x:any)=>{\n delete file[disallowObjectUrl ? '$$ngfDataUrlPromise' : '$$ngfBlobUrlPromise'];\n return x\n })\n\n return p;\n}\n\nexport function restoreExif(orig:any, resized:any) {\n var ExifRestorer:any = {\n KEY_STR:'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='\n }\n\n ExifRestorer.encode64 = function (input:any) {\n var output = '',\n chr1, chr2, chr3:any = '',\n enc1, enc2, enc3, enc4:any = '',\n i = 0;\n\n do {\n chr1 = input[i++];\n chr2 = input[i++];\n chr3 = input[i++];\n\n enc1 = chr1 >> 2;\n enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);\n enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);\n enc4 = chr3 & 63;\n\n if (isNaN(chr2)) {\n enc3 = enc4 = 64;\n } else if (isNaN(chr3)) {\n enc4 = 64;\n }\n\n output = output +\n this.KEY_STR.charAt(enc1) +\n this.KEY_STR.charAt(enc2) +\n this.KEY_STR.charAt(enc3) +\n this.KEY_STR.charAt(enc4);\n chr1 = chr2 = chr3 = '';\n enc1 = enc2 = enc3 = enc4 = '';\n } while (i < input.length);\n\n return output;\n };\n\n ExifRestorer.restore = function (origFileBase64:any, resizedFileBase64:any) {\n if (origFileBase64.match('data:image/jpeg;base64,')) {\n origFileBase64 = origFileBase64.replace('data:image/jpeg;base64,', '');\n }\n\n var rawImage:number[] = this.decode64(origFileBase64);\n var segments = this.slice2Segments(rawImage);\n\n var image = this.exifManipulation(resizedFileBase64, segments);\n\n return 'data:image/jpeg;base64,' + this.encode64(image);\n };\n\n\n ExifRestorer.exifManipulation = function (resizedFileBase64:any, segments:any) {\n var exifArray = this.getExifArray(segments),\n newImageArray = this.insertExif(resizedFileBase64, exifArray);\n return new Uint8Array(newImageArray);\n };\n\n ExifRestorer.getExifArray = function (segments:number[][]) {\n var seg;\n for (var x = 0; x < segments.length; x++) {\n seg = segments[x];\n if (seg[0] === 255 && seg[1] === 225) //(ff e1)\n {\n return seg;\n }\n }\n return [];\n };\n\n\n ExifRestorer.insertExif = function (resizedFileBase64:any, exifArray:any) {\n var imageData = resizedFileBase64.replace('data:image/jpeg;base64,', ''),\n buf = this.decode64(imageData),\n separatePoint = buf.indexOf(255, 3),\n mae = buf.slice(0, separatePoint),\n ato = buf.slice(separatePoint),\n array = mae;\n\n array = array.concat(exifArray);\n array = array.concat(ato);\n return array;\n };\n\n\n ExifRestorer.slice2Segments = function(\n rawImageArray:number[]\n ) {\n var head:number = 0,\n segments:number[][] = [];\n\n while (1) {\n if (rawImageArray[head] === 255 && rawImageArray[head + 1] === 218) {\n break;\n }\n if (rawImageArray[head] === 255 && rawImageArray[head + 1] === 216) {\n head += 2;\n }\n else {\n var length = rawImageArray[head + 2] * 256 + rawImageArray[head + 3]\n var endPoint = head + length + 2\n var seg:number[] = rawImageArray.slice(head, endPoint)\n segments.push(seg);\n head = endPoint;\n }\n if (head > rawImageArray.length) {\n break;\n }\n }\n\n return segments;\n };\n\n\n ExifRestorer.decode64 = function (\n input:any\n ):number[]{\n var chr1, chr2, chr3:any = '',\n enc1, enc2, enc3, enc4:any = '',\n i = 0,\n buf:number[] = [];\n\n // remove all characters that are not A-Z, a-z, 0-9, +, /, or =\n var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n if (base64test.exec(input)) {\n console.log('There were invalid base64 characters in the input text.');\n }\n input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, '');\n\n do {\n enc1 = this.KEY_STR.indexOf(input.charAt(i++));\n enc2 = this.KEY_STR.indexOf(input.charAt(i++));\n enc3 = this.KEY_STR.indexOf(input.charAt(i++));\n enc4 = this.KEY_STR.indexOf(input.charAt(i++));\n\n chr1 = (enc1 << 2) | (enc2 >> 4);\n chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\n chr3 = ((enc3 & 3) << 6) | enc4;\n\n buf.push(chr1);\n\n if (enc3 !== 64) {\n buf.push(chr2);\n }\n if (enc4 !== 64) {\n buf.push(chr3);\n }\n\n chr1 = chr2 = chr3 = '';\n enc1 = enc2 = enc3 = enc4 = '';\n\n } while (i < input.length);\n\n return buf;\n };\n\n return ExifRestorer.restore(orig, resized); //<= EXIF\n};\n\nfunction blobToFile(theBlob: Blob, fileName:string): File {\n var b: any = theBlob;\n //A Blob() is almost a File() - it's just missing the two properties below which we will add\n b.lastModifiedDate = new Date();\n b.name = fileName;\n\n //Cast to a File() type\n return theBlob;\n}\n","import { Directive, EventEmitter, ElementRef, Input, Output, HostListener, ChangeDetectionStrategy } from '@angular/core';\nimport { createInvisibleFileInputWrap, isFileInput, detectSwipe } from \"./doc-event-help.functions\"\nimport {\n acceptType, InvalidFileItem,\n applyExifRotation, dataUrl\n} from \"./fileTools\"\n\nexport interface dragMeta{\n type:string\n kind:string\n}\n\n/** A master base set of logic intended to support file select/drag/drop operations\n NOTE: Use ngfDrop for full drag/drop. Use ngfSelect for selecting\n*/\n@Directive({\n selector: \"[ngf]\",\n exportAs:\"ngf\"\n})\nexport class ngf {\n fileElm:any\n filters:{name:string, fn:(file:File)=>boolean}[] = []\n lastFileCount:number=0\n\n @Input() multiple !:string\n @Input() accept !:string\n @Input() maxSize !:number\n //@Input() forceFilename:string\n //@Input() forcePostname:string\n @Input() ngfFixOrientation:boolean = true\n\n @Input() fileDropDisabled:boolean = false\n @Input() selectable: boolean | string = false\n @Output('init') directiveInit:EventEmitter = new EventEmitter()\n\n @Input() lastInvalids:InvalidFileItem[] = []\n @Output() lastInvalidsChange:EventEmitter<{file:File,type:string}[]> = new EventEmitter()\n\n @Input() lastBaseUrl !: string//base64 last file uploaded url\n @Output() lastBaseUrlChange:EventEmitter = new EventEmitter()\n\n @Input() file !: File//last file uploaded\n @Output() fileChange:EventEmitter = new EventEmitter()\n\n @Input() files:File[] = []\n @Output() filesChange:EventEmitter = new EventEmitter();\n\n @Input() capturePaste: boolean; // window paste file watching (empty string turns on)\n pasteCapturer !: (e: Event) => void;\n\n constructor(public element:ElementRef){\n this.initFilters()\n }\n\n initFilters(){\n // the order is important\n this.filters.push({name: 'accept', fn: this._acceptFilter})\n this.filters.push({name: 'fileSize', fn: this._fileSizeFilter})\n\n //this.filters.push({name: 'fileType', fn: this._fileTypeFilter})\n //this.filters.push({name: 'queueLimit', fn: this._queueLimitFilter})\n //this.filters.push({name: 'mimeType', fn: this._mimeTypeFilter})\n }\n\n ngOnDestroy(){\n delete this.fileElm//faster memory release of dom element\n this.destroyPasteListener();\n }\n\n ngOnInit(){\n const selectable = (this.selectable || this.selectable==='') && !['false', 'null', '0'].includes(this.selectable as string);\n if( selectable ){\n this.enableSelecting()\n }\n\n if( this.multiple ){\n this.paramFileElm().setAttribute('multiple', this.multiple)\n }\n\n this.evalCapturePaste();\n\n //create reference to this class with one cycle delay to avoid ExpressionChangedAfterItHasBeenCheckedError\n setTimeout(()=>{\n this.directiveInit.emit(this)\n }, 0)\n }\n\n ngOnChanges( changes ){\n if( changes.accept ){\n this.paramFileElm().setAttribute('accept', changes.accept.currentValue || '*')\n }\n\n if (changes.capturePaste) {\n this.evalCapturePaste();\n }\n }\n\n evalCapturePaste() {\n const isActive = this.capturePaste || (this.capturePaste as any)==='' || ['false', '0', 'null'].includes(this.capturePaste as any);\n\n if (isActive) {\n if (this.pasteCapturer) {\n return; // already listening\n }\n\n this.pasteCapturer = (e: Event) => {\n const clip = (e as any).clipboardData;\n if (clip && clip.files && clip.files.length) {\n this.handleFiles(clip.files);\n e.preventDefault();\n }\n }\n\n window.addEventListener('paste', this.pasteCapturer);\n\n return;\n }\n\n this.destroyPasteListener();\n }\n\n destroyPasteListener() {\n if (this.pasteCapturer) {\n window.removeEventListener('paste', this.pasteCapturer);\n delete this.pasteCapturer;\n }\n }\n\n paramFileElm(){\n if( this.fileElm )return this.fileElm//already defined\n\n //elm is a file input\n const isFile = isFileInput( this.element.nativeElement )\n if(isFile)return this.fileElm = this.element.nativeElement\n\n //create foo file input\n const label = createInvisibleFileInputWrap()\n this.fileElm = label.getElementsByTagName('input')[0]\n this.fileElm.addEventListener('change', this.changeFn.bind(this));\n this.element.nativeElement.appendChild( label )\n return this.fileElm\n }\n\n enableSelecting(){\n let elm = this.element.nativeElement\n\n if( isFileInput(elm) ){\n const bindedHandler = _ev=>this.beforeSelect()\n elm.addEventListener('click', bindedHandler)\n elm.addEventListener('touchstart', bindedHandler)\n return\n }\n\n const bindedHandler = ev=>this.clickHandler(ev)\n elm.addEventListener('click', bindedHandler)\n elm.addEventListener('touchstart', bindedHandler)\n elm.addEventListener('touchend', bindedHandler)\n }\n\n getValidFiles( files:File[] ):File[]{\n const rtn:File[] = []\n for(let x=files.length-1; x >= 0; --x){\n if( this.isFileValid(files[x]) ){\n rtn.push( files[x] )\n }\n }\n return rtn\n }\n\n getInvalidFiles(files:File[]):InvalidFileItem[]{\n const rtn:InvalidFileItem[] = []\n for(let x=files.length-1; x >= 0; --x){\n let failReason = this.getFileFilterFailName(files[x])\n if( failReason ){\n rtn.push({\n file : files[x],\n type : failReason\n })\n }\n }\n return rtn\n }\n\n // Primary handler of files coming in\n handleFiles(files:File[]){\n const valids = this.getValidFiles(files)\n\n if(files.length!=valids.length){\n this.lastInvalids = this.getInvalidFiles(files)\n }else{\n delete this.lastInvalids\n }\n\n this.lastInvalidsChange.emit(this.lastInvalids)\n\n if( valids.length ){\n if( this.ngfFixOrientation ){\n this.applyExifRotations(valids)\n .then( fixedFiles=>this.que(fixedFiles) )\n }else{\n this.que(valids)\n }\n }\n\n if (this.isEmptyAfterSelection()) {\n this.element.nativeElement.value = ''\n }\n }\n\n que( files:File[] ){\n this.files = this.files || []\n Array.prototype.push.apply(this.files, files)\n\n //below break memory ref and doesnt act like a que\n //this.files = files//causes memory change which triggers bindings like \n\n this.filesChange.emit( this.files )\n\n if(files.length){\n this.fileChange.emit( this.file=files[0] )\n\n if(this.lastBaseUrlChange.observers.length){\n dataUrl( files[0] )\n .then( url=>this.lastBaseUrlChange.emit(url) )\n }\n }\n\n //will be checked for input value clearing\n this.lastFileCount = this.files.length\n }\n\n /** called when input has files */\n changeFn(event:any) {\n var fileList = event.__files_ || (event.target && event.target.files)\n\n if (!fileList) return;\n\n this.stopEvent(event);\n this.handleFiles(fileList)\n }\n\n clickHandler(evt:any){\n const elm = this.element.nativeElement\n if (elm.getAttribute('disabled') || this.fileDropDisabled){\n return false;\n }\n\n var r = detectSwipe(evt);\n // prevent the click if it is a swipe\n if ( r!==false ) return r;\n\n const fileElm = this.paramFileElm()\n fileElm.click()\n //fileElm.dispatchEvent( new Event('click') );\n this.beforeSelect()\n\n return false;\n }\n\n beforeSelect(){\n if( this.files && this.lastFileCount===this.files.length )return\n\n //if no files in array, be sure browser doesnt prevent reselect of same file (see github issue 27)\n this.fileElm.value = null\n }\n\n isEmptyAfterSelection():boolean {\n return !!this.element.nativeElement.attributes.multiple;\n }\n\n eventToTransfer(event:any):any {\n if(event.dataTransfer)return event.dataTransfer\n return event.originalEvent ? event.originalEvent.dataTransfer : null\n }\n\n stopEvent(event:any):any {\n event.preventDefault();\n event.stopPropagation();\n }\n\n transferHasFiles(transfer:any):any {\n if (!transfer.types) {\n return false;\n }\n\n if (transfer.types.indexOf) {\n return transfer.types.indexOf('Files') !== -1;\n } else if (transfer.types.contains) {\n return transfer.types.contains('Files');\n } else {\n return false;\n }\n }\n\n eventToFiles(event:Event){\n const transfer = this.eventToTransfer(event);\n if( transfer ){\n if(transfer.files && transfer.files.length){\n return transfer.files\n }\n if(transfer.items && transfer.items.length){\n return transfer.items\n }\n }\n return []\n }\n\n applyExifRotations(\n files:File[]\n ):Promise{\n const mapper = (\n file:File,index:number\n ):Promise=>{\n return applyExifRotation(file)\n .then( fixedFile=>files.splice(index, 1, fixedFile) )\n }\n\n const proms:Promise[] = []\n for(let x=files.length-1; x >= 0; --x){\n proms[x] = mapper( files[x], x )\n }\n return Promise.all( proms ).then( ()=>files )\n }\n\n @HostListener('change', ['$event'])\n onChange(event:Event):void {\n let files = this.element.nativeElement.files || this.eventToFiles(event)\n\n if(!files.length)return\n\n this.stopEvent(event);\n this.handleFiles(files)\n }\n\n getFileFilterFailName(\n file:File\n ):string | undefined{\n for(let i = 0; i < this.filters.length; i++){\n if( !this.filters[i].fn.call(this, file) ){\n return this.filters[i].name\n }\n }\n return undefined\n }\n\n isFileValid(file:File):boolean{\n const noFilters = !this.accept && (!this.filters || !this.filters.length)\n if( noFilters ){\n return true//we have no filters so all files are valid\n }\n\n return this.getFileFilterFailName(file) ? false : true\n }\n\n isFilesValid(files:File[]){\n for(let x=files.length-1; x >= 0; --x){\n if( !this.isFileValid(files[x]) ){\n return false\n }\n }\n return true\n }\n\n protected _acceptFilter(item:File):boolean {\n return acceptType(this.accept, item.type, item.name)\n }\n\n protected _fileSizeFilter(item:File):boolean {\n return !(this.maxSize && item.size > this.maxSize);\n }\n\n /** browsers try hard to conceal data about file drags, this tends to undo that */\n filesToWriteableObject( files:File[] ):dragMeta[]{\n const jsonFiles:dragMeta[] = []\n for(let x=0; x < files.length; ++x){\n jsonFiles.push({\n type:files[x].type,\n kind:files[x][\"kind\"]\n })\n }\n return jsonFiles\n }\n}\n","import { Directive, Input } from \"@angular/core\"\nimport { ngf } from \"./ngf.directive\"\n\n@Directive({\n selector: \"[ngfSelect]\",\n exportAs: \"ngfSelect\"\n})\nexport class ngfSelect extends ngf {\n @Input() selectable:any = true\n}","import {\n Directive, EventEmitter,\n HostListener, Input, Output\n} from '@angular/core';\nimport { ngf, dragMeta } from \"./ngf.directive\"\n\n@Directive({\n selector: \"[ngfDrop]\",\n exportAs: \"ngfDrop\"\n})\nexport class ngfDrop extends ngf {\n @Output() fileOver:EventEmitter = new EventEmitter();\n\n @Input() validDrag:boolean = false\n @Output() validDragChange:EventEmitter = new EventEmitter()\n\n @Input() invalidDrag = false\n @Output() invalidDragChange:EventEmitter = new EventEmitter()\n\n @Input() dragFiles !: dragMeta[]\n @Output() dragFilesChange:EventEmitter = new EventEmitter()\n\n @HostListener('drop', ['$event'])\n onDrop(event:Event):void {\n if(this.fileDropDisabled){\n this.stopEvent(event);\n return\n }\n\n this.closeDrags()\n let files = this.eventToFiles(event)\n\n if(!files.length)return\n\n this.stopEvent(event);\n this.handleFiles(files)\n }\n\n handleFiles(files:File[]){\n this.fileOver.emit(false)//turn-off dragover\n super.handleFiles(files)\n }\n\n @HostListener('dragover', ['$event'])\n onDragOver(event:Event):void {\n if(this.fileDropDisabled){\n this.stopEvent(event);\n return\n }\n\n const transfer = this.eventToTransfer(event)\n\n let files = this.eventToFiles(event)\n\n let jsonFiles = this.filesToWriteableObject(files)\n this.dragFilesChange.emit( this.dragFiles=jsonFiles )\n\n if( files.length ){\n this.validDrag = this.isFilesValid(files)\n }else{\n //Safari, IE11 & some browsers do NOT tell you about dragged files until dropped. Always consider a valid drag\n this.validDrag = true\n }\n\n this.validDragChange.emit(this.validDrag)\n\n this.invalidDrag = !this.validDrag\n this.invalidDragChange.emit(this.invalidDrag)\n\n transfer.dropEffect = 'copy'//change cursor and such\n this.stopEvent(event)\n this.fileOver.emit(true)\n }\n\n closeDrags(){\n delete this.validDrag\n this.validDragChange.emit(this.validDrag)\n this.invalidDrag = false\n this.invalidDragChange.emit(this.invalidDrag)\n delete this.dragFiles\n this.dragFilesChange.emit( this.dragFiles )\n }\n\n @HostListener('dragleave', ['$event'])\n onDragLeave(event:Event):any {\n if(this.fileDropDisabled){\n this.stopEvent(event);\n return\n }\n \n this.closeDrags()\n\n if ((this as any).element) {\n if (event.currentTarget === (this as any).element[0]) {\n return;\n }\n }\n\n this.stopEvent(event);\n this.fileOver.emit(false);\n }\n}","import { Directive, ElementRef, Input } from '@angular/core';\nimport { dataUrl } from './fileTools';\n\n@Directive({selector: '[ngfBackground]'})\nexport class ngfBackground {\n @Input('ngfBackground') file:any\n\n constructor(public ElementRef:ElementRef){}\n\n ngOnChanges( _changes:any ){\n dataUrl(this.file)\n .then(src=>{\n const urlString = 'url(\\'' + (src || '') + '\\')'\n this.ElementRef.nativeElement.style.backgroundImage = urlString\n })\n }\n}\n","import { Directive, EventEmitter, Output, Input } from '@angular/core';\n\n@Directive({selector: 'ngfUploadStatus'})\nexport class ngfUploadStatus {\n @Input() percent:number = 0\n @Output() percentChange:EventEmitter = new EventEmitter()\n @Input() httpEvent !: Event\n\n ngOnChanges( changes ){\n if( changes.httpEvent && changes.httpEvent.currentValue ){\n const event = changes.httpEvent.currentValue\n if (event.loaded && event.total) {\n setTimeout(()=>{\n this.percent = Math.round(100 * event.loaded / event.total);\n this.percentChange.emit( this.percent )\n }, 0)\n }\n }\n }\n}","import {\n IterableDiffer,\n IterableDiffers,\n Directive, EventEmitter,\n Output, Input\n} from '@angular/core';\n\n@Directive({selector: 'ngfFormData'})\nexport class ngfFormData {\n @Input() files !: File[]\n @Input() postName:string = \"file\"\n @Input() fileName !: string//force file name\n\n @Input() FormData:FormData = new FormData()\n @Output() FormDataChange:EventEmitter = new EventEmitter()\n\n differ:IterableDiffer<{}>\n\n constructor(IterableDiffers: IterableDiffers){\n this.differ = IterableDiffers.find([]).create()\n }\n\n ngDoCheck(){\n var changes = this.differ.diff( this.files );\n\n if (changes) {\n setTimeout(()=>this.buildFormData(), 0)\n }\n }\n\n buildFormData(){\n const isArray = typeof(this.files)==='object' && this.files.constructor===Array\n\n if( isArray ){\n this.FormData = new FormData()\n const files = this.files || []\n files.forEach(file=>\n this.FormData.append(this.postName, file, this.fileName||file.name)\n )\n this.FormDataChange.emit( this.FormData )\n }else{\n delete this.FormData\n }\n }\n}","import { Directive, ElementRef, Input } from '@angular/core';\nimport { dataUrl } from './fileTools';\n\n@Directive({ selector: '[ngfSrc]' })\nexport class ngfSrc {\n @Input('ngfSrc') file: any\n\n constructor(public ElementRef: ElementRef) { }\n\n ngOnChanges(_changes: any) {\n dataUrl(this.file)\n .then(src=>\n this.ElementRef.nativeElement.src = src\n )\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { ngfBackground } from './ngfBackground.directive';\nimport { ngfDrop } from './ngfDrop.directive';\nimport { ngf } from './ngf.directive';\nimport { ngfSelect } from './ngfSelect.directive';\nimport { ngfUploadStatus } from './ngfUploadStatus.directive';\nimport { ngfFormData } from './ngfFormData.directive';\nimport { ngfSrc } from './ngfSrc.directive';\n//import{ HttpModule } from '@angular/http';\n\nconst declarations = [\n ngfDrop,\n ngfSelect,\n ngfBackground,\n ngfSrc,\n ngfUploadStatus,\n ngfFormData,\n ngf\n]\n\n@NgModule({\n imports: [\n CommonModule\n //,HttpModule\n ],\n declarations: declarations,\n exports: declarations//[HttpModule, ...declarations]\n}) export class ngfModule {}","/*\n * Public API Surface of angular-file\n */\n\nexport * from './file-upload/ngfSelect.directive';\nexport * from './file-upload/ngfDrop.directive';\nexport * from './file-upload/ngf.directive';\nexport * from './file-upload/ngf.module';\nexport { ngfBackground } from './file-upload/ngfBackground.directive';\nexport { ngfSrc } from './file-upload/ngfSrc.directive';\nexport { ngfUploadStatus } from './file-upload/ngfUploadStatus.directive';\nexport { ngfFormData } from './file-upload/ngfFormData.directive';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/file-upload/doc-event-help.functions.ts b/src/file-upload/doc-event-help.functions.ts index 46384cdd..cbfb74e6 100644 --- a/src/file-upload/doc-event-help.functions.ts +++ b/src/file-upload/doc-event-help.functions.ts @@ -19,16 +19,25 @@ export const detectSwipe = function(evt:any):boolean { var currentY = touches[0].clientY; if ((Math.abs(currentX - initialTouchStartX) > 20) || (Math.abs(currentY - initialTouchStartY) > 20)) { + // 29JAN2021 Removed/moved to inverse condition. + // Should be run during tap detection. + // evt.stopPropagation(); + // if (evt.cancelable) { + // evt.preventDefault(); + // } + // 29JAN2021 Swipe detected should return true instead of false. + // return false; // Swipe detected return true; } - // touch was a 'tap' so prevent propogation and prevent - // device follow-up actions (click, mouseup, mousedown, etc.) + // tap detected evt.stopPropagation(); if (evt.cancelable) { evt.preventDefault(); } } + // 29JAN2021 Non-swipe condition should return false instead of true. + // return true; return false; } }