{"version":3,"file":"app.bundle.js","mappings":"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","sources":["webpack://business-engine-client-app/./node_modules/angular-sanitize/angular-sanitize.js","webpack://business-engine-client-app/./node_modules/angular-sanitize/index.js","webpack://business-engine-client-app/./node_modules/ng-file-upload/dist/ng-file-upload-shim.js","webpack://business-engine-client-app/./node_modules/ng-file-upload/dist/ng-file-upload.js","webpack://business-engine-client-app/./src/configs/global.settings.js","webpack://business-engine-client-app/./src/controllers/module.controllers.js","webpack://business-engine-client-app/./src/directives/field.directive.js","webpack://business-engine-client-app/./src/services/action.service.js","webpack://business-engine-client-app/./src/services/expression.service.js","webpack://business-engine-client-app/external var \"jQuery\"","webpack://business-engine-client-app/webpack/bootstrap","webpack://business-engine-client-app/webpack/runtime/compat get default export","webpack://business-engine-client-app/webpack/runtime/define property getters","webpack://business-engine-client-app/webpack/runtime/hasOwnProperty shorthand","webpack://business-engine-client-app/external var \"angular\"","webpack://business-engine-client-app/./src/configs/app.config.js","webpack://business-engine-client-app/./src/app.js","webpack://business-engine-client-app/./src/providers/deferred-events.provider.js","webpack://business-engine-client-app/./src/services/global.service.js","webpack://business-engine-client-app/./src/services/api.service.js","webpack://business-engine-client-app/./src/directives/angular-extended.directive.js","webpack://business-engine-client-app/./src/directives/custom-items.directive.js","webpack://business-engine-client-app/./src/controllers/dashboard.controller.js"],"sourcesContent":["/**\n * @license AngularJS v1.8.3\n * (c) 2010-2020 Google LLC. http://angularjs.org\n * License: MIT\n */\n(function(window, angular) {'use strict';\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Any commits to this file should be reviewed with security in mind. *\n * Changes to this file can potentially create security vulnerabilities. *\n * An approval from 2 Core members with history of modifying *\n * this file is required. *\n * *\n * Does the change somehow allow for arbitrary javascript to be executed? *\n * Or allows for someone to change the prototype of built-in objects? *\n * Or gives undesired access to variables likes document or window? *\n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\nvar $sanitizeMinErr = angular.$$minErr('$sanitize');\nvar bind;\nvar extend;\nvar forEach;\nvar isArray;\nvar isDefined;\nvar lowercase;\nvar noop;\nvar nodeContains;\nvar htmlParser;\nvar htmlSanitizeWriter;\n\n/**\n * @ngdoc module\n * @name ngSanitize\n * @description\n *\n * The `ngSanitize` module provides functionality to sanitize HTML.\n *\n * See {@link ngSanitize.$sanitize `$sanitize`} for usage.\n */\n\n/**\n * @ngdoc service\n * @name $sanitize\n * @kind function\n *\n * @description\n * Sanitizes an html string by stripping all potentially dangerous tokens.\n *\n * The input is sanitized by parsing the HTML into tokens. All safe tokens (from a trusted URI list) are\n * then serialized back to a properly escaped HTML string. This means that no unsafe input can make\n * it into the returned string.\n *\n * The trusted URIs for URL sanitization of attribute values is configured using the functions\n * `aHrefSanitizationTrustedUrlList` and `imgSrcSanitizationTrustedUrlList` of {@link $compileProvider}.\n *\n * The input may also contain SVG markup if this is enabled via {@link $sanitizeProvider}.\n *\n * @param {string} html HTML input.\n * @returns {string} Sanitized HTML.\n *\n * @example\n \n \n \n
\n Snippet: \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
DirectiveHowSourceRendered
ng-bind-htmlAutomatically uses $sanitize
<div ng-bind-html=\"snippet\">
</div>
ng-bind-htmlBypass $sanitize by explicitly trusting the dangerous value\n
<div ng-bind-html=\"deliberatelyTrustDangerousSnippet()\">\n</div>
\n
ng-bindAutomatically escapes
<div ng-bind=\"snippet\">
</div>
\n
\n
\n \n it('should sanitize the html snippet by default', function() {\n expect(element(by.css('#bind-html-with-sanitize div')).getAttribute('innerHTML')).\n toBe('

an html\\nclick here\\nsnippet

');\n });\n\n it('should inline raw snippet if bound to a trusted value', function() {\n expect(element(by.css('#bind-html-with-trust div')).getAttribute('innerHTML')).\n toBe(\"

an html\\n\" +\n \"click here\\n\" +\n \"snippet

\");\n });\n\n it('should escape snippet without any filter', function() {\n expect(element(by.css('#bind-default div')).getAttribute('innerHTML')).\n toBe(\"<p style=\\\"color:blue\\\">an html\\n\" +\n \"<em onmouseover=\\\"this.textContent='PWN3D!'\\\">click here</em>\\n\" +\n \"snippet</p>\");\n });\n\n it('should update', function() {\n element(by.model('snippet')).clear();\n element(by.model('snippet')).sendKeys('new text');\n expect(element(by.css('#bind-html-with-sanitize div')).getAttribute('innerHTML')).\n toBe('new text');\n expect(element(by.css('#bind-html-with-trust div')).getAttribute('innerHTML')).toBe(\n 'new text');\n expect(element(by.css('#bind-default div')).getAttribute('innerHTML')).toBe(\n \"new <b onclick=\\\"alert(1)\\\">text</b>\");\n });\n
\n
\n */\n\n\n/**\n * @ngdoc provider\n * @name $sanitizeProvider\n * @this\n *\n * @description\n * Creates and configures {@link $sanitize} instance.\n */\nfunction $SanitizeProvider() {\n var hasBeenInstantiated = false;\n var svgEnabled = false;\n\n this.$get = ['$$sanitizeUri', function($$sanitizeUri) {\n hasBeenInstantiated = true;\n if (svgEnabled) {\n extend(validElements, svgElements);\n }\n return function(html) {\n var buf = [];\n htmlParser(html, htmlSanitizeWriter(buf, function(uri, isImage) {\n return !/^unsafe:/.test($$sanitizeUri(uri, isImage));\n }));\n return buf.join('');\n };\n }];\n\n\n /**\n * @ngdoc method\n * @name $sanitizeProvider#enableSvg\n * @kind function\n *\n * @description\n * Enables a subset of svg to be supported by the sanitizer.\n *\n *
\n *

By enabling this setting without taking other precautions, you might expose your\n * application to click-hijacking attacks. In these attacks, sanitized svg elements could be positioned\n * outside of the containing element and be rendered over other elements on the page (e.g. a login\n * link). Such behavior can then result in phishing incidents.

\n *\n *

To protect against these, explicitly setup `overflow: hidden` css rule for all potential svg\n * tags within the sanitized content:

\n *\n *
\n *\n *
\n   *   .rootOfTheIncludedContent svg {\n   *     overflow: hidden !important;\n   *   }\n   *   
\n *
\n *\n * @param {boolean=} flag Enable or disable SVG support in the sanitizer.\n * @returns {boolean|$sanitizeProvider} Returns the currently configured value if called\n * without an argument or self for chaining otherwise.\n */\n this.enableSvg = function(enableSvg) {\n if (isDefined(enableSvg)) {\n svgEnabled = enableSvg;\n return this;\n } else {\n return svgEnabled;\n }\n };\n\n\n /**\n * @ngdoc method\n * @name $sanitizeProvider#addValidElements\n * @kind function\n *\n * @description\n * Extends the built-in lists of valid HTML/SVG elements, i.e. elements that are considered safe\n * and are not stripped off during sanitization. You can extend the following lists of elements:\n *\n * - `htmlElements`: A list of elements (tag names) to extend the current list of safe HTML\n * elements. HTML elements considered safe will not be removed during sanitization. All other\n * elements will be stripped off.\n *\n * - `htmlVoidElements`: This is similar to `htmlElements`, but marks the elements as\n * \"void elements\" (similar to HTML\n * [void elements](https://rawgit.com/w3c/html/html5.1-2/single-page.html#void-elements)). These\n * elements have no end tag and cannot have content.\n *\n * - `svgElements`: This is similar to `htmlElements`, but for SVG elements. This list is only\n * taken into account if SVG is {@link ngSanitize.$sanitizeProvider#enableSvg enabled} for\n * `$sanitize`.\n *\n *
\n * This method must be called during the {@link angular.Module#config config} phase. Once the\n * `$sanitize` service has been instantiated, this method has no effect.\n *
\n *\n *
\n * Keep in mind that extending the built-in lists of elements may expose your app to XSS or\n * other vulnerabilities. Be very mindful of the elements you add.\n *
\n *\n * @param {Array|Object} elements - A list of valid HTML elements or an object with one or\n * more of the following properties:\n * - **htmlElements** - `{Array}` - A list of elements to extend the current list of\n * HTML elements.\n * - **htmlVoidElements** - `{Array}` - A list of elements to extend the current list of\n * void HTML elements; i.e. elements that do not have an end tag.\n * - **svgElements** - `{Array}` - A list of elements to extend the current list of SVG\n * elements. The list of SVG elements is only taken into account if SVG is\n * {@link ngSanitize.$sanitizeProvider#enableSvg enabled} for `$sanitize`.\n *\n * Passing an array (`[...]`) is equivalent to passing `{htmlElements: [...]}`.\n *\n * @return {$sanitizeProvider} Returns self for chaining.\n */\n this.addValidElements = function(elements) {\n if (!hasBeenInstantiated) {\n if (isArray(elements)) {\n elements = {htmlElements: elements};\n }\n\n addElementsTo(svgElements, elements.svgElements);\n addElementsTo(voidElements, elements.htmlVoidElements);\n addElementsTo(validElements, elements.htmlVoidElements);\n addElementsTo(validElements, elements.htmlElements);\n }\n\n return this;\n };\n\n\n /**\n * @ngdoc method\n * @name $sanitizeProvider#addValidAttrs\n * @kind function\n *\n * @description\n * Extends the built-in list of valid attributes, i.e. attributes that are considered safe and are\n * not stripped off during sanitization.\n *\n * **Note**:\n * The new attributes will not be treated as URI attributes, which means their values will not be\n * sanitized as URIs using `$compileProvider`'s\n * {@link ng.$compileProvider#aHrefSanitizationTrustedUrlList aHrefSanitizationTrustedUrlList} and\n * {@link ng.$compileProvider#imgSrcSanitizationTrustedUrlList imgSrcSanitizationTrustedUrlList}.\n *\n *
\n * This method must be called during the {@link angular.Module#config config} phase. Once the\n * `$sanitize` service has been instantiated, this method has no effect.\n *
\n *\n *
\n * Keep in mind that extending the built-in list of attributes may expose your app to XSS or\n * other vulnerabilities. Be very mindful of the attributes you add.\n *
\n *\n * @param {Array} attrs - A list of valid attributes.\n *\n * @returns {$sanitizeProvider} Returns self for chaining.\n */\n this.addValidAttrs = function(attrs) {\n if (!hasBeenInstantiated) {\n extend(validAttrs, arrayToMap(attrs, true));\n }\n return this;\n };\n\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // Private stuff\n //////////////////////////////////////////////////////////////////////////////////////////////////\n\n bind = angular.bind;\n extend = angular.extend;\n forEach = angular.forEach;\n isArray = angular.isArray;\n isDefined = angular.isDefined;\n lowercase = angular.$$lowercase;\n noop = angular.noop;\n\n htmlParser = htmlParserImpl;\n htmlSanitizeWriter = htmlSanitizeWriterImpl;\n\n nodeContains = window.Node.prototype.contains || /** @this */ function(arg) {\n // eslint-disable-next-line no-bitwise\n return !!(this.compareDocumentPosition(arg) & 16);\n };\n\n // Regular Expressions for parsing tags and attributes\n var SURROGATE_PAIR_REGEXP = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g,\n // Match everything outside of normal chars and \" (quote character)\n NON_ALPHANUMERIC_REGEXP = /([^#-~ |!])/g;\n\n\n // Good source of info about elements and attributes\n // http://dev.w3.org/html5/spec/Overview.html#semantics\n // http://simon.html5.org/html-elements\n\n // Safe Void Elements - HTML5\n // http://dev.w3.org/html5/spec/Overview.html#void-elements\n var voidElements = stringToMap('area,br,col,hr,img,wbr');\n\n // Elements that you can, intentionally, leave open (and which close themselves)\n // http://dev.w3.org/html5/spec/Overview.html#optional-tags\n var optionalEndTagBlockElements = stringToMap('colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr'),\n optionalEndTagInlineElements = stringToMap('rp,rt'),\n optionalEndTagElements = extend({},\n optionalEndTagInlineElements,\n optionalEndTagBlockElements);\n\n // Safe Block Elements - HTML5\n var blockElements = extend({}, optionalEndTagBlockElements, stringToMap('address,article,' +\n 'aside,blockquote,caption,center,del,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,' +\n 'h6,header,hgroup,hr,ins,map,menu,nav,ol,pre,section,table,ul'));\n\n // Inline Elements - HTML5\n var inlineElements = extend({}, optionalEndTagInlineElements, stringToMap('a,abbr,acronym,b,' +\n 'bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,q,ruby,rp,rt,s,' +\n 'samp,small,span,strike,strong,sub,sup,time,tt,u,var'));\n\n // SVG Elements\n // https://wiki.whatwg.org/wiki/Sanitization_rules#svg_Elements\n // Note: the elements animate,animateColor,animateMotion,animateTransform,set are intentionally omitted.\n // They can potentially allow for arbitrary javascript to be executed. See #11290\n var svgElements = stringToMap('circle,defs,desc,ellipse,font-face,font-face-name,font-face-src,g,glyph,' +\n 'hkern,image,linearGradient,line,marker,metadata,missing-glyph,mpath,path,polygon,polyline,' +\n 'radialGradient,rect,stop,svg,switch,text,title,tspan');\n\n // Blocked Elements (will be stripped)\n var blockedElements = stringToMap('script,style');\n\n var validElements = extend({},\n voidElements,\n blockElements,\n inlineElements,\n optionalEndTagElements);\n\n //Attributes that have href and hence need to be sanitized\n var uriAttrs = stringToMap('background,cite,href,longdesc,src,xlink:href,xml:base');\n\n var htmlAttrs = stringToMap('abbr,align,alt,axis,bgcolor,border,cellpadding,cellspacing,class,clear,' +\n 'color,cols,colspan,compact,coords,dir,face,headers,height,hreflang,hspace,' +\n 'ismap,lang,language,nohref,nowrap,rel,rev,rows,rowspan,rules,' +\n 'scope,scrolling,shape,size,span,start,summary,tabindex,target,title,type,' +\n 'valign,value,vspace,width');\n\n // SVG attributes (without \"id\" and \"name\" attributes)\n // https://wiki.whatwg.org/wiki/Sanitization_rules#svg_Attributes\n var svgAttrs = stringToMap('accent-height,accumulate,additive,alphabetic,arabic-form,ascent,' +\n 'baseProfile,bbox,begin,by,calcMode,cap-height,class,color,color-rendering,content,' +\n 'cx,cy,d,dx,dy,descent,display,dur,end,fill,fill-rule,font-family,font-size,font-stretch,' +\n 'font-style,font-variant,font-weight,from,fx,fy,g1,g2,glyph-name,gradientUnits,hanging,' +\n 'height,horiz-adv-x,horiz-origin-x,ideographic,k,keyPoints,keySplines,keyTimes,lang,' +\n 'marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,mathematical,' +\n 'max,min,offset,opacity,orient,origin,overline-position,overline-thickness,panose-1,' +\n 'path,pathLength,points,preserveAspectRatio,r,refX,refY,repeatCount,repeatDur,' +\n 'requiredExtensions,requiredFeatures,restart,rotate,rx,ry,slope,stemh,stemv,stop-color,' +\n 'stop-opacity,strikethrough-position,strikethrough-thickness,stroke,stroke-dasharray,' +\n 'stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,stroke-opacity,' +\n 'stroke-width,systemLanguage,target,text-anchor,to,transform,type,u1,u2,underline-position,' +\n 'underline-thickness,unicode,unicode-range,units-per-em,values,version,viewBox,visibility,' +\n 'width,widths,x,x-height,x1,x2,xlink:actuate,xlink:arcrole,xlink:role,xlink:show,xlink:title,' +\n 'xlink:type,xml:base,xml:lang,xml:space,xmlns,xmlns:xlink,y,y1,y2,zoomAndPan', true);\n\n var validAttrs = extend({},\n uriAttrs,\n svgAttrs,\n htmlAttrs);\n\n function stringToMap(str, lowercaseKeys) {\n return arrayToMap(str.split(','), lowercaseKeys);\n }\n\n function arrayToMap(items, lowercaseKeys) {\n var obj = {}, i;\n for (i = 0; i < items.length; i++) {\n obj[lowercaseKeys ? lowercase(items[i]) : items[i]] = true;\n }\n return obj;\n }\n\n function addElementsTo(elementsMap, newElements) {\n if (newElements && newElements.length) {\n extend(elementsMap, arrayToMap(newElements));\n }\n }\n\n /**\n * Create an inert document that contains the dirty HTML that needs sanitizing.\n * We use the DOMParser API by default and fall back to createHTMLDocument if DOMParser is not\n * available.\n */\n var getInertBodyElement /* function(html: string): HTMLBodyElement */ = (function(window, document) {\n if (isDOMParserAvailable()) {\n return getInertBodyElement_DOMParser;\n }\n\n if (!document || !document.implementation) {\n throw $sanitizeMinErr('noinert', 'Can\\'t create an inert html document');\n }\n var inertDocument = document.implementation.createHTMLDocument('inert');\n var inertBodyElement = (inertDocument.documentElement || inertDocument.getDocumentElement()).querySelector('body');\n return getInertBodyElement_InertDocument;\n\n function isDOMParserAvailable() {\n try {\n return !!getInertBodyElement_DOMParser('');\n } catch (e) {\n return false;\n }\n }\n\n function getInertBodyElement_DOMParser(html) {\n // We add this dummy element to ensure that the rest of the content is parsed as expected\n // e.g. leading whitespace is maintained and tags like `` do not get hoisted to the `` tag.\n html = '' + html;\n try {\n var body = new window.DOMParser().parseFromString(html, 'text/html').body;\n body.firstChild.remove();\n return body;\n } catch (e) {\n return undefined;\n }\n }\n\n function getInertBodyElement_InertDocument(html) {\n inertBodyElement.innerHTML = html;\n\n // Support: IE 9-11 only\n // strip custom-namespaced attributes on IE<=11\n if (document.documentMode) {\n stripCustomNsAttrs(inertBodyElement);\n }\n\n return inertBodyElement;\n }\n })(window, window.document);\n\n /**\n * @example\n * htmlParser(htmlString, {\n * start: function(tag, attrs) {},\n * end: function(tag) {},\n * chars: function(text) {},\n * comment: function(text) {}\n * });\n *\n * @param {string} html string\n * @param {object} handler\n */\n function htmlParserImpl(html, handler) {\n if (html === null || html === undefined) {\n html = '';\n } else if (typeof html !== 'string') {\n html = '' + html;\n }\n\n var inertBodyElement = getInertBodyElement(html);\n if (!inertBodyElement) return '';\n\n //mXSS protection\n var mXSSAttempts = 5;\n do {\n if (mXSSAttempts === 0) {\n throw $sanitizeMinErr('uinput', 'Failed to sanitize html because the input is unstable');\n }\n mXSSAttempts--;\n\n // trigger mXSS if it is going to happen by reading and writing the innerHTML\n html = inertBodyElement.innerHTML;\n inertBodyElement = getInertBodyElement(html);\n } while (html !== inertBodyElement.innerHTML);\n\n var node = inertBodyElement.firstChild;\n while (node) {\n switch (node.nodeType) {\n case 1: // ELEMENT_NODE\n handler.start(node.nodeName.toLowerCase(), attrToMap(node.attributes));\n break;\n case 3: // TEXT NODE\n handler.chars(node.textContent);\n break;\n }\n\n var nextNode;\n if (!(nextNode = node.firstChild)) {\n if (node.nodeType === 1) {\n handler.end(node.nodeName.toLowerCase());\n }\n nextNode = getNonDescendant('nextSibling', node);\n if (!nextNode) {\n while (nextNode == null) {\n node = getNonDescendant('parentNode', node);\n if (node === inertBodyElement) break;\n nextNode = getNonDescendant('nextSibling', node);\n if (node.nodeType === 1) {\n handler.end(node.nodeName.toLowerCase());\n }\n }\n }\n }\n node = nextNode;\n }\n\n while ((node = inertBodyElement.firstChild)) {\n inertBodyElement.removeChild(node);\n }\n }\n\n function attrToMap(attrs) {\n var map = {};\n for (var i = 0, ii = attrs.length; i < ii; i++) {\n var attr = attrs[i];\n map[attr.name] = attr.value;\n }\n return map;\n }\n\n\n /**\n * Escapes all potentially dangerous characters, so that the\n * resulting string can be safely inserted into attribute or\n * element text.\n * @param value\n * @returns {string} escaped text\n */\n function encodeEntities(value) {\n return value.\n replace(/&/g, '&').\n replace(SURROGATE_PAIR_REGEXP, function(value) {\n var hi = value.charCodeAt(0);\n var low = value.charCodeAt(1);\n return '&#' + (((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000) + ';';\n }).\n replace(NON_ALPHANUMERIC_REGEXP, function(value) {\n return '&#' + value.charCodeAt(0) + ';';\n }).\n replace(//g, '>');\n }\n\n /**\n * create an HTML/XML writer which writes to buffer\n * @param {Array} buf use buf.join('') to get out sanitized html string\n * @returns {object} in the form of {\n * start: function(tag, attrs) {},\n * end: function(tag) {},\n * chars: function(text) {},\n * comment: function(text) {}\n * }\n */\n function htmlSanitizeWriterImpl(buf, uriValidator) {\n var ignoreCurrentElement = false;\n var out = bind(buf, buf.push);\n return {\n start: function(tag, attrs) {\n tag = lowercase(tag);\n if (!ignoreCurrentElement && blockedElements[tag]) {\n ignoreCurrentElement = tag;\n }\n if (!ignoreCurrentElement && validElements[tag] === true) {\n out('<');\n out(tag);\n forEach(attrs, function(value, key) {\n var lkey = lowercase(key);\n var isImage = (tag === 'img' && lkey === 'src') || (lkey === 'background');\n if (validAttrs[lkey] === true &&\n (uriAttrs[lkey] !== true || uriValidator(value, isImage))) {\n out(' ');\n out(key);\n out('=\"');\n out(encodeEntities(value));\n out('\"');\n }\n });\n out('>');\n }\n },\n end: function(tag) {\n tag = lowercase(tag);\n if (!ignoreCurrentElement && validElements[tag] === true && voidElements[tag] !== true) {\n out('');\n }\n // eslint-disable-next-line eqeqeq\n if (tag == ignoreCurrentElement) {\n ignoreCurrentElement = false;\n }\n },\n chars: function(chars) {\n if (!ignoreCurrentElement) {\n out(encodeEntities(chars));\n }\n }\n };\n }\n\n\n /**\n * When IE9-11 comes across an unknown namespaced attribute e.g. 'xlink:foo' it adds 'xmlns:ns1' attribute to declare\n * ns1 namespace and prefixes the attribute with 'ns1' (e.g. 'ns1:xlink:foo'). This is undesirable since we don't want\n * to allow any of these custom attributes. This method strips them all.\n *\n * @param node Root element to process\n */\n function stripCustomNsAttrs(node) {\n while (node) {\n if (node.nodeType === window.Node.ELEMENT_NODE) {\n var attrs = node.attributes;\n for (var i = 0, l = attrs.length; i < l; i++) {\n var attrNode = attrs[i];\n var attrName = attrNode.name.toLowerCase();\n if (attrName === 'xmlns:ns1' || attrName.lastIndexOf('ns1:', 0) === 0) {\n node.removeAttributeNode(attrNode);\n i--;\n l--;\n }\n }\n }\n\n var nextNode = node.firstChild;\n if (nextNode) {\n stripCustomNsAttrs(nextNode);\n }\n\n node = getNonDescendant('nextSibling', node);\n }\n }\n\n function getNonDescendant(propName, node) {\n // An element is clobbered if its `propName` property points to one of its descendants\n var nextNode = node[propName];\n if (nextNode && nodeContains.call(node, nextNode)) {\n throw $sanitizeMinErr('elclob', 'Failed to sanitize html because the element is clobbered: {0}', node.outerHTML || node.outerText);\n }\n return nextNode;\n }\n}\n\nfunction sanitizeText(chars) {\n var buf = [];\n var writer = htmlSanitizeWriter(buf, noop);\n writer.chars(chars);\n return buf.join('');\n}\n\n\n// define ngSanitize module and register $sanitize service\nangular.module('ngSanitize', [])\n .provider('$sanitize', $SanitizeProvider)\n .info({ angularVersion: '1.8.3' });\n\n/**\n * @ngdoc filter\n * @name linky\n * @kind function\n *\n * @description\n * Finds links in text input and turns them into html links. Supports `http/https/ftp/sftp/mailto` and\n * plain email address links.\n *\n * Requires the {@link ngSanitize `ngSanitize`} module to be installed.\n *\n * @param {string} text Input text.\n * @param {string} [target] Window (`_blank|_self|_parent|_top`) or named frame to open links in.\n * @param {object|function(url)} [attributes] Add custom attributes to the link element.\n *\n * Can be one of:\n *\n * - `object`: A map of attributes\n * - `function`: Takes the url as a parameter and returns a map of attributes\n *\n * If the map of attributes contains a value for `target`, it overrides the value of\n * the target parameter.\n *\n *\n * @returns {string} Html-linkified and {@link $sanitize sanitized} text.\n *\n * @usage\n \n *\n * @example\n \n \n
\n Snippet: \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
FilterSourceRendered
linky filter\n
<div ng-bind-html=\"snippet | linky\">
</div>
\n
\n
\n
linky target\n
<div ng-bind-html=\"snippetWithSingleURL | linky:'_blank'\">
</div>
\n
\n
\n
linky custom attributes\n
<div ng-bind-html=\"snippetWithSingleURL | linky:'_self':{rel: 'nofollow'}\">
</div>
\n
\n
\n
no filter
<div ng-bind=\"snippet\">
</div>
\n \n \n angular.module('linkyExample', ['ngSanitize'])\n .controller('ExampleController', ['$scope', function($scope) {\n $scope.snippet =\n 'Pretty text with some links:\\n' +\n 'http://angularjs.org/,\\n' +\n 'mailto:us@somewhere.org,\\n' +\n 'another@somewhere.org,\\n' +\n 'and one more: ftp://127.0.0.1/.';\n $scope.snippetWithSingleURL = 'http://angularjs.org/';\n }]);\n \n \n it('should linkify the snippet with urls', function() {\n expect(element(by.id('linky-filter')).element(by.binding('snippet | linky')).getText()).\n toBe('Pretty text with some links: http://angularjs.org/, us@somewhere.org, ' +\n 'another@somewhere.org, and one more: ftp://127.0.0.1/.');\n expect(element.all(by.css('#linky-filter a')).count()).toEqual(4);\n });\n\n it('should not linkify snippet without the linky filter', function() {\n expect(element(by.id('escaped-html')).element(by.binding('snippet')).getText()).\n toBe('Pretty text with some links: http://angularjs.org/, mailto:us@somewhere.org, ' +\n 'another@somewhere.org, and one more: ftp://127.0.0.1/.');\n expect(element.all(by.css('#escaped-html a')).count()).toEqual(0);\n });\n\n it('should update', function() {\n element(by.model('snippet')).clear();\n element(by.model('snippet')).sendKeys('new http://link.');\n expect(element(by.id('linky-filter')).element(by.binding('snippet | linky')).getText()).\n toBe('new http://link.');\n expect(element.all(by.css('#linky-filter a')).count()).toEqual(1);\n expect(element(by.id('escaped-html')).element(by.binding('snippet')).getText())\n .toBe('new http://link.');\n });\n\n it('should work with the target property', function() {\n expect(element(by.id('linky-target')).\n element(by.binding(\"snippetWithSingleURL | linky:'_blank'\")).getText()).\n toBe('http://angularjs.org/');\n expect(element(by.css('#linky-target a')).getAttribute('target')).toEqual('_blank');\n });\n\n it('should optionally add custom attributes', function() {\n expect(element(by.id('linky-custom-attributes')).\n element(by.binding(\"snippetWithSingleURL | linky:'_self':{rel: 'nofollow'}\")).getText()).\n toBe('http://angularjs.org/');\n expect(element(by.css('#linky-custom-attributes a')).getAttribute('rel')).toEqual('nofollow');\n });\n \n \n */\nangular.module('ngSanitize').filter('linky', ['$sanitize', function($sanitize) {\n var LINKY_URL_REGEXP =\n /((s?ftp|https?):\\/\\/|(www\\.)|(mailto:)?[A-Za-z0-9._%+-]+@)\\S*[^\\s.;,(){}<>\"\\u201d\\u2019]/i,\n MAILTO_REGEXP = /^mailto:/i;\n\n var linkyMinErr = angular.$$minErr('linky');\n var isDefined = angular.isDefined;\n var isFunction = angular.isFunction;\n var isObject = angular.isObject;\n var isString = angular.isString;\n\n return function(text, target, attributes) {\n if (text == null || text === '') return text;\n if (!isString(text)) throw linkyMinErr('notstring', 'Expected string but received: {0}', text);\n\n var attributesFn =\n isFunction(attributes) ? attributes :\n isObject(attributes) ? function getAttributesObject() {return attributes;} :\n function getEmptyAttributesObject() {return {};};\n\n var match;\n var raw = text;\n var html = [];\n var url;\n var i;\n while ((match = raw.match(LINKY_URL_REGEXP))) {\n // We can not end in these as they are sometimes found at the end of the sentence\n url = match[0];\n // if we did not match ftp/http/www/mailto then assume mailto\n if (!match[2] && !match[4]) {\n url = (match[3] ? 'http://' : 'mailto:') + url;\n }\n i = match.index;\n addText(raw.substr(0, i));\n addLink(url, match[0].replace(MAILTO_REGEXP, ''));\n raw = raw.substring(i + match[0].length);\n }\n addText(raw);\n return $sanitize(html.join(''));\n\n function addText(text) {\n if (!text) {\n return;\n }\n html.push(sanitizeText(text));\n }\n\n function addLink(url, text) {\n var key, linkAttributes = attributesFn(url);\n html.push('');\n addText(text);\n html.push('');\n }\n };\n}]);\n\n\n})(window, window.angular);\n","require('./angular-sanitize');\nmodule.exports = 'ngSanitize';\n","/**!\n * AngularJS file upload directives and services. Supports: file upload/drop/paste, resume, cancel/abort,\n * progress, resize, thumbnail, preview, validation and CORS\n * FileAPI Flash shim for old browsers not supporting FormData\n * @author Danial \n * @version 12.2.13\n */\n\n(function () {\n /** @namespace FileAPI.noContentTimeout */\n\n function patchXHR(fnName, newFn) {\n window.XMLHttpRequest.prototype[fnName] = newFn(window.XMLHttpRequest.prototype[fnName]);\n }\n\n function redefineProp(xhr, prop, fn) {\n try {\n Object.defineProperty(xhr, prop, {get: fn});\n } catch (e) {/*ignore*/\n }\n }\n\n if (!window.FileAPI) {\n window.FileAPI = {};\n }\n\n if (!window.XMLHttpRequest) {\n throw 'AJAX is not supported. XMLHttpRequest is not defined.';\n }\n\n FileAPI.shouldLoad = !window.FormData || FileAPI.forceLoad;\n if (FileAPI.shouldLoad) {\n var initializeUploadListener = function (xhr) {\n if (!xhr.__listeners) {\n if (!xhr.upload) xhr.upload = {};\n xhr.__listeners = [];\n var origAddEventListener = xhr.upload.addEventListener;\n xhr.upload.addEventListener = function (t, fn) {\n xhr.__listeners[t] = fn;\n if (origAddEventListener) origAddEventListener.apply(this, arguments);\n };\n }\n };\n\n patchXHR('open', function (orig) {\n return function (m, url, b) {\n initializeUploadListener(this);\n this.__url = url;\n try {\n orig.apply(this, [m, url, b]);\n } catch (e) {\n if (e.message.indexOf('Access is denied') > -1) {\n this.__origError = e;\n orig.apply(this, [m, '_fix_for_ie_crossdomain__', b]);\n }\n }\n };\n });\n\n patchXHR('getResponseHeader', function (orig) {\n return function (h) {\n return this.__fileApiXHR && this.__fileApiXHR.getResponseHeader ? this.__fileApiXHR.getResponseHeader(h) : (orig == null ? null : orig.apply(this, [h]));\n };\n });\n\n patchXHR('getAllResponseHeaders', function (orig) {\n return function () {\n return this.__fileApiXHR && this.__fileApiXHR.getAllResponseHeaders ? this.__fileApiXHR.getAllResponseHeaders() : (orig == null ? null : orig.apply(this));\n };\n });\n\n patchXHR('abort', function (orig) {\n return function () {\n return this.__fileApiXHR && this.__fileApiXHR.abort ? this.__fileApiXHR.abort() : (orig == null ? null : orig.apply(this));\n };\n });\n\n patchXHR('setRequestHeader', function (orig) {\n return function (header, value) {\n if (header === '__setXHR_') {\n initializeUploadListener(this);\n var val = value(this);\n // fix for angular < 1.2.0\n if (val instanceof Function) {\n val(this);\n }\n } else {\n this.__requestHeaders = this.__requestHeaders || {};\n this.__requestHeaders[header] = value;\n orig.apply(this, arguments);\n }\n };\n });\n\n patchXHR('send', function (orig) {\n return function () {\n var xhr = this;\n if (arguments[0] && arguments[0].__isFileAPIShim) {\n var formData = arguments[0];\n var config = {\n url: xhr.__url,\n jsonp: false, //removes the callback form param\n cache: true, //removes the ?fileapiXXX in the url\n complete: function (err, fileApiXHR) {\n if (err && angular.isString(err) && err.indexOf('#2174') !== -1) {\n // this error seems to be fine the file is being uploaded properly.\n err = null;\n }\n xhr.__completed = true;\n if (!err && xhr.__listeners.load)\n xhr.__listeners.load({\n type: 'load',\n loaded: xhr.__loaded,\n total: xhr.__total,\n target: xhr,\n lengthComputable: true\n });\n if (!err && xhr.__listeners.loadend)\n xhr.__listeners.loadend({\n type: 'loadend',\n loaded: xhr.__loaded,\n total: xhr.__total,\n target: xhr,\n lengthComputable: true\n });\n if (err === 'abort' && xhr.__listeners.abort)\n xhr.__listeners.abort({\n type: 'abort',\n loaded: xhr.__loaded,\n total: xhr.__total,\n target: xhr,\n lengthComputable: true\n });\n if (fileApiXHR.status !== undefined) redefineProp(xhr, 'status', function () {\n return (fileApiXHR.status === 0 && err && err !== 'abort') ? 500 : fileApiXHR.status;\n });\n if (fileApiXHR.statusText !== undefined) redefineProp(xhr, 'statusText', function () {\n return fileApiXHR.statusText;\n });\n redefineProp(xhr, 'readyState', function () {\n return 4;\n });\n if (fileApiXHR.response !== undefined) redefineProp(xhr, 'response', function () {\n return fileApiXHR.response;\n });\n var resp = fileApiXHR.responseText || (err && fileApiXHR.status === 0 && err !== 'abort' ? err : undefined);\n redefineProp(xhr, 'responseText', function () {\n return resp;\n });\n redefineProp(xhr, 'response', function () {\n return resp;\n });\n if (err) redefineProp(xhr, 'err', function () {\n return err;\n });\n xhr.__fileApiXHR = fileApiXHR;\n if (xhr.onreadystatechange) xhr.onreadystatechange();\n if (xhr.onload) xhr.onload();\n },\n progress: function (e) {\n e.target = xhr;\n if (xhr.__listeners.progress) xhr.__listeners.progress(e);\n xhr.__total = e.total;\n xhr.__loaded = e.loaded;\n if (e.total === e.loaded) {\n // fix flash issue that doesn't call complete if there is no response text from the server\n var _this = this;\n setTimeout(function () {\n if (!xhr.__completed) {\n xhr.getAllResponseHeaders = function () {\n };\n _this.complete(null, {status: 204, statusText: 'No Content'});\n }\n }, FileAPI.noContentTimeout || 10000);\n }\n },\n headers: xhr.__requestHeaders\n };\n config.data = {};\n config.files = {};\n for (var i = 0; i < formData.data.length; i++) {\n var item = formData.data[i];\n if (item.val != null && item.val.name != null && item.val.size != null && item.val.type != null) {\n config.files[item.key] = item.val;\n } else {\n config.data[item.key] = item.val;\n }\n }\n\n setTimeout(function () {\n if (!FileAPI.hasFlash) {\n throw 'Adode Flash Player need to be installed. To check ahead use \"FileAPI.hasFlash\"';\n }\n xhr.__fileApiXHR = FileAPI.upload(config);\n }, 1);\n } else {\n if (this.__origError) {\n throw this.__origError;\n }\n orig.apply(xhr, arguments);\n }\n };\n });\n window.XMLHttpRequest.__isFileAPIShim = true;\n window.FormData = FormData = function () {\n return {\n append: function (key, val, name) {\n if (val.__isFileAPIBlobShim) {\n val = val.data[0];\n }\n this.data.push({\n key: key,\n val: val,\n name: name\n });\n },\n data: [],\n __isFileAPIShim: true\n };\n };\n\n window.Blob = Blob = function (b) {\n return {\n data: b,\n __isFileAPIBlobShim: true\n };\n };\n }\n\n})();\n\n(function () {\n /** @namespace FileAPI.forceLoad */\n /** @namespace window.FileAPI.jsUrl */\n /** @namespace window.FileAPI.jsPath */\n\n function isInputTypeFile(elem) {\n return elem[0].tagName.toLowerCase() === 'input' && elem.attr('type') && elem.attr('type').toLowerCase() === 'file';\n }\n\n function hasFlash() {\n try {\n var fo = new ActiveXObject('ShockwaveFlash.ShockwaveFlash');\n if (fo) return true;\n } catch (e) {\n if (navigator.mimeTypes['application/x-shockwave-flash'] !== undefined) return true;\n }\n return false;\n }\n\n function getOffset(obj) {\n var left = 0, top = 0;\n\n if (window.jQuery) {\n return jQuery(obj).offset();\n }\n\n if (obj.offsetParent) {\n do {\n left += (obj.offsetLeft - obj.scrollLeft);\n top += (obj.offsetTop - obj.scrollTop);\n obj = obj.offsetParent;\n } while (obj);\n }\n return {\n left: left,\n top: top\n };\n }\n\n if (FileAPI.shouldLoad) {\n FileAPI.hasFlash = hasFlash();\n\n //load FileAPI\n if (FileAPI.forceLoad) {\n FileAPI.html5 = false;\n }\n\n if (!FileAPI.upload) {\n var jsUrl, basePath, script = document.createElement('script'), allScripts = document.getElementsByTagName('script'), i, index, src;\n if (window.FileAPI.jsUrl) {\n jsUrl = window.FileAPI.jsUrl;\n } else if (window.FileAPI.jsPath) {\n basePath = window.FileAPI.jsPath;\n } else {\n for (i = 0; i < allScripts.length; i++) {\n src = allScripts[i].src;\n index = src.search(/\\/ng\\-file\\-upload[\\-a-zA-z0-9\\.]*\\.js/);\n if (index > -1) {\n basePath = src.substring(0, index + 1);\n break;\n }\n }\n }\n\n if (FileAPI.staticPath == null) FileAPI.staticPath = basePath;\n script.setAttribute('src', jsUrl || basePath + 'FileAPI.min.js');\n document.getElementsByTagName('head')[0].appendChild(script);\n }\n\n FileAPI.ngfFixIE = function (elem, fileElem, changeFn) {\n if (!hasFlash()) {\n throw 'Adode Flash Player need to be installed. To check ahead use \"FileAPI.hasFlash\"';\n }\n var fixInputStyle = function () {\n var label = fileElem.parent();\n if (elem.attr('disabled')) {\n if (label) label.removeClass('js-fileapi-wrapper');\n } else {\n if (!fileElem.attr('__ngf_flash_')) {\n fileElem.unbind('change');\n fileElem.unbind('click');\n fileElem.bind('change', function (evt) {\n fileApiChangeFn.apply(this, [evt]);\n changeFn.apply(this, [evt]);\n });\n fileElem.attr('__ngf_flash_', 'true');\n }\n label.addClass('js-fileapi-wrapper');\n if (!isInputTypeFile(elem)) {\n label.css('position', 'absolute')\n .css('top', getOffset(elem[0]).top + 'px').css('left', getOffset(elem[0]).left + 'px')\n .css('width', elem[0].offsetWidth + 'px').css('height', elem[0].offsetHeight + 'px')\n .css('filter', 'alpha(opacity=0)').css('display', elem.css('display'))\n .css('overflow', 'hidden').css('z-index', '900000')\n .css('visibility', 'visible');\n fileElem.css('width', elem[0].offsetWidth + 'px').css('height', elem[0].offsetHeight + 'px')\n .css('position', 'absolute').css('top', '0px').css('left', '0px');\n }\n }\n };\n\n elem.bind('mouseenter', fixInputStyle);\n\n var fileApiChangeFn = function (evt) {\n var files = FileAPI.getFiles(evt);\n //just a double check for #233\n for (var i = 0; i < files.length; i++) {\n if (files[i].size === undefined) files[i].size = 0;\n if (files[i].name === undefined) files[i].name = 'file';\n if (files[i].type === undefined) files[i].type = 'undefined';\n }\n if (!evt.target) {\n evt.target = {};\n }\n evt.target.files = files;\n // if evt.target.files is not writable use helper field\n if (evt.target.files !== files) {\n evt.__files_ = files;\n }\n (evt.__files_ || evt.target.files).item = function (i) {\n return (evt.__files_ || evt.target.files)[i] || null;\n };\n };\n };\n\n FileAPI.disableFileInput = function (elem, disable) {\n if (disable) {\n elem.removeClass('js-fileapi-wrapper');\n } else {\n elem.addClass('js-fileapi-wrapper');\n }\n };\n }\n})();\n\nif (!window.FileReader) {\n window.FileReader = function () {\n var _this = this, loadStarted = false;\n this.listeners = {};\n this.addEventListener = function (type, fn) {\n _this.listeners[type] = _this.listeners[type] || [];\n _this.listeners[type].push(fn);\n };\n this.removeEventListener = function (type, fn) {\n if (_this.listeners[type]) _this.listeners[type].splice(_this.listeners[type].indexOf(fn), 1);\n };\n this.dispatchEvent = function (evt) {\n var list = _this.listeners[evt.type];\n if (list) {\n for (var i = 0; i < list.length; i++) {\n list[i].call(_this, evt);\n }\n }\n };\n this.onabort = this.onerror = this.onload = this.onloadstart = this.onloadend = this.onprogress = null;\n\n var constructEvent = function (type, evt) {\n var e = {type: type, target: _this, loaded: evt.loaded, total: evt.total, error: evt.error};\n if (evt.result != null) e.target.result = evt.result;\n return e;\n };\n var listener = function (evt) {\n if (!loadStarted) {\n loadStarted = true;\n if (_this.onloadstart) _this.onloadstart(constructEvent('loadstart', evt));\n }\n var e;\n if (evt.type === 'load') {\n if (_this.onloadend) _this.onloadend(constructEvent('loadend', evt));\n e = constructEvent('load', evt);\n if (_this.onload) _this.onload(e);\n _this.dispatchEvent(e);\n } else if (evt.type === 'progress') {\n e = constructEvent('progress', evt);\n if (_this.onprogress) _this.onprogress(e);\n _this.dispatchEvent(e);\n } else {\n e = constructEvent('error', evt);\n if (_this.onerror) _this.onerror(e);\n _this.dispatchEvent(e);\n }\n };\n this.readAsDataURL = function (file) {\n FileAPI.readAsDataURL(file, listener);\n };\n this.readAsText = function (file) {\n FileAPI.readAsText(file, listener);\n };\n };\n}\n","/**!\n * AngularJS file upload directives and services. Supoorts: file upload/drop/paste, resume, cancel/abort,\n * progress, resize, thumbnail, preview, validation and CORS\n * @author Danial \n * @version 12.2.13\n */\n\nif (window.XMLHttpRequest && !(window.FileAPI && FileAPI.shouldLoad)) {\n window.XMLHttpRequest.prototype.setRequestHeader = (function (orig) {\n return function (header, value) {\n if (header === '__setXHR_') {\n var val = value(this);\n // fix for angular < 1.2.0\n if (val instanceof Function) {\n val(this);\n }\n } else {\n orig.apply(this, arguments);\n }\n };\n })(window.XMLHttpRequest.prototype.setRequestHeader);\n}\n\nvar ngFileUpload = angular.module('ngFileUpload', []);\n\nngFileUpload.version = '12.2.13';\n\nngFileUpload.service('UploadBase', ['$http', '$q', '$timeout', function ($http, $q, $timeout) {\n var upload = this;\n upload.promisesCount = 0;\n\n this.isResumeSupported = function () {\n return window.Blob && window.Blob.prototype.slice;\n };\n\n var resumeSupported = this.isResumeSupported();\n\n function sendHttp(config) {\n config.method = config.method || 'POST';\n config.headers = config.headers || {};\n\n var deferred = config._deferred = config._deferred || $q.defer();\n var promise = deferred.promise;\n\n function notifyProgress(e) {\n if (deferred.notify) {\n deferred.notify(e);\n }\n if (promise.progressFunc) {\n $timeout(function () {\n promise.progressFunc(e);\n });\n }\n }\n\n function getNotifyEvent(n) {\n if (config._start != null && resumeSupported) {\n return {\n loaded: n.loaded + config._start,\n total: (config._file && config._file.size) || n.total,\n type: n.type, config: config,\n lengthComputable: true, target: n.target\n };\n } else {\n return n;\n }\n }\n\n if (!config.disableProgress) {\n config.headers.__setXHR_ = function () {\n return function (xhr) {\n if (!xhr || !xhr.upload || !xhr.upload.addEventListener) return;\n config.__XHR = xhr;\n if (config.xhrFn) config.xhrFn(xhr);\n xhr.upload.addEventListener('progress', function (e) {\n e.config = config;\n notifyProgress(getNotifyEvent(e));\n }, false);\n //fix for firefox not firing upload progress end, also IE8-9\n xhr.upload.addEventListener('load', function (e) {\n if (e.lengthComputable) {\n e.config = config;\n notifyProgress(getNotifyEvent(e));\n }\n }, false);\n };\n };\n }\n\n function uploadWithAngular() {\n $http(config).then(function (r) {\n if (resumeSupported && config._chunkSize && !config._finished && config._file) {\n var fileSize = config._file && config._file.size || 0;\n notifyProgress({\n loaded: Math.min(config._end, fileSize),\n total: fileSize,\n config: config,\n type: 'progress'\n }\n );\n upload.upload(config, true);\n } else {\n if (config._finished) delete config._finished;\n deferred.resolve(r);\n }\n }, function (e) {\n deferred.reject(e);\n }, function (n) {\n deferred.notify(n);\n }\n );\n }\n\n if (!resumeSupported) {\n uploadWithAngular();\n } else if (config._chunkSize && config._end && !config._finished) {\n config._start = config._end;\n config._end += config._chunkSize;\n uploadWithAngular();\n } else if (config.resumeSizeUrl) {\n $http.get(config.resumeSizeUrl).then(function (resp) {\n if (config.resumeSizeResponseReader) {\n config._start = config.resumeSizeResponseReader(resp.data);\n } else {\n config._start = parseInt((resp.data.size == null ? resp.data : resp.data.size).toString());\n }\n if (config._chunkSize) {\n config._end = config._start + config._chunkSize;\n }\n uploadWithAngular();\n }, function (e) {\n throw e;\n });\n } else if (config.resumeSize) {\n config.resumeSize().then(function (size) {\n config._start = size;\n if (config._chunkSize) {\n config._end = config._start + config._chunkSize;\n }\n uploadWithAngular();\n }, function (e) {\n throw e;\n });\n } else {\n if (config._chunkSize) {\n config._start = 0;\n config._end = config._start + config._chunkSize;\n }\n uploadWithAngular();\n }\n\n\n promise.success = function (fn) {\n promise.then(function (response) {\n fn(response.data, response.status, response.headers, config);\n });\n return promise;\n };\n\n promise.error = function (fn) {\n promise.then(null, function (response) {\n fn(response.data, response.status, response.headers, config);\n });\n return promise;\n };\n\n promise.progress = function (fn) {\n promise.progressFunc = fn;\n promise.then(null, null, function (n) {\n fn(n);\n });\n return promise;\n };\n promise.abort = promise.pause = function () {\n if (config.__XHR) {\n $timeout(function () {\n config.__XHR.abort();\n });\n }\n return promise;\n };\n promise.xhr = function (fn) {\n config.xhrFn = (function (origXhrFn) {\n return function () {\n if (origXhrFn) origXhrFn.apply(promise, arguments);\n fn.apply(promise, arguments);\n };\n })(config.xhrFn);\n return promise;\n };\n\n upload.promisesCount++;\n if (promise['finally'] && promise['finally'] instanceof Function) {\n promise['finally'](function () {\n upload.promisesCount--;\n });\n }\n return promise;\n }\n\n this.isUploadInProgress = function () {\n return upload.promisesCount > 0;\n };\n\n this.rename = function (file, name) {\n file.ngfName = name;\n return file;\n };\n\n this.jsonBlob = function (val) {\n if (val != null && !angular.isString(val)) {\n val = JSON.stringify(val);\n }\n var blob = new window.Blob([val], {type: 'application/json'});\n blob._ngfBlob = true;\n return blob;\n };\n\n this.json = function (val) {\n return angular.toJson(val);\n };\n\n function copy(obj) {\n var clone = {};\n for (var key in obj) {\n if (obj.hasOwnProperty(key)) {\n clone[key] = obj[key];\n }\n }\n return clone;\n }\n\n this.isFile = function (file) {\n return file != null && (file instanceof window.Blob || (file.flashId && file.name && file.size));\n };\n\n this.upload = function (config, internal) {\n function toResumeFile(file, formData) {\n if (file._ngfBlob) return file;\n config._file = config._file || file;\n if (config._start != null && resumeSupported) {\n if (config._end && config._end >= file.size) {\n config._finished = true;\n config._end = file.size;\n }\n var slice = file.slice(config._start, config._end || file.size);\n slice.name = file.name;\n slice.ngfName = file.ngfName;\n if (config._chunkSize) {\n formData.append('_chunkSize', config._chunkSize);\n formData.append('_currentChunkSize', config._end - config._start);\n formData.append('_chunkNumber', Math.floor(config._start / config._chunkSize));\n formData.append('_totalSize', config._file.size);\n }\n return slice;\n }\n return file;\n }\n\n function addFieldToFormData(formData, val, key) {\n if (val !== undefined) {\n if (angular.isDate(val)) {\n val = val.toISOString();\n }\n if (angular.isString(val)) {\n formData.append(key, val);\n } else if (upload.isFile(val)) {\n var file = toResumeFile(val, formData);\n var split = key.split(',');\n if (split[1]) {\n file.ngfName = split[1].replace(/^\\s+|\\s+$/g, '');\n key = split[0];\n }\n config._fileKey = config._fileKey || key;\n formData.append(key, file, file.ngfName || file.name);\n } else {\n if (angular.isObject(val)) {\n if (val.$$ngfCircularDetection) throw 'ngFileUpload: Circular reference in config.data. Make sure specified data for Upload.upload() has no circular reference: ' + key;\n\n val.$$ngfCircularDetection = true;\n try {\n for (var k in val) {\n if (val.hasOwnProperty(k) && k !== '$$ngfCircularDetection') {\n var objectKey = config.objectKey == null ? '[i]' : config.objectKey;\n if (val.length && parseInt(k) > -1) {\n objectKey = config.arrayKey == null ? objectKey : config.arrayKey;\n }\n addFieldToFormData(formData, val[k], key + objectKey.replace(/[ik]/g, k));\n }\n }\n } finally {\n delete val.$$ngfCircularDetection;\n }\n } else {\n formData.append(key, val);\n }\n }\n }\n }\n\n function digestConfig() {\n config._chunkSize = upload.translateScalars(config.resumeChunkSize);\n config._chunkSize = config._chunkSize ? parseInt(config._chunkSize.toString()) : null;\n\n config.headers = config.headers || {};\n config.headers['Content-Type'] = undefined;\n config.transformRequest = config.transformRequest ?\n (angular.isArray(config.transformRequest) ?\n config.transformRequest : [config.transformRequest]) : [];\n config.transformRequest.push(function (data) {\n var formData = new window.FormData(), key;\n data = data || config.fields || {};\n if (config.file) {\n data.file = config.file;\n }\n for (key in data) {\n if (data.hasOwnProperty(key)) {\n var val = data[key];\n if (config.formDataAppender) {\n config.formDataAppender(formData, key, val);\n } else {\n addFieldToFormData(formData, val, key);\n }\n }\n }\n\n return formData;\n });\n }\n\n if (!internal) config = copy(config);\n if (!config._isDigested) {\n config._isDigested = true;\n digestConfig();\n }\n\n return sendHttp(config);\n };\n\n this.http = function (config) {\n config = copy(config);\n config.transformRequest = config.transformRequest || function (data) {\n if ((window.ArrayBuffer && data instanceof window.ArrayBuffer) || data instanceof window.Blob) {\n return data;\n }\n return $http.defaults.transformRequest[0].apply(this, arguments);\n };\n config._chunkSize = upload.translateScalars(config.resumeChunkSize);\n config._chunkSize = config._chunkSize ? parseInt(config._chunkSize.toString()) : null;\n\n return sendHttp(config);\n };\n\n this.translateScalars = function (str) {\n if (angular.isString(str)) {\n if (str.search(/kb/i) === str.length - 2) {\n return parseFloat(str.substring(0, str.length - 2) * 1024);\n } else if (str.search(/mb/i) === str.length - 2) {\n return parseFloat(str.substring(0, str.length - 2) * 1048576);\n } else if (str.search(/gb/i) === str.length - 2) {\n return parseFloat(str.substring(0, str.length - 2) * 1073741824);\n } else if (str.search(/b/i) === str.length - 1) {\n return parseFloat(str.substring(0, str.length - 1));\n } else if (str.search(/s/i) === str.length - 1) {\n return parseFloat(str.substring(0, str.length - 1));\n } else if (str.search(/m/i) === str.length - 1) {\n return parseFloat(str.substring(0, str.length - 1) * 60);\n } else if (str.search(/h/i) === str.length - 1) {\n return parseFloat(str.substring(0, str.length - 1) * 3600);\n }\n }\n return str;\n };\n\n this.urlToBlob = function(url) {\n var defer = $q.defer();\n $http({url: url, method: 'get', responseType: 'arraybuffer'}).then(function (resp) {\n var arrayBufferView = new Uint8Array(resp.data);\n var type = resp.headers('content-type') || 'image/WebP';\n var blob = new window.Blob([arrayBufferView], {type: type});\n var matches = url.match(/.*\\/(.+?)(\\?.*)?$/);\n if (matches.length > 1) {\n blob.name = matches[1];\n }\n defer.resolve(blob);\n }, function (e) {\n defer.reject(e);\n });\n return defer.promise;\n };\n\n this.setDefaults = function (defaults) {\n this.defaults = defaults || {};\n };\n\n this.defaults = {};\n this.version = ngFileUpload.version;\n}\n\n]);\n\nngFileUpload.service('Upload', ['$parse', '$timeout', '$compile', '$q', 'UploadExif', function ($parse, $timeout, $compile, $q, UploadExif) {\n var upload = UploadExif;\n upload.getAttrWithDefaults = function (attr, name) {\n if (attr[name] != null) return attr[name];\n var def = upload.defaults[name];\n return (def == null ? def : (angular.isString(def) ? def : JSON.stringify(def)));\n };\n\n upload.attrGetter = function (name, attr, scope, params) {\n var attrVal = this.getAttrWithDefaults(attr, name);\n if (scope) {\n try {\n if (params) {\n return $parse(attrVal)(scope, params);\n } else {\n return $parse(attrVal)(scope);\n }\n } catch (e) {\n // hangle string value without single qoute\n if (name.search(/min|max|pattern/i)) {\n return attrVal;\n } else {\n throw e;\n }\n }\n } else {\n return attrVal;\n }\n };\n\n upload.shouldUpdateOn = function (type, attr, scope) {\n var modelOptions = upload.attrGetter('ngfModelOptions', attr, scope);\n if (modelOptions && modelOptions.updateOn) {\n return modelOptions.updateOn.split(' ').indexOf(type) > -1;\n }\n return true;\n };\n\n upload.emptyPromise = function () {\n var d = $q.defer();\n var args = arguments;\n $timeout(function () {\n d.resolve.apply(d, args);\n });\n return d.promise;\n };\n\n upload.rejectPromise = function () {\n var d = $q.defer();\n var args = arguments;\n $timeout(function () {\n d.reject.apply(d, args);\n });\n return d.promise;\n };\n\n upload.happyPromise = function (promise, data) {\n var d = $q.defer();\n promise.then(function (result) {\n d.resolve(result);\n }, function (error) {\n $timeout(function () {\n throw error;\n });\n d.resolve(data);\n });\n return d.promise;\n };\n\n function applyExifRotations(files, attr, scope) {\n var promises = [upload.emptyPromise()];\n angular.forEach(files, function (f, i) {\n if (f.type.indexOf('image/jpeg') === 0 && upload.attrGetter('ngfFixOrientation', attr, scope, {$file: f})) {\n promises.push(upload.happyPromise(upload.applyExifRotation(f), f).then(function (fixedFile) {\n files.splice(i, 1, fixedFile);\n }));\n }\n });\n return $q.all(promises);\n }\n\n function resizeFile(files, attr, scope, ngModel) {\n var resizeVal = upload.attrGetter('ngfResize', attr, scope);\n if (!resizeVal || !upload.isResizeSupported() || !files.length) return upload.emptyPromise();\n if (resizeVal instanceof Function) {\n var defer = $q.defer();\n return resizeVal(files).then(function (p) {\n resizeWithParams(p, files, attr, scope, ngModel).then(function (r) {\n defer.resolve(r);\n }, function (e) {\n defer.reject(e);\n });\n }, function (e) {\n defer.reject(e);\n });\n } else {\n return resizeWithParams(resizeVal, files, attr, scope, ngModel);\n }\n }\n\n function resizeWithParams(params, files, attr, scope, ngModel) {\n var promises = [upload.emptyPromise()];\n\n function handleFile(f, i) {\n if (f.type.indexOf('image') === 0) {\n if (params.pattern && !upload.validatePattern(f, params.pattern)) return;\n params.resizeIf = function (width, height) {\n return upload.attrGetter('ngfResizeIf', attr, scope,\n {$width: width, $height: height, $file: f});\n };\n var promise = upload.resize(f, params);\n promises.push(promise);\n promise.then(function (resizedFile) {\n files.splice(i, 1, resizedFile);\n }, function (e) {\n f.$error = 'resize';\n (f.$errorMessages = (f.$errorMessages || {})).resize = true;\n f.$errorParam = (e ? (e.message ? e.message : e) + ': ' : '') + (f && f.name);\n ngModel.$ngfValidations.push({name: 'resize', valid: false});\n upload.applyModelValidation(ngModel, files);\n });\n }\n }\n\n for (var i = 0; i < files.length; i++) {\n handleFile(files[i], i);\n }\n return $q.all(promises);\n }\n\n upload.updateModel = function (ngModel, attr, scope, fileChange, files, evt, noDelay) {\n function update(files, invalidFiles, newFiles, dupFiles, isSingleModel) {\n attr.$$ngfPrevValidFiles = files;\n attr.$$ngfPrevInvalidFiles = invalidFiles;\n var file = files && files.length ? files[0] : null;\n var invalidFile = invalidFiles && invalidFiles.length ? invalidFiles[0] : null;\n\n if (ngModel) {\n upload.applyModelValidation(ngModel, files);\n ngModel.$setViewValue(isSingleModel ? file : files);\n }\n\n if (fileChange) {\n $parse(fileChange)(scope, {\n $files: files,\n $file: file,\n $newFiles: newFiles,\n $duplicateFiles: dupFiles,\n $invalidFiles: invalidFiles,\n $invalidFile: invalidFile,\n $event: evt\n });\n }\n\n var invalidModel = upload.attrGetter('ngfModelInvalid', attr);\n if (invalidModel) {\n $timeout(function () {\n $parse(invalidModel).assign(scope, isSingleModel ? invalidFile : invalidFiles);\n });\n }\n $timeout(function () {\n // scope apply changes\n });\n }\n\n var allNewFiles, dupFiles = [], prevValidFiles, prevInvalidFiles,\n invalids = [], valids = [];\n\n function removeDuplicates() {\n function equals(f1, f2) {\n return f1.name === f2.name && (f1.$ngfOrigSize || f1.size) === (f2.$ngfOrigSize || f2.size) &&\n f1.type === f2.type;\n }\n\n function isInPrevFiles(f) {\n var j;\n for (j = 0; j < prevValidFiles.length; j++) {\n if (equals(f, prevValidFiles[j])) {\n return true;\n }\n }\n for (j = 0; j < prevInvalidFiles.length; j++) {\n if (equals(f, prevInvalidFiles[j])) {\n return true;\n }\n }\n return false;\n }\n\n if (files) {\n allNewFiles = [];\n dupFiles = [];\n for (var i = 0; i < files.length; i++) {\n if (isInPrevFiles(files[i])) {\n dupFiles.push(files[i]);\n } else {\n allNewFiles.push(files[i]);\n }\n }\n }\n }\n\n function toArray(v) {\n return angular.isArray(v) ? v : [v];\n }\n\n function resizeAndUpdate() {\n function updateModel() {\n $timeout(function () {\n update(keep ? prevValidFiles.concat(valids) : valids,\n keep ? prevInvalidFiles.concat(invalids) : invalids,\n files, dupFiles, isSingleModel);\n }, options && options.debounce ? options.debounce.change || options.debounce : 0);\n }\n\n var resizingFiles = validateAfterResize ? allNewFiles : valids;\n resizeFile(resizingFiles, attr, scope, ngModel).then(function () {\n if (validateAfterResize) {\n upload.validate(allNewFiles, keep ? prevValidFiles.length : 0, ngModel, attr, scope)\n .then(function (validationResult) {\n valids = validationResult.validsFiles;\n invalids = validationResult.invalidsFiles;\n updateModel();\n });\n } else {\n updateModel();\n }\n }, function () {\n for (var i = 0; i < resizingFiles.length; i++) {\n var f = resizingFiles[i];\n if (f.$error === 'resize') {\n var index = valids.indexOf(f);\n if (index > -1) {\n valids.splice(index, 1);\n invalids.push(f);\n }\n updateModel();\n }\n }\n });\n }\n\n prevValidFiles = attr.$$ngfPrevValidFiles || [];\n prevInvalidFiles = attr.$$ngfPrevInvalidFiles || [];\n if (ngModel && ngModel.$modelValue) {\n prevValidFiles = toArray(ngModel.$modelValue);\n }\n\n var keep = upload.attrGetter('ngfKeep', attr, scope);\n allNewFiles = (files || []).slice(0);\n if (keep === 'distinct' || upload.attrGetter('ngfKeepDistinct', attr, scope) === true) {\n removeDuplicates(attr, scope);\n }\n\n var isSingleModel = !keep && !upload.attrGetter('ngfMultiple', attr, scope) && !upload.attrGetter('multiple', attr);\n\n if (keep && !allNewFiles.length) return;\n\n upload.attrGetter('ngfBeforeModelChange', attr, scope, {\n $files: files,\n $file: files && files.length ? files[0] : null,\n $newFiles: allNewFiles,\n $duplicateFiles: dupFiles,\n $event: evt\n });\n\n var validateAfterResize = upload.attrGetter('ngfValidateAfterResize', attr, scope);\n\n var options = upload.attrGetter('ngfModelOptions', attr, scope);\n upload.validate(allNewFiles, keep ? prevValidFiles.length : 0, ngModel, attr, scope)\n .then(function (validationResult) {\n if (noDelay) {\n update(allNewFiles, [], files, dupFiles, isSingleModel);\n } else {\n if ((!options || !options.allowInvalid) && !validateAfterResize) {\n valids = validationResult.validFiles;\n invalids = validationResult.invalidFiles;\n } else {\n valids = allNewFiles;\n }\n if (upload.attrGetter('ngfFixOrientation', attr, scope) && upload.isExifSupported()) {\n applyExifRotations(valids, attr, scope).then(function () {\n resizeAndUpdate();\n });\n } else {\n resizeAndUpdate();\n }\n }\n });\n };\n\n return upload;\n}]);\n\nngFileUpload.directive('ngfSelect', ['$parse', '$timeout', '$compile', 'Upload', function ($parse, $timeout, $compile, Upload) {\n var generatedElems = [];\n\n function isDelayedClickSupported(ua) {\n // fix for android native browser < 4.4 and safari windows\n var m = ua.match(/Android[^\\d]*(\\d+)\\.(\\d+)/);\n if (m && m.length > 2) {\n var v = Upload.defaults.androidFixMinorVersion || 4;\n return parseInt(m[1]) < 4 || (parseInt(m[1]) === v && parseInt(m[2]) < v);\n }\n\n // safari on windows\n return ua.indexOf('Chrome') === -1 && /.*Windows.*Safari.*/.test(ua);\n }\n\n function linkFileSelect(scope, elem, attr, ngModel, $parse, $timeout, $compile, upload) {\n /** @namespace attr.ngfSelect */\n /** @namespace attr.ngfChange */\n /** @namespace attr.ngModel */\n /** @namespace attr.ngfModelOptions */\n /** @namespace attr.ngfMultiple */\n /** @namespace attr.ngfCapture */\n /** @namespace attr.ngfValidate */\n /** @namespace attr.ngfKeep */\n var attrGetter = function (name, scope) {\n return upload.attrGetter(name, attr, scope);\n };\n\n function isInputTypeFile() {\n return elem[0].tagName.toLowerCase() === 'input' && attr.type && attr.type.toLowerCase() === 'file';\n }\n\n function fileChangeAttr() {\n return attrGetter('ngfChange') || attrGetter('ngfSelect');\n }\n\n function changeFn(evt) {\n if (upload.shouldUpdateOn('change', attr, scope)) {\n var fileList = evt.__files_ || (evt.target && evt.target.files), files = [];\n /* Handle duplicate call in IE11 */\n if (!fileList) return;\n for (var i = 0; i < fileList.length; i++) {\n files.push(fileList[i]);\n }\n upload.updateModel(ngModel, attr, scope, fileChangeAttr(),\n files.length ? files : null, evt);\n }\n }\n\n upload.registerModelChangeValidator(ngModel, attr, scope);\n\n var unwatches = [];\n if (attrGetter('ngfMultiple')) {\n unwatches.push(scope.$watch(attrGetter('ngfMultiple'), function () {\n fileElem.attr('multiple', attrGetter('ngfMultiple', scope));\n }));\n }\n if (attrGetter('ngfCapture')) {\n unwatches.push(scope.$watch(attrGetter('ngfCapture'), function () {\n fileElem.attr('capture', attrGetter('ngfCapture', scope));\n }));\n }\n if (attrGetter('ngfAccept')) {\n unwatches.push(scope.$watch(attrGetter('ngfAccept'), function () {\n fileElem.attr('accept', attrGetter('ngfAccept', scope));\n }));\n }\n unwatches.push(attr.$observe('accept', function () {\n fileElem.attr('accept', attrGetter('accept'));\n }));\n function bindAttrToFileInput(fileElem, label) {\n function updateId(val) {\n fileElem.attr('id', 'ngf-' + val);\n label.attr('id', 'ngf-label-' + val);\n }\n\n for (var i = 0; i < elem[0].attributes.length; i++) {\n var attribute = elem[0].attributes[i];\n if (attribute.name !== 'type' && attribute.name !== 'class' && attribute.name !== 'style') {\n if (attribute.name === 'id') {\n updateId(attribute.value);\n unwatches.push(attr.$observe('id', updateId));\n } else {\n fileElem.attr(attribute.name, (!attribute.value && (attribute.name === 'required' ||\n attribute.name === 'multiple')) ? attribute.name : attribute.value);\n }\n }\n }\n }\n\n function createFileInput() {\n if (isInputTypeFile()) {\n return elem;\n }\n\n var fileElem = angular.element('');\n\n var label = angular.element('');\n label.css('visibility', 'hidden').css('position', 'absolute').css('overflow', 'hidden')\n .css('width', '0px').css('height', '0px').css('border', 'none')\n .css('margin', '0px').css('padding', '0px').attr('tabindex', '-1');\n bindAttrToFileInput(fileElem, label);\n\n generatedElems.push({el: elem, ref: label});\n\n document.body.appendChild(label.append(fileElem)[0]);\n\n return fileElem;\n }\n\n function clickHandler(evt) {\n if (elem.attr('disabled')) return false;\n if (attrGetter('ngfSelectDisabled', scope)) return;\n\n var r = detectSwipe(evt);\n // prevent the click if it is a swipe\n if (r != null) return r;\n\n resetModel(evt);\n\n // fix for md when the element is removed from the DOM and added back #460\n try {\n if (!isInputTypeFile() && !document.body.contains(fileElem[0])) {\n generatedElems.push({el: elem, ref: fileElem.parent()});\n document.body.appendChild(fileElem.parent()[0]);\n fileElem.bind('change', changeFn);\n }\n } catch (e) {/*ignore*/\n }\n\n if (isDelayedClickSupported(navigator.userAgent)) {\n setTimeout(function () {\n fileElem[0].click();\n }, 0);\n } else {\n fileElem[0].click();\n }\n\n return false;\n }\n\n\n var initialTouchStartY = 0;\n var initialTouchStartX = 0;\n\n function detectSwipe(evt) {\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 evt.preventDefault();\n return false;\n }\n }\n return true;\n }\n }\n }\n\n var fileElem = elem;\n\n function resetModel(evt) {\n if (upload.shouldUpdateOn('click', attr, scope) && fileElem.val()) {\n fileElem.val(null);\n upload.updateModel(ngModel, attr, scope, fileChangeAttr(), null, evt, true);\n }\n }\n\n if (!isInputTypeFile()) {\n fileElem = createFileInput();\n }\n fileElem.bind('change', changeFn);\n\n if (!isInputTypeFile()) {\n elem.bind('click touchstart touchend', clickHandler);\n } else {\n elem.bind('click', resetModel);\n }\n\n function ie10SameFileSelectFix(evt) {\n if (fileElem && !fileElem.attr('__ngf_ie10_Fix_')) {\n if (!fileElem[0].parentNode) {\n fileElem = null;\n return;\n }\n evt.preventDefault();\n evt.stopPropagation();\n fileElem.unbind('click');\n var clone = fileElem.clone();\n fileElem.replaceWith(clone);\n fileElem = clone;\n fileElem.attr('__ngf_ie10_Fix_', 'true');\n fileElem.bind('change', changeFn);\n fileElem.bind('click', ie10SameFileSelectFix);\n fileElem[0].click();\n return false;\n } else {\n fileElem.removeAttr('__ngf_ie10_Fix_');\n }\n }\n\n if (navigator.appVersion.indexOf('MSIE 10') !== -1) {\n fileElem.bind('click', ie10SameFileSelectFix);\n }\n\n if (ngModel) ngModel.$formatters.push(function (val) {\n if (val == null || val.length === 0) {\n if (fileElem.val()) {\n fileElem.val(null);\n }\n }\n return val;\n });\n\n scope.$on('$destroy', function () {\n if (!isInputTypeFile()) fileElem.parent().remove();\n angular.forEach(unwatches, function (unwatch) {\n unwatch();\n });\n });\n\n $timeout(function () {\n for (var i = 0; i < generatedElems.length; i++) {\n var g = generatedElems[i];\n if (!document.body.contains(g.el[0])) {\n generatedElems.splice(i, 1);\n g.ref.remove();\n }\n }\n });\n\n if (window.FileAPI && window.FileAPI.ngfFixIE) {\n window.FileAPI.ngfFixIE(elem, fileElem, changeFn);\n }\n }\n\n return {\n restrict: 'AEC',\n require: '?ngModel',\n link: function (scope, elem, attr, ngModel) {\n linkFileSelect(scope, elem, attr, ngModel, $parse, $timeout, $compile, Upload);\n }\n };\n}]);\n\n(function () {\n\n ngFileUpload.service('UploadDataUrl', ['UploadBase', '$timeout', '$q', function (UploadBase, $timeout, $q) {\n var upload = UploadBase;\n upload.base64DataUrl = function (file) {\n if (angular.isArray(file)) {\n var d = $q.defer(), count = 0;\n angular.forEach(file, function (f) {\n upload.dataUrl(f, true)['finally'](function () {\n count++;\n if (count === file.length) {\n var urls = [];\n angular.forEach(file, function (ff) {\n urls.push(ff.$ngfDataUrl);\n });\n d.resolve(urls, file);\n }\n });\n });\n return d.promise;\n } else {\n return upload.dataUrl(file, true);\n }\n };\n upload.dataUrl = function (file, disallowObjectUrl) {\n if (!file) return upload.emptyPromise(file, file);\n if ((disallowObjectUrl && file.$ngfDataUrl != null) || (!disallowObjectUrl && file.$ngfBlobUrl != null)) {\n return upload.emptyPromise(disallowObjectUrl ? file.$ngfDataUrl : file.$ngfBlobUrl, file);\n }\n var p = disallowObjectUrl ? file.$$ngfDataUrlPromise : file.$$ngfBlobUrlPromise;\n if (p) return p;\n\n var deferred = $q.defer();\n $timeout(function () {\n if (window.FileReader && file &&\n (!window.FileAPI || navigator.userAgent.indexOf('MSIE 8') === -1 || file.size < 20000) &&\n (!window.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 = window.URL || window.webkitURL;\n if (URL && URL.createObjectURL && !disallowObjectUrl) {\n var url;\n try {\n url = URL.createObjectURL(file);\n } catch (e) {\n $timeout(function () {\n file.$ngfBlobUrl = '';\n deferred.reject();\n });\n return;\n }\n $timeout(function () {\n file.$ngfBlobUrl = url;\n if (url) {\n deferred.resolve(url, file);\n upload.blobUrls = upload.blobUrls || [];\n upload.blobUrlsTotalSize = upload.blobUrlsTotalSize || 0;\n upload.blobUrls.push({url: url, size: file.size});\n upload.blobUrlsTotalSize += file.size || 0;\n var maxMemory = upload.defaults.blobUrlsMaxMemory || 268435456;\n var maxLength = upload.defaults.blobUrlsMaxQueueSize || 200;\n while ((upload.blobUrlsTotalSize > maxMemory || upload.blobUrls.length > maxLength) && upload.blobUrls.length > 1) {\n var obj = upload.blobUrls.splice(0, 1)[0];\n URL.revokeObjectURL(obj.url);\n upload.blobUrlsTotalSize -= obj.size;\n }\n }\n });\n } else {\n var fileReader = new FileReader();\n fileReader.onload = function (e) {\n $timeout(function () {\n file.$ngfDataUrl = e.target.result;\n deferred.resolve(e.target.result, file);\n $timeout(function () {\n delete file.$ngfDataUrl;\n }, 1000);\n });\n };\n fileReader.onerror = function () {\n $timeout(function () {\n file.$ngfDataUrl = '';\n deferred.reject();\n });\n };\n fileReader.readAsDataURL(file);\n }\n } else {\n $timeout(function () {\n file[disallowObjectUrl ? '$ngfDataUrl' : '$ngfBlobUrl'] = '';\n deferred.reject();\n });\n }\n });\n\n if (disallowObjectUrl) {\n p = file.$$ngfDataUrlPromise = deferred.promise;\n } else {\n p = file.$$ngfBlobUrlPromise = deferred.promise;\n }\n p['finally'](function () {\n delete file[disallowObjectUrl ? '$$ngfDataUrlPromise' : '$$ngfBlobUrlPromise'];\n });\n return p;\n };\n return upload;\n }]);\n\n function getTagType(el) {\n if (el.tagName.toLowerCase() === 'img') return 'image';\n if (el.tagName.toLowerCase() === 'audio') return 'audio';\n if (el.tagName.toLowerCase() === 'video') return 'video';\n return /./;\n }\n\n function linkFileDirective(Upload, $timeout, scope, elem, attr, directiveName, resizeParams, isBackground) {\n function constructDataUrl(file) {\n var disallowObjectUrl = Upload.attrGetter('ngfNoObjectUrl', attr, scope);\n Upload.dataUrl(file, disallowObjectUrl)['finally'](function () {\n $timeout(function () {\n var src = (disallowObjectUrl ? file.$ngfDataUrl : file.$ngfBlobUrl) || file.$ngfDataUrl;\n if (isBackground) {\n elem.css('background-image', 'url(\\'' + (src || '') + '\\')');\n } else {\n elem.attr('src', src);\n }\n if (src) {\n elem.removeClass('ng-hide');\n } else {\n elem.addClass('ng-hide');\n }\n });\n });\n }\n\n $timeout(function () {\n var unwatch = scope.$watch(attr[directiveName], function (file) {\n var size = resizeParams;\n if (directiveName === 'ngfThumbnail') {\n if (!size) {\n size = {\n width: elem[0].naturalWidth || elem[0].clientWidth,\n height: elem[0].naturalHeight || elem[0].clientHeight\n };\n }\n if (size.width === 0 && window.getComputedStyle) {\n var style = getComputedStyle(elem[0]);\n if (style.width && style.width.indexOf('px') > -1 && style.height && style.height.indexOf('px') > -1) {\n size = {\n width: parseInt(style.width.slice(0, -2)),\n height: parseInt(style.height.slice(0, -2))\n };\n }\n }\n }\n\n if (angular.isString(file)) {\n elem.removeClass('ng-hide');\n if (isBackground) {\n return elem.css('background-image', 'url(\\'' + file + '\\')');\n } else {\n return elem.attr('src', file);\n }\n }\n if (file && file.type && file.type.search(getTagType(elem[0])) === 0 &&\n (!isBackground || file.type.indexOf('image') === 0)) {\n if (size && Upload.isResizeSupported()) {\n size.resizeIf = function (width, height) {\n return Upload.attrGetter('ngfResizeIf', attr, scope,\n {$width: width, $height: height, $file: file});\n };\n Upload.resize(file, size).then(\n function (f) {\n constructDataUrl(f);\n }, function (e) {\n throw e;\n }\n );\n } else {\n constructDataUrl(file);\n }\n } else {\n elem.addClass('ng-hide');\n }\n });\n\n scope.$on('$destroy', function () {\n unwatch();\n });\n });\n }\n\n\n /** @namespace attr.ngfSrc */\n /** @namespace attr.ngfNoObjectUrl */\n ngFileUpload.directive('ngfSrc', ['Upload', '$timeout', function (Upload, $timeout) {\n return {\n restrict: 'AE',\n link: function (scope, elem, attr) {\n linkFileDirective(Upload, $timeout, scope, elem, attr, 'ngfSrc',\n Upload.attrGetter('ngfResize', attr, scope), false);\n }\n };\n }]);\n\n /** @namespace attr.ngfBackground */\n /** @namespace attr.ngfNoObjectUrl */\n ngFileUpload.directive('ngfBackground', ['Upload', '$timeout', function (Upload, $timeout) {\n return {\n restrict: 'AE',\n link: function (scope, elem, attr) {\n linkFileDirective(Upload, $timeout, scope, elem, attr, 'ngfBackground',\n Upload.attrGetter('ngfResize', attr, scope), true);\n }\n };\n }]);\n\n /** @namespace attr.ngfThumbnail */\n /** @namespace attr.ngfAsBackground */\n /** @namespace attr.ngfSize */\n /** @namespace attr.ngfNoObjectUrl */\n ngFileUpload.directive('ngfThumbnail', ['Upload', '$timeout', function (Upload, $timeout) {\n return {\n restrict: 'AE',\n link: function (scope, elem, attr) {\n var size = Upload.attrGetter('ngfSize', attr, scope);\n linkFileDirective(Upload, $timeout, scope, elem, attr, 'ngfThumbnail', size,\n Upload.attrGetter('ngfAsBackground', attr, scope));\n }\n };\n }]);\n\n ngFileUpload.config(['$compileProvider', function ($compileProvider) {\n if ($compileProvider.imgSrcSanitizationWhitelist) $compileProvider.imgSrcSanitizationWhitelist(/^\\s*(https?|ftp|mailto|tel|webcal|local|file|data|blob):/);\n if ($compileProvider.aHrefSanitizationWhitelist) $compileProvider.aHrefSanitizationWhitelist(/^\\s*(https?|ftp|mailto|tel|webcal|local|file|data|blob):/);\n }]);\n\n ngFileUpload.filter('ngfDataUrl', ['UploadDataUrl', '$sce', function (UploadDataUrl, $sce) {\n return function (file, disallowObjectUrl, trustedUrl) {\n if (angular.isString(file)) {\n return $sce.trustAsResourceUrl(file);\n }\n var src = file && ((disallowObjectUrl ? file.$ngfDataUrl : file.$ngfBlobUrl) || file.$ngfDataUrl);\n if (file && !src) {\n if (!file.$ngfDataUrlFilterInProgress && angular.isObject(file)) {\n file.$ngfDataUrlFilterInProgress = true;\n UploadDataUrl.dataUrl(file, disallowObjectUrl);\n }\n return '';\n }\n if (file) delete file.$ngfDataUrlFilterInProgress;\n return (file && src ? (trustedUrl ? $sce.trustAsResourceUrl(src) : src) : file) || '';\n };\n }]);\n\n})();\n\nngFileUpload.service('UploadValidate', ['UploadDataUrl', '$q', '$timeout', function (UploadDataUrl, $q, $timeout) {\n var upload = UploadDataUrl;\n\n function globStringToRegex(str) {\n var regexp = '', excludes = [];\n if (str.length > 2 && str[0] === '/' && str[str.length - 1] === '/') {\n regexp = str.substring(1, str.length - 1);\n } else {\n var split = str.split(',');\n if (split.length > 1) {\n for (var i = 0; i < split.length; i++) {\n var r = globStringToRegex(split[i]);\n if (r.regexp) {\n regexp += '(' + r.regexp + ')';\n if (i < split.length - 1) {\n regexp += '|';\n }\n } else {\n excludes = excludes.concat(r.excludes);\n }\n }\n } else {\n if (str.indexOf('!') === 0) {\n excludes.push('^((?!' + globStringToRegex(str.substring(1)).regexp + ').)*$');\n } else {\n if (str.indexOf('.') === 0) {\n str = '*' + str;\n }\n regexp = '^' + str.replace(new RegExp('[.\\\\\\\\+*?\\\\[\\\\^\\\\]$(){}=!<>|:\\\\-]', 'g'), '\\\\$&') + '$';\n regexp = regexp.replace(/\\\\\\*/g, '.*').replace(/\\\\\\?/g, '.');\n }\n }\n }\n return {regexp: regexp, excludes: excludes};\n }\n\n upload.validatePattern = function (file, val) {\n if (!val) {\n return true;\n }\n var pattern = globStringToRegex(val), valid = true;\n if (pattern.regexp && pattern.regexp.length) {\n var regexp = new RegExp(pattern.regexp, 'i');\n valid = (file.type != null && regexp.test(file.type)) ||\n (file.name != null && regexp.test(file.name));\n }\n var len = pattern.excludes.length;\n while (len--) {\n var exclude = new RegExp(pattern.excludes[len], 'i');\n valid = valid && (file.type == null || exclude.test(file.type)) &&\n (file.name == null || exclude.test(file.name));\n }\n return valid;\n };\n\n upload.ratioToFloat = function (val) {\n var r = val.toString(), xIndex = r.search(/[x:]/i);\n if (xIndex > -1) {\n r = parseFloat(r.substring(0, xIndex)) / parseFloat(r.substring(xIndex + 1));\n } else {\n r = parseFloat(r);\n }\n return r;\n };\n\n upload.registerModelChangeValidator = function (ngModel, attr, scope) {\n if (ngModel) {\n ngModel.$formatters.push(function (files) {\n if (ngModel.$dirty) {\n var filesArray = files;\n if (files && !angular.isArray(files)) {\n filesArray = [files];\n }\n upload.validate(filesArray, 0, ngModel, attr, scope).then(function () {\n upload.applyModelValidation(ngModel, filesArray);\n });\n }\n return files;\n });\n }\n };\n\n function markModelAsDirty(ngModel, files) {\n if (files != null && !ngModel.$dirty) {\n if (ngModel.$setDirty) {\n ngModel.$setDirty();\n } else {\n ngModel.$dirty = true;\n }\n }\n }\n\n upload.applyModelValidation = function (ngModel, files) {\n markModelAsDirty(ngModel, files);\n angular.forEach(ngModel.$ngfValidations, function (validation) {\n ngModel.$setValidity(validation.name, validation.valid);\n });\n };\n\n upload.getValidationAttr = function (attr, scope, name, validationName, file) {\n var dName = 'ngf' + name[0].toUpperCase() + name.substr(1);\n var val = upload.attrGetter(dName, attr, scope, {$file: file});\n if (val == null) {\n val = upload.attrGetter('ngfValidate', attr, scope, {$file: file});\n if (val) {\n var split = (validationName || name).split('.');\n val = val[split[0]];\n if (split.length > 1) {\n val = val && val[split[1]];\n }\n }\n }\n return val;\n };\n\n upload.validate = function (files, prevLength, ngModel, attr, scope) {\n ngModel = ngModel || {};\n ngModel.$ngfValidations = ngModel.$ngfValidations || [];\n\n angular.forEach(ngModel.$ngfValidations, function (v) {\n v.valid = true;\n });\n\n var attrGetter = function (name, params) {\n return upload.attrGetter(name, attr, scope, params);\n };\n\n var ignoredErrors = (upload.attrGetter('ngfIgnoreInvalid', attr, scope) || '').split(' ');\n var runAllValidation = upload.attrGetter('ngfRunAllValidations', attr, scope);\n\n if (files == null || files.length === 0) {\n return upload.emptyPromise({'validFiles': files, 'invalidFiles': []});\n }\n\n files = files.length === undefined ? [files] : files.slice(0);\n var invalidFiles = [];\n\n function validateSync(name, validationName, fn) {\n if (files) {\n var i = files.length, valid = null;\n while (i--) {\n var file = files[i];\n if (file) {\n var val = upload.getValidationAttr(attr, scope, name, validationName, file);\n if (val != null) {\n if (!fn(file, val, i)) {\n if (ignoredErrors.indexOf(name) === -1) {\n file.$error = name;\n (file.$errorMessages = (file.$errorMessages || {}))[name] = true;\n file.$errorParam = val;\n if (invalidFiles.indexOf(file) === -1) {\n invalidFiles.push(file);\n }\n if (!runAllValidation) {\n files.splice(i, 1);\n }\n valid = false;\n } else {\n files.splice(i, 1);\n }\n }\n }\n }\n }\n if (valid !== null) {\n ngModel.$ngfValidations.push({name: name, valid: valid});\n }\n }\n }\n\n validateSync('pattern', null, upload.validatePattern);\n validateSync('minSize', 'size.min', function (file, val) {\n return file.size + 0.1 >= upload.translateScalars(val);\n });\n validateSync('maxSize', 'size.max', function (file, val) {\n return file.size - 0.1 <= upload.translateScalars(val);\n });\n var totalSize = 0;\n validateSync('maxTotalSize', null, function (file, val) {\n totalSize += file.size;\n if (totalSize > upload.translateScalars(val)) {\n files.splice(0, files.length);\n return false;\n }\n return true;\n });\n\n validateSync('validateFn', null, function (file, r) {\n return r === true || r === null || r === '';\n });\n\n if (!files.length) {\n return upload.emptyPromise({'validFiles': [], 'invalidFiles': invalidFiles});\n }\n\n function validateAsync(name, validationName, type, asyncFn, fn) {\n function resolveResult(defer, file, val) {\n function resolveInternal(fn) {\n if (fn()) {\n if (ignoredErrors.indexOf(name) === -1) {\n file.$error = name;\n (file.$errorMessages = (file.$errorMessages || {}))[name] = true;\n file.$errorParam = val;\n if (invalidFiles.indexOf(file) === -1) {\n invalidFiles.push(file);\n }\n if (!runAllValidation) {\n var i = files.indexOf(file);\n if (i > -1) files.splice(i, 1);\n }\n defer.resolve(false);\n } else {\n var j = files.indexOf(file);\n if (j > -1) files.splice(j, 1);\n defer.resolve(true);\n }\n } else {\n defer.resolve(true);\n }\n }\n\n if (val != null) {\n asyncFn(file, val).then(function (d) {\n resolveInternal(function () {\n return !fn(d, val);\n });\n }, function () {\n resolveInternal(function () {\n return attrGetter('ngfValidateForce', {$file: file});\n });\n });\n } else {\n defer.resolve(true);\n }\n }\n\n var promises = [upload.emptyPromise(true)];\n if (files) {\n files = files.length === undefined ? [files] : files;\n angular.forEach(files, function (file) {\n var defer = $q.defer();\n promises.push(defer.promise);\n if (type && (file.type == null || file.type.search(type) !== 0)) {\n defer.resolve(true);\n return;\n }\n if (name === 'dimensions' && upload.attrGetter('ngfDimensions', attr) != null) {\n upload.imageDimensions(file).then(function (d) {\n resolveResult(defer, file,\n attrGetter('ngfDimensions', {$file: file, $width: d.width, $height: d.height}));\n }, function () {\n defer.resolve(false);\n });\n } else if (name === 'duration' && upload.attrGetter('ngfDuration', attr) != null) {\n upload.mediaDuration(file).then(function (d) {\n resolveResult(defer, file,\n attrGetter('ngfDuration', {$file: file, $duration: d}));\n }, function () {\n defer.resolve(false);\n });\n } else {\n resolveResult(defer, file,\n upload.getValidationAttr(attr, scope, name, validationName, file));\n }\n });\n }\n var deffer = $q.defer();\n $q.all(promises).then(function (values) {\n var isValid = true;\n for (var i = 0; i < values.length; i++) {\n if (!values[i]) {\n isValid = false;\n break;\n }\n }\n ngModel.$ngfValidations.push({name: name, valid: isValid});\n deffer.resolve(isValid);\n });\n return deffer.promise;\n }\n\n var deffer = $q.defer();\n var promises = [];\n\n promises.push(validateAsync('maxHeight', 'height.max', /image/,\n this.imageDimensions, function (d, val) {\n return d.height <= val;\n }));\n promises.push(validateAsync('minHeight', 'height.min', /image/,\n this.imageDimensions, function (d, val) {\n return d.height >= val;\n }));\n promises.push(validateAsync('maxWidth', 'width.max', /image/,\n this.imageDimensions, function (d, val) {\n return d.width <= val;\n }));\n promises.push(validateAsync('minWidth', 'width.min', /image/,\n this.imageDimensions, function (d, val) {\n return d.width >= val;\n }));\n promises.push(validateAsync('dimensions', null, /image/,\n function (file, val) {\n return upload.emptyPromise(val);\n }, function (r) {\n return r;\n }));\n promises.push(validateAsync('ratio', null, /image/,\n this.imageDimensions, function (d, val) {\n var split = val.toString().split(','), valid = false;\n for (var i = 0; i < split.length; i++) {\n if (Math.abs((d.width / d.height) - upload.ratioToFloat(split[i])) < 0.01) {\n valid = true;\n }\n }\n return valid;\n }));\n promises.push(validateAsync('maxRatio', 'ratio.max', /image/,\n this.imageDimensions, function (d, val) {\n return (d.width / d.height) - upload.ratioToFloat(val) < 0.0001;\n }));\n promises.push(validateAsync('minRatio', 'ratio.min', /image/,\n this.imageDimensions, function (d, val) {\n return (d.width / d.height) - upload.ratioToFloat(val) > -0.0001;\n }));\n promises.push(validateAsync('maxDuration', 'duration.max', /audio|video/,\n this.mediaDuration, function (d, val) {\n return d <= upload.translateScalars(val);\n }));\n promises.push(validateAsync('minDuration', 'duration.min', /audio|video/,\n this.mediaDuration, function (d, val) {\n return d >= upload.translateScalars(val);\n }));\n promises.push(validateAsync('duration', null, /audio|video/,\n function (file, val) {\n return upload.emptyPromise(val);\n }, function (r) {\n return r;\n }));\n\n promises.push(validateAsync('validateAsyncFn', null, null,\n function (file, val) {\n return val;\n }, function (r) {\n return r === true || r === null || r === '';\n }));\n\n $q.all(promises).then(function () {\n\n if (runAllValidation) {\n for (var i = 0; i < files.length; i++) {\n var file = files[i];\n if (file.$error) {\n files.splice(i--, 1);\n }\n }\n }\n\n runAllValidation = false;\n validateSync('maxFiles', null, function (file, val, i) {\n return prevLength + i < val;\n });\n\n deffer.resolve({'validFiles': files, 'invalidFiles': invalidFiles});\n });\n return deffer.promise;\n };\n\n upload.imageDimensions = function (file) {\n if (file.$ngfWidth && file.$ngfHeight) {\n var d = $q.defer();\n $timeout(function () {\n d.resolve({width: file.$ngfWidth, height: file.$ngfHeight});\n });\n return d.promise;\n }\n if (file.$ngfDimensionPromise) return file.$ngfDimensionPromise;\n\n var deferred = $q.defer();\n $timeout(function () {\n if (file.type.indexOf('image') !== 0) {\n deferred.reject('not image');\n return;\n }\n upload.dataUrl(file).then(function (dataUrl) {\n var img = angular.element('').attr('src', dataUrl)\n .css('visibility', 'hidden').css('position', 'fixed')\n .css('max-width', 'none !important').css('max-height', 'none !important');\n\n function success() {\n var width = img[0].naturalWidth || img[0].clientWidth;\n var height = img[0].naturalHeight || img[0].clientHeight;\n img.remove();\n file.$ngfWidth = width;\n file.$ngfHeight = height;\n deferred.resolve({width: width, height: height});\n }\n\n function error() {\n img.remove();\n deferred.reject('load error');\n }\n\n img.on('load', success);\n img.on('error', error);\n\n var secondsCounter = 0;\n function checkLoadErrorInCaseOfNoCallback() {\n $timeout(function () {\n if (img[0].parentNode) {\n if (img[0].clientWidth) {\n success();\n } else if (secondsCounter++ > 10) {\n error();\n } else {\n checkLoadErrorInCaseOfNoCallback();\n }\n }\n }, 1000);\n }\n\n checkLoadErrorInCaseOfNoCallback();\n\n angular.element(document.getElementsByTagName('body')[0]).append(img);\n }, function () {\n deferred.reject('load error');\n });\n });\n\n file.$ngfDimensionPromise = deferred.promise;\n file.$ngfDimensionPromise['finally'](function () {\n delete file.$ngfDimensionPromise;\n });\n return file.$ngfDimensionPromise;\n };\n\n upload.mediaDuration = function (file) {\n if (file.$ngfDuration) {\n var d = $q.defer();\n $timeout(function () {\n d.resolve(file.$ngfDuration);\n });\n return d.promise;\n }\n if (file.$ngfDurationPromise) return file.$ngfDurationPromise;\n\n var deferred = $q.defer();\n $timeout(function () {\n if (file.type.indexOf('audio') !== 0 && file.type.indexOf('video') !== 0) {\n deferred.reject('not media');\n return;\n }\n upload.dataUrl(file).then(function (dataUrl) {\n var el = angular.element(file.type.indexOf('audio') === 0 ? '