From 5894cac355206833f02cfe41f40d9a56d1aac776 Mon Sep 17 00:00:00 2001 From: Yanick Minder <79108296+kcinay055679@users.noreply.github.com> Date: Thu, 3 Oct 2024 13:17:25 +0200 Subject: [PATCH] Feature/refactor formatter (#111) * refactor formatter * add html files to spotless plugin * run formatter * update workflow and git hook * update pretterrc * remove old formatter * Apply formatter * Add prettier ignore to doctype tags to stop formatting * Remove comments * Format code * Bring back upper case doctypes and add prettier ignore to them * Add missing attributes to pages * Format code and add missing attributs after rebase --- .../workflows/validate-formatting-action.yml | 2 +- .prettierrc | 8 +++ pom.xml | 44 +++++++++---- pre-commit | 2 +- .../eft/ExamFeedbackToolApplication.java | 3 +- .../puzzle/eft/controller/ExamController.java | 9 ++- .../eft/controller/ExceptionController.java | 6 +- .../puzzle/eft/controller/SiteController.java | 8 ++- .../java/ch/puzzle/eft/model/ExamModel.java | 4 +- .../ch/puzzle/eft/service/ExamService.java | 17 ++--- .../puzzle/eft/service/ValidationService.java | 4 +- .../static/styles/cookie-consent-popup.css | 6 +- .../static/styles/custom_bootstrap.css | 57 +++++++++++----- src/main/resources/static/styles/header.css | 2 +- src/main/resources/static/styles/search.css | 2 +- src/main/resources/static/styles/styles.css | 8 +-- src/main/resources/templates/error.html | 28 +++++--- .../fragments/cookie-consent-popup.html | 38 +++++++---- .../templates/fragments/exam-file.html | 5 +- .../fragments/exam-number-input.html | 37 +++++++++-- .../resources/templates/fragments/footer.html | 30 +++++++-- .../resources/templates/fragments/header.html | 19 ++++-- .../fragments/internal-server-error.html | 12 ++-- .../templates/fragments/not-found-error.html | 12 ++-- src/main/resources/templates/index.html | 17 +++-- src/main/resources/templates/layout.html | 65 +++++++++++-------- src/main/resources/templates/search.html | 47 ++++++++------ .../eft/ExamFeedbackToolApplicationTests.java | 1 + .../ExamFeedbackToolArchitectureTest.java | 9 +-- .../eft/controller/ExamControllerTest.java | 9 +-- .../controller/ExceptionControllerTest.java | 6 +- .../eft/controller/SiteControllerTest.java | 8 ++- .../puzzle/eft/service/ExamServiceTest.java | 19 +++--- 33 files changed, 363 insertions(+), 181 deletions(-) create mode 100644 .prettierrc diff --git a/.github/workflows/validate-formatting-action.yml b/.github/workflows/validate-formatting-action.yml index 77034e0cf..6bba98fd9 100644 --- a/.github/workflows/validate-formatting-action.yml +++ b/.github/workflows/validate-formatting-action.yml @@ -13,4 +13,4 @@ jobs: java-version: '21' distribution: 'oracle' - name: Validate that the code is formatted correctly - run: mvn formatter:validate \ No newline at end of file + run: mvn spotless:check \ No newline at end of file diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 000000000..11b963b0c --- /dev/null +++ b/.prettierrc @@ -0,0 +1,8 @@ +{ + "tabWidth": 4, + "useTabs": false, + "printWidth": 80, + "htmlWhitespaceSensitivity": "ignore", + "bracketSameLine": true, + "endOfLine": "lf" +} \ No newline at end of file diff --git a/pom.xml b/pom.xml index ae834799f..7d02e46ff 100644 --- a/pom.xml +++ b/pom.xml @@ -195,23 +195,45 @@ - net.revelc.code.formatter - formatter-maven-plugin - 2.24.1 - - 21 - 21 - 21 - LF - ${project.basedir}/src/main/resources/formatting.xml - + com.diffplug.spotless + spotless-maven-plugin + 2.40.0 - format + apply + + + + + src/main/resources/**/*.css + src/main/resources/**/*.html + + + src/main/resources/static/styles/bootstrap.min.css + + + 3.3.3 + ${project.basedir}/.prettierrc + + + + + + 4.26 + ${project.basedir}/src/main/resources/formatting.xml + + + + java|javax,ch.puzzle,org,com,com.diffplug,,\#com.diffplug,\# + true + + + + org.codehaus.mojo diff --git a/pre-commit b/pre-commit index 2e134e64b..1ab000ef0 100755 --- a/pre-commit +++ b/pre-commit @@ -1,5 +1,5 @@ #!/bin/sh addedFiles=$(git diff --cached --name-only --diff-filter=d) -mvn formatter:format +mvn spotless:apply git add $addedFiles \ No newline at end of file diff --git a/src/main/java/ch/puzzle/eft/ExamFeedbackToolApplication.java b/src/main/java/ch/puzzle/eft/ExamFeedbackToolApplication.java index 4be8201c6..5b43d190e 100644 --- a/src/main/java/ch/puzzle/eft/ExamFeedbackToolApplication.java +++ b/src/main/java/ch/puzzle/eft/ExamFeedbackToolApplication.java @@ -1,10 +1,11 @@ package ch.puzzle.eft; -import nz.net.ultraq.thymeleaf.layoutdialect.LayoutDialect; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Bean; +import nz.net.ultraq.thymeleaf.layoutdialect.LayoutDialect; + @SpringBootApplication public class ExamFeedbackToolApplication { diff --git a/src/main/java/ch/puzzle/eft/controller/ExamController.java b/src/main/java/ch/puzzle/eft/controller/ExamController.java index 5f45dacdb..29d8852f5 100644 --- a/src/main/java/ch/puzzle/eft/controller/ExamController.java +++ b/src/main/java/ch/puzzle/eft/controller/ExamController.java @@ -1,16 +1,15 @@ package ch.puzzle.eft.controller; +import java.io.ByteArrayOutputStream; +import java.io.File; + import ch.puzzle.eft.service.ExamService; + import org.springframework.core.io.FileSystemResource; import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; -import org.springframework.web.server.ResponseStatusException; - -import java.io.ByteArrayOutputStream; -import java.io.File; @RestController @RequestMapping("/exams") diff --git a/src/main/java/ch/puzzle/eft/controller/ExceptionController.java b/src/main/java/ch/puzzle/eft/controller/ExceptionController.java index 441a82cfa..8163d1363 100644 --- a/src/main/java/ch/puzzle/eft/controller/ExceptionController.java +++ b/src/main/java/ch/puzzle/eft/controller/ExceptionController.java @@ -2,8 +2,7 @@ import ch.puzzle.eft.model.ErrorModel; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpSession; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.web.servlet.error.ErrorController; @@ -14,6 +13,9 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.servlet.resource.NoResourceFoundException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpSession; + @ControllerAdvice @Controller public class ExceptionController implements ErrorController { diff --git a/src/main/java/ch/puzzle/eft/controller/SiteController.java b/src/main/java/ch/puzzle/eft/controller/SiteController.java index 9bd6ef496..b18decac9 100644 --- a/src/main/java/ch/puzzle/eft/controller/SiteController.java +++ b/src/main/java/ch/puzzle/eft/controller/SiteController.java @@ -1,8 +1,11 @@ package ch.puzzle.eft.controller; +import java.time.Duration; +import java.util.Objects; + import ch.puzzle.eft.model.ExamNumberForm; import ch.puzzle.eft.service.ExamService; -import jakarta.validation.Valid; + import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseCookie; @@ -15,8 +18,7 @@ import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.server.ResponseStatusException; -import java.time.Duration; -import java.util.Objects; +import jakarta.validation.Valid; @Controller public class SiteController { diff --git a/src/main/java/ch/puzzle/eft/model/ExamModel.java b/src/main/java/ch/puzzle/eft/model/ExamModel.java index 00674846c..d47c6e46a 100644 --- a/src/main/java/ch/puzzle/eft/model/ExamModel.java +++ b/src/main/java/ch/puzzle/eft/model/ExamModel.java @@ -1,12 +1,12 @@ package ch.puzzle.eft.model; +import java.io.File; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.http.HttpStatus; import org.springframework.web.server.ResponseStatusException; -import java.io.File; - public class ExamModel { private final File file; private static final Logger logger = LoggerFactory.getLogger(ExamModel.class); diff --git a/src/main/java/ch/puzzle/eft/service/ExamService.java b/src/main/java/ch/puzzle/eft/service/ExamService.java index 365ef25b9..5889262b2 100644 --- a/src/main/java/ch/puzzle/eft/service/ExamService.java +++ b/src/main/java/ch/puzzle/eft/service/ExamService.java @@ -1,13 +1,5 @@ package ch.puzzle.eft.service; -import ch.puzzle.eft.model.ExamModel; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.core.env.Environment; -import org.springframework.http.HttpStatus; -import org.springframework.stereotype.Service; -import org.springframework.web.server.ResponseStatusException; - import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; @@ -17,6 +9,15 @@ import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; +import ch.puzzle.eft.model.ExamModel; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.core.env.Environment; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; +import org.springframework.web.server.ResponseStatusException; + @Service public class ExamService { private static final Logger logger = LoggerFactory.getLogger(ExamService.class); diff --git a/src/main/java/ch/puzzle/eft/service/ValidationService.java b/src/main/java/ch/puzzle/eft/service/ValidationService.java index f9caeeed9..2ffa7ecfc 100644 --- a/src/main/java/ch/puzzle/eft/service/ValidationService.java +++ b/src/main/java/ch/puzzle/eft/service/ValidationService.java @@ -1,10 +1,10 @@ package ch.puzzle.eft.service; -import org.springframework.stereotype.Service; - import java.util.regex.Matcher; import java.util.regex.Pattern; +import org.springframework.stereotype.Service; + @Service public class ValidationService { private static final Pattern EXAM_NUMBER_PATTERN = Pattern.compile("^\\d{5}$"); diff --git a/src/main/resources/static/styles/cookie-consent-popup.css b/src/main/resources/static/styles/cookie-consent-popup.css index d41f6ea11..6edd92dcd 100644 --- a/src/main/resources/static/styles/cookie-consent-popup.css +++ b/src/main/resources/static/styles/cookie-consent-popup.css @@ -1,9 +1,9 @@ .modal { background-color: rgba(0, 0, 0, 0.5); } -.modal-header{ +.modal-header { border-color: var(--primary-hex); } -.modal-footer{ +.modal-footer { border-color: var(--primary-hex); -} \ No newline at end of file +} diff --git a/src/main/resources/static/styles/custom_bootstrap.css b/src/main/resources/static/styles/custom_bootstrap.css index e1d8a541f..26e4932ed 100644 --- a/src/main/resources/static/styles/custom_bootstrap.css +++ b/src/main/resources/static/styles/custom_bootstrap.css @@ -1,16 +1,15 @@ :root { --primary-rgb: 229, 0, 125; - --primary-hex: rgba(var(--bs-primary-rgb),1); + --primary-hex: rgba(var(--bs-primary-rgb), 1); /*bootstrap*/ --bs-primary-rgb: var(--primary-rgb); - --bs-secondary-rgb: 0, 0,0; + --bs-secondary-rgb: 0, 0, 0; - - --bs-primary-link-hover-color-rgb: 0,0,0; + --bs-primary-link-hover-color-rgb: 0, 0, 0; --bs-secondary-link-hover-color-rgb: var(--bs-primary-rgb); --button-primary-color: var(--primary-hex); - --button-primary-hover-color:rgb( 240, 38, 144); + --button-primary-hover-color: rgb(240, 38, 144); } .btn-outline-primary { @@ -48,19 +47,47 @@ /*Attention: The focus style must be defined before the hover style or it will break*/ .link-primary:focus { - color: RGBA(var(--bs-secondary-link-hover-color-rgb), var(--bs-link-opacity, 1)) !important; - -webkit-text-decoration-color: RGBA(var(--bs-secondary-link-hover-color-rgb), var(--bs-link-underline-opacity, 1)) !important; - text-decoration-color: RGBA(var(--bs-secondary-link-hover-color-rgb), var(--bs-link-underline-opacity, 1)) !important; + color: RGBA( + var(--bs-secondary-link-hover-color-rgb), + var(--bs-link-opacity, 1) + ) !important; + -webkit-text-decoration-color: RGBA( + var(--bs-secondary-link-hover-color-rgb), + var(--bs-link-underline-opacity, 1) + ) !important; + text-decoration-color: RGBA( + var(--bs-secondary-link-hover-color-rgb), + var(--bs-link-underline-opacity, 1) + ) !important; } -.link-secondary:focus, .link-primary:hover { - color: RGBA(var(--bs-primary-link-hover-color-rgb), var(--bs-link-opacity, 1)) !important; - -webkit-text-decoration-color: RGBA(var(--bs-primary-link-hover-color-rgb), var(--bs-link-underline-opacity, 1)) !important; - text-decoration-color: RGBA(var(--bs-primary-link-hover-color-rgb), var(--bs-link-underline-opacity, 1)) !important; +.link-secondary:focus, +.link-primary:hover { + color: RGBA( + var(--bs-primary-link-hover-color-rgb), + var(--bs-link-opacity, 1) + ) !important; + -webkit-text-decoration-color: RGBA( + var(--bs-primary-link-hover-color-rgb), + var(--bs-link-underline-opacity, 1) + ) !important; + text-decoration-color: RGBA( + var(--bs-primary-link-hover-color-rgb), + var(--bs-link-underline-opacity, 1) + ) !important; } .link-secondary:hover { - color: RGBA(var(--bs-secondary-link-hover-color-rgb), var(--bs-link-opacity, 1)) !important; - -webkit-text-decoration-color: RGBA(var(--bs-secondary-link-hover-color-rgb), var(--bs-link-underline-opacity, 1)) !important; - text-decoration-color: RGBA(var(--bs-secondary-link-hover-color-rgb), var(--bs-link-underline-opacity, 1)) !important; + color: RGBA( + var(--bs-secondary-link-hover-color-rgb), + var(--bs-link-opacity, 1) + ) !important; + -webkit-text-decoration-color: RGBA( + var(--bs-secondary-link-hover-color-rgb), + var(--bs-link-underline-opacity, 1) + ) !important; + text-decoration-color: RGBA( + var(--bs-secondary-link-hover-color-rgb), + var(--bs-link-underline-opacity, 1) + ) !important; } diff --git a/src/main/resources/static/styles/header.css b/src/main/resources/static/styles/header.css index d33e9a5fc..307ac9bc8 100644 --- a/src/main/resources/static/styles/header.css +++ b/src/main/resources/static/styles/header.css @@ -1,3 +1,3 @@ #logo { height: 70px; -} \ No newline at end of file +} diff --git a/src/main/resources/static/styles/search.css b/src/main/resources/static/styles/search.css index 3554483f1..0ec51c88d 100644 --- a/src/main/resources/static/styles/search.css +++ b/src/main/resources/static/styles/search.css @@ -1,3 +1,3 @@ .content { padding-bottom: 6rem; -} \ No newline at end of file +} diff --git a/src/main/resources/static/styles/styles.css b/src/main/resources/static/styles/styles.css index 6019a0ccb..007a85dd1 100644 --- a/src/main/resources/static/styles/styles.css +++ b/src/main/resources/static/styles/styles.css @@ -1,9 +1,9 @@ @font-face { - font-family: 'OpenSans'; + font-family: "OpenSans"; src: - local('OpenSans Regular'), - url('../fonts/Open_Sans/OpenSans-Regular.ttf') format('truetype'), - url('../fonts/Open_Sans/OpenSans-Regular.woff2') format('woff2'); + local("OpenSans Regular"), + url("../fonts/Open_Sans/OpenSans-Regular.ttf") format("truetype"), + url("../fonts/Open_Sans/OpenSans-Regular.woff2") format("woff2"); font-weight: normal; font-style: normal; } diff --git a/src/main/resources/templates/error.html b/src/main/resources/templates/error.html index c5b8a366f..8674b1884 100644 --- a/src/main/resources/templates/error.html +++ b/src/main/resources/templates/error.html @@ -1,11 +1,19 @@ + - - -
-
-
- Zurück zur Startseite -
- - \ No newline at end of file + + +
+
+
+ + Zurück zur Startseite + +
+ + diff --git a/src/main/resources/templates/fragments/cookie-consent-popup.html b/src/main/resources/templates/fragments/cookie-consent-popup.html index 22790cdaa..ae9af25ea 100644 --- a/src/main/resources/templates/fragments/cookie-consent-popup.html +++ b/src/main/resources/templates/fragments/cookie-consent-popup.html @@ -1,23 +1,39 @@ -