diff --git a/assemblies/nexus-base-feature/pom.xml b/assemblies/nexus-base-feature/pom.xml
index 8646439e69..948a7f1c0d 100644
--- a/assemblies/nexus-base-feature/pom.xml
+++ b/assemblies/nexus-base-feature/pom.xml
@@ -19,7 +19,7 @@
org.sonatype.nexus.assemblies
nexus-assemblies
- 3.7.0-04
+ 3.7.1-02
nexus-base-feature
diff --git a/assemblies/nexus-base-template/pom.xml b/assemblies/nexus-base-template/pom.xml
index 96781a14b4..82210753ee 100644
--- a/assemblies/nexus-base-template/pom.xml
+++ b/assemblies/nexus-base-template/pom.xml
@@ -21,7 +21,7 @@
org.sonatype.nexus.assemblies
nexus-assemblies
- 3.7.0-04
+ 3.7.1-02
nexus-base-template
diff --git a/assemblies/nexus-boot-feature/pom.xml b/assemblies/nexus-boot-feature/pom.xml
index aa97cfd404..b71762e2a6 100644
--- a/assemblies/nexus-boot-feature/pom.xml
+++ b/assemblies/nexus-boot-feature/pom.xml
@@ -19,7 +19,7 @@
org.sonatype.nexus.assemblies
nexus-assemblies
- 3.7.0-04
+ 3.7.1-02
nexus-boot-feature
diff --git a/assemblies/nexus-core-feature/pom.xml b/assemblies/nexus-core-feature/pom.xml
index d3822dfd77..ae818b06d5 100644
--- a/assemblies/nexus-core-feature/pom.xml
+++ b/assemblies/nexus-core-feature/pom.xml
@@ -19,7 +19,7 @@
org.sonatype.nexus.assemblies
nexus-assemblies
- 3.7.0-04
+ 3.7.1-02
nexus-core-feature
diff --git a/assemblies/nexus-startup-feature/pom.xml b/assemblies/nexus-startup-feature/pom.xml
index cda6701120..11eed14fbd 100644
--- a/assemblies/nexus-startup-feature/pom.xml
+++ b/assemblies/nexus-startup-feature/pom.xml
@@ -19,7 +19,7 @@
org.sonatype.nexus.assemblies
nexus-assemblies
- 3.7.0-04
+ 3.7.1-02
nexus-startup-feature
diff --git a/assemblies/pom.xml b/assemblies/pom.xml
index d476f08c02..ee2babf557 100644
--- a/assemblies/pom.xml
+++ b/assemblies/pom.xml
@@ -20,7 +20,7 @@
org.sonatype.nexus
nexus-parent
- 3.7.0-04
+ 3.7.1-02
org.sonatype.nexus.assemblies
@@ -45,7 +45,7 @@
org.sonatype.nexus
nexus-components
pom
- 3.7.0-04
+ 3.7.1-02
import
@@ -53,7 +53,7 @@
org.sonatype.nexus.plugins
nexus-plugins
pom
- 3.7.0-04
+ 3.7.1-02
import
diff --git a/buildsupport/all/pom.xml b/buildsupport/all/pom.xml
index 5ae059d801..5d83a19f8b 100644
--- a/buildsupport/all/pom.xml
+++ b/buildsupport/all/pom.xml
@@ -20,7 +20,7 @@
org.sonatype.nexus.buildsupport
nexus-buildsupport
- 3.7.0-04
+ 3.7.1-02
nexus-buildsupport-all
@@ -35,7 +35,7 @@
org.sonatype.nexus.buildsupport
nexus-buildsupport-commons
pom
- 3.7.0-04
+ 3.7.1-02
import
@@ -43,7 +43,7 @@
org.sonatype.nexus.buildsupport
nexus-buildsupport-db
pom
- 3.7.0-04
+ 3.7.1-02
import
@@ -51,7 +51,7 @@
org.sonatype.nexus.buildsupport
nexus-buildsupport-goodies
pom
- 3.7.0-04
+ 3.7.1-02
import
@@ -59,7 +59,7 @@
org.sonatype.nexus.buildsupport
nexus-buildsupport-groovy
pom
- 3.7.0-04
+ 3.7.1-02
import
@@ -67,7 +67,7 @@
org.sonatype.nexus.buildsupport
nexus-buildsupport-guice
pom
- 3.7.0-04
+ 3.7.1-02
import
@@ -75,7 +75,7 @@
org.sonatype.nexus.buildsupport
nexus-buildsupport-httpclient
pom
- 3.7.0-04
+ 3.7.1-02
import
@@ -83,7 +83,7 @@
org.sonatype.nexus.buildsupport
nexus-buildsupport-internal
pom
- 3.7.0-04
+ 3.7.1-02
import
@@ -91,7 +91,7 @@
org.sonatype.nexus.buildsupport
nexus-buildsupport-jetty
pom
- 3.7.0-04
+ 3.7.1-02
import
@@ -99,7 +99,7 @@
org.sonatype.nexus.buildsupport
nexus-buildsupport-jruby
pom
- 3.7.0-04
+ 3.7.1-02
import
@@ -107,7 +107,7 @@
org.sonatype.nexus.buildsupport
nexus-buildsupport-logging
pom
- 3.7.0-04
+ 3.7.1-02
import
@@ -115,7 +115,7 @@
org.sonatype.nexus.buildsupport
nexus-buildsupport-maven
pom
- 3.7.0-04
+ 3.7.1-02
import
@@ -123,7 +123,7 @@
org.sonatype.nexus.buildsupport
nexus-buildsupport-metrics
pom
- 3.7.0-04
+ 3.7.1-02
import
@@ -131,7 +131,7 @@
org.sonatype.nexus.buildsupport
nexus-buildsupport-osgi
pom
- 3.7.0-04
+ 3.7.1-02
import
@@ -139,7 +139,7 @@
org.sonatype.nexus.buildsupport
nexus-buildsupport-other
pom
- 3.7.0-04
+ 3.7.1-02
import
@@ -147,7 +147,7 @@
org.sonatype.nexus.buildsupport
nexus-buildsupport-rest
pom
- 3.7.0-04
+ 3.7.1-02
import
@@ -155,7 +155,7 @@
org.sonatype.nexus.buildsupport
nexus-buildsupport-security
pom
- 3.7.0-04
+ 3.7.1-02
import
@@ -163,7 +163,7 @@
org.sonatype.nexus.buildsupport
nexus-buildsupport-testing
pom
- 3.7.0-04
+ 3.7.1-02
import
@@ -171,7 +171,7 @@
org.sonatype.nexus.buildsupport
nexus-buildsupport-ui
pom
- 3.7.0-04
+ 3.7.1-02
import
diff --git a/buildsupport/commons/pom.xml b/buildsupport/commons/pom.xml
index c554913e39..af9da7ec9c 100644
--- a/buildsupport/commons/pom.xml
+++ b/buildsupport/commons/pom.xml
@@ -20,7 +20,7 @@
org.sonatype.nexus.buildsupport
nexus-buildsupport
- 3.7.0-04
+ 3.7.1-02
nexus-buildsupport-commons
diff --git a/buildsupport/db/pom.xml b/buildsupport/db/pom.xml
index 56abd589d0..dfa505ce39 100644
--- a/buildsupport/db/pom.xml
+++ b/buildsupport/db/pom.xml
@@ -20,7 +20,7 @@
org.sonatype.nexus.buildsupport
nexus-buildsupport
- 3.7.0-04
+ 3.7.1-02
nexus-buildsupport-db
diff --git a/buildsupport/extjs-maven-plugin/pom.xml b/buildsupport/extjs-maven-plugin/pom.xml
index 710f4e7088..721d5b264d 100644
--- a/buildsupport/extjs-maven-plugin/pom.xml
+++ b/buildsupport/extjs-maven-plugin/pom.xml
@@ -21,7 +21,7 @@
org.sonatype.nexus.buildsupport
nexus-buildsupport
- 3.7.0-04
+ 3.7.1-02
extjs-maven-plugin
@@ -37,7 +37,7 @@
org.sonatype.nexus.buildsupport
nexus-buildsupport-all
pom
- 3.7.0-04
+ 3.7.1-02
import
diff --git a/buildsupport/goodies/pom.xml b/buildsupport/goodies/pom.xml
index 99c863586e..85fd98baf7 100644
--- a/buildsupport/goodies/pom.xml
+++ b/buildsupport/goodies/pom.xml
@@ -20,7 +20,7 @@
org.sonatype.nexus.buildsupport
nexus-buildsupport
- 3.7.0-04
+ 3.7.1-02
nexus-buildsupport-goodies
diff --git a/buildsupport/groovy/pom.xml b/buildsupport/groovy/pom.xml
index 7fa7004d9b..414475d57b 100644
--- a/buildsupport/groovy/pom.xml
+++ b/buildsupport/groovy/pom.xml
@@ -20,7 +20,7 @@
org.sonatype.nexus.buildsupport
nexus-buildsupport
- 3.7.0-04
+ 3.7.1-02
nexus-buildsupport-groovy
diff --git a/buildsupport/guice/pom.xml b/buildsupport/guice/pom.xml
index dadbeecb03..d6fc620154 100644
--- a/buildsupport/guice/pom.xml
+++ b/buildsupport/guice/pom.xml
@@ -20,7 +20,7 @@
org.sonatype.nexus.buildsupport
nexus-buildsupport
- 3.7.0-04
+ 3.7.1-02
nexus-buildsupport-guice
diff --git a/buildsupport/httpclient/pom.xml b/buildsupport/httpclient/pom.xml
index d558de361c..e1d3996959 100644
--- a/buildsupport/httpclient/pom.xml
+++ b/buildsupport/httpclient/pom.xml
@@ -20,7 +20,7 @@
org.sonatype.nexus.buildsupport
nexus-buildsupport
- 3.7.0-04
+ 3.7.1-02
nexus-buildsupport-httpclient
diff --git a/buildsupport/internal/pom.xml b/buildsupport/internal/pom.xml
index 1282e06f5e..d95dbb79a3 100644
--- a/buildsupport/internal/pom.xml
+++ b/buildsupport/internal/pom.xml
@@ -20,7 +20,7 @@
org.sonatype.nexus.buildsupport
nexus-buildsupport
- 3.7.0-04
+ 3.7.1-02
nexus-buildsupport-internal
diff --git a/buildsupport/jetty/pom.xml b/buildsupport/jetty/pom.xml
index 7283bc9d93..ad1b525a5b 100644
--- a/buildsupport/jetty/pom.xml
+++ b/buildsupport/jetty/pom.xml
@@ -20,7 +20,7 @@
org.sonatype.nexus.buildsupport
nexus-buildsupport
- 3.7.0-04
+ 3.7.1-02
nexus-buildsupport-jetty
diff --git a/buildsupport/jruby/pom.xml b/buildsupport/jruby/pom.xml
index 08595e59bc..07f22dde15 100644
--- a/buildsupport/jruby/pom.xml
+++ b/buildsupport/jruby/pom.xml
@@ -20,7 +20,7 @@
org.sonatype.nexus.buildsupport
nexus-buildsupport
- 3.7.0-04
+ 3.7.1-02
nexus-buildsupport-jruby
diff --git a/buildsupport/logging/pom.xml b/buildsupport/logging/pom.xml
index 5148042357..a72f5d6d65 100644
--- a/buildsupport/logging/pom.xml
+++ b/buildsupport/logging/pom.xml
@@ -20,7 +20,7 @@
org.sonatype.nexus.buildsupport
nexus-buildsupport
- 3.7.0-04
+ 3.7.1-02
nexus-buildsupport-logging
diff --git a/buildsupport/maven/pom.xml b/buildsupport/maven/pom.xml
index 3071d391f6..a4435d0286 100644
--- a/buildsupport/maven/pom.xml
+++ b/buildsupport/maven/pom.xml
@@ -20,7 +20,7 @@
org.sonatype.nexus.buildsupport
nexus-buildsupport
- 3.7.0-04
+ 3.7.1-02
nexus-buildsupport-maven
diff --git a/buildsupport/metrics/pom.xml b/buildsupport/metrics/pom.xml
index 8561975c80..a6ab995eaa 100644
--- a/buildsupport/metrics/pom.xml
+++ b/buildsupport/metrics/pom.xml
@@ -20,7 +20,7 @@
org.sonatype.nexus.buildsupport
nexus-buildsupport
- 3.7.0-04
+ 3.7.1-02
nexus-buildsupport-metrics
diff --git a/buildsupport/osgi/pom.xml b/buildsupport/osgi/pom.xml
index bd3f8ebc83..394ed7d85c 100644
--- a/buildsupport/osgi/pom.xml
+++ b/buildsupport/osgi/pom.xml
@@ -20,7 +20,7 @@
org.sonatype.nexus.buildsupport
nexus-buildsupport
- 3.7.0-04
+ 3.7.1-02
nexus-buildsupport-osgi
diff --git a/buildsupport/other/pom.xml b/buildsupport/other/pom.xml
index 5fe23c4ce5..ef562f0e35 100644
--- a/buildsupport/other/pom.xml
+++ b/buildsupport/other/pom.xml
@@ -20,7 +20,7 @@
org.sonatype.nexus.buildsupport
nexus-buildsupport
- 3.7.0-04
+ 3.7.1-02
nexus-buildsupport-other
diff --git a/buildsupport/pom.xml b/buildsupport/pom.xml
index 0bce1bc397..00c433cc73 100644
--- a/buildsupport/pom.xml
+++ b/buildsupport/pom.xml
@@ -20,7 +20,7 @@
org.sonatype.nexus
nexus-parent
- 3.7.0-04
+ 3.7.1-02
org.sonatype.nexus.buildsupport
diff --git a/buildsupport/rest/pom.xml b/buildsupport/rest/pom.xml
index a6827a895e..bd042f1618 100644
--- a/buildsupport/rest/pom.xml
+++ b/buildsupport/rest/pom.xml
@@ -20,7 +20,7 @@
org.sonatype.nexus.buildsupport
nexus-buildsupport
- 3.7.0-04
+ 3.7.1-02
nexus-buildsupport-rest
diff --git a/buildsupport/scripts/pom.xml b/buildsupport/scripts/pom.xml
index 97612680f8..96bd30aedb 100644
--- a/buildsupport/scripts/pom.xml
+++ b/buildsupport/scripts/pom.xml
@@ -20,7 +20,7 @@
org.sonatype.nexus.buildsupport
nexus-buildsupport
- 3.7.0-04
+ 3.7.1-02
nexus-buildsupport-scripts
@@ -36,7 +36,7 @@
org.sonatype.nexus.buildsupport
nexus-buildsupport-all
pom
- 3.7.0-04
+ 3.7.1-02
import
diff --git a/buildsupport/security/pom.xml b/buildsupport/security/pom.xml
index 3a74a55bd2..0bcf31e638 100644
--- a/buildsupport/security/pom.xml
+++ b/buildsupport/security/pom.xml
@@ -20,7 +20,7 @@
org.sonatype.nexus.buildsupport
nexus-buildsupport
- 3.7.0-04
+ 3.7.1-02
nexus-buildsupport-security
diff --git a/buildsupport/testing/pom.xml b/buildsupport/testing/pom.xml
index 8dc9727247..db6d98214a 100644
--- a/buildsupport/testing/pom.xml
+++ b/buildsupport/testing/pom.xml
@@ -20,7 +20,7 @@
org.sonatype.nexus.buildsupport
nexus-buildsupport
- 3.7.0-04
+ 3.7.1-02
nexus-buildsupport-testing
diff --git a/buildsupport/ui/pom.xml b/buildsupport/ui/pom.xml
index 2401f0cb29..b63866d70c 100644
--- a/buildsupport/ui/pom.xml
+++ b/buildsupport/ui/pom.xml
@@ -20,7 +20,7 @@
org.sonatype.nexus.buildsupport
nexus-buildsupport
- 3.7.0-04
+ 3.7.1-02
nexus-buildsupport-ui
diff --git a/components/nexus-analytics-api/pom.xml b/components/nexus-analytics-api/pom.xml
index b7b5e810d0..643770e2a4 100644
--- a/components/nexus-analytics-api/pom.xml
+++ b/components/nexus-analytics-api/pom.xml
@@ -20,7 +20,7 @@
org.sonatype.nexus
nexus-components
- 3.7.0-04
+ 3.7.1-02
nexus-analytics-api
diff --git a/components/nexus-audit/pom.xml b/components/nexus-audit/pom.xml
index e888acc9ec..2b1f487be3 100644
--- a/components/nexus-audit/pom.xml
+++ b/components/nexus-audit/pom.xml
@@ -20,7 +20,7 @@
org.sonatype.nexus
nexus-components
- 3.7.0-04
+ 3.7.1-02
nexus-audit
diff --git a/components/nexus-base/pom.xml b/components/nexus-base/pom.xml
index 87ac81fcaa..e918e0f33f 100644
--- a/components/nexus-base/pom.xml
+++ b/components/nexus-base/pom.xml
@@ -20,7 +20,7 @@
org.sonatype.nexus
nexus-components
- 3.7.0-04
+ 3.7.1-02
nexus-base
diff --git a/components/nexus-blobstore-api/pom.xml b/components/nexus-blobstore-api/pom.xml
index b33ff617ec..93c99633fc 100644
--- a/components/nexus-blobstore-api/pom.xml
+++ b/components/nexus-blobstore-api/pom.xml
@@ -20,7 +20,7 @@
org.sonatype.nexus
nexus-components
- 3.7.0-04
+ 3.7.1-02
nexus-blobstore-api
diff --git a/components/nexus-blobstore-file/pom.xml b/components/nexus-blobstore-file/pom.xml
index c55f8ba1c2..ed0f77227d 100644
--- a/components/nexus-blobstore-file/pom.xml
+++ b/components/nexus-blobstore-file/pom.xml
@@ -20,7 +20,7 @@
org.sonatype.nexus
nexus-components
- 3.7.0-04
+ 3.7.1-02
nexus-blobstore-file
diff --git a/components/nexus-blobstore/pom.xml b/components/nexus-blobstore/pom.xml
index fed303994c..216b98433a 100644
--- a/components/nexus-blobstore/pom.xml
+++ b/components/nexus-blobstore/pom.xml
@@ -20,7 +20,7 @@
org.sonatype.nexus
nexus-components
- 3.7.0-04
+ 3.7.1-02
nexus-blobstore
diff --git a/components/nexus-bootstrap/pom.xml b/components/nexus-bootstrap/pom.xml
index a2963fa2ac..38699136d7 100644
--- a/components/nexus-bootstrap/pom.xml
+++ b/components/nexus-bootstrap/pom.xml
@@ -20,7 +20,7 @@
org.sonatype.nexus
nexus-components
- 3.7.0-04
+ 3.7.1-02
nexus-bootstrap
diff --git a/components/nexus-cache/pom.xml b/components/nexus-cache/pom.xml
index 1d25d38d1d..7895e1e189 100644
--- a/components/nexus-cache/pom.xml
+++ b/components/nexus-cache/pom.xml
@@ -20,7 +20,7 @@
org.sonatype.nexus
nexus-components
- 3.7.0-04
+ 3.7.1-02
nexus-cache
diff --git a/components/nexus-capability/pom.xml b/components/nexus-capability/pom.xml
index 310ff4350d..8f4959e676 100644
--- a/components/nexus-capability/pom.xml
+++ b/components/nexus-capability/pom.xml
@@ -21,7 +21,7 @@
org.sonatype.nexus
nexus-components
- 3.7.0-04
+ 3.7.1-02
nexus-capability
diff --git a/components/nexus-commands/pom.xml b/components/nexus-commands/pom.xml
index 632711f695..3ceb6240fa 100644
--- a/components/nexus-commands/pom.xml
+++ b/components/nexus-commands/pom.xml
@@ -20,7 +20,7 @@
org.sonatype.nexus
nexus-components
- 3.7.0-04
+ 3.7.1-02
nexus-commands
diff --git a/components/nexus-common/pom.xml b/components/nexus-common/pom.xml
index 3209cf8771..782540c5fa 100644
--- a/components/nexus-common/pom.xml
+++ b/components/nexus-common/pom.xml
@@ -20,7 +20,7 @@
org.sonatype.nexus
nexus-components
- 3.7.0-04
+ 3.7.1-02
nexus-common
diff --git a/components/nexus-core/pom.xml b/components/nexus-core/pom.xml
index 9636a98fb8..19038fd886 100644
--- a/components/nexus-core/pom.xml
+++ b/components/nexus-core/pom.xml
@@ -20,7 +20,7 @@
org.sonatype.nexus
nexus-components
- 3.7.0-04
+ 3.7.1-02
nexus-core
diff --git a/components/nexus-crypto/pom.xml b/components/nexus-crypto/pom.xml
index ee9b733fe2..861e313ee0 100644
--- a/components/nexus-crypto/pom.xml
+++ b/components/nexus-crypto/pom.xml
@@ -20,7 +20,7 @@
org.sonatype.nexus
nexus-components
- 3.7.0-04
+ 3.7.1-02
nexus-crypto
diff --git a/components/nexus-elasticsearch/pom.xml b/components/nexus-elasticsearch/pom.xml
index 501936e6f7..d14367285b 100644
--- a/components/nexus-elasticsearch/pom.xml
+++ b/components/nexus-elasticsearch/pom.xml
@@ -20,7 +20,7 @@
org.sonatype.nexus
nexus-components
- 3.7.0-04
+ 3.7.1-02
nexus-elasticsearch
diff --git a/components/nexus-email/pom.xml b/components/nexus-email/pom.xml
index 752449a1b5..8ac0b671da 100644
--- a/components/nexus-email/pom.xml
+++ b/components/nexus-email/pom.xml
@@ -20,7 +20,7 @@
org.sonatype.nexus
nexus-components
- 3.7.0-04
+ 3.7.1-02
nexus-email
diff --git a/components/nexus-extdirect/pom.xml b/components/nexus-extdirect/pom.xml
index 3c7761cb79..d6e6d485fc 100644
--- a/components/nexus-extdirect/pom.xml
+++ b/components/nexus-extdirect/pom.xml
@@ -20,7 +20,7 @@
org.sonatype.nexus
nexus-components
- 3.7.0-04
+ 3.7.1-02
nexus-extdirect
diff --git a/components/nexus-extender/pom.xml b/components/nexus-extender/pom.xml
index c94e64fe0a..63879014bb 100644
--- a/components/nexus-extender/pom.xml
+++ b/components/nexus-extender/pom.xml
@@ -19,7 +19,7 @@
org.sonatype.nexus
nexus-components
- 3.7.0-04
+ 3.7.1-02
nexus-extender
diff --git a/components/nexus-formfields/pom.xml b/components/nexus-formfields/pom.xml
index eac1f4b736..0376655fbd 100644
--- a/components/nexus-formfields/pom.xml
+++ b/components/nexus-formfields/pom.xml
@@ -20,7 +20,7 @@
org.sonatype.nexus
nexus-components
- 3.7.0-04
+ 3.7.1-02
nexus-formfields
diff --git a/components/nexus-guice-servlet/pom.xml b/components/nexus-guice-servlet/pom.xml
index ec00957f25..f436501552 100644
--- a/components/nexus-guice-servlet/pom.xml
+++ b/components/nexus-guice-servlet/pom.xml
@@ -19,7 +19,7 @@
org.sonatype.nexus
nexus-components
- 3.7.0-04
+ 3.7.1-02
nexus-guice-servlet
diff --git a/components/nexus-httpclient/pom.xml b/components/nexus-httpclient/pom.xml
index 66e3894acc..37ff9c75c7 100644
--- a/components/nexus-httpclient/pom.xml
+++ b/components/nexus-httpclient/pom.xml
@@ -20,7 +20,7 @@
org.sonatype.nexus
nexus-components
- 3.7.0-04
+ 3.7.1-02
nexus-httpclient
diff --git a/components/nexus-jmx/pom.xml b/components/nexus-jmx/pom.xml
index 70452bd472..83fa0b3919 100644
--- a/components/nexus-jmx/pom.xml
+++ b/components/nexus-jmx/pom.xml
@@ -20,7 +20,7 @@
org.sonatype.nexus
nexus-components
- 3.7.0-04
+ 3.7.1-02
nexus-jmx
diff --git a/components/nexus-main/pom.xml b/components/nexus-main/pom.xml
index 1813ec8a4e..2af050fd35 100644
--- a/components/nexus-main/pom.xml
+++ b/components/nexus-main/pom.xml
@@ -21,7 +21,7 @@
org.sonatype.nexus
nexus-components
- 3.7.0-04
+ 3.7.1-02
nexus-main
diff --git a/components/nexus-mime/pom.xml b/components/nexus-mime/pom.xml
index fa334936d6..dcb477973a 100644
--- a/components/nexus-mime/pom.xml
+++ b/components/nexus-mime/pom.xml
@@ -20,7 +20,7 @@
org.sonatype.nexus
nexus-components
- 3.7.0-04
+ 3.7.1-02
nexus-mime
diff --git a/components/nexus-orient-console/pom.xml b/components/nexus-orient-console/pom.xml
index c4ac64ff5c..9913a75888 100644
--- a/components/nexus-orient-console/pom.xml
+++ b/components/nexus-orient-console/pom.xml
@@ -20,7 +20,7 @@
org.sonatype.nexus
nexus-components
- 3.7.0-04
+ 3.7.1-02
nexus-orient-console
diff --git a/components/nexus-orient/pom.xml b/components/nexus-orient/pom.xml
index 2d94e6a5c0..4b97dfbef1 100644
--- a/components/nexus-orient/pom.xml
+++ b/components/nexus-orient/pom.xml
@@ -20,7 +20,7 @@
org.sonatype.nexus
nexus-components
- 3.7.0-04
+ 3.7.1-02
nexus-orient
diff --git a/components/nexus-oss-edition/pom.xml b/components/nexus-oss-edition/pom.xml
index 614a80be37..c961945e04 100644
--- a/components/nexus-oss-edition/pom.xml
+++ b/components/nexus-oss-edition/pom.xml
@@ -20,7 +20,7 @@
org.sonatype.nexus
nexus-components
- 3.7.0-04
+ 3.7.1-02
nexus-oss-edition
diff --git a/components/nexus-pax-exam/pom.xml b/components/nexus-pax-exam/pom.xml
index 61b1f384f7..dd2c3658dd 100644
--- a/components/nexus-pax-exam/pom.xml
+++ b/components/nexus-pax-exam/pom.xml
@@ -20,7 +20,7 @@
org.sonatype.nexus
nexus-components
- 3.7.0-04
+ 3.7.1-02
nexus-pax-exam
diff --git a/components/nexus-pax-logging/pom.xml b/components/nexus-pax-logging/pom.xml
index 23ec69f6b3..fca8ff4f4d 100644
--- a/components/nexus-pax-logging/pom.xml
+++ b/components/nexus-pax-logging/pom.xml
@@ -20,7 +20,7 @@
org.sonatype.nexus
nexus-components
- 3.7.0-04
+ 3.7.1-02
nexus-pax-logging
diff --git a/components/nexus-plugin-api/pom.xml b/components/nexus-plugin-api/pom.xml
index 0e8c5118c4..93b902ebc6 100644
--- a/components/nexus-plugin-api/pom.xml
+++ b/components/nexus-plugin-api/pom.xml
@@ -19,7 +19,7 @@
org.sonatype.nexus
nexus-components
- 3.7.0-04
+ 3.7.1-02
nexus-plugin-api
diff --git a/components/nexus-quartz/pom.xml b/components/nexus-quartz/pom.xml
index 12994993a9..881c5a4d30 100644
--- a/components/nexus-quartz/pom.xml
+++ b/components/nexus-quartz/pom.xml
@@ -20,7 +20,7 @@
org.sonatype.nexus
nexus-components
- 3.7.0-04
+ 3.7.1-02
nexus-quartz
diff --git a/components/nexus-rapture/pom.xml b/components/nexus-rapture/pom.xml
index 5b2e1d4a76..dbba38921f 100644
--- a/components/nexus-rapture/pom.xml
+++ b/components/nexus-rapture/pom.xml
@@ -20,7 +20,7 @@
org.sonatype.nexus
nexus-components
- 3.7.0-04
+ 3.7.1-02
nexus-rapture
diff --git a/components/nexus-rapture/src/main/baseapp/bootstrap.css b/components/nexus-rapture/src/main/baseapp/bootstrap.css
new file mode 100644
index 0000000000..e2f341ae6f
--- /dev/null
+++ b/components/nexus-rapture/src/main/baseapp/bootstrap.css
@@ -0,0 +1,9 @@
+
+
+/*
+ * This file is generated by Sencha Cmd and should NOT be edited. It redirects
+ * to the most recently built CSS file for the application to allow index.html
+ * in the development directory to load properly (i.e., "dev mode").
+ */
+@import '../resources/static/rapture/development/baseapp/resources/baseapp-all.css';
+
diff --git a/components/nexus-rapture/src/main/baseapp/bootstrap.js b/components/nexus-rapture/src/main/baseapp/bootstrap.js
new file mode 100644
index 0000000000..f01b7e951c
--- /dev/null
+++ b/components/nexus-rapture/src/main/baseapp/bootstrap.js
@@ -0,0 +1,2698 @@
+var Ext = Ext || {};
+Ext.manifest = Ext.manifest || "bootstrap.json";
+// @tag core
+// @define Ext.Boot
+
+var Ext = Ext || {};
+
+//
+/**
+ * @class Ext.Boot
+ * @singleton
+ * @private
+ */
+Ext.Boot = Ext.Boot || (function (emptyFn) {
+
+ var doc = document,
+ _emptyArray = [],
+ _config = {
+ /**
+ * @cfg {Boolean} [disableCaching=true]
+ * If `true` current timestamp is added to script URL's to prevent caching.
+ * In debug builds, adding a "cache" or "disableCacheBuster" query parameter
+ * to the page's URL will set this to `false`.
+ */
+ disableCaching: (/[?&](?:cache|disableCacheBuster)\b/i.test(location.search) ||
+ !(/http[s]?\:/i.test(location.href)) ||
+ /(^|[ ;])ext-cache=1/.test(doc.cookie)) ? false :
+ true,
+
+ /**
+ * @cfg {String} [disableCachingParam="_dc"]
+ * The query parameter name for the cache buster's timestamp.
+ */
+ disableCachingParam: '_dc',
+
+ /**
+ * @cfg {Boolean} loadDelay
+ * Millisecond delay between asynchronous script injection (prevents stack
+ * overflow on some user agents) 'false' disables delay but potentially
+ * increases stack load.
+ */
+ loadDelay: false,
+
+ /**
+ * @cfg {Boolean} preserveScripts
+ * `false` to remove asynchronously loaded scripts, `true` to retain script
+ * element for browser debugger compatibility and improved load performance.
+ */
+ preserveScripts: true,
+
+ /**
+ * @cfg {String} [charset=UTF-8]
+ * Optional charset to specify encoding of dynamic content.
+ */
+ charset: 'UTF-8'
+ },
+
+ _assetConfig= {},
+
+ cssRe = /\.css(?:\?|$)/i,
+ resolverEl = doc.createElement('a'),
+ isBrowser = typeof window !== 'undefined',
+ _environment = {
+ browser: isBrowser,
+ node: !isBrowser && (typeof require === 'function'),
+ phantom: (window && (window._phantom || window.callPhantom)) || /PhantomJS/.test(window.navigator.userAgent)
+ },
+ _tags = (Ext.platformTags = {}),
+
+ // All calls to _debug are commented out to speed up old browsers a bit;
+ // yes that makes a difference because the cost of concatenating strings
+ // and passing them into _debug() adds up pretty quickly.
+ _debug = function (message) {
+ //console.log(message);
+ },
+ _apply = function (object, config, defaults) {
+ if (defaults) {
+ _apply(object, defaults);
+ }
+ if (object && config && typeof config === 'object') {
+ for (var i in config) {
+ object[i] = config[i];
+ }
+ }
+ return object;
+ },
+ _merge = function() {
+ var lowerCase = false,
+ obj = Array.prototype.shift.call(arguments),
+ index, i, len, value;
+
+ if (typeof arguments[arguments.length - 1] === 'boolean') {
+ lowerCase = Array.prototype.pop.call(arguments);
+ }
+
+ len = arguments.length;
+ for (index = 0; index < len; index++) {
+ value = arguments[index];
+ if (typeof value === 'object') {
+ for (i in value) {
+ obj[lowerCase ? i.toLowerCase() : i] = value[i];
+ }
+ }
+ }
+
+ return obj;
+ },
+ _getKeys = (typeof Object.keys == 'function') ?
+ function(object){
+ if (!object) {
+ return [];
+ }
+ return Object.keys(object);
+ } :
+ function(object) {
+ var keys = [],
+ property;
+
+ for (property in object) {
+ if (object.hasOwnProperty(property)) {
+ keys.push(property);
+ }
+ }
+
+ return keys;
+ },
+ /*
+ * The Boot loader class manages Request objects that contain one or
+ * more individual urls that need to be loaded. Requests can be performed
+ * synchronously or asynchronously, but will always evaluate urls in the
+ * order specified on the request object.
+ */
+ Boot = {
+ loading: 0,
+ loaded: 0,
+ apply: _apply,
+ env: _environment,
+ config: _config,
+
+ /**
+ * @cfg {Object} assetConfig
+ * A map (url->assetConfig) that contains information about assets loaded by the Microlaoder.
+ */
+ assetConfig: _assetConfig,
+
+ // Keyed by absolute URL this object holds "true" if that URL is already loaded
+ // or an array of callbacks to call once it loads.
+ scripts: {
+ /*
+ Entry objects
+
+ 'http://foo.com/bar/baz/Thing.js': {
+ done: true,
+ el: scriptEl || linkEl,
+ preserve: true,
+ requests: [ request1, ... ]
+ }
+ */
+ },
+
+ /**
+ * contains the current script name being loaded
+ * (loadSync or sequential load only)
+ */
+ currentFile: null,
+ suspendedQueue: [],
+ currentRequest: null,
+
+ // when loadSync is called, need to cause subsequent load requests to also be loadSync,
+ // eg, when Ext.require(...) is called
+ syncMode: false,
+
+ /*
+ * simple helper method for debugging
+ */
+ debug: _debug,
+
+ /**
+ * enables / disables loading scripts via script / link elements rather
+ * than using ajax / eval
+ */
+ useElements: true,
+
+ listeners: [],
+
+ Request: Request,
+
+ Entry: Entry,
+
+ allowMultipleBrowsers: false,
+
+ browserNames: {
+ ie: 'IE',
+ firefox: 'Firefox',
+ safari: 'Safari',
+ chrome: 'Chrome',
+ opera: 'Opera',
+ dolfin: 'Dolfin',
+ edge: 'Edge',
+ webosbrowser: 'webOSBrowser',
+ chromeMobile: 'ChromeMobile',
+ chromeiOS: 'ChromeiOS',
+ silk: 'Silk',
+ other: 'Other'
+ },
+
+ osNames: {
+ ios: 'iOS',
+ android: 'Android',
+ windowsPhone: 'WindowsPhone',
+ webos: 'webOS',
+ blackberry: 'BlackBerry',
+ rimTablet: 'RIMTablet',
+ mac: 'MacOS',
+ win: 'Windows',
+ tizen: 'Tizen',
+ linux: 'Linux',
+ bada: 'Bada',
+ chromeOS: 'ChromeOS',
+ other: 'Other'
+ },
+
+ browserPrefixes: {
+ ie: 'MSIE ',
+ edge: 'Edge/',
+ firefox: 'Firefox/',
+ chrome: 'Chrome/',
+ safari: 'Version/',
+ opera: 'OPR/',
+ dolfin: 'Dolfin/',
+ webosbrowser: 'wOSBrowser/',
+ chromeMobile: 'CrMo/',
+ chromeiOS: 'CriOS/',
+ silk: 'Silk/'
+ },
+
+ // When a UA reports multiple browsers this list is used to prioritize the 'real' browser
+ // lower index number will win
+ browserPriority: [
+ 'edge',
+ 'opera',
+ 'dolfin',
+ 'webosbrowser',
+ 'silk',
+ 'chromeiOS',
+ 'chromeMobile',
+ 'ie',
+ 'firefox',
+ 'safari',
+ 'chrome'
+ ],
+
+ osPrefixes: {
+ tizen: '(Tizen )',
+ ios: 'i(?:Pad|Phone|Pod)(?:.*)CPU(?: iPhone)? OS ',
+ android: '(Android |HTC_|Silk/)', // Some HTC devices ship with an OSX userAgent by default,
+ // so we need to add a direct check for HTC_
+ windowsPhone: 'Windows Phone ',
+ blackberry: '(?:BlackBerry|BB)(?:.*)Version\/',
+ rimTablet: 'RIM Tablet OS ',
+ webos: '(?:webOS|hpwOS)\/',
+ bada: 'Bada\/',
+ chromeOS: 'CrOS '
+ },
+
+ fallbackOSPrefixes: {
+ windows: 'win',
+ mac: 'mac',
+ linux: 'linux'
+ },
+
+ devicePrefixes: {
+ iPhone: 'iPhone',
+ iPod: 'iPod',
+ iPad: 'iPad'
+ },
+
+ maxIEVersion: 12,
+
+
+ /**
+ * The default function that detects various platforms and sets tags
+ * in the platform map accordingly. Examples are iOS, android, tablet, etc.
+ * @param tags the set of tags to populate
+ */
+ detectPlatformTags: function () {
+ var me = this,
+ ua = navigator.userAgent,
+ isMobile = /Mobile(\/|\s)/.test(ua),
+ element = document.createElement('div'),
+ isEventSupported = function (name, tag) {
+ if (tag === undefined) {
+ tag = window;
+ }
+
+ var eventName = 'on' + name.toLowerCase(),
+ isSupported = (eventName in element);
+
+ if (!isSupported) {
+ if (element.setAttribute && element.removeAttribute) {
+ element.setAttribute(eventName, '');
+ isSupported = typeof element[eventName] === 'function';
+
+ if (typeof element[eventName] !== 'undefined') {
+ element[eventName] = undefined;
+ }
+
+ element.removeAttribute(eventName);
+ }
+ }
+
+ return isSupported;
+ },
+
+ // Browser Detection
+ getBrowsers = function () {
+ var browsers = {},
+ maxIEVersion, prefix,
+ value, key, index, len, match, version, matched;
+
+ // MS Edge browser (and possibly others) can report multiple browsers in the UserAgent
+ // "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10240"
+ // we use this to prioritize the actual browser in this situation
+ len = me.browserPriority.length;
+ for (index = 0; index < len; index++) {
+ key = me.browserPriority[index];
+ if (!matched) {
+ value = me.browserPrefixes[key];
+ match = ua.match(new RegExp('(' + value + ')([\\w\\._]+)'));
+ version = match && match.length > 1 ? parseInt(match[2]) : 0;
+ if (version) {
+ matched = true;
+ }
+ } else {
+ version = 0;
+ }
+ browsers[key] = version;
+ }
+
+ //Deal with IE document mode
+ if (browsers.ie) {
+ var mode = document.documentMode;
+
+ if (mode >= 8) {
+ browsers.ie = mode;
+ }
+ }
+
+ // Fancy IE greater than and less then quick tags
+ version = browsers.ie || false;
+ maxIEVersion = Math.max(version, me.maxIEVersion);
+
+ for (index = 8; index <= maxIEVersion; ++index) {
+ prefix = 'ie' + index;
+ browsers[prefix + 'm'] = version ? version <= index : 0;
+ browsers[prefix] = version ? version === index : 0;
+ browsers[prefix + 'p'] = version ? version >= index : 0;
+ }
+
+ return browsers;
+ },
+
+ //OS Detection
+ getOperatingSystems = function () {
+ var systems = {},
+ value, key, keys, index, len, match, matched, version, activeCount;
+
+ keys = _getKeys(me.osPrefixes);
+ len = keys.length;
+ for (index = 0, activeCount = 0; index < len; index++) {
+ key = keys[index];
+ value = me.osPrefixes[key];
+ match = ua.match(new RegExp('(' + value + ')([^\\s;]+)'));
+ matched = match ? match[1] : null;
+
+ // This is here because some HTC android devices show an OSX Snow Leopard userAgent by default.
+ // And the Kindle Fire doesn't have any indicator of Android as the OS in its User Agent
+ if (matched && (matched === 'HTC_' || matched === 'Silk/')) {
+ version = 2.3;
+ } else {
+ version = match && match.length > 1 ? parseFloat(match[match.length - 1]) : 0;
+ }
+
+ if (version) {
+ activeCount++;
+ }
+ systems[key] = version;
+ }
+
+ keys = _getKeys(me.fallbackOSPrefixes);
+
+ // If no OS could be found we resort to the fallbacks, otherwise we just
+ // falsify the fallbacks
+ len = keys.length;
+ for (index = 0; index < len; index++) {
+ key = keys[index];
+
+ // No OS was detected from osPrefixes
+ if (activeCount === 0) {
+ value = me.fallbackOSPrefixes[key];
+ match = ua.toLowerCase().match(new RegExp(value));
+ systems[key] = match ? true : 0;
+ } else {
+ systems[key] = 0;
+ }
+ }
+
+ return systems;
+ },
+
+ // Device Detection
+ getDevices = function () {
+ var devices = {},
+ value, key, keys, index, len, match;
+
+ keys = _getKeys(me.devicePrefixes);
+ len = keys.length;
+ for (index = 0; index < len; index++) {
+ key = keys[index];
+ value = me.devicePrefixes[key];
+ match = ua.match(new RegExp(value));
+ devices[key] = match ? true : 0;
+ }
+
+ return devices;
+ },
+ browsers = getBrowsers(),
+ systems = getOperatingSystems(),
+ devices = getDevices(),
+ platformParams = Boot.loadPlatformsParam();
+
+ // We apply platformParams from the query here first to allow for forced user valued
+ // to be used in calculation of generated tags
+ _merge(_tags, browsers, systems, devices, platformParams, true);
+
+ _tags.phone = !!((_tags.iphone || _tags.ipod) ||
+ (!_tags.silk && (_tags.android && (_tags.android < 3 || isMobile))) ||
+ (_tags.blackberry && isMobile) ||
+ (_tags.windowsphone));
+
+ _tags.tablet = !!(!_tags.phone && (
+ _tags.ipad ||
+ _tags.android ||
+ _tags.silk ||
+ _tags.rimtablet ||
+ (_tags.ie10 && /; Touch/.test(ua))
+ ));
+
+ _tags.touch =
+ // if the browser has touch events we can be reasonably sure the device has
+ // a touch screen
+ isEventSupported('touchend') ||
+ // browsers that use pointer event have maxTouchPoints > 0 if the
+ // device supports touch input
+ // http://www.w3.org/TR/pointerevents/#widl-Navigator-maxTouchPoints
+ navigator.maxTouchPoints ||
+ // IE10 uses a vendor-prefixed maxTouchPoints property
+ navigator.msMaxTouchPoints;
+
+ _tags.desktop = !_tags.phone && !_tags.tablet;
+ _tags.cordova = _tags.phonegap = !!(window.PhoneGap || window.Cordova || window.cordova);
+ _tags.webview = /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)(?!.*FBAN)/i.test(ua);
+ _tags.androidstock = (_tags.android <= 4.3) && (_tags.safari || _tags.silk);
+
+ // Re-apply any query params here to allow for user override of generated tags (desktop, touch, tablet, etc)
+ _merge(_tags, platformParams, true);
+ },
+
+ /**
+ * Extracts user supplied platform tags from the "platformTags" query parameter
+ * of the form:
+ *
+ * ?platformTags=name:state,name:state,...
+ *
+ * (each tag defaults to true when state is unspecified)
+ *
+ * Example:
+ *
+ * ?platformTags=isTablet,isPhone:false,isDesktop:0,iOS:1,Safari:true, ...
+ *
+ * @returns {Object} the platform tags supplied by the query string
+ */
+ loadPlatformsParam: function () {
+ // Check if the ?platform parameter is set in the URL
+ var paramsString = window.location.search.substr(1),
+ paramsArray = paramsString.split("&"),
+ params = {}, i,
+ platforms = {},
+ tmpArray, tmplen, platform, name, enabled;
+
+ for (i = 0; i < paramsArray.length; i++) {
+ tmpArray = paramsArray[i].split("=");
+ params[tmpArray[0]] = tmpArray[1];
+ }
+
+ if (params.platformTags) {
+ tmpArray = params.platformTags.split(",");
+ for (tmplen = tmpArray.length, i = 0; i < tmplen; i++) {
+ platform = tmpArray[i].split(":");
+ name = platform[0];
+ enabled=true;
+ if (platform.length > 1) {
+ enabled = platform[1];
+ if (enabled === 'false' || enabled === '0') {
+ enabled = false;
+ }
+ }
+ platforms[name] = enabled;
+ }
+ }
+ return platforms;
+ },
+
+ filterPlatform: function (platform, excludes) {
+ platform = _emptyArray.concat(platform || _emptyArray);
+ excludes = _emptyArray.concat(excludes || _emptyArray);
+
+ var plen = platform.length,
+ elen = excludes.length,
+ include = (!plen && elen), // default true if only excludes specified
+ i, tag;
+
+ for (i = 0; i < plen && !include; i++) {
+ tag = platform[i];
+ include = !!_tags[tag];
+ }
+
+ for (i = 0; i < elen && include; i++) {
+ tag = excludes[i];
+ include = !_tags[tag];
+ }
+
+ return include;
+ },
+
+ init: function () {
+ var scriptEls = doc.getElementsByTagName('script'),
+ script = scriptEls[0],
+ len = scriptEls.length,
+ re = /\/ext(\-[a-z\-]+)?\.js$/,
+ entry, src, state, baseUrl, key, n, origin;
+
+ // No check for script definedness because there always should be at least one
+ Boot.hasReadyState = ("readyState" in script);
+ Boot.hasAsync = ("async" in script);
+ Boot.hasDefer = ("defer" in script);
+ Boot.hasOnLoad = ("onload" in script);
+
+ // Feature detecting IE
+ Boot.isIE8 = Boot.hasReadyState && !Boot.hasAsync && Boot.hasDefer && !Boot.hasOnLoad;
+ Boot.isIE9 = Boot.hasReadyState && !Boot.hasAsync && Boot.hasDefer && Boot.hasOnLoad;
+ Boot.isIE10p = Boot.hasReadyState && Boot.hasAsync && Boot.hasDefer && Boot.hasOnLoad;
+
+ if (Boot.isIE8) {
+ Boot.isIE10 = false;
+ Boot.isIE10m = true;
+ }
+ else {
+ Boot.isIE10 = (new Function('/*@cc_on return @_jscript_version @*/')()) === 10;
+ Boot.isIE10m = Boot.isIE10 || Boot.isIE9 || Boot.isIE8;
+ }
+
+ // IE11 does not support conditional compilation so we detect it by exclusion
+ Boot.isIE11 = Boot.isIE10p && !Boot.isIE10;
+
+ // Since we are loading after other scripts, and we needed to gather them
+ // anyway, we track them in _scripts so we don't have to ask for them all
+ // repeatedly.
+ for (n = 0; n < len; n++) {
+ src = (script = scriptEls[n]).src;
+ if (!src) {
+ continue;
+ }
+ state = script.readyState || null;
+
+ // If we find a script file called "ext-*.js", then the base path is that file's base path.
+ if (!baseUrl && re.test(src)) {
+ baseUrl = src;
+ }
+
+ if (!Boot.scripts[key = Boot.canonicalUrl(src)]) {
+// _debug("creating entry " + key + " in Boot.init");
+ entry = new Entry({
+ key: key,
+ url: src,
+ done: state === null || // non-IE
+ state === 'loaded' || state === 'complete', // IE only
+ el: script,
+ prop: 'src'
+ });
+ }
+ }
+
+ if (!baseUrl) {
+ script = scriptEls[scriptEls.length - 1];
+ baseUrl = script.src;
+ }
+
+ Boot.baseUrl = baseUrl.substring(0, baseUrl.lastIndexOf('/') + 1);
+ origin = window.location.origin ||
+ window.location.protocol +
+ "//" +
+ window.location.hostname +
+ (window.location.port ? ':' + window.location.port: '');
+ Boot.origin = origin;
+
+ Boot.detectPlatformTags();
+ Ext.filterPlatform = Boot.filterPlatform;
+ },
+
+ /**
+ * This method returns a canonical URL for the given URL.
+ *
+ * For example, the following all produce the same canonical URL (which is the
+ * last one):
+ *
+ * http://foo.com/bar/baz/zoo/derp/../../goo/Thing.js?_dc=12345
+ * http://foo.com/bar/baz/zoo/derp/../../goo/Thing.js
+ * http://foo.com/bar/baz/zoo/derp/../jazz/../../goo/Thing.js
+ * http://foo.com/bar/baz/zoo/../goo/Thing.js
+ * http://foo.com/bar/baz/goo/Thing.js
+ *
+ * @private
+ */
+ canonicalUrl: function (url) {
+ // *WARNING WARNING WARNING*
+ // This method yields the most correct result we can get but it is EXPENSIVE!
+ // In ALL browsers! When called multiple times in a sequence, as if when
+ // we resolve dependencies for entries, it will cause garbage collection events
+ // and overall painful slowness. This is why we try to avoid it as much as we can.
+ //
+ // @TODO - see if we need this fallback logic
+ // http://stackoverflow.com/questions/470832/getting-an-absolute-url-from-a-relative-one-ie6-issue
+ resolverEl.href = url;
+
+ var ret = resolverEl.href,
+ dc = _config.disableCachingParam,
+ pos = dc ? ret.indexOf(dc + '=') : -1,
+ c, end;
+
+ // If we have a _dc query parameter we need to remove it from the canonical
+ // URL.
+ if (pos > 0 && ((c = ret.charAt(pos - 1)) === '?' || c === '&')) {
+ end = ret.indexOf('&', pos);
+ end = (end < 0) ? '' : ret.substring(end);
+ if (end && c === '?') {
+ ++pos; // keep the '?'
+ end = end.substring(1); // remove the '&'
+ }
+ ret = ret.substring(0, pos - 1) + end;
+ }
+
+ return ret;
+ },
+
+ /**
+ * Get the config value corresponding to the specified name. If no name is given, will return the config object
+ * @param {String} name The config property name
+ * @return {Object}
+ */
+ getConfig: function (name) {
+ return name ? Boot.config[name] : Boot.config;
+ },
+
+ /**
+ * Set the configuration.
+ * @param {Object} config The config object to override the default values.
+ * @return {Ext.Boot} this
+ */
+ setConfig: function (name, value) {
+ if (typeof name === 'string') {
+ Boot.config[name] = value;
+ } else {
+ for (var s in name) {
+ Boot.setConfig(s, name[s]);
+ }
+ }
+ return Boot;
+ },
+
+ getHead: function () {
+ return Boot.docHead ||
+ (Boot.docHead = doc.head ||
+ doc.getElementsByTagName('head')[0]);
+ },
+
+ create: function (url, key, cfg) {
+ var config = cfg || {};
+ config.url = url;
+ config.key = key;
+ return Boot.scripts[key] = new Entry(config);
+ },
+
+ getEntry: function (url, cfg, canonicalPath) {
+ var key, entry;
+
+ // Canonicalizing URLs via anchor element href yields the most correct result
+ // but is *extremely* resource heavy so we need to avoid it whenever possible
+ key = canonicalPath ? url : Boot.canonicalUrl(url);
+ entry = Boot.scripts[key];
+
+ if (!entry) {
+ entry = Boot.create(url, key, cfg);
+
+ if (canonicalPath) {
+ entry.canonicalPath = true;
+ }
+ }
+
+ return entry;
+ },
+
+ registerContent: function (url, type, content) {
+ var cfg = {
+ content: content,
+ loaded: true,
+ css: type === 'css'
+ };
+
+ return Boot.getEntry(url, cfg);
+ },
+
+ processRequest: function(request, sync) {
+ request.loadEntries(sync);
+ },
+
+ load: function (request) {
+// _debug("Boot.load called");
+ var request = new Request(request);
+
+ if (request.sync || Boot.syncMode) {
+ return Boot.loadSync(request);
+ }
+
+ // If there is a request in progress, we must
+ // queue this new request to be fired when the current request completes.
+ if (Boot.currentRequest) {
+// _debug("current active request, suspending this request");
+ // trigger assignment of entries now to ensure that overlapping
+ // entries with currently running requests will synchronize state
+ // with this pending one as they complete
+ request.getEntries();
+ Boot.suspendedQueue.push(request);
+ } else {
+ Boot.currentRequest = request;
+ Boot.processRequest(request, false);
+ }
+ return Boot;
+ },
+
+ loadSync: function (request) {
+// _debug("Boot.loadSync called");
+ var request = new Request(request);
+
+ Boot.syncMode++;
+ Boot.processRequest(request, true);
+ Boot.syncMode--;
+ return Boot;
+ },
+
+ loadBasePrefix: function(request) {
+ request = new Request(request);
+ request.prependBaseUrl = true;
+ return Boot.load(request);
+ },
+
+ loadSyncBasePrefix: function(request) {
+ request = new Request(request);
+ request.prependBaseUrl = true;
+ return Boot.loadSync(request);
+ },
+
+ requestComplete: function(request) {
+ var next;
+
+ if (Boot.currentRequest === request) {
+ Boot.currentRequest = null;
+ while(Boot.suspendedQueue.length > 0) {
+ next = Boot.suspendedQueue.shift();
+ if(!next.done) {
+// _debug("resuming suspended request");
+ Boot.load(next);
+ break;
+ }
+ }
+ }
+ if (!Boot.currentRequest && Boot.suspendedQueue.length == 0) {
+ Boot.fireListeners();
+ }
+ },
+
+ isLoading: function () {
+ return !Boot.currentRequest && Boot.suspendedQueue.length == 0;
+ },
+
+ fireListeners: function () {
+ var listener;
+ while (Boot.isLoading() && (listener = Boot.listeners.shift())) {
+ listener();
+ }
+ },
+
+ onBootReady: function (listener) {
+ if (!Boot.isLoading()) {
+ listener();
+ } else {
+ Boot.listeners.push(listener);
+ }
+ },
+
+ /**
+ * this is a helper function used by Ext.Loader to flush out
+ * 'uses' arrays for classes in some Ext versions
+ */
+ getPathsFromIndexes: function (indexMap, loadOrder) {
+ // In older versions indexMap was an object instead of a sparse array
+ if (!('length' in indexMap)) {
+ var indexArray = [],
+ index;
+
+ for (index in indexMap) {
+ if (!isNaN(+index)) {
+ indexArray[+index] = indexMap[index];
+ }
+ }
+
+ indexMap = indexArray;
+ }
+
+ return Request.prototype.getPathsFromIndexes(indexMap, loadOrder);
+ },
+
+ createLoadOrderMap: function(loadOrder) {
+ return Request.prototype.createLoadOrderMap(loadOrder);
+ },
+
+ fetch: function(url, complete, scope, async) {
+ async = (async === undefined) ? !!complete : async;
+
+ var xhr = new XMLHttpRequest(),
+ result, status, content, exception = false,
+ readyStateChange = function () {
+ if (xhr && xhr.readyState == 4) {
+ status = (xhr.status === 1223) ? 204 :
+ (xhr.status === 0 && ((self.location || {}).protocol === 'file:' ||
+ (self.location || {}).protocol === 'ionp:')) ? 200 : xhr.status;
+ content = xhr.responseText;
+ result = {
+ content: content,
+ status: status,
+ exception: exception
+ };
+ if (complete) {
+ complete.call(scope, result);
+ }
+ xhr.onreadystatechange = emptyFn;
+ xhr = null;
+ }
+ };
+
+ if (async) {
+ xhr.onreadystatechange = readyStateChange;
+ }
+
+ try {
+// _debug("fetching " + url + " " + (async ? "async" : "sync"));
+ xhr.open('GET', url, async);
+ xhr.send(null);
+ } catch (err) {
+ exception = err;
+ readyStateChange();
+ return result;
+ }
+
+ if (!async) {
+ readyStateChange();
+ }
+
+ return result;
+ },
+
+ notifyAll: function(entry) {
+ entry.notifyRequests();
+ }
+ };
+
+ function Request(cfg) {
+ //The request class encapsulates a series of Entry objects
+ //and provides notification around the completion of all Entries
+ //in this request.
+
+ if(cfg.$isRequest) {
+ return cfg;
+ }
+
+ var cfg = cfg.url ? cfg : {url: cfg},
+ url = cfg.url,
+ urls = url.charAt ? [ url ] : url,
+ charset = cfg.charset || Boot.config.charset;
+
+ _apply(this, cfg);
+
+ delete this.url;
+ this.urls = urls;
+ this.charset = charset;
+ };
+
+ Request.prototype = {
+ $isRequest: true,
+
+ createLoadOrderMap: function (loadOrder) {
+ var len = loadOrder.length,
+ loadOrderMap = {},
+ i, element;
+
+ for (i = 0; i < len; i++) {
+ element = loadOrder[i];
+ loadOrderMap[element.path] = element;
+ }
+
+ return loadOrderMap;
+ },
+
+ getLoadIndexes: function (item, indexMap, loadOrder, includeUses, skipLoaded) {
+ var resolved = [],
+ queue = [item],
+ itemIndex = item.idx,
+ queue, entry, dependencies, depIndex, i, len;
+
+ if (indexMap[itemIndex]) {
+ // prevent cycles
+ return resolved;
+ }
+
+ // Both indexMap and resolved are sparse arrays keyed by indexes.
+ // This gives us a naturally sorted sequence of indexes later on
+ // when we need to convert them to paths.
+ // indexMap is the map of all indexes we have visited at least once
+ // per the current expandUrls() invocation, and resolved is the map
+ // of all dependencies for the current item that are not included
+ // in indexMap.
+ indexMap[itemIndex] = resolved[itemIndex] = true;
+
+ while (item = queue.shift()) {
+ // Canonicalizing URLs is expensive, we try to avoid it
+ if (item.canonicalPath) {
+ entry = Boot.getEntry(item.path, null, true);
+ }
+ else {
+ entry = Boot.getEntry(this.prepareUrl(item.path));
+ }
+
+ if (!(skipLoaded && entry.done)) {
+ if (includeUses && item.uses && item.uses.length) {
+ dependencies = item.requires.concat(item.uses);
+ }
+ else {
+ dependencies = item.requires;
+ }
+
+ for (i = 0, len = dependencies.length; i < len; i++) {
+ depIndex = dependencies[i];
+
+ if (!indexMap[depIndex]) {
+ indexMap[depIndex] = resolved[depIndex] = true;
+ queue.push(loadOrder[depIndex]);
+ }
+ }
+ }
+ }
+
+ return resolved;
+ },
+
+ getPathsFromIndexes: function (indexes, loadOrder) {
+ var paths = [],
+ index, len;
+
+ // indexes is a sparse array with values being true for defined indexes
+ for (index = 0, len = indexes.length; index < len; index++) {
+ if (indexes[index]) {
+ paths.push(loadOrder[index].path);
+ }
+ }
+
+ return paths;
+ },
+
+ expandUrl: function (url, loadOrder, loadOrderMap, indexMap, includeUses, skipLoaded) {
+ var item, resolved;
+
+ if (loadOrder) {
+ item = loadOrderMap[url];
+
+ if (item) {
+ resolved = this.getLoadIndexes(item, indexMap, loadOrder, includeUses, skipLoaded);
+
+ if (resolved.length) {
+ return this.getPathsFromIndexes(resolved, loadOrder);
+ }
+ }
+ }
+
+ return [url];
+ },
+
+ expandUrls: function (urls, includeUses) {
+ var me = this,
+ loadOrder = me.loadOrder,
+ expanded = [],
+ expandMap = {},
+ indexMap = [],
+ loadOrderMap, tmpExpanded, i, len, t, tlen, tUrl;
+
+ if (typeof urls === "string") {
+ urls = [urls];
+ }
+
+ if (loadOrder) {
+ loadOrderMap = me.loadOrderMap;
+
+ if (!loadOrderMap) {
+ loadOrderMap = me.loadOrderMap = me.createLoadOrderMap(loadOrder);
+ }
+ }
+
+ for (i = 0, len = urls.length; i < len; i++) {
+ // We don't want to skip loaded entries (last argument === false).
+ // There are some overrides that get loaded before their respective classes,
+ // and when the class dependencies are processed we don't want to skip over
+ // the overrides' dependencies just because they were loaded first.
+ tmpExpanded = this.expandUrl(urls[i], loadOrder, loadOrderMap, indexMap, includeUses, false);
+
+ for (t = 0, tlen = tmpExpanded.length; t < tlen; t++) {
+ tUrl = tmpExpanded[t];
+
+ if (!expandMap[tUrl]) {
+ expandMap[tUrl] = true;
+ expanded.push(tUrl);
+ }
+ }
+ }
+
+ if (expanded.length === 0) {
+ expanded = urls;
+ }
+
+ return expanded;
+ },
+
+ expandLoadOrder: function () {
+ var me = this,
+ urls = me.urls,
+ expanded;
+
+ if (!me.expanded) {
+ expanded = this.expandUrls(urls, true);
+ me.expanded = true;
+ } else {
+ expanded = urls;
+ }
+
+ me.urls = expanded;
+
+ // if we added some urls to the request to honor the indicated
+ // load order, the request needs to be sequential
+ if (urls.length != expanded.length) {
+ me.sequential = true;
+ }
+
+ return me;
+ },
+
+ getUrls: function () {
+ this.expandLoadOrder();
+ return this.urls;
+ },
+
+ prepareUrl: function(url) {
+ if(this.prependBaseUrl) {
+ return Boot.baseUrl + url;
+ }
+ return url;
+ },
+
+ getEntries: function () {
+ var me = this,
+ entries = me.entries,
+ loadOrderMap, item, i, entry, urls, url;
+
+ if (!entries) {
+ entries = [];
+ urls = me.getUrls();
+
+ // If we have loadOrder array then the map will be expanded by now
+ if (me.loadOrder) {
+ loadOrderMap = me.loadOrderMap;
+ }
+
+ for (i = 0; i < urls.length; i++) {
+ url = me.prepareUrl(urls[i]);
+
+ if (loadOrderMap) {
+ item = loadOrderMap[url];
+ }
+
+ entry = Boot.getEntry(url, {
+ buster: me.buster,
+ charset: me.charset
+ }, item && item.canonicalPath);
+
+ entry.requests.push(me);
+ entries.push(entry);
+ }
+
+ me.entries = entries;
+ }
+
+ return entries;
+ },
+
+ loadEntries: function(sync) {
+ var me = this,
+ entries = me.getEntries(),
+ len = entries.length,
+ start = me.loadStart || 0,
+ continueLoad, entries, entry, i;
+
+ if(sync !== undefined) {
+ me.sync = sync;
+ }
+
+ me.loaded = me.loaded || 0;
+ me.loading = me.loading || len;
+
+ for(i = start; i < len; i++) {
+ entry = entries[i];
+ if(!entry.loaded) {
+ continueLoad = entries[i].load(me.sync);
+ } else {
+ continueLoad = true;
+ }
+ if(!continueLoad) {
+ me.loadStart = i;
+ entry.onDone(function(){
+ me.loadEntries(sync);
+ });
+ break;
+ }
+ }
+ me.processLoadedEntries();
+ },
+
+ processLoadedEntries: function () {
+ var me = this,
+ entries = me.getEntries(),
+ len = entries.length,
+ start = me.startIndex || 0,
+ i, entry;
+
+ if (!me.done) {
+ for (i = start; i < len; i++) {
+ entry = entries[i];
+
+ if (!entry.loaded) {
+ me.startIndex = i;
+ return;
+ }
+
+ if (!entry.evaluated) {
+ entry.evaluate();
+ }
+
+ if (entry.error) {
+ me.error = true;
+ }
+ }
+ me.notify();
+ }
+ },
+
+ notify: function () {
+ var me = this;
+ if (!me.done) {
+ var error = me.error,
+ fn = me[error ? 'failure' : 'success'],
+ delay = ('delay' in me)
+ ? me.delay
+ : (error ? 1 : Boot.config.chainDelay),
+ scope = me.scope || me;
+ me.done = true;
+ if (fn) {
+ if (delay === 0 || delay > 0) {
+ // Free the stack (and defer the next script)
+ setTimeout(function () {
+ fn.call(scope, me);
+ }, delay);
+ } else {
+ fn.call(scope, me);
+ }
+ }
+ me.fireListeners();
+ Boot.requestComplete(me);
+ }
+ },
+
+ onDone: function(listener) {
+ var me = this,
+ listeners = me.listeners || (me.listeners = []);
+ if(me.done) {
+ listener(me);
+ } else {
+ listeners.push(listener);
+ }
+ },
+
+ fireListeners: function() {
+ var listeners = this.listeners,
+ listener;
+ if(listeners) {
+// _debug("firing request listeners");
+ while((listener = listeners.shift())) {
+ listener(this);
+ }
+ }
+ }
+ };
+
+ function Entry(cfg) {
+ //The Entry class is a token to manage the load and evaluation
+ //state of a particular url. It is used to notify all Requests
+ //interested in this url that the content is available.
+
+ if(cfg.$isEntry) {
+ return cfg;
+ }
+
+// _debug("creating entry for " + cfg.url);
+
+ var charset = cfg.charset || Boot.config.charset,
+ manifest = Ext.manifest,
+ loader = manifest && manifest.loader,
+ cache = (cfg.cache !== undefined) ? cfg.cache : (loader && loader.cache),
+ buster, busterParam;
+
+ if (Boot.config.disableCaching) {
+ if (cache === undefined) {
+ cache = !Boot.config.disableCaching;
+ }
+
+ if (cache === false) {
+ buster = +new Date();
+ } else if (cache !== true) {
+ buster = cache;
+ }
+
+ if (buster) {
+ busterParam = (loader && loader.cacheParam) || Boot.config.disableCachingParam;
+ buster = busterParam + "=" + buster;
+ }
+ }
+
+ _apply(this, cfg);
+
+ this.charset = charset;
+ this.buster = buster;
+ this.requests = [];
+ };
+
+ Entry.prototype = {
+ $isEntry: true,
+ done: false,
+ evaluated: false,
+ loaded: false,
+
+ isCrossDomain: function() {
+ var me = this;
+ if(me.crossDomain === undefined) {
+// _debug("checking " + me.getLoadUrl() + " for prefix " + Boot.origin);
+ me.crossDomain = (me.getLoadUrl().indexOf(Boot.origin) !== 0);
+ }
+ return me.crossDomain;
+ },
+
+ isCss: function () {
+ var me = this;
+ if (me.css === undefined) {
+ if (me.url) {
+ var assetConfig = Boot.assetConfig[me.url];
+ me.css = assetConfig ? assetConfig.type === "css" : cssRe.test(me.url);
+ } else {
+ me.css = false;
+ }
+ }
+ return this.css;
+ },
+
+ getElement: function (tag) {
+ var me = this,
+ el = me.el;
+ if (!el) {
+// _debug("creating element for " + me.url);
+ if (me.isCss()) {
+ tag = tag || "link";
+ el = doc.createElement(tag);
+ if(tag == "link") {
+ el.rel = 'stylesheet';
+ me.prop = 'href';
+ } else {
+ me.prop="textContent";
+ }
+ el.type = "text/css";
+ } else {
+ tag = tag || "script";
+ el = doc.createElement(tag);
+ el.type = 'text/javascript';
+ me.prop = 'src';
+
+ if (me.charset) {
+ el.charset = me.charset;
+ }
+
+ if (Boot.hasAsync) {
+ el.async = false;
+ }
+ }
+ me.el = el;
+ }
+ return el;
+ },
+
+ getLoadUrl: function () {
+ var me = this,
+ url;
+
+ url = me.canonicalPath ? me.url : Boot.canonicalUrl(me.url);
+
+ if (!me.loadUrl) {
+ me.loadUrl = !!me.buster
+ ? (url + (url.indexOf('?') === -1 ? '?' : '&') + me.buster)
+ : url;
+ }
+ return me.loadUrl;
+ },
+
+ fetch: function (req) {
+ var url = this.getLoadUrl(),
+ async = !!req.async,
+ complete = req.complete;
+
+ Boot.fetch(url, complete, this, async);
+ },
+
+ onContentLoaded: function (response) {
+ var me = this,
+ status = response.status,
+ content = response.content,
+ exception = response.exception,
+ url = this.getLoadUrl();
+ me.loaded = true;
+ if ((exception || status === 0) && !_environment.phantom) {
+ me.error =
+ ("Failed loading synchronously via XHR: '" + url +
+ "'. It's likely that the file is either being loaded from a " +
+ "different domain or from the local file system where cross " +
+ "origin requests are not allowed for security reasons. Try " +
+ "asynchronous loading instead.") ||
+ true;
+ me.evaluated = true;
+ }
+ else if ((status >= 200 && status < 300) || status === 304
+ || _environment.phantom
+ || (status === 0 && content.length > 0)
+ ) {
+ me.content = content;
+ }
+ else {
+ me.error =
+ ("Failed loading synchronously via XHR: '" + url +
+ "'. Please verify that the file exists. XHR status code: " +
+ status) ||
+ true;
+ me.evaluated = true;
+ }
+ },
+
+ createLoadElement: function(callback) {
+ var me = this,
+ el = me.getElement();
+
+ me.preserve = true;
+
+ el.onerror = function() {
+ me.error = true;
+
+ if (callback) {
+ callback();
+ callback = null;
+ }
+ };
+
+ if (Boot.isIE10m) {
+ el.onreadystatechange = function() {
+ if (this.readyState === 'loaded' || this.readyState === 'complete') {
+ if (callback) {
+ callback();
+ callback = this.onreadystatechange = this.onerror = null;
+ }
+ }
+ };
+ }
+ else {
+ el.onload = function() {
+ callback();
+ callback = this.onload = this.onerror = null;
+ };
+ }
+
+ // IE starts loading here
+ el[me.prop] = me.getLoadUrl();
+ },
+
+ onLoadElementReady: function() {
+ Boot.getHead().appendChild(this.getElement());
+ this.evaluated = true;
+ },
+
+ inject: function (content, asset) {
+// _debug("injecting content for " + this.url);
+ var me = this,
+ head = Boot.getHead(),
+ url = me.url,
+ key = me.key,
+ base, el, ieMode, basePath;
+
+ if (me.isCss()) {
+ me.preserve = true;
+ basePath = key.substring(0, key.lastIndexOf("/") + 1);
+ base = doc.createElement('base');
+ base.href = basePath;
+ if(head.firstChild) {
+ head.insertBefore(base, head.firstChild);
+ } else {
+ head.appendChild(base);
+ }
+ // reset the href attribute to cuase IE to pick up the change
+ base.href = base.href;
+
+ if (url) {
+ content += "\n/*# sourceURL=" + key + " */";
+ }
+
+ // create element after setting base
+ el = me.getElement("style");
+
+ ieMode = ('styleSheet' in el);
+
+ head.appendChild(base);
+ if(ieMode) {
+ head.appendChild(el);
+ el.styleSheet.cssText = content;
+ } else {
+ el.textContent = content;
+ head.appendChild(el);
+ }
+ head.removeChild(base);
+
+ } else {
+ // Debugger friendly, file names are still shown even though they're
+ // eval'ed code. Breakpoints work on both Firebug and Chrome's Web
+ // Inspector.
+ if (url) {
+ content += "\n//# sourceURL=" + key;
+ }
+ Ext.globalEval(content);
+ }
+ return me;
+ },
+
+ loadCrossDomain: function() {
+ var me = this,
+ complete = function(){
+ me.el.onerror = me.el.onload = emptyFn;
+ me.el = null;
+ me.loaded = me.evaluated = me.done = true;
+ me.notifyRequests();
+ };
+ me.createLoadElement(function(){
+ complete();
+ });
+ me.evaluateLoadElement();
+ // at this point, we need sequential evaluation,
+ // which means we can't advance the load until
+ // this entry has fully completed
+ return false;
+ },
+
+ loadElement: function() {
+ var me = this,
+ complete = function(){
+ me.el.onerror = me.el.onload = emptyFn;
+ me.el = null;
+ me.loaded = me.evaluated = me.done = true;
+ me.notifyRequests();
+ };
+ me.createLoadElement(function(){
+ complete();
+ });
+ me.evaluateLoadElement();
+ return true;
+ },
+
+ loadSync: function() {
+ var me = this;
+ me.fetch({
+ async: false,
+ complete: function (response) {
+ me.onContentLoaded(response);
+ }
+ });
+ me.evaluate();
+ me.notifyRequests();
+ },
+
+ load: function (sync) {
+ var me = this;
+ if (!me.loaded) {
+ if(me.loading) {
+ // if we're calling back through load and we're loading but haven't
+ // yet loaded, then we should be in a sequential, cross domain
+ // load scenario which means we can't continue the load on the
+ // request until this entry has fully evaluated, which will mean
+ // loaded = evaluated = done = true in one step. For css files, this
+ // will happen immediately upon element creation / insertion,
+ // but