mirror of
https://gitee.com/dcren/initializr.git
synced 2025-11-09 02:45:00 +08:00
Add support for Google Analytics
If the `initializr.env.google-analytics-tracking-code` is specified with the tracking code to use, the web UI automatically integrates with Google Analytics. Closes gh-180
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2012-2015 the original author or authors.
|
* Copyright 2012-2016 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@@ -122,6 +122,11 @@ class InitializrConfiguration {
|
|||||||
*/
|
*/
|
||||||
String springBootMetadataUrl = 'https://spring.io/project_metadata/spring-boot'
|
String springBootMetadataUrl = 'https://spring.io/project_metadata/spring-boot'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tracking code for Google Analytics. Only enabled if a value is explicitly provided.
|
||||||
|
*/
|
||||||
|
String googleAnalyticsTrackingCode
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The application name to use if none could be generated.
|
* The application name to use if none could be generated.
|
||||||
*/
|
*/
|
||||||
@@ -184,6 +189,7 @@ class InitializrConfiguration {
|
|||||||
void merge(Env other) {
|
void merge(Env other) {
|
||||||
artifactRepository = other.artifactRepository
|
artifactRepository = other.artifactRepository
|
||||||
springBootMetadataUrl = other.springBootMetadataUrl
|
springBootMetadataUrl = other.springBootMetadataUrl
|
||||||
|
googleAnalyticsTrackingCode = other.googleAnalyticsTrackingCode
|
||||||
fallbackApplicationName = other.fallbackApplicationName
|
fallbackApplicationName = other.fallbackApplicationName
|
||||||
invalidApplicationNames = other.invalidApplicationNames
|
invalidApplicationNames = other.invalidApplicationNames
|
||||||
forceSsl = other.forceSsl
|
forceSsl = other.forceSsl
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2012-2015 the original author or authors.
|
* Copyright 2012-2016 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@@ -47,9 +47,11 @@ abstract class AbstractInitializrController {
|
|||||||
* Render the home page with the specified template.
|
* Render the home page with the specified template.
|
||||||
*/
|
*/
|
||||||
protected String renderHome(String templatePath) {
|
protected String renderHome(String templatePath) {
|
||||||
|
def metadata = metadataProvider.get()
|
||||||
|
|
||||||
def model = [:]
|
def model = [:]
|
||||||
model['serviceUrl'] = generateAppUrl()
|
model['serviceUrl'] = generateAppUrl()
|
||||||
metadataProvider.get().properties.each {
|
metadata.properties.each {
|
||||||
if (it.key.equals('types')) {
|
if (it.key.equals('types')) {
|
||||||
model['types'] = it.value.clone()
|
model['types'] = it.value.clone()
|
||||||
} else {
|
} else {
|
||||||
@@ -60,6 +62,9 @@ abstract class AbstractInitializrController {
|
|||||||
// Only keep project type
|
// Only keep project type
|
||||||
model['types'].content.removeAll { t -> !'project'.equals(t.tags['format']) }
|
model['types'].content.removeAll { t -> !'project'.equals(t.tags['format']) }
|
||||||
|
|
||||||
|
// Google analytics support
|
||||||
|
model['trackingCode'] = metadata.configuration.env.googleAnalyticsTrackingCode
|
||||||
|
|
||||||
template templatePath, model
|
template templatePath, model
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -126,6 +126,12 @@
|
|||||||
"sourceType": "io.spring.initializr.metadata.InitializrConfiguration$Env",
|
"sourceType": "io.spring.initializr.metadata.InitializrConfiguration$Env",
|
||||||
"defaultValue": true
|
"defaultValue": true
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "initializr.env.google-analytics-tracking-code",
|
||||||
|
"type": "java.lang.String",
|
||||||
|
"description": "Tracking code for Google Analytics.",
|
||||||
|
"sourceType": "io.spring.initializr.metadata.InitializrConfiguration$Env"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "initializr.env.invalid-application-names",
|
"name": "initializr.env.invalid-application-names",
|
||||||
"type": "java.util.List<java.lang.String>",
|
"type": "java.util.List<java.lang.String>",
|
||||||
|
|||||||
@@ -172,5 +172,14 @@
|
|||||||
<script src="/js/typeahead.bundle.min.js"></script>
|
<script src="/js/typeahead.bundle.min.js"></script>
|
||||||
<script src="/js/mousetrap.min.js"></script>
|
<script src="/js/mousetrap.min.js"></script>
|
||||||
<script src="/js/start.js"></script>
|
<script src="/js/start.js"></script>
|
||||||
|
<% if (trackingCode) { %>
|
||||||
|
<script>
|
||||||
|
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
|
||||||
|
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
|
||||||
|
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
|
||||||
|
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
|
||||||
|
ga('create', '${trackingCode}', 'auto');
|
||||||
|
ga('send', 'pageview');
|
||||||
|
</script><% } %>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2012-2015 the original author or authors.
|
* Copyright 2012-2016 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@@ -59,4 +59,10 @@ class MainControllerEnvIntegrationTests extends AbstractInitializrControllerInte
|
|||||||
.hasSpringBootStarterTest()
|
.hasSpringBootStarterTest()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void googleAnalytics() {
|
||||||
|
def body = htmlHome()
|
||||||
|
assertTrue 'google analytics should be enabled', body.contains("ga('create', 'UA-1234567-89', 'auto');")
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2012-2015 the original author or authors.
|
* Copyright 2012-2016 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@@ -440,6 +440,12 @@ class MainControllerIntegrationTests extends AbstractInitializrControllerIntegra
|
|||||||
assertNotNull(response.body)
|
assertNotNull(response.body)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void googleAnalyticsDisabledByDefault() {
|
||||||
|
def body = htmlHome()
|
||||||
|
assertFalse 'google analytics should be disabled', body.contains('GoogleAnalyticsObject')
|
||||||
|
}
|
||||||
|
|
||||||
private JSONObject getMetadataJson() {
|
private JSONObject getMetadataJson() {
|
||||||
getMetadataJson(null, null)
|
getMetadataJson(null, null)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
initializr:
|
initializr:
|
||||||
env:
|
env:
|
||||||
artifactRepository: https://repo.spring.io/lib-release
|
artifactRepository: https://repo.spring.io/lib-release
|
||||||
|
google-analytics-tracking-code: UA-1234567-89
|
||||||
forceSsl: false
|
forceSsl: false
|
||||||
fallbackApplicationName: FooBarApplication
|
fallbackApplicationName: FooBarApplication
|
||||||
invalidApplicationNames:
|
invalidApplicationNames:
|
||||||
|
|||||||
@@ -33,6 +33,7 @@
|
|||||||
"artifactRepository": "https://repo.spring.io/release/",
|
"artifactRepository": "https://repo.spring.io/release/",
|
||||||
"fallbackApplicationName": "Application",
|
"fallbackApplicationName": "Application",
|
||||||
"forceSsl": true,
|
"forceSsl": true,
|
||||||
|
"googleAnalyticsTrackingCode": null,
|
||||||
"invalidApplicationNames": [
|
"invalidApplicationNames": [
|
||||||
"SpringApplication",
|
"SpringApplication",
|
||||||
"SpringBootApplication"
|
"SpringBootApplication"
|
||||||
|
|||||||
Reference in New Issue
Block a user