├── src ├── main │ ├── webapp │ │ ├── resources │ │ │ ├── fonts │ │ │ │ ├── Roboto-Copyright.txt │ │ │ │ ├── roboto-v30-latin-300.eot │ │ │ │ ├── roboto-v30-latin-300.ttf │ │ │ │ ├── roboto-v30-latin-300.woff │ │ │ │ ├── roboto-v30-latin-300.woff2 │ │ │ │ ├── roboto-v30-latin-500.eot │ │ │ │ ├── roboto-v30-latin-500.ttf │ │ │ │ ├── roboto-v30-latin-500.woff │ │ │ │ ├── roboto-v30-latin-500.woff2 │ │ │ │ ├── roboto-v30-latin-700.eot │ │ │ │ ├── roboto-v30-latin-700.ttf │ │ │ │ ├── roboto-v30-latin-700.woff │ │ │ │ ├── roboto-v30-latin-700.woff2 │ │ │ │ ├── roboto-v30-latin-regular.eot │ │ │ │ ├── roboto-v30-latin-regular.ttf │ │ │ │ ├── roboto-mono-v22-latin-300.eot │ │ │ │ ├── roboto-mono-v22-latin-300.ttf │ │ │ │ ├── roboto-mono-v22-latin-300.woff │ │ │ │ ├── roboto-mono-v22-latin-300.woff2 │ │ │ │ ├── roboto-mono-v22-latin-500.eot │ │ │ │ ├── roboto-mono-v22-latin-500.ttf │ │ │ │ ├── roboto-mono-v22-latin-500.woff │ │ │ │ ├── roboto-mono-v22-latin-500.woff2 │ │ │ │ ├── roboto-mono-v22-latin-700.eot │ │ │ │ ├── roboto-mono-v22-latin-700.ttf │ │ │ │ ├── roboto-mono-v22-latin-700.woff │ │ │ │ ├── roboto-mono-v22-latin-700.woff2 │ │ │ │ ├── roboto-v30-latin-regular.woff │ │ │ │ ├── roboto-v30-latin-regular.woff2 │ │ │ │ ├── roboto-mono-v22-latin-regular.eot │ │ │ │ ├── roboto-mono-v22-latin-regular.ttf │ │ │ │ ├── roboto-mono-v22-latin-regular.woff │ │ │ │ ├── roboto-mono-v22-latin-regular.woff2 │ │ │ │ ├── Roboto-Mono-Copyright.txt │ │ │ │ ├── License.txt │ │ │ │ └── roboto-v30-latin-500.svg │ │ │ ├── images │ │ │ │ ├── skip_previous.svg │ │ │ │ ├── skip_next.svg │ │ │ │ ├── expand_less.svg │ │ │ │ ├── expand_more.svg │ │ │ │ ├── warning.svg │ │ │ │ ├── arrow_back.svg │ │ │ │ ├── arrow_forward.svg │ │ │ │ ├── folder.svg │ │ │ │ ├── delete.svg │ │ │ │ ├── remove_circle.svg │ │ │ │ ├── storage.svg │ │ │ │ ├── error.svg │ │ │ │ ├── file.svg │ │ │ │ ├── flag.svg │ │ │ │ ├── chart-areaspline.svg │ │ │ │ ├── computer.svg │ │ │ │ ├── check_circle.svg │ │ │ │ ├── insert_chart.svg │ │ │ │ ├── folder-move.svg │ │ │ │ ├── save.svg │ │ │ │ ├── domain.svg │ │ │ │ ├── pencil.svg │ │ │ │ ├── info_outline.svg │ │ │ │ ├── play_circle_outline.svg │ │ │ │ ├── feedback.svg │ │ │ │ ├── add_circle_outline.svg │ │ │ │ ├── compare.svg │ │ │ │ ├── build.svg │ │ │ │ ├── folder-remove.svg │ │ │ │ ├── power_settings_new.svg │ │ │ │ ├── computer_new.svg │ │ │ │ ├── history.svg │ │ │ │ ├── package-down.svg │ │ │ │ ├── refresh.svg │ │ │ │ ├── rss-box.svg │ │ │ │ ├── assignment.svg │ │ │ │ ├── lock.svg │ │ │ │ ├── play-pause.svg │ │ │ │ ├── autorenew.svg │ │ │ │ ├── weather-cloudy.svg │ │ │ │ ├── help_outline.svg │ │ │ │ ├── extension.svg │ │ │ │ ├── stop.svg │ │ │ │ ├── computer_offline.svg │ │ │ │ ├── server-network.svg │ │ │ │ ├── assignment_late.svg │ │ │ │ ├── pipe.svg │ │ │ │ ├── people.svg │ │ │ │ ├── replay.svg │ │ │ │ ├── content-copy.svg │ │ │ │ ├── file-multiple.svg │ │ │ │ ├── file-document.svg │ │ │ │ ├── file-plus.svg │ │ │ │ ├── timer-sand.svg │ │ │ │ ├── file-document-multiple.svg │ │ │ │ ├── file-table.svg │ │ │ │ ├── laptop-off.svg │ │ │ │ ├── comment-arrow-right.svg │ │ │ │ ├── git.svg │ │ │ │ ├── plus-network.svg │ │ │ │ ├── account-arrow-left.svg │ │ │ │ ├── clipboard-check.svg │ │ │ │ ├── bug_report.svg │ │ │ │ ├── tag-text.svg │ │ │ │ ├── weather-sunny.svg │ │ │ │ ├── clipboard-pulse.svg │ │ │ │ ├── restart.svg │ │ │ │ ├── weather-rainy.svg │ │ │ │ ├── devices.svg │ │ │ │ ├── harddisk.svg │ │ │ │ ├── settings.svg │ │ │ │ ├── weather-pouring.svg │ │ │ │ ├── weather-partlycloudy.svg │ │ │ │ ├── github-circle.svg │ │ │ │ ├── owl.svg │ │ │ │ ├── source-repository-multiple.svg │ │ │ │ ├── file-cog.svg │ │ │ │ ├── fingerprint.svg │ │ │ │ └── docker.svg │ │ │ └── less │ │ │ │ ├── light-theme.less │ │ │ │ └── core-theme.less │ │ ├── theme-grey.css │ │ ├── theme-lime.css │ │ ├── theme-red.css │ │ ├── theme-amber.css │ │ ├── theme-green.css │ │ ├── theme-indigo.css │ │ ├── theme-purple.css │ │ ├── theme-yellow.css │ │ ├── theme-light-blue.css │ │ └── material-theme.css │ ├── config │ │ ├── wro.properties │ │ └── wro.xml │ ├── resources │ │ └── index.jelly │ └── java │ │ └── io │ │ └── jenkins │ │ └── plugins │ │ └── materialtheme │ │ ├── AbstractMaterialThemeDescriptor.java │ │ ├── AbstractMaterialTheme.java │ │ ├── MaterialGreyThemeManagerFactory.java │ │ ├── MaterialIndigoThemeManagerFactory.java │ │ ├── MaterialLightBlueThemeManagerFactory.java │ │ ├── MaterialRedThemeManagerFactory.java │ │ ├── MaterialLimeThemeManagerFactory.java │ │ ├── MaterialAmberThemeManagerFactory.java │ │ ├── MaterialGreenThemeManagerFactory.java │ │ ├── MaterialPurpleThemeManagerFactory.java │ │ ├── MaterialYellowThemeManagerFactory.java │ │ └── MaterialThemeRootAction.java └── test │ ├── resources │ └── io │ │ └── jenkins │ │ └── plugins │ │ └── materialtheme │ │ └── jcasc │ │ ├── materialred │ │ ├── ConfigurationAsCodeExport.yml │ │ └── ConfigurationAsCode.yml │ │ ├── materialamber │ │ ├── ConfigurationAsCodeExport.yml │ │ └── ConfigurationAsCode.yml │ │ ├── materialgreen │ │ ├── ConfigurationAsCodeExport.yml │ │ └── ConfigurationAsCode.yml │ │ ├── materialgrey │ │ ├── ConfigurationAsCodeExport.yml │ │ └── ConfigurationAsCode.yml │ │ ├── materiallime │ │ ├── ConfigurationAsCodeExport.yml │ │ └── ConfigurationAsCode.yml │ │ ├── materialindigo │ │ ├── ConfigurationAsCodeExport.yml │ │ └── ConfigurationAsCode.yml │ │ ├── materialpurple │ │ ├── ConfigurationAsCodeExport.yml │ │ └── ConfigurationAsCode.yml │ │ ├── materialyellow │ │ ├── ConfigurationAsCodeExport.yml │ │ └── ConfigurationAsCode.yml │ │ └── materiallightblue │ │ ├── ConfigurationAsCodeExport.yml │ │ └── ConfigurationAsCode.yml │ └── java │ └── io │ └── jenkins │ └── plugins │ └── materialtheme │ └── jcasc │ ├── materialred │ └── MaterialRedThemeJcascTest.java │ ├── materialgrey │ └── MaterialGreyThemeJcascTest.java │ ├── materiallime │ └── MaterialLimeThemeJcascTest.java │ ├── materialamber │ └── MaterialAmberThemeJcascTest.java │ ├── materialgreen │ └── MaterialGreenThemeJcascTest.java │ ├── materialindigo │ └── MaterialIndigoThemeJcascTest.java │ ├── materialpurple │ └── MaterialPurpleThemeJcascTest.java │ ├── materialyellow │ └── MaterialYellowThemeJcascTest.java │ └── materiallightblue │ └── MaterialLightBlueThemeJcascTest.java ├── .mvn ├── maven.config └── extensions.xml ├── .gitignore ├── screenshots ├── red_main_large.png ├── red_main_small.png ├── grey_main_large.png ├── grey_main_small.png ├── indigo_main_large.png ├── indigo_main_small.png ├── light_blue_main_large.png └── light_blue_main_small.png ├── .github ├── dependabot.yml └── workflows │ ├── cd.yml │ └── jenkins-security-scan.yml ├── Jenkinsfile ├── License ├── README.md └── pom.xml /src/main/webapp/resources/fonts/Roboto-Copyright.txt: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.mvn/maven.config: -------------------------------------------------------------------------------- 1 | -Pconsume-incrementals 2 | -Pmight-produce-incrementals 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | target/ 2 | work/ 3 | *.iml 4 | .idea/ 5 | light-theme.css 6 | .DS_Store 7 | -------------------------------------------------------------------------------- /src/main/config/wro.properties: -------------------------------------------------------------------------------- 1 | preProcessors=cssImport 2 | postProcessors=lessCss 3 | debug=true 4 | -------------------------------------------------------------------------------- /src/main/resources/index.jelly: -------------------------------------------------------------------------------- 1 | 2 |
3 | Material Theme plugin. 4 |
5 | -------------------------------------------------------------------------------- /screenshots/red_main_large.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkinsci/material-theme-plugin/HEAD/screenshots/red_main_large.png -------------------------------------------------------------------------------- /screenshots/red_main_small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkinsci/material-theme-plugin/HEAD/screenshots/red_main_small.png -------------------------------------------------------------------------------- /screenshots/grey_main_large.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkinsci/material-theme-plugin/HEAD/screenshots/grey_main_large.png -------------------------------------------------------------------------------- /screenshots/grey_main_small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkinsci/material-theme-plugin/HEAD/screenshots/grey_main_small.png -------------------------------------------------------------------------------- /screenshots/indigo_main_large.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkinsci/material-theme-plugin/HEAD/screenshots/indigo_main_large.png -------------------------------------------------------------------------------- /screenshots/indigo_main_small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkinsci/material-theme-plugin/HEAD/screenshots/indigo_main_small.png -------------------------------------------------------------------------------- /screenshots/light_blue_main_large.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkinsci/material-theme-plugin/HEAD/screenshots/light_blue_main_large.png -------------------------------------------------------------------------------- /screenshots/light_blue_main_small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkinsci/material-theme-plugin/HEAD/screenshots/light_blue_main_small.png -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: "maven" 4 | directory: "/" 5 | schedule: 6 | interval: "weekly" -------------------------------------------------------------------------------- /src/test/resources/io/jenkins/plugins/materialtheme/jcasc/materialred/ConfigurationAsCodeExport.yml: -------------------------------------------------------------------------------- 1 | disableUserThemes: true 2 | theme: "material-red" 3 | -------------------------------------------------------------------------------- /src/test/resources/io/jenkins/plugins/materialtheme/jcasc/materialamber/ConfigurationAsCodeExport.yml: -------------------------------------------------------------------------------- 1 | disableUserThemes: true 2 | theme: "material-amber" 3 | -------------------------------------------------------------------------------- /src/test/resources/io/jenkins/plugins/materialtheme/jcasc/materialgreen/ConfigurationAsCodeExport.yml: -------------------------------------------------------------------------------- 1 | disableUserThemes: true 2 | theme: "material-green" 3 | -------------------------------------------------------------------------------- /src/test/resources/io/jenkins/plugins/materialtheme/jcasc/materialgrey/ConfigurationAsCodeExport.yml: -------------------------------------------------------------------------------- 1 | disableUserThemes: true 2 | theme: "material-grey" 3 | -------------------------------------------------------------------------------- /src/test/resources/io/jenkins/plugins/materialtheme/jcasc/materiallime/ConfigurationAsCodeExport.yml: -------------------------------------------------------------------------------- 1 | disableUserThemes: true 2 | theme: "material-lime" 3 | -------------------------------------------------------------------------------- /src/test/resources/io/jenkins/plugins/materialtheme/jcasc/materialindigo/ConfigurationAsCodeExport.yml: -------------------------------------------------------------------------------- 1 | disableUserThemes: true 2 | theme: "material-indigo" 3 | -------------------------------------------------------------------------------- /src/test/resources/io/jenkins/plugins/materialtheme/jcasc/materialpurple/ConfigurationAsCodeExport.yml: -------------------------------------------------------------------------------- 1 | disableUserThemes: true 2 | theme: "material-purple" 3 | -------------------------------------------------------------------------------- /src/test/resources/io/jenkins/plugins/materialtheme/jcasc/materialyellow/ConfigurationAsCodeExport.yml: -------------------------------------------------------------------------------- 1 | disableUserThemes: true 2 | theme: "material-yellow" 3 | -------------------------------------------------------------------------------- /src/test/resources/io/jenkins/plugins/materialtheme/jcasc/materiallightblue/ConfigurationAsCodeExport.yml: -------------------------------------------------------------------------------- 1 | disableUserThemes: true 2 | theme: "material-light-blue" 3 | -------------------------------------------------------------------------------- /src/main/webapp/resources/fonts/roboto-v30-latin-300.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkinsci/material-theme-plugin/HEAD/src/main/webapp/resources/fonts/roboto-v30-latin-300.eot -------------------------------------------------------------------------------- /src/main/webapp/resources/fonts/roboto-v30-latin-300.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkinsci/material-theme-plugin/HEAD/src/main/webapp/resources/fonts/roboto-v30-latin-300.ttf -------------------------------------------------------------------------------- /src/main/webapp/resources/fonts/roboto-v30-latin-300.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkinsci/material-theme-plugin/HEAD/src/main/webapp/resources/fonts/roboto-v30-latin-300.woff -------------------------------------------------------------------------------- /src/main/webapp/resources/fonts/roboto-v30-latin-300.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkinsci/material-theme-plugin/HEAD/src/main/webapp/resources/fonts/roboto-v30-latin-300.woff2 -------------------------------------------------------------------------------- /src/main/webapp/resources/fonts/roboto-v30-latin-500.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkinsci/material-theme-plugin/HEAD/src/main/webapp/resources/fonts/roboto-v30-latin-500.eot -------------------------------------------------------------------------------- /src/main/webapp/resources/fonts/roboto-v30-latin-500.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkinsci/material-theme-plugin/HEAD/src/main/webapp/resources/fonts/roboto-v30-latin-500.ttf -------------------------------------------------------------------------------- /src/main/webapp/resources/fonts/roboto-v30-latin-500.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkinsci/material-theme-plugin/HEAD/src/main/webapp/resources/fonts/roboto-v30-latin-500.woff -------------------------------------------------------------------------------- /src/main/webapp/resources/fonts/roboto-v30-latin-500.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkinsci/material-theme-plugin/HEAD/src/main/webapp/resources/fonts/roboto-v30-latin-500.woff2 -------------------------------------------------------------------------------- /src/main/webapp/resources/fonts/roboto-v30-latin-700.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkinsci/material-theme-plugin/HEAD/src/main/webapp/resources/fonts/roboto-v30-latin-700.eot -------------------------------------------------------------------------------- /src/main/webapp/resources/fonts/roboto-v30-latin-700.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkinsci/material-theme-plugin/HEAD/src/main/webapp/resources/fonts/roboto-v30-latin-700.ttf -------------------------------------------------------------------------------- /src/main/webapp/resources/fonts/roboto-v30-latin-700.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkinsci/material-theme-plugin/HEAD/src/main/webapp/resources/fonts/roboto-v30-latin-700.woff -------------------------------------------------------------------------------- /src/main/webapp/resources/fonts/roboto-v30-latin-700.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkinsci/material-theme-plugin/HEAD/src/main/webapp/resources/fonts/roboto-v30-latin-700.woff2 -------------------------------------------------------------------------------- /src/main/webapp/resources/fonts/roboto-v30-latin-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkinsci/material-theme-plugin/HEAD/src/main/webapp/resources/fonts/roboto-v30-latin-regular.eot -------------------------------------------------------------------------------- /src/main/webapp/resources/fonts/roboto-v30-latin-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkinsci/material-theme-plugin/HEAD/src/main/webapp/resources/fonts/roboto-v30-latin-regular.ttf -------------------------------------------------------------------------------- /src/main/webapp/resources/fonts/roboto-mono-v22-latin-300.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkinsci/material-theme-plugin/HEAD/src/main/webapp/resources/fonts/roboto-mono-v22-latin-300.eot -------------------------------------------------------------------------------- /src/main/webapp/resources/fonts/roboto-mono-v22-latin-300.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkinsci/material-theme-plugin/HEAD/src/main/webapp/resources/fonts/roboto-mono-v22-latin-300.ttf -------------------------------------------------------------------------------- /src/main/webapp/resources/fonts/roboto-mono-v22-latin-300.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkinsci/material-theme-plugin/HEAD/src/main/webapp/resources/fonts/roboto-mono-v22-latin-300.woff -------------------------------------------------------------------------------- /src/main/webapp/resources/fonts/roboto-mono-v22-latin-300.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkinsci/material-theme-plugin/HEAD/src/main/webapp/resources/fonts/roboto-mono-v22-latin-300.woff2 -------------------------------------------------------------------------------- /src/main/webapp/resources/fonts/roboto-mono-v22-latin-500.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkinsci/material-theme-plugin/HEAD/src/main/webapp/resources/fonts/roboto-mono-v22-latin-500.eot -------------------------------------------------------------------------------- /src/main/webapp/resources/fonts/roboto-mono-v22-latin-500.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkinsci/material-theme-plugin/HEAD/src/main/webapp/resources/fonts/roboto-mono-v22-latin-500.ttf -------------------------------------------------------------------------------- /src/main/webapp/resources/fonts/roboto-mono-v22-latin-500.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkinsci/material-theme-plugin/HEAD/src/main/webapp/resources/fonts/roboto-mono-v22-latin-500.woff -------------------------------------------------------------------------------- /src/main/webapp/resources/fonts/roboto-mono-v22-latin-500.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkinsci/material-theme-plugin/HEAD/src/main/webapp/resources/fonts/roboto-mono-v22-latin-500.woff2 -------------------------------------------------------------------------------- /src/main/webapp/resources/fonts/roboto-mono-v22-latin-700.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkinsci/material-theme-plugin/HEAD/src/main/webapp/resources/fonts/roboto-mono-v22-latin-700.eot -------------------------------------------------------------------------------- /src/main/webapp/resources/fonts/roboto-mono-v22-latin-700.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkinsci/material-theme-plugin/HEAD/src/main/webapp/resources/fonts/roboto-mono-v22-latin-700.ttf -------------------------------------------------------------------------------- /src/main/webapp/resources/fonts/roboto-mono-v22-latin-700.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkinsci/material-theme-plugin/HEAD/src/main/webapp/resources/fonts/roboto-mono-v22-latin-700.woff -------------------------------------------------------------------------------- /src/main/webapp/resources/fonts/roboto-mono-v22-latin-700.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkinsci/material-theme-plugin/HEAD/src/main/webapp/resources/fonts/roboto-mono-v22-latin-700.woff2 -------------------------------------------------------------------------------- /src/main/webapp/resources/fonts/roboto-v30-latin-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkinsci/material-theme-plugin/HEAD/src/main/webapp/resources/fonts/roboto-v30-latin-regular.woff -------------------------------------------------------------------------------- /src/main/webapp/resources/fonts/roboto-v30-latin-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkinsci/material-theme-plugin/HEAD/src/main/webapp/resources/fonts/roboto-v30-latin-regular.woff2 -------------------------------------------------------------------------------- /src/main/webapp/resources/images/skip_previous.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/webapp/theme-grey.css: -------------------------------------------------------------------------------- 1 | [data-theme=material-grey], .app-theme-picker__picker[data-theme=material-grey] { 2 | --material-primary: #9E9E9E; 3 | --material-secondary: #696666; 4 | } -------------------------------------------------------------------------------- /src/main/webapp/resources/fonts/roboto-mono-v22-latin-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkinsci/material-theme-plugin/HEAD/src/main/webapp/resources/fonts/roboto-mono-v22-latin-regular.eot -------------------------------------------------------------------------------- /src/main/webapp/resources/fonts/roboto-mono-v22-latin-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkinsci/material-theme-plugin/HEAD/src/main/webapp/resources/fonts/roboto-mono-v22-latin-regular.ttf -------------------------------------------------------------------------------- /src/main/webapp/resources/images/skip_next.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/webapp/theme-lime.css: -------------------------------------------------------------------------------- 1 | [data-theme=material-lime], .app-theme-picker__picker[data-theme=material-lime] { 2 | --material-primary: #AFB42B; 3 | --material-secondary: #D3D75B; 4 | } 5 | -------------------------------------------------------------------------------- /src/main/webapp/theme-red.css: -------------------------------------------------------------------------------- 1 | [data-theme=material-red], .app-theme-picker__picker[data-theme=material-red] { 2 | --material-primary: #f44336; 3 | --material-secondary: #e76056; 4 | } 5 | -------------------------------------------------------------------------------- /src/main/webapp/resources/fonts/roboto-mono-v22-latin-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkinsci/material-theme-plugin/HEAD/src/main/webapp/resources/fonts/roboto-mono-v22-latin-regular.woff -------------------------------------------------------------------------------- /src/main/webapp/resources/fonts/roboto-mono-v22-latin-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkinsci/material-theme-plugin/HEAD/src/main/webapp/resources/fonts/roboto-mono-v22-latin-regular.woff2 -------------------------------------------------------------------------------- /src/main/webapp/theme-amber.css: -------------------------------------------------------------------------------- 1 | [data-theme=material-amber], .app-theme-picker__picker[data-theme=material-amber] { 2 | --material-primary: #FF6F00; 3 | --material-secondary: #FF9A4D; 4 | } 5 | -------------------------------------------------------------------------------- /src/main/webapp/theme-green.css: -------------------------------------------------------------------------------- 1 | [data-theme=material-green], .app-theme-picker__picker[data-theme=material-green] { 2 | --material-primary: #43A047; 3 | --material-secondary: #65AA69; 4 | } 5 | -------------------------------------------------------------------------------- /src/test/resources/io/jenkins/plugins/materialtheme/jcasc/materialgrey/ConfigurationAsCode.yml: -------------------------------------------------------------------------------- 1 | --- 2 | unclassified: 3 | themeManager: 4 | disableUserThemes: true 5 | theme: "material-grey" 6 | -------------------------------------------------------------------------------- /src/test/resources/io/jenkins/plugins/materialtheme/jcasc/materiallime/ConfigurationAsCode.yml: -------------------------------------------------------------------------------- 1 | --- 2 | unclassified: 3 | themeManager: 4 | disableUserThemes: true 5 | theme: "material-lime" 6 | -------------------------------------------------------------------------------- /src/test/resources/io/jenkins/plugins/materialtheme/jcasc/materialred/ConfigurationAsCode.yml: -------------------------------------------------------------------------------- 1 | --- 2 | unclassified: 3 | themeManager: 4 | disableUserThemes: true 5 | theme: "material-red" 6 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/expand_less.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/expand_more.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/warning.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/webapp/theme-indigo.css: -------------------------------------------------------------------------------- 1 | [data-theme=material-indigo], .app-theme-picker__picker[data-theme=material-indigo] { 2 | --material-primary: #3f51b5; 3 | --material-secondary: #606FC7; 4 | } 5 | -------------------------------------------------------------------------------- /src/main/webapp/theme-purple.css: -------------------------------------------------------------------------------- 1 | [data-theme=material-purple], .app-theme-picker__picker[data-theme=material-purple] { 2 | --material-primary: #9C27B0; 3 | --material-secondary: #C758DA; 4 | } 5 | -------------------------------------------------------------------------------- /src/main/webapp/theme-yellow.css: -------------------------------------------------------------------------------- 1 | [data-theme=material-yellow], .app-theme-picker__picker[data-theme=material-yellow] { 2 | --material-primary: #FFC107; 3 | --material-secondary: #F4C24F; 4 | } 5 | -------------------------------------------------------------------------------- /src/test/resources/io/jenkins/plugins/materialtheme/jcasc/materialamber/ConfigurationAsCode.yml: -------------------------------------------------------------------------------- 1 | --- 2 | unclassified: 3 | themeManager: 4 | disableUserThemes: true 5 | theme: "material-amber" 6 | -------------------------------------------------------------------------------- /src/test/resources/io/jenkins/plugins/materialtheme/jcasc/materialgreen/ConfigurationAsCode.yml: -------------------------------------------------------------------------------- 1 | --- 2 | unclassified: 3 | themeManager: 4 | disableUserThemes: true 5 | theme: "material-green" 6 | -------------------------------------------------------------------------------- /src/test/resources/io/jenkins/plugins/materialtheme/jcasc/materialindigo/ConfigurationAsCode.yml: -------------------------------------------------------------------------------- 1 | --- 2 | unclassified: 3 | themeManager: 4 | disableUserThemes: true 5 | theme: "material-indigo" 6 | -------------------------------------------------------------------------------- /src/test/resources/io/jenkins/plugins/materialtheme/jcasc/materialpurple/ConfigurationAsCode.yml: -------------------------------------------------------------------------------- 1 | --- 2 | unclassified: 3 | themeManager: 4 | disableUserThemes: true 5 | theme: "material-purple" 6 | -------------------------------------------------------------------------------- /src/test/resources/io/jenkins/plugins/materialtheme/jcasc/materialyellow/ConfigurationAsCode.yml: -------------------------------------------------------------------------------- 1 | --- 2 | unclassified: 3 | themeManager: 4 | disableUserThemes: true 5 | theme: "material-yellow" 6 | -------------------------------------------------------------------------------- /src/main/webapp/theme-light-blue.css: -------------------------------------------------------------------------------- 1 | [data-theme=material-light-blue], .app-theme-picker__picker[data-theme=material-light-blue] { 2 | --material-primary: #4ac3f7; 3 | --material-secondary: #3ca2cf; 4 | } -------------------------------------------------------------------------------- /src/test/resources/io/jenkins/plugins/materialtheme/jcasc/materiallightblue/ConfigurationAsCode.yml: -------------------------------------------------------------------------------- 1 | --- 2 | unclassified: 3 | themeManager: 4 | disableUserThemes: true 5 | theme: "material-light-blue" 6 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/arrow_back.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/arrow_forward.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/folder.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/config/wro.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | /resources/less/light-theme.less 4 | /resources/less/core-theme.less 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/delete.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/remove_circle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/storage.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/error.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/file.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/flag.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/chart-areaspline.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/computer.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/check_circle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/insert_chart.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/webapp/resources/fonts/Roboto-Mono-Copyright.txt: -------------------------------------------------------------------------------- 1 | RobotoMono[wght].ttf: Copyright 2015 The Roboto Mono Project Authors (https://github.com/googlefonts/robotomono) 2 | RobotoMono-Italic[wght].ttf: Copyright 2015 The Roboto Mono Project Authors (https://github.com/googlefonts/robotomono) -------------------------------------------------------------------------------- /src/main/webapp/resources/images/folder-move.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/save.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/domain.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/pencil.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/info_outline.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/play_circle_outline.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/feedback.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /Jenkinsfile: -------------------------------------------------------------------------------- 1 | /* 2 | See the documentation for more options: 3 | https://github.com/jenkins-infra/pipeline-library/ 4 | */ 5 | 6 | buildPlugin(useContainerAgent: true, configurations: [ 7 | [ platform: "linux", jdk: "8", jenkins: null ], 8 | [ platform: "linux", jdk: "11", jenkins: null ] 9 | ]) 10 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/add_circle_outline.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/compare.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/build.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/folder-remove.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/power_settings_new.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/computer_new.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/history.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/package-down.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/refresh.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/rss-box.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/assignment.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/lock.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/play-pause.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/autorenew.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/weather-cloudy.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/help_outline.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/extension.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/stop.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/computer_offline.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/server-network.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/assignment_late.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/pipe.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/people.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/webapp/resources/less/light-theme.less: -------------------------------------------------------------------------------- 1 | // Default Colors 2 | @color-primary: #26a69a; 3 | @color-bg: #fff; 4 | @color-text: #444; 5 | @color-link: #26a69a; 6 | @color-grey: #9E9E9E; 7 | @color-green: #43A047; 8 | @color-yellow: #FFC107; 9 | @color-purple: #9C27B0; 10 | @color-lime: #AFB42B; 11 | @color-amber: #FF6F00; 12 | @color-red: #F44336; 13 | @color-white: #fff; 14 | @color-black: #263238; 15 | @color-selection: #80CBC4; 16 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/replay.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.mvn/extensions.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | io.jenkins.tools.incrementals 4 | git-changelist-maven-extension 5 | 1.4 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/content-copy.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/file-multiple.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/file-document.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/file-plus.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.github/workflows/cd.yml: -------------------------------------------------------------------------------- 1 | # Note: additional setup is required, see https://www.jenkins.io/redirect/continuous-delivery-of-plugins 2 | 3 | name: cd 4 | on: 5 | workflow_dispatch: 6 | check_run: 7 | types: 8 | - completed 9 | 10 | jobs: 11 | maven-cd: 12 | uses: jenkins-infra/github-reusable-workflows/.github/workflows/maven-cd.yml@v1 13 | secrets: 14 | MAVEN_USERNAME: ${{ secrets.MAVEN_USERNAME }} 15 | MAVEN_TOKEN: ${{ secrets.MAVEN_TOKEN }} 16 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/timer-sand.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/file-document-multiple.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/file-table.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.github/workflows/jenkins-security-scan.yml: -------------------------------------------------------------------------------- 1 | name: Jenkins Security Scan 2 | on: 3 | push: 4 | branches: 5 | - main 6 | pull_request: 7 | types: [ opened, synchronize, reopened ] 8 | workflow_dispatch: 9 | 10 | permissions: 11 | security-events: write 12 | contents: read 13 | actions: read 14 | 15 | jobs: 16 | security-scan: 17 | uses: jenkins-infra/jenkins-security-scan/.github/workflows/jenkins-security-scan.yaml@v2 18 | with: 19 | java-cache: 'maven' 20 | java-version: 11 -------------------------------------------------------------------------------- /src/main/webapp/resources/images/laptop-off.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/comment-arrow-right.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/git.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/plus-network.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/java/io/jenkins/plugins/materialtheme/AbstractMaterialThemeDescriptor.java: -------------------------------------------------------------------------------- 1 | package io.jenkins.plugins.materialtheme; 2 | 3 | import io.jenkins.plugins.thememanager.ThemeManagerFactoryDescriptor; 4 | 5 | public abstract class AbstractMaterialThemeDescriptor extends ThemeManagerFactoryDescriptor { 6 | public static final String ID = "material"; 7 | 8 | @Override 9 | public String getThemeId() { 10 | return ID; 11 | } 12 | 13 | @Override 14 | public boolean isNamespaced() { 15 | return true; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/account-arrow-left.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/clipboard-check.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/bug_report.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/tag-text.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/weather-sunny.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/clipboard-pulse.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/restart.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/weather-rainy.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/devices.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/java/io/jenkins/plugins/materialtheme/AbstractMaterialTheme.java: -------------------------------------------------------------------------------- 1 | package io.jenkins.plugins.materialtheme; 2 | 3 | import io.jenkins.plugins.thememanager.Theme; 4 | import io.jenkins.plugins.thememanager.ThemeManagerFactory; 5 | import java.util.Arrays; 6 | 7 | public class AbstractMaterialTheme extends ThemeManagerFactory { 8 | 9 | public static final String BASE_CSS = "light-theme.css"; 10 | public static final String CUSTOMISED_CSS = "material-theme.css"; 11 | 12 | @Override 13 | public Theme getTheme() { 14 | return Theme.builder().withCssUrls( 15 | Arrays.asList(toAssetUrl(BASE_CSS), getCssUrl(), toAssetUrl(CUSTOMISED_CSS))) 16 | .build(); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/harddisk.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/settings.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/weather-pouring.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/weather-partlycloudy.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/github-circle.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/owl.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /License: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2016 Afonso F 4 | Copyright (c) 2020 Tim Brown 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all 14 | copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | SOFTWARE. 23 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/source-repository-multiple.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/file-cog.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/java/io/jenkins/plugins/materialtheme/MaterialGreyThemeManagerFactory.java: -------------------------------------------------------------------------------- 1 | package io.jenkins.plugins.materialtheme; 2 | 3 | import edu.umd.cs.findbugs.annotations.NonNull; 4 | import hudson.Extension; 5 | import io.jenkins.plugins.thememanager.ThemeManagerFactory; 6 | import org.jenkinsci.Symbol; 7 | import org.kohsuke.stapler.DataBoundConstructor; 8 | 9 | public class MaterialGreyThemeManagerFactory extends AbstractMaterialTheme { 10 | 11 | public static final String MATERIAL_GREY_CSS = "theme-grey.css"; 12 | public static final String MATERIAL_GREY_SYMBOL = "material-grey"; 13 | 14 | @DataBoundConstructor 15 | public MaterialGreyThemeManagerFactory() { 16 | } 17 | 18 | 19 | @Extension 20 | @Symbol(MATERIAL_GREY_SYMBOL) 21 | public static class MaterialGreyThemeManagerFactoryDescriptor extends AbstractMaterialThemeDescriptor { 22 | 23 | @NonNull 24 | @Override 25 | public String getDisplayName() { 26 | return "Material - Grey"; 27 | } 28 | 29 | @Override 30 | public ThemeManagerFactory getInstance() { 31 | return new MaterialGreyThemeManagerFactory(); 32 | } 33 | 34 | @Override 35 | public String getThemeCssSuffix() { 36 | return MATERIAL_GREY_CSS; 37 | } 38 | 39 | @Override 40 | public String getThemeKey() { 41 | return ID + "-grey"; 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /src/main/java/io/jenkins/plugins/materialtheme/MaterialIndigoThemeManagerFactory.java: -------------------------------------------------------------------------------- 1 | package io.jenkins.plugins.materialtheme; 2 | 3 | import edu.umd.cs.findbugs.annotations.NonNull; 4 | import hudson.Extension; 5 | import io.jenkins.plugins.thememanager.ThemeManagerFactory; 6 | import org.jenkinsci.Symbol; 7 | import org.kohsuke.stapler.DataBoundConstructor; 8 | 9 | public class MaterialIndigoThemeManagerFactory extends AbstractMaterialTheme { 10 | 11 | public static final String MATERIAL_INDIGO_CSS = "theme-indigo.css"; 12 | public static final String MATERIAL_INDIGO_SYMBOL = "material-indigo"; 13 | 14 | @DataBoundConstructor 15 | public MaterialIndigoThemeManagerFactory() { 16 | } 17 | 18 | 19 | @Extension 20 | @Symbol(MATERIAL_INDIGO_SYMBOL) 21 | public static class MaterialIndigoThemeManagerFactoryDescriptor extends AbstractMaterialThemeDescriptor { 22 | 23 | @NonNull 24 | @Override 25 | public String getDisplayName() { 26 | return "Material - Indigo"; 27 | } 28 | 29 | @Override 30 | public ThemeManagerFactory getInstance() { 31 | return new MaterialIndigoThemeManagerFactory(); 32 | } 33 | 34 | @Override 35 | public String getThemeCssSuffix() { 36 | return MATERIAL_INDIGO_CSS; 37 | } 38 | 39 | @Override 40 | public String getThemeKey() { 41 | return ID + "-indigo"; 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /src/main/java/io/jenkins/plugins/materialtheme/MaterialLightBlueThemeManagerFactory.java: -------------------------------------------------------------------------------- 1 | package io.jenkins.plugins.materialtheme; 2 | 3 | import edu.umd.cs.findbugs.annotations.NonNull; 4 | import hudson.Extension; 5 | import io.jenkins.plugins.thememanager.ThemeManagerFactory; 6 | import org.jenkinsci.Symbol; 7 | import org.kohsuke.stapler.DataBoundConstructor; 8 | 9 | public class MaterialLightBlueThemeManagerFactory extends AbstractMaterialTheme { 10 | 11 | public static final String MATERIAL_LIGHT_BLUE_CSS = "theme-light-blue.css"; 12 | public static final String MATERIAL_LIGTH_BLUE_SYMBOL = "material-light-blue"; 13 | 14 | @DataBoundConstructor 15 | public MaterialLightBlueThemeManagerFactory() { 16 | } 17 | 18 | 19 | @Extension 20 | @Symbol(MATERIAL_LIGTH_BLUE_SYMBOL) 21 | public static class MaterialLightBlueThemeManagerFactoryDescriptor extends AbstractMaterialThemeDescriptor { 22 | 23 | @NonNull 24 | @Override 25 | public String getDisplayName() { 26 | return "Material - Light Blue"; 27 | } 28 | 29 | @Override 30 | public ThemeManagerFactory getInstance() { 31 | return new MaterialLightBlueThemeManagerFactory(); 32 | } 33 | 34 | @Override 35 | public String getThemeCssSuffix() { 36 | return MATERIAL_LIGHT_BLUE_CSS; 37 | } 38 | 39 | @Override 40 | public String getThemeKey() { 41 | return ID + "-light-blue"; 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /src/main/java/io/jenkins/plugins/materialtheme/MaterialRedThemeManagerFactory.java: -------------------------------------------------------------------------------- 1 | package io.jenkins.plugins.materialtheme; 2 | 3 | import edu.umd.cs.findbugs.annotations.NonNull; 4 | import hudson.Extension; 5 | import io.jenkins.plugins.thememanager.ThemeManagerFactory; 6 | import org.jenkinsci.Symbol; 7 | import org.kohsuke.stapler.DataBoundConstructor; 8 | 9 | public class MaterialRedThemeManagerFactory extends AbstractMaterialTheme { 10 | 11 | public static final String MATERIAL_RED_CSS = "theme-red.css"; 12 | public static final String MATERIAL_RED_SYMBOL = "material-red"; 13 | 14 | @DataBoundConstructor 15 | public MaterialRedThemeManagerFactory() { 16 | } 17 | 18 | @Extension 19 | @Symbol(MATERIAL_RED_SYMBOL) 20 | public static class MaterialRedThemeManagerFactoryDescriptor extends AbstractMaterialThemeDescriptor { 21 | 22 | @NonNull 23 | @Override 24 | public String getDisplayName() { 25 | return "Material - Red"; 26 | } 27 | 28 | @Override 29 | public ThemeManagerFactory getInstance() { 30 | return new MaterialRedThemeManagerFactory(); 31 | } 32 | 33 | @Override 34 | public String getThemeCssSuffix() { 35 | return MATERIAL_RED_CSS; 36 | } 37 | 38 | @Override 39 | public String getThemeKey() { 40 | return ID + "-red"; 41 | } 42 | 43 | @Override 44 | public boolean isNamespaced() { 45 | return true; 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/main/java/io/jenkins/plugins/materialtheme/MaterialLimeThemeManagerFactory.java: -------------------------------------------------------------------------------- 1 | package io.jenkins.plugins.materialtheme; 2 | 3 | import edu.umd.cs.findbugs.annotations.NonNull; 4 | import hudson.Extension; 5 | import io.jenkins.plugins.thememanager.ThemeManagerFactory; 6 | import org.jenkinsci.Symbol; 7 | import org.kohsuke.stapler.DataBoundConstructor; 8 | 9 | public class MaterialLimeThemeManagerFactory extends AbstractMaterialTheme { 10 | 11 | public static final String MATERIAL_LIME_CSS = "theme-lime.css"; 12 | public static final String MATERIAL_LIME_SYMBOL = "material-lime"; 13 | 14 | @DataBoundConstructor 15 | public MaterialLimeThemeManagerFactory() { 16 | } 17 | 18 | @Extension 19 | @Symbol(MATERIAL_LIME_SYMBOL) 20 | public static class MaterialLimeThemeManagerFactoryDescriptor extends AbstractMaterialThemeDescriptor { 21 | 22 | @NonNull 23 | @Override 24 | public String getDisplayName() { 25 | return "Material - Lime"; 26 | } 27 | 28 | @Override 29 | public ThemeManagerFactory getInstance() { 30 | return new MaterialLimeThemeManagerFactory(); 31 | } 32 | 33 | @Override 34 | public String getThemeCssSuffix() { 35 | return MATERIAL_LIME_CSS; 36 | } 37 | 38 | @Override 39 | public String getThemeKey() { 40 | return ID + "-lime"; 41 | } 42 | 43 | @Override 44 | public boolean isNamespaced() { 45 | return true; 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/main/java/io/jenkins/plugins/materialtheme/MaterialAmberThemeManagerFactory.java: -------------------------------------------------------------------------------- 1 | package io.jenkins.plugins.materialtheme; 2 | 3 | import edu.umd.cs.findbugs.annotations.NonNull; 4 | import hudson.Extension; 5 | import io.jenkins.plugins.thememanager.ThemeManagerFactory; 6 | import org.jenkinsci.Symbol; 7 | import org.kohsuke.stapler.DataBoundConstructor; 8 | 9 | public class MaterialAmberThemeManagerFactory extends AbstractMaterialTheme { 10 | 11 | public static final String MATERIAL_AMBER_CSS = "theme-amber.css"; 12 | public static final String MATERIAL_AMBER_SYMBOL = "material-amber"; 13 | 14 | @DataBoundConstructor 15 | public MaterialAmberThemeManagerFactory() { 16 | } 17 | 18 | @Extension 19 | @Symbol(MATERIAL_AMBER_SYMBOL) 20 | public static class MaterialAmberThemeManagerFactoryDescriptor extends AbstractMaterialThemeDescriptor { 21 | 22 | @NonNull 23 | @Override 24 | public String getDisplayName() { 25 | return "Material - Amber"; 26 | } 27 | 28 | @Override 29 | public ThemeManagerFactory getInstance() { 30 | return new MaterialAmberThemeManagerFactory(); 31 | } 32 | 33 | @Override 34 | public String getThemeCssSuffix() { 35 | return MATERIAL_AMBER_CSS; 36 | } 37 | 38 | @Override 39 | public String getThemeKey() { 40 | return ID + "-amber"; 41 | } 42 | 43 | @Override 44 | public boolean isNamespaced() { 45 | return true; 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/main/java/io/jenkins/plugins/materialtheme/MaterialGreenThemeManagerFactory.java: -------------------------------------------------------------------------------- 1 | package io.jenkins.plugins.materialtheme; 2 | 3 | import edu.umd.cs.findbugs.annotations.NonNull; 4 | import hudson.Extension; 5 | import io.jenkins.plugins.thememanager.ThemeManagerFactory; 6 | import org.jenkinsci.Symbol; 7 | import org.kohsuke.stapler.DataBoundConstructor; 8 | 9 | public class MaterialGreenThemeManagerFactory extends AbstractMaterialTheme { 10 | 11 | public static final String MATERIAL_GREEN_CSS = "theme-green.css"; 12 | public static final String MATERIAL_GREEN_SYMBOL = "material-green"; 13 | 14 | @DataBoundConstructor 15 | public MaterialGreenThemeManagerFactory() { 16 | } 17 | 18 | @Extension 19 | @Symbol(MATERIAL_GREEN_SYMBOL) 20 | public static class MaterialGreenThemeManagerFactoryDescriptor extends AbstractMaterialThemeDescriptor { 21 | 22 | @NonNull 23 | @Override 24 | public String getDisplayName() { 25 | return "Material - Green"; 26 | } 27 | 28 | @Override 29 | public ThemeManagerFactory getInstance() { 30 | return new MaterialGreenThemeManagerFactory(); 31 | } 32 | 33 | @Override 34 | public String getThemeCssSuffix() { 35 | return MATERIAL_GREEN_CSS; 36 | } 37 | 38 | @Override 39 | public String getThemeKey() { 40 | return ID + "-green"; 41 | } 42 | 43 | @Override 44 | public boolean isNamespaced() { 45 | return true; 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/main/java/io/jenkins/plugins/materialtheme/MaterialPurpleThemeManagerFactory.java: -------------------------------------------------------------------------------- 1 | package io.jenkins.plugins.materialtheme; 2 | 3 | import edu.umd.cs.findbugs.annotations.NonNull; 4 | import hudson.Extension; 5 | import io.jenkins.plugins.thememanager.ThemeManagerFactory; 6 | import org.jenkinsci.Symbol; 7 | import org.kohsuke.stapler.DataBoundConstructor; 8 | 9 | public class MaterialPurpleThemeManagerFactory extends AbstractMaterialTheme { 10 | 11 | public static final String MATERIAL_PURPLE_CSS = "theme-purple.css"; 12 | public static final String MATERIAL_PURPLE_SYMBOL = "material-purple"; 13 | 14 | @DataBoundConstructor 15 | public MaterialPurpleThemeManagerFactory() { 16 | } 17 | 18 | @Extension 19 | @Symbol(MATERIAL_PURPLE_SYMBOL) 20 | public static class MaterialPurpleThemeManagerFactoryDescriptor extends AbstractMaterialThemeDescriptor { 21 | 22 | @NonNull 23 | @Override 24 | public String getDisplayName() { 25 | return "Material - Purple"; 26 | } 27 | 28 | @Override 29 | public ThemeManagerFactory getInstance() { 30 | return new MaterialPurpleThemeManagerFactory(); 31 | } 32 | 33 | @Override 34 | public String getThemeCssSuffix() { 35 | return MATERIAL_PURPLE_CSS; 36 | } 37 | 38 | @Override 39 | public String getThemeKey() { 40 | return ID + "-purple"; 41 | } 42 | 43 | @Override 44 | public boolean isNamespaced() { 45 | return true; 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/main/java/io/jenkins/plugins/materialtheme/MaterialYellowThemeManagerFactory.java: -------------------------------------------------------------------------------- 1 | package io.jenkins.plugins.materialtheme; 2 | 3 | import edu.umd.cs.findbugs.annotations.NonNull; 4 | import hudson.Extension; 5 | import io.jenkins.plugins.thememanager.ThemeManagerFactory; 6 | import org.jenkinsci.Symbol; 7 | import org.kohsuke.stapler.DataBoundConstructor; 8 | 9 | public class MaterialYellowThemeManagerFactory extends AbstractMaterialTheme { 10 | 11 | public static final String MATERIAL_YELLOW_CSS = "theme-yellow.css"; 12 | public static final String MATERIAL_YELLOW_SYMBOL = "material-yellow"; 13 | 14 | @DataBoundConstructor 15 | public MaterialYellowThemeManagerFactory() { 16 | } 17 | 18 | @Extension 19 | @Symbol(MATERIAL_YELLOW_SYMBOL) 20 | public static class MaterialYellowThemeManagerFactoryDescriptor extends AbstractMaterialThemeDescriptor { 21 | 22 | @NonNull 23 | @Override 24 | public String getDisplayName() { 25 | return "Material - Yellow"; 26 | } 27 | 28 | @Override 29 | public ThemeManagerFactory getInstance() { 30 | return new MaterialYellowThemeManagerFactory(); 31 | } 32 | 33 | @Override 34 | public String getThemeCssSuffix() { 35 | return MATERIAL_YELLOW_CSS; 36 | } 37 | 38 | @Override 39 | public String getThemeKey() { 40 | return ID + "-yellow"; 41 | } 42 | 43 | @Override 44 | public boolean isNamespaced() { 45 | return true; 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/fingerprint.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/test/java/io/jenkins/plugins/materialtheme/jcasc/materialred/MaterialRedThemeJcascTest.java: -------------------------------------------------------------------------------- 1 | package io.jenkins.plugins.materialtheme.jcasc.materialred; 2 | 3 | import io.jenkins.plugins.casc.ConfigurationContext; 4 | import io.jenkins.plugins.casc.ConfiguratorRegistry; 5 | import io.jenkins.plugins.casc.misc.ConfiguredWithCode; 6 | import io.jenkins.plugins.casc.misc.JenkinsConfiguredWithCodeRule; 7 | import io.jenkins.plugins.casc.model.CNode; 8 | import io.jenkins.plugins.thememanager.ThemeManagerFactory; 9 | import io.jenkins.plugins.thememanager.ThemeManagerPageDecorator; 10 | import org.junit.ClassRule; 11 | import org.junit.Test; 12 | import io.jenkins.plugins.materialtheme.MaterialRedThemeManagerFactory; 13 | 14 | import static io.jenkins.plugins.casc.misc.Util.getUnclassifiedRoot; 15 | import static io.jenkins.plugins.casc.misc.Util.toStringFromYamlFile; 16 | import static io.jenkins.plugins.casc.misc.Util.toYamlString; 17 | import static org.hamcrest.MatcherAssert.assertThat; 18 | import static org.hamcrest.Matchers.instanceOf; 19 | import static org.hamcrest.Matchers.is; 20 | import static org.junit.Assert.assertNotNull; 21 | 22 | public class MaterialRedThemeJcascTest { 23 | 24 | @ClassRule 25 | @ConfiguredWithCode("ConfigurationAsCode.yml") 26 | public static JenkinsConfiguredWithCodeRule j = new JenkinsConfiguredWithCodeRule(); 27 | 28 | @Test 29 | public void testConfig() { 30 | ThemeManagerPageDecorator decorator = ThemeManagerPageDecorator.get(); 31 | 32 | ThemeManagerFactory theme = decorator.getTheme(); 33 | assertNotNull(theme); 34 | 35 | assertThat(decorator.isDisableUserThemes(), is(true)); 36 | assertThat(theme, instanceOf(MaterialRedThemeManagerFactory.class)); 37 | } 38 | 39 | @Test 40 | public void testExport() throws Exception { 41 | ConfigurationContext context = new ConfigurationContext(ConfiguratorRegistry.get()); 42 | CNode yourAttribute = getUnclassifiedRoot(context).get("themeManager"); 43 | 44 | String exported = toYamlString(yourAttribute); 45 | 46 | String expected = toStringFromYamlFile(this, "ConfigurationAsCodeExport.yml"); 47 | 48 | assertThat(exported, is(expected)); 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /src/test/java/io/jenkins/plugins/materialtheme/jcasc/materialgrey/MaterialGreyThemeJcascTest.java: -------------------------------------------------------------------------------- 1 | package io.jenkins.plugins.materialtheme.jcasc.materialgrey; 2 | 3 | import io.jenkins.plugins.casc.ConfigurationContext; 4 | import io.jenkins.plugins.casc.ConfiguratorRegistry; 5 | import io.jenkins.plugins.casc.misc.ConfiguredWithCode; 6 | import io.jenkins.plugins.casc.misc.JenkinsConfiguredWithCodeRule; 7 | import io.jenkins.plugins.casc.model.CNode; 8 | import io.jenkins.plugins.thememanager.ThemeManagerFactory; 9 | import io.jenkins.plugins.thememanager.ThemeManagerPageDecorator; 10 | import org.junit.ClassRule; 11 | import org.junit.Test; 12 | import io.jenkins.plugins.materialtheme.MaterialGreyThemeManagerFactory; 13 | 14 | import static io.jenkins.plugins.casc.misc.Util.getUnclassifiedRoot; 15 | import static io.jenkins.plugins.casc.misc.Util.toStringFromYamlFile; 16 | import static io.jenkins.plugins.casc.misc.Util.toYamlString; 17 | import static org.hamcrest.MatcherAssert.assertThat; 18 | import static org.hamcrest.Matchers.instanceOf; 19 | import static org.hamcrest.Matchers.is; 20 | import static org.junit.Assert.assertNotNull; 21 | 22 | public class MaterialGreyThemeJcascTest { 23 | 24 | @ClassRule 25 | @ConfiguredWithCode("ConfigurationAsCode.yml") 26 | public static JenkinsConfiguredWithCodeRule j = new JenkinsConfiguredWithCodeRule(); 27 | 28 | @Test 29 | public void testConfig() { 30 | ThemeManagerPageDecorator decorator = ThemeManagerPageDecorator.get(); 31 | 32 | ThemeManagerFactory theme = decorator.getTheme(); 33 | assertNotNull(theme); 34 | 35 | assertThat(decorator.isDisableUserThemes(), is(true)); 36 | assertThat(theme, instanceOf(MaterialGreyThemeManagerFactory.class)); 37 | } 38 | 39 | @Test 40 | public void testExport() throws Exception { 41 | ConfigurationContext context = new ConfigurationContext(ConfiguratorRegistry.get()); 42 | CNode yourAttribute = getUnclassifiedRoot(context).get("themeManager"); 43 | 44 | String exported = toYamlString(yourAttribute); 45 | 46 | String expected = toStringFromYamlFile(this, "ConfigurationAsCodeExport.yml"); 47 | 48 | assertThat(exported, is(expected)); 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /src/test/java/io/jenkins/plugins/materialtheme/jcasc/materiallime/MaterialLimeThemeJcascTest.java: -------------------------------------------------------------------------------- 1 | package io.jenkins.plugins.materialtheme.jcasc.materiallime; 2 | 3 | import io.jenkins.plugins.casc.ConfigurationContext; 4 | import io.jenkins.plugins.casc.ConfiguratorRegistry; 5 | import io.jenkins.plugins.casc.misc.ConfiguredWithCode; 6 | import io.jenkins.plugins.casc.misc.JenkinsConfiguredWithCodeRule; 7 | import io.jenkins.plugins.casc.model.CNode; 8 | import io.jenkins.plugins.thememanager.ThemeManagerFactory; 9 | import io.jenkins.plugins.thememanager.ThemeManagerPageDecorator; 10 | import org.junit.ClassRule; 11 | import org.junit.Test; 12 | import io.jenkins.plugins.materialtheme.MaterialLimeThemeManagerFactory; 13 | 14 | import static io.jenkins.plugins.casc.misc.Util.getUnclassifiedRoot; 15 | import static io.jenkins.plugins.casc.misc.Util.toStringFromYamlFile; 16 | import static io.jenkins.plugins.casc.misc.Util.toYamlString; 17 | import static org.hamcrest.MatcherAssert.assertThat; 18 | import static org.hamcrest.Matchers.instanceOf; 19 | import static org.hamcrest.Matchers.is; 20 | import static org.junit.Assert.assertNotNull; 21 | 22 | public class MaterialLimeThemeJcascTest { 23 | 24 | @ClassRule 25 | @ConfiguredWithCode("ConfigurationAsCode.yml") 26 | public static JenkinsConfiguredWithCodeRule j = new JenkinsConfiguredWithCodeRule(); 27 | 28 | @Test 29 | public void testConfig() { 30 | ThemeManagerPageDecorator decorator = ThemeManagerPageDecorator.get(); 31 | 32 | ThemeManagerFactory theme = decorator.getTheme(); 33 | assertNotNull(theme); 34 | 35 | assertThat(decorator.isDisableUserThemes(), is(true)); 36 | assertThat(theme, instanceOf(MaterialLimeThemeManagerFactory.class)); 37 | } 38 | 39 | @Test 40 | public void testExport() throws Exception { 41 | ConfigurationContext context = new ConfigurationContext(ConfiguratorRegistry.get()); 42 | CNode yourAttribute = getUnclassifiedRoot(context).get("themeManager"); 43 | 44 | String exported = toYamlString(yourAttribute); 45 | 46 | String expected = toStringFromYamlFile(this, "ConfigurationAsCodeExport.yml"); 47 | 48 | assertThat(exported, is(expected)); 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /src/test/java/io/jenkins/plugins/materialtheme/jcasc/materialamber/MaterialAmberThemeJcascTest.java: -------------------------------------------------------------------------------- 1 | package io.jenkins.plugins.materialtheme.jcasc.materialamber; 2 | 3 | import io.jenkins.plugins.casc.ConfigurationContext; 4 | import io.jenkins.plugins.casc.ConfiguratorRegistry; 5 | import io.jenkins.plugins.casc.misc.ConfiguredWithCode; 6 | import io.jenkins.plugins.casc.misc.JenkinsConfiguredWithCodeRule; 7 | import io.jenkins.plugins.casc.model.CNode; 8 | import io.jenkins.plugins.thememanager.ThemeManagerFactory; 9 | import io.jenkins.plugins.thememanager.ThemeManagerPageDecorator; 10 | import org.junit.ClassRule; 11 | import org.junit.Test; 12 | import io.jenkins.plugins.materialtheme.MaterialAmberThemeManagerFactory; 13 | 14 | import static io.jenkins.plugins.casc.misc.Util.getUnclassifiedRoot; 15 | import static io.jenkins.plugins.casc.misc.Util.toStringFromYamlFile; 16 | import static io.jenkins.plugins.casc.misc.Util.toYamlString; 17 | import static org.hamcrest.MatcherAssert.assertThat; 18 | import static org.hamcrest.Matchers.instanceOf; 19 | import static org.hamcrest.Matchers.is; 20 | import static org.junit.Assert.assertNotNull; 21 | 22 | public class MaterialAmberThemeJcascTest { 23 | 24 | @ClassRule 25 | @ConfiguredWithCode("ConfigurationAsCode.yml") 26 | public static JenkinsConfiguredWithCodeRule j = new JenkinsConfiguredWithCodeRule(); 27 | 28 | @Test 29 | public void testConfig() { 30 | ThemeManagerPageDecorator decorator = ThemeManagerPageDecorator.get(); 31 | 32 | ThemeManagerFactory theme = decorator.getTheme(); 33 | assertNotNull(theme); 34 | 35 | assertThat(decorator.isDisableUserThemes(), is(true)); 36 | assertThat(theme, instanceOf(MaterialAmberThemeManagerFactory.class)); 37 | } 38 | 39 | @Test 40 | public void testExport() throws Exception { 41 | ConfigurationContext context = new ConfigurationContext(ConfiguratorRegistry.get()); 42 | CNode yourAttribute = getUnclassifiedRoot(context).get("themeManager"); 43 | 44 | String exported = toYamlString(yourAttribute); 45 | 46 | String expected = toStringFromYamlFile(this, "ConfigurationAsCodeExport.yml"); 47 | 48 | assertThat(exported, is(expected)); 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /src/test/java/io/jenkins/plugins/materialtheme/jcasc/materialgreen/MaterialGreenThemeJcascTest.java: -------------------------------------------------------------------------------- 1 | package io.jenkins.plugins.materialtheme.jcasc.materialgreen; 2 | 3 | import io.jenkins.plugins.casc.ConfigurationContext; 4 | import io.jenkins.plugins.casc.ConfiguratorRegistry; 5 | import io.jenkins.plugins.casc.misc.ConfiguredWithCode; 6 | import io.jenkins.plugins.casc.misc.JenkinsConfiguredWithCodeRule; 7 | import io.jenkins.plugins.casc.model.CNode; 8 | import io.jenkins.plugins.thememanager.ThemeManagerFactory; 9 | import io.jenkins.plugins.thememanager.ThemeManagerPageDecorator; 10 | import org.junit.ClassRule; 11 | import org.junit.Test; 12 | import io.jenkins.plugins.materialtheme.MaterialGreenThemeManagerFactory; 13 | 14 | import static io.jenkins.plugins.casc.misc.Util.getUnclassifiedRoot; 15 | import static io.jenkins.plugins.casc.misc.Util.toStringFromYamlFile; 16 | import static io.jenkins.plugins.casc.misc.Util.toYamlString; 17 | import static org.hamcrest.MatcherAssert.assertThat; 18 | import static org.hamcrest.Matchers.instanceOf; 19 | import static org.hamcrest.Matchers.is; 20 | import static org.junit.Assert.assertNotNull; 21 | 22 | public class MaterialGreenThemeJcascTest { 23 | 24 | @ClassRule 25 | @ConfiguredWithCode("ConfigurationAsCode.yml") 26 | public static JenkinsConfiguredWithCodeRule j = new JenkinsConfiguredWithCodeRule(); 27 | 28 | @Test 29 | public void testConfig() { 30 | ThemeManagerPageDecorator decorator = ThemeManagerPageDecorator.get(); 31 | 32 | ThemeManagerFactory theme = decorator.getTheme(); 33 | assertNotNull(theme); 34 | 35 | assertThat(decorator.isDisableUserThemes(), is(true)); 36 | assertThat(theme, instanceOf(MaterialGreenThemeManagerFactory.class)); 37 | } 38 | 39 | @Test 40 | public void testExport() throws Exception { 41 | ConfigurationContext context = new ConfigurationContext(ConfiguratorRegistry.get()); 42 | CNode yourAttribute = getUnclassifiedRoot(context).get("themeManager"); 43 | 44 | String exported = toYamlString(yourAttribute); 45 | 46 | String expected = toStringFromYamlFile(this, "ConfigurationAsCodeExport.yml"); 47 | 48 | assertThat(exported, is(expected)); 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /src/test/java/io/jenkins/plugins/materialtheme/jcasc/materialindigo/MaterialIndigoThemeJcascTest.java: -------------------------------------------------------------------------------- 1 | package io.jenkins.plugins.materialtheme.jcasc.materialindigo; 2 | 3 | import io.jenkins.plugins.casc.ConfigurationContext; 4 | import io.jenkins.plugins.casc.ConfiguratorRegistry; 5 | import io.jenkins.plugins.casc.misc.ConfiguredWithCode; 6 | import io.jenkins.plugins.casc.misc.JenkinsConfiguredWithCodeRule; 7 | import io.jenkins.plugins.casc.model.CNode; 8 | import io.jenkins.plugins.thememanager.ThemeManagerFactory; 9 | import io.jenkins.plugins.thememanager.ThemeManagerPageDecorator; 10 | import org.junit.ClassRule; 11 | import org.junit.Test; 12 | import io.jenkins.plugins.materialtheme.MaterialIndigoThemeManagerFactory; 13 | 14 | import static io.jenkins.plugins.casc.misc.Util.getUnclassifiedRoot; 15 | import static io.jenkins.plugins.casc.misc.Util.toStringFromYamlFile; 16 | import static io.jenkins.plugins.casc.misc.Util.toYamlString; 17 | import static org.hamcrest.MatcherAssert.assertThat; 18 | import static org.hamcrest.Matchers.instanceOf; 19 | import static org.hamcrest.Matchers.is; 20 | import static org.junit.Assert.assertNotNull; 21 | 22 | public class MaterialIndigoThemeJcascTest { 23 | 24 | @ClassRule 25 | @ConfiguredWithCode("ConfigurationAsCode.yml") 26 | public static JenkinsConfiguredWithCodeRule j = new JenkinsConfiguredWithCodeRule(); 27 | 28 | @Test 29 | public void testConfig() { 30 | ThemeManagerPageDecorator decorator = ThemeManagerPageDecorator.get(); 31 | 32 | ThemeManagerFactory theme = decorator.getTheme(); 33 | assertNotNull(theme); 34 | 35 | assertThat(decorator.isDisableUserThemes(), is(true)); 36 | assertThat(theme, instanceOf(MaterialIndigoThemeManagerFactory.class)); 37 | } 38 | 39 | @Test 40 | public void testExport() throws Exception { 41 | ConfigurationContext context = new ConfigurationContext(ConfiguratorRegistry.get()); 42 | CNode yourAttribute = getUnclassifiedRoot(context).get("themeManager"); 43 | 44 | String exported = toYamlString(yourAttribute); 45 | 46 | String expected = toStringFromYamlFile(this, "ConfigurationAsCodeExport.yml"); 47 | 48 | assertThat(exported, is(expected)); 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /src/test/java/io/jenkins/plugins/materialtheme/jcasc/materialpurple/MaterialPurpleThemeJcascTest.java: -------------------------------------------------------------------------------- 1 | package io.jenkins.plugins.materialtheme.jcasc.materialpurple; 2 | 3 | import io.jenkins.plugins.casc.ConfigurationContext; 4 | import io.jenkins.plugins.casc.ConfiguratorRegistry; 5 | import io.jenkins.plugins.casc.misc.ConfiguredWithCode; 6 | import io.jenkins.plugins.casc.misc.JenkinsConfiguredWithCodeRule; 7 | import io.jenkins.plugins.casc.model.CNode; 8 | import io.jenkins.plugins.thememanager.ThemeManagerFactory; 9 | import io.jenkins.plugins.thememanager.ThemeManagerPageDecorator; 10 | import org.junit.ClassRule; 11 | import org.junit.Test; 12 | import io.jenkins.plugins.materialtheme.MaterialPurpleThemeManagerFactory; 13 | 14 | import static io.jenkins.plugins.casc.misc.Util.getUnclassifiedRoot; 15 | import static io.jenkins.plugins.casc.misc.Util.toStringFromYamlFile; 16 | import static io.jenkins.plugins.casc.misc.Util.toYamlString; 17 | import static org.hamcrest.MatcherAssert.assertThat; 18 | import static org.hamcrest.Matchers.instanceOf; 19 | import static org.hamcrest.Matchers.is; 20 | import static org.junit.Assert.assertNotNull; 21 | 22 | public class MaterialPurpleThemeJcascTest { 23 | 24 | @ClassRule 25 | @ConfiguredWithCode("ConfigurationAsCode.yml") 26 | public static JenkinsConfiguredWithCodeRule j = new JenkinsConfiguredWithCodeRule(); 27 | 28 | @Test 29 | public void testConfig() { 30 | ThemeManagerPageDecorator decorator = ThemeManagerPageDecorator.get(); 31 | 32 | ThemeManagerFactory theme = decorator.getTheme(); 33 | assertNotNull(theme); 34 | 35 | assertThat(decorator.isDisableUserThemes(), is(true)); 36 | assertThat(theme, instanceOf(MaterialPurpleThemeManagerFactory.class)); 37 | } 38 | 39 | @Test 40 | public void testExport() throws Exception { 41 | ConfigurationContext context = new ConfigurationContext(ConfiguratorRegistry.get()); 42 | CNode yourAttribute = getUnclassifiedRoot(context).get("themeManager"); 43 | 44 | String exported = toYamlString(yourAttribute); 45 | 46 | String expected = toStringFromYamlFile(this, "ConfigurationAsCodeExport.yml"); 47 | 48 | assertThat(exported, is(expected)); 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /src/test/java/io/jenkins/plugins/materialtheme/jcasc/materialyellow/MaterialYellowThemeJcascTest.java: -------------------------------------------------------------------------------- 1 | package io.jenkins.plugins.materialtheme.jcasc.materialyellow; 2 | 3 | import io.jenkins.plugins.casc.ConfigurationContext; 4 | import io.jenkins.plugins.casc.ConfiguratorRegistry; 5 | import io.jenkins.plugins.casc.misc.ConfiguredWithCode; 6 | import io.jenkins.plugins.casc.misc.JenkinsConfiguredWithCodeRule; 7 | import io.jenkins.plugins.casc.model.CNode; 8 | import io.jenkins.plugins.thememanager.ThemeManagerFactory; 9 | import io.jenkins.plugins.thememanager.ThemeManagerPageDecorator; 10 | import org.junit.ClassRule; 11 | import org.junit.Test; 12 | import io.jenkins.plugins.materialtheme.MaterialYellowThemeManagerFactory; 13 | 14 | import static io.jenkins.plugins.casc.misc.Util.getUnclassifiedRoot; 15 | import static io.jenkins.plugins.casc.misc.Util.toStringFromYamlFile; 16 | import static io.jenkins.plugins.casc.misc.Util.toYamlString; 17 | import static org.hamcrest.MatcherAssert.assertThat; 18 | import static org.hamcrest.Matchers.instanceOf; 19 | import static org.hamcrest.Matchers.is; 20 | import static org.junit.Assert.assertNotNull; 21 | 22 | public class MaterialYellowThemeJcascTest { 23 | 24 | @ClassRule 25 | @ConfiguredWithCode("ConfigurationAsCode.yml") 26 | public static JenkinsConfiguredWithCodeRule j = new JenkinsConfiguredWithCodeRule(); 27 | 28 | @Test 29 | public void testConfig() { 30 | ThemeManagerPageDecorator decorator = ThemeManagerPageDecorator.get(); 31 | 32 | ThemeManagerFactory theme = decorator.getTheme(); 33 | assertNotNull(theme); 34 | 35 | assertThat(decorator.isDisableUserThemes(), is(true)); 36 | assertThat(theme, instanceOf(MaterialYellowThemeManagerFactory.class)); 37 | } 38 | 39 | @Test 40 | public void testExport() throws Exception { 41 | ConfigurationContext context = new ConfigurationContext(ConfiguratorRegistry.get()); 42 | CNode yourAttribute = getUnclassifiedRoot(context).get("themeManager"); 43 | 44 | String exported = toYamlString(yourAttribute); 45 | 46 | String expected = toStringFromYamlFile(this, "ConfigurationAsCodeExport.yml"); 47 | 48 | assertThat(exported, is(expected)); 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /src/test/java/io/jenkins/plugins/materialtheme/jcasc/materiallightblue/MaterialLightBlueThemeJcascTest.java: -------------------------------------------------------------------------------- 1 | package io.jenkins.plugins.materialtheme.jcasc.materiallightblue; 2 | 3 | import io.jenkins.plugins.casc.ConfigurationContext; 4 | import io.jenkins.plugins.casc.ConfiguratorRegistry; 5 | import io.jenkins.plugins.casc.misc.ConfiguredWithCode; 6 | import io.jenkins.plugins.casc.misc.JenkinsConfiguredWithCodeRule; 7 | import io.jenkins.plugins.casc.model.CNode; 8 | import io.jenkins.plugins.thememanager.ThemeManagerFactory; 9 | import io.jenkins.plugins.thememanager.ThemeManagerPageDecorator; 10 | import org.junit.ClassRule; 11 | import org.junit.Test; 12 | import io.jenkins.plugins.materialtheme.MaterialLightBlueThemeManagerFactory; 13 | 14 | import static io.jenkins.plugins.casc.misc.Util.getUnclassifiedRoot; 15 | import static io.jenkins.plugins.casc.misc.Util.toStringFromYamlFile; 16 | import static io.jenkins.plugins.casc.misc.Util.toYamlString; 17 | import static org.hamcrest.MatcherAssert.assertThat; 18 | import static org.hamcrest.Matchers.instanceOf; 19 | import static org.hamcrest.Matchers.is; 20 | import static org.junit.Assert.assertNotNull; 21 | 22 | public class MaterialLightBlueThemeJcascTest { 23 | 24 | @ClassRule 25 | @ConfiguredWithCode("ConfigurationAsCode.yml") 26 | public static JenkinsConfiguredWithCodeRule j = new JenkinsConfiguredWithCodeRule(); 27 | 28 | @Test 29 | public void testConfig() { 30 | ThemeManagerPageDecorator decorator = ThemeManagerPageDecorator.get(); 31 | 32 | ThemeManagerFactory theme = decorator.getTheme(); 33 | assertNotNull(theme); 34 | 35 | assertThat(decorator.isDisableUserThemes(), is(true)); 36 | assertThat(theme, instanceOf(MaterialLightBlueThemeManagerFactory.class)); 37 | } 38 | 39 | @Test 40 | public void testExport() throws Exception { 41 | ConfigurationContext context = new ConfigurationContext(ConfiguratorRegistry.get()); 42 | CNode yourAttribute = getUnclassifiedRoot(context).get("themeManager"); 43 | 44 | String exported = toYamlString(yourAttribute); 45 | 46 | String expected = toStringFromYamlFile(this, "ConfigurationAsCodeExport.yml"); 47 | 48 | assertThat(exported, is(expected)); 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /src/main/webapp/resources/images/docker.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/java/io/jenkins/plugins/materialtheme/MaterialThemeRootAction.java: -------------------------------------------------------------------------------- 1 | package io.jenkins.plugins.materialtheme; 2 | 3 | import hudson.Extension; 4 | import hudson.Plugin; 5 | import hudson.model.UnprotectedRootAction; 6 | import jenkins.model.Jenkins; 7 | import org.kohsuke.stapler.StaplerRequest; 8 | import org.kohsuke.stapler.StaplerResponse; 9 | 10 | import javax.servlet.ServletException; 11 | import java.io.IOException; 12 | import java.util.Arrays; 13 | 14 | import static io.jenkins.plugins.materialtheme.AbstractMaterialTheme.BASE_CSS; 15 | import static io.jenkins.plugins.materialtheme.AbstractMaterialTheme.CUSTOMISED_CSS; 16 | import static io.jenkins.plugins.materialtheme.MaterialIndigoThemeManagerFactory.MATERIAL_INDIGO_CSS; 17 | import static io.jenkins.plugins.materialtheme.MaterialRedThemeManagerFactory.MATERIAL_RED_CSS; 18 | import static io.jenkins.plugins.materialtheme.MaterialGreyThemeManagerFactory.MATERIAL_GREY_CSS; 19 | import static io.jenkins.plugins.materialtheme.MaterialLightBlueThemeManagerFactory.MATERIAL_LIGHT_BLUE_CSS; 20 | import static io.jenkins.plugins.materialtheme.MaterialGreenThemeManagerFactory.MATERIAL_GREEN_CSS; 21 | import static io.jenkins.plugins.materialtheme.MaterialYellowThemeManagerFactory.MATERIAL_YELLOW_CSS; 22 | import static io.jenkins.plugins.materialtheme.MaterialPurpleThemeManagerFactory.MATERIAL_PURPLE_CSS; 23 | import static io.jenkins.plugins.materialtheme.MaterialLimeThemeManagerFactory.MATERIAL_LIME_CSS; 24 | import static io.jenkins.plugins.materialtheme.MaterialAmberThemeManagerFactory.MATERIAL_AMBER_CSS; 25 | 26 | @Extension 27 | public class MaterialThemeRootAction implements UnprotectedRootAction { 28 | @Override 29 | public String getIconFileName() { 30 | return null; 31 | } 32 | 33 | @Override 34 | public String getDisplayName() { 35 | return null; 36 | } 37 | 38 | @Override 39 | public String getUrlName() { 40 | return "theme-material"; 41 | } 42 | 43 | private static final String css_files[] = new String[] { 44 | BASE_CSS, 45 | MATERIAL_INDIGO_CSS, 46 | MATERIAL_RED_CSS, 47 | MATERIAL_GREY_CSS, 48 | MATERIAL_LIGHT_BLUE_CSS, 49 | MATERIAL_GREEN_CSS, 50 | MATERIAL_YELLOW_CSS, 51 | MATERIAL_PURPLE_CSS, 52 | MATERIAL_LIME_CSS, 53 | MATERIAL_AMBER_CSS, 54 | CUSTOMISED_CSS 55 | }; 56 | 57 | public void doDynamic(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException { 58 | String cssFile = req.getRestOfPath(); 59 | if (cssFile.startsWith("/")) { 60 | cssFile = cssFile.substring(1); 61 | } 62 | if (!Arrays.asList(css_files).contains(cssFile)) { 63 | rsp.sendError(404); 64 | return; 65 | } 66 | final Plugin plugin = Jenkins.get().getPlugin("material-theme"); 67 | if (plugin == null) { 68 | rsp.sendError(404); 69 | return; 70 | } 71 | plugin.doDynamic(req, rsp); 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # A Material Theme plugin for Jenkins. 2 | 3 | [![Build Status](https://ci.jenkins.io/job/Plugins/job/material-theme-plugin/job/master/badge/icon)](https://ci.jenkins.io/job/Plugins/job/material-theme-plugin/job/master/) 4 | [![Gitter](https://badges.gitter.im/jenkinsci/ux-sig.svg)](https://gitter.im/jenkinsci/ux-sig?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) 5 | [![Changelog](https://img.shields.io/github/v/release/jenkinsci/material-theme-plugin.svg?label=changelog)](https://github.com/jenkinsci/material-theme-plugin/releases/) 6 | [![Jenkins Plugin](https://img.shields.io/jenkins/plugin/v/material-theme.svg)](https://plugins.jenkins.io/material-theme) 7 | [![Jenkins Plugin Installs](https://img.shields.io/jenkins/plugin/i/material-theme.svg?color=blue)](https://plugins.jenkins.io/material-theme) 8 | 9 | ## Description 10 | This a port of Afonso F's Jenkins material theme (http://afonsof.com/jenkins-material-theme/) to use Theme Manager plugin (https://github.com/jenkinsci/theme-manager-plugin#configuring-the-plugin). 11 | This should allow Jenkins administrators to easily switch themes and allow users to select their own theme. 12 | 13 | ## Screenshots 14 | 'Red': 15 | 16 | [![Screenshot jenkins-material-red main](screenshots/red_main_small.png)](screenshots/red_main_large.png) 17 | 18 | 'Indigo': 19 | 20 | [![Screenshot jenkins-material-red main](screenshots/indigo_main_small.png)](screenshots/indigo_main_large.png) 21 | 22 | 'Grey': 23 | 24 | [![Screenshot jenkins-material-red main](screenshots/grey_main_small.png)](screenshots/grey_main_large.png) 25 | 26 | 'Light Blue': 27 | 28 | [![Screenshot jenkins-material-red main](screenshots/light_blue_main_small.png)](screenshots/light_blue_main_large.png) 29 | 30 | ## Installation 31 | To install this theme search for 'Material theme' in your Jenkins update center. 32 | 33 | ## Configuration 34 | Go to the "Configure System" page, search for 'Built-in Themes' and select 'Material - Indigo' or 'Material - Red' 35 | 36 | Or with the [configuration-as-code](https://github.com/jenkinsci/configuration-as-code-plugin) plugin: 37 | 38 | ```yaml 39 | unclassified: 40 | themeManager: 41 | disableUserThemes: true 42 | theme: "material-indigo" # or 'material-red' or 'material-grey' or 'material-light-blue' 43 | ``` 44 | 45 | ## Running (development) 46 | To build and run this plugin you should only need to run: 47 | ``` 48 | mvn clean hpi:run 49 | ``` 50 | 51 | ## Development tools 52 | Here is a list of the tools (and versions) I have in my development enviornment - outside of those handeled in the pom.xml. 53 | Java 11 54 | Maven 3.5 55 | 56 | 57 | ## Releasing 58 | To release a new version of this plugin, please follow these steps: 59 | https://www.jenkins.io/doc/developer/publishing/releasing/ 60 | 61 | ## Disclaimer 62 | I am not a front-end web or Java developer. The CCS in the project has mostly been copied from http://afonsof.com/jenkins-material-theme/. The Java in this project has modified from the dark theme plugin (https://github.com/jenkinsci/dark-theme-plugin). 63 | 64 | ## Future work 65 | - Add the ability for users to define custom theme pallets. 66 | - Need to add tests to check: 67 | - That when a theme is loaded through the UI, that the correct theme is loaded. 68 | 69 | ## Thanks to 70 | - [Jenkins Material Theme][jenkins-material-theme] for the original theme. 71 | - [jenkins-contrib-theme][jenkins-contrib-theme] for the core theme 72 | - [Google][google] for the the material design inspiration and the icons 73 | - [Material Design Icons][material-design-icons] for some extra icons 74 | - [Theme Manager][theme-manager-plugin] for the base plugin. 75 | - [Dark Theme for Jenkins][dark-theme-plugin] for a good example of using the theme manager. 76 | 77 | [jenkins-contrib-theme]: https://github.com/jenkins-contrib-themes/jenkins-core-theme 78 | [google]: https://www.google.com/design/spec/material-design/introduction.html 79 | [material-design-icons]: https://materialdesignicons.com/ 80 | [jenkins-material-theme]: https://github.com/afonsof/jenkins-material-theme 81 | [theme-manager-plugin]: https://plugins.jenkins.io/theme-manager/ 82 | [dark-theme-plugin]: https://plugins.jenkins.io/dark-theme/ 83 | -------------------------------------------------------------------------------- /pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4.0.0 4 | 5 | org.jenkins-ci.plugins 6 | plugin 7 | 4.47 8 | 9 | 10 | io.jenkins.plugins 11 | material-theme 12 | ${revision}${changelist} 13 | hpi 14 | 15 | 0.5.2 16 | -SNAPSHOT 17 | jenkinsci/material-theme-plugin 18 | 2.346.1 19 | @{project.version} 20 | true 21 | 22 | Material Theme 23 | https://github.com/jenkinsci/material-theme-plugin 24 | 25 | 26 | 27 | io.jenkins.tools.bom 28 | bom-2.346.x 29 | 1607.va_c1576527071 30 | import 31 | pom 32 | 33 | 34 | 35 | 36 | 37 | 38 | io.jenkins.plugins 39 | theme-manager 40 | 1.5 41 | 42 | 43 | io.jenkins 44 | configuration-as-code 45 | test 46 | 47 | 48 | io.jenkins.configuration-as-code 49 | test-harness 50 | test 51 | 52 | 53 | 54 | 55 | 56 | MIT License 57 | https://opensource.org/licenses/MIT 58 | 59 | 60 | 61 | 62 | 63 | timbrown5 64 | Tim Brown 65 | 66 | 67 | 68 | 69 | scm:git:https://github.com/${gitHubRepo}.git 70 | scm:git:git@github.com:${gitHubRepo}.git 71 | https://github.com/${gitHubRepo} 72 | ${scmTag} 73 | 74 | 75 | 76 | 77 | repo.jenkins-ci.org 78 | https://repo.jenkins-ci.org/public/ 79 | 80 | 81 | 82 | 83 | repo.jenkins-ci.org 84 | https://repo.jenkins-ci.org/public/ 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | ro.isdc.wro4j 93 | wro4j-maven-plugin 94 | 1.7.0 95 | 96 | ro.isdc.wro.maven.plugin.manager.factory.ConfigurableWroManagerFactory 97 | ${basedir}/src/main/config/wro.xml 98 | ${basedir}/src/main/config/wro.properties 99 | light-theme 100 | ${project.build.directory}/../src/main/webapp/ 101 | ${basedir}/src/main/webapp/ 102 | true 103 | 104 | 105 | 106 | 107 | run 108 | 109 | generate-resources 110 | 111 | 112 | 113 | 114 | 115 | 116 | -------------------------------------------------------------------------------- /src/main/webapp/resources/fonts/License.txt: -------------------------------------------------------------------------------- 1 | 2 | Apache License 3 | Version 2.0, January 2004 4 | http://www.apache.org/licenses/ 5 | 6 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 7 | 8 | 1. Definitions. 9 | 10 | "License" shall mean the terms and conditions for use, reproduction, 11 | and distribution as defined by Sections 1 through 9 of this document. 12 | 13 | "Licensor" shall mean the copyright owner or entity authorized by 14 | the copyright owner that is granting the License. 15 | 16 | "Legal Entity" shall mean the union of the acting entity and all 17 | other entities that control, are controlled by, or are under common 18 | control with that entity. For the purposes of this definition, 19 | "control" means (i) the power, direct or indirect, to cause the 20 | direction or management of such entity, whether by contract or 21 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 22 | outstanding shares, or (iii) beneficial ownership of such entity. 23 | 24 | "You" (or "Your") shall mean an individual or Legal Entity 25 | exercising permissions granted by this License. 26 | 27 | "Source" form shall mean the preferred form for making modifications, 28 | including but not limited to software source code, documentation 29 | source, and configuration files. 30 | 31 | "Object" form shall mean any form resulting from mechanical 32 | transformation or translation of a Source form, including but 33 | not limited to compiled object code, generated documentation, 34 | and conversions to other media types. 35 | 36 | "Work" shall mean the work of authorship, whether in Source or 37 | Object form, made available under the License, as indicated by a 38 | copyright notice that is included in or attached to the work 39 | (an example is provided in the Appendix below). 40 | 41 | "Derivative Works" shall mean any work, whether in Source or Object 42 | form, that is based on (or derived from) the Work and for which the 43 | editorial revisions, annotations, elaborations, or other modifications 44 | represent, as a whole, an original work of authorship. For the purposes 45 | of this License, Derivative Works shall not include works that remain 46 | separable from, or merely link (or bind by name) to the interfaces of, 47 | the Work and Derivative Works thereof. 48 | 49 | "Contribution" shall mean any work of authorship, including 50 | the original version of the Work and any modifications or additions 51 | to that Work or Derivative Works thereof, that is intentionally 52 | submitted to Licensor for inclusion in the Work by the copyright owner 53 | or by an individual or Legal Entity authorized to submit on behalf of 54 | the copyright owner. For the purposes of this definition, "submitted" 55 | means any form of electronic, verbal, or written communication sent 56 | to the Licensor or its representatives, including but not limited to 57 | communication on electronic mailing lists, source code control systems, 58 | and issue tracking systems that are managed by, or on behalf of, the 59 | Licensor for the purpose of discussing and improving the Work, but 60 | excluding communication that is conspicuously marked or otherwise 61 | designated in writing by the copyright owner as "Not a Contribution." 62 | 63 | "Contributor" shall mean Licensor and any individual or Legal Entity 64 | on behalf of whom a Contribution has been received by Licensor and 65 | subsequently incorporated within the Work. 66 | 67 | 2. Grant of Copyright License. Subject to the terms and conditions of 68 | this License, each Contributor hereby grants to You a perpetual, 69 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 70 | copyright license to reproduce, prepare Derivative Works of, 71 | publicly display, publicly perform, sublicense, and distribute the 72 | Work and such Derivative Works in Source or Object form. 73 | 74 | 3. Grant of Patent License. Subject to the terms and conditions of 75 | this License, each Contributor hereby grants to You a perpetual, 76 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 77 | (except as stated in this section) patent license to make, have made, 78 | use, offer to sell, sell, import, and otherwise transfer the Work, 79 | where such license applies only to those patent claims licensable 80 | by such Contributor that are necessarily infringed by their 81 | Contribution(s) alone or by combination of their Contribution(s) 82 | with the Work to which such Contribution(s) was submitted. If You 83 | institute patent litigation against any entity (including a 84 | cross-claim or counterclaim in a lawsuit) alleging that the Work 85 | or a Contribution incorporated within the Work constitutes direct 86 | or contributory patent infringement, then any patent licenses 87 | granted to You under this License for that Work shall terminate 88 | as of the date such litigation is filed. 89 | 90 | 4. Redistribution. You may reproduce and distribute copies of the 91 | Work or Derivative Works thereof in any medium, with or without 92 | modifications, and in Source or Object form, provided that You 93 | meet the following conditions: 94 | 95 | (a) You must give any other recipients of the Work or 96 | Derivative Works a copy of this License; and 97 | 98 | (b) You must cause any modified files to carry prominent notices 99 | stating that You changed the files; and 100 | 101 | (c) You must retain, in the Source form of any Derivative Works 102 | that You distribute, all copyright, patent, trademark, and 103 | attribution notices from the Source form of the Work, 104 | excluding those notices that do not pertain to any part of 105 | the Derivative Works; and 106 | 107 | (d) If the Work includes a "NOTICE" text file as part of its 108 | distribution, then any Derivative Works that You distribute must 109 | include a readable copy of the attribution notices contained 110 | within such NOTICE file, excluding those notices that do not 111 | pertain to any part of the Derivative Works, in at least one 112 | of the following places: within a NOTICE text file distributed 113 | as part of the Derivative Works; within the Source form or 114 | documentation, if provided along with the Derivative Works; or, 115 | within a display generated by the Derivative Works, if and 116 | wherever such third-party notices normally appear. The contents 117 | of the NOTICE file are for informational purposes only and 118 | do not modify the License. You may add Your own attribution 119 | notices within Derivative Works that You distribute, alongside 120 | or as an addendum to the NOTICE text from the Work, provided 121 | that such additional attribution notices cannot be construed 122 | as modifying the License. 123 | 124 | You may add Your own copyright statement to Your modifications and 125 | may provide additional or different license terms and conditions 126 | for use, reproduction, or distribution of Your modifications, or 127 | for any such Derivative Works as a whole, provided Your use, 128 | reproduction, and distribution of the Work otherwise complies with 129 | the conditions stated in this License. 130 | 131 | 5. Submission of Contributions. Unless You explicitly state otherwise, 132 | any Contribution intentionally submitted for inclusion in the Work 133 | by You to the Licensor shall be under the terms and conditions of 134 | this License, without any additional terms or conditions. 135 | Notwithstanding the above, nothing herein shall supersede or modify 136 | the terms of any separate license agreement you may have executed 137 | with Licensor regarding such Contributions. 138 | 139 | 6. Trademarks. This License does not grant permission to use the trade 140 | names, trademarks, service marks, or product names of the Licensor, 141 | except as required for reasonable and customary use in describing the 142 | origin of the Work and reproducing the content of the NOTICE file. 143 | 144 | 7. Disclaimer of Warranty. Unless required by applicable law or 145 | agreed to in writing, Licensor provides the Work (and each 146 | Contributor provides its Contributions) on an "AS IS" BASIS, 147 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 148 | implied, including, without limitation, any warranties or conditions 149 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 150 | PARTICULAR PURPOSE. You are solely responsible for determining the 151 | appropriateness of using or redistributing the Work and assume any 152 | risks associated with Your exercise of permissions under this License. 153 | 154 | 8. Limitation of Liability. In no event and under no legal theory, 155 | whether in tort (including negligence), contract, or otherwise, 156 | unless required by applicable law (such as deliberate and grossly 157 | negligent acts) or agreed to in writing, shall any Contributor be 158 | liable to You for damages, including any direct, indirect, special, 159 | incidental, or consequential damages of any character arising as a 160 | result of this License or out of the use or inability to use the 161 | Work (including but not limited to damages for loss of goodwill, 162 | work stoppage, computer failure or malfunction, or any and all 163 | other commercial damages or losses), even if such Contributor 164 | has been advised of the possibility of such damages. 165 | 166 | 9. Accepting Warranty or Additional Liability. While redistributing 167 | the Work or Derivative Works thereof, You may choose to offer, 168 | and charge a fee for, acceptance of support, warranty, indemnity, 169 | or other liability obligations and/or rights consistent with this 170 | License. However, in accepting such obligations, You may act only 171 | on Your own behalf and on Your sole responsibility, not on behalf 172 | of any other Contributor, and only if You agree to indemnify, 173 | defend, and hold each Contributor harmless for any liability 174 | incurred by, or claims asserted against, such Contributor by reason 175 | of your accepting any such warranty or additional liability. 176 | 177 | END OF TERMS AND CONDITIONS 178 | 179 | APPENDIX: How to apply the Apache License to your work. 180 | 181 | To apply the Apache License to your work, attach the following 182 | boilerplate notice, with the fields enclosed by brackets "[]" 183 | replaced with your own identifying information. (Don't include 184 | the brackets!) The text should be enclosed in the appropriate 185 | comment syntax for the file format. We also recommend that a 186 | file or class name and description of purpose be included on the 187 | same "printed page" as the copyright notice for easier 188 | identification within third-party archives. 189 | 190 | Copyright [yyyy] [name of copyright owner] 191 | 192 | Licensed under the Apache License, Version 2.0 (the "License"); 193 | you may not use this file except in compliance with the License. 194 | You may obtain a copy of the License at 195 | 196 | http://www.apache.org/licenses/LICENSE-2.0 197 | 198 | Unless required by applicable law or agreed to in writing, software 199 | distributed under the License is distributed on an "AS IS" BASIS, 200 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 201 | See the License for the specific language governing permissions and 202 | limitations under the License. 203 | -------------------------------------------------------------------------------- /src/main/webapp/material-theme.css: -------------------------------------------------------------------------------- 1 | /* roboto-300 - latin */ 2 | @font-face { 3 | font-family: 'Roboto'; 4 | font-style: normal; 5 | font-weight: 300; 6 | src: url('../plugin/material-theme/resources/fonts/roboto-v30-latin-300.eot'); /* IE9 Compat Modes */ 7 | src: local(''), 8 | url('../plugin/material-theme/resources/fonts/roboto-v30-latin-300.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ 9 | url('../plugin/material-theme/resources/fonts/roboto-v30-latin-300.woff2') format('woff2'), /* Super Modern Browsers */ 10 | url('../plugin/material-theme/resources/fonts/roboto-v30-latin-300.woff') format('woff'), /* Modern Browsers */ 11 | url('../plugin/material-theme/resources/fonts/roboto-v30-latin-300.ttf') format('truetype'), /* Safari, Android, iOS */ 12 | url('../plugin/material-theme/resources/fonts/roboto-v30-latin-300.svg#Roboto') format('svg'); /* Legacy iOS */ 13 | } 14 | 15 | /* roboto-regular - latin */ 16 | @font-face { 17 | font-family: 'Roboto'; 18 | font-style: normal; 19 | font-weight: 400; 20 | src: url('../plugin/material-theme/resources/fonts/roboto-v30-latin-regular.eot'); /* IE9 Compat Modes */ 21 | src: local(''), 22 | url('../plugin/material-theme/resources/fonts/roboto-v30-latin-regular.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ 23 | url('../plugin/material-theme/resources/fonts/roboto-v30-latin-regular.woff2') format('woff2'), /* Super Modern Browsers */ 24 | url('../plugin/material-theme/resources/fonts/roboto-v30-latin-regular.woff') format('woff'), /* Modern Browsers */ 25 | url('../plugin/material-theme/resources/fonts/roboto-v30-latin-regular.ttf') format('truetype'), /* Safari, Android, iOS */ 26 | url('../plugin/material-theme/resources/fonts/roboto-v30-latin-regular.svg#Roboto') format('svg'); /* Legacy iOS */ 27 | } 28 | 29 | /* roboto-500 - latin */ 30 | @font-face { 31 | font-family: 'Roboto'; 32 | font-style: normal; 33 | font-weight: 500; 34 | src: url('../plugin/material-theme/resources/fonts/roboto-v30-latin-500.eot'); /* IE9 Compat Modes */ 35 | src: local(''), 36 | url('../plugin/material-theme/resources/fonts/roboto-v30-latin-500.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ 37 | url('../plugin/material-theme/resources/fonts/roboto-v30-latin-500.woff2') format('woff2'), /* Super Modern Browsers */ 38 | url('../plugin/material-theme/resources/fonts/roboto-v30-latin-500.woff') format('woff'), /* Modern Browsers */ 39 | url('../plugin/material-theme/resources/fonts/roboto-v30-latin-500.ttf') format('truetype'), /* Safari, Android, iOS */ 40 | url('../plugin/material-theme/resources/fonts/roboto-v30-latin-500.svg#Roboto') format('svg'); /* Legacy iOS */ 41 | } 42 | 43 | /* roboto-700 - latin */ 44 | @font-face { 45 | font-family: 'Roboto'; 46 | font-style: normal; 47 | font-weight: 700; 48 | src: url('../plugin/material-theme/resources/fonts/roboto-v30-latin-700.eot'); /* IE9 Compat Modes */ 49 | src: local(''), 50 | url('../plugin/material-theme/resources/fonts/roboto-v30-latin-700.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ 51 | url('../plugin/material-theme/resources/fonts/roboto-v30-latin-700.woff2') format('woff2'), /* Super Modern Browsers */ 52 | url('../plugin/material-theme/resources/fonts/roboto-v30-latin-700.woff') format('woff'), /* Modern Browsers */ 53 | url('../plugin/material-theme/resources/fonts/roboto-v30-latin-700.ttf') format('truetype'), /* Safari, Android, iOS */ 54 | url('../plugin/material-theme/resources/fonts/roboto-v30-latin-700.svg#Roboto') format('svg'); /* Legacy iOS */ 55 | } 56 | 57 | /* roboto-mono-300 - latin */ 58 | @font-face { 59 | font-family: 'Roboto Mono'; 60 | font-style: normal; 61 | font-weight: 300; 62 | src: url('../plugin/material-theme/resources/fonts/roboto-mono-v22-latin-300.eot'); /* IE9 Compat Modes */ 63 | src: local(''), 64 | url('../plugin/material-theme/resources/fonts/roboto-mono-v22-latin-300.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ 65 | url('../plugin/material-theme/resources/fonts/roboto-mono-v22-latin-300.woff2') format('woff2'), /* Super Modern Browsers */ 66 | url('../plugin/material-theme/resources/fonts/roboto-mono-v22-latin-300.woff') format('woff'), /* Modern Browsers */ 67 | url('../plugin/material-theme/resources/fonts/roboto-mono-v22-latin-300.ttf') format('truetype'), /* Safari, Android, iOS */ 68 | url('../plugin/material-theme/resources/fonts/roboto-mono-v22-latin-300.svg#RobotoMono') format('svg'); /* Legacy iOS */ 69 | } 70 | 71 | /* roboto-mono-regular - latin */ 72 | @font-face { 73 | font-family: 'Roboto Mono'; 74 | font-style: normal; 75 | font-weight: 400; 76 | src: url('../plugin/material-theme/resources/fonts/roboto-mono-v22-latin-regular.eot'); /* IE9 Compat Modes */ 77 | src: local(''), 78 | url('../plugin/material-theme/resources/fonts/roboto-mono-v22-latin-regular.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ 79 | url('../plugin/material-theme/resources/fonts/roboto-mono-v22-latin-regular.woff2') format('woff2'), /* Super Modern Browsers */ 80 | url('../plugin/material-theme/resources/fonts/roboto-mono-v22-latin-regular.woff') format('woff'), /* Modern Browsers */ 81 | url('../plugin/material-theme/resources/fonts/roboto-mono-v22-latin-regular.ttf') format('truetype'), /* Safari, Android, iOS */ 82 | url('../plugin/material-theme/resources/fonts/roboto-mono-v22-latin-regular.svg#RobotoMono') format('svg'); /* Legacy iOS */ 83 | } 84 | 85 | /* roboto-mono-500 - latin */ 86 | @font-face { 87 | font-family: 'Roboto Mono'; 88 | font-style: normal; 89 | font-weight: 500; 90 | src: url('../plugin/material-theme/resources/fonts/roboto-mono-v22-latin-500.eot'); /* IE9 Compat Modes */ 91 | src: local(''), 92 | url('../plugin/material-theme/resources/fonts/roboto-mono-v22-latin-500.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ 93 | url('../plugin/material-theme/resources/fonts/roboto-mono-v22-latin-500.woff2') format('woff2'), /* Super Modern Browsers */ 94 | url('../plugin/material-theme/resources/fonts/roboto-mono-v22-latin-500.woff') format('woff'), /* Modern Browsers */ 95 | url('../plugin/material-theme/resources/fonts/roboto-mono-v22-latin-500.ttf') format('truetype'), /* Safari, Android, iOS */ 96 | url('../plugin/material-theme/resources/fonts/roboto-mono-v22-latin-500.svg#RobotoMono') format('svg'); /* Legacy iOS */ 97 | } 98 | 99 | /* roboto-mono-700 - latin */ 100 | @font-face { 101 | font-family: 'Roboto Mono'; 102 | font-style: normal; 103 | font-weight: 700; 104 | src: url('../plugin/material-theme/resources/fonts/roboto-mono-v22-latin-700.eot'); /* IE9 Compat Modes */ 105 | src: local(''), 106 | url('../plugin/material-theme/resources/fonts/roboto-mono-v22-latin-700.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ 107 | url('../plugin/material-theme/resources/fonts/roboto-mono-v22-latin-700.woff2') format('woff2'), /* Super Modern Browsers */ 108 | url('../plugin/material-theme/resources/fonts/roboto-mono-v22-latin-700.woff') format('woff'), /* Modern Browsers */ 109 | url('../plugin/material-theme/resources/fonts/roboto-mono-v22-latin-700.ttf') format('truetype'), /* Safari, Android, iOS */ 110 | url('../plugin/material-theme/resources/fonts/roboto-mono-v22-latin-700.svg#RobotoMono') format('svg'); /* Legacy iOS */ 111 | } 112 | 113 | [data-theme=material-red], .app-theme-picker__picker[data-theme=material-red], 114 | [data-theme=material-indigo], .app-theme-picker__picker[data-theme=material-indigo], 115 | [data-theme=material-grey], .app-theme-picker__picker[data-theme=material-grey] , 116 | [data-theme=material-light-blue], .app-theme-picker__picker[data-theme=material-light-blue], 117 | [data-theme=material-green], .app-theme-picker__picker[data-theme=material-green], 118 | [data-theme=material-yellow], .app-theme-picker__picker[data-theme=material-yellow], 119 | [data-theme=material-purple], .app-theme-picker__picker[data-theme=material-purple], 120 | [data-theme=material-lime], .app-theme-picker__picker[data-theme=material-lime], 121 | [data-theme=material-amber], .app-theme-picker__picker[data-theme=material-amber] 122 | { 123 | /* Font */ 124 | --font-family-sans: Roboto !important; 125 | 126 | /* Header */ 127 | --header-bg-classic: var(--material-primary); 128 | --header-link-bg-classic-hover: var(--material-secondary); 129 | --header-link-bg-classic-active: var(--material-secondary); 130 | 131 | /* links */ 132 | --link-color: var(--material-primary); 133 | --link-color--hover: var(--material-secondary); 134 | --link-color--active: var(--material-secondary); 135 | 136 | /* Pane */ 137 | --pane-link-color: var(--material-primary); 138 | --pane-link-color--visited: var(--material-primary); 139 | 140 | /* Buttons */ 141 | --btn-primary-bg: var(--material-primary); 142 | --btn-primary-bg-hover: var(--material-secondary); 143 | --btn-primary-bg-active: var(--primary-active); 144 | --btn-secondary-color: var(--material-primary); 145 | --btn-secondary-bg: var(--btn-text-color); 146 | --btn-secondary-border: var(--material-primary); 147 | --btn-text-color: var(--white); 148 | --btn-link-bg--hover: var(--very-light-grey); 149 | --btn-link-bg--active: var(--light-grey); 150 | 151 | /* Table */ 152 | --bigtable-header-bg: var(--light-grey); 153 | --bigtable-header-border-color: var(--light-grey); 154 | --bigtable-header-text-color: var(--dark-grey); 155 | --bigtable-row-border-color: var(--light-grey); 156 | /* Remove if you don't light the alternating coloured rows */ 157 | --even-row-color: var(--very-light-grey); 158 | --table-striped-bg--hover: var(--very-light-grey); 159 | 160 | /* Tab bar widget */ 161 | --tab-link-border-color: var(--light-grey); 162 | --tab-link-text-color: var(--dark-grey); 163 | --tab-link-checked-bg: var(--light-grey); 164 | --tab-link-checked-text-color: var(--dark-grey); 165 | --tab-link-bg--hover: var(--light-grey); 166 | --tab-link-bg--active: var(--light-grey); 167 | --tab-link-bg: var(--very-light-grey); 168 | } 169 | 170 | /* Manually change some header settings (these aren't available through theme.less */ 171 | [data-theme=material-red] #header, 172 | [data-theme=material-indigo] #header, 173 | [data-theme=material-grey] #header, 174 | [data-theme=material-light-blue] #header, 175 | [data-theme=material-green] #header, 176 | [data-theme=material-yellow] #header, 177 | [data-theme=material-purple] #header, 178 | [data-theme=material-lime] #header, 179 | [data-theme=material-amber] #header 180 | { 181 | height: 64px; 182 | text-transform: uppercase; 183 | padding: 12px 10px; 184 | } 185 | 186 | /* Change tab background so tabs don't float when there are multiple rows 187 | this doesn't look great, but I think it's less bad than when it's left white. */ 188 | [data-theme=material-red] .tabBarFrame, 189 | [data-theme=material-indigo] .tabBarFrame, 190 | [data-theme=material-grey] .tabBarFrame, 191 | [data-theme=material-light-blue] .tabBarFrame, 192 | [data-theme=material-green] .tabBarFrame, 193 | [data-theme=material-yellow] .tabBarFrame, 194 | [data-theme=material-purple] .tabBarFrame, 195 | [data-theme=material-lime] .tabBarFrame, 196 | [data-theme=material-amber] .tabBarFrame 197 | { 198 | position: relative; 199 | background: var(--very-light-grey); 200 | } 201 | 202 | [data-theme=material-red] .yui-button button, 203 | [data-theme=material-indigo] .yui-button button, 204 | [data-theme=material-grey] .yui-button button, 205 | [data-theme=material-light-blue] .yui-button button, 206 | [data-theme=material-green] .yui-button button, 207 | [data-theme=material-yellow] .yui-button button, 208 | [data-theme=material-purple] .yui-button button, 209 | [data-theme=material-lime] .yui-button button, 210 | [data-theme=material-amber] .yui-button button 211 | { 212 | text-transform: uppercase; 213 | } 214 | 215 | [data-theme=material-red] a, [data-theme=material-red] a:link, [data-theme=material-red] a:hover, [data-theme=material-red] a:visited, 216 | [data-theme=material-indigo] a, [data-theme=material-indigo] a:link, [data-theme=material-indigo] a:hover, [data-theme=material-indigo] a:visited, 217 | [data-theme=material-grey] a, [data-theme=material-grey] a:link, [data-theme=material-grey] a:hover, [data-theme=material-grey] a:visited, 218 | [data-theme=material-light-blue] a, [data-theme=material-light-blue] a:link, [data-theme=material-light-blue] a:hover, [data-theme=material-light-blue] a:visited, 219 | [data-theme=material-green] a, [data-theme=material-green] a:link, [data-theme=material-green] a:hover, [data-theme=material-green] a:visited, 220 | [data-theme=material-yellow] a, [data-theme=material-yellow] a:link, [data-theme=material-yellow] a:hover, [data-theme=material-yellow] a:visited, 221 | [data-theme=material-purple] a, [data-theme=material-purple] a:link, [data-theme=material-purple] a:hover, [data-theme=material-purple] a:visited, 222 | [data-theme=material-lime] a, [data-theme=material-lime] a:link, [data-theme=material-lime] a:hover, [data-theme=material-lime] a:visited, 223 | [data-theme=material-amber] a, [data-theme=material-amber] a:link, [data-theme=material-amber] a:hover, [data-theme=material-amber] a:visited 224 | { 225 | text-decoration: none!important; 226 | } 227 | 228 | [data-theme=material-red] .jenkins_ver:after, 229 | [data-theme=material-indigo] .jenkins_ver:after, 230 | [data-theme=material-grey] .jenkins_ver:after, 231 | [data-theme=material-light-blue] .jenkins_ver:after, 232 | [data-theme=material-green] .jenkins_ver:after, 233 | [data-theme=material-yellow] .jenkins_ver:after, 234 | [data-theme=material-purple] .jenkins_ver:after, 235 | [data-theme=material-lime] .jenkins_ver:after, 236 | [data-theme=material-amber] .jenkins_ver:after 237 | { 238 | margin-left: 15px; 239 | content:"Material Theme Plugin" 240 | } 241 | 242 | /* Console readablity improvements */ 243 | [data-theme=material-red] .console-output, 244 | [data-theme=material-indigo] .console-output, 245 | [data-theme=material-grey] .console-output, 246 | [data-theme=material-light-blue] .console-output, 247 | [data-theme=material-green] .console-output, 248 | [data-theme=material-yellow] .console-output, 249 | [data-theme=material-purple] .console-output, 250 | [data-theme=material-lime] .console-output, 251 | [data-theme=material-amber] .console-output 252 | { 253 | padding: 10px 20px; 254 | } 255 | 256 | [data-theme=material-red] .console-output, [data-theme=material-red] .console-output *, 257 | [data-theme=material-indigo] .console-output, [data-theme=material-indigo] .console-output *, 258 | [data-theme=material-grey] .console-output, [data-theme=material-grey] .console-output *, 259 | [data-theme=material-light-blue] .console-output, [data-theme=material-light-blue] .console-output *, 260 | [data-theme=material-green] .console-output, [data-theme=material-green] .console-output *, 261 | [data-theme=material-yellow] .console-output, [data-theme=material-yellow] .console-output *, 262 | [data-theme=material-purple] .console-output, [data-theme=material-purple] .console-output *, 263 | [data-theme=material-lime] .console-output, [data-theme=material-lime] .console-output *, 264 | [data-theme=material-amber] .console-output, [data-theme=material-amber] .console-output * 265 | { 266 | position: relative; 267 | font-family: Roboto Mono,monospace!important; 268 | font-size: 14px; 269 | background: #263238; 270 | cursor: text; 271 | } 272 | 273 | [data-theme=material-red] pre.console-output, 274 | [data-theme=material-indigo] pre.console-output, 275 | [data-theme=material-grey] pre.console-output, 276 | [data-theme=material-light-blue] pre.console-output, 277 | [data-theme=material-green] pre.console-output, 278 | [data-theme=material-yellow] pre.console-output, 279 | [data-theme=material-purple] pre.console-output, 280 | [data-theme=material-lime] pre.console-output, 281 | [data-theme=material-amber] pre.console-output 282 | { 283 | color: #e9eded!important; 284 | } 285 | -------------------------------------------------------------------------------- /src/main/webapp/resources/less/core-theme.less: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2016 Afonso F 2 | [data-theme=material-red], 3 | [data-theme=material-indigo], 4 | [data-theme=material-grey], 5 | [data-theme=material-light-blue], 6 | [data-theme=material-green], 7 | [data-theme=material-yellow], 8 | [data-theme=material-purple], 9 | [data-theme=material-lime], 10 | [data-theme=material-amber] 11 | { 12 | // Copied from functions.less 13 | // Change to use masks - so we can change svg icon color 14 | .icon-img(@url, @icon-color) { 15 | display: inline !important; 16 | background-color: @icon-color !important; 17 | mask-image: url(@url) !important; 18 | mask-repeat: no-repeat !important; 19 | // Backwards compatibility (inc. Chrome) for masks 20 | -webkit-mask-image: url(@url) !important; 21 | -webkit-mask-repeat: no-repeat; 22 | } 23 | 24 | // Generated by https://codepen.io/sosuke/pen/Pjoqqp 25 | .icon(@size) { // outer mixin 26 | @icon-size: @size; 27 | padding-left: @icon-size !important; 28 | padding-top: @icon-size !important; 29 | height: 0 !important; 30 | width: 0 !important; 31 | mask-size: @icon-size @icon-size !important; 32 | // Backwards compatibility (inc. Chrome) for mask size 33 | -webkit-mask-size: @icon-size @icon-size !important; 34 | background-size: 100% 100% !important; 35 | font-size: 0 !important; 36 | } 37 | 38 | .shadow1() { 39 | box-shadow: 0 1px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12); 40 | } 41 | 42 | // Global font 43 | #main-panel > pre { 44 | font-family: Roboto Mono, monospace !important; 45 | } 46 | 47 | // Animations 48 | @keyframes keyframes-rotate { 49 | from { 50 | transform: rotate(0deg); 51 | } 52 | to { 53 | transform: rotate(360deg); 54 | } 55 | } 56 | 57 | .animate-rotate() { 58 | animation: keyframes-rotate 2s linear infinite; 59 | } 60 | 61 | @keyframes keyframes-pulse { 62 | 0% { 63 | opacity: 1; 64 | } 65 | 50% { 66 | opacity: 0; 67 | } 68 | 100% { 69 | opacity: 1; 70 | } 71 | } 72 | 73 | .animate-pulse() { 74 | animation: keyframes-pulse ease-in-out 2s; 75 | animation-iteration-count: infinite; 76 | transform-origin: 50% 50%; 77 | animation-fill-mode: forwards; 78 | } 79 | 80 | // Default Sizes 81 | @size-sm: 18px; 82 | @size-md: 24px; 83 | @size-lg: 36px; 84 | @size-xl: 48px; 85 | 86 | // Src 87 | // Reminder: Each selector using `.icon-img` must be declared bellow using .icon-size too 88 | 89 | .icon-new-package, [src$='new-package.png'] { 90 | .icon-img('../plugin/material-theme/resources/images/add_circle_outline.svg', @color-grey); 91 | } 92 | 93 | .icon-user, [src$='user.png'] { 94 | .icon-img('../plugin/material-theme/resources/images/people.svg', @color-grey); 95 | } 96 | 97 | .icon-notepad, [src$='notepad.png'] { 98 | .icon-img('../plugin/material-theme/resources/images/history.svg', @color-grey); 99 | } 100 | 101 | .icon-setting, [src$='setting.png'], .icon-gear2, [src$='gear2.png'] { 102 | .icon-img('../plugin/material-theme/resources/images/settings.svg', @color-grey); 103 | } 104 | 105 | .icon-up, .task-icon-link[href='/'] img { 106 | .icon-img('../plugin/material-theme/resources/images/arrow_back.svg', @color-grey); 107 | } 108 | 109 | .icon-edit-delete { 110 | .icon-img('../plugin/material-theme/resources/images/delete.svg', @color-grey); 111 | } 112 | 113 | .icon-fingerprint, [src$='fingerprint.png'] { 114 | .icon-img('../plugin/material-theme/resources/images/fingerprint.svg', @color-grey); 115 | } 116 | 117 | .icon-graph, [src$='graph.png'] { 118 | .icon-img('../plugin/material-theme/resources/images/insert_chart.svg', @color-grey); 119 | } 120 | 121 | .icon-collapse { 122 | .icon-img('../plugin/material-theme/resources/images/expand_less.svg', @color-grey); 123 | } 124 | 125 | .icon-expand { 126 | .icon-img('../plugin/material-theme/resources/images/expand_more.svg', @color-grey); 127 | } 128 | 129 | .icon-help, [src$='help.png'] { 130 | .icon-img('../plugin/material-theme/resources/images/help_outline.svg', @color-grey); 131 | } 132 | 133 | .icon-secure, .icon-lock, [src$='secure.png'] { 134 | .icon-img('../plugin/material-theme/resources/images/lock.svg', @color-grey); 135 | } 136 | 137 | .icon-plugin, [src$='plugin.png'] { 138 | .icon-img('../plugin/material-theme/resources/images/extension.svg', @color-grey); 139 | } 140 | 141 | .icon-system-log-out, [src$='system-log-out.png'] { 142 | .icon-img('../plugin/material-theme/resources/images/power_settings_new.svg', @color-grey); 143 | } 144 | 145 | .icon-refresh, [src$='refresh.png'] { 146 | .icon-img('../plugin/material-theme/resources/images/refresh.svg', @color-grey); 147 | } 148 | 149 | .icon-computer, [src$='computer.png'] { 150 | .icon-img('../plugin/material-theme/resources/images/computer.svg', @color-grey); 151 | } 152 | 153 | .icon-computer-x { 154 | .icon-img('../plugin/material-theme/resources/images/computer_offline.svg', @color-grey); 155 | } 156 | 157 | .icon-new-computer { 158 | .icon-img('../plugin/material-theme/resources/images/computer_new.svg', @color-grey); 159 | } 160 | 161 | .icon-clipboard, [src$='clipboard.png'] { 162 | .icon-img('../plugin/material-theme/resources/images/assignment.svg', @color-grey); 163 | } 164 | 165 | .icon-monitor, [src$='monitor.png'] { 166 | .icon-img('../plugin/material-theme/resources/images/chart-areaspline.svg', @color-grey); 167 | } 168 | 169 | .icon-network, [src$='network.png'] { 170 | .icon-img('../plugin/material-theme/resources/images/server-network.svg', @color-grey); 171 | } 172 | 173 | .icon-document, .icon-text { 174 | .icon-img('../plugin/material-theme/resources/images/file.svg', @color-grey); 175 | } 176 | 177 | .icon-folder, [src$='folder.png'], [src$='/directory16.png'] { 178 | .icon-img('../plugin/material-theme/resources/images/folder.svg', @color-grey); 179 | } 180 | 181 | .icon-clock, .icon-clock-anime, [src$='clock.png'] { 182 | .icon-img('../plugin/material-theme/resources/images/play_circle_outline.svg', @color-grey); 183 | } 184 | 185 | .icon-folder-delete, [src$='edit-delete.png'] { 186 | .icon-img('../plugin/material-theme/resources/images/folder-remove.svg', @color-grey); 187 | } 188 | 189 | .icon-previous { 190 | .icon-img('../plugin/material-theme/resources/images/skip_previous.svg', @color-grey); 191 | } 192 | 193 | .icon-next { 194 | .icon-img('../plugin/material-theme/resources/images/skip_next.svg', @color-grey); 195 | } 196 | 197 | .icon-save, [src$='/save.png'] { 198 | .icon-img('../plugin/material-theme/resources/images/save.svg', @color-grey); 199 | } 200 | 201 | .icon-package, [src$='package.gif'] { 202 | .icon-img('../plugin/material-theme/resources/images/package-down.svg', @color-grey); 203 | } 204 | 205 | .icon-search, [src$='search.png'] { 206 | .icon-img('../plugin/material-theme/resources/images/info_outline.svg', @color-grey); 207 | } 208 | 209 | .icon-stop { 210 | .icon-img('../plugin/material-theme/resources/images/stop.svg', @color-grey); 211 | } 212 | 213 | [src$='/move.png'] { 214 | .icon-img('../plugin/material-theme/resources/images/folder-move.svg', @color-grey); 215 | } 216 | 217 | [src$='/atom.gif'] { 218 | .icon(@size-md); 219 | .icon-img('../plugin/material-theme/resources/images/rss-box.svg', @color-yellow); 220 | } 221 | 222 | [src$='confighistory.png'] { 223 | .icon-img('../plugin/material-theme/resources/images/build.svg', @color-grey); 224 | } 225 | 226 | [src$='domain.png'] { 227 | .icon(@size-xl); 228 | .icon-img('../plugin/material-theme/resources/images/domain.svg', @color-grey); 229 | } 230 | 231 | #description-link img, .icon-gear, [src$='gear.png'] { 232 | .icon-img('../plugin/material-theme/resources/images/pencil.svg', @color-grey); 233 | } 234 | 235 | .icon-go-next { 236 | .icon-img('../plugin/material-theme/resources/images/arrow_forward.svg', @color-grey); 237 | } 238 | 239 | [src$='diskusage48.png'] { 240 | .icon(@size-xl); 241 | .icon-img('../plugin/material-theme/resources/images/storage.svg', @color-grey); 242 | } 243 | 244 | [src$='git-32x32.png'] { 245 | // Force the 32x32 logo to be 24x24 - as it is much bigger that the others in the build menu. 246 | .icon(@size-md); 247 | .icon-img('../plugin/material-theme/resources/images/git.svg', @color-grey); 248 | } 249 | 250 | [src$='git-48x48.png'] { 251 | .icon(@size-xl); 252 | .icon-img('../plugin/material-theme/resources/images/git.svg', @color-grey); 253 | } 254 | 255 | [src$='logov3.png'] { 256 | .icon-img('../plugin/material-theme/resources/images/github-circle.svg', @color-grey); 257 | } 258 | 259 | [src$='findbugs-24x24.png'], [src$='findbugs-48x48.png'] { 260 | .icon-img('../plugin/material-theme/resources/images/bug_report.svg', @color-grey); 261 | } 262 | 263 | [src$='dry-24x24.png'], [src$='dry-48x48.png'] { 264 | .icon-img('../plugin/material-theme/resources/images/compare.svg', @color-grey); 265 | } 266 | 267 | [src$='checkstyle-24x24.png'], [src$='checkstyle-48x48.png'] { 268 | .icon-img('../plugin/material-theme/resources/images/flag.svg', @color-grey); 269 | } 270 | 271 | [src$='pmd-24x24.png'], [src$='pmd-48x48.png'] { 272 | .icon-img('../plugin/material-theme/resources/images/feedback.svg', @color-grey); 273 | } 274 | 275 | [src$='tasks-24x24.png'], [src$='tasks-48x48.png'] { 276 | .icon-img('../plugin/material-theme/resources/images/assignment_late.svg', @color-grey); 277 | } 278 | 279 | [src$='analysis-24x24.png'], [src$='analysis-48x48.png'], 280 | [src$='go-24x24.png'], [src$='go-48x48.png'], 281 | [src$='idea-24x24.png'], [src$='idea-48x48.png'], 282 | [src$='java-24x24.png'], [src$='java-48x48.png'], 283 | [src$='resharper-24x24.png'], [src$='resharper-48x48.png'], 284 | [src$='scala-24x24.png'], [src$='scala-48x48.png'], 285 | [src$='warnings-24x24.png'], [src$='warnings-48x48.png'] { 286 | .icon-img('../plugin/material-theme/resources/images/warning.svg', @color-grey); 287 | } 288 | 289 | // Size 290 | .icon-new-package, [src$='new-package.png'], 291 | .icon-user, [src$='user.png'], 292 | .icon-notepad, [src$='notepad.png'], 293 | .icon-setting, [src$='setting.png'], 294 | .icon-gear2, [src$='gear2.png'], 295 | .icon-up, 296 | .icon-edit-delete, 297 | .icon-fingerprint, [src$='fingerprint.png'], 298 | .icon-graph, [src$='graph.png'], 299 | .icon-collapse, 300 | .icon-expand, 301 | .icon-help, [src$='help.png'], 302 | .icon-secure, .icon-lock, [src$='secure.png'], 303 | .icon-plugin, [src$='plugin.png'], 304 | .icon-system-log-out, [src$='system-log-out.png'], 305 | .icon-refresh, [src$='refresh.png'], 306 | .icon-computer, [src$='computer.png'], 307 | .icon-computer-x, 308 | .icon-new-computer, 309 | .icon-clipboard, [src$='clipboard.png'], 310 | .icon-monitor, [src$='monitor.png'], 311 | .icon-network, [src$='network.png'], 312 | .icon-document, .icon-text, 313 | .icon-folder, [src$='folder.png'], [src$='/directory16.png'], 314 | .icon-clock, .icon-clock-anime, [src$='clock.png'], 315 | .icon-folder-delete, [src$='edit-delete.png'], 316 | .icon-previous, 317 | .icon-next, 318 | .icon-save, [src$='/save.png'], 319 | .icon-package, [src$='package.gif'], 320 | .icon-search, [src$='search.png'], 321 | .icon-stop, 322 | [src$='/move.png'], 323 | [src$='/atom.gif'], 324 | [src$='confighistory.png'], 325 | [src$='domain.png'], 326 | #description-link img, .icon-gear, [src$='gear.png'], 327 | .icon-go-next, 328 | [src$='diskusage48.png'], 329 | [src$='findbugs-24x24.png'], [src$='findbugs-48x48.png'], 330 | [src$='checkstyle-24x24.png'], [src$='checkstyle-48x48.png'], 331 | [src$='analysis-24x24.png'], [src$='analysis-48x48.png'], 332 | [src$='go-24x24.png'], [src$='go-48x48.png'], 333 | [src$='idea-24x24.png'], [src$='idea-48x48.png'], 334 | [src$='java-24x24.png'], [src$='java-48x48.png'], 335 | [src$='resharper-24x24.png'], [src$='resharper-48x48.png'], 336 | [src$='scala-24x24.png'], [src$='scala-48x48.png'], 337 | [src$='warnings-24x24.png'], [src$='warnings-48x48.png'], 338 | [src$='dry-24x24.png'], [src$='dry-48x48.png'], 339 | [src$='pmd-24x24.png'], [src$='pmd-48x48.png'], 340 | [src$='tasks-24x24.png'], [src$='tasks-48x48.png'], 341 | [src$='logov3.png'] { 342 | 343 | &.icon-xlg, &[src*='48x'], &.icon48x48 { 344 | .icon(@size-xl); 345 | } 346 | 347 | &.icon-lg, &[src*='32x'], &.icon32x32, &[style*='width: 32p'], &[width="32"] { 348 | .icon(@size-lg); 349 | } 350 | 351 | &.icon-md, &[src*='24x'], &.icon24x24, &[style*='width: 24p'], &[width="24"] { 352 | .icon(@size-md); 353 | } 354 | 355 | &.icon-sm, &[src*='16x'], &.icon16x16, &[style*='width: 16p'], &[width="16"] { 356 | .icon(@size-sm); 357 | } 358 | } 359 | 360 | #header { 361 | .icon-help { 362 | filter: brightness(10000); 363 | } 364 | } 365 | 366 | // Hacks 367 | 368 | [src*='www.gravatar.com'] { 369 | height: auto !important; 370 | width: auto !important; 371 | padding: 0 !important; 372 | } 373 | 374 | .task-icon-link[href='/'] { 375 | img { 376 | padding: 36px 0 0 36px !important; 377 | filter: brightness(10000); 378 | } 379 | } 380 | 381 | 382 | // Extensions - Added since port to Theme Manage 383 | // Multi-branch Pipelines 384 | .icon-pipeine-multibranch-project, [src$='pipelinemultibranchproject.png'] { 385 | .icon-img('../plugin/material-theme/resources/images/source-repository-multiple.svg', @color-grey); 386 | } 387 | 388 | // Lockable Resources 389 | .icon-device, 390 | [src$='device-24x24.png'], [src$='device-48x48.png'] { 391 | .icon-img('../plugin/material-theme/resources/images/devices.svg', @color-grey); 392 | } 393 | 394 | // Document (Manage Old Data) 395 | .icon-document, [src$='document.png'] { 396 | .icon-img('../plugin/material-theme/resources/images/file-document.svg', @color-grey); 397 | } 398 | 399 | // Disk (Disk Usage) 400 | .icon-disk, [src$='disk.png'] { 401 | .icon(@size-xl); 402 | .icon-img('../plugin/material-theme/resources/images/harddisk.svg', @color-grey); 403 | } 404 | 405 | // Docker 406 | .icon-docker, [src$='docker.png'] { 407 | // Set default size, as path doesn't contain one (for the regular expressions in Extension sizes) 408 | .icon(@size-xl); 409 | .icon-img('../plugin/material-theme/resources/images/docker.svg', @color-grey); 410 | } 411 | 412 | // Health pulse (monitor) 413 | .icon-monitor, [src$='monitor.gif'] { 414 | .icon-img('../plugin/material-theme/resources/images/clipboard-pulse.svg', @color-grey); 415 | } 416 | 417 | // Pause build 418 | [src$='pause.png'] { 419 | .icon-img('../plugin/material-theme/resources/images/play-pause.svg', @color-grey); 420 | } 421 | 422 | // Replay build 423 | .icon-repo, [src$='redo.png'] { 424 | .icon-img('../plugin/material-theme/resources/images/replay.svg', @color-grey); 425 | } 426 | 427 | // Parameters 428 | .icon-document-properties, [src$='document-properties.png'] { 429 | .icon-img('../plugin/material-theme/resources/images/file-cog.svg', @color-grey); 430 | } 431 | 432 | // Computer User offline 433 | .icon-computer-user-offline, [src$="computer-user-offline.png"] { 434 | .icon-img('../plugin/material-theme/resources/images/laptop-off.svg', @color-grey); 435 | } 436 | 437 | 438 | // Remove the background from icons on the New Item page. 439 | div.icon { 440 | height: 0% !important; 441 | width: 0% !important; 442 | content: none; 443 | border: none !important; 444 | left: 0px !important; 445 | top: 7px !important; 446 | } 447 | 448 | // Create item menu 449 | // Freestyle Project 450 | .icon-freestyle-project, [src$='freestyleproject.png'] { 451 | .icon(@size-xl); 452 | .icon-img('../plugin/material-theme/resources/images/file-plus.svg', @color-grey); 453 | } 454 | 455 | // Multi-configuration project 456 | [src$='matrixproject.png'] { 457 | .icon(@size-xl); 458 | .icon-img('../plugin/material-theme/resources/images/file-table.svg', @color-grey); 459 | } 460 | 461 | // External Job 462 | [src$='externaljob.png'] { 463 | .icon(@size-xl); 464 | .icon-img('../plugin/material-theme/resources/images/plus-network.svg', @color-grey); 465 | } 466 | 467 | // Maven 468 | .icon-maven-moduleset, [src$='mavenmoduleset.png'] { 469 | .icon(@size-xl); 470 | .icon-img('../plugin/material-theme/resources/images/owl.svg', @color-grey); 471 | } 472 | 473 | // Multi-job project - not used yet (need to replace div) 474 | .div.default-icon { 475 | .icon(@size-xl); 476 | .icon-img('../plugin/material-theme/resources/images/file-document-multiple.svg', @color-grey); 477 | } 478 | 479 | // Pipeline 480 | [src$='pipelinejob.png'] { 481 | .icon(@size-xl); 482 | .icon-img('../plugin/material-theme/resources/images/pipe.svg', @color-grey); 483 | } 484 | 485 | // Job submenu 486 | // Claim 487 | [src$='claim.png'] { 488 | .icon(@size-md); 489 | .icon-img('../plugin/material-theme/resources/images/account-arrow-left.svg', @color-grey); 490 | } 491 | 492 | // Copy job 493 | [src$='copy.png'] { 494 | .icon(@size-xl); 495 | .icon-img('../plugin/material-theme/resources/images/content-copy.svg', @color-grey); 496 | } 497 | 498 | // Restart from stage 499 | [src$='restart-stage.png'] { 500 | .icon(@size-md); 501 | .icon-img('../plugin/material-theme/resources/images/restart.svg', @color-grey); 502 | } 503 | 504 | // Test Results Analyser 505 | [src$='test-results-analyzer/images/icon.png'] { 506 | .icon(@size-md); 507 | .icon-img('../plugin/material-theme/resources/images/clipboard-check.svg', @color-grey); 508 | } 509 | 510 | // General 511 | // Orange-Square 512 | .icon-orange-square, [src$='orange-square.png'], [src$='orange-square.svg'] { 513 | .icon-img('../plugin/material-theme/resources/images/comment-arrow-right.svg', @color-grey); 514 | } 515 | 516 | // Hour glass 517 | .icon-hourglass, [src$='hourglass.png'], [src$='hourglass.svg'], [src$='hourglass.gif'] { 518 | .icon-img('../plugin/material-theme/resources/images/timer-sand.svg', @color-grey); 519 | } 520 | 521 | // Attribute (label/tag) 522 | .icon-attribute, [src$='attribute.png'] { 523 | .icon-img('../plugin/material-theme/resources/images/tag-text.svg', @color-grey); 524 | } 525 | 526 | // Extension sizes 527 | .div.default-icon, 528 | .icon-attribute, [src$='attribute.png'], 529 | .icon-computer-user-offline, [src$="computer-user-offline.png"], 530 | .icon-config, [src$='logo-head.svg'], [src$='matrixproject.png'], 531 | [src$='copy.png'], 532 | .icon-device, [src$='device-24x24.png'], [src$='device-48x48.png'], 533 | .icon-disk, [src$='disk.png'], 534 | .icon-docker, [src$='docker.png'], 535 | .icon-document, [src$='document.png'], 536 | .icon-document-properties, [src$='document-properties.png'], 537 | .icon-freestyle-project, [src$='freestyleproject.png'], 538 | .icon-hourglass, [src$='hourglass.png'], [src$='hourglass.svg'], [src$='hourglass.gif'], 539 | .icon-maven-moduleset, [src$='mavenmoduleset.png'], 540 | .icon-monitor, [src$='monitor.gif'], [src$='systemmonitor.png'], 541 | .icon-orange-square, [src$='orange-square.png'], [src$='orange-square.svg'], 542 | [src$='pause.png'], [src$='48x48/pipelinejob.png'], 543 | .icon-pipeine-multibranch-project, [src$='pipelinemultibranchproject.png'], 544 | [src$='pipelinejob.png'], 545 | .icon-repo, [src$='redo.png'], 546 | [src$='test-results-analyzer/images/icon.png'] { 547 | // Replace icons with ones with the appropriate size. 548 | // This relies on: 549 | // - the size being set by a class (e.g. icon-xlg, icon48x48) 550 | // - being path of original image path 551 | // - the original page setting the size explicitly. 552 | &.icon-xlg, &[src*='48x'], &.icon48x48 { 553 | .icon(@size-xl); 554 | } 555 | 556 | &.icon-lg, &[src*='32x'], &.icon32x32, &[style*='width: 32p'], &[width="32"] { 557 | .icon(@size-lg); 558 | } 559 | 560 | &.icon-md, &[src*='24x'], &.icon24x24, &[style*='width: 24p'], &[width="24"] { 561 | .icon(@size-md); 562 | } 563 | 564 | &.icon-sm, &[src*='16x'], &.icon16x16, &[style*='width: 16p'], &[width="16"] { 565 | .icon(@size-sm); 566 | } 567 | } 568 | } 569 | -------------------------------------------------------------------------------- /src/main/webapp/resources/fonts/roboto-v30-latin-500.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 12 | 13 | 14 | 15 | 16 | 18 | 21 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 34 | 35 | 36 | 38 | 39 | 41 | 43 | 44 | 46 | 48 | 49 | 50 | 51 | 52 | 53 | 55 | 58 | 59 | 61 | 63 | 64 | 65 | 66 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 77 | 78 | 80 | 81 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 98 | 100 | 102 | 103 | 105 | 106 | 108 | 109 | 110 | 111 | 112 | 113 | 115 | 116 | 118 | 120 | 121 | 122 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 139 | 141 | 143 | 144 | 145 | 148 | 149 | 152 | 154 | 155 | 156 | 157 | 160 | 161 | 162 | 163 | 164 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 174 | 175 | 176 | 178 | 181 | 183 | 184 | 185 | 186 | 188 | 190 | 192 | 193 | 195 | 196 | 197 | 198 | 200 | 201 | 202 | 203 | 204 | 205 | 207 | 209 | 211 | 213 | 216 | 219 | 220 | 222 | 223 | 224 | 225 | 227 | 228 | 229 | 231 | 233 | 235 | 237 | 240 | 243 | 246 | 249 | 251 | 253 | 255 | 257 | 259 | 260 | 261 | 262 | 263 | 265 | 267 | 269 | 271 | 273 | 276 | 278 | 280 | 282 | 283 | 284 | 285 | 287 | 288 | 290 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 | 301 | 302 | 303 | 304 | 305 | 306 | --------------------------------------------------------------------------------