Skip to content

Commit 158c47d

Browse files
committed
Provide default GSP layout for Turbo Frame
1 parent 27dc3fb commit 158c47d

File tree

3 files changed

+27
-8
lines changed

3 files changed

+27
-8
lines changed
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<html>
2+
<head>
3+
<g:layoutHead/>
4+
</head>
5+
<body>
6+
<g:layoutBody/>
7+
</body>
8+
</html>

plugins/turbo/build.gradle

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ ext."signing.secretKeyRingFile" = project.hasProperty("signing.secretKeyRingFile
1010
ext.isReleaseVersion = !projectVersion.endsWith("SNAPSHOT")
1111

1212
ext {
13+
grailsVersion = '5.1.0'
1314
springBootVersion = '2.6.6'
1415
servletVersion = '4.0.1'
1516
}
@@ -22,6 +23,7 @@ apply plugin: "idea"
2223
apply plugin: "groovy"
2324
apply plugin: "org.graceframework.asset-pipeline"
2425
apply plugin: "org.graceframework.grace-plugin"
26+
apply plugin: "org.graceframework.grace-gsp"
2527
apply plugin: "maven-publish"
2628
apply plugin: "signing"
2729

@@ -33,7 +35,9 @@ dependencies {
3335
compileOnly "org.springframework.boot:spring-boot-autoconfigure:$springBootVersion"
3436
compileOnly "javax.servlet:javax.servlet-api:$servletVersion"
3537
compileOnly "org.graceframework:grace-core:$graceVersion"
36-
compileOnly "org.graceframework:grace-web-common:$graceVersion"
38+
compileOnly "org.grails:grails-web-common:$grailsVersion"
39+
compileOnly "org.grails:grails-web-gsp:$grailsVersion"
40+
compileOnly "org.grails:grails-web-sitemesh:$grailsVersion"
3741
}
3842

3943
tasks.withType(Sign) {

plugins/turbo/src/main/groovy/org/graceframework/plugins/turbo/TurboRequestFilter.java

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,7 @@
2323

2424
import org.springframework.web.filter.OncePerRequestFilter;
2525

26-
import grails.web.http.HttpHeaders;
27-
import grails.web.mime.MimeType;
26+
import org.grails.web.sitemesh.GrailsLayoutDecoratorMapper;
2827
import org.grails.web.util.GrailsApplicationAttributes;
2928

3029
/**
@@ -36,21 +35,29 @@
3635
*/
3736
public class TurboRequestFilter extends OncePerRequestFilter {
3837

38+
private static final String TURBO_FRAME_LAYOUT = "turbo/frame";
39+
3940
@Override
4041
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
4142
throws ServletException, IOException {
4243

43-
request.setAttribute(GrailsApplicationAttributes.CONTENT_FORMAT, TurboMimeType.TURBO_STREAM_FORMAT);
44-
request.setAttribute(GrailsApplicationAttributes.RESPONSE_FORMAT, TurboMimeType.TURBO_STREAM_FORMAT);
45-
request.setAttribute(GrailsApplicationAttributes.RESPONSE_MIME_TYPE, TurboMimeType.TURBO_STREAM);
46-
response.setContentType(TurboMimeType.TURBO_STREAM.getName());
44+
if (HttpServletRequestExtension.isTurboStream(request)) {
45+
request.setAttribute(GrailsApplicationAttributes.CONTENT_FORMAT, TurboMimeType.TURBO_STREAM_FORMAT);
46+
request.setAttribute(GrailsApplicationAttributes.RESPONSE_FORMAT, TurboMimeType.TURBO_STREAM_FORMAT);
47+
request.setAttribute(GrailsApplicationAttributes.RESPONSE_MIME_TYPE, TurboMimeType.TURBO_STREAM);
48+
response.setContentType(TurboMimeType.TURBO_STREAM.getName());
49+
}
50+
51+
if (HttpServletRequestExtension.isTurboFrame(request)) {
52+
request.setAttribute(GrailsLayoutDecoratorMapper.LAYOUT_ATTRIBUTE, TURBO_FRAME_LAYOUT);
53+
}
4754

4855
filterChain.doFilter(request, response);
4956
}
5057

5158
@Override
5259
protected boolean shouldNotFilter(HttpServletRequest request) {
53-
return !HttpServletRequestExtension.isTurboStream(request);
60+
return !HttpServletRequestExtension.isTurboRequest(request);
5461
}
5562

5663
}

0 commit comments

Comments
 (0)