diff --git a/app/index.html b/app/index.html index b7fa1d8bbc..0b51ec6c1e 100644 --- a/app/index.html +++ b/app/index.html @@ -152,6 +152,11 @@

JavaScript Required

+ + + + + @@ -198,7 +203,6 @@

JavaScript Required

- diff --git a/app/scripts/app.js b/app/scripts/app.js index d15a2c7777..42f5baed03 100644 --- a/app/scripts/app.js +++ b/app/scripts/app.js @@ -436,15 +436,6 @@ angular .constant("LOGGING_URL", _.get(window.OPENSHIFT_CONFIG, "loggingURL")) .constant("METRICS_URL", _.get(window.OPENSHIFT_CONFIG, "metricsURL")) .constant("LIMIT_REQUEST_OVERRIDES", _.get(window.OPENSHIFT_CONFIG, "limitRequestOverrides")) - // Sometimes we need to know the css breakpoints, make sure to update this - // if they ever change! - .constant("BREAKPOINTS", { - screenXsMin: 480, // screen-xs - screenSmMin: 768, // screen-sm - screenMdMin: 992, // screen-md - screenLgMin: 1200, // screen-lg - screenXlgMin: 1600 // screen-xlg - }) // A (very) basic regex to determine if a URL is an absolute URL, enough to // warn the user the Git URL probably won't work. This should only be used // as a sanity test and shouldn't block submitting the form. Rely on the API diff --git a/app/scripts/filters/util.js b/app/scripts/filters/util.js index 0c16505c11..93945d92a6 100644 --- a/app/scripts/filters/util.js +++ b/app/scripts/filters/util.js @@ -495,18 +495,6 @@ angular.module('openshiftConsole') .filter('encodeURIComponent', function() { return window.encodeURIComponent; }) - // Usage: - // - // Prefer this to the AngularJS `linky` filter since it only matches http and - // https URLs. We've had issues with incorretly matching email addresses. - // - // https://github.com/openshift/origin-web-console/issues/315 - // See also HTMLService.linkify - .filter('linkify', function(HTMLService) { - return function(text, target, alreadyEscaped) { - return HTMLService.linkify(text, target, alreadyEscaped); - }; - }) .filter('enableTechPreviewFeature', function(Constants) { return function(feature) { return _.get(Constants, ['ENABLE_TECH_PREVIEW_FEATURE', feature], false); diff --git a/app/scripts/services/html.js b/app/scripts/services/html.js deleted file mode 100644 index 3e75b8dea6..0000000000 --- a/app/scripts/services/html.js +++ /dev/null @@ -1,60 +0,0 @@ -'use strict'; - -angular.module("openshiftConsole") - .factory("HTMLService", - function(BREAKPOINTS) { - return { - // Ge the breakpoint for the current screen width. - getBreakpoint: function() { - if (window.innerWidth < BREAKPOINTS.screenXsMin) { - return 'xxs'; - } - - if (window.innerWidth < BREAKPOINTS.screenSmMin) { - return 'xs'; - } - - if (window.innerWidth < BREAKPOINTS.screenMdMin) { - return 'sm'; - } - - if (window.innerWidth < BREAKPOINTS.screenLgMin) { - return 'md'; - } - - return 'lg'; - }, - - // Based on https://github.com/drudru/ansi_up/blob/v1.3.0/ansi_up.js#L93-L97 - // and https://github.com/angular/angular.js/blob/v1.5.8/src/ngSanitize/filter/linky.js#L131-L132 - // The AngularJS `linky` regex will avoid matching special characters like `"` at - // the end of the URL. - // - // text: The text to linkify. Assumes `text` is NOT HTML-escaped unless - // `alreadyEscaped` is true. - // target: The optional link target (for instance, '_blank') - // alreadyEscaped: `true` if the text has already been HTML escaped - // (like log content that has been run through ansi_up.ansi_to_html) - // - // Returns an HTML escaped string with http:// and https:// URLs changed to clickable links. - linkify: function(text, target, alreadyEscaped) { - if (!text) { - return text; - } - - // First HTML escape the content. - if (!alreadyEscaped) { - text = _.escape(text); - } - - // Replace any URLs with links. - return text.replace(/https?:\/\/[A-Za-z0-9._%+-]+\S*[^\s.;,(){}<>"\u201d\u2019]/gm, function(str) { - if (target) { - return "" + str + ""; - } - - return "" + str + ""; - }); - } - }; - }); diff --git a/bower.json b/bower.json index 47f27be704..ca5499b8d9 100644 --- a/bower.json +++ b/bower.json @@ -45,8 +45,8 @@ "angular-moment": "1.0.0", "angular-utf8-base64": "0.0.5", "file-saver": "1.3.3", - "origin-web-common": "0.0.30", - "origin-web-catalog": "0.0.18" + "origin-web-common": "0.0.31", + "origin-web-catalog": "0.0.19" }, "devDependencies": { "angular-mocks": "1.5.11", diff --git a/dist/scripts/scripts.js b/dist/scripts/scripts.js index cbe9f36536..7ca465aa43 100644 --- a/dist/scripts/scripts.js +++ b/dist/scripts/scripts.js @@ -1268,13 +1268,7 @@ redirectTo:"/project/:project/browse/rc/:rc" }).otherwise({ redirectTo:"/" }); -} ]).constant("LOGGING_URL", _.get(window.OPENSHIFT_CONFIG, "loggingURL")).constant("METRICS_URL", _.get(window.OPENSHIFT_CONFIG, "metricsURL")).constant("LIMIT_REQUEST_OVERRIDES", _.get(window.OPENSHIFT_CONFIG, "limitRequestOverrides")).constant("BREAKPOINTS", { -screenXsMin:480, -screenSmMin:768, -screenMdMin:992, -screenLgMin:1200, -screenXlgMin:1600 -}).constant("SOURCE_URL_PATTERN", /^[a-z][a-z0-9+.-@]*:(\/\/)?[0-9a-z_-]+/i).constant("RELATIVE_PATH_PATTERN", /^(?!\/)(?!\.\.(\/|$))(?!.*\/\.\.(\/|$)).*$/).constant("IS_IOS", /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream).constant("IS_SAFARI", /Version\/[\d\.]+.*Safari/.test(navigator.userAgent)).constant("amTimeAgoConfig", { +} ]).constant("LOGGING_URL", _.get(window.OPENSHIFT_CONFIG, "loggingURL")).constant("METRICS_URL", _.get(window.OPENSHIFT_CONFIG, "metricsURL")).constant("LIMIT_REQUEST_OVERRIDES", _.get(window.OPENSHIFT_CONFIG, "limitRequestOverrides")).constant("SOURCE_URL_PATTERN", /^[a-z][a-z0-9+.-@]*:(\/\/)?[0-9a-z_-]+/i).constant("RELATIVE_PATH_PATTERN", /^(?!\/)(?!\.\.(\/|$))(?!.*\/\.\.(\/|$)).*$/).constant("IS_IOS", /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream).constant("IS_SAFARI", /Version\/[\d\.]+.*Safari/.test(navigator.userAgent)).constant("amTimeAgoConfig", { titleFormat:"LLL" }).config([ "kubernetesContainerSocketProvider", function(a) { a.WebSocketFactory = "ContainerWebSocket"; @@ -3766,17 +3760,6 @@ return d += " -n " + a.metadata.namespace; return { getLogsCommand:c }; -} ]), angular.module("openshiftConsole").factory("HTMLService", [ "BREAKPOINTS", function(a) { -return { -getBreakpoint:function() { -return window.innerWidth < a.screenXsMin ? "xxs" :window.innerWidth < a.screenSmMin ? "xs" :window.innerWidth < a.screenMdMin ? "sm" :window.innerWidth < a.screenLgMin ? "md" :"lg"; -}, -linkify:function(a, b, c) { -return a ? (c || (a = _.escape(a)), a.replace(/https?:\/\/[A-Za-z0-9._%+-]+\S*[^\s.;,(){}<>"\u201d\u2019]/gm, function(a) { -return b ? '' + a + "" :'' + a + ""; -})) :a; -} -}; } ]), angular.module("openshiftConsole").factory("EnvironmentService", [ "$filter", "keyValueEditorUtils", function(a, b) { var c = function(a) { return _.get(a, "spec.template.spec.containers", []); @@ -14485,11 +14468,7 @@ return Math.abs(a); }; }).filter("encodeURIComponent", function() { return window.encodeURIComponent; -}).filter("linkify", [ "HTMLService", function(a) { -return function(b, c, d) { -return a.linkify(b, c, d); -}; -} ]).filter("enableTechPreviewFeature", [ "Constants", function(a) { +}).filter("enableTechPreviewFeature", [ "Constants", function(a) { return function(b) { return _.get(a, [ "ENABLE_TECH_PREVIEW_FEATURE", b ], !1); }; diff --git a/dist/scripts/vendor.js b/dist/scripts/vendor.js index 1b272b45f3..f5c1903304 100644 --- a/dist/scripts/vendor.js +++ b/dist/scripts/vendor.js @@ -59532,15 +59532,21 @@ var n = function() { window.OPENSHIFT_CONFIG.api.k8s.resources = b.k8s, window.OPENSHIFT_CONFIG.api.openshift.resources = b.openshift, window.OPENSHIFT_CONFIG.apis.groups = c, d.length && (window.OPENSHIFT_CONFIG.apis.API_DISCOVERY_ERRORS = d), a(); }, o = [ g, i, l ]; o = o.concat(m), $.when.apply(this, o).always(n); -}), angular.module("openshiftCommonUI", []).constant("DNS1123_SUBDOMAIN_VALIDATION", { +}), angular.module("openshiftCommonUI", []).constant("BREAKPOINTS", { +screenXsMin:480, +screenSmMin:768, +screenMdMin:992, +screenLgMin:1200, +screenXlgMin:1600 +}).constant("DNS1123_SUBDOMAIN_VALIDATION", { pattern:/^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$/, maxlength:253, description:"Name must consist of lower-case letters, numbers, periods, and hyphens. It must start and end with a letter or a number." }), hawtioPluginLoader.addModule("openshiftCommonUI"), angular.module("openshiftCommonUI").run([ "$templateCache", function(a) { "use strict"; a.put("src/components/binding/bindApplicationForm.html", '
\n
\n
\n \n \n Binding to a provisioned service will create a secret containing the information necessary for your application to use the service.\n \n
\n
\n\n
\n
\n
\n \n
\n \n You can create the binding later from your project.\n \n
\n
\n \n
\n \n \n \n {{serviceInstance.metadata.name}}\n \n
\n
\n

\n \n \n There are no bindable services in this project\n \n

\n
\n
\n
\n
\n'), -a.put("src/components/binding/bindResults.html", '
\n
\n \n

\n Pending\n
The binding was created but is not ready yet.
\n

\n
\n
\n
\n \n Success\n

\n {{ctrl.serviceToBind}}\n  has been bound\n  to {{ctrl.applicationToBind}} successfully\n

\n
\n
\n The binding operation created the secret\n {{ctrl.binding.spec.secretName}}\n {{ctrl.binding.spec.secretName}}\n that you may need to reference in your application.\n Its data will be available to your application as environment variables.\n
\n
\n \n Info\n The binding secret will only be available to new pods. You will need to redeploy your application.\n
\n
\n
\n
\n
\n \n Error\n

\n Binding Failed\n

\n
\n
\n \n {{ctrl.error.data.message | upperFirst}}\n \n \n An error occurred creating the binding.\n \n
\n
\n'), -a.put("src/components/binding/bindServiceForm.html", '
\n
\n
\n \n Binding to a provisioned service will create a secret containing the information necessary for your application to use the service.\n
\n
\n\n
\n
\n
\n \n
\n \n \n \n {{$select.selected.metadata.name}}\n – {{$select.selected.kind | humanizeKind : true}}\n \n \n \n \n \n \n
\n \n
\n You can reference this secret later from any application either as environment variables or configuration files mounted as volumes.\n
\n \n
\n You can create the binding later from your project.\n
\n
\n
\n
\n
\n'), +a.put("src/components/binding/bindResults.html", '
\n
\n \n

\n Pending\n
The binding was created but is not ready yet.
\n

\n
\n
\n
\n \n Success\n

\n {{ctrl.serviceToBind}}\n has been bound\n to {{ctrl.applicationToBind}} successfully\n

\n
\n
\n The binding operation created the secret\n {{ctrl.binding.spec.secretName}}\n {{ctrl.binding.spec.secretName}}\n that you may need to reference in your application.\n Its data will be available to your application as environment variables.\n
\n
\n \n Info\n The binding secret will only be available to new pods. You will need to redeploy your application.\n
\n
\n
\n
\n
\n \n Error\n

\n Binding Failed\n

