summaryrefslogtreecommitdiff
path: root/src/main/resources/assets/js/ng-file-upload.min.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/resources/assets/js/ng-file-upload.min.js')
-rw-r--r--src/main/resources/assets/js/ng-file-upload.min.js1245
1 files changed, 1245 insertions, 0 deletions
diff --git a/src/main/resources/assets/js/ng-file-upload.min.js b/src/main/resources/assets/js/ng-file-upload.min.js
new file mode 100644
index 0000000..97a7137
--- /dev/null
+++ b/src/main/resources/assets/js/ng-file-upload.min.js
@@ -0,0 +1,1245 @@
+/*! 12.2.13 */
+!window.XMLHttpRequest || window.FileAPI && FileAPI.shouldLoad || (window.XMLHttpRequest.prototype.setRequestHeader = function (a) {
+ return function (b, c) {
+ if ("__setXHR_" === b) {
+ var d = c(this);
+ d instanceof Function && d(this)
+ } else a.apply(this, arguments)
+ }
+}(window.XMLHttpRequest.prototype.setRequestHeader));
+var ngFileUpload = angular.module("ngFileUpload", []);
+ngFileUpload.version = "12.2.13", ngFileUpload.service("UploadBase", ["$http", "$q", "$timeout", function (a, b, c) {
+ function d(d) {
+ function e(a) {
+ j.notify && j.notify(a), k.progressFunc && c(function () {
+ k.progressFunc(a)
+ })
+ }
+
+ function h(a) {
+ return null != d._start && g ? {
+ loaded: a.loaded + d._start,
+ total: d._file && d._file.size || a.total,
+ type: a.type,
+ config: d,
+ lengthComputable: !0,
+ target: a.target
+ } : a
+ }
+
+ function i() {
+ a(d).then(function (a) {
+ if (g && d._chunkSize && !d._finished && d._file) {
+ var b = d._file && d._file.size || 0;
+ e({loaded: Math.min(d._end, b), total: b, config: d, type: "progress"}), f.upload(d, !0)
+ } else d._finished && delete d._finished, j.resolve(a)
+ }, function (a) {
+ j.reject(a)
+ }, function (a) {
+ j.notify(a)
+ })
+ }
+
+ d.method = d.method || "POST", d.headers = d.headers || {};
+ var j = d._deferred = d._deferred || b.defer(), k = j.promise;
+ return d.disableProgress || (d.headers.__setXHR_ = function () {
+ return function (a) {
+ a && a.upload && a.upload.addEventListener && (d.__XHR = a, d.xhrFn && d.xhrFn(a), a.upload.addEventListener("progress", function (a) {
+ a.config = d, e(h(a))
+ }, !1), a.upload.addEventListener("load", function (a) {
+ a.lengthComputable && (a.config = d, e(h(a)))
+ }, !1))
+ }
+ }), g ? d._chunkSize && d._end && !d._finished ? (d._start = d._end, d._end += d._chunkSize, i()) : d.resumeSizeUrl ? a.get(d.resumeSizeUrl).then(function (a) {
+ d._start = d.resumeSizeResponseReader ? d.resumeSizeResponseReader(a.data) : parseInt((null == a.data.size ? a.data : a.data.size).toString()), d._chunkSize && (d._end = d._start + d._chunkSize), i()
+ }, function (a) {
+ throw a
+ }) : d.resumeSize ? d.resumeSize().then(function (a) {
+ d._start = a, d._chunkSize && (d._end = d._start + d._chunkSize), i()
+ }, function (a) {
+ throw a
+ }) : (d._chunkSize && (d._start = 0, d._end = d._start + d._chunkSize), i()) : i(), k.success = function (a) {
+ return k.then(function (b) {
+ a(b.data, b.status, b.headers, d)
+ }), k
+ }, k.error = function (a) {
+ return k.then(null, function (b) {
+ a(b.data, b.status, b.headers, d)
+ }), k
+ }, k.progress = function (a) {
+ return k.progressFunc = a, k.then(null, null, function (b) {
+ a(b)
+ }), k
+ }, k.abort = k.pause = function () {
+ return d.__XHR && c(function () {
+ d.__XHR.abort()
+ }), k
+ }, k.xhr = function (a) {
+ return d.xhrFn = function (b) {
+ return function () {
+ b && b.apply(k, arguments), a.apply(k, arguments)
+ }
+ }(d.xhrFn), k
+ }, f.promisesCount++, k["finally"] && k["finally"] instanceof Function && k["finally"](function () {
+ f.promisesCount--
+ }), k
+ }
+
+ function e(a) {
+ var b = {};
+ for (var c in a) a.hasOwnProperty(c) && (b[c] = a[c]);
+ return b
+ }
+
+ var f = this;
+ f.promisesCount = 0, this.isResumeSupported = function () {
+ return window.Blob && window.Blob.prototype.slice
+ };
+ var g = this.isResumeSupported();
+ this.isUploadInProgress = function () {
+ return f.promisesCount > 0
+ }, this.rename = function (a, b) {
+ return a.ngfName = b, a
+ }, this.jsonBlob = function (a) {
+ null == a || angular.isString(a) || (a = JSON.stringify(a));
+ var b = new window.Blob([a], {type: "application/json"});
+ return b._ngfBlob = !0, b
+ }, this.json = function (a) {
+ return angular.toJson(a)
+ }, this.isFile = function (a) {
+ return null != a && (a instanceof window.Blob || a.flashId && a.name && a.size)
+ }, this.upload = function (a, b) {
+ function c(b, c) {
+ if (b._ngfBlob) return b;
+ if (a._file = a._file || b, null != a._start && g) {
+ a._end && a._end >= b.size && (a._finished = !0, a._end = b.size);
+ var d = b.slice(a._start, a._end || b.size);
+ return d.name = b.name, d.ngfName = b.ngfName, a._chunkSize && (c.append("_chunkSize", a._chunkSize), c.append("_currentChunkSize", a._end - a._start), c.append("_chunkNumber", Math.floor(a._start / a._chunkSize)), c.append("_totalSize", a._file.size)), d
+ }
+ return b
+ }
+
+ function h(b, d, e) {
+ if (void 0 !== d) if (angular.isDate(d) && (d = d.toISOString()), angular.isString(d)) b.append(e, d); else if (f.isFile(d)) {
+ var g = c(d, b), i = e.split(",");
+ i[1] && (g.ngfName = i[1].replace(/^\s+|\s+$/g, ""), e = i[0]), a._fileKey = a._fileKey || e, b.append(e, g, g.ngfName || g.name)
+ } else if (angular.isObject(d)) {
+ if (d.$$ngfCircularDetection) throw"ngFileUpload: Circular reference in config.data. Make sure specified data for Upload.upload() has no circular reference: " + e;
+ d.$$ngfCircularDetection = !0;
+ try {
+ for (var j in d) if (d.hasOwnProperty(j) && "$$ngfCircularDetection" !== j) {
+ var k = null == a.objectKey ? "[i]" : a.objectKey;
+ d.length && parseInt(j) > -1 && (k = null == a.arrayKey ? k : a.arrayKey), h(b, d[j], e + k.replace(/[ik]/g, j))
+ }
+ } finally {
+ delete d.$$ngfCircularDetection
+ }
+ } else b.append(e, d)
+ }
+
+ function i() {
+ a._chunkSize = f.translateScalars(a.resumeChunkSize), a._chunkSize = a._chunkSize ? parseInt(a._chunkSize.toString()) : null, a.headers = a.headers || {}, a.headers["Content-Type"] = void 0, a.transformRequest = a.transformRequest ? angular.isArray(a.transformRequest) ? a.transformRequest : [a.transformRequest] : [], a.transformRequest.push(function (b) {
+ var c, d = new window.FormData;
+ b = b || a.fields || {}, a.file && (b.file = a.file);
+ for (c in b) if (b.hasOwnProperty(c)) {
+ var e = b[c];
+ a.formDataAppender ? a.formDataAppender(d, c, e) : h(d, e, c)
+ }
+ return d
+ })
+ }
+
+ return b || (a = e(a)), a._isDigested || (a._isDigested = !0, i()), d(a)
+ }, this.http = function (b) {
+ return b = e(b), b.transformRequest = b.transformRequest || function (b) {
+ return window.ArrayBuffer && b instanceof window.ArrayBuffer || b instanceof window.Blob ? b : a.defaults.transformRequest[0].apply(this, arguments)
+ }, b._chunkSize = f.translateScalars(b.resumeChunkSize), b._chunkSize = b._chunkSize ? parseInt(b._chunkSize.toString()) : null, d(b)
+ }, this.translateScalars = function (a) {
+ if (angular.isString(a)) {
+ if (a.search(/kb/i) === a.length - 2) return parseFloat(1024 * a.substring(0, a.length - 2));
+ if (a.search(/mb/i) === a.length - 2) return parseFloat(1048576 * a.substring(0, a.length - 2));
+ if (a.search(/gb/i) === a.length - 2) return parseFloat(1073741824 * a.substring(0, a.length - 2));
+ if (a.search(/b/i) === a.length - 1) return parseFloat(a.substring(0, a.length - 1));
+ if (a.search(/s/i) === a.length - 1) return parseFloat(a.substring(0, a.length - 1));
+ if (a.search(/m/i) === a.length - 1) return parseFloat(60 * a.substring(0, a.length - 1));
+ if (a.search(/h/i) === a.length - 1) return parseFloat(3600 * a.substring(0, a.length - 1))
+ }
+ return a
+ }, this.urlToBlob = function (c) {
+ var d = b.defer();
+ return a({url: c, method: "get", responseType: "arraybuffer"}).then(function (a) {
+ var b = new Uint8Array(a.data), e = a.headers("content-type") || "image/WebP",
+ f = new window.Blob([b], {type: e}), g = c.match(/.*\/(.+?)(\?.*)?$/);
+ g.length > 1 && (f.name = g[1]), d.resolve(f)
+ }, function (a) {
+ d.reject(a)
+ }), d.promise
+ }, this.setDefaults = function (a) {
+ this.defaults = a || {}
+ }, this.defaults = {}, this.version = ngFileUpload.version
+}]), ngFileUpload.service("Upload", ["$parse", "$timeout", "$compile", "$q", "UploadExif", function (a, b, c, d, e) {
+ function f(a, b, c) {
+ var e = [i.emptyPromise()];
+ return angular.forEach(a, function (d, f) {
+ 0 === d.type.indexOf("image/jpeg") && i.attrGetter("ngfFixOrientation", b, c, {$file: d}) && e.push(i.happyPromise(i.applyExifRotation(d), d).then(function (b) {
+ a.splice(f, 1, b)
+ }))
+ }), d.all(e)
+ }
+
+ function g(a, b, c, e) {
+ var f = i.attrGetter("ngfResize", b, c);
+ if (!f || !i.isResizeSupported() || !a.length) return i.emptyPromise();
+ if (f instanceof Function) {
+ var g = d.defer();
+ return f(a).then(function (d) {
+ h(d, a, b, c, e).then(function (a) {
+ g.resolve(a)
+ }, function (a) {
+ g.reject(a)
+ })
+ }, function (a) {
+ g.reject(a)
+ })
+ }
+ return h(f, a, b, c, e)
+ }
+
+ function h(a, b, c, e, f) {
+ function g(d, g) {
+ if (0 === d.type.indexOf("image")) {
+ if (a.pattern && !i.validatePattern(d, a.pattern)) return;
+ a.resizeIf = function (a, b) {
+ return i.attrGetter("ngfResizeIf", c, e, {$width: a, $height: b, $file: d})
+ };
+ var j = i.resize(d, a);
+ h.push(j), j.then(function (a) {
+ b.splice(g, 1, a)
+ }, function (a) {
+ d.$error = "resize", (d.$errorMessages = d.$errorMessages || {}).resize = !0, d.$errorParam = (a ? (a.message ? a.message : a) + ": " : "") + (d && d.name), f.$ngfValidations.push({
+ name: "resize",
+ valid: !1
+ }), i.applyModelValidation(f, b)
+ })
+ }
+ }
+
+ for (var h = [i.emptyPromise()], j = 0; j < b.length; j++) g(b[j], j);
+ return d.all(h)
+ }
+
+ var i = e;
+ return i.getAttrWithDefaults = function (a, b) {
+ if (null != a[b]) return a[b];
+ var c = i.defaults[b];
+ return null == c ? c : angular.isString(c) ? c : JSON.stringify(c)
+ }, i.attrGetter = function (b, c, d, e) {
+ var f = this.getAttrWithDefaults(c, b);
+ if (!d) return f;
+ try {
+ return e ? a(f)(d, e) : a(f)(d)
+ } catch (g) {
+ if (b.search(/min|max|pattern/i)) return f;
+ throw g
+ }
+ }, i.shouldUpdateOn = function (a, b, c) {
+ var d = i.attrGetter("ngfModelOptions", b, c);
+ return d && d.updateOn ? d.updateOn.split(" ").indexOf(a) > -1 : !0
+ }, i.emptyPromise = function () {
+ var a = d.defer(), c = arguments;
+ return b(function () {
+ a.resolve.apply(a, c)
+ }), a.promise
+ }, i.rejectPromise = function () {
+ var a = d.defer(), c = arguments;
+ return b(function () {
+ a.reject.apply(a, c)
+ }), a.promise
+ }, i.happyPromise = function (a, c) {
+ var e = d.defer();
+ return a.then(function (a) {
+ e.resolve(a)
+ }, function (a) {
+ b(function () {
+ throw a
+ }), e.resolve(c)
+ }), e.promise
+ }, i.updateModel = function (c, d, e, h, j, k, l) {
+ function m(f, g, j, l, m) {
+ d.$$ngfPrevValidFiles = f, d.$$ngfPrevInvalidFiles = g;
+ var n = f && f.length ? f[0] : null, o = g && g.length ? g[0] : null;
+ c && (i.applyModelValidation(c, f), c.$setViewValue(m ? n : f)), h && a(h)(e, {
+ $files: f,
+ $file: n,
+ $newFiles: j,
+ $duplicateFiles: l,
+ $invalidFiles: g,
+ $invalidFile: o,
+ $event: k
+ });
+ var p = i.attrGetter("ngfModelInvalid", d);
+ p && b(function () {
+ a(p).assign(e, m ? o : g)
+ }), b(function () {
+ })
+ }
+
+ function n() {
+ function a(a, b) {
+ return a.name === b.name && (a.$ngfOrigSize || a.size) === (b.$ngfOrigSize || b.size) && a.type === b.type
+ }
+
+ function b(b) {
+ var c;
+ for (c = 0; c < r.length; c++) if (a(b, r[c])) return !0;
+ for (c = 0; c < s.length; c++) if (a(b, s[c])) return !0;
+ return !1
+ }
+
+ if (j) {
+ q = [], t = [];
+ for (var c = 0; c < j.length; c++) b(j[c]) ? t.push(j[c]) : q.push(j[c])
+ }
+ }
+
+ function o(a) {
+ return angular.isArray(a) ? a : [a]
+ }
+
+ function p() {
+ function a() {
+ b(function () {
+ m(w ? r.concat(v) : v, w ? s.concat(u) : u, j, t, x)
+ }, z && z.debounce ? z.debounce.change || z.debounce : 0)
+ }
+
+ var f = y ? q : v;
+ g(f, d, e, c).then(function () {
+ y ? i.validate(q, w ? r.length : 0, c, d, e).then(function (b) {
+ v = b.validsFiles, u = b.invalidsFiles, a()
+ }) : a()
+ }, function () {
+ for (var b = 0; b < f.length; b++) {
+ var c = f[b];
+ if ("resize" === c.$error) {
+ var d = v.indexOf(c);
+ d > -1 && (v.splice(d, 1), u.push(c)), a()
+ }
+ }
+ })
+ }
+
+ var q, r, s, t = [], u = [], v = [];
+ r = d.$$ngfPrevValidFiles || [], s = d.$$ngfPrevInvalidFiles || [], c && c.$modelValue && (r = o(c.$modelValue));
+ var w = i.attrGetter("ngfKeep", d, e);
+ q = (j || []).slice(0), ("distinct" === w || i.attrGetter("ngfKeepDistinct", d, e) === !0) && n(d, e);
+ var x = !w && !i.attrGetter("ngfMultiple", d, e) && !i.attrGetter("multiple", d);
+ if (!w || q.length) {
+ i.attrGetter("ngfBeforeModelChange", d, e, {
+ $files: j,
+ $file: j && j.length ? j[0] : null,
+ $newFiles: q,
+ $duplicateFiles: t,
+ $event: k
+ });
+ var y = i.attrGetter("ngfValidateAfterResize", d, e), z = i.attrGetter("ngfModelOptions", d, e);
+ i.validate(q, w ? r.length : 0, c, d, e).then(function (a) {
+ l ? m(q, [], j, t, x) : (z && z.allowInvalid || y ? v = q : (v = a.validFiles, u = a.invalidFiles), i.attrGetter("ngfFixOrientation", d, e) && i.isExifSupported() ? f(v, d, e).then(function () {
+ p()
+ }) : p())
+ })
+ }
+ }, i
+}]), ngFileUpload.directive("ngfSelect", ["$parse", "$timeout", "$compile", "Upload", function (a, b, c, d) {
+ function e(a) {
+ var b = a.match(/Android[^\d]*(\d+)\.(\d+)/);
+ if (b && b.length > 2) {
+ var c = d.defaults.androidFixMinorVersion || 4;
+ return parseInt(b[1]) < 4 || parseInt(b[1]) === c && parseInt(b[2]) < c
+ }
+ return -1 === a.indexOf("Chrome") && /.*Windows.*Safari.*/.test(a)
+ }
+
+ function f(a, b, c, d, f, h, i, j) {
+ function k() {
+ return "input" === b[0].tagName.toLowerCase() && c.type && "file" === c.type.toLowerCase()
+ }
+
+ function l() {
+ return t("ngfChange") || t("ngfSelect")
+ }
+
+ function m(b) {
+ if (j.shouldUpdateOn("change", c, a)) {
+ var e = b.__files_ || b.target && b.target.files, f = [];
+ if (!e) return;
+ for (var g = 0; g < e.length; g++) f.push(e[g]);
+ j.updateModel(d, c, a, l(), f.length ? f : null, b)
+ }
+ }
+
+ function n(a, d) {
+ function e(b) {
+ a.attr("id", "ngf-" + b), d.attr("id", "ngf-label-" + b)
+ }
+
+ for (var f = 0; f < b[0].attributes.length; f++) {
+ var g = b[0].attributes[f];
+ "type" !== g.name && "class" !== g.name && "style" !== g.name && ("id" === g.name ? (e(g.value), u.push(c.$observe("id", e))) : a.attr(g.name, g.value || "required" !== g.name && "multiple" !== g.name ? g.value : g.name))
+ }
+ }
+
+ function o() {
+ if (k()) return b;
+ var a = angular.element('<input type="file">'), c = angular.element("<label>upload</label>");
+ return c.css("visibility", "hidden").css("position", "absolute").css("overflow", "hidden").css("width", "0px").css("height", "0px").css("border", "none").css("margin", "0px").css("padding", "0px").attr("tabindex", "-1"), n(a, c), g.push({
+ el: b,
+ ref: c
+ }), document.body.appendChild(c.append(a)[0]), a
+ }
+
+ function p(c) {
+ if (b.attr("disabled")) return !1;
+ if (!t("ngfSelectDisabled", a)) {
+ var d = q(c);
+ if (null != d) return d;
+ r(c);
+ try {
+ k() || document.body.contains(x[0]) || (g.push({
+ el: b,
+ ref: x.parent()
+ }), document.body.appendChild(x.parent()[0]), x.bind("change", m))
+ } catch (f) {
+ }
+ return e(navigator.userAgent) ? setTimeout(function () {
+ x[0].click()
+ }, 0) : x[0].click(), !1
+ }
+ }
+
+ function q(a) {
+ var b = a.changedTouches || a.originalEvent && a.originalEvent.changedTouches;
+ if (b) {
+ if ("touchstart" === a.type) return w = b[0].clientX, v = b[0].clientY, !0;
+ if ("touchend" === a.type) {
+ var c = b[0].clientX, d = b[0].clientY;
+ if (Math.abs(c - w) > 20 || Math.abs(d - v) > 20) return a.stopPropagation(), a.preventDefault(), !1
+ }
+ return !0
+ }
+ }
+
+ function r(b) {
+ j.shouldUpdateOn("click", c, a) && x.val() && (x.val(null), j.updateModel(d, c, a, l(), null, b, !0))
+ }
+
+ function s(a) {
+ if (x && !x.attr("__ngf_ie10_Fix_")) {
+ if (!x[0].parentNode) return void(x = null);
+ a.preventDefault(), a.stopPropagation(), x.unbind("click");
+ var b = x.clone();
+ return x.replaceWith(b), x = b, x.attr("__ngf_ie10_Fix_", "true"), x.bind("change", m), x.bind("click", s), x[0].click(), !1
+ }
+ x.removeAttr("__ngf_ie10_Fix_")
+ }
+
+ var t = function (a, b) {
+ return j.attrGetter(a, c, b)
+ };
+ j.registerModelChangeValidator(d, c, a);
+ var u = [];
+ t("ngfMultiple") && u.push(a.$watch(t("ngfMultiple"), function () {
+ x.attr("multiple", t("ngfMultiple", a))
+ })), t("ngfCapture") && u.push(a.$watch(t("ngfCapture"), function () {
+ x.attr("capture", t("ngfCapture", a))
+ })), t("ngfAccept") && u.push(a.$watch(t("ngfAccept"), function () {
+ x.attr("accept", t("ngfAccept", a))
+ })), u.push(c.$observe("accept", function () {
+ x.attr("accept", t("accept"))
+ }));
+ var v = 0, w = 0, x = b;
+ k() || (x = o()), x.bind("change", m), k() ? b.bind("click", r) : b.bind("click touchstart touchend", p), -1 !== navigator.appVersion.indexOf("MSIE 10") && x.bind("click", s), d && d.$formatters.push(function (a) {
+ return (null == a || 0 === a.length) && x.val() && x.val(null), a
+ }), a.$on("$destroy", function () {
+ k() || x.parent().remove(), angular.forEach(u, function (a) {
+ a()
+ })
+ }), h(function () {
+ for (var a = 0; a < g.length; a++) {
+ var b = g[a];
+ document.body.contains(b.el[0]) || (g.splice(a, 1), b.ref.remove())
+ }
+ }), window.FileAPI && window.FileAPI.ngfFixIE && window.FileAPI.ngfFixIE(b, x, m)
+ }
+
+ var g = [];
+ return {
+ restrict: "AEC", require: "?ngModel", link: function (e, g, h, i) {
+ f(e, g, h, i, a, b, c, d)
+ }
+ }
+}]), function () {
+ function a(a) {
+ return "img" === a.tagName.toLowerCase() ? "image" : "audio" === a.tagName.toLowerCase() ? "audio" : "video" === a.tagName.toLowerCase() ? "video" : /./
+ }
+
+ function b(b, c, d, e, f, g, h, i) {
+ function j(a) {
+ var g = b.attrGetter("ngfNoObjectUrl", f, d);
+ b.dataUrl(a, g)["finally"](function () {
+ c(function () {
+ var b = (g ? a.$ngfDataUrl : a.$ngfBlobUrl) || a.$ngfDataUrl;
+ i ? e.css("background-image", "url('" + (b || "") + "')") : e.attr("src", b), b ? e.removeClass("ng-hide") : e.addClass("ng-hide")
+ })
+ })
+ }
+
+ c(function () {
+ var c = d.$watch(f[g], function (c) {
+ var k = h;
+ if ("ngfThumbnail" === g && (k || (k = {
+ width: e[0].naturalWidth || e[0].clientWidth,
+ height: e[0].naturalHeight || e[0].clientHeight
+ }), 0 === k.width && window.getComputedStyle)) {
+ var l = getComputedStyle(e[0]);
+ l.width && l.width.indexOf("px") > -1 && l.height && l.height.indexOf("px") > -1 && (k = {
+ width: parseInt(l.width.slice(0, -2)),
+ height: parseInt(l.height.slice(0, -2))
+ })
+ }
+ return angular.isString(c) ? (e.removeClass("ng-hide"), i ? e.css("background-image", "url('" + c + "')") : e.attr("src", c)) : void(!c || !c.type || 0 !== c.type.search(a(e[0])) || i && 0 !== c.type.indexOf("image") ? e.addClass("ng-hide") : k && b.isResizeSupported() ? (k.resizeIf = function (a, e) {
+ return b.attrGetter("ngfResizeIf", f, d, {$width: a, $height: e, $file: c})
+ }, b.resize(c, k).then(function (a) {
+ j(a)
+ }, function (a) {
+ throw a
+ })) : j(c))
+ });
+ d.$on("$destroy", function () {
+ c()
+ })
+ })
+ }
+
+ ngFileUpload.service("UploadDataUrl", ["UploadBase", "$timeout", "$q", function (a, b, c) {
+ var d = a;
+ return d.base64DataUrl = function (a) {
+ if (angular.isArray(a)) {
+ var b = c.defer(), e = 0;
+ return angular.forEach(a, function (c) {
+ d.dataUrl(c, !0)["finally"](function () {
+ if (e++, e === a.length) {
+ var c = [];
+ angular.forEach(a, function (a) {
+ c.push(a.$ngfDataUrl)
+ }), b.resolve(c, a)
+ }
+ })
+ }), b.promise
+ }
+ return d.dataUrl(a, !0)
+ }, d.dataUrl = function (a, e) {
+ if (!a) return d.emptyPromise(a, a);
+ if (e && null != a.$ngfDataUrl || !e && null != a.$ngfBlobUrl) return d.emptyPromise(e ? a.$ngfDataUrl : a.$ngfBlobUrl, a);
+ var f = e ? a.$$ngfDataUrlPromise : a.$$ngfBlobUrlPromise;
+ if (f) return f;
+ var g = c.defer();
+ return b(function () {
+ if (window.FileReader && a && (!window.FileAPI || -1 === navigator.userAgent.indexOf("MSIE 8") || a.size < 2e4) && (!window.FileAPI || -1 === navigator.userAgent.indexOf("MSIE 9") || a.size < 4e6)) {
+ var c = window.URL || window.webkitURL;
+ if (c && c.createObjectURL && !e) {
+ var f;
+ try {
+ f = c.createObjectURL(a)
+ } catch (h) {
+ return void b(function () {
+ a.$ngfBlobUrl = "", g.reject()
+ })
+ }
+ b(function () {
+ if (a.$ngfBlobUrl = f, f) {
+ g.resolve(f, a), d.blobUrls = d.blobUrls || [], d.blobUrlsTotalSize = d.blobUrlsTotalSize || 0, d.blobUrls.push({
+ url: f,
+ size: a.size
+ }), d.blobUrlsTotalSize += a.size || 0;
+ for (var b = d.defaults.blobUrlsMaxMemory || 268435456, e = d.defaults.blobUrlsMaxQueueSize || 200; (d.blobUrlsTotalSize > b || d.blobUrls.length > e) && d.blobUrls.length > 1;) {
+ var h = d.blobUrls.splice(0, 1)[0];
+ c.revokeObjectURL(h.url), d.blobUrlsTotalSize -= h.size
+ }
+ }
+ })
+ } else {
+ var i = new FileReader;
+ i.onload = function (c) {
+ b(function () {
+ a.$ngfDataUrl = c.target.result, g.resolve(c.target.result, a), b(function () {
+ delete a.$ngfDataUrl
+ }, 1e3)
+ })
+ }, i.onerror = function () {
+ b(function () {
+ a.$ngfDataUrl = "", g.reject()
+ })
+ }, i.readAsDataURL(a)
+ }
+ } else b(function () {
+ a[e ? "$ngfDataUrl" : "$ngfBlobUrl"] = "", g.reject()
+ })
+ }), f = e ? a.$$ngfDataUrlPromise = g.promise : a.$$ngfBlobUrlPromise = g.promise, f["finally"](function () {
+ delete a[e ? "$$ngfDataUrlPromise" : "$$ngfBlobUrlPromise"]
+ }), f
+ }, d
+ }]), ngFileUpload.directive("ngfSrc", ["Upload", "$timeout", function (a, c) {
+ return {
+ restrict: "AE", link: function (d, e, f) {
+ b(a, c, d, e, f, "ngfSrc", a.attrGetter("ngfResize", f, d), !1)
+ }
+ }
+ }]), ngFileUpload.directive("ngfBackground", ["Upload", "$timeout", function (a, c) {
+ return {
+ restrict: "AE", link: function (d, e, f) {
+ b(a, c, d, e, f, "ngfBackground", a.attrGetter("ngfResize", f, d), !0)
+ }
+ }
+ }]), ngFileUpload.directive("ngfThumbnail", ["Upload", "$timeout", function (a, c) {
+ return {
+ restrict: "AE", link: function (d, e, f) {
+ var g = a.attrGetter("ngfSize", f, d);
+ b(a, c, d, e, f, "ngfThumbnail", g, a.attrGetter("ngfAsBackground", f, d))
+ }
+ }
+ }]), ngFileUpload.config(["$compileProvider", function (a) {
+ a.imgSrcSanitizationWhitelist && a.imgSrcSanitizationWhitelist(/^\s*(https?|ftp|mailto|tel|webcal|local|file|data|blob):/), a.aHrefSanitizationWhitelist && a.aHrefSanitizationWhitelist(/^\s*(https?|ftp|mailto|tel|webcal|local|file|data|blob):/)
+ }]), ngFileUpload.filter("ngfDataUrl", ["UploadDataUrl", "$sce", function (a, b) {
+ return function (c, d, e) {
+ if (angular.isString(c)) return b.trustAsResourceUrl(c);
+ var f = c && ((d ? c.$ngfDataUrl : c.$ngfBlobUrl) || c.$ngfDataUrl);
+ return c && !f ? (!c.$ngfDataUrlFilterInProgress && angular.isObject(c) && (c.$ngfDataUrlFilterInProgress = !0, a.dataUrl(c, d)), "") : (c && delete c.$ngfDataUrlFilterInProgress, (c && f ? e ? b.trustAsResourceUrl(f) : f : c) || "")
+ }
+ }])
+}(), ngFileUpload.service("UploadValidate", ["UploadDataUrl", "$q", "$timeout", function (a, b, c) {
+ function d(a) {
+ var b = "", c = [];
+ if (a.length > 2 && "/" === a[0] && "/" === a[a.length - 1]) b = a.substring(1, a.length - 1); else {
+ var e = a.split(",");
+ if (e.length > 1) for (var f = 0; f < e.length; f++) {
+ var g = d(e[f]);
+ g.regexp ? (b += "(" + g.regexp + ")", f < e.length - 1 && (b += "|")) : c = c.concat(g.excludes)
+ } else 0 === a.indexOf("!") ? c.push("^((?!" + d(a.substring(1)).regexp + ").)*$") : (0 === a.indexOf(".") && (a = "*" + a), b = "^" + a.replace(new RegExp("[.\\\\+*?\\[\\^\\]$(){}=!<>|:\\-]", "g"), "\\$&") + "$", b = b.replace(/\\\*/g, ".*").replace(/\\\?/g, "."))
+ }
+ return {regexp: b, excludes: c}
+ }
+
+ function e(a, b) {
+ null == b || a.$dirty || (a.$setDirty ? a.$setDirty() : a.$dirty = !0)
+ }
+
+ var f = a;
+ return f.validatePattern = function (a, b) {
+ if (!b) return !0;
+ var c = d(b), e = !0;
+ if (c.regexp && c.regexp.length) {
+ var f = new RegExp(c.regexp, "i");
+ e = null != a.type && f.test(a.type) || null != a.name && f.test(a.name)
+ }
+ for (var g = c.excludes.length; g--;) {
+ var h = new RegExp(c.excludes[g], "i");
+ e = e && (null == a.type || h.test(a.type)) && (null == a.name || h.test(a.name))
+ }
+ return e
+ }, f.ratioToFloat = function (a) {
+ var b = a.toString(), c = b.search(/[x:]/i);
+ return b = c > -1 ? parseFloat(b.substring(0, c)) / parseFloat(b.substring(c + 1)) : parseFloat(b)
+ }, f.registerModelChangeValidator = function (a, b, c) {
+ a && a.$formatters.push(function (d) {
+ if (a.$dirty) {
+ var e = d;
+ d && !angular.isArray(d) && (e = [d]), f.validate(e, 0, a, b, c).then(function () {
+ f.applyModelValidation(a, e)
+ })
+ }
+ return d
+ })
+ }, f.applyModelValidation = function (a, b) {
+ e(a, b), angular.forEach(a.$ngfValidations, function (b) {
+ a.$setValidity(b.name, b.valid)
+ })
+ }, f.getValidationAttr = function (a, b, c, d, e) {
+ var g = "ngf" + c[0].toUpperCase() + c.substr(1), h = f.attrGetter(g, a, b, {$file: e});
+ if (null == h && (h = f.attrGetter("ngfValidate", a, b, {$file: e}))) {
+ var i = (d || c).split(".");
+ h = h[i[0]], i.length > 1 && (h = h && h[i[1]])
+ }
+ return h
+ }, f.validate = function (a, c, d, e, g) {
+ function h(b, c, h) {
+ if (a) {
+ for (var i = a.length, j = null; i--;) {
+ var n = a[i];
+ if (n) {
+ var o = f.getValidationAttr(e, g, b, c, n);
+ null != o && (h(n, o, i) || (-1 === k.indexOf(b) ? (n.$error = b, (n.$errorMessages = n.$errorMessages || {})[b] = !0, n.$errorParam = o, -1 === m.indexOf(n) && m.push(n), l || a.splice(i, 1), j = !1) : a.splice(i, 1)))
+ }
+ }
+ null !== j && d.$ngfValidations.push({name: b, valid: j})
+ }
+ }
+
+ function i(c, h, i, n, o) {
+ function p(b, d, e) {
+ function f(f) {
+ if (f()) if (-1 === k.indexOf(c)) {
+ if (d.$error = c, (d.$errorMessages = d.$errorMessages || {})[c] = !0, d.$errorParam = e, -1 === m.indexOf(d) && m.push(d), !l) {
+ var g = a.indexOf(d);
+ g > -1 && a.splice(g, 1)
+ }
+ b.resolve(!1)
+ } else {
+ var h = a.indexOf(d);
+ h > -1 && a.splice(h, 1), b.resolve(!0)
+ } else b.resolve(!0)
+ }
+
+ null != e ? n(d, e).then(function (a) {
+ f(function () {
+ return !o(a, e)
+ })
+ }, function () {
+ f(function () {
+ return j("ngfValidateForce", {$file: d})
+ })
+ }) : b.resolve(!0)
+ }
+
+ var q = [f.emptyPromise(!0)];
+ a && (a = void 0 === a.length ? [a] : a, angular.forEach(a, function (a) {
+ var d = b.defer();
+ return q.push(d.promise), !i || null != a.type && 0 === a.type.search(i) ? void("dimensions" === c && null != f.attrGetter("ngfDimensions", e) ? f.imageDimensions(a).then(function (b) {
+ p(d, a, j("ngfDimensions", {$file: a, $width: b.width, $height: b.height}))
+ }, function () {
+ d.resolve(!1)
+ }) : "duration" === c && null != f.attrGetter("ngfDuration", e) ? f.mediaDuration(a).then(function (b) {
+ p(d, a, j("ngfDuration", {$file: a, $duration: b}))
+ }, function () {
+ d.resolve(!1)
+ }) : p(d, a, f.getValidationAttr(e, g, c, h, a))) : void d.resolve(!0)
+ }));
+ var r = b.defer();
+ return b.all(q).then(function (a) {
+ for (var b = !0, e = 0; e < a.length; e++) if (!a[e]) {
+ b = !1;
+ break
+ }
+ d.$ngfValidations.push({name: c, valid: b}), r.resolve(b)
+ }), r.promise
+ }
+
+ d = d || {}, d.$ngfValidations = d.$ngfValidations || [], angular.forEach(d.$ngfValidations, function (a) {
+ a.valid = !0
+ });
+ var j = function (a, b) {
+ return f.attrGetter(a, e, g, b)
+ }, k = (f.attrGetter("ngfIgnoreInvalid", e, g) || "").split(" "),
+ l = f.attrGetter("ngfRunAllValidations", e, g);
+ if (null == a || 0 === a.length) return f.emptyPromise({validFiles: a, invalidFiles: []});
+ a = void 0 === a.length ? [a] : a.slice(0);
+ var m = [];
+ h("pattern", null, f.validatePattern), h("minSize", "size.min", function (a, b) {
+ return a.size + .1 >= f.translateScalars(b)
+ }), h("maxSize", "size.max", function (a, b) {
+ return a.size - .1 <= f.translateScalars(b)
+ });
+ var n = 0;
+ if (h("maxTotalSize", null, function (b, c) {
+ return n += b.size, n > f.translateScalars(c) ? (a.splice(0, a.length), !1) : !0
+ }), h("validateFn", null, function (a, b) {
+ return b === !0 || null === b || "" === b
+ }), !a.length) return f.emptyPromise({validFiles: [], invalidFiles: m});
+ var o = b.defer(), p = [];
+ return p.push(i("maxHeight", "height.max", /image/, this.imageDimensions, function (a, b) {
+ return a.height <= b
+ })), p.push(i("minHeight", "height.min", /image/, this.imageDimensions, function (a, b) {
+ return a.height >= b
+ })), p.push(i("maxWidth", "width.max", /image/, this.imageDimensions, function (a, b) {
+ return a.width <= b
+ })), p.push(i("minWidth", "width.min", /image/, this.imageDimensions, function (a, b) {
+ return a.width >= b
+ })), p.push(i("dimensions", null, /image/, function (a, b) {
+ return f.emptyPromise(b)
+ }, function (a) {
+ return a
+ })), p.push(i("ratio", null, /image/, this.imageDimensions, function (a, b) {
+ for (var c = b.toString().split(","), d = !1, e = 0; e < c.length; e++) Math.abs(a.width / a.height - f.ratioToFloat(c[e])) < .01 && (d = !0);
+ return d
+ })), p.push(i("maxRatio", "ratio.max", /image/, this.imageDimensions, function (a, b) {
+ return a.width / a.height - f.ratioToFloat(b) < 1e-4
+ })), p.push(i("minRatio", "ratio.min", /image/, this.imageDimensions, function (a, b) {
+ return a.width / a.height - f.ratioToFloat(b) > -1e-4
+ })), p.push(i("maxDuration", "duration.max", /audio|video/, this.mediaDuration, function (a, b) {
+ return a <= f.translateScalars(b)
+ })), p.push(i("minDuration", "duration.min", /audio|video/, this.mediaDuration, function (a, b) {
+ return a >= f.translateScalars(b)
+ })), p.push(i("duration", null, /audio|video/, function (a, b) {
+ return f.emptyPromise(b)
+ }, function (a) {
+ return a
+ })), p.push(i("validateAsyncFn", null, null, function (a, b) {
+ return b
+ }, function (a) {
+ return a === !0 || null === a || "" === a
+ })), b.all(p).then(function () {
+ if (l) for (var b = 0; b < a.length; b++) {
+ var d = a[b];
+ d.$error && a.splice(b--, 1)
+ }
+ l = !1, h("maxFiles", null, function (a, b, d) {
+ return b > c + d
+ }), o.resolve({validFiles: a, invalidFiles: m})
+ }), o.promise
+ }, f.imageDimensions = function (a) {
+ if (a.$ngfWidth && a.$ngfHeight) {
+ var d = b.defer();
+ return c(function () {
+ d.resolve({width: a.$ngfWidth, height: a.$ngfHeight})
+ }), d.promise
+ }
+ if (a.$ngfDimensionPromise) return a.$ngfDimensionPromise;
+ var e = b.defer();
+ return c(function () {
+ return 0 !== a.type.indexOf("image") ? void e.reject("not image") : void f.dataUrl(a).then(function (b) {
+ function d() {
+ var b = h[0].naturalWidth || h[0].clientWidth, c = h[0].naturalHeight || h[0].clientHeight;
+ h.remove(), a.$ngfWidth = b, a.$ngfHeight = c, e.resolve({width: b, height: c})
+ }
+
+ function f() {
+ h.remove(), e.reject("load error")
+ }
+
+ function g() {
+ c(function () {
+ h[0].parentNode && (h[0].clientWidth ? d() : i++ > 10 ? f() : g())
+ }, 1e3)
+ }
+
+ var h = angular.element("<img>").attr("src", b).css("visibility", "hidden").css("position", "fixed").css("max-width", "none !important").css("max-height", "none !important");
+ h.on("load", d), h.on("error", f);
+ var i = 0;
+ g(), angular.element(document.getElementsByTagName("body")[0]).append(h)
+ }, function () {
+ e.reject("load error")
+ })
+ }), a.$ngfDimensionPromise = e.promise, a.$ngfDimensionPromise["finally"](function () {
+ delete a.$ngfDimensionPromise
+ }), a.$ngfDimensionPromise
+ }, f.mediaDuration = function (a) {
+ if (a.$ngfDuration) {
+ var d = b.defer();
+ return c(function () {
+ d.resolve(a.$ngfDuration)
+ }), d.promise
+ }
+ if (a.$ngfDurationPromise) return a.$ngfDurationPromise;
+ var e = b.defer();
+ return c(function () {
+ return 0 !== a.type.indexOf("audio") && 0 !== a.type.indexOf("video") ? void e.reject("not media") : void f.dataUrl(a).then(function (b) {
+ function d() {
+ var b = h[0].duration;
+ a.$ngfDuration = b, h.remove(), e.resolve(b)
+ }
+
+ function f() {
+ h.remove(), e.reject("load error")
+ }
+
+ function g() {
+ c(function () {
+ h[0].parentNode && (h[0].duration ? d() : i > 10 ? f() : g())
+ }, 1e3)
+ }
+
+ var h = angular.element(0 === a.type.indexOf("audio") ? "<audio>" : "<video>").attr("src", b).css("visibility", "none").css("position", "fixed");
+ h.on("loadedmetadata", d), h.on("error", f);
+ var i = 0;
+ g(), angular.element(document.body).append(h)
+ }, function () {
+ e.reject("load error")
+ })
+ }), a.$ngfDurationPromise = e.promise, a.$ngfDurationPromise["finally"](function () {
+ delete a.$ngfDurationPromise
+ }), a.$ngfDurationPromise
+ }, f
+}]), ngFileUpload.service("UploadResize", ["UploadValidate", "$q", function (a, b) {
+ var c = a, d = function (a, b, c, d, e) {
+ var f = e ? Math.max(c / a, d / b) : Math.min(c / a, d / b);
+ return {width: a * f, height: b * f, marginX: a * f - c, marginY: b * f - d}
+ }, e = function (a, e, f, g, h, i, j, k) {
+ var l = b.defer(), m = document.createElement("canvas"), n = document.createElement("img");
+ return n.setAttribute("style", "visibility:hidden;position:fixed;z-index:-100000"), document.body.appendChild(n), n.onload = function () {
+ var a = n.width, b = n.height;
+ if (n.parentNode.removeChild(n), null != k && k(a, b) === !1) return void l.reject("resizeIf");
+ try {
+ if (i) {
+ var o = c.ratioToFloat(i), p = a / b;
+ o > p ? (e = a, f = e / o) : (f = b, e = f * o)
+ }
+ e || (e = a), f || (f = b);
+ var q = d(a, b, e, f, j);
+ m.width = Math.min(q.width, e), m.height = Math.min(q.height, f);
+ var r = m.getContext("2d");
+ r.drawImage(n, Math.min(0, -q.marginX / 2), Math.min(0, -q.marginY / 2), q.width, q.height), l.resolve(m.toDataURL(h || "image/WebP", g || .934))
+ } catch (s) {
+ l.reject(s)
+ }
+ }, n.onerror = function () {
+ n.parentNode.removeChild(n), l.reject()
+ }, n.src = a, l.promise
+ };
+ return c.dataUrltoBlob = function (a, b, c) {
+ for (var d = a.split(","), e = d[0].match(/:(.*?);/)[1], f = atob(d[1]), g = f.length, h = new Uint8Array(g); g--;) h[g] = f.charCodeAt(g);
+ var i = new window.Blob([h], {type: e});
+ return i.name = b, i.$ngfOrigSize = c, i
+ }, c.isResizeSupported = function () {
+ var a = document.createElement("canvas");
+ return window.atob && a.getContext && a.getContext("2d") && window.Blob
+ }, c.isResizeSupported() && Object.defineProperty(window.Blob.prototype, "name", {
+ get: function () {
+ return this.$ngfName
+ }, set: function (a) {
+ this.$ngfName = a
+ }, configurable: !0
+ }), c.resize = function (a, d) {
+ if (0 !== a.type.indexOf("image")) return c.emptyPromise(a);
+ var f = b.defer();
+ return c.dataUrl(a, !0).then(function (b) {
+ e(b, d.width, d.height, d.quality, d.type || a.type, d.ratio, d.centerCrop, d.resizeIf).then(function (e) {
+ if ("image/jpeg" === a.type && d.restoreExif !== !1) try {
+ e = c.restoreExif(b, e)
+ } catch (g) {
+ setTimeout(function () {
+ throw g
+ }, 1)
+ }
+ try {
+ var h = c.dataUrltoBlob(e, a.name, a.size);
+ f.resolve(h)
+ } catch (g) {
+ f.reject(g)
+ }
+ }, function (b) {
+ "resizeIf" === b && f.resolve(a), f.reject(b)
+ })
+ }, function (a) {
+ f.reject(a)
+ }), f.promise
+ }, c
+}]), function () {
+ function a(a, c, d, e, f, g, h, i, j, k) {
+ function l() {
+ return c.attr("disabled") || s("ngfDropDisabled", a)
+ }
+
+ function m(b, c, d) {
+ if (b) {
+ var e;
+ try {
+ e = b && b.getData && b.getData("text/html")
+ } catch (f) {
+ }
+ q(b.items, b.files, s("ngfAllowDir", a) !== !1, s("multiple") || s("ngfMultiple", a)).then(function (a) {
+ a.length ? n(a, c) : o(d, e).then(function (a) {
+ n(a, c)
+ })
+ })
+ }
+ }
+
+ function n(b, c) {
+ i.updateModel(e, d, a, s("ngfChange") || s("ngfDrop"), b, c)
+ }
+
+ function o(b, c) {
+ if (!i.shouldUpdateOn(b, d, a) || "string" != typeof c) return i.rejectPromise([]);
+ var e = [];
+ c.replace(/<(img src|img [^>]* src) *=\"([^\"]*)\"/gi, function (a, b, c) {
+ e.push(c)
+ });
+ var f = [], g = [];
+ if (e.length) {
+ angular.forEach(e, function (a) {
+ f.push(i.urlToBlob(a).then(function (a) {
+ g.push(a)
+ }))
+ });
+ var h = k.defer();
+ return k.all(f).then(function () {
+ h.resolve(g)
+ }, function (a) {
+ h.reject(a)
+ }), h.promise
+ }
+ return i.emptyPromise()
+ }
+
+ function p(a, b, c, d) {
+ var e = s("ngfDragOverClass", a, {$event: c}), f = "dragover";
+ if (angular.isString(e)) f = e; else if (e && (e.delay && (w = e.delay), e.accept || e.reject)) {
+ var g = c.dataTransfer.items;
+ if (null != g && g.length) for (var h = e.pattern || s("ngfPattern", a, {$event: c}), j = g.length; j--;) {
+ if (!i.validatePattern(g[j], h)) {
+ f = e.reject;
+ break
+ }
+ f = e.accept
+ } else f = e.accept
+ }
+ d(f)
+ }
+
+ function q(b, c, e, f) {
+ function g(a, b) {
+ var c = k.defer();
+ if (null != a) if (a.isDirectory) {
+ var d = [i.emptyPromise()];
+ if (m) {
+ var e = {type: "directory"};
+ e.name = e.path = (b || "") + a.name, n.push(e)
+ }
+ var f = a.createReader(), h = [], p = function () {
+ f.readEntries(function (e) {
+ try {
+ e.length ? (h = h.concat(Array.prototype.slice.call(e || [], 0)), p()) : (angular.forEach(h.slice(0), function (c) {
+ n.length <= j && l >= o && d.push(g(c, (b ? b : "") + a.name + "/"))
+ }), k.all(d).then(function () {
+ c.resolve()
+ }, function (a) {
+ c.reject(a)
+ }))
+ } catch (f) {
+ c.reject(f)
+ }
+ }, function (a) {
+ c.reject(a)
+ })
+ };
+ p()
+ } else a.file(function (a) {
+ try {
+ a.path = (b ? b : "") + a.name, m && (a = i.rename(a, a.path)), n.push(a), o += a.size, c.resolve()
+ } catch (d) {
+ c.reject(d)
+ }
+ }, function (a) {
+ c.reject(a)
+ });
+ return c.promise
+ }
+
+ var j = i.getValidationAttr(d, a, "maxFiles");
+ null == j && (j = Number.MAX_VALUE);
+ var l = i.getValidationAttr(d, a, "maxTotalSize");
+ null == l && (l = Number.MAX_VALUE);
+ var m = s("ngfIncludeDir", a), n = [], o = 0, p = [i.emptyPromise()];
+ if (b && b.length > 0 && "file:" !== h.location.protocol) for (var q = 0; q < b.length; q++) {
+ if (b[q].webkitGetAsEntry && b[q].webkitGetAsEntry() && b[q].webkitGetAsEntry().isDirectory) {
+ var r = b[q].webkitGetAsEntry();
+ if (r.isDirectory && !e) continue;
+ null != r && p.push(g(r))
+ } else {
+ var t = b[q].getAsFile();
+ null != t && (n.push(t), o += t.size)
+ }
+ if (n.length > j || o > l || !f && n.length > 0) break
+ } else if (null != c) for (var u = 0; u < c.length; u++) {
+ var v = c.item(u);
+ if ((v.type || v.size > 0) && (n.push(v), o += v.size), n.length > j || o > l || !f && n.length > 0) break
+ }
+ var w = k.defer();
+ return k.all(p).then(function () {
+ if (f || m || !n.length) w.resolve(n); else {
+ for (var a = 0; n[a] && "directory" === n[a].type;) a++;
+ w.resolve([n[a]])
+ }
+ }, function (a) {
+ w.reject(a)
+ }), w.promise
+ }
+
+ var r = b(), s = function (a, b, c) {
+ return i.attrGetter(a, d, b, c)
+ };
+ if (s("dropAvailable") && g(function () {
+ a[s("dropAvailable")] ? a[s("dropAvailable")].value = r : a[s("dropAvailable")] = r
+ }), !r) return void(s("ngfHideOnDropNotAvailable", a) === !0 && c.css("display", "none"));
+ null == s("ngfSelect") && i.registerModelChangeValidator(e, d, a);
+ var t, u = null, v = f(s("ngfStopPropagation")), w = 1;
+ c[0].addEventListener("dragover", function (b) {
+ if (!l() && i.shouldUpdateOn("drop", d, a)) {
+ if (b.preventDefault(), v(a) && b.stopPropagation(), navigator.userAgent.indexOf("Chrome") > -1) {
+ var e = b.dataTransfer.effectAllowed;
+ b.dataTransfer.dropEffect = "move" === e || "linkMove" === e ? "move" : "copy"
+ }
+ g.cancel(u), t || (t = "C", p(a, d, b, function (d) {
+ t = d, c.addClass(t), s("ngfDrag", a, {$isDragging: !0, $class: t, $event: b})
+ }))
+ }
+ }, !1), c[0].addEventListener("dragenter", function (b) {
+ !l() && i.shouldUpdateOn("drop", d, a) && (b.preventDefault(), v(a) && b.stopPropagation())
+ }, !1), c[0].addEventListener("dragleave", function (b) {
+ !l() && i.shouldUpdateOn("drop", d, a) && (b.preventDefault(),
+ v(a) && b.stopPropagation(), u = g(function () {
+ t && c.removeClass(t), t = null, s("ngfDrag", a, {$isDragging: !1, $event: b})
+ }, w || 100))
+ }, !1), c[0].addEventListener("drop", function (b) {
+ !l() && i.shouldUpdateOn("drop", d, a) && (b.preventDefault(), v(a) && b.stopPropagation(), t && c.removeClass(t), t = null, m(b.dataTransfer, b, "dropUrl"))
+ }, !1), c[0].addEventListener("paste", function (b) {
+ navigator.userAgent.toLowerCase().indexOf("firefox") > -1 && s("ngfEnableFirefoxPaste", a) && b.preventDefault(), !l() && i.shouldUpdateOn("paste", d, a) && m(b.clipboardData || b.originalEvent.clipboardData, b, "pasteUrl")
+ }, !1), navigator.userAgent.toLowerCase().indexOf("firefox") > -1 && s("ngfEnableFirefoxPaste", a) && (c.attr("contenteditable", !0), c.on("keypress", function (a) {
+ a.metaKey || a.ctrlKey || a.preventDefault()
+ }))
+ }
+
+ function b() {
+ var a = document.createElement("div");
+ return "draggable" in a && "ondrop" in a && !/Edge\/12./i.test(navigator.userAgent)
+ }
+
+ ngFileUpload.directive("ngfDrop", ["$parse", "$timeout", "$window", "Upload", "$http", "$q", function (b, c, d, e, f, g) {
+ return {
+ restrict: "AEC", require: "?ngModel", link: function (h, i, j, k) {
+ a(h, i, j, k, b, c, d, e, f, g)
+ }
+ }
+ }]), ngFileUpload.directive("ngfNoFileDrop", function () {
+ return function (a, c) {
+ b() && c.css("display", "none")
+ }
+ }), ngFileUpload.directive("ngfDropAvailable", ["$parse", "$timeout", "Upload", function (a, c, d) {
+ return function (e, f, g) {
+ if (b()) {
+ var h = a(d.attrGetter("ngfDropAvailable", g));
+ c(function () {
+ h(e), h.assign && h.assign(e, !0)
+ })
+ }
+ }
+ }])
+}(), ngFileUpload.service("UploadExif", ["UploadResize", "$q", function (a, b) {
+ function c(a, b, c, d) {
+ switch (b) {
+ case 2:
+ return a.transform(-1, 0, 0, 1, c, 0);
+ case 3:
+ return a.transform(-1, 0, 0, -1, c, d);
+ case 4:
+ return a.transform(1, 0, 0, -1, 0, d);
+ case 5:
+ return a.transform(0, 1, 1, 0, 0, 0);
+ case 6:
+ return a.transform(0, 1, -1, 0, d, 0);
+ case 7:
+ return a.transform(0, -1, -1, 0, d, c);
+ case 8:
+ return a.transform(0, -1, 1, 0, 0, c)
+ }
+ }
+
+ function d(a) {
+ for (var b = "", c = new Uint8Array(a), d = c.byteLength, e = 0; d > e; e++) b += String.fromCharCode(c[e]);
+ return window.btoa(b)
+ }
+
+ var e = a;
+ return e.isExifSupported = function () {
+ return window.FileReader && (new FileReader).readAsArrayBuffer && e.isResizeSupported()
+ }, e.readOrientation = function (a) {
+ var c = b.defer(), d = new FileReader, e = a.slice ? a.slice(0, 65536) : a;
+ return d.readAsArrayBuffer(e), d.onerror = function (a) {
+ return c.reject(a)
+ }, d.onload = function (a) {
+ var b = {orientation: 1}, d = new DataView(this.result);
+ if (65496 !== d.getUint16(0, !1)) return c.resolve(b);
+ for (var e = d.byteLength, f = 2; e > f;) {
+ var g = d.getUint16(f, !1);
+ if (f += 2, 65505 === g) {
+ if (1165519206 !== d.getUint32(f += 2, !1)) return c.resolve(b);
+ var h = 18761 === d.getUint16(f += 6, !1);
+ f += d.getUint32(f + 4, h);
+ var i = d.getUint16(f, h);
+ f += 2;
+ for (var j = 0; i > j; j++) if (274 === d.getUint16(f + 12 * j, h)) {
+ var k = d.getUint16(f + 12 * j + 8, h);
+ return k >= 2 && 8 >= k && (d.setUint16(f + 12 * j + 8, 1, h), b.fixedArrayBuffer = a.target.result), b.orientation = k, c.resolve(b)
+ }
+ } else {
+ if (65280 !== (65280 & g)) break;
+ f += d.getUint16(f, !1)
+ }
+ }
+ return c.resolve(b)
+ }, c.promise
+ }, e.applyExifRotation = function (a) {
+ if (0 !== a.type.indexOf("image/jpeg")) return e.emptyPromise(a);
+ var f = b.defer();
+ return e.readOrientation(a).then(function (b) {
+ return b.orientation < 2 || b.orientation > 8 ? f.resolve(a) : void e.dataUrl(a, !0).then(function (g) {
+ var h = document.createElement("canvas"), i = document.createElement("img");
+ i.onload = function () {
+ try {
+ h.width = b.orientation > 4 ? i.height : i.width, h.height = b.orientation > 4 ? i.width : i.height;
+ var g = h.getContext("2d");
+ c(g, b.orientation, i.width, i.height), g.drawImage(i, 0, 0);
+ var j = h.toDataURL(a.type || "image/WebP", .934);
+ j = e.restoreExif(d(b.fixedArrayBuffer), j);
+ var k = e.dataUrltoBlob(j, a.name);
+ f.resolve(k)
+ } catch (l) {
+ return f.reject(l)
+ }
+ }, i.onerror = function () {
+ f.reject()
+ }, i.src = g
+ }, function (a) {
+ f.reject(a)
+ })
+ }, function (a) {
+ f.reject(a)
+ }), f.promise
+ }, e.restoreExif = function (a, b) {
+ var c = {};
+ return c.KEY_STR = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=", c.encode64 = function (a) {
+ var b, c, d, e, f, g = "", h = "", i = "", j = 0;
+ do b = a[j++], c = a[j++], h = a[j++], d = b >> 2, e = (3 & b) << 4 | c >> 4, f = (15 & c) << 2 | h >> 6, i = 63 & h, isNaN(c) ? f = i = 64 : isNaN(h) && (i = 64), g = g + this.KEY_STR.charAt(d) + this.KEY_STR.charAt(e) + this.KEY_STR.charAt(f) + this.KEY_STR.charAt(i), b = c = h = "", d = e = f = i = ""; while (j < a.length);
+ return g
+ }, c.restore = function (a, b) {
+ a.match("data:image/jpeg;base64,") && (a = a.replace("data:image/jpeg;base64,", ""));
+ var c = this.decode64(a), d = this.slice2Segments(c), e = this.exifManipulation(b, d);
+ return "data:image/jpeg;base64," + this.encode64(e)
+ }, c.exifManipulation = function (a, b) {
+ var c = this.getExifArray(b), d = this.insertExif(a, c);
+ return new Uint8Array(d)
+ }, c.getExifArray = function (a) {
+ for (var b, c = 0; c < a.length; c++) if (b = a[c], 255 === b[0] & 225 === b[1]) return b;
+ return []
+ }, c.insertExif = function (a, b) {
+ var c = a.replace("data:image/jpeg;base64,", ""), d = this.decode64(c), e = d.indexOf(255, 3),
+ f = d.slice(0, e), g = d.slice(e), h = f;
+ return h = h.concat(b), h = h.concat(g)
+ }, c.slice2Segments = function (a) {
+ for (var b = 0, c = []; ;) {
+ if (255 === a[b] & 218 === a[b + 1]) break;
+ if (255 === a[b] & 216 === a[b + 1]) b += 2; else {
+ var d = 256 * a[b + 2] + a[b + 3], e = b + d + 2, f = a.slice(b, e);
+ c.push(f), b = e
+ }
+ if (b > a.length) break
+ }
+ return c
+ }, c.decode64 = function (a) {
+ var b, c, d, e, f, g = "", h = "", i = 0, j = [], k = /[^A-Za-z0-9\+\/\=]/g;
+ k.exec(a) && console.log("There were invalid base64 characters in the input text.\nValid base64 characters are A-Z, a-z, 0-9, NaNExpect errors in decoding."), a = a.replace(/[^A-Za-z0-9\+\/\=]/g, "");
+ do d = this.KEY_STR.indexOf(a.charAt(i++)), e = this.KEY_STR.indexOf(a.charAt(i++)), f = this.KEY_STR.indexOf(a.charAt(i++)), h = this.KEY_STR.indexOf(a.charAt(i++)), b = d << 2 | e >> 4, c = (15 & e) << 4 | f >> 2, g = (3 & f) << 6 | h, j.push(b), 64 !== f && j.push(c), 64 !== h && j.push(g), b = c = g = "", d = e = f = h = ""; while (i < a.length);
+ return j
+ }, c.restore(a, b)
+ }, e
+}]); \ No newline at end of file