\n
\n
\n \n {{ctrl.error.data.message | upperFirst}}\n \n \n An error occurred creating the binding.\n \n
\n
\n'), +a.put("src/components/binding/bindServiceForm.html", '
\n
\n
\n \n Binding to a provisioned service will create a secret containing the information necessary for your application to use the service.\n
\n
\n\n
\n
\n
\n \n
\n \n \n \n {{$select.selected.metadata.name}}\n – {{$select.selected.kind | humanizeKind : true}}\n \n \n \n \n \n \n
\n \n
\n You can reference this secret later from any application either as environment variables or configuration files mounted as volumes.\n
\n \n
\n You can create the binding later from your project.\n
\n
\n
\n
\n
\n'), a.put("src/components/create-project/createProject.html", '
\n
\n
\n \n \n \n \n
\n A unique name for the project.\n
\n
\n \n Name is required.\n \n
\n
\n \n Name must have at least two characters.\n \n
\n
\n \n Project names may only contain lower-case letters, numbers, and dashes.\n They may not start or end with a dash.\n \n
\n
\n \n This name is already in use. Please choose a different name.\n \n
\n
\n\n
\n \n \n
\n\n
\n \n \n
\n\n
\n \n \n Cancel\n \n
\n
\n
\n'), a.put("src/components/delete-project/delete-project-button.html", '
\n \n Delete Project {{projectName}}\n
\n'), a.put("src/components/delete-project/delete-project-modal.html", '
\n \n
\n \n \n
\n
\n'), a.put("src/components/delete-project/delete-project.html", '{{label || \'Delete\'}}\n'), a.put("src/components/edit-project/editProject.html", '
\n
\n
\n \n \n
\n\n
\n \n \n
\n\n
\n \n \n Cancel\n \n
\n
\n
\n'), @@ -59574,6 +59580,7 @@ error:"<", binding:"<", progressInline:"@", serviceToBind:"<", +bindType:"@", applicationToBind:"<", showPodPresets:"<", secretHref:"<" @@ -59592,17 +59599,19 @@ controllerAs:"ctrl", bindings:{ serviceClass:"<", serviceClassName:"<", -formName:"=", applications:"<", -appToBind:"=", -createBinding:"=?", +formName:"=", allowNoBinding:"" + _.escape(e[0]) + "", h = j.lastIndex; return h < b.length && (g += _.escape(b.substring(h))), g; }; +} ]), angular.module("openshiftCommonUI").filter("linkify", [ "HTMLService", function(a) { +return function(b, c, d) { +return a.linkify(b, c, d); +}; } ]), angular.module("openshiftCommonUI").filter("parseJSON", function() { return function(a) { if (!a) return null; @@ -61558,7 +61571,18 @@ return { startTour:k, cancelTour:l }; -}), angular.module("openshiftCommonUI").provider("NotificationsService", function() { +}), angular.module("openshiftCommonUI").factory("HTMLService", [ "BREAKPOINTS", function(a) { +return { +getBreakpoint:function() { +return window.innerWidth < a.screenXsMin ? "xxs" :window.innerWidth < a.screenSmMin ? "xs" :window.innerWidth < a.screenMdMin ? "sm" :window.innerWidth < a.screenLgMin ? "md" :"lg"; +}, +linkify:function(a, b, c) { +return a ? (c || (a = _.escape(a)), a.replace(/https?:\/\/[A-Za-z0-9._%+-]+\S*[^\s.;,(){}<>"\u201d\u2019]/gm, function(a) { +return b ? '' + a + "" :'' + a + ""; +})) :a; +} +}; +} ]), angular.module("openshiftCommonUI").provider("NotificationsService", function() { this.dismissDelay = 8e3, this.autoDismissTypes = [ "info", "success" ], this.$get = [ "$rootScope", function(a) { var b = [], c = this.dismissDelay, d = this.autoDismissTypes, e = function(a, b) { return b ? "hide/notification/" + b + "/" + a :"hide/notification/" + a; @@ -61604,242 +61628,2141 @@ this.dismissDelay = a; }, this.setAutoDismissTypes = function(a) { this.autoDismissTypes = a; }; -}), !function(a) { -function b(c) { -if (d[c]) return d[c].exports; -var e = d[c] = { -i:c, -l:!1, -exports:{} -}; -return a[c].call(e.exports, e, e.exports, b), e.l = !0, e.exports; +}), function(a, b) { +"function" == typeof define && define.amd ? define([], b) :"undefined" != typeof module && module.exports ? module.exports = b() :a.tv4 = b(); +}(this, function() { +function a(b, c) { +if (b === c) return !0; +if ("object" == typeof b && "object" == typeof c) { +if (Array.isArray(b) !== Array.isArray(c)) return !1; +if (Array.isArray(b)) { +if (b.length !== c.length) return !1; +for (var d = 0; d < b.length; d++) if (!a(b[d], c[d])) return !1; +} else { +var e; +for (e in b) if (void 0 === c[e] && void 0 !== b[e]) return !1; +for (e in c) if (void 0 === b[e] && void 0 !== c[e]) return !1; +for (e in b) if (!a(b[e], c[e])) return !1; } -var c = window.webpackJsonp; -window.webpackJsonp = function(d, f, g) { -for (var h, i, j, k = 0, l = []; k < d.length; k++) i = d[k], e[i] && l.push(e[i][0]), e[i] = 0; -for (h in f) Object.prototype.hasOwnProperty.call(f, h) && (a[h] = f[h]); -for (c && c(d, f, g); l.length; ) l.shift()(); -if (g) for (k = 0; k < g.length; k++) j = b(b.s = g[k]); -return j; -}; -var d = {}, e = { -1:0 -}; -b.e = function(a) { -function c() { -f.onerror = f.onload = null, clearTimeout(g); -var b = e[a]; -0 !== b && (b && b[1](new Error("Loading chunk " + a + " failed.")), e[a] = void 0); +return !0; } -if (0 === e[a]) return Promise.resolve(); -if (e[a]) return e[a][2]; -var d = document.getElementsByTagName("head")[0], f = document.createElement("script"); -f.type = "text/javascript", f.charset = "utf-8", f.async = !0, f.timeout = 12e4, b.nc && f.setAttribute("nonce", b.nc), f.src = b.p + "" + a + ".chunk.js"; -var g = setTimeout(c, 12e4); -f.onerror = f.onload = c; -var h = new Promise(function(b, c) { -e[a] = [ b, c ]; -}); -return e[a][2] = h, d.appendChild(f), h; -}, b.m = a, b.c = d, b.i = function(a) { -return a; -}, b.d = function(a, c, d) { -b.o(a, c) || Object.defineProperty(a, c, { -configurable:!1, -enumerable:!0, -get:d -}); -}, b.n = function(a) { -var c = a && a.__esModule ? function() { -return a["default"]; -} :function() { -return a; -}; -return b.d(c, "a", c), c; -}, b.o = function(a, b) { -return Object.prototype.hasOwnProperty.call(a, b); -}, b.p = "/", b.oe = function(a) { -throw console.error(a), a; -}; -}([]), webpackJsonp([ 0, 1 ], [ function(a, b) { -a.exports = _; -}, function(a, b) { -a.exports = angular; -}, function(a, b) { -a.exports = $; -}, function(a, b, c) { -"use strict"; +return !1; +} +function b(a) { +var b = String(a).replace(/^\s+|\s+$/g, "").match(/^([^:\/?#]+:)?(\/\/(?:[^:@]*(?::[^:@]*)?@)?(([^:\/?#]*)(?::(\d*))?))?([^?#]*)(\?[^#]*)?(#[\s\S]*)?/); +return b ? { +href:b[0] || "", +protocol:b[1] || "", +authority:b[2] || "", +host:b[3] || "", +hostname:b[4] || "", +port:b[5] || "", +pathname:b[6] || "", +search:b[7] || "", +hash:b[8] || "" +} :null; +} +function c(a, c) { function d(a) { -var b = a("annotation"); -return function(a) { -return b(a, "deployment.kubernetes.io/revision"); -}; +var b = []; +return a.replace(/^(\.\.?(\/|$))+/, "").replace(/\/(\.(\/|$))+/g, "/").replace(/\/\.\.$/, "/../").replace(/\/?[^\/]*/g, function(a) { +"/.." === a ? b.pop() :b.push(a); +}), b.join("").replace(/^\//, "/" === a.charAt(0) ? "/" :""); } -function e(a) { -var b = a("annotation"); -return function(a) { -return b(a, "deploymentConfig"); -}; +return c = b(c || ""), a = b(a || ""), c && a ? (c.protocol || a.protocol) + (c.protocol || c.authority ? c.authority :a.authority) + d(c.protocol || c.authority || "/" === c.pathname.charAt(0) ? c.pathname :c.pathname ? (a.authority && !a.pathname ? "/" :"") + a.pathname.slice(0, a.pathname.lastIndexOf("/") + 1) + c.pathname :a.pathname) + (c.protocol || c.authority || c.pathname ? c.search :c.search || a.search) + c.hash :null; } -b.__esModule = !0, b.applicationHasDeploymentFilter = d, b.applicationHasDeploymentConfigFilter = e; -}, function(a, b) {}, function(a, b) { -a.exports = '\n \n \n \n \n
\n
\n {{match.label}}\n
\n
\n \n {{tag}}\n \n
\n
\n
\n'; -}, function(a, b) { -a.exports = '\n\n'; -}, function(a, b) { -a.exports = '
\n
\n
\n \n \n \n {{$select.selected.name}}\n \n \n {{tag.name}}\n \n {{otherTag}},\n \n \n \n
\n \n
\n \n
\n \n \n
\n
\n \n Application name is required.\n \n
\n
\n \n Application name consists of lower-case letters, numbers, and dashes. It must start with a letter and can\'t end with a -.\n \n
\n
\n \n Application name must be at least 2 characters.\n \n
\n
\n \n Application name can\'t be more than 24 characters.\n \n
\n
\n
\n
\n\n
\n \n
\n \n \n
\n \n Git repository is required.\n \n
\n
\n \n This might not be a valid Git URL. Check that it is the correct URL to a remote Git repository.\n \n
\n
\n
\n\n \n
\n If you have a private Git repository or need to change application defaults, view\n advanced options.\n
\n
\n
\n'; -}, function(a, b) { -a.exports = '
\n
\n

\n \n

\n

\n The application is being created\n

\n
\n
\n
\n

\n The application is being created\n

\n
\n
\n
\n
\n \n Success\n

\n \n {{$ctrl.name}} has been created in {{$ctrl.selectedProject.metadata.name}} successfully\n \n

\n
\n
\n
\n \n \n
\n
\n

\n Continue to your project to check the status of your application as it builds and deploys.\n

\n
\n
\n
\n \n Error\n

\n Order Failed\n

\n
\n
\n \n {{$ctrl.error.data.message | upperFirst}}\n \n \n An error occurred creating the application.\n \n
\n \n \n
\n\n'; -}, function(a, b) { -a.exports = '\n\n'; -}, function(a, b) { -a.exports = '
\n
\n \n \n \n \n \n \n \n \n
\n
\n {{$ctrl.error}}\n
\n
\n'; -}, function(a, b) { -a.exports = '
\n
\n

Select a Plan

\n
\n \n
\n
\n
\n'; -}, function(a, b) { -a.exports = '
\n
\n
\n

\n \n

\n

\n The service is being provisioned\n

\n
\n
\n \n

\n The service is being provisioned\n

\n
\n
\n
\n
\n \n Error\n

\n Order Failed\n

\n
\n
\n \n {{$ctrl.error.message || $ctrl.error.Message | upperFirst}}\n \n \n An error occurred ordering the service.\n \n
\n
\n
\n
\n \n Success\n

\n \n {{$ctrl.serviceInstanceName}} has been added to {{$ctrl.projectDisplayName}} successfully\n \n

\n
\n
\n
\n \n \n
\n
\n \n Info\n Continue to your project to bind this service to your application. Binding this service creates a secret containing the information necessary for your application to use the service.\n
\n\n'; -}, function(a, b, c) { -"use strict"; -b.__esModule = !0; -var d = c(36); -b.catalogSearch = { -bindings:{ -baseProjectUrl:"@", -catalogItems:"<" +function d(a) { +return a.split("#")[0]; +} +function e(a, b) { +if (a && "object" == typeof a) if (void 0 === b ? b = a.id :"string" == typeof a.id && (b = c(b, a.id), a.id = b), Array.isArray(a)) for (var d = 0; d < a.length; d++) e(a[d], b); else { +"string" == typeof a.$ref && (a.$ref = c(b, a.$ref)); +for (var f in a) "enum" !== f && e(a[f], b); +} +} +function f(a, b, c, d, e) { +if (Error.call(this), void 0 === a) throw new Error("No code supplied for error: " + b); +this.message = b, this.code = a, this.dataPath = c || "", this.schemaPath = d || "", this.subErrors = e || null; +var f = new Error(this.message); +if (this.stack = f.stack || f.stacktrace, !this.stack) try { +throw f; +} catch (f) { +this.stack = f.stack || f.stacktrace; +} +} +function g(a, b) { +if (b.substring(0, a.length) === a) { +var c = b.substring(a.length); +if (b.length > 0 && "/" === b.charAt(a.length - 1) || "#" === c.charAt(0) || "?" === c.charAt(0)) return !0; +} +return !1; +} +function h(a) { +var b = new i(), f = a || "en", g = { +addFormat:function() { +b.addFormat.apply(b, arguments); }, -controller:d.CatalogSearchController, -template:c(27) -}; -}, function(a, b, c) { -"use strict"; -b.__esModule = !0; -var d = c(37); -b.createFromBuilder = { -bindings:{ -baseProjectUrl:"@", -imageStream:"<", -handleClose:"<" +language:function(a) { +return a ? (n[a] || (a = a.split("-")[0]), !!n[a] && (f = a, a)) :f; }, -controller:d.CreateFromBuilderController, -template:c(28) -}; -}, function(a, b, c) { -"use strict"; -b.__esModule = !0; -var d = c(38); -b.landingPage = { -bindings:{ -baseProjectUrl:"@", -onTemplateSelected:"&" +addLanguage:function(a, b) { +var c; +for (c in j) b[c] && !b[j[c]] && (b[j[c]] = b[c]); +var d = a.split("-")[0]; +if (n[d]) { +n[a] = Object.create(n[d]); +for (c in b) "undefined" == typeof n[d][c] && (n[d][c] = b[c]), n[a][c] = b[c]; +} else n[a] = b, n[d] = b; +return this; }, -controller:d.LandingPageController, -template:c(29), -transclude:{ -landingsearch:"landingsearch", -landingheader:"landingheader", -landingbody:"landingbody", -landingside:"landingside" -} -}; -}, function(a, b, c) { -"use strict"; -b.__esModule = !0; -var d = c(39); -b.orderService = { -bindings:{ -baseProjectUrl:"@", -serviceClass:"<", -handleClose:"<" +freshApi:function(a) { +var b = h(); +return a && b.language(a), b; }, -controller:d.OrderServiceController, -template:c(30) -}; -}, function(a, b, c) { -"use strict"; -b.__esModule = !0; -var d = c(40); -b.overlayPanel = { -bindings:{ -showClose:"<", -showPanel:"<", -handleClose:"<", -singleColumn:"<" +validate:function(a, c, d, e) { +var g = new i(b, (!1), n[f], d, e); +"string" == typeof c && (c = { +$ref:c +}), g.addSchema("", c); +var h = g.validateAll(a, c, null, null, ""); +return !h && e && (h = g.banUnknownProperties()), this.error = h, this.missing = g.missing, this.valid = null === h, this.valid; }, -controller:d.OverlayPanelController, -template:c(31), -transclude:!0 -}; -}, function(a, b, c) { -"use strict"; -b.__esModule = !0; -var d = c(41); -b.projectsSummary = { -bindings:{ -baseProjectUrl:"@", -catalogItems:"<", -projectsUrl:"@", -viewEditMembership:"&", -startTour:"&" +validateResult:function() { +var a = {}; +return this.validate.apply(a, arguments), a; }, -controller:d.ProjectsSummaryController, -template:c(32) -}; -}, function(a, b, c) { -"use strict"; -b.__esModule = !0; -var d = c(42); -b.saasList = { -bindings:{ -saasTitle:" 10000"); +if ("undefined" != typeof j[a]) throw new Error("Error already defined: " + a + " as " + j[a]); +if ("undefined" != typeof k[b]) throw new Error("Error code already used: " + k[b] + " as " + b); +j[a] = b, k[b] = a, m[a] = m[b] = c; +for (var d in n) { +var e = n[d]; +e[a] && (e[b] = e[b] || e[a]); +} +}, +reset:function() { +b.reset(), this.error = null, this.missing = [], this.valid = !0; +}, +missing:[], +error:null, +valid:!0, +normSchema:e, +resolveUrl:c, +getDocumentUri:d, +errorCodes:j }; -}, function(a, b, c) { -"use strict"; -(function(a) { -b.__esModule = !0; -var d = c(0); -d.set(window, "OPENSHIFT_CONSTANTS.HELP_BASE_URL", "https://docs.openshift.org/latest/"); -var e = { -new_app:"dev_guide/application_lifecycle/new_app.html", -application_health:"dev_guide/application_health.html", -authorization:"architecture/additional_concepts/authorization.html", -deployments:"dev_guide/deployments/how_deployments_work.html", -"default":"welcome/index.html" +return g; +} +Object.keys || (Object.keys = function() { +var a = Object.prototype.hasOwnProperty, b = !{ +toString:null +}.propertyIsEnumerable("toString"), c = [ "toString", "toLocaleString", "valueOf", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "constructor" ], d = c.length; +return function(e) { +if ("object" != typeof e && "function" != typeof e || null === e) throw new TypeError("Object.keys called on non-object"); +var f = []; +for (var g in e) a.call(e, g) && f.push(g); +if (b) for (var h = 0; h < d; h++) a.call(e, c[h]) && f.push(c[h]); +return f; }; -d.set(window, "OPENSHIFT_CONSTANTS.HELP", e); -var f = [ { -id:1, -title:"Microservices Application", -icon:"fa fa-cubes", -url:"https://www.redhat.com/en/technologies/virtualization", -description:"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt." +}()), Object.create || (Object.create = function() { +function a() {} +return function(b) { +if (1 !== arguments.length) throw new Error("Object.create implementation only accepts one parameter."); +return a.prototype = b, new a(); +}; +}()), Array.isArray || (Array.isArray = function(a) { +return "[object Array]" === Object.prototype.toString.call(a); +}), Array.prototype.indexOf || (Array.prototype.indexOf = function(a) { +if (null === this) throw new TypeError(); +var b = Object(this), c = b.length >>> 0; +if (0 === c) return -1; +var d = 0; +if (arguments.length > 1 && (d = Number(arguments[1]), d !== d ? d = 0 :0 !== d && d !== 1 / 0 && d !== -(1 / 0) && (d = (d > 0 || -1) * Math.floor(Math.abs(d)))), d >= c) return -1; +for (var e = d >= 0 ? d :Math.max(c - Math.abs(d), 0); e < c; e++) if (e in b && b[e] === a) return e; +return -1; +}), Object.isFrozen || (Object.isFrozen = function(a) { +for (var b = "tv4_test_frozen_key"; a.hasOwnProperty(b); ) b += Math.random(); +try { +return a[b] = !0, delete a[b], !1; +} catch (c) { +return !0; +} +}); +var i = function(a, b, c, d, e) { +if (this.missing = [], this.missingMap = {}, this.formatValidators = a ? Object.create(a.formatValidators) :{}, this.schemas = a ? Object.create(a.schemas) :{}, this.collectMultiple = b, this.errors = [], this.handleError = b ? this.collectError :this.returnError, d && (this.checkRecursive = !0, this.scanned = [], this.scannedFrozen = [], this.scannedFrozenSchemas = [], this.scannedFrozenValidationErrors = [], this.validatedSchemasKey = "tv4_validation_id", this.validationErrorsKey = "tv4_validation_errors_id"), e && (this.trackUnknownProperties = !0, this.knownPropertyPaths = {}, this.unknownPropertyPaths = {}), this.errorMessages = c, this.definedKeywords = {}, a) for (var f in a.definedKeywords) this.definedKeywords[f] = a.definedKeywords[f].slice(0); +}; +i.prototype.defineKeyword = function(a, b) { +this.definedKeywords[a] = this.definedKeywords[a] || [], this.definedKeywords[a].push(b); +}, i.prototype.createError = function(a, b, c, d, e) { +var g = this.errorMessages[a] || m[a]; +if ("string" != typeof g) return new f(a, "Unknown error code " + a + ": " + JSON.stringify(b), c, d, e); +var h = g.replace(/\{([^{}]*)\}/g, function(a, c) { +var d = b[c]; +return "string" == typeof d || "number" == typeof d ? d :a; +}); +return new f(a, h, c, d, e); +}, i.prototype.returnError = function(a) { +return a; +}, i.prototype.collectError = function(a) { +return a && this.errors.push(a), null; +}, i.prototype.prefixErrors = function(a, b, c) { +for (var d = a; d < this.errors.length; d++) this.errors[d] = this.errors[d].prefixWith(b, c); +return this; +}, i.prototype.banUnknownProperties = function() { +for (var a in this.unknownPropertyPaths) { +var b = this.createError(j.UNKNOWN_PROPERTY, { +path:a +}, a, ""), c = this.handleError(b); +if (c) return c; +} +return null; +}, i.prototype.addFormat = function(a, b) { +if ("object" == typeof a) { +for (var c in a) this.addFormat(c, a[c]); +return this; +} +this.formatValidators[a] = b; +}, i.prototype.resolveRefs = function(a, b) { +if (void 0 !== a.$ref) { +if (b = b || {}, b[a.$ref]) return this.createError(j.CIRCULAR_REFERENCE, { +urls:Object.keys(b).join(", ") +}, "", ""); +b[a.$ref] = !0, a = this.getSchema(a.$ref, b); +} +return a; +}, i.prototype.getSchema = function(a, b) { +var c; +if (void 0 !== this.schemas[a]) return c = this.schemas[a], this.resolveRefs(c, b); +var d = a, e = ""; +if (a.indexOf("#") !== -1 && (e = a.substring(a.indexOf("#") + 1), d = a.substring(0, a.indexOf("#"))), "object" == typeof this.schemas[d]) { +c = this.schemas[d]; +var f = decodeURIComponent(e); +if ("" === f) return this.resolveRefs(c, b); +if ("/" !== f.charAt(0)) return; +for (var g = f.split("/").slice(1), h = 0; h < g.length; h++) { +var i = g[h].replace(/~1/g, "/").replace(/~0/g, "~"); +if (void 0 === c[i]) { +c = void 0; +break; +} +c = c[i]; +} +if (void 0 !== c) return this.resolveRefs(c, b); +} +void 0 === this.missing[d] && (this.missing.push(d), this.missing[d] = d, this.missingMap[d] = d); +}, i.prototype.searchSchemas = function(a, b) { +if (a && "object" == typeof a) { +"string" == typeof a.id && g(b, a.id) && void 0 === this.schemas[a.id] && (this.schemas[a.id] = a); +for (var c in a) if ("enum" !== c) if ("object" == typeof a[c]) this.searchSchemas(a[c], b); else if ("$ref" === c) { +var e = d(a[c]); +e && void 0 === this.schemas[e] && void 0 === this.missingMap[e] && (this.missingMap[e] = e); +} +} +}, i.prototype.addSchema = function(a, b) { +if ("string" != typeof a || "undefined" == typeof b) { +if ("object" != typeof a || "string" != typeof a.id) return; +b = a, a = b.id; +} +(a = d(a) + "#") && (a = d(a)), this.schemas[a] = b, delete this.missingMap[a], e(b, a), this.searchSchemas(b, a); +}, i.prototype.getSchemaMap = function() { +var a = {}; +for (var b in this.schemas) a[b] = this.schemas[b]; +return a; +}, i.prototype.getSchemaUris = function(a) { +var b = []; +for (var c in this.schemas) a && !a.test(c) || b.push(c); +return b; +}, i.prototype.getMissingUris = function(a) { +var b = []; +for (var c in this.missingMap) a && !a.test(c) || b.push(c); +return b; +}, i.prototype.dropSchemas = function() { +this.schemas = {}, this.reset(); +}, i.prototype.reset = function() { +this.missing = [], this.missingMap = {}, this.errors = []; +}, i.prototype.validateAll = function(a, b, c, d, e) { +var g; +if (b = this.resolveRefs(b), !b) return null; +if (b instanceof f) return this.errors.push(b), b; +var h, i = this.errors.length, j = null, k = null; +if (this.checkRecursive && a && "object" == typeof a) { +if (g = !this.scanned.length, a[this.validatedSchemasKey]) { +var l = a[this.validatedSchemasKey].indexOf(b); +if (l !== -1) return this.errors = this.errors.concat(a[this.validationErrorsKey][l]), null; +} +if (Object.isFrozen(a) && (h = this.scannedFrozen.indexOf(a), h !== -1)) { +var m = this.scannedFrozenSchemas[h].indexOf(b); +if (m !== -1) return this.errors = this.errors.concat(this.scannedFrozenValidationErrors[h][m]), null; +} +if (this.scanned.push(a), Object.isFrozen(a)) h === -1 && (h = this.scannedFrozen.length, this.scannedFrozen.push(a), this.scannedFrozenSchemas.push([])), j = this.scannedFrozenSchemas[h].length, this.scannedFrozenSchemas[h][j] = b, this.scannedFrozenValidationErrors[h][j] = []; else { +if (!a[this.validatedSchemasKey]) try { +Object.defineProperty(a, this.validatedSchemasKey, { +value:[], +configurable:!0 +}), Object.defineProperty(a, this.validationErrorsKey, { +value:[], +configurable:!0 +}); +} catch (n) { +a[this.validatedSchemasKey] = [], a[this.validationErrorsKey] = []; +} +k = a[this.validatedSchemasKey].length, a[this.validatedSchemasKey][k] = b, a[this.validationErrorsKey][k] = []; +} +} +var o = this.errors.length, p = this.validateBasic(a, b, e) || this.validateNumeric(a, b, e) || this.validateString(a, b, e) || this.validateArray(a, b, e) || this.validateObject(a, b, e) || this.validateCombinations(a, b, e) || this.validateFormat(a, b, e) || this.validateDefinedKeywords(a, b, e) || null; +if (g) { +for (;this.scanned.length; ) { +var q = this.scanned.pop(); +delete q[this.validatedSchemasKey]; +} +this.scannedFrozen = [], this.scannedFrozenSchemas = []; +} +if (p || o !== this.errors.length) for (;c && c.length || d && d.length; ) { +var r = c && c.length ? "" + c.pop() :null, s = d && d.length ? "" + d.pop() :null; +p && (p = p.prefixWith(r, s)), this.prefixErrors(o, r, s); +} +return null !== j ? this.scannedFrozenValidationErrors[h][j] = this.errors.slice(i) :null !== k && (a[this.validationErrorsKey][k] = this.errors.slice(i)), this.handleError(p); +}, i.prototype.validateFormat = function(a, b) { +if ("string" != typeof b.format || !this.formatValidators[b.format]) return null; +var c = this.formatValidators[b.format].call(null, a, b); +return "string" == typeof c || "number" == typeof c ? this.createError(j.FORMAT_CUSTOM, { +message:c +}).prefixWith(null, "format") :c && "object" == typeof c ? this.createError(j.FORMAT_CUSTOM, { +message:c.message || "?" +}, c.dataPath || null, c.schemaPath || "/format") :null; +}, i.prototype.validateDefinedKeywords = function(a, b) { +for (var c in this.definedKeywords) for (var d = this.definedKeywords[c], e = 0; e < d.length; e++) { +var f = d[e], g = f(a, b[c], b); +if ("string" == typeof g || "number" == typeof g) return this.createError(j.KEYWORD_CUSTOM, { +key:c, +message:g +}).prefixWith(null, "format"); +if (g && "object" == typeof g) { +var h = g.code || j.KEYWORD_CUSTOM; +if ("string" == typeof h) { +if (!j[h]) throw new Error("Undefined error code (use defineError): " + h); +h = j[h]; +} +var i = "object" == typeof g.message ? g.message :{ +key:c, +message:g.message || "?" +}, k = g.schemaPath || "/" + c.replace(/~/g, "~0").replace(/\//g, "~1"); +return this.createError(h, i, g.dataPath || null, k); +} +} +return null; +}, i.prototype.validateBasic = function(a, b, c) { +var d; +return (d = this.validateType(a, b, c)) ? d.prefixWith(null, "type") :(d = this.validateEnum(a, b, c)) ? d.prefixWith(null, "type") :null; +}, i.prototype.validateType = function(a, b) { +if (void 0 === b.type) return null; +var c = typeof a; +null === a ? c = "null" :Array.isArray(a) && (c = "array"); +var d = b.type; +"object" != typeof d && (d = [ d ]); +for (var e = 0; e < d.length; e++) { +var f = d[e]; +if (f === c || "integer" === f && "number" === c && a % 1 === 0) return null; +} +return this.createError(j.INVALID_TYPE, { +type:c, +expected:d.join("/") +}); +}, i.prototype.validateEnum = function(b, c) { +if (void 0 === c["enum"]) return null; +for (var d = 0; d < c["enum"].length; d++) { +var e = c["enum"][d]; +if (a(b, e)) return null; +} +return this.createError(j.ENUM_MISMATCH, { +value:"undefined" != typeof JSON ? JSON.stringify(b) :b +}); +}, i.prototype.validateNumeric = function(a, b, c) { +return this.validateMultipleOf(a, b, c) || this.validateMinMax(a, b, c) || null; +}, i.prototype.validateMultipleOf = function(a, b) { +var c = b.multipleOf || b.divisibleBy; +return void 0 === c ? null :"number" == typeof a && a % c !== 0 ? this.createError(j.NUMBER_MULTIPLE_OF, { +value:a, +multipleOf:c +}) :null; +}, i.prototype.validateMinMax = function(a, b) { +if ("number" != typeof a) return null; +if (void 0 !== b.minimum) { +if (a < b.minimum) return this.createError(j.NUMBER_MINIMUM, { +value:a, +minimum:b.minimum +}).prefixWith(null, "minimum"); +if (b.exclusiveMinimum && a === b.minimum) return this.createError(j.NUMBER_MINIMUM_EXCLUSIVE, { +value:a, +minimum:b.minimum +}).prefixWith(null, "exclusiveMinimum"); +} +if (void 0 !== b.maximum) { +if (a > b.maximum) return this.createError(j.NUMBER_MAXIMUM, { +value:a, +maximum:b.maximum +}).prefixWith(null, "maximum"); +if (b.exclusiveMaximum && a === b.maximum) return this.createError(j.NUMBER_MAXIMUM_EXCLUSIVE, { +value:a, +maximum:b.maximum +}).prefixWith(null, "exclusiveMaximum"); +} +return null; +}, i.prototype.validateString = function(a, b, c) { +return this.validateStringLength(a, b, c) || this.validateStringPattern(a, b, c) || null; +}, i.prototype.validateStringLength = function(a, b) { +return "string" != typeof a ? null :void 0 !== b.minLength && a.length < b.minLength ? this.createError(j.STRING_LENGTH_SHORT, { +length:a.length, +minimum:b.minLength +}).prefixWith(null, "minLength") :void 0 !== b.maxLength && a.length > b.maxLength ? this.createError(j.STRING_LENGTH_LONG, { +length:a.length, +maximum:b.maxLength +}).prefixWith(null, "maxLength") :null; +}, i.prototype.validateStringPattern = function(a, b) { +if ("string" != typeof a || void 0 === b.pattern) return null; +var c = new RegExp(b.pattern); +return c.test(a) ? null :this.createError(j.STRING_PATTERN, { +pattern:b.pattern +}).prefixWith(null, "pattern"); +}, i.prototype.validateArray = function(a, b, c) { +return Array.isArray(a) ? this.validateArrayLength(a, b, c) || this.validateArrayUniqueItems(a, b, c) || this.validateArrayItems(a, b, c) || null :null; +}, i.prototype.validateArrayLength = function(a, b) { +var c; +return void 0 !== b.minItems && a.length < b.minItems && (c = this.createError(j.ARRAY_LENGTH_SHORT, { +length:a.length, +minimum:b.minItems +}).prefixWith(null, "minItems"), this.handleError(c)) ? c :void 0 !== b.maxItems && a.length > b.maxItems && (c = this.createError(j.ARRAY_LENGTH_LONG, { +length:a.length, +maximum:b.maxItems +}).prefixWith(null, "maxItems"), this.handleError(c)) ? c :null; +}, i.prototype.validateArrayUniqueItems = function(b, c) { +if (c.uniqueItems) for (var d = 0; d < b.length; d++) for (var e = d + 1; e < b.length; e++) if (a(b[d], b[e])) { +var f = this.createError(j.ARRAY_UNIQUE, { +match1:d, +match2:e +}).prefixWith(null, "uniqueItems"); +if (this.handleError(f)) return f; +} +return null; +}, i.prototype.validateArrayItems = function(a, b, c) { +if (void 0 === b.items) return null; +var d, e; +if (Array.isArray(b.items)) { +for (e = 0; e < a.length; e++) if (e < b.items.length) { +if (d = this.validateAll(a[e], b.items[e], [ e ], [ "items", e ], c + "/" + e)) return d; +} else if (void 0 !== b.additionalItems) if ("boolean" == typeof b.additionalItems) { +if (!b.additionalItems && (d = this.createError(j.ARRAY_ADDITIONAL_ITEMS, {}).prefixWith("" + e, "additionalItems"), this.handleError(d))) return d; +} else if (d = this.validateAll(a[e], b.additionalItems, [ e ], [ "additionalItems" ], c + "/" + e)) return d; +} else for (e = 0; e < a.length; e++) if (d = this.validateAll(a[e], b.items, [ e ], [ "items" ], c + "/" + e)) return d; +return null; +}, i.prototype.validateObject = function(a, b, c) { +return "object" != typeof a || null === a || Array.isArray(a) ? null :this.validateObjectMinMaxProperties(a, b, c) || this.validateObjectRequiredProperties(a, b, c) || this.validateObjectProperties(a, b, c) || this.validateObjectDependencies(a, b, c) || null; +}, i.prototype.validateObjectMinMaxProperties = function(a, b) { +var c, d = Object.keys(a); +return void 0 !== b.minProperties && d.length < b.minProperties && (c = this.createError(j.OBJECT_PROPERTIES_MINIMUM, { +propertyCount:d.length, +minimum:b.minProperties +}).prefixWith(null, "minProperties"), this.handleError(c)) ? c :void 0 !== b.maxProperties && d.length > b.maxProperties && (c = this.createError(j.OBJECT_PROPERTIES_MAXIMUM, { +propertyCount:d.length, +maximum:b.maxProperties +}).prefixWith(null, "maxProperties"), this.handleError(c)) ? c :null; +}, i.prototype.validateObjectRequiredProperties = function(a, b) { +if (void 0 !== b.required) for (var c = 0; c < b.required.length; c++) { +var d = b.required[c]; +if (void 0 === a[d]) { +var e = this.createError(j.OBJECT_REQUIRED, { +key:d +}).prefixWith(null, "" + c).prefixWith(null, "required"); +if (this.handleError(e)) return e; +} +} +return null; +}, i.prototype.validateObjectProperties = function(a, b, c) { +var d; +for (var e in a) { +var f = c + "/" + e.replace(/~/g, "~0").replace(/\//g, "~1"), g = !1; +if (void 0 !== b.properties && void 0 !== b.properties[e] && (g = !0, d = this.validateAll(a[e], b.properties[e], [ e ], [ "properties", e ], f))) return d; +if (void 0 !== b.patternProperties) for (var h in b.patternProperties) { +var i = new RegExp(h); +if (i.test(e) && (g = !0, d = this.validateAll(a[e], b.patternProperties[h], [ e ], [ "patternProperties", h ], f))) return d; +} +if (g) this.trackUnknownProperties && (this.knownPropertyPaths[f] = !0, delete this.unknownPropertyPaths[f]); else if (void 0 !== b.additionalProperties) { +if (this.trackUnknownProperties && (this.knownPropertyPaths[f] = !0, delete this.unknownPropertyPaths[f]), "boolean" == typeof b.additionalProperties) { +if (!b.additionalProperties && (d = this.createError(j.OBJECT_ADDITIONAL_PROPERTIES, {}).prefixWith(e, "additionalProperties"), this.handleError(d))) return d; +} else if (d = this.validateAll(a[e], b.additionalProperties, [ e ], [ "additionalProperties" ], f)) return d; +} else this.trackUnknownProperties && !this.knownPropertyPaths[f] && (this.unknownPropertyPaths[f] = !0); +} +return null; +}, i.prototype.validateObjectDependencies = function(a, b, c) { +var d; +if (void 0 !== b.dependencies) for (var e in b.dependencies) if (void 0 !== a[e]) { +var f = b.dependencies[e]; +if ("string" == typeof f) { +if (void 0 === a[f] && (d = this.createError(j.OBJECT_DEPENDENCY_KEY, { +key:e, +missing:f +}).prefixWith(null, e).prefixWith(null, "dependencies"), this.handleError(d))) return d; +} else if (Array.isArray(f)) for (var g = 0; g < f.length; g++) { +var h = f[g]; +if (void 0 === a[h] && (d = this.createError(j.OBJECT_DEPENDENCY_KEY, { +key:e, +missing:h +}).prefixWith(null, "" + g).prefixWith(null, e).prefixWith(null, "dependencies"), this.handleError(d))) return d; +} else if (d = this.validateAll(a, f, [], [ "dependencies", e ], c)) return d; +} +return null; +}, i.prototype.validateCombinations = function(a, b, c) { +return this.validateAllOf(a, b, c) || this.validateAnyOf(a, b, c) || this.validateOneOf(a, b, c) || this.validateNot(a, b, c) || null; +}, i.prototype.validateAllOf = function(a, b, c) { +if (void 0 === b.allOf) return null; +for (var d, e = 0; e < b.allOf.length; e++) { +var f = b.allOf[e]; +if (d = this.validateAll(a, f, [], [ "allOf", e ], c)) return d; +} +return null; +}, i.prototype.validateAnyOf = function(a, b, c) { +if (void 0 === b.anyOf) return null; +var d, e, f = [], g = this.errors.length; +this.trackUnknownProperties && (d = this.unknownPropertyPaths, e = this.knownPropertyPaths); +for (var h = !0, i = 0; i < b.anyOf.length; i++) { +this.trackUnknownProperties && (this.unknownPropertyPaths = {}, this.knownPropertyPaths = {}); +var k = b.anyOf[i], l = this.errors.length, m = this.validateAll(a, k, [], [ "anyOf", i ], c); +if (null === m && l === this.errors.length) { +if (this.errors = this.errors.slice(0, g), this.trackUnknownProperties) { +for (var n in this.knownPropertyPaths) e[n] = !0, delete d[n]; +for (var o in this.unknownPropertyPaths) e[o] || (d[o] = !0); +h = !1; +continue; +} +return null; +} +m && f.push(m.prefixWith(null, "" + i).prefixWith(null, "anyOf")); +} +return this.trackUnknownProperties && (this.unknownPropertyPaths = d, this.knownPropertyPaths = e), h ? (f = f.concat(this.errors.slice(g)), this.errors = this.errors.slice(0, g), this.createError(j.ANY_OF_MISSING, {}, "", "/anyOf", f)) :void 0; +}, i.prototype.validateOneOf = function(a, b, c) { +if (void 0 === b.oneOf) return null; +var d, e, f = null, g = [], h = this.errors.length; +this.trackUnknownProperties && (d = this.unknownPropertyPaths, e = this.knownPropertyPaths); +for (var i = 0; i < b.oneOf.length; i++) { +this.trackUnknownProperties && (this.unknownPropertyPaths = {}, this.knownPropertyPaths = {}); +var k = b.oneOf[i], l = this.errors.length, m = this.validateAll(a, k, [], [ "oneOf", i ], c); +if (null === m && l === this.errors.length) { +if (null !== f) return this.errors = this.errors.slice(0, h), this.createError(j.ONE_OF_MULTIPLE, { +index1:f, +index2:i +}, "", "/oneOf"); +if (f = i, this.trackUnknownProperties) { +for (var n in this.knownPropertyPaths) e[n] = !0, delete d[n]; +for (var o in this.unknownPropertyPaths) e[o] || (d[o] = !0); +} +} else m && g.push(m.prefixWith(null, "" + i).prefixWith(null, "oneOf")); +} +return this.trackUnknownProperties && (this.unknownPropertyPaths = d, this.knownPropertyPaths = e), null === f ? (g = g.concat(this.errors.slice(h)), this.errors = this.errors.slice(0, h), this.createError(j.ONE_OF_MISSING, {}, "", "/oneOf", g)) :(this.errors = this.errors.slice(0, h), null); +}, i.prototype.validateNot = function(a, b, c) { +if (void 0 === b.not) return null; +var d, e, f = this.errors.length; +this.trackUnknownProperties && (d = this.unknownPropertyPaths, e = this.knownPropertyPaths, this.unknownPropertyPaths = {}, this.knownPropertyPaths = {}); +var g = this.validateAll(a, b.not, null, null, c), h = this.errors.slice(f); +return this.errors = this.errors.slice(0, f), this.trackUnknownProperties && (this.unknownPropertyPaths = d, this.knownPropertyPaths = e), null === g && 0 === h.length ? this.createError(j.NOT_PASSED, {}, "", "/not") :null; +}; +var j = { +INVALID_TYPE:0, +ENUM_MISMATCH:1, +ANY_OF_MISSING:10, +ONE_OF_MISSING:11, +ONE_OF_MULTIPLE:12, +NOT_PASSED:13, +NUMBER_MULTIPLE_OF:100, +NUMBER_MINIMUM:101, +NUMBER_MINIMUM_EXCLUSIVE:102, +NUMBER_MAXIMUM:103, +NUMBER_MAXIMUM_EXCLUSIVE:104, +STRING_LENGTH_SHORT:200, +STRING_LENGTH_LONG:201, +STRING_PATTERN:202, +OBJECT_PROPERTIES_MINIMUM:300, +OBJECT_PROPERTIES_MAXIMUM:301, +OBJECT_REQUIRED:302, +OBJECT_ADDITIONAL_PROPERTIES:303, +OBJECT_DEPENDENCY_KEY:304, +ARRAY_LENGTH_SHORT:400, +ARRAY_LENGTH_LONG:401, +ARRAY_UNIQUE:402, +ARRAY_ADDITIONAL_ITEMS:403, +FORMAT_CUSTOM:500, +KEYWORD_CUSTOM:501, +CIRCULAR_REFERENCE:600, +UNKNOWN_PROPERTY:1e3 +}, k = {}; +for (var l in j) k[j[l]] = l; +var m = { +INVALID_TYPE:"invalid type: {type} (expected {expected})", +ENUM_MISMATCH:"No enum match for: {value}", +ANY_OF_MISSING:'Data does not match any schemas from "anyOf"', +ONE_OF_MISSING:'Data does not match any schemas from "oneOf"', +ONE_OF_MULTIPLE:'Data is valid against more than one schema from "oneOf": indices {index1} and {index2}', +NOT_PASSED:'Data matches schema from "not"', +NUMBER_MULTIPLE_OF:"Value {value} is not a multiple of {multipleOf}", +NUMBER_MINIMUM:"Value {value} is less than minimum {minimum}", +NUMBER_MINIMUM_EXCLUSIVE:"Value {value} is equal to exclusive minimum {minimum}", +NUMBER_MAXIMUM:"Value {value} is greater than maximum {maximum}", +NUMBER_MAXIMUM_EXCLUSIVE:"Value {value} is equal to exclusive maximum {maximum}", +STRING_LENGTH_SHORT:"String is too short ({length} chars), minimum {minimum}", +STRING_LENGTH_LONG:"String is too long ({length} chars), maximum {maximum}", +STRING_PATTERN:"String does not match pattern: {pattern}", +OBJECT_PROPERTIES_MINIMUM:"Too few properties defined ({propertyCount}), minimum {minimum}", +OBJECT_PROPERTIES_MAXIMUM:"Too many properties defined ({propertyCount}), maximum {maximum}", +OBJECT_REQUIRED:"Missing required property: {key}", +OBJECT_ADDITIONAL_PROPERTIES:"Additional properties not allowed", +OBJECT_DEPENDENCY_KEY:"Dependency failed - key must exist: {missing} (due to key: {key})", +ARRAY_LENGTH_SHORT:"Array is too short ({length}), minimum {minimum}", +ARRAY_LENGTH_LONG:"Array is too long ({length}), maximum {maximum}", +ARRAY_UNIQUE:"Array items are not unique (indices {match1} and {match2})", +ARRAY_ADDITIONAL_ITEMS:"Additional items not allowed", +FORMAT_CUSTOM:"Format validation failed ({message})", +KEYWORD_CUSTOM:"Keyword failed: {key} ({message})", +CIRCULAR_REFERENCE:"Circular $refs: {urls}", +UNKNOWN_PROPERTY:"Unknown property (not in schema)" +}; +f.prototype = Object.create(Error.prototype), f.prototype.constructor = f, f.prototype.name = "ValidationError", f.prototype.prefixWith = function(a, b) { +if (null !== a && (a = a.replace(/~/g, "~0").replace(/\//g, "~1"), this.dataPath = "/" + a + this.dataPath), null !== b && (b = b.replace(/~/g, "~0").replace(/\//g, "~1"), this.schemaPath = "/" + b + this.schemaPath), null !== this.subErrors) for (var c = 0; c < this.subErrors.length; c++) this.subErrors[c].prefixWith(a, b); +return this; +}; +var n = {}, o = h(); +return o.addLanguage("en-gb", m), o.tv4 = o, o; +}), !function(a) { +var b = { +parse:function(a) { +if ("string" != typeof a) throw new TypeError("ObjectPath.parse must be passed a string"); +for (var b, c, d, e, f = 0, g = []; f < a.length; ) if (b = a.indexOf(".", f), c = a.indexOf("[", f), b === -1 && c === -1) g.push(a.slice(f, a.length)), f = a.length; else if (c === -1 || b !== -1 && b < c) g.push(a.slice(f, b)), f = b + 1; else if (c > f && (g.push(a.slice(f, c)), f = c), d = a.slice(c + 1, c + 2), '"' !== d && "'" !== d) e = a.indexOf("]", c), e === -1 && (e = a.length), g.push(a.slice(f + 1, e)), f = "." === a.slice(e + 1, e + 2) ? e + 2 :e + 1; else { +for (e = a.indexOf(d + "]", c), e === -1 && (e = a.length); "\\" === a.slice(e - 1, e) && c < a.length; ) c++, e = a.indexOf(d + "]", c); +g.push(a.slice(f + 2, e).replace(new RegExp("\\" + d, "g"), d)), f = "." === a.slice(e + 2, e + 3) ? e + 3 :e + 2; +} +return g; +}, +stringify:function(a, b) { +return Array.isArray(a) || (a = [ a.toString() ]), b = '"' === b ? '"' :"'", a.map(function(a) { +return "[" + b + a.toString().replace(new RegExp(b, "g"), "\\" + b) + b + "]"; +}).join(""); +}, +normalize:function(a, c) { +return b.stringify(Array.isArray(a) ? a :b.parse(a), c); +}, +registerModule:function(a) { +a.module("ObjectPath", []).provider("ObjectPath", function() { +this.parse = b.parse, this.stringify = b.stringify, this.normalize = b.normalize, this.$get = function() { +return b; +}; +}); +} +}; +"function" == typeof define && define.amd ? define(function() { +return b; +}) :"object" == typeof exports ? exports.ObjectPath = b :window.ObjectPath = b; +}(), function(a, b) { +"function" == typeof define && define.amd ? define([ "angular", "objectpath", "tv4" ], b) :"object" == typeof exports ? module.exports = b(require("angular"), require("objectpath"), require("tv4")) :a.schemaForm = b(a.angular, a.objectpath, a.tv4); +}(this, function(a, b, c) { +var d = []; +try { +a.module("ngSanitize"), d.push("ngSanitize"); +} catch (e) {} +try { +a.module("ui.sortable"), d.push("ui.sortable"); +} catch (e) {} +try { +a.module("angularSpectrumColorpicker"), d.push("angularSpectrumColorpicker"); +} catch (e) {} +var f = a.module("schemaForm", d); +return a.module("schemaForm").provider("sfPath", [ function() { +var c = window.ObjectPath || b, d = { +parse:c.parse +}; +1 === a.version.major && a.version.minor < 3 ? d.stringify = function(a) { +return Array.isArray(a) ? a.join(".") :a.toString(); +} :d.stringify = c.stringify, d.normalize = function(a, b) { +return d.stringify(Array.isArray(a) ? a :d.parse(a), b); +}, this.parse = d.parse, this.stringify = d.stringify, this.normalize = d.normalize, this.$get = function() { +return d; +}; +} ]), a.module("schemaForm").provider("sfBuilder", [ "sfPathProvider", function(b) { +var c = /[A-Z]/g, d = function(a, b) { +return b = b || "_", a.replace(c, function(a, c) { +return (c ? b :"") + a.toLowerCase(); +}); +}, e = 0, f = { +sfField:function(a) { +a.fieldFrag.firstChild.setAttribute("sf-field", e), a.lookup["f" + e] = a.form, e++; +}, +ngModel:function(a) { +if (a.form.key) { +var c = a.form.key; +a.state.keyRedaction && (c = c.slice(a.state.keyRedaction)); +var d; +if (a.state.modelValue) d = a.state.modelValue; else { +var e = b.stringify(c).replace(/"/g, """); +d = a.state.modelName || "model", e && (d += ("[" !== e[0] ? "." :"") + e); +} +for (var f = a.fieldFrag.querySelectorAll("[sf-field-model]"), g = 0; g < f.length; g++) { +var h = f[g], i = h.getAttribute("sf-field-model"); +if (i && "" !== i) if ("replaceAll" === i) for (var j = h.attributes, k = 0; k < j.length; k++) j[k].value && j[k].value.indexOf("$$value") !== -1 && (j[k].value = j[k].value.replace(/\$\$value\$\$/g, d)); else { +var l = h.getAttribute(i); +l && l.indexOf("$$value$$") ? h.setAttribute(i, l.replace(/\$\$value\$\$/g, d)) :h.setAttribute(i, d); +} else h.setAttribute("ng-model", d); +} +} +}, +simpleTransclusion:function(a) { +var b = a.build(a.form.items, a.path + ".items", a.state); +a.fieldFrag.firstChild.appendChild(b); +}, +ngModelOptions:function(a) { +a.form.ngModelOptions && Object.keys(a.form.ngModelOptions).length > 0 && a.fieldFrag.firstChild.setAttribute("ng-model-options", JSON.stringify(a.form.ngModelOptions)); +}, +transclusion:function(a) { +var b = a.fieldFrag.querySelectorAll("[sf-field-transclude]"); +if (b.length) for (var c = 0; c < b.length; c++) { +var d = b[c], e = d.getAttribute("sf-field-transclude") || "items", f = a.form[e]; +if (f) { +var g = a.build(f, a.path + "." + e, a.state); +d.appendChild(g); +} +} +}, +condition:function(a) { +if (a.form.condition) { +var c = "evalExpr(" + a.path + '.condition, { model: model, "arrayIndex": $index})'; +if (a.form.key) { +var d = b.stringify(a.form.key); +c = "evalExpr(" + a.path + '.condition,{ model: model, "arrayIndex": $index, "modelValue": model' + ("[" === d[0] ? "" :".") + d + "})"; +} +for (var e = a.fieldFrag.children || a.fieldFrag.childNodes, f = 0; f < e.length; f++) { +var g = e[f], h = g.getAttribute("ng-if"); +g.setAttribute("ng-if", h ? "(" + h + ") || (" + c + ")" :c); +} +} +}, +array:function(c) { +var d = c.fieldFrag.querySelector("[schema-form-array-items]"); +if (d) { +if (state = a.copy(c.state), state.keyRedaction = state.keyRedaction || 0, state.keyRedaction += c.form.key.length + 1, c.form.schema && c.form.schema.items && c.form.schema.items.type && c.form.schema.items.type.indexOf("object") === -1 && c.form.schema.items.type.indexOf("array") === -1) { +b.stringify(c.form.key).replace(/"/g, """) + "[$index]"; +state.modelValue = "modelArray[$index]"; +} else state.modelName = "item"; +state.arrayCompatFlag = !0; +var e = c.build(c.form.items, c.path + ".items", state); +d.appendChild(e); +} +} +}; +this.builders = f; +var g = [ f.sfField, f.ngModel, f.ngModelOptions, f.condition ]; +this.stdBuilders = g, this.$get = [ "$templateCache", "schemaFormDecorators", "sfPath", function(a, b, c) { +var e = function(a, b) { +if (a.key) { +var d = b[c.stringify(a.key)]; +if (d) { +for (;d.firstChild; ) d.removeChild(d.firstChild); +return d; +} +} +}, h = function(a, b, c, f, g, i, j) { +i = i || {}, j = j || Object.create(null), g = g || "schemaForm.form"; +var k = document.createDocumentFragment(); +return a.reduce(function(a, k, l) { +if (!k.type) return a; +var m = b[k.type] || b["default"]; +if (m.replace) { +var n; +i.arrayCompatFlag = !1; +var o = document.createElement("div"), p = c(k, m) || c(k, b["default"]); +for (o.innerHTML = p, n = document.createDocumentFragment(); o.childNodes.length > 0; ) n.appendChild(o.childNodes[0]); +var q = { +fieldFrag:n, +form:k, +lookup:j, +state:i, +path:g + "[" + l + "]", +build:function(a, d, e) { +return h(a, b, c, f, d, e, j); +} +}, r = k.builder || m.builder; +"function" == typeof r ? r(q) :r.forEach(function(a) { +a(q); +}), (e(k, f) || a).appendChild(n); +} else { +var s = document.createElement(d(b.__name, "-")); +i.arrayCompatFlag ? s.setAttribute("form", "copyWithIndex($index)") :s.setAttribute("form", g + "[" + l + "]"), (e(k, f) || a).appendChild(s); +} +return a; +}, k), k; +}; +return { +build:function(b, c, d, e) { +return h(b, c, function(b, c) { +return "template" === b.type ? b.template :a.get(c.template); +}, d, void 0, void 0, e); +}, +builder:f, +stdBuilders:g, +internalBuild:h +}; +} ]; +} ]), a.module("schemaForm").provider("schemaFormDecorators", [ "$compileProvider", "sfPathProvider", function(b, c) { +var d = "", e = {}, f = function(a, b) { +"sfDecorator" === a && (a = d); +var c = e[a]; +return c[b.type] ? c[b.type].template :c["default"].template; +}, g = function(d) { +b.directive(d, [ "$parse", "$compile", "$http", "$templateCache", "$interpolate", "$q", "sfErrorMessage", "sfPath", "sfSelect", function(b, e, g, h, i, j, k, l, m) { +return { +restrict:"AE", +replace:!1, +transclude:!1, +scope:!0, +require:"?^sfSchema", +link:function(b, n, o, p) { +b.$on("schemaFormPropagateNgModelController", function(a, c) { +a.stopPropagation(), a.preventDefault(), b.ngModel = c; +}), b.showTitle = function() { +return b.form && b.form.notitle !== !0 && b.form.title; +}, b.listToCheckboxValues = function(b) { +var c = {}; +return a.forEach(b, function(a) { +c[a] = !0; +}), c; +}, b.checkboxValuesToList = function(b) { +var c = []; +return a.forEach(b, function(a, b) { +a && c.push(b); +}), c; +}, b.buttonClick = function(c, d) { +a.isFunction(d.onClick) ? d.onClick(c, d) :a.isString(d.onClick) && (p ? p.evalInParentScope(d.onClick, { +$event:c, +form:d +}) :b.$eval(d.onClick, { +$event:c, +form:d +})); +}, b.evalExpr = function(a, c) { +return p ? p.evalInParentScope(a, c) :b.$eval(a, c); +}, b.evalInScope = function(a, c) { +if (a) return b.$eval(a, c); +}, b.interp = function(a, b) { +return a && i(a)(b); +}, b.hasSuccess = function() { +return !!b.ngModel && (b.ngModel.$valid && (!b.ngModel.$pristine || !b.ngModel.$isEmpty(b.ngModel.$modelValue))); +}, b.hasError = function() { +return !!b.ngModel && (b.ngModel.$invalid && !b.ngModel.$pristine); +}, b.errorMessage = function(a) { +return k.interpolate(a && a.code + "" || "default", b.ngModel && b.ngModel.$modelValue || "", b.ngModel && b.ngModel.$viewValue || "", b.form, b.options && b.options.validationMessage); +}; +var q = b.$watch(o.form, function(i) { +if (i) { +i.ngModelOptions = i.ngModelOptions || {}, b.form = i; +var k; +if ("template" === i.type && i.template) k = j.when(i.template); else { +var o = "template" === i.type ? i.templateUrl :f(d, i); +k = g.get(o, { +cache:h +}).then(function(a) { +return a.data; +}); +} +k.then(function(d) { +if (i.key) { +var f = i.key ? c.stringify(i.key).replace(/"/g, """) :""; +d = d.replace(/\$\$value\$\$/g, "model" + ("[" !== f[0] ? "." :"") + f); +} +if (n.html(d), i.condition) { +var g = 'evalExpr(form.condition,{ model: model, "arrayIndex": arrayIndex})'; +i.key && (g = 'evalExpr(form.condition,{ model: model, "arrayIndex": arrayIndex, "modelValue": model' + l.stringify(i.key) + "})"), a.forEach(n.children(), function(a) { +var b = a.getAttribute("ng-if"); +a.setAttribute("ng-if", b ? "(" + b + ") || (" + g + ")" :g); +}); +} +e(n.contents())(b); +}), i.key && (b.$on("schemaForm.error." + i.key.join("."), function(a, c, d, e) { +d !== !0 && d !== !1 || (e = d, d = void 0), b.ngModel && c && (b.ngModel.$setDirty ? b.ngModel.$setDirty() :(b.ngModel.$dirty = !0, b.ngModel.$pristine = !1), d && (i.validationMessage || (i.validationMessage = {}), i.validationMessage[c] = d), b.ngModel.$setValidity(c, e === !0), e === !0 && (b.ngModel.$validate(), b.$broadcast("schemaFormValidate"))); +}), b.$on("$destroy", function() { +if (!b.externalDestructionInProgress) { +var a = i.destroyStrategy || b.options && b.options.destroyStrategy || "remove"; +if (i.key && "retain" !== a) { +var c = b.model; +if (i.key.length > 1 && (c = m(i.key.slice(0, i.key.length - 1), c)), void 0 === c) return; +var d = i.schema && i.schema.type || ""; +"empty" === a && d.indexOf("string") !== -1 ? c[i.key.slice(-1)] = "" :"empty" === a && d.indexOf("object") !== -1 ? c[i.key.slice(-1)] = {} :"empty" === a && d.indexOf("array") !== -1 ? c[i.key.slice(-1)] = [] :"null" === a ? c[i.key.slice(-1)] = null :delete c[i.key.slice(-1)]; +} +} +})), q(); +} +}); +} +}; +} ]); +}, h = function(c, d, e) { +e = !!a.isDefined(e) && e, b.directive("sf" + a.uppercase(c[0]) + c.substr(1), function() { +return { +restrict:"EAC", +scope:!0, +replace:!0, +transclude:e, +template:'', +link:function(b, d, e) { +var f = { +items:"c", +titleMap:"c", +schema:"c" +}, g = { +type:c +}, h = !0; +a.forEach(e, function(c, d) { +if ("$" !== d[0] && 0 !== d.indexOf("ng") && "sfField" !== d) { +var i = function(c) { +a.isDefined(c) && c !== g[d] && (g[d] = c, h && g.type && (g.key || a.isUndefined(e.key)) && (b.form = g, h = !1)); +}; +"model" === d ? b.$watch(c, function(a) { +a && b.model !== a && (b.model = a); +}) :"c" === f[d] ? b.$watchCollection(c, i) :e.$observe(d, i); +} +}); +} +}; +}); +}; +this.createDecorator = function(b, c) { +e[b] = { +__name:b +}, a.forEach(c, function(a, c) { +e[b][c] = { +template:a, +replace:!1, +builder:[] +}; +}), e[d] || (d = b), g(b); +}, this.defineDecorator = function(b, c) { +e[b] = { +__name:b +}, a.forEach(c, function(c, d) { +c.builder = c.builder || [], c.replace = !a.isDefined(c.replace) || c.replace, e[b][d] = c; +}), e[d] || (d = b), g(b); +}, this.createDirective = h, this.createDirectives = function(b) { +a.forEach(b, function(a, b) { +h(b, a); +}); +}, this.decorator = function(a) { +return a = a || d, e[a]; +}, this.addMapping = function(a, b, c, d, f) { +e[a] && (e[a][b] = { +template:c, +builder:d, +replace:!!f +}); +}, this.defineAddOn = function(a, b, c, d) { +e[a] && (e[a][b] = { +template:c, +builder:d, +replace:!0 +}); +}, this.$get = function() { +return { +decorator:function(a) { +return e[a] || e[d]; +}, +defaultDecorator:d +}; +}, g("sfDecorator"); +} ]), a.module("schemaForm").provider("sfErrorMessage", function() { +var b = { +"default":"Field does not validate", +0:"Invalid type, expected {{schema.type}}", +1:"No enum match for: {{viewValue}}", +10:'Data does not match any schemas from "anyOf"', +11:'Data does not match any schemas from "oneOf"', +12:'Data is valid against more than one schema from "oneOf"', +13:'Data matches schema from "not"', +100:"Value is not a multiple of {{schema.multipleOf}}", +101:"{{viewValue}} is less than the allowed minimum of {{schema.minimum}}", +102:"{{viewValue}} is equal to the exclusive minimum {{schema.minimum}}", +103:"{{viewValue}} is greater than the allowed maximum of {{schema.maximum}}", +104:"{{viewValue}} is equal to the exclusive maximum {{schema.maximum}}", +105:"Value is not a valid number", +200:"String is too short ({{viewValue.length}} chars), minimum {{schema.minLength}}", +201:"String is too long ({{viewValue.length}} chars), maximum {{schema.maxLength}}", +202:"String does not match pattern: {{schema.pattern}}", +300:"Too few properties defined, minimum {{schema.minProperties}}", +301:"Too many properties defined, maximum {{schema.maxProperties}}", +302:"Required", +303:"Additional properties not allowed", +304:"Dependency failed - key must exist", +400:"Array is too short ({{value.length}}), minimum {{schema.minItems}}", +401:"Array is too long ({{value.length}}), maximum {{schema.maxItems}}", +402:"Array items are not unique", +403:"Additional items not allowed", +500:"Format validation failed", +501:'Keyword failed: "{{title}}"', +600:"Circular $refs", +1e3:"Unknown property (not in schema)" +}; +b.number = b[105], b.required = b[302], b.min = b[101], b.max = b[103], b.maxlength = b[201], b.minlength = b[200], b.pattern = b[202], this.setDefaultMessages = function(a) { +b = a; +}, this.getDefaultMessages = function() { +return b; +}, this.setDefaultMessage = function(a, c) { +b[a] = c; +}, this.$get = [ "$interpolate", function(c) { +var d = {}; +return d.defaultMessages = b, d.interpolate = function(d, e, f, g, h) { +h = h || {}; +var i = g.validationMessage || {}; +0 === d.indexOf("tv4-") && (d = d.substring(4)); +var j = i["default"] || h["default"] || ""; +[ i, h, b ].some(function(b) { +return a.isString(b) || a.isFunction(b) ? (j = b, !0) :b && b[d] ? (j = b[d], !0) :void 0; +}); +var k = { +error:d, +value:e, +viewValue:f, +form:g, +schema:g.schema, +title:g.title || g.schema && g.schema.title +}; +return a.isFunction(j) ? j(k) :c(j)(k); +}, d; +} ]; +}), a.module("schemaForm").provider("schemaForm", [ "sfPathProvider", function(b) { +var c = function(a) { +if (Array.isArray(a) && 2 == a.length) { +if ("null" === a[0]) return a[1]; +if ("null" === a[1]) return a[0]; +} +return a; +}, d = function(a) { +var b = []; +return a.forEach(function(a) { +b.push({ +name:a, +value:a +}); +}), b; +}, e = function(b, c) { +if (!a.isArray(b)) { +var d = []; +return c ? a.forEach(c, function(a, c) { +d.push({ +name:b[a], +value:a +}); +}) :a.forEach(b, function(a, b) { +d.push({ +name:a, +value:b +}); +}), d; +} +return b; +}, f = function(b, d, e) { +var f = p[c(d.type)]; +if (f) for (var g, h = 0; h < f.length; h++) if (g = f[h](b, d, e)) return g.schema["x-schema-form"] && a.isObject(g.schema["x-schema-form"]) && (g = a.extend(g, g.schema["x-schema-form"])), g; +}, g = function(b, c, d) { +d = d || {}; +var f = d.global && d.global.formDefaults ? a.copy(d.global.formDefaults) :{}; +return d.global && d.global.supressPropertyTitles === !0 ? f.title = c.title :f.title = c.title || b, c.description && (f.description = c.description), d.required !== !0 && c.required !== !0 || (f.required = !0), c.maxLength && (f.maxlength = c.maxLength), c.minLength && (f.minlength = c.minLength), (c.readOnly || c.readonly) && (f.readonly = !0), c.minimum && (f.minimum = c.minimum + (c.exclusiveMinimum ? 1 :0)), c.maximum && (f.maximum = c.maximum - (c.exclusiveMaximum ? 1 :0)), c.validationMessage && (f.validationMessage = c.validationMessage), c.enumNames && (f.titleMap = e(c.enumNames, c["enum"])), f.schema = c, f.ngModelOptions = f.ngModelOptions || {}, f; +}, h = function(a, d, e) { +if ("string" === c(d.type) && !d["enum"]) { +var f = g(a, d, e); +return f.key = e.path, f.type = "text", e.lookup[b.stringify(e.path)] = f, f; +} +}, i = function(a, d, e) { +if ("number" === c(d.type)) { +var f = g(a, d, e); +return f.key = e.path, f.type = "number", e.lookup[b.stringify(e.path)] = f, f; +} +}, j = function(a, d, e) { +if ("integer" === c(d.type)) { +var f = g(a, d, e); +return f.key = e.path, f.type = "number", e.lookup[b.stringify(e.path)] = f, f; +} +}, k = function(a, d, e) { +if ("boolean" === c(d.type)) { +var f = g(a, d, e); +return f.key = e.path, f.type = "checkbox", e.lookup[b.stringify(e.path)] = f, f; +} +}, l = function(a, e, f) { +if ("string" === c(e.type) && e["enum"]) { +var h = g(a, e, f); +return h.key = f.path, h.type = "select", h.titleMap || (h.titleMap = d(e["enum"])), f.lookup[b.stringify(f.path)] = h, h; +} +}, m = function(a, e, f) { +if ("array" === c(e.type) && e.items && e.items["enum"]) { +var h = g(a, e, f); +return h.key = f.path, h.type = "checkboxes", h.titleMap || (h.titleMap = d(e.items["enum"])), f.lookup[b.stringify(f.path)] = h, h; +} +}, n = function(d, e, h) { +if ("object" === c(e.type)) { +var i = g(d, e, h); +return i.type = "fieldset", i.items = [], h.lookup[b.stringify(h.path)] = i, a.forEach(e.properties, function(a, c) { +var d = h.path.slice(); +if (d.push(c), h.ignore[b.stringify(d)] !== !0) { +var g = e.required && e.required.indexOf(c) !== -1, j = f(c, a, { +path:d, +required:g || !1, +lookup:h.lookup, +ignore:h.ignore, +global:h.global +}); +j && i.items.push(j); +} +}), i; +} +}, o = function(a, d, e) { +if ("array" === c(d.type)) { +var h = g(a, d, e); +h.type = "array", h.key = e.path, e.lookup[b.stringify(e.path)] = h; +var i = d.required && d.required.indexOf(e.path[e.path.length - 1]) !== -1, j = e.path.slice(); +return j.push(""), h.items = [ f(a, d.items, { +path:j, +required:i || !1, +lookup:e.lookup, +ignore:e.ignore, +global:e.global +}) ], h; +} +}, p = { +string:[ l, h ], +object:[ n ], +number:[ i ], +integer:[ j ], +"boolean":[ k ], +array:[ m, o ] +}, q = function(a) { +return a; +}; +this.defaults = p, this.stdFormObj = g, this.defaultFormDefinition = f, this.postProcess = function(a) { +q = a; +}, this.appendRule = function(a, b) { +p[a] || (p[a] = []), p[a].push(b); +}, this.prependRule = function(a, b) { +p[a] || (p[a] = []), p[a].unshift(b); +}, this.createStandardForm = g, this.$get = function() { +var d = {}; +return d.merge = function(c, f, g, h, i, j) { +f = f || [ "*" ], h = h || {}, i = i || c.readonly || c.readOnly; +var k = d.defaults(c, g, h), l = f.indexOf("*"); +l !== -1 && (f = f.slice(0, l).concat(k.form).concat(f.slice(l + 1))); +var m = k.lookup; +return q(f.map(function(f) { +if ("string" == typeof f && (f = { +key:f +}), f.key && "string" == typeof f.key && (f.key = b.parse(f.key)), f.titleMap && (f.titleMap = e(f.titleMap)), f.itemForm) { +f.items = []; +var k = b.stringify(f.key), l = m[k]; +a.forEach(l.items, function(b) { +var c = a.copy(f.itemForm); +c.key = b.key, f.items.push(c); +}); +} +if (f.key) { +var n = b.stringify(f.key); +if (m[n]) { +var o = m[n]; +a.forEach(o, function(a, b) { +void 0 === f[b] && (f[b] = o[b]); +}); +} +} +return i === !0 && (f.readonly = !0), f.items && (f.items = d.merge(c, f.items, g, h, f.readonly, j)), f.tabs && a.forEach(f.tabs, function(a) { +a.items = d.merge(c, a.items, g, h, f.readonly, j); +}), "checkbox" === f.type && a.isUndefined(f.schema["default"]) && (f.schema["default"] = !1), j && "template" === f.type && !f.template && f.templateUrl && j.push(f), f; +})); +}, d.defaults = function(b, d, e) { +var g = [], h = {}; +if (d = d || {}, e = e || {}, "object" !== c(b.type)) throw new Error('Not implemented. Only type "object" allowed at root level of schema.'); +return a.forEach(b.properties, function(a, c) { +if (d[c] !== !0) { +var i = b.required && b.required.indexOf(c) !== -1, j = f(c, a, { +path:[ c ], +lookup:h, +ignore:d, +required:i, +global:e +}); +j && g.push(j); +} +}), { +form:g, +lookup:h +}; +}, d.traverseSchema = function(b, c, d, e) { +e = !a.isDefined(e) || e, d = d || []; +var f = function(b, c, d) { +if (c(b, d), a.forEach(b.properties, function(a, b) { +var e = d.slice(); +e.push(b), f(a, c, e); +}), !e && b.items) { +var g = d.slice(); +g.push(""), f(b.items, c, g); +} +}; +f(b, c, d || []); +}, d.traverseForm = function(b, c) { +c(b), a.forEach(b.items, function(a) { +d.traverseForm(a, c); +}), b.tabs && a.forEach(b.tabs, function(b) { +a.forEach(b.items, function(a) { +d.traverseForm(a, c); +}); +}); +}, d; +}; +} ]), a.module("schemaForm").factory("sfSelect", [ "sfPath", function(a) { +var b = /^\d+$/; +return function(c, d, e) { +d || (d = this); +var f = "string" == typeof c ? a.parse(c) :c; +if ("undefined" != typeof e && 1 === f.length) return d[f[0]] = e, d; +"undefined" != typeof e && "undefined" == typeof d[f[0]] && (d[f[0]] = f.length > 2 && b.test(f[1]) ? [] :{}); +for (var g = d[f[0]], h = 1; h < f.length; h++) { +if ("" === f[h]) return; +if ("undefined" != typeof e) { +if (h === f.length - 1) return g[f[h]] = e, e; +var i = g[f[h]]; +"undefined" != typeof i && null !== i || (i = b.test(f[h + 1]) ? [] :{}, g[f[h]] = i), g = i; +} else g && (g = g[f[h]]); +} +return g; +}; +} ]), a.module("schemaForm").factory("sfValidator", [ function() { +var b = {}; +return b.validate = function(b, d) { +if (!b) return { +valid:!0 +}; +var e = b.schema; +if (!e) return { +valid:!0 +}; +"" === d && (d = void 0), "number" === b.type && null === d && (d = void 0); +var f = { +type:"object", +properties:{} +}, g = b.key[b.key.length - 1]; +f.properties[g] = e, b.required && (f.required = [ g ]); +var h = {}; +return a.isDefined(d) && (h[g] = d), c.validateResult(h, f); +}, b; +} ]), a.module("schemaForm").directive("sfArray", [ "sfSelect", "schemaForm", "sfValidator", "sfPath", function(b, c, d, e) { +var f = function(a) { +return function(b) { +b.key && (b.key[b.key.indexOf("")] = a); +}; +}; +return { +restrict:"A", +scope:!0, +require:"?ngModel", +link:function(g, h, i, j) { +var k = {}; +g.validateArray = a.noop, j && g.$emit("schemaFormPropagateNgModelController", j); +var l = g.$watch(i.sfArray, function(h) { +if (h) { +var i = b(h.key, g.model), m = e.normalize(h.key); +if (g.$watch("model" + ("[" !== m[0] ? "." :"") + m, function(a) { +i = g.modelArray = a; +}), a.isUndefined(i) && (i = [], b(h.key, g.model, i)), g.modelArray = i, h.items) { +var n = h.items[0]; +h.items.length > 1 && (n = { +type:"section", +items:h.items.map(function(b) { +return b.ngModelOptions = h.ngModelOptions, a.isUndefined(b.readonly) && (b.readonly = h.readonly), b; +}) +}); +} +if (g.copyWithIndex = function(b) { +if (!k[b] && n) { +var d = a.copy(n); +d.arrayIndex = b, c.traverseForm(d, f(b)), k[b] = d; +} +return k[b]; +}, g.appendToArray = function() { +var d = i.length, e = g.copyWithIndex(d); +if (c.traverseForm(e, function(c) { +if (c.key) { +var d; +a.isDefined(c["default"]) && (d = c["default"]), a.isDefined(c.schema) && a.isDefined(c.schema["default"]) && (d = c.schema["default"]), a.isDefined(d) && b(c.key, g.model, d); +} +}), d === i.length) { +var f, j = b("schema.items.type", h); +"object" === j ? f = {} :"array" === j && (f = []), i.push(f); +} +return g.validateArray(), i; +}, g.deleteFromArray = function(a) { +return i.splice(a, 1), g.validateArray(), j && j.$setDirty && j.$setDirty(), i; +}, h.titleMap || h.startEmpty === !0 || 0 !== i.length || g.appendToArray(), h.titleMap && h.titleMap.length > 0) { +g.titleMapValues = []; +var o = function(a) { +g.titleMapValues = [], a = a || [], h.titleMap.forEach(function(b) { +g.titleMapValues.push(a.indexOf(b.value) !== -1); +}); +}; +o(g.modelArray), g.$watchCollection("modelArray", o), g.$watchCollection("titleMapValues", function(a, b) { +if (a && a !== b) { +for (var c = g.modelArray; c.length > 0; ) c.pop(); +h.titleMap.forEach(function(b, d) { +a[d] && c.push(b.value); +}), g.validateArray(); +} +}); +} +if (j) { +var p; +g.validateArray = function() { +var a = d.validate(h, g.modelArray.length > 0 ? g.modelArray :void 0); +Object.keys(j.$error).filter(function(a) { +return 0 === a.indexOf("tv4-"); +}).forEach(function(a) { +j.$setValidity(a, !0); +}), a.valid !== !1 || !a.error || "" !== a.error.dataPath && a.error.dataPath !== "/" + h.key[h.key.length - 1] || (j.$setViewValue(g.modelArray), p = a.error, j.$setValidity("tv4-" + a.error.code, !1)); +}, g.$on("schemaFormValidate", g.validateArray), g.hasSuccess = function() { +return g.options && g.options.pristine && g.options.pristine.success === !1 ? j.$valid && !j.$pristine && !j.$isEmpty(j.$modelValue) :j.$valid && (!j.$pristine || !j.$isEmpty(j.$modelValue)); +}, g.hasError = function() { +return g.options && g.options.pristine && g.options.pristine.errors === !1 ? j.$invalid && !j.$pristine :j.$invalid; +}, g.schemaError = function() { +return p; +}; +} +l(); +} +}); +} +}; +} ]), a.module("schemaForm").directive("sfChanged", function() { +return { +require:"ngModel", +restrict:"AC", +scope:!1, +link:function(b, c, d, e) { +var f = b.$eval(d.sfChanged); +f && f.onChange && e.$viewChangeListeners.push(function() { +a.isFunction(f.onChange) ? f.onChange(e.$modelValue, f) :b.evalExpr(f.onChange, { +modelValue:e.$modelValue, +form:f +}); +}); +} +}; +}), a.module("schemaForm").directive("sfField", [ "$parse", "$compile", "$http", "$templateCache", "$interpolate", "$q", "sfErrorMessage", "sfPath", "sfSelect", function(b, c, d, e, f, g, h, i, j) { +return { +restrict:"AE", +replace:!1, +transclude:!1, +scope:!0, +require:"^sfSchema", +link:{ +pre:function(a, b, c, d) { +a.$on("schemaFormPropagateNgModelController", function(b, c) { +b.stopPropagation(), b.preventDefault(), a.ngModel = c; +}), a.form = d.lookup["f" + c.sfField]; +}, +post:function(b, c, d, e) { +b.showTitle = function() { +return b.form && b.form.notitle !== !0 && b.form.title; +}, b.listToCheckboxValues = function(b) { +var c = {}; +return a.forEach(b, function(a) { +c[a] = !0; +}), c; +}, b.checkboxValuesToList = function(b) { +var c = []; +return a.forEach(b, function(a, b) { +a && c.push(b); +}), c; +}, b.buttonClick = function(c, d) { +a.isFunction(d.onClick) ? d.onClick(c, d) :a.isString(d.onClick) && (e ? e.evalInParentScope(d.onClick, { +$event:c, +form:d +}) :b.$eval(d.onClick, { +$event:c, +form:d +})); +}, b.evalExpr = function(a, c) { +return e ? e.evalInParentScope(a, c) :b.$eval(a, c); +}, b.evalInScope = function(a, c) { +if (a) return b.$eval(a, c); +}, b.interp = function(a, b) { +return a && f(a)(b); +}, b.hasSuccess = function() { +return !!b.ngModel && (b.options && b.options.pristine && b.options.pristine.success === !1 ? b.ngModel.$valid && !b.ngModel.$pristine && !b.ngModel.$isEmpty(b.ngModel.$modelValue) :b.ngModel.$valid && (!b.ngModel.$pristine || !b.ngModel.$isEmpty(b.ngModel.$modelValue))); +}, b.hasError = function() { +return !!b.ngModel && (b.options && b.options.pristine && b.options.pristine.errors === !1 ? b.ngModel.$invalid && !b.ngModel.$pristine :b.ngModel.$invalid); +}, b.errorMessage = function(a) { +return h.interpolate(a && a.code + "" || "default", b.ngModel && b.ngModel.$modelValue || "", b.ngModel && b.ngModel.$viewValue || "", b.form, b.options && b.options.validationMessage); +}; +var g = b.form; +g.key && (b.$on("schemaForm.error." + g.key.join("."), function(a, c, d, e) { +d !== !0 && d !== !1 || (e = d, d = void 0), b.ngModel && c && (b.ngModel.$setDirty ? b.ngModel.$setDirty() :(b.ngModel.$dirty = !0, b.ngModel.$pristine = !1), d && (g.validationMessage || (g.validationMessage = {}), g.validationMessage[c] = d), b.ngModel.$setValidity(c, e === !0), e === !0 && (b.ngModel.$validate(), b.$broadcast("schemaFormValidate"))); +}), b.$on("$destroy", function() { +if (!b.externalDestructionInProgress) { +var a = g.destroyStrategy || b.options && b.options.destroyStrategy || "remove"; +if (g.key && "retain" !== a) { +var c = b.model; +if (g.key.length > 1 && (c = j(g.key.slice(0, g.key.length - 1), c)), void 0 === c) return; +var d = g.schema && g.schema.type || ""; +"empty" === a && d.indexOf("string") !== -1 ? c[g.key.slice(-1)] = "" :"empty" === a && d.indexOf("object") !== -1 ? c[g.key.slice(-1)] = {} :"empty" === a && d.indexOf("array") !== -1 ? c[g.key.slice(-1)] = [] :"null" === a ? c[g.key.slice(-1)] = null :delete c[g.key.slice(-1)]; +} +} +})); +} +} +}; +} ]), a.module("schemaForm").directive("sfMessage", [ "$injector", "sfErrorMessage", function(b, c) { +var d = b.has("$sanitize") ? b.get("$sanitize") :function(a) { +return a; +}; +return { +scope:!1, +restrict:"EA", +link:function(b, e, f) { +var g = ""; +f.sfMessage && b.$watch(f.sfMessage, function(a) { +a && (g = d(a), j(!!b.ngModel)); +}); +var h, i = function(a) { +a !== h && (e.html(a), h = a); +}, j = function(d) { +if (d) if (b.hasError()) { +var e = []; +a.forEach(b.ngModel && b.ngModel.$error, function(a, b) { +a && e.push(b); +}), e = e.filter(function(a) { +return "schemaForm" !== a; +}); +var f = e[0]; +i(f ? c.interpolate(f, b.ngModel.$modelValue, b.ngModel.$viewValue, b.form, b.options && b.options.validationMessage) :g); +} else i(g); else i(g); +}; +j(); +var k = b.$watch("ngModel", function(a) { +a && (a.$parsers.push(function(a) { +return j(!0), a; +}), a.$formatters.push(function(a) { +return j(!0), a; +}), k()); +}); +b.$watchCollection("ngModel.$error", function() { +j(!!b.ngModel); +}); +} +}; +} ]), a.module("schemaForm").directive("sfNewArray", [ "sfSelect", "sfPath", "schemaForm", function(b, c, d) { +return { +scope:!1, +link:function(e, f, g) { +e.min = 0, e.modelArray = e.$eval(g.sfNewArray); +var h = function() { +e.modelArray = e.$eval(g.sfNewArray), e.ngModel && e.ngModel.$pristine && e.firstDigest && (!e.options || e.options.validateOnRender !== !0) || e.validateField && e.validateField(); +}, i = function() { +e.form && e.form.onChange && (a.isFunction(e.form.onChange) ? e.form.onChange(e.modelArray, e.form) :e.evalExpr(e.form.onChange, { +modelValue:e.modelArray, +form:e.form +})); +}, j = function() { +var a = e.modelArray; +if (!a) { +var d = c.parse(g.sfNewArray); +a = [], b(d, e, a), e.modelArray = a; +} +return a; +}, k = e.$watch("form", function(a) { +if (a) { +if (a.titleMap || a.startEmpty === !0 || e.modelArray && 0 !== e.modelArray.length || e.appendToArray(), e.form && e.form.schema && e.form.schema.uniqueItems === !0 ? (e.$watch(g.sfNewArray, h, !0), e.$watch([ g.sfNewArray, g.sfNewArray + ".length" ], i)) :e.$watchGroup ? e.$watchGroup([ g.sfNewArray, g.sfNewArray + ".length" ], function() { +h(), i(); +}) :(e.$watch(g.sfNewArray, function() { +h(), i(); +}), e.$watch(g.sfNewArray + ".length", function() { +h(), i(); +})), a.titleMap && a.titleMap.length > 0) { +e.titleMapValues = []; +var b = function(b) { +e.titleMapValues = [], b = b || [], a.titleMap.forEach(function(a) { +e.titleMapValues.push(b.indexOf(a.value) !== -1); +}); +}; +b(e.modelArray), e.$watchCollection("modelArray", b), e.$watchCollection("titleMapValues", function(b, c) { +if (b && b !== c) { +for (var d = j(); d.length > 0; ) d.pop(); +a.titleMap.forEach(function(a, c) { +b[c] && d.push(a.value); +}), e.validateField && e.validateField(); +} +}); +} +k(); +} +}); +e.appendToArray = function() { +var c, f = j(); +if (e.form && e.form.schema && e.form.schema.items) { +var g = e.form.schema.items; +g.type && g.type.indexOf("object") !== -1 ? (c = {}, e.options && e.options.setSchemaDefaults === !1 || (c = a.isDefined(g["default"]) ? g["default"] :c, c && d.traverseSchema(g, function(d, e) { +a.isDefined(d["default"]) && b(e, c, d["default"]); +}))) :g.type && g.type.indexOf("array") !== -1 ? (c = [], e.options && e.options.setSchemaDefaults === !1 || (c = g["default"] || c)) :e.options && e.options.setSchemaDefaults === !1 || (c = g["default"] || c); +} +return f.push(c), f; +}, e.deleteFromArray = function(a) { +var b = e.modelArray; +return b && b.splice(a, 1), b; +}; +var l = function(a) { +return function(b) { +b.key && (b.key[b.key.indexOf("")] = a); +}; +}, m = {}; +e.copyWithIndex = function(b) { +var c = e.form; +if (!m[b]) { +var f = c.items[0]; +if (c.items.length > 1 && (f = { +type:"section", +items:c.items.map(function(b) { +return b.ngModelOptions = c.ngModelOptions, a.isUndefined(b.readonly) && (b.readonly = c.readonly), b; +}) +}), f) { +var g = a.copy(f); +g.arrayIndex = b, d.traverseForm(g, l(b)), m[b] = g; +} +} +return m[b]; +}; +} +}; +} ]), a.module("schemaForm").directive("sfSchema", [ "$compile", "$http", "$templateCache", "$q", "schemaForm", "schemaFormDecorators", "sfSelect", "sfPath", "sfBuilder", function(b, c, d, e, f, g, h, i, j) { +return { +scope:{ +schema:"=sfSchema", +initialForm:"=sfForm", +model:"=sfModel", +options:"=sfOptions" +}, +controller:[ "$scope", function(a) { +this.evalInParentScope = function(b, c) { +return a.$parent.$eval(b, c); +}; +var b = this; +a.lookup = function(a) { +return a && (b.lookup = a), b.lookup; +}; +} ], +replace:!1, +restrict:"A", +transclude:!0, +require:"?form", +link:function(i, k, l, m, n) { +i.formCtrl = m; +var o = {}; +n(i, function(a) { +if (a.addClass("schema-form-ignore"), k.prepend(a), k[0].querySelectorAll) { +var b = k[0].querySelectorAll("[ng-model]"); +if (b) for (var c = 0; c < b.length; c++) { +var d = b[c].getAttribute("ng-model"); +o[d.substring(d.indexOf(".") + 1)] = !0; +} +} +}); +var p, q = {}, r = function(a, b) { +var g = [], h = f.merge(a, b, o, i.options, void 0, g); +g.length > 0 ? e.all(g.map(function(a) { +return c.get(a.templateUrl, { +cache:d +}).then(function(b) { +a.template = b.data; +}); +})).then(function() { +s(a, b, h); +}) :s(a, b, h); +}, s = function(c, d, e) { +p && (i.externalDestructionInProgress = !0, p.$destroy(), i.externalDestructionInProgress = !1), p = i.$new(), p.schemaForm = { +form:e, +schema:c +}, k.children(":not(.schema-form-ignore)").remove(); +for (var m = {}, n = k[0].querySelectorAll("*[sf-insert-field]"), o = 0; o < n.length; o++) m[n[o].getAttribute("sf-insert-field")] = n[o]; +var q = g.decorator(l.sfUseDecorator), r = Object.create(null); +i.lookup(r), k[0].appendChild(j.build(e, q, m, r)), p.firstDigest = !0, setTimeout(function() { +p.firstDigest = !1; +}, 0), b(k.children())(p), i.options && i.options.setSchemaDefaults === !1 || f.traverseSchema(c, function(b, c) { +if (a.isDefined(b["default"])) { +var d = h(c, i.model); +a.isUndefined(d) && h(c, i.model, b["default"]); +} +}), i.$emit("sf-render-finished", k); +}, t = [ "*" ]; +i.$watch(function() { +var a = i.schema, b = i.initialForm || t; +b && a && a.type && (q.form !== b || q.schema !== a) && Object.keys(a.properties).length > 0 && (q.schema = a, q.form = b, r(a, b)); +}), i.$on("schemaFormRedraw", function() { +var b = i.schema, c = i.initialForm ? a.copy(i.initialForm) :[ "*" ]; +b && r(b, c); +}), i.$on("$destroy", function() { +i.externalDestructionInProgress = !0; +}), i.evalExpr = function(a, b) { +return i.$parent.$eval(a, b); +}; +} +}; +} ]), a.module("schemaForm").directive("schemaValidate", [ "sfValidator", "$parse", "sfSelect", function(b, c, d) { +return { +restrict:"A", +scope:!1, +priority:500, +require:"ngModel", +link:function(c, e, f, g) { +c.$emit("schemaFormPropagateNgModelController", g); +var h = null, i = c.$eval(f.schemaValidate); +i.copyValueTo && g.$viewChangeListeners.push(function() { +var b = i.copyValueTo; +a.forEach(b, function(a) { +d(a, c.model, g.$modelValue); +}); +}); +var j = function(a) { +if (!i) return a; +if (c.options && c.options.tv4Validation === !1) return a; +var d = b.validate(i, a); +Object.keys(g.$error).filter(function(a) { +return 0 === a.indexOf("tv4-"); +}).forEach(function(a) { +g.$setValidity(a, !0); +}); +{ +if (d.valid) return a; +if (g.$setValidity("tv4-" + d.error.code, !1), h = d.error, g.$validators) return a; +} +}; +"function" == typeof i.ngModel && i.ngModel(g), [ "$parsers", "$viewChangeListeners", "$formatters" ].forEach(function(a) { +i[a] && g[a] && i[a].forEach(function(b) { +g[a].push(b); +}); +}), [ "$validators", "$asyncValidators" ].forEach(function(b) { +i[b] && g[b] && a.forEach(i[b], function(a, c) { +g[b][c] = a; +}); +}), g.$parsers.push(j), g.$validators && (g.$validators.schemaForm = function() { +return !Object.keys(g.$error).some(function(a) { +return "schemaForm" !== a; +}); +}); +var k = i.schema; +c.validateField = function(a) { +void 0 != a && g.$$parentForm.$name !== a || (k && k.type.indexOf("array") !== -1 && j(g.$modelValue), g.$setDirty ? (g.$setDirty(), g.$setViewValue(g.$viewValue), g.$commitViewValue(), i.required && g.$isEmpty(g.$modelValue) && g.$setValidity("tv4-302", !1)) :g.$setViewValue(g.$viewValue)); +}, g.$formatters.push(function(a) { +return !g.$pristine || !c.firstDigest || c.options && c.options.validateOnRender === !0 ? (j(g.$modelValue), a) :a; +}), c.$on("schemaFormValidate", function(a, b) { +c.validateField(b); +}), c.schemaError = function() { +return h; +}; +} +}; +} ]), f; +}), function(a, b) { +"function" == typeof define && define.amd ? define([ "schemaForm" ], b) :"object" == typeof exports ? module.exports = b(require("schemaForm")) :a.bootstrapDecorator = b(a.schemaForm); +}(this, function(a) { +return angular.module("schemaForm").run([ "$templateCache", function(a) { +a.put("directives/decorators/bootstrap/actions-trcl.html", '
'), a.put("directives/decorators/bootstrap/actions.html", '
'), a.put("directives/decorators/bootstrap/array.html", '
'), +a.put("directives/decorators/bootstrap/checkbox.html", '
'), a.put("directives/decorators/bootstrap/checkboxes.html", '
'), +a.put("directives/decorators/bootstrap/default.html", '
{{ hasSuccess() ? \'(success)\' : \'(error)\' }}
'), +a.put("directives/decorators/bootstrap/fieldset-trcl.html", '
{{ form.title }}
'), a.put("directives/decorators/bootstrap/fieldset.html", '
{{ form.title }}
'), a.put("directives/decorators/bootstrap/help.html", '
'), a.put("directives/decorators/bootstrap/radio-buttons.html", '
'), +a.put("directives/decorators/bootstrap/radios-inline.html", '
'), a.put("directives/decorators/bootstrap/radios.html", '
'), +a.put("directives/decorators/bootstrap/section.html", '
'), a.put("directives/decorators/bootstrap/select.html", '
'), a.put("directives/decorators/bootstrap/submit.html", '
'), +a.put("directives/decorators/bootstrap/tabarray.html", '
'), +a.put("directives/decorators/bootstrap/tabs.html", '
'), a.put("directives/decorators/bootstrap/textarea.html", '
'); +} ]), angular.module("schemaForm").config([ "schemaFormDecoratorsProvider", function(a) { +var b = "directives/decorators/bootstrap/"; +a.defineDecorator("bootstrapDecorator", { +textarea:{ +template:b + "textarea.html", +replace:!1 +}, +fieldset:{ +template:b + "fieldset.html", +replace:!1 +}, +array:{ +template:b + "array.html", +replace:!1 +}, +tabarray:{ +template:b + "tabarray.html", +replace:!1 +}, +tabs:{ +template:b + "tabs.html", +replace:!1 +}, +section:{ +template:b + "section.html", +replace:!1 +}, +conditional:{ +template:b + "section.html", +replace:!1 +}, +actions:{ +template:b + "actions.html", +replace:!1 +}, +select:{ +template:b + "select.html", +replace:!1 +}, +checkbox:{ +template:b + "checkbox.html", +replace:!1 +}, +checkboxes:{ +template:b + "checkboxes.html", +replace:!1 +}, +number:{ +template:b + "default.html", +replace:!1 +}, +password:{ +template:b + "default.html", +replace:!1 +}, +submit:{ +template:b + "submit.html", +replace:!1 +}, +button:{ +template:b + "submit.html", +replace:!1 +}, +radios:{ +template:b + "radios.html", +replace:!1 +}, +"radios-inline":{ +template:b + "radios-inline.html", +replace:!1 +}, +radiobuttons:{ +template:b + "radio-buttons.html", +replace:!1 +}, +help:{ +template:b + "help.html", +replace:!1 +}, +"default":{ +template:b + "default.html", +replace:!1 +} +}, []), a.createDirectives({ +textarea:b + "textarea.html", +select:b + "select.html", +checkbox:b + "checkbox.html", +checkboxes:b + "checkboxes.html", +number:b + "default.html", +submit:b + "submit.html", +button:b + "submit.html", +text:b + "default.html", +date:b + "default.html", +password:b + "default.html", +datepicker:b + "datepicker.html", +input:b + "default.html", +radios:b + "radios.html", +"radios-inline":b + "radios-inline.html", +radiobuttons:b + "radio-buttons.html" +}); +} ]).directive("sfFieldset", function() { +return { +transclude:!0, +scope:!0, +templateUrl:"directives/decorators/bootstrap/fieldset-trcl.html", +link:function(a, b, c) { +a.title = a.$eval(c.title); +} +}; +}), a; +}), angular.module("schemaForm").run([ "$templateCache", function(a) { +a.put("decorators/bootstrap/actions-trcl.html", '
'), a.put("decorators/bootstrap/actions.html", '
'), a.put("decorators/bootstrap/array.html", '
'), +a.put("decorators/bootstrap/checkbox.html", '
'), a.put("decorators/bootstrap/checkboxes.html", '
'), +a.put("decorators/bootstrap/default.html", '
{{ hasSuccess() ? \'(success)\' : \'(error)\' }}
'), +a.put("decorators/bootstrap/fieldset.html", '
{{ form.title }}
'), a.put("decorators/bootstrap/help.html", '
'), a.put("decorators/bootstrap/radio-buttons.html", '
'), +a.put("decorators/bootstrap/radios-inline.html", '
'), a.put("decorators/bootstrap/radios.html", '
'), +a.put("decorators/bootstrap/section.html", '
'), a.put("decorators/bootstrap/select.html", '
'), a.put("decorators/bootstrap/submit.html", '
'), +a.put("decorators/bootstrap/tabarray.html", '
'), +a.put("decorators/bootstrap/tabs.html", '
'), a.put("decorators/bootstrap/textarea.html", '
'); +} ]), angular.module("schemaForm").config([ "schemaFormDecoratorsProvider", "sfBuilderProvider", "sfPathProvider", function(a, b, c) { +var d = "decorators/bootstrap/", e = b.builders.simpleTransclusion, f = b.builders.ngModelOptions, g = b.builders.ngModel, h = b.builders.sfField, i = b.builders.condition, j = b.builders.array, k = function(a) { +if (a.form.tabs && a.form.tabs.length > 0) { +var b = a.fieldFrag.querySelector(".tab-content"); +a.form.tabs.forEach(function(c, d) { +var e = document.createElement("div"); +e.className = "tab-pane", e.setAttribute("ng-disabled", "form.readonly"), e.setAttribute("ng-show", "selected.tab === " + d), e.setAttribute("ng-class", "{active: selected.tab === " + d + "}"); +var f = a.build(c.items, a.path + ".tabs[" + d + "].items", a.state); +e.appendChild(f), b.appendChild(e); +}); +} +}, l = [ h, g, f, i ]; +a.defineDecorator("bootstrapDecorator", { +textarea:{ +template:d + "textarea.html", +builder:l +}, +fieldset:{ +template:d + "fieldset.html", +builder:[ h, e, i ] +}, +array:{ +template:d + "array.html", +builder:[ h, f, g, j, i ] +}, +tabarray:{ +template:d + "tabarray.html", +builder:[ h, f, g, j, i ] +}, +tabs:{ +template:d + "tabs.html", +builder:[ h, f, k, i ] +}, +section:{ +template:d + "section.html", +builder:[ h, e, i ] +}, +conditional:{ +template:d + "section.html", +builder:[ h, e, i ] +}, +actions:{ +template:d + "actions.html", +builder:l +}, +select:{ +template:d + "select.html", +builder:l +}, +checkbox:{ +template:d + "checkbox.html", +builder:l +}, +checkboxes:{ +template:d + "checkboxes.html", +builder:[ h, f, g, j, i ] +}, +number:{ +template:d + "default.html", +builder:l +}, +password:{ +template:d + "default.html", +builder:l +}, +submit:{ +template:d + "submit.html", +builder:l +}, +button:{ +template:d + "submit.html", +builder:l +}, +radios:{ +template:d + "radios.html", +builder:l +}, +"radios-inline":{ +template:d + "radios-inline.html", +builder:l +}, +radiobuttons:{ +template:d + "radio-buttons.html", +builder:l +}, +help:{ +template:d + "help.html", +builder:l +}, +"default":{ +template:d + "default.html", +builder:l +} +}, []); +} ]), !function(a) { +function b(c) { +if (d[c]) return d[c].exports; +var e = d[c] = { +i:c, +l:!1, +exports:{} +}; +return a[c].call(e.exports, e, e.exports, b), e.l = !0, e.exports; +} +var c = window.webpackJsonp; +window.webpackJsonp = function(d, f, g) { +for (var h, i, j, k = 0, l = []; k < d.length; k++) i = d[k], e[i] && l.push(e[i][0]), e[i] = 0; +for (h in f) Object.prototype.hasOwnProperty.call(f, h) && (a[h] = f[h]); +for (c && c(d, f, g); l.length; ) l.shift()(); +if (g) for (k = 0; k < g.length; k++) j = b(b.s = g[k]); +return j; +}; +var d = {}, e = { +1:0 +}; +b.e = function(a) { +function c() { +f.onerror = f.onload = null, clearTimeout(g); +var b = e[a]; +0 !== b && (b && b[1](new Error("Loading chunk " + a + " failed.")), e[a] = void 0); +} +if (0 === e[a]) return Promise.resolve(); +if (e[a]) return e[a][2]; +var d = document.getElementsByTagName("head")[0], f = document.createElement("script"); +f.type = "text/javascript", f.charset = "utf-8", f.async = !0, f.timeout = 12e4, b.nc && f.setAttribute("nonce", b.nc), f.src = b.p + "" + a + ".chunk.js"; +var g = setTimeout(c, 12e4); +f.onerror = f.onload = c; +var h = new Promise(function(b, c) { +e[a] = [ b, c ]; +}); +return e[a][2] = h, d.appendChild(f), h; +}, b.m = a, b.c = d, b.i = function(a) { +return a; +}, b.d = function(a, c, d) { +b.o(a, c) || Object.defineProperty(a, c, { +configurable:!1, +enumerable:!0, +get:d +}); +}, b.n = function(a) { +var c = a && a.__esModule ? function() { +return a["default"]; +} :function() { +return a; +}; +return b.d(c, "a", c), c; +}, b.o = function(a, b) { +return Object.prototype.hasOwnProperty.call(a, b); +}, b.p = "/", b.oe = function(a) { +throw console.error(a), a; +}; +}([]), webpackJsonp([ 0, 1 ], [ function(a, b) { +a.exports = _; +}, function(a, b) { +a.exports = angular; +}, function(a, b) { +a.exports = $; +}, function(a, b) {}, function(a, b) { +a.exports = '\n \n \n \n \n
\n
\n {{match.label}}\n
\n
\n \n {{tag}}\n \n
\n
\n
\n'; +}, function(a, b) { +a.exports = '\n\n'; +}, function(a, b) { +a.exports = '
\n
\n
\n \n \n \n {{$select.selected.name}}\n \n \n {{tag.name}}\n \n {{otherTag}},\n \n \n \n
\n \n
\n \n
\n \n \n
\n
\n \n Application name is required.\n \n
\n
\n \n Application name consists of lower-case letters, numbers, and dashes. It must start with a letter and can\'t end with a -.\n \n
\n
\n \n Application name must be at least 2 characters.\n \n
\n
\n \n Application name can\'t be more than 24 characters.\n \n
\n
\n
\n
\n\n
\n \n
\n \n \n
\n \n Git repository is required.\n \n
\n
\n \n This might not be a valid Git URL. Check that it is the correct URL to a remote Git repository.\n \n
\n
\n
\n\n \n
\n If you have a private Git repository or need to change application defaults, view\n advanced options.\n
\n
\n
\n'; +}, function(a, b) { +a.exports = '
\n
\n

\n \n

\n

\n The application is being created\n

\n
\n
\n
\n

\n The application is being created\n

\n
\n
\n
\n
\n \n Success\n

\n \n {{$ctrl.name}} has been created in {{$ctrl.selectedProject.metadata.name}} successfully\n \n

\n
\n
\n
\n \n \n
\n
\n

\n Continue to your project to check the status of your application as it builds and deploys.\n

\n
\n
\n
\n \n Error\n

\n Order Failed\n

\n
\n
\n \n {{$ctrl.error.data.message | upperFirst}}\n \n \n An error occurred creating the application.\n \n
\n \n \n
\n\n'; +}, function(a, b) { +a.exports = '\n\n'; +}, function(a, b) { +a.exports = '
\n
\n \n \n \n \n
\n {{$ctrl.error}}\n
\n
\n'; +}, function(a, b) { +a.exports = '
\n
\n

Select a Plan

\n
\n \n
\n
\n
\n'; +}, function(a, b) { +a.exports = '
\n
\n
\n

\n \n

\n

\n The service is being provisioned\n

\n
\n
\n \n

\n The service is being provisioned\n

\n
\n
\n
\n
\n
\n \n Error\n

\n Order Failed\n

\n
\n
\n \n {{$ctrl.error.message || $ctrl.error.Message | upperFirst}}\n \n \n An error occurred ordering the service.\n \n
\n
\n
\n
\n \n Success\n

\n \n {{$ctrl.serviceInstanceName}} has been added to {{$ctrl.projectDisplayName}} successfully\n \n

\n
\n
\n
\n \n \n
\n
\n \n Info\n Continue to your project to bind this service to your application. Binding this service creates a secret containing the information necessary for your application to use the service.\n
\n\n'; +}, function(a, b) { +a.exports = '
\n \n
    \n
  1. \n \n
  2. \n
\n
\n
\n\n \n
\n
\n'; +}, function(a, b) { +a.exports = '
\n
\n \n
\n
\n
\n'; +}, function(a, b) { +a.exports = '
\n \n\n
\n
\n \n
\n
\n
\n
\n'; +}, function(a, b) { +a.exports = '
\n \n\n
\n \n\n
\n \n \n\n \n
\n\n \n\n {{ hasSuccess() ? \'(success)\' : \'(error)\' }}\n\n
\n
\n
\n'; +}, function(a, b) { +a.exports = '
\n \n
\n \n \n {{$select.selected.name}}\n \n \n \n \n \n
\n
\n
\n'; +}, function(a, b, c) { +"use strict"; +b.__esModule = !0; +var d = c(42); +b.catalogParameters = { +bindings:{ +parameterSchema:"<", +model:"=" +}, +controller:d.CatalogParametersController, +template:c(32) +}; +}, function(a, b, c) { +"use strict"; +b.__esModule = !0; +var d = c(43); +b.catalogSearch = { +bindings:{ +baseProjectUrl:"@", +catalogItems:"<" +}, +controller:d.CatalogSearchController, +template:c(33) +}; +}, function(a, b, c) { +"use strict"; +b.__esModule = !0; +var d = c(44); +b.createFromBuilder = { +bindings:{ +baseProjectUrl:"@", +imageStream:"<", +handleClose:"<" +}, +controller:d.CreateFromBuilderController, +template:c(34) +}; +}, function(a, b, c) { +"use strict"; +b.__esModule = !0; +var d = c(45); +b.landingPage = { +bindings:{ +baseProjectUrl:"@", +onTemplateSelected:"&" +}, +controller:d.LandingPageController, +template:c(35), +transclude:{ +landingsearch:"landingsearch", +landingheader:"landingheader", +landingbody:"landingbody", +landingside:"landingside" +} +}; +}, function(a, b, c) { +"use strict"; +b.__esModule = !0; +var d = c(46); +b.orderService = { +bindings:{ +baseProjectUrl:"@", +serviceClass:"<", +handleClose:"<" +}, +controller:d.OrderServiceController, +template:c(36) +}; +}, function(a, b, c) { +"use strict"; +b.__esModule = !0; +var d = c(47); +b.overlayPanel = { +bindings:{ +showClose:"<", +showPanel:"<", +handleClose:"<", +singleColumn:"<" +}, +controller:d.OverlayPanelController, +template:c(37), +transclude:!0 +}; +}, function(a, b, c) { +"use strict"; +b.__esModule = !0; +var d = c(48); +b.projectsSummary = { +bindings:{ +baseProjectUrl:"@", +catalogItems:"<", +projectsUrl:"@", +viewEditMembership:"&", +startTour:"&" +}, +controller:d.ProjectsSummaryController, +template:c(38) +}; +}, function(a, b, c) { +"use strict"; +b.__esModule = !0; +var d = c(49); +b.saasList = { +bindings:{ +saasTitle:"\n\n\n'; +}, function(a, b) { a.exports = '\n'; }, function(a, b) { a.exports = '
\n
\n
\n
\n
\n
\n
\n \n
\n
\n
\n {{$ctrl.imageStream.name}}\n {{$ctrl.istag.name}}\n
\n
\n \n {{tag}}\n \n
\n
\n
\n
\n

\n

\n Sample Repository:\n \n \n

\n
\n
\n
\n
\n
\n
\n
\n
\n
\n'; }, function(a, b) { a.exports = '
\n \n \n \n \n \n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n'; }, function(a, b) { -a.exports = '
\n
\n
\n
\n
\n
\n
\n \n \n
\n
\n
\n {{$ctrl.serviceName}}\n
\n
\n \n {{tag}}\n \n
\n \n
\n
\n
\n

\n \n Plan {{$ctrl.selectedPlan.osbMetadata.displayName}}\n \n \n {{$ctrl.selectedPlan.description}}\n

\n

\n

\n
\n
\n
\n
\n
\n
\n
\n
\n
\n'; +a.exports = '
\n
\n
\n
\n
\n
\n
\n \n \n
\n
\n
\n {{$ctrl.serviceName}}\n
\n
\n \n {{tag}}\n \n
\n \n
\n
\n
\n

\n \n Plan {{$ctrl.selectedPlan.externalMetadata.displayName}}\n \n \n {{$ctrl.selectedPlan.description}}\n

\n

\n

\n
\n
\n
\n
\n
\n
\n
\n
\n
\n'; }, function(a, b) { a.exports = '\n'; }, function(a, b) { a.exports = '
\n
\n
\n
\n \n

Getting Started

\n

\n My Projects\n

\n
\n \n A cluster admin can create a project for you by running the command:\n
\n oc adm new-project <projectname> --admin={{$ctrl.user.metadata.name || \'<YourUsername>\'}}\n
\n
\n \n
\n
\n

\n Create Project\n

\n \n \n \n \n
\n
\n
\n {{$ctrl.projects.length}}\n of\n {{$ctrl.totalProjects}}\n Projects\n View All\n
\n
\n
\n \n

\n \n {{project | displayName}}\n

\n

\n \n created\n by \n \n

\n
\n \n
\n
\n

\n Edit Project\n

\n \n \n \n \n
\n
\n
\n
\n
\n
\n

Getting Started

\n \n
\n
\n \n
\n
\n
\n

Recently Viewed

\n \n
\n
\n'; }, function(a, b) { -a.exports = '\n

{{$ctrl.saasTitle}}

\n \n \n
\n'; +a.exports = '\n

{{$ctrl.saasTitle}}

\n \n \n
\n'; }, function(a, b) { a.exports = '\n
\n \n \n \n {{$select.selected | displayName}}\n \n \n \n \n \n \n \n \n \n
\n
\n\n\n
\n \n
\n \n
A unique name for the project.
\n
\n \n Name must have at least two characters.\n \n
\n
\n \n Project names may only contain lower-case letters, numbers, and dashes.\n They may not start or end with a dash.\n \n
\n
\n \n This name is already in use. Please choose a different name.\n \n
\n
\n
\n\n
\n \n \n
\n\n
\n \n \n
\n
\n'; }, function(a, b) { @@ -62449,6 +64389,27 @@ a.exports = '
\n
div.ng-enter{animation:toastSlideIn .2s ease-out} .toast-notifications-list-pf>div.ng-leave{animation:toastSlideOut .2s ease-in} .toast-notifications-list-pf>div .toast-pf{border-color:#fff;margin-bottom:5px;width:100%} @@ -4062,6 +4062,7 @@ body.overlay-open,body.overlay-open .landing,body.overlay-open .landing-side-bar .catalog-project-summary-list .dropdown-kebab-pf .dropdown-menu.dropdown-menu-right{margin-top:5px;right:-14px} .catalog-project-summary-list .project-date{color:#8b8d8f;margin-bottom:0} .catalog-project-summary-list .project-date+.project-description{margin-top:7px} +.catalog-project-summary-list .project-date+.project-description .truncated-content{white-space:pre-line;word-wrap:break-word;word-break:break-word;overflow-wrap:break-word;min-width:0} .catalog-project-summary-list .project-tile{border-bottom:solid 1px #4d5258;border-top:solid 1px #4d5258;margin:-1px 0 0;padding:10px;position:relative} .catalog-project-summary-list .project-tile.tile-click:hover{background:rgba(255,255,255,.03)} .catalog-project-summary-list .project-tile.tile-click:hover .tile-target{color:#64b9e4} @@ -4110,6 +4111,8 @@ body.overlay-open,body.overlay-open .landing,body.overlay-open .landing-side-bar .saas-offerings-container .sass-list-expander:focus,.saas-offerings-container .sass-list-expander:hover{color:#fff;text-decoration:none} .saas-offerings-container .sass-list-expander:after{content:"\f107";font-family:FontAwesome;font-size:15px;padding:0 5px} .saas-offerings-container .sass-list-expander.expanded:after{content:"\f106"} +.saas-offerings-container .sass-list-expander.expanded .less{display:inline} +.saas-offerings-container .sass-list-expander .less,.saas-offerings-container .sass-list-expander.expanded .more{display:none} .saas-offerings-container .sass-list-expander-container{margin-bottom:10px;text-align:center} .saas-offerings-container .spinner-container{padding-top:60px;padding-bottom:60px} .services-view .services-item{color:#363636;min-height:160px;overflow:hidden;padding:5px 10px 20px;position:relative;text-align:center;width:50%;word-break:break-word} diff --git a/test/karma.conf.js b/test/karma.conf.js index abeb658415..761918ffb8 100644 --- a/test/karma.conf.js +++ b/test/karma.conf.js @@ -22,6 +22,11 @@ module.exports = function(config) { "bower_components/jquery/dist/jquery.js", "bower_components/angular/angular.js", 'bower_components/angular-mocks/angular-mocks.js', + "bower_components/angular-schema-form/dist/schema-form.js", + "bower_components/angular-schema-form/dist/bootstrap-decorator.js", + "bower_components/angular-schema-form-bootstrap/bootstrap-decorator.min.js", + "bower_components/tv4/tv4.js", + "bower_components/objectpath/lib/ObjectPath.js", "bower_components/json3/lib/json3.js", "bower_components/es5-shim/es5-shim.js", "bower_components/angular-resource/angular-resource.js",