├── .eslintignore ├── .eslintrc.yml ├── .github ├── ISSUE_TEMPLATE.md ├── PULL_REQUEST_TEMPLATE.md ├── dependabot.yml └── workflows │ ├── codeql-analysis.yml │ ├── dependabot-auto-merge.yml │ ├── deploy-to-gh-pages.yml │ └── linter.yml ├── .gitignore ├── CNAME ├── CONTRIBUTING.md ├── Dockerfile ├── LICENSE ├── MigratingtoAdoptOpenJDKfromOracleJava.pdf ├── NOTICE ├── README.md ├── SECURITY.md ├── assemble.sh ├── gulpfile.js ├── netlify.toml ├── package-lock.json ├── package.json ├── robots.txt └── src ├── assets ├── 15xvbd5.png ├── GitHub.png ├── GoDaddy.png ├── adopt-flyer-de.pdf ├── adopt-flyer.pdf ├── adopt_logo_blue.svg ├── adopt_logo_white.svg ├── adoptopenjdk-dark.png ├── anchor.png ├── arrow-down.png ├── artifactory.png ├── aws.svg ├── azul.png ├── background.png ├── cargurus.svg ├── cloudflare.png ├── cross.png ├── delphix.png ├── digicert.png ├── digitalocean.png ├── docker.png ├── etnetera.png ├── favicon.ico ├── flutter.svg ├── flyer-preview.png ├── fream.png ├── github-sponsor.png ├── ibm.svg ├── inspira.png ├── installBuilder.png ├── jclarity.png ├── jenkins_headshot.png ├── lightbend.svg ├── linaro.png ├── ljc.png ├── loading_dots.gif ├── localize.png ├── macincloud.png ├── macstadium.svg ├── microsoft.png ├── newrelic.svg ├── nine.svg ├── ocado.svg ├── openlab.png ├── packet.png ├── pivotal.svg ├── pixel.png ├── qz.png ├── radiantfleet-logo.png ├── redhat.svg ├── scaleway.png ├── slack.svg ├── snyk.png ├── social-image.png ├── social-logo.png ├── squares-logo.png ├── tick.png ├── totvs_logo.png └── travelcompositor.png ├── handlebars ├── 404.handlebars ├── archive.handlebars ├── icedtea-web.handlebars ├── index.handlebars ├── logos.handlebars ├── partials │ ├── footer.handlebars │ ├── header.handlebars │ ├── jck-tick.handlebars │ ├── menu.handlebars │ ├── meta-description.handlebars │ ├── modal.handlebars │ └── social-bar.handlebars ├── quality.handlebars ├── release_notes.handlebars ├── releases.handlebars ├── sponsors.handlebars └── upstream.handlebars ├── js ├── archive.js ├── common.js ├── entry.js ├── index.js ├── releases.js └── upstream.js ├── json ├── config.json └── config.schema.json └── scss ├── styles-0-master.scss ├── styles-1-large-main.scss ├── styles-11-sponsors.scss ├── styles-12-archive.scss ├── styles-13-upstream.scss ├── styles-14-logos.scss ├── styles-2-index.scss ├── styles-4-releases.scss ├── styles-5-medium.scss └── styles-6-small.scss /.eslintignore: -------------------------------------------------------------------------------- 1 | dist/js/*.js 2 | -------------------------------------------------------------------------------- /.eslintrc.yml: -------------------------------------------------------------------------------- 1 | env: 2 | browser: true 3 | node: true 4 | es6: true 5 | jquery: true 6 | rules: 7 | no-console: 0 8 | no-inner-declarations: 0 9 | quotes: [2, single] 10 | globals: 11 | Handlebars: true 12 | moment: true 13 | extends: eslint:recommended 14 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | 11 | * **Browser**: 12 | 13 | 14 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | 5 | 6 | ##### Checklist 7 | 8 | 9 | - [ ] `npm test` passes 10 | - [ ] documentation is changed or added (if applicable) 11 | - [ ] permission has been obtained to add new logo (if applicable) 12 | - [ ] contribution guidelines followed [here](https://github.com/AdoptOpenJDK/openjdk-website/blob/master/CONTRIBUTING.md) 13 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | # Basic dependabot.yml file with 2 | # minimum configuration for two package managers 3 | 4 | version: 2 5 | updates: 6 | # Enable version updates for npm 7 | - package-ecosystem: "npm" 8 | # Look for `package.json` and `lock` files in the `root` directory 9 | directory: "/" 10 | # Check the npm registry for updates every day (weekdays) 11 | schedule: 12 | interval: "daily" 13 | # automerged_updates: 14 | # - match: 15 | # dependency_type: "development" 16 | # # Supported dependency types: 17 | # # - "development" 18 | # # - "production" 19 | # # - "all" 20 | # update_type: "all" 21 | # # Supported updates to automerge: 22 | # # - "security:patch" 23 | # # SemVer patch update that fixes a known security vulnerability 24 | # # - "semver:patch" 25 | # # SemVer patch update, e.g. > 1.x && 1.0.1 to 1.0.3 26 | # # - "semver:minor" 27 | # # SemVer minor update, e.g. > 1.x && 2.1.4 to 2.3.1 28 | # # - "in_range" 29 | # # matching the version requirement in your package manifest 30 | # # - "all" 31 | # - match: 32 | # dependency_type: "production" 33 | # update_type: "all" 34 | # Enable version updates for Docker 35 | - package-ecosystem: "docker" 36 | # Look for a `Dockerfile` in the `root` directory 37 | directory: "/" 38 | # Check for updates once a week 39 | schedule: 40 | interval: "weekly" 41 | - package-ecosystem: github-actions 42 | directory: "/" 43 | schedule: 44 | interval: "weekly" 45 | 46 | -------------------------------------------------------------------------------- /.github/workflows/codeql-analysis.yml: -------------------------------------------------------------------------------- 1 | # For most projects, this workflow file will not need changing; you simply need 2 | # to commit it to your repository. 3 | # 4 | # You may wish to alter this file to override the set of languages analyzed, 5 | # or to provide custom queries or build logic. 6 | # 7 | # ******** NOTE ******** 8 | # We have attempted to detect the languages in your repository. Please check 9 | # the `language` matrix defined below to confirm you have the correct set of 10 | # supported CodeQL languages. 11 | # 12 | name: "CodeQL" 13 | 14 | on: 15 | push: 16 | branches: [ master ] 17 | pull_request: 18 | # The branches below must be a subset of the branches above 19 | branches: [ master ] 20 | schedule: 21 | - cron: '25 1 * * 2' 22 | 23 | jobs: 24 | analyze: 25 | name: Analyze 26 | runs-on: ubuntu-latest 27 | 28 | strategy: 29 | fail-fast: false 30 | matrix: 31 | language: [ 'javascript' ] 32 | # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ] 33 | # Learn more: 34 | # https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed 35 | 36 | steps: 37 | - name: Checkout repository 38 | uses: actions/checkout@v4 39 | 40 | # Initializes the CodeQL tools for scanning. 41 | - name: Initialize CodeQL 42 | uses: github/codeql-action/init@v3 43 | with: 44 | languages: ${{ matrix.language }} 45 | # If you wish to specify custom queries, you can do so here or in a config file. 46 | # By default, queries listed here will override any specified in a config file. 47 | # Prefix the list here with "+" to use these queries and those in the config file. 48 | # queries: ./path/to/local/query, your-org/your-repo/queries@main 49 | 50 | # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). 51 | # If this step fails, then you should remove it and run the build manually (see below) 52 | - name: Autobuild 53 | uses: github/codeql-action/autobuild@v3 54 | 55 | # ℹ️ Command-line programs to run using the OS shell. 56 | # 📚 https://git.io/JvXDl 57 | 58 | # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines 59 | # and modify them (or add more) to build your code if your project 60 | # uses a compiled language 61 | 62 | #- run: | 63 | # make bootstrap 64 | # make release 65 | 66 | - name: Perform CodeQL Analysis 67 | uses: github/codeql-action/analyze@v3 68 | -------------------------------------------------------------------------------- /.github/workflows/dependabot-auto-merge.yml: -------------------------------------------------------------------------------- 1 | name: Dependabot auto-merge 2 | on: pull_request_target 3 | 4 | jobs: 5 | dependabot: 6 | uses: adoptium/.github/.github/workflows/dependabot-auto-merge.yml@main 7 | -------------------------------------------------------------------------------- /.github/workflows/deploy-to-gh-pages.yml: -------------------------------------------------------------------------------- 1 | name: Deploy to GitHub Pages 2 | on: 3 | workflow_dispatch: 4 | push: 5 | branches: [ master ] 6 | jobs: 7 | build: 8 | runs-on: ubuntu-latest 9 | steps: 10 | - name: Checkout 11 | uses: actions/checkout@v4 12 | with: 13 | ref: master 14 | path: website 15 | 16 | - uses: actions/setup-node@v4 17 | with: 18 | node-version: '20' 19 | 20 | - name: Build 21 | run: | 22 | cd website 23 | npm install 24 | gulp build 25 | 26 | - name: Create Directory Stucture 27 | run: | 28 | mkdir tmp 29 | mv website/sitemap.xml tmp/ 30 | cd website 31 | find . -type f ! -name '*.html' ! -name '*.pdf' -maxdepth 1 -mindepth 1 -delete 32 | find . -type d -not -name 'dist' -not -name '.git' -maxdepth 1 -mindepth 1 -exec rm -rf {} \; 33 | # After this bulk-delete, copy across some other necessary files from the master branch: 34 | git checkout master -- NOTICE 35 | git checkout master -- LICENSE 36 | cp ../tmp/sitemap.xml . 37 | git checkout master -- robots.txt 38 | git checkout master -- CNAME 39 | echo "These files are ready to be moved onto the production web server:" 40 | ls 41 | 42 | # Package the artefacts using actions/upload-pages-artifact 43 | - name: Upload Pages Artifact 44 | uses: actions/upload-pages-artifact@v3 45 | with: 46 | path: ./website 47 | 48 | # Deploy job 49 | deploy: 50 | # Add a dependency to the build job 51 | needs: build 52 | 53 | # Grant GITHUB_TOKEN the permissions required to make a Pages deployment 54 | permissions: 55 | pages: write # to deploy to Pages 56 | id-token: write # to verify the deployment originates from an appropriate source 57 | 58 | # Deploy to the github-pages environment 59 | environment: 60 | name: github-pages 61 | url: ${{ steps.deployment.outputs.page_url }} 62 | 63 | # Specify runner + deployment step 64 | runs-on: ubuntu-latest 65 | steps: 66 | - name: Deploy to GitHub Pages 67 | id: deployment 68 | uses: actions/deploy-pages@v4 69 | -------------------------------------------------------------------------------- /.github/workflows/linter.yml: -------------------------------------------------------------------------------- 1 | name: Linter 2 | on: 3 | pull_request: 4 | branches: [ master ] 5 | jobs: 6 | linter: 7 | runs-on: ubuntu-latest 8 | steps: 9 | - name: Checkout 10 | uses: actions/checkout@v4 11 | 12 | - uses: actions/setup-node@v4 13 | with: 14 | node-version: '20' 15 | 16 | - name: Test 17 | run: | 18 | npm install 19 | npm run test -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | npm-debug.log 3 | .idea 4 | dist 5 | *.html 6 | sitemap.xml 7 | .DS_Store* 8 | .java-version 9 | .vscode/ 10 | -------------------------------------------------------------------------------- /CNAME: -------------------------------------------------------------------------------- 1 | adoptopenjdk.net -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:22 2 | 3 | RUN \ 4 | apt-get update; \ 5 | apt-get install --no-install-recommends -y \ 6 | build-essential \ 7 | curl; \ 8 | rm -rf /var/lib/apt/lists/* 9 | 10 | RUN useradd -ms /bin/bash ubuntu 11 | 12 | # expose ports which are being used in this project 13 | EXPOSE 3001 14 | EXPOSE 3000 15 | 16 | CMD /bin/bash 17 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | https://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "{}" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright {yyyy} {name of copyright owner} 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | https://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | 203 | -------------------------------------------------------------------------------- /MigratingtoAdoptOpenJDKfromOracleJava.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdoptOpenJDK/openjdk-website/ad141ef8e0ce859dce81b914b0614fcdbd5c69cf/MigratingtoAdoptOpenJDKfromOracleJava.pdf -------------------------------------------------------------------------------- /NOTICE: -------------------------------------------------------------------------------- 1 | Portions of this software are 2 | (C) Copyright IBM Corporation 2017 3 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![Deploy to GitHub Pages](https://github.com/AdoptOpenJDK/openjdk-website/actions/workflows/deploy-to-gh-pages.yml/badge.svg)](https://github.com/AdoptOpenJDK/openjdk-website/actions/workflows/deploy-to-gh-pages.yml) 2 | 3 | # README 4 | 5 | This repository contains the source code for https://www.adoptopenjdk.net. 6 | 7 | The `master` branch contains the source code necessary for development. A Jenkins job is used to run a build on this source code, and the output of this build is pushed to the `gh-pages` branch. GitHub Pages then uses this `gh-pages` branch to host the live, production website. 8 | 9 | # API 10 | To use the API, see the README at [api.adoptopenjdk.net](https://api.adoptopenjdk.net). 11 | 12 | To contribute to the API, or to raise issues, see the separate [GitHub repository](https://github.com/AdoptOpenJDK/openjdk-api). 13 | 14 | # Developers 15 | 16 | See the [Contribution Guidelines](CONTRIBUTING.md). 17 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | # Security Policy 2 | ## Reporting a Vulnerability 3 | Please report vulnerabilities to [security@adoptopenjdk.net](security@adoptopenjdk.net). 4 | A member of the security team will respond within 48 hours with details on how to proceed including whether or not the vulnerability was accepted, declined or requires further investigation. 5 | -------------------------------------------------------------------------------- /assemble.sh: -------------------------------------------------------------------------------- 1 | mkdir tmp 2 | mv sitemap.xml tmp/ 3 | find . -type f ! -name '*.html' ! -name '*.pdf' -maxdepth 1 -mindepth 1 -delete 4 | find . -type d -not -name 'dist' -not -name '.git' -maxdepth 1 -mindepth 1 -exec rm -rf {} \; 5 | # After this bulk-delete, copy across some other necessary files from the master branch: 6 | git checkout master -- NOTICE 7 | git checkout master -- LICENSE 8 | cp tmp/sitemap.xml . 9 | git checkout master -- robots.txt 10 | git checkout master -- CNAME 11 | echo "These files are ready to be moved onto the production web server:" 12 | ls 13 | -------------------------------------------------------------------------------- /gulpfile.js: -------------------------------------------------------------------------------- 1 | import gulp from 'gulp'; 2 | import Ajv from 'ajv'; 3 | import addFormats from 'ajv-formats'; 4 | import assert from 'assert'; 5 | import base64img from 'base64-img'; 6 | import browserify from 'browserify'; 7 | import browserSyncFactory from 'browser-sync'; 8 | const browserSync = browserSyncFactory.create(); 9 | import buffer from 'vinyl-buffer'; 10 | import clean from 'gulp-clean'; 11 | import cleanCss from 'gulp-clean-css'; 12 | import concat from 'gulp-concat'; 13 | import eslint from 'gulp-eslint'; 14 | import fs from 'fs'; 15 | import handlebars from 'gulp-compile-handlebars'; 16 | import hash from 'gulp-hash'; 17 | import imagemin from 'gulp-imagemin'; 18 | import inject from 'gulp-inject'; 19 | import log from 'fancy-log'; 20 | import PluginError from 'plugin-error'; 21 | import prefix from 'gulp-autoprefixer'; 22 | import rename from 'gulp-rename'; 23 | import gulpSass from 'gulp-sass'; 24 | import * as sass from 'sass'; 25 | const sassCompiler = gulpSass(sass); 26 | import sitemap from 'gulp-sitemap'; 27 | import source from 'vinyl-source-stream'; 28 | import uglify_ from 'gulp-uglify-es' 29 | const uglify = uglify_.default 30 | import { fileURLToPath } from 'url'; 31 | import { dirname } from 'path'; 32 | 33 | const __filename = fileURLToPath(import.meta.url); 34 | const __dirname = dirname(__filename); 35 | 36 | // clean task (deletes /dist dir) 37 | gulp.task('clean', () => gulp.src('dist', { 38 | read: false, 39 | allowEmpty: true 40 | }).pipe(clean())); 41 | 42 | // json validation task 43 | gulp.task('json-validate', () => { 44 | log('Validating config.json against config.schema.json'); 45 | 46 | const objFromJson = (uri) => JSON.parse(fs.readFileSync(uri, 'utf-8')); 47 | const loadSchemaFn = (uri) => Promise.resolve(objFromJson(uri)); 48 | const configJsonSchema = objFromJson('./src/json/config.schema.json'); 49 | const configJson = objFromJson('./src/json/config.json'); 50 | 51 | const ajv = new Ajv({ 52 | loadSchema: loadSchemaFn, 53 | allErrors: true, 54 | verbose: true}); 55 | 56 | addFormats(ajv); 57 | 58 | return ajv.compileAsync(configJsonSchema) 59 | .then(validate => 60 | validate(configJson) ? 61 | log('config.json is valid!') : 62 | assert.fail(validate.errors.map(err => `\n${ajv.errorsText([err])}. Actual: "${err.data}"`).join().concat('\n')) 63 | ) 64 | .catch(err => { 65 | throw new PluginError('json-validate', err, { 66 | showProperties: false 67 | }); 68 | }); 69 | }); 70 | 71 | // json task 72 | gulp.task('json', () => gulp.src('./src/json/*.json').pipe(gulp.dest('./dist/json/'))); 73 | 74 | // scripts task 75 | gulp.task('scripts', () => { 76 | return browserify({ 77 | entries: './src/js/entry.js', 78 | }) 79 | .transform('babelify', { 80 | presets: [ 81 | ['@babel/env', { 82 | debug: true, 83 | targets: 'defaults', // see https://babeljs.io/docs/en/babel-preset-env#targets 84 | useBuiltIns: 'usage', 85 | corejs: 3 86 | }] 87 | ] 88 | }) 89 | .bundle() 90 | .pipe(source('app.js')) 91 | .pipe(buffer()) 92 | .pipe(gulp.dest('./dist/js/')) 93 | .pipe(uglify()) 94 | .on('error', log) 95 | .pipe(rename({ 96 | suffix: '.min' 97 | })) 98 | .pipe(hash()) // Add hashes to the files' names 99 | .on('error', log) 100 | .pipe(gulp.dest('./dist/js/')) 101 | .pipe(hash.manifest('assetsJS.json', { 102 | deleteOld: true, 103 | sourceDir: __dirname + '/dist/js' 104 | })) // Switch to the manifest file 105 | .on('error', log) 106 | .pipe(gulp.dest('./dist/')); // Write the manifest file 107 | }); 108 | 109 | // styles task 110 | gulp.task('styles', () => { 111 | return gulp.src('./src/scss/*.scss') 112 | .pipe(sassCompiler()) 113 | .on('error', log) 114 | .pipe(prefix('last 2 versions')) 115 | .on('error', log) 116 | .pipe(concat('styles.css')) 117 | .on('error', log) 118 | .pipe(gulp.dest('./dist/css/')) 119 | .pipe(cleanCss()) 120 | .on('error', log) 121 | .pipe(rename({ 122 | suffix: '.min' 123 | })) 124 | .pipe(hash()) // Add hashes to the files' names 125 | .on('error', log) 126 | .pipe(gulp.dest('./dist/css/')) 127 | .pipe(hash.manifest('assetsCSS.json', { 128 | deleteOld: true, 129 | sourceDir: __dirname + '/dist/css' 130 | })) // Switch to the manifest file 131 | .on('error', log) 132 | .pipe(gulp.dest('./dist/')); // Write the manifest file 133 | }); 134 | 135 | // images task 136 | gulp.task('images', () => { 137 | return gulp.src(['./src/assets/*.jp*', './src/assets/*.png', './src/assets/*.svg', './src/assets/*.gif']) 138 | .pipe(imagemin()) 139 | .on('error', log) 140 | .pipe(gulp.dest('./dist/assets/')); 141 | }); 142 | 143 | // icon task 144 | gulp.task('icon', () => { 145 | return gulp.src('./src/assets/*.ico') 146 | .pipe(gulp.dest('./dist/assets/')); 147 | }); 148 | 149 | // Handlebars HTML build task 150 | gulp.task('handlebars', () => { 151 | const templateData = {}; 152 | 153 | const options = { 154 | batch: ['./src/handlebars/partials'], 155 | helpers: { 156 | base64img: base64img.base64Sync 157 | } 158 | }; 159 | 160 | return gulp.src('./src/handlebars/*.handlebars') 161 | .pipe(handlebars(templateData, options)) 162 | .on('error', log) 163 | .pipe(rename({ 164 | extname: '.html' 165 | })) 166 | .pipe(gulp.dest('./')); 167 | }); 168 | 169 | // inject task 170 | gulp.task('inject', () => { 171 | const options = { 172 | relative: true, 173 | addPrefix: '.' 174 | }; 175 | const minSourceFiles = gulp.src(['./dist/js/app.min-*.js', './dist/css/styles.min-*.css'], { 176 | read: false 177 | }); 178 | const targetFiles = gulp.src('./*.html'); 179 | 180 | return targetFiles.pipe(inject(minSourceFiles, options)) // injects the latest minified JS and CSS into all HTML files 181 | .pipe(gulp.dest('./')); 182 | }); 183 | 184 | // browser-sync task 185 | gulp.task('browser-sync', (done) => { 186 | browserSync.init({ 187 | server: { 188 | baseDir: './' 189 | }, 190 | notify: false, 191 | watch: true 192 | }); 193 | done(); 194 | 195 | }); 196 | 197 | gulp.task('watch', () => { 198 | gulp.watch(['./src/handlebars/partials/*.handlebars', './src/handlebars/*.handlebars'], gulp.series('handlebars', 'inject')); 199 | gulp.watch('./src/json/*.json', gulp.series('json')); 200 | gulp.watch('./src/js/**/*.js', gulp.series('scripts', 'inject')); 201 | gulp.watch('./src/scss/*.scss', gulp.series('styles', 'inject')); 202 | gulp.watch(['./src/assets/*.jp*', './src/assets/*.png', './src/assets/*.svg', './src/assets/*.gif'], gulp.series('images', 'handlebars')); 203 | gulp.watch('./src/assets/*.ico', gulp.series('icon')); 204 | }); 205 | 206 | // sitemap task 207 | gulp.task('sitemap', (done) => { 208 | gulp.src('./*.html', { 209 | read: false 210 | }) 211 | .pipe(sitemap({ 212 | siteUrl: 'https://adoptopenjdk.net' 213 | })) 214 | .pipe(gulp.dest('./')); 215 | done(); 216 | }); 217 | 218 | // lint task 219 | gulp.task('lint', () => { 220 | return gulp.src('./dist/js/app.js') 221 | .pipe(eslint()) 222 | .pipe(eslint.format()) 223 | .pipe(eslint.failAfterError()); 224 | }); 225 | 226 | // default task 227 | gulp.task('default', gulp.series('clean', 'json-validate', gulp.parallel('json', 'scripts', 'styles', 'images', 'icon'), 'handlebars', 'inject', 'browser-sync', 'watch')); 228 | 229 | // build task 230 | gulp.task('build', gulp.series('clean', gulp.parallel('json', 'scripts', 'styles', 'images', 'icon'), 'handlebars', 'inject', 'sitemap', 'lint')); 231 | -------------------------------------------------------------------------------- /netlify.toml: -------------------------------------------------------------------------------- 1 | [build] 2 | publish = "" 3 | command = "npm install; gulp build; npm run assemble" 4 | 5 | [build.environment] 6 | NODE_VERSION = "20" 7 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "AdoptOpenJDK_website", 3 | "repository": "https://github.com/AdoptOpenJDK/openjdk-website", 4 | "version": "1.0.0", 5 | "license": "Apache-2.0", 6 | "scripts": { 7 | "start": "gulp", 8 | "json-validate": "gulp json-validate", 9 | "assemble": "bash assemble.sh", 10 | "lint": "eslint src/**/*.js", 11 | "lint-fix": "npm run lint --- --fix", 12 | "test": "npm run lint && npm run json-validate" 13 | }, 14 | "author": "Joe Brady", 15 | "devDependencies": { 16 | "@babel/core": "^7.26.10", 17 | "@babel/preset-env": "^7.26.9", 18 | "ajv": "^8.17.1", 19 | "ajv-formats": "^3.0.1", 20 | "babelify": "^10.0.0", 21 | "base64-img": "^1.0.4", 22 | "browser-sync": "^3.0.3", 23 | "browser-sync-client": "^3.0.3", 24 | "browserify": "^17.0.1", 25 | "chai": "^5.2.0", 26 | "core-js": "^3.41.0", 27 | "eslint": "^8.57.0", 28 | "fancy-log": "^2.0.0", 29 | "gulp": "^5.0.0", 30 | "gulp-autoprefixer": "^9.0.0", 31 | "gulp-clean": "^0.4.0", 32 | "gulp-clean-css": "^4.3.0", 33 | "gulp-cli": "^3.0.0", 34 | "gulp-compile-handlebars": "^0.6.1", 35 | "gulp-concat": "^2.6.1", 36 | "gulp-eslint": "^6.0.0", 37 | "gulp-hash": "^4.2.2", 38 | "gulp-imagemin": "^9.1.0", 39 | "gulp-inject": "^5.0.5", 40 | "gulp-rename": "^2.0.0", 41 | "gulp-sass": "^5.1.0", 42 | "gulp-sitemap": "^8.0.0", 43 | "gulp-uglify-es": "^3.0.0", 44 | "mocha": "^11.1.0", 45 | "node-sass": "^9.0.0", 46 | "open": "^10.1.0", 47 | "plugin-error": "^2.0.1", 48 | "run-sequence": "^2.2.1", 49 | "sass": "^1.86.0", 50 | "util": "^0.12.5", 51 | "vinyl-buffer": "^1.0.1", 52 | "vinyl-source-stream": "^2.0.0" 53 | }, 54 | "dependencies": { 55 | "@babel/polyfill": "^7.12.1" 56 | }, 57 | "type": "module" 58 | } 59 | -------------------------------------------------------------------------------- /robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: Twitterbot 2 | Disallow: 3 | 4 | User-agent: * 5 | Allow: / 6 | Allow: /dist/assets/social-image.png 7 | Disallow: /404.html 8 | Disallow: /dist 9 | -------------------------------------------------------------------------------- /src/assets/15xvbd5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdoptOpenJDK/openjdk-website/ad141ef8e0ce859dce81b914b0614fcdbd5c69cf/src/assets/15xvbd5.png -------------------------------------------------------------------------------- /src/assets/GitHub.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdoptOpenJDK/openjdk-website/ad141ef8e0ce859dce81b914b0614fcdbd5c69cf/src/assets/GitHub.png -------------------------------------------------------------------------------- /src/assets/GoDaddy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdoptOpenJDK/openjdk-website/ad141ef8e0ce859dce81b914b0614fcdbd5c69cf/src/assets/GoDaddy.png -------------------------------------------------------------------------------- /src/assets/adopt-flyer-de.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdoptOpenJDK/openjdk-website/ad141ef8e0ce859dce81b914b0614fcdbd5c69cf/src/assets/adopt-flyer-de.pdf -------------------------------------------------------------------------------- /src/assets/adopt-flyer.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdoptOpenJDK/openjdk-website/ad141ef8e0ce859dce81b914b0614fcdbd5c69cf/src/assets/adopt-flyer.pdf -------------------------------------------------------------------------------- /src/assets/adopt_logo_blue.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Artboard 5 | Created with Sketch. 6 | 7 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /src/assets/adopt_logo_white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Artboard 5 | Created with Sketch. 6 | 7 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /src/assets/adoptopenjdk-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdoptOpenJDK/openjdk-website/ad141ef8e0ce859dce81b914b0614fcdbd5c69cf/src/assets/adoptopenjdk-dark.png -------------------------------------------------------------------------------- /src/assets/anchor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdoptOpenJDK/openjdk-website/ad141ef8e0ce859dce81b914b0614fcdbd5c69cf/src/assets/anchor.png -------------------------------------------------------------------------------- /src/assets/arrow-down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdoptOpenJDK/openjdk-website/ad141ef8e0ce859dce81b914b0614fcdbd5c69cf/src/assets/arrow-down.png -------------------------------------------------------------------------------- /src/assets/artifactory.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdoptOpenJDK/openjdk-website/ad141ef8e0ce859dce81b914b0614fcdbd5c69cf/src/assets/artifactory.png -------------------------------------------------------------------------------- /src/assets/aws.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 9 | 10 | 31 | 32 | 34 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /src/assets/azul.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdoptOpenJDK/openjdk-website/ad141ef8e0ce859dce81b914b0614fcdbd5c69cf/src/assets/azul.png -------------------------------------------------------------------------------- /src/assets/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdoptOpenJDK/openjdk-website/ad141ef8e0ce859dce81b914b0614fcdbd5c69cf/src/assets/background.png -------------------------------------------------------------------------------- /src/assets/cargurus.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/cloudflare.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdoptOpenJDK/openjdk-website/ad141ef8e0ce859dce81b914b0614fcdbd5c69cf/src/assets/cloudflare.png -------------------------------------------------------------------------------- /src/assets/cross.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdoptOpenJDK/openjdk-website/ad141ef8e0ce859dce81b914b0614fcdbd5c69cf/src/assets/cross.png -------------------------------------------------------------------------------- /src/assets/delphix.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdoptOpenJDK/openjdk-website/ad141ef8e0ce859dce81b914b0614fcdbd5c69cf/src/assets/delphix.png -------------------------------------------------------------------------------- /src/assets/digicert.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdoptOpenJDK/openjdk-website/ad141ef8e0ce859dce81b914b0614fcdbd5c69cf/src/assets/digicert.png -------------------------------------------------------------------------------- /src/assets/digitalocean.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdoptOpenJDK/openjdk-website/ad141ef8e0ce859dce81b914b0614fcdbd5c69cf/src/assets/digitalocean.png -------------------------------------------------------------------------------- /src/assets/docker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdoptOpenJDK/openjdk-website/ad141ef8e0ce859dce81b914b0614fcdbd5c69cf/src/assets/docker.png -------------------------------------------------------------------------------- /src/assets/etnetera.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdoptOpenJDK/openjdk-website/ad141ef8e0ce859dce81b914b0614fcdbd5c69cf/src/assets/etnetera.png -------------------------------------------------------------------------------- /src/assets/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdoptOpenJDK/openjdk-website/ad141ef8e0ce859dce81b914b0614fcdbd5c69cf/src/assets/favicon.ico -------------------------------------------------------------------------------- /src/assets/flyer-preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdoptOpenJDK/openjdk-website/ad141ef8e0ce859dce81b914b0614fcdbd5c69cf/src/assets/flyer-preview.png -------------------------------------------------------------------------------- /src/assets/fream.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdoptOpenJDK/openjdk-website/ad141ef8e0ce859dce81b914b0614fcdbd5c69cf/src/assets/fream.png -------------------------------------------------------------------------------- /src/assets/github-sponsor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdoptOpenJDK/openjdk-website/ad141ef8e0ce859dce81b914b0614fcdbd5c69cf/src/assets/github-sponsor.png -------------------------------------------------------------------------------- /src/assets/ibm.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/assets/inspira.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdoptOpenJDK/openjdk-website/ad141ef8e0ce859dce81b914b0614fcdbd5c69cf/src/assets/inspira.png -------------------------------------------------------------------------------- /src/assets/installBuilder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdoptOpenJDK/openjdk-website/ad141ef8e0ce859dce81b914b0614fcdbd5c69cf/src/assets/installBuilder.png -------------------------------------------------------------------------------- /src/assets/jclarity.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdoptOpenJDK/openjdk-website/ad141ef8e0ce859dce81b914b0614fcdbd5c69cf/src/assets/jclarity.png -------------------------------------------------------------------------------- /src/assets/jenkins_headshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdoptOpenJDK/openjdk-website/ad141ef8e0ce859dce81b914b0614fcdbd5c69cf/src/assets/jenkins_headshot.png -------------------------------------------------------------------------------- /src/assets/linaro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdoptOpenJDK/openjdk-website/ad141ef8e0ce859dce81b914b0614fcdbd5c69cf/src/assets/linaro.png -------------------------------------------------------------------------------- /src/assets/ljc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdoptOpenJDK/openjdk-website/ad141ef8e0ce859dce81b914b0614fcdbd5c69cf/src/assets/ljc.png -------------------------------------------------------------------------------- /src/assets/loading_dots.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdoptOpenJDK/openjdk-website/ad141ef8e0ce859dce81b914b0614fcdbd5c69cf/src/assets/loading_dots.gif -------------------------------------------------------------------------------- /src/assets/localize.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdoptOpenJDK/openjdk-website/ad141ef8e0ce859dce81b914b0614fcdbd5c69cf/src/assets/localize.png -------------------------------------------------------------------------------- /src/assets/macincloud.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdoptOpenJDK/openjdk-website/ad141ef8e0ce859dce81b914b0614fcdbd5c69cf/src/assets/macincloud.png -------------------------------------------------------------------------------- /src/assets/macstadium.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 11 | 37 | -------------------------------------------------------------------------------- /src/assets/microsoft.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdoptOpenJDK/openjdk-website/ad141ef8e0ce859dce81b914b0614fcdbd5c69cf/src/assets/microsoft.png -------------------------------------------------------------------------------- /src/assets/newrelic.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/ocado.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | 14 | 15 | 17 | 25 | 26 | 34 | 40 | 42 | 43 | 44 | 45 | 48 | 51 | 54 | 57 | 60 | 61 | 62 | 67 | 72 | 74 | 77 | 79 | 81 | 82 | 92 | 93 | 94 | -------------------------------------------------------------------------------- /src/assets/openlab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdoptOpenJDK/openjdk-website/ad141ef8e0ce859dce81b914b0614fcdbd5c69cf/src/assets/openlab.png -------------------------------------------------------------------------------- /src/assets/packet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdoptOpenJDK/openjdk-website/ad141ef8e0ce859dce81b914b0614fcdbd5c69cf/src/assets/packet.png -------------------------------------------------------------------------------- /src/assets/pixel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdoptOpenJDK/openjdk-website/ad141ef8e0ce859dce81b914b0614fcdbd5c69cf/src/assets/pixel.png -------------------------------------------------------------------------------- /src/assets/qz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdoptOpenJDK/openjdk-website/ad141ef8e0ce859dce81b914b0614fcdbd5c69cf/src/assets/qz.png -------------------------------------------------------------------------------- /src/assets/radiantfleet-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdoptOpenJDK/openjdk-website/ad141ef8e0ce859dce81b914b0614fcdbd5c69cf/src/assets/radiantfleet-logo.png -------------------------------------------------------------------------------- /src/assets/redhat.svg: -------------------------------------------------------------------------------- 1 | RedHat-Logo-A-Color -------------------------------------------------------------------------------- /src/assets/scaleway.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdoptOpenJDK/openjdk-website/ad141ef8e0ce859dce81b914b0614fcdbd5c69cf/src/assets/scaleway.png -------------------------------------------------------------------------------- /src/assets/slack.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 11 | 12 | 13 | 15 | 16 | 17 | 18 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 28 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /src/assets/snyk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdoptOpenJDK/openjdk-website/ad141ef8e0ce859dce81b914b0614fcdbd5c69cf/src/assets/snyk.png -------------------------------------------------------------------------------- /src/assets/social-image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdoptOpenJDK/openjdk-website/ad141ef8e0ce859dce81b914b0614fcdbd5c69cf/src/assets/social-image.png -------------------------------------------------------------------------------- /src/assets/social-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdoptOpenJDK/openjdk-website/ad141ef8e0ce859dce81b914b0614fcdbd5c69cf/src/assets/social-logo.png -------------------------------------------------------------------------------- /src/assets/squares-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdoptOpenJDK/openjdk-website/ad141ef8e0ce859dce81b914b0614fcdbd5c69cf/src/assets/squares-logo.png -------------------------------------------------------------------------------- /src/assets/tick.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdoptOpenJDK/openjdk-website/ad141ef8e0ce859dce81b914b0614fcdbd5c69cf/src/assets/tick.png -------------------------------------------------------------------------------- /src/assets/totvs_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdoptOpenJDK/openjdk-website/ad141ef8e0ce859dce81b914b0614fcdbd5c69cf/src/assets/totvs_logo.png -------------------------------------------------------------------------------- /src/assets/travelcompositor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AdoptOpenJDK/openjdk-website/ad141ef8e0ce859dce81b914b0614fcdbd5c69cf/src/assets/travelcompositor.png -------------------------------------------------------------------------------- /src/handlebars/404.handlebars: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 404 | AdoptOpenJDK - Open source, prebuilt OpenJDK binaries 9 | 10 | 11 | 12 | 13 | 110 | 111 | 112 | 113 |
114 |
115 | 116 |

404

117 |

Sorry, we can't find that page!

118 | Go to the home page 119 |

Or raise an issue on GitHub to let us know.

120 |
121 |
122 | 123 | 124 | 125 | -------------------------------------------------------------------------------- /src/handlebars/archive.handlebars: -------------------------------------------------------------------------------- 1 | {{> header title='Archive | ' style1='' }} 2 | 3 |
4 | 5 |
6 |

Archive

7 | 8 |
9 |

Please be aware that using old, superseded, or otherwise unsupported releases is not recommended.

10 |
11 | 12 | 13 |
14 | Latest release 15 | 16 |
17 |
18 | 19 |
20 | Nightly builds 21 | 22 |
23 |
24 | 25 |
26 |
27 |

1. Choose a Version

28 |
29 |
30 |

2. Choose a JVM 31 | Help Me Choose 32 | 44 |

45 |
46 |
47 | 48 |
Content is loading.
49 |
50 | 51 | {{> modal }} 52 | 53 |
54 |
55 | 56 | 57 | 114 | 115 |
116 |
117 | 118 |
119 | 120 |
121 | 122 | {{> footer script='' script2='' }} 123 | -------------------------------------------------------------------------------- /src/handlebars/index.handlebars: -------------------------------------------------------------------------------- 1 | {{> header title='' }} 2 | 3 |
4 |

Prebuilt OpenJDK Binaries for Free!

5 |

6 | Java™ is the world's leading programming language and platform. 7 | AdoptOpenJDK uses 8 | infrastructure, 9 | build and 10 | test scripts 11 | to produce prebuilt binaries from OpenJDK™ class libraries 12 | and a choice of either 13 | OpenJDK or the 14 | Eclipse OpenJ9 VM.
15 | All AdoptOpenJDK binaries and scripts are open source licensed and available for free. 16 |

17 | 18 |
19 | 20 | 21 |
22 |
23 |

1. Choose a Version

24 |
25 |
26 |

2. Choose a JVM 27 | Help Me Choose 28 | 40 |

41 |
42 |
43 | 44 |
Content is loading.
45 |
46 | 47 | 56 | 57 |

AdoptOpenJDK has moved, the blue download button will take you to the new location.

58 |

You can stil get AdoptOpenJDK binaries by clicking one of the buttons below:

59 | 60 | 66 | 67 | 73 |
74 | 75 |
76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 |

Get involved 

87 |
88 | 89 | 102 |
103 |
104 | 105 | {{> footer script=''}} 106 | -------------------------------------------------------------------------------- /src/handlebars/logos.handlebars: -------------------------------------------------------------------------------- 1 | {{> header title='Brand Resources | ' }} 2 | 3 |
4 | 5 |

Brand Resources

6 | 7 |

Basic Usage Guidelines

8 | 9 |
10 | 15 |
16 | 17 | 57 | 58 |
59 | 60 | {{> footer }} 61 | -------------------------------------------------------------------------------- /src/handlebars/partials/footer.handlebars: -------------------------------------------------------------------------------- 1 | 32 | 33 | 34 | 35 | 36 | {{{script}}} 37 | {{{script2}}} 38 | {{{script3}}} 39 | {{{script4}}} 40 | 41 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /src/handlebars/partials/header.handlebars: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | {{title}}AdoptOpenJDK - Open source, prebuilt OpenJDK binaries 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | {{{style1}}} 26 | {{{style2}}} 27 | 28 | 29 | 44 | 45 | 46 | 56 | 57 | 58 | {{> menu }} 59 | 69 | 70 | 71 | 72 |
73 | × 74 | 24th July 2021: AdoptOpenJDK is moving to the Eclipse Foundation and rebranding.
75 | Our July 2021 and future releases will come from Adoptium.net 76 |
77 | -------------------------------------------------------------------------------- /src/handlebars/partials/jck-tick.handlebars: -------------------------------------------------------------------------------- 1 | \{{#if thisVerified}} 2 |
This build is JCK certified.
3 | \{{/if}} 4 | -------------------------------------------------------------------------------- /src/handlebars/partials/menu.handlebars: -------------------------------------------------------------------------------- 1 | 2 | 40 | -------------------------------------------------------------------------------- /src/handlebars/partials/meta-description.handlebars: -------------------------------------------------------------------------------- 1 | AdoptOpenJDK provides prebuilt OpenJDK binaries from a fully open source set of build scripts and infrastructure. Supported platforms include Linux, macOS, Windows, ARM, Solaris, and AIX. 2 | -------------------------------------------------------------------------------- /src/handlebars/partials/modal.handlebars: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/handlebars/partials/social-bar.handlebars: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 | 5 | 6 | 7 |
8 |
9 | 10 | 11 | 12 | 13 | 14 |
15 |
16 | 17 | 18 | 19 | 20 | 21 |
22 |
23 | 24 | 25 | 26 | 27 | 28 |
29 | -------------------------------------------------------------------------------- /src/handlebars/quality.handlebars: -------------------------------------------------------------------------------- 1 | {{> header title='Quality | ' }} 2 | 3 | 4 | 5 |
6 | 7 |

Quality

8 | 9 |
10 | 11 |
12 | anchor icon 13 |

Quality

14 |
15 |
16 |

17 | AdoptOpenJDK builds and tests binaries for different source code streams based upon OpenJDK. 18 | Our binaries undergo extensive testing, and are made available with two distinct quality 19 | levels - release and nightly. 20 |

21 |

22 | Releases have passed all the available OpenJDK test suites and our additional 23 | tests (donated by the community), ensuring the best quality binary available. We recommend you 24 | choose releases for running your applications. 25 |

26 |

27 | Nightly builds have passed basic quality level testing. The nightlies 28 | may include functionality and implementations that are unstable, or have not had the benefit 29 | of long running tests. Use these nightlies if you wish to check the very latest capabilities 30 | and fixes, and to see what is coming in the next release. 31 |

32 |
33 | 34 | 38 |
39 |

40 | At this stage the London Jamocha Community CIC (aka LJC) has not been able to reach an 41 | agreement with Oracle to use the Java SE Technology Compatibility Kit (TCK) 42 | under the terms of the OpenJDK Community TCK License Agreement (OCTLA). 43 |

44 |

45 | We will continue to work with Oracle on this matter. 46 |

47 |

48 | All AdoptOpenJDK binaries are tested with our suite of functional, integration, 49 | stress, and performance tests, including real workloads from popular languages 50 | and applications. We are very confident in the quality of our builds. 51 |

52 |
53 | 54 |
55 | 56 |

Support 

57 |
58 | 59 |

Supported Platforms 

60 |
61 | 62 |

Submit an Issue 

63 |
64 |
65 |
66 | 67 |
68 | 69 | {{> footer }} 70 | -------------------------------------------------------------------------------- /src/handlebars/releases.handlebars: -------------------------------------------------------------------------------- 1 | {{> header title='Latest release | ' }} 2 | 3 |
4 | 5 |
6 |

Latest release

7 | 8 |
9 | 10 |
11 | Build archive 12 | 13 |
14 |
15 | 16 |
17 | Nightly builds 18 | 19 |
20 |
21 | 22 |
23 |
24 |

1. Choose a Version

25 |
26 |
27 |

2. Choose a JVM 28 | Help Me Choose 29 | 41 |

42 |
43 |
44 | 45 |
Content is loading.
46 |
47 |
48 | 49 | 175 |
176 |
177 | 178 | 179 | *Temurin releases are provided by the Eclipse Temurin project. Please consume these binaries from adoptium.net going forwards.
180 | *Semeru Runtimes releases are provided by IBM. Please consume these binaries from developer.ibm.com going forward. 181 |
182 | 183 | 184 |
185 | 186 | {{> footer script='' }} 187 | -------------------------------------------------------------------------------- /src/handlebars/upstream.handlebars: -------------------------------------------------------------------------------- 1 | {{> header title='Upstream | ' }} 2 | 3 |
4 | 5 |
6 |

Discontinued OpenJDK Project Builds

7 | 8 |
9 |

What are these binaries?

10 |

Upstream binaries were built by Red Hat on their infrastructure and distributed by AdoptOpenJDK on behalf of the OpenJDK jdk8u and jdk11u community projects. 11 | The last releases produced by this method were 8u342 and 11.0.16 (July 2022 CPU update). 12 | This service is now provided by the Adoptium project, and users of upstream builds should now migrate to the equivalent 13 | Eclipse Temurin releases.

14 |
15 | 16 |
17 | 18 |
19 | 20 | {{> footer script='' }} 21 | -------------------------------------------------------------------------------- /src/js/archive.js: -------------------------------------------------------------------------------- 1 | const {findPlatform, detectEA, getOfficialName, getPlatformOrder, 2 | loadAssetInfo, setRadioSelectors} = require('./common'); 3 | const {jvmVariant, variant} = require('./common'); 4 | 5 | const loading = document.getElementById('loading'); 6 | const errorContainer = document.getElementById('error-container'); 7 | 8 | // When archive page loads, run: 9 | module.exports.load = () => { 10 | setRadioSelectors(); 11 | 12 | loadAssetInfo(variant, jvmVariant, 'ga', undefined, undefined, undefined, 'adoptopenjdk', buildArchiveHTML, () => { 13 | // if there are no releases (beyond the latest one)... 14 | // report an error, remove the loading dots 15 | loading.innerHTML = ''; 16 | errorContainer.innerHTML = `

There are no archived releases yet for ${variant} on the ${jvmVariant} JVM. 17 | See the Latest release page.

`; 18 | }); 19 | } 20 | 21 | function buildArchiveHTML(aReleases) { 22 | const releases = []; 23 | 24 | aReleases.forEach(aRelease => { 25 | const publishedAt = moment(aRelease.timestamp); 26 | 27 | const release = { 28 | release_name: aRelease.release_name, 29 | release_link: aRelease.release_link, 30 | dashboard_link: `https://dash.adoptopenjdk.net/version.html?version=${variant}` 31 | + `&tag=${encodeURIComponent(aRelease.release_name)}`, 32 | release_day: publishedAt.format('D'), 33 | release_month: publishedAt.format('MMMM'), 34 | release_year: publishedAt.format('YYYY'), 35 | early_access: detectEA(aRelease.version_data), 36 | platforms: {}, 37 | }; 38 | 39 | // populate 'platformTableRows' with one row per binary for this release... 40 | aRelease.binaries.forEach(aReleaseAsset => { 41 | const platform = findPlatform(aReleaseAsset); 42 | 43 | // Skip this asset if its platform could not be matched (see the website's 'config.json') 44 | if (!platform) { 45 | return; 46 | } 47 | 48 | // Skip this asset if it's not a binary type we're interested in displaying 49 | const binary_type = aReleaseAsset.image_type.toUpperCase(); 50 | if (!['INSTALLER', 'JDK', 'JRE'].includes(binary_type)) { 51 | return; 52 | } 53 | 54 | if (!release.platforms[platform]) { 55 | release.platforms[platform] = { 56 | official_name: getOfficialName(platform), 57 | ordinal: getPlatformOrder(platform), 58 | assets: [], 59 | } 60 | } 61 | 62 | let binary_constructor = { 63 | type: binary_type, 64 | link: aReleaseAsset.package.link, 65 | checksum: aReleaseAsset.package.checksum, 66 | size: Math.floor(aReleaseAsset.package.size / 1000 / 1000), 67 | } 68 | 69 | if (aReleaseAsset.installer) { 70 | binary_constructor.installer_link = aReleaseAsset.installer.link 71 | binary_constructor.installer_checksum = aReleaseAsset.installer.checksum 72 | binary_constructor.installer_size = Math.floor(aReleaseAsset.installer.size / 1000 / 1000) 73 | } 74 | 75 | // Add the new binary to the release asset 76 | release.platforms[platform].assets.push(binary_constructor); 77 | }); 78 | releases.push(release); 79 | }); 80 | 81 | const template = Handlebars.compile(document.getElementById('template').innerHTML); 82 | document.getElementById('archive-table-body').innerHTML = template({releases}); 83 | 84 | setPagination(); 85 | 86 | loading.innerHTML = ''; // remove the loading dots 87 | 88 | // show the archive list and filter box, with fade-in animation 89 | const archiveList = document.getElementById('archive-list'); 90 | archiveList.className = archiveList.className.replace( /(?:^|\s)hide(?!\S)/g , ' animated fadeIn ' ); 91 | } 92 | 93 | function setPagination() { 94 | const container = document.getElementById('pagination-container'); 95 | const archiveTableBody = document.getElementById('archive-table-body'); 96 | 97 | $(container).pagination({ 98 | dataSource: Array.from(archiveTableBody.getElementsByClassName('release-row')).map((row) => row.outerHTML), 99 | pageSize: 5, 100 | callback: (rows) => { archiveTableBody.innerHTML = rows.join('') } 101 | }); 102 | 103 | if (container.getElementsByTagName('li').length <= 3) { 104 | container.classList.add('hide'); 105 | } 106 | } 107 | -------------------------------------------------------------------------------- /src/js/entry.js: -------------------------------------------------------------------------------- 1 | const {buildMenuTwisties, persistUrlQuery} = require('./common'); 2 | 3 | document.addEventListener('DOMContentLoaded', () => { 4 | persistUrlQuery(); 5 | buildMenuTwisties(); 6 | 7 | // '/index.html' --> 'index' 8 | // NOTE: Browserify requires strings in `require()`, so this is intentionally more explicit than 9 | // it normally would be. 10 | switch(window.location.pathname.split('/').pop().replace(/\.html$/i, '')) { 11 | case '': 12 | case 'index': 13 | return require('./index').load(); 14 | case 'archive': 15 | return require('./archive').load(); 16 | case 'releases': 17 | return require('./releases').load(); 18 | case 'upstream': 19 | return require('./upstream').load(); 20 | } 21 | }); 22 | -------------------------------------------------------------------------------- /src/js/index.js: -------------------------------------------------------------------------------- 1 | const { 2 | detectOS, 3 | loadLatestAssets, 4 | setRadioSelectors, 5 | } = require('./common'); 6 | const { 7 | jvmVariant, 8 | variant 9 | } = require('./common'); 10 | 11 | // set variables for all index page HTML elements that will be used by the JS 12 | const loading = document.getElementById('loading'); 13 | const errorContainer = document.getElementById('error-container'); 14 | const dlText = document.getElementById('dl-text'); 15 | const dlLatest = document.getElementById('dl-latest'); 16 | const dlLatestText = document.getElementById('dl-latest-text'); 17 | const dlArchive = document.getElementById('dl-archive'); 18 | const dlOther = document.getElementById('dl-other'); 19 | const dlVersionText = document.getElementById('dl-version-text'); 20 | 21 | // When index page loads, run: 22 | module.exports.load = () => { 23 | setRadioSelectors(); 24 | removeRadioButtons(); 25 | 26 | // Try to match up the detected OS with a platform from 'config.json' 27 | const OS = detectOS(); 28 | 29 | if (OS) { 30 | dlText.innerHTML = `Download for ${OS.officialName}`; 31 | } 32 | dlText.classList.remove('invisible'); 33 | 34 | const handleResponse = () => { 35 | buildHomepageHTML(jvmVariant); 36 | }; 37 | 38 | loadLatestAssets(variant, jvmVariant, 'latest', handleResponse, undefined, () => { 39 | errorContainer.innerHTML = `

There are no releases available for ${variant} on the ${jvmVariant} JVM. 40 | Please check our Nightly Builds.

`; 41 | loading.innerHTML = ''; // remove the loading dots 42 | }); 43 | } 44 | 45 | function removeRadioButtons() { 46 | const buttons = document.getElementsByClassName('btn-label'); 47 | for (var a = 0; a < buttons.length; a++) { 48 | if (buttons[a].firstChild.getAttribute('lts') === 'false') { 49 | buttons[a].style.display = 'none'; 50 | } 51 | } 52 | } 53 | 54 | function buildHomepageHTML(jvmVariant) { 55 | if (jvmVariant == 'hotspot') { 56 | let version = variant.replace(/\D/g, '') 57 | dlLatest.href = 'https://adoptium.net/temurin/releases?version=' + version; 58 | dlLatestText.textContent = 'adoptium.net'; 59 | dlVersionText.innerHTML = 'AdoptOpenJDK has moved...'; 60 | } else if (jvmVariant == 'openj9') { 61 | dlLatest.href = 'https://developer.ibm.com/languages/java/semeru-runtimes/downloads'; 62 | dlLatestText.textContent = 'developer.ibm.com'; 63 | dlVersionText.innerHTML = 'AdoptOpenJDK has moved...'; 64 | } 65 | 66 | // remove the loading dots, and make all buttons visible, with animated fade-in 67 | loading.classList.add('hide'); 68 | dlLatest.className = dlLatest.className.replace(/(?:^|\s)invisible(?!\S)/g, ' animated '); 69 | dlOther.className = dlOther.className.replace(/(?:^|\s)invisible(?!\S)/g, ' animated '); 70 | dlArchive.className = dlArchive.className.replace(/(?:^|\s)invisible(?!\S)/g, ' animated '); 71 | 72 | dlLatest.onclick = () => { 73 | document.getElementById('installation-link').className += ' animated pulse infinite transition-bright'; 74 | }; 75 | 76 | // animate the main download button shortly after the initial animation has finished. 77 | setTimeout(() => { 78 | dlLatest.className = 'dl-button a-button animated pulse'; 79 | }, 1000); 80 | } 81 | -------------------------------------------------------------------------------- /src/js/releases.js: -------------------------------------------------------------------------------- 1 | const {findPlatform, getSupportedVersion, getOfficialName, getPlatformOrder, 2 | detectLTS, detectEA, loadLatestAssets, orderPlatforms, setRadioSelectors, setTickLink} = require('./common'); 3 | const {jvmVariant, variant} = require('./common'); 4 | 5 | const loading = document.getElementById('loading'); 6 | const errorContainer = document.getElementById('error-container'); 7 | 8 | // When releases page loads, run: 9 | module.exports.load = () => { 10 | 11 | Handlebars.registerHelper('fetchOS', function(title) { 12 | return title.split(' ')[0]; 13 | }); 14 | 15 | Handlebars.registerHelper('fetchArch', function(title) { 16 | return title.split(' ')[1] 17 | }); 18 | 19 | Handlebars.registerHelper('formatVersion', function(version) { 20 | return version.replace(/\D/g,''); 21 | }); 22 | 23 | Handlebars.registerHelper('fetchExtension', function(filename) { 24 | let extension = `.${filename.split('.').pop()}` 25 | // Workaround to prevent extension returning as .gz 26 | if (extension == '.gz') { 27 | extension = '.tar.gz' 28 | } 29 | return extension 30 | }); 31 | 32 | Handlebars.registerHelper('if_eq', function(a, b, opts) { 33 | if (a == b) { 34 | return opts.fn(this) 35 | } else { 36 | return opts.inverse(this) 37 | } 38 | }); 39 | 40 | const LTS = detectLTS(variant); 41 | 42 | const styles = ` 43 | .download-last-version:after { 44 | content: "${LTS}"; 45 | } 46 | ` 47 | if (LTS !== null) { 48 | const styleSheet = document.createElement('style') 49 | styleSheet.type = 'text/css' 50 | styleSheet.innerText = styles 51 | document.head.appendChild(styleSheet) 52 | } 53 | 54 | setRadioSelectors(); 55 | 56 | loadLatestAssets(variant, jvmVariant, 'latest', buildLatestHTML, undefined, () => { 57 | errorContainer.innerHTML = `

There are no releases available for ${variant} on the ${jvmVariant} JVM. 58 | Please check our Nightly Builds.

`; 59 | loading.innerHTML = ''; // remove the loading dots 60 | }); 61 | } 62 | 63 | function buildLatestHTML(releasesJson) { 64 | 65 | // Array of releases that have binaries we want to display 66 | let releases = []; 67 | 68 | releasesJson.forEach((releaseAsset) => { 69 | const platform = findPlatform(releaseAsset.binary); 70 | 71 | // Skip this asset if its platform could not be matched (see the website's 'config.json') 72 | if (!platform) { 73 | return; 74 | } 75 | 76 | let heap_size; 77 | if (releaseAsset.binary.heap_size == 'large') { 78 | heap_size = 'Large Heap'; 79 | } else if (releaseAsset.binary.heap_size == 'normal') { 80 | heap_size = 'Normal'; 81 | } 82 | 83 | // Skip this asset if it's not a binary type we're interested in displaying 84 | const binary_type = releaseAsset.binary.image_type.toUpperCase(); 85 | if (!['INSTALLER', 'JDK', 'JRE'].includes(binary_type)) { 86 | return; 87 | } 88 | // Get the existing release asset (passed to the template) or define a new one 89 | let release = releases.find((release) => release.platform_name === platform); 90 | if (!release) { 91 | release = { 92 | platform_name: platform, 93 | platform_official_name: getOfficialName(platform), 94 | platform_ordinal: getPlatformOrder(platform), 95 | platform_supported_version: getSupportedVersion(platform), 96 | release_name: releaseAsset.release_name, 97 | heap_size: heap_size, 98 | release_link: releaseAsset.release_link, 99 | release_datetime: moment(releaseAsset.timestamp).format('YYYY-MM-DD hh:mm:ss'), 100 | early_access: detectEA(releaseAsset.version), 101 | vendor: releaseAsset.vendor, 102 | variant: variant, 103 | binaries: [] 104 | }; 105 | } 106 | 107 | let binary_constructor = { 108 | type: binary_type, 109 | link: releaseAsset.binary.package.link, 110 | checksum: releaseAsset.binary.package.checksum, 111 | size: Math.floor(releaseAsset.binary.package.size / 1000 / 1000) 112 | } 113 | 114 | if (releaseAsset.binary.installer) { 115 | binary_constructor.installer_link = releaseAsset.binary.installer.link 116 | binary_constructor.installer_checksum = releaseAsset.binary.installer.checksum 117 | binary_constructor.installer_size = Math.floor(releaseAsset.binary.installer.size / 1000 / 1000) 118 | } 119 | 120 | // Add the new binary to the release asset 121 | release.binaries.push(binary_constructor); 122 | 123 | 124 | // We have the first binary, so add the release asset. 125 | if (release.binaries.length === 1) { 126 | releases.push(release); 127 | } 128 | }); 129 | 130 | releases = orderPlatforms(releases, 'platform_ordinal'); 131 | releases.forEach((release) => { 132 | release.binaries.sort((binaryA, binaryB) => binaryA.type > binaryB.type ? 1 : binaryA.type < binaryB.type ? -1 : 0); 133 | }); 134 | 135 | const templateSelector = Handlebars.compile(document.getElementById('template-selector').innerHTML); 136 | document.getElementById('latest-selector').innerHTML = templateSelector({releases}); 137 | 138 | setTickLink(); 139 | 140 | global.populateFilters('all'); 141 | 142 | loading.innerHTML = ''; // remove the loading dots 143 | 144 | const latestContainer = document.getElementById('latest-container'); 145 | latestContainer.className = latestContainer.className.replace(/(?:^|\s)invisible(?!\S)/g, ' animated fadeIn '); // make this section visible (invisible by default), with animated fade-in 146 | } 147 | 148 | global.filterOS = () => { 149 | let os = document.getElementById('os-filter'); 150 | let arch = document.getElementById('arch-filter'); 151 | if (arch.options[arch.selectedIndex].value === 'Any') { 152 | filterTable(os.options[os.selectedIndex].value, 'os') 153 | global.populateFilters('arch') 154 | } else if (os.options[os.selectedIndex].value == 'Any') { 155 | global.filterArch() 156 | } else { 157 | filterTable(os.options[os.selectedIndex].value, 'multi', arch.options[arch.selectedIndex].value) 158 | } 159 | } 160 | 161 | global.filterArch = () => { 162 | let arch = document.getElementById('arch-filter'); 163 | let os = document.getElementById('os-filter'); 164 | if (os.options[os.selectedIndex].value === 'Any') { 165 | filterTable(arch.options[arch.selectedIndex].value, 'arch') 166 | } else if (arch.options[arch.selectedIndex].value == 'Any') { 167 | global.filterOS() 168 | } else { 169 | filterTable(arch.options[arch.selectedIndex].value, 'multi', os.options[os.selectedIndex].value) 170 | } 171 | } 172 | 173 | global.populateFilters = (filter) => { 174 | let releaseTable = document.getElementById('latest-selector').getElementsByClassName('releases-table'); 175 | let OSES = ['Any']; 176 | let ARCHES = ['Any']; 177 | for (let release of releaseTable) { 178 | if (release.style.display !== 'none') { 179 | OSES.push(release.querySelector('.os').innerHTML.split(' ')[0]) 180 | ARCHES.push(release.querySelector('.arch').innerHTML) 181 | } 182 | } 183 | 184 | if (filter == 'all' || filter == 'os') { 185 | let osFilter = document.getElementById('os-filter'); 186 | let selected = osFilter.options[osFilter.selectedIndex].value 187 | osFilter.innerHTML = ''; 188 | 189 | for (let os of new Set(OSES)) { 190 | let option = document.createElement('option'); 191 | option.text = os; 192 | option.value = os; 193 | osFilter.appendChild(option); 194 | } 195 | osFilter.value=selected; 196 | } 197 | 198 | if (filter == 'all' || filter == 'arch') { 199 | let archFilter = document.getElementById('arch-filter'); 200 | let selected = archFilter.options[archFilter.selectedIndex].value 201 | archFilter.innerHTML = ''; 202 | 203 | for (let arch of new Set(ARCHES)) { 204 | let option = document.createElement('option'); 205 | option.text = arch; 206 | option.value = arch; 207 | archFilter.appendChild(option) 208 | } 209 | archFilter.value=selected; 210 | } 211 | } 212 | 213 | function filterTable(string, type, string1) { 214 | let tables = document.getElementById('latest-selector').getElementsByClassName('releases-table') 215 | for (let table of tables) { 216 | if (type === 'multi') { 217 | let os = table.querySelector('.os').innerHTML; 218 | let arch = table.querySelector('.arch').innerHTML; 219 | if (os.startsWith(string) || arch === string) { 220 | if (os.startsWith(string1) || arch === string1) { 221 | table.style.display = ''; 222 | } else { 223 | table.style.display = 'none'; 224 | } 225 | } else { 226 | table.style.display = 'none'; 227 | } 228 | } 229 | 230 | if (type === 'os') { 231 | if (string === 'Any') { 232 | table.style.display = ''; 233 | } else { 234 | let os = table.querySelector('.os').innerHTML; 235 | if (os.startsWith(string)) { 236 | table.style.display = ''; 237 | } else { 238 | table.style.display = 'none'; 239 | } 240 | } 241 | } 242 | 243 | if (type === 'arch') { 244 | if (string == 'Any') { 245 | table.style.display = ''; 246 | } else { 247 | let arch = table.querySelector('.arch').innerHTML; 248 | if (arch === string) { 249 | table.style.display = ''; 250 | } else { 251 | table.style.display = 'none'; 252 | } 253 | } 254 | } 255 | } 256 | } 257 | -------------------------------------------------------------------------------- /src/js/upstream.js: -------------------------------------------------------------------------------- 1 | const {findPlatform, getSupportedVersion, getOfficialName, getPlatformOrder, 2 | detectLTS, setUrlQuery, loadAssetInfo, orderPlatforms, setRadioSelectors, setTickLink} = require('./common'); 3 | const {variant} = require('./common'); 4 | 5 | // Hard coded as Red Hat only ship hotspot 6 | const jvmVariant = 'hotspot' 7 | 8 | const loading = document.getElementById('loading'); 9 | const errorContainer = document.getElementById('error-container'); 10 | 11 | const gaSelector = document.getElementById('ga-selector'); 12 | const gaButtons = document.getElementsByName('ga'); 13 | 14 | const urlParams = new URLSearchParams(window.location.search); 15 | const ga = urlParams.get('ga') || 'ga'; 16 | 17 | gaSelector.onchange = () => { 18 | const gaButton = Array.from(gaButtons).find((button) => button.checked); 19 | setUrlQuery({ 20 | variant, 21 | ga: gaButton.value 22 | }); 23 | }; 24 | 25 | for (let button of gaButtons) { 26 | if (button.value === ga) { 27 | button.setAttribute('checked', 'checked'); 28 | break; 29 | } 30 | } 31 | 32 | // When releases page loads, run: 33 | module.exports.load = () => { 34 | 35 | Handlebars.registerHelper('fetchOS', function(title) { 36 | if (title.split(' ')[2]) { 37 | // This is so that XL binaries have Large Heap in the name still 38 | return title.replace(title.split(' ')[1], ''); 39 | } else { 40 | return title.split(' ')[0]; 41 | } 42 | }); 43 | 44 | Handlebars.registerHelper('fetchArch', function(title) { 45 | return title.split(' ')[1] 46 | }); 47 | 48 | Handlebars.registerHelper('fetchExtension', function(filename) { 49 | let extension = `.${filename.split('.').pop()}` 50 | // Workaround to prevent extension returning as .gz 51 | if (extension == '.gz') { 52 | extension = '.tar.gz' 53 | } 54 | return extension 55 | }); 56 | 57 | const LTS = detectLTS(variant); 58 | 59 | const styles = ` 60 | .download-last-version:after { 61 | content: "${LTS}"; 62 | } 63 | ` 64 | if (LTS !== null) { 65 | const styleSheet = document.createElement('style') 66 | styleSheet.type = 'text/css' 67 | styleSheet.innerText = styles 68 | document.head.appendChild(styleSheet) 69 | } 70 | 71 | setRadioSelectors(); 72 | 73 | loadAssetInfo(variant, jvmVariant, ga, undefined, undefined, undefined, 'openjdk', buildUpstreamHTML, () => { 74 | // if there are no releases (beyond the latest one)... 75 | // report an error, remove the loading dots 76 | loading.innerHTML = ''; 77 | errorContainer.innerHTML = `

There are no archived releases yet for ${variant} on the ${jvmVariant} JVM. 78 | See the Latest release page.

`; 79 | }); 80 | 81 | const buttons = document.getElementsByClassName('btn-label'); 82 | for (var a = 0; a < buttons.length; a++) { 83 | if (buttons[a].firstChild.getAttribute('lts') !== 'true') { 84 | buttons[a].style.display = 'none'; 85 | } 86 | } 87 | } 88 | 89 | function buildUpstreamHTML(releasesJson) { 90 | 91 | // Array of releases that have binaries we want to display 92 | let releases = []; 93 | 94 | releasesJson[0].binaries.forEach((releaseAsset) => { 95 | 96 | const platform = findPlatform(releaseAsset); 97 | 98 | // Skip this asset if its platform could not be matched (see the website's 'config.json') 99 | if (!platform) { 100 | return; 101 | } 102 | 103 | // Skip this asset if it's not a binary type we're interested in displaying 104 | const binary_type = releaseAsset.image_type.toUpperCase(); 105 | if (!['INSTALLER', 'JDK', 'JRE'].includes(binary_type)) { 106 | return; 107 | } 108 | 109 | // Get the existing release asset (passed to the template) or define a new one 110 | let release = releases.find((release) => release.platform_name === platform); 111 | 112 | if (!release) { 113 | release = { 114 | platform_name: platform, 115 | platform_official_name: getOfficialName(platform), 116 | platform_ordinal: getPlatformOrder(platform), 117 | platform_supported_version: getSupportedVersion(platform), 118 | release_name: releasesJson[0].version_data.openjdk_version, 119 | release_link: releaseAsset.release_link, 120 | release_datetime: moment(releaseAsset.timestamp).format('YYYY-MM-DD hh:mm:ss'), 121 | source: releasesJson[0].source.link, 122 | binaries: [] 123 | }; 124 | } 125 | 126 | let binary_constructor = { 127 | type: binary_type, 128 | link: releaseAsset.package.link, 129 | signature_link: releaseAsset.package.signature_link, 130 | size: Math.floor(releaseAsset.package.size / 1000 / 1000) 131 | } 132 | 133 | // Add the new binary to the release asset 134 | release.binaries.push(binary_constructor); 135 | 136 | 137 | // We have the first binary, so add the release asset. 138 | if (release.binaries.length === 1) { 139 | releases.push(release); 140 | } 141 | }); 142 | 143 | releases = orderPlatforms(releases, 'platform_ordinal'); 144 | releases.forEach((release) => { 145 | release.binaries.sort((binaryA, binaryB) => binaryA.type > binaryB.type ? 1 : binaryA.type < binaryB.type ? -1 : 0); 146 | }); 147 | 148 | const templateSelector = Handlebars.compile(document.getElementById('template-selector').innerHTML); 149 | document.getElementById('latest-selector').innerHTML = templateSelector({releases}); 150 | 151 | setTickLink(); 152 | 153 | global.populateFilters('all'); 154 | 155 | loading.innerHTML = ''; // remove the loading dots 156 | 157 | const latestContainer = document.getElementById('latest-container'); 158 | latestContainer.className = latestContainer.className.replace(/(?:^|\s)invisible(?!\S)/g, ' animated fadeIn '); // make this section visible (invisible by default), with animated fade-in 159 | } 160 | 161 | global.filterOS = () => { 162 | let os = document.getElementById('os-filter'); 163 | let arch = document.getElementById('arch-filter'); 164 | if (arch.options[arch.selectedIndex].value === 'Any') { 165 | filterTable(os.options[os.selectedIndex].value, 'os') 166 | global.populateFilters('arch') 167 | } else if (os.options[os.selectedIndex].value == 'Any') { 168 | global.filterArch() 169 | } else { 170 | filterTable(os.options[os.selectedIndex].value, 'multi', arch.options[arch.selectedIndex].value) 171 | } 172 | } 173 | 174 | global.filterArch = () => { 175 | let arch = document.getElementById('arch-filter'); 176 | let os = document.getElementById('os-filter'); 177 | if (os.options[os.selectedIndex].value === 'Any') { 178 | filterTable(arch.options[arch.selectedIndex].value, 'arch') 179 | } else if (arch.options[arch.selectedIndex].value == 'Any') { 180 | global.filterOS() 181 | } else { 182 | filterTable(arch.options[arch.selectedIndex].value, 'multi', os.options[os.selectedIndex].value) 183 | } 184 | } 185 | 186 | global.populateFilters = (filter) => { 187 | let releaseTable = document.getElementById('latest-selector').getElementsByClassName('releases-table'); 188 | let OSES = ['Any']; 189 | let ARCHES = ['Any']; 190 | for (let release of releaseTable) { 191 | if (release.style.display !== 'none') { 192 | OSES.push(release.querySelector('.os').innerHTML.split(' ')[0]) 193 | ARCHES.push(release.querySelector('.arch').innerHTML) 194 | } 195 | } 196 | 197 | if (filter == 'all' || filter == 'os') { 198 | let osFilter = document.getElementById('os-filter'); 199 | let selected = osFilter.options[osFilter.selectedIndex].value 200 | osFilter.innerHTML = ''; 201 | 202 | for (let os of new Set(OSES)) { 203 | let option = document.createElement('option'); 204 | option.text = os; 205 | option.value = os; 206 | osFilter.append(option); 207 | } 208 | osFilter.value=selected; 209 | } 210 | 211 | if (filter == 'all' || filter == 'arch') { 212 | let archFilter = document.getElementById('arch-filter'); 213 | let selected = archFilter.options[archFilter.selectedIndex].value 214 | archFilter.innerHTML = ''; 215 | 216 | for (let arch of new Set(ARCHES)) { 217 | let option = document.createElement('option'); 218 | option.text = arch; 219 | option.value = arch; 220 | archFilter.append(option) 221 | } 222 | archFilter.value=selected; 223 | } 224 | } 225 | 226 | function filterTable(string, type, string1) { 227 | let tables = document.getElementById('latest-selector').getElementsByClassName('releases-table') 228 | for (let table of tables) { 229 | if (type === 'multi') { 230 | let os = table.querySelector('.os').innerHTML; 231 | let arch = table.querySelector('.arch').innerHTML; 232 | if (os.startsWith(string) || arch === string) { 233 | if (os.startsWith(string1) || arch === string1) { 234 | table.style.display = ''; 235 | } else { 236 | table.style.display = 'none'; 237 | } 238 | } else { 239 | table.style.display = 'none'; 240 | } 241 | } 242 | 243 | if (type === 'os') { 244 | if (string === 'Any') { 245 | table.style.display = ''; 246 | } else { 247 | let os = table.querySelector('.os').innerHTML; 248 | if (os.startsWith(string)) { 249 | table.style.display = ''; 250 | } else { 251 | table.style.display = 'none'; 252 | } 253 | } 254 | } 255 | 256 | if (type === 'arch') { 257 | if (string == 'Any') { 258 | table.style.display = ''; 259 | } else { 260 | let arch = table.querySelector('.arch').innerHTML; 261 | if (arch === string) { 262 | table.style.display = ''; 263 | } else { 264 | table.style.display = 'none'; 265 | } 266 | } 267 | } 268 | } 269 | } 270 | -------------------------------------------------------------------------------- /src/json/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": [ 3 | { 4 | "searchableName": "openjdk8", 5 | "jvm": ["HotSpot", "OpenJ9"], 6 | "label": "OpenJDK 8", 7 | "lts": true 8 | }, 9 | { 10 | "searchableName": "openjdk9", 11 | "jvm": ["HotSpot", "OpenJ9"], 12 | "label": "OpenJDK 9", 13 | "lts": false 14 | }, 15 | { 16 | "searchableName": "openjdk10", 17 | "jvm": ["HotSpot", "OpenJ9"], 18 | "label": "OpenJDK 10", 19 | "lts": false 20 | }, 21 | { 22 | "searchableName": "openjdk11", 23 | "jvm": ["HotSpot", "OpenJ9"], 24 | "label": "OpenJDK 11", 25 | "default": true, 26 | "lts": true 27 | }, 28 | { 29 | "searchableName": "openjdk12", 30 | "jvm": ["HotSpot", "OpenJ9"], 31 | "label": "OpenJDK 12", 32 | "lts": false 33 | }, 34 | { 35 | "searchableName": "openjdk13", 36 | "jvm": ["HotSpot", "OpenJ9"], 37 | "label": "OpenJDK 13", 38 | "lts": false 39 | }, 40 | { 41 | "searchableName": "openjdk14", 42 | "jvm": ["HotSpot", "OpenJ9"], 43 | "label": "OpenJDK 14", 44 | "lts": false 45 | }, 46 | { 47 | "searchableName": "openjdk15", 48 | "jvm": ["HotSpot", "OpenJ9"], 49 | "label": "OpenJDK 15", 50 | "lts": "false" 51 | }, 52 | { 53 | "searchableName": "openjdk16", 54 | "jvm": ["HotSpot", "OpenJ9"], 55 | "label": "OpenJDK 16", 56 | "lts": "latest" 57 | } 58 | ], 59 | "installCommands": [ 60 | { 61 | "name": "tar", 62 | "installCommand": "tar xzf FILENAME", 63 | "pathCommand": "export PATH=$PWD/DIRNAME/bin:$PATH", 64 | "checksumCommand": "sha256sum FILENAME", 65 | "checksumAutoCommandHint": " (the command must be run on a terminal in the same directory you download the binary file)", 66 | "checksumAutoCommand": "wget -O- -q -T 1 -t 1 FILEHASHURL | sha256sum -c" 67 | }, 68 | { 69 | "name": "gunzip", 70 | "installCommand": "gunzip -c FILENAME | tar xf -", 71 | "pathCommand": "export PATH=$PWD/DIRNAME/bin:$PATH", 72 | "checksumCommand": "sha256sum FILENAME", 73 | "checksumAutoCommandHint": " (the command must be run on a terminal in the same directory you download the binary file)", 74 | "checksumAutoCommand": "wget -O- -q -T 1 -t 1 FILEHASHURL | sha256sum -c" 75 | }, 76 | { 77 | "name": "powershell", 78 | "installCommand": "powershell -Command Expand-Archive -Path .\\FILENAME -DestinationPath .", 79 | "pathCommand": "set PATH=%cd%\\DIRNAME\\bin;%PATH%", 80 | "checksumCommand": "certutil -hashfile FILENAME SHA256", 81 | "checksumAutoCommandHint": " (the command must be run using Command Prompt in the same directory you download the binary file and requires PowerShell 3.0+)", 82 | "checksumAutoCommand": "powershell -command \"[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; iwr -outf FILEHASHNAME FILEHASHURL\" && powershell \"$CHECKSUMVAR=($(Get-FileHash -Algorithm SHA256 -LiteralPath FILENAME | Format-List -Property Hash | Out-String) -replace \\\"Hash : \\\", \\\"\\\" -replace \\\"`r`n\\\", \\\"\\\"); Select-String -LiteralPath FILEHASHNAME -Pattern $CHECKSUMVAR | Format-List -Property FileName | Out-String\" | find /i \"FILEHASHNAME\">Nul && ( echo \"FILENAME: The SHA-256 fingerprint matches\" ) || ( echo \"FILENAME: The SHA-256 fingerprint does NOT match\" )" 83 | } 84 | ], 85 | "platforms": [ 86 | { 87 | "officialName": "Linux x64", 88 | "searchableName": "X64_LINUX", 89 | "attributes": { 90 | "heap_size": "normal", 91 | "os": "linux", 92 | "architecture": "x64" 93 | }, 94 | "osDetectionString": "Linux Mint Debian Fedora FreeBSD Gentoo Haiku Kubuntu OpenBSD Red Hat RHEL SuSE Ubuntu Xubuntu hpwOS webOS Tizen", 95 | "supported_version": { 96 | "_comment_": "Version numbers use >= logic and need to be specified in ascending order", 97 | "hotspot": "glibc version 2.12 or higher", 98 | "openj9": { 99 | "8": "glibc version 2.12 or higher", 100 | "15": "glibc version 2.17 or higher" 101 | } 102 | } 103 | }, 104 | { 105 | "officialName": "Alpine x64", 106 | "searchableName": "LINUXALPINE", 107 | "attributes": { 108 | "heap_size": "normal", 109 | "os": "alpine-linux", 110 | "architecture": "x64" 111 | }, 112 | "osDetectionString": "not-to-be-detected", 113 | "supported_version": "Alpine Linux 3.5 or later" 114 | }, 115 | { 116 | "officialName": "Linux x64 Large Heap", 117 | "searchableName": "LINUXXL", 118 | "attributes": { 119 | "heap_size": "large", 120 | "os": "linux", 121 | "architecture": "x64" 122 | }, 123 | "osDetectionString": "not-to-be-detected", 124 | "supported_version": { 125 | "_comment_": "Version numbers use >= logic and need to be specified in ascending order", 126 | "openj9": { 127 | "8": "glibc version 2.12 or higher", 128 | "15": "glibc version 2.17 or higher" 129 | } 130 | } 131 | }, 132 | { 133 | "officialName": "Windows x86", 134 | "searchableName": "X86-32_WIN", 135 | "attributes": { 136 | "heap_size": "normal", 137 | "os": "windows", 138 | "architecture": "x32" 139 | }, 140 | "osDetectionString": "Windows Win Cygwin Windows Server 2008 R2 / 7 Windows Server 2008 / Vista Windows XP", 141 | "supported_version": "2012r2 or later" 142 | }, 143 | { 144 | "officialName": "Windows x64", 145 | "searchableName": "X64_WIN", 146 | "attributes": { 147 | "heap_size": "normal", 148 | "os": "windows", 149 | "architecture": "x64" 150 | }, 151 | "osDetectionString": "Windows Win Cygwin Windows Server 2008 R2 / 7 Windows Server 2008 / Vista Windows XP", 152 | "supported_version": "2012r2 or later" 153 | }, 154 | { 155 | "officialName": "Windows aarch64", 156 | "searchableName": "AARCH64_WIN", 157 | "attributes": { 158 | "heap_size": "normal", 159 | "os": "windows", 160 | "architecture": "aarch64" 161 | }, 162 | "osDetectionString": "not-to-be-detected", 163 | "supported_version": "2016 or later" 164 | }, 165 | { 166 | "officialName": "Windows x64 Large Heap", 167 | "searchableName": "X64_WINXL", 168 | "attributes": { 169 | "heap_size": "large", 170 | "os": "windows", 171 | "architecture": "x64" 172 | }, 173 | "osDetectionString": "Windows Win Cygwin Windows Server 2008 R2 / 7 Windows Server 2008 / Vista Windows XP", 174 | "supported_version": "2012r2 or later" 175 | }, 176 | { 177 | "officialName": "macOS x64", 178 | "searchableName": "X64_MAC", 179 | "attributes": { 180 | "heap_size": "normal", 181 | "os": "mac", 182 | "architecture": "x64" 183 | }, 184 | "osDetectionString": "Mac OS X OSX macOS Macintosh", 185 | "supported_version": "10.10 or later" 186 | }, 187 | { 188 | "officialName": "macOS x64 Large Heap", 189 | "searchableName": "MACOSXL", 190 | "attributes": { 191 | "heap_size": "large", 192 | "os": "mac", 193 | "architecture": "x64" 194 | }, 195 | "osDetectionString": "not-to-be-detected", 196 | "supported_version": "10.10 or later" 197 | }, 198 | { 199 | "officialName": "Linux s390x", 200 | "searchableName": "S390X_LINUX", 201 | "attributes": { 202 | "heap_size": "normal", 203 | "os": "linux", 204 | "architecture": "s390x" 205 | }, 206 | "osDetectionString": "not-to-be-detected", 207 | "supported_version": "glibc version 2.17 or higher" 208 | }, 209 | { 210 | "officialName": "Linux s390x Large Heap", 211 | "searchableName": "LINUXS390XXL", 212 | "attributes": { 213 | "heap_size": "large", 214 | "os": "linux", 215 | "architecture": "s390x" 216 | }, 217 | "osDetectionString": "not-to-be-detected", 218 | "supported_version": "glibc version 2.17 or higher" 219 | }, 220 | { 221 | "officialName": "Linux ppc64le", 222 | "searchableName": "PPC64LE_LINUX", 223 | "attributes": { 224 | "heap_size": "normal", 225 | "os": "linux", 226 | "architecture": "ppc64le" 227 | }, 228 | "osDetectionString": "not-to-be-detected", 229 | "supported_version": "glibc version 2.17 or higher" 230 | }, 231 | { 232 | "officialName": "Linux ppc64le Large Heap", 233 | "searchableName": "LINUXPPC64LEXL", 234 | "attributes": { 235 | "heap_size": "large", 236 | "os": "linux", 237 | "architecture": "ppc64le" 238 | }, 239 | "osDetectionString": "not-to-be-detected", 240 | "supported_version": "glibc version 2.17 or higher" 241 | }, 242 | { 243 | "officialName": "Linux aarch64", 244 | "searchableName": "AARCH64_LINUX", 245 | "attributes": { 246 | "heap_size": "normal", 247 | "os": "linux", 248 | "architecture": "aarch64" 249 | }, 250 | "osDetectionString": "not-to-be-detected", 251 | "supported_version": "glibc version 2.17 or higher" 252 | }, 253 | { 254 | "officialName": "Linux aarch64 Large Heap", 255 | "searchableName": "AARCH64_LINUXXL", 256 | "attributes": { 257 | "heap_size": "large", 258 | "os": "linux", 259 | "architecture": "aarch64" 260 | }, 261 | "osDetectionString": "not-to-be-detected", 262 | "supported_version": "glibc version 2.17 or higher" 263 | }, 264 | { 265 | "officialName": "Linux arm32", 266 | "searchableName": "ARM32_LINUX", 267 | "attributes": { 268 | "heap_size": "normal", 269 | "os": "linux", 270 | "architecture": "arm" 271 | }, 272 | "osDetectionString": "not-to-be-detected", 273 | "supported_version": "glibc version 2.17 or higher" 274 | }, 275 | { 276 | "officialName": "Solaris sparcv9", 277 | "searchableName": "SPARCV9_SOLARIS", 278 | "attributes": { 279 | "heap_size": "normal", 280 | "os": "solaris", 281 | "architecture": "sparcv9" 282 | }, 283 | "osDetectionString": "not-to-be-detected", 284 | "supported_version": "solaris 10,11" 285 | }, 286 | { 287 | "officialName": "Solaris x64", 288 | "searchableName": "X64_SOLARIS", 289 | "attributes": { 290 | "heap_size": "normal", 291 | "os": "solaris", 292 | "architecture": "x64" 293 | }, 294 | "osDetectionString": "not-to-be-detected", 295 | "supported_version": "solaris 10,11" 296 | }, 297 | { 298 | "officialName": "AIX ppc64", 299 | "searchableName": "PPC64_AIX", 300 | "attributes": { 301 | "heap_size": "normal", 302 | "os": "aix", 303 | "architecture": "ppc64" 304 | }, 305 | "osDetectionString": "not-to-be-detected", 306 | "supported_version": "7.1 TL4 or later" 307 | }, 308 | { 309 | "officialName": "Linux riscv64", 310 | "searchableName": "RISCV64", 311 | "attributes": { 312 | "heap_size": "normal", 313 | "os": "linux", 314 | "architecture": "riscv64" 315 | }, 316 | "osDetectionString": "not-to-be-detected", 317 | "supported_version": "glibc version 2.27 or higher" 318 | } 319 | ] 320 | } 321 | -------------------------------------------------------------------------------- /src/json/config.schema.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "$id": "https://adoptopenjdk.net/dist/json/config.schema.json", 4 | "title": "AdoptOpenJDK Release Definitions", 5 | "description": "Configuration for product listings on adoptopenjdk.net", 6 | "type": "object", 7 | "required": ["variants", "installCommands", "platforms"], 8 | "definitions": { 9 | "fileExt": { 10 | "type": "string", 11 | "description": "A file extension beginning with a period.", 12 | "examples": [".exe", ".tar.gz", ".run", ".sh"], 13 | "oneOf": [ 14 | { "pattern": "^(\\.[a-z0-9]+)+$" }, 15 | { "enum": [ "no-installer-available" ] } 16 | ] 17 | }, 18 | "command": { 19 | "type": "string", 20 | "description": "A command that can be executed on a respective platform.", 21 | "$comment": "Update 'pattern' to enforce styles or add restricted patterns to the 'not anyOf' array.", 22 | "pattern": "^(.*)$", 23 | "not": { 24 | "anyOf": [ 25 | { "pattern": "(rm -\\w*[rRfdviI]+\\w* /\\s*)$" } 26 | ] 27 | } 28 | } 29 | }, 30 | "properties": { 31 | "variants": { 32 | "$id": "#/properties/variants", 33 | "type": "array", 34 | "title": "JDK Versions and Variants", 35 | "items": { 36 | "$id": "#/properties/variants/items", 37 | "type": "object", 38 | "required": ["searchableName"], 39 | "properties": { 40 | "searchableName": { 41 | "$id": "#/properties/variants/items/properties/searchableName", 42 | "type": "string", 43 | "title": "Searchable Name (package manager-friendly)", 44 | "examples": ["openjdk8", "openjdk11"] 45 | }, 46 | "jvm": { 47 | "$id": "#/properties/variants/items/properties/jvm", 48 | "type": "array", 49 | "title": "JVM", 50 | "description": "Object containing all supported JVM's for a specific version." 51 | }, 52 | "default": { 53 | "$id": "#/properties/variants/items/properties/default", 54 | "type": "boolean", 55 | "title": "Default variant", 56 | "description": "True for a variant that should be selected by default.", 57 | "default": false 58 | } 59 | } 60 | } 61 | }, 62 | "installCommands": { 63 | "$id": "#/properties/installCommands", 64 | "type": "array", 65 | "title": "Install Commands", 66 | "description": "", 67 | "items": { 68 | "$id": "#/properties/installCommands/items", 69 | "type": "object", 70 | "required": [ 71 | "name", 72 | "installCommand", 73 | "pathCommand", 74 | "checksumCommand", 75 | "checksumAutoCommand" 76 | ], 77 | "properties": { 78 | "installCommand": { 79 | "$id": "#/properties/installCommands/items/properties/installCommand", 80 | "$ref": "#/definitions/command", 81 | "title": "Installation command", 82 | "examples": ["tar -xf FILENAME"] 83 | }, 84 | "pathCommand": { 85 | "$id": "#/properties/installCommands/items/properties/pathCommand", 86 | "$ref": "#/definitions/command", 87 | "title": "Path command", 88 | "examples": ["export PATH=$PWD/DIRNAME/bin:$PATH"] 89 | }, 90 | "checksumCommand": { 91 | "$id": "#/properties/installCommands/items/properties/checksumCommand", 92 | "$ref": "#/definitions/command", 93 | "title": "Checksum command", 94 | "examples": ["sha256sum FILENAME"] 95 | }, 96 | "checksumAutoCommandHint": { 97 | "$id": "#/properties/installCommands/items/properties/checksumAutoCommandHint", 98 | "$ref": "#/definitions/command", 99 | "title": "Checksum auto command hint", 100 | "examples": ["PowerShell 3.0+ required"] 101 | }, 102 | "checksumAutoCommand": { 103 | "$id": "#/properties/installCommands/items/properties/checksumAutoCommand", 104 | "$ref": "#/definitions/command", 105 | "title": "Checksum auto command", 106 | "examples": ["sha256sum FILENAME"] 107 | } 108 | } 109 | } 110 | }, 111 | "platforms": { 112 | "$id": "#/properties/platforms", 113 | "type": "array", 114 | "title": "Platform definitions", 115 | "description": "", 116 | "items": { 117 | "$id": "#/properties/platforms/items", 118 | "type": "object", 119 | "required": [ 120 | "officialName", 121 | "searchableName", 122 | "osDetectionString", 123 | "attributes" 124 | ], 125 | "properties": { 126 | "officialName": { 127 | "$id": "#/properties/platforms/items/properties/officialName", 128 | "type": "string", 129 | "title": "Official platform name", 130 | "description": "The 'legal name' or official name for the OS. This is displayed on most pages.", 131 | "examples": ["Linux x64"], 132 | "pattern": "^(.*)$" 133 | }, 134 | "searchableName": { 135 | "$id": "#/properties/platforms/items/properties/searchableName", 136 | "type": "string", 137 | "title": "Searchable name", 138 | "description": "A string that appears in the FILE NAME of binaries, installers, and checksums, that can be used to identify the platform.", 139 | "examples": ["X64_LINUX"], 140 | "pattern": "^(.*)$" 141 | }, 142 | "osDetectionString": { 143 | "$id": "#/properties/platforms/items/properties/osDetectionString", 144 | "type": "string", 145 | "title": "OS detection string", 146 | "description": "This string is searched by the OS detection library platform.js to find a match. Include as many words as you like, separated by spaces.", 147 | "examples": [ 148 | "Linux Mint Debian Fedora FreeBSD Gentoo Haiku Kubuntu OpenBSD Red Hat RHEL SuSE Ubuntu Xubuntu hpwOS webOS Tizen", 149 | "Windows Win Cygwin Windows Server 2008 R2 / 7 Windows Server 2008 / Vista Windows XP", 150 | "Mac OS X OSX macOS Macintosh", 151 | "not-to-be-detected" 152 | ], 153 | "$comment": "The current regex pattern will also match 'not-to-be-detected' so 'anyOf' must be used. A more constrained pattern would allow 'oneOf' to enforce the 'not-to-be-detected' default value.", 154 | "anyOf": [ 155 | { "pattern": "^([^\\s]+\\s?)+$" }, 156 | { "const": "not-to-be-detected" } 157 | ] 158 | }, 159 | "attributes": { 160 | "$id": "#/properties/platforms/items/properties/attributes", 161 | "type": "object", 162 | "required": [ 163 | "heap_size", 164 | "os", 165 | "architecture" 166 | ], 167 | "properties": { 168 | "heap_size": { 169 | "type": "string", 170 | "enum": [ 171 | "normal", 172 | "large" 173 | ] 174 | }, 175 | "os": { 176 | "type": "string", 177 | "enum": [ 178 | "aix", 179 | "alpine-linux", 180 | "linux", 181 | "mac", 182 | "solaris", 183 | "windows" 184 | ] 185 | }, 186 | "architecture": { 187 | "type": "string", 188 | "enum": [ 189 | "aarch64", 190 | "arm", 191 | "ppc64", 192 | "ppc64le", 193 | "riscv64", 194 | "s390x", 195 | "sparcv9", 196 | "x32", 197 | "x64" 198 | ] 199 | } 200 | } 201 | } 202 | } 203 | } 204 | } 205 | } 206 | } 207 | -------------------------------------------------------------------------------- /src/scss/styles-0-master.scss: -------------------------------------------------------------------------------- 1 | /**** RESPONSIVE MASTER SETTINGS ****/ 2 | 3 | html { 4 | font: 16px sans-serif; 5 | font-weight: 300; 6 | } 7 | 8 | h1, h2, h3, h4, button, input, optgroup, select, textarea { 9 | font-family: sans-serif; 10 | font-weight: 400; 11 | } 12 | 13 | p { 14 | line-height: 1.8rem; 15 | } 16 | 17 | @media all and (max-width: 800px) { 18 | html { 19 | font-size: 15px; 20 | } 21 | } 22 | 23 | @media all and (max-width: 500px) { 24 | html { 25 | font-size: 14px; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/scss/styles-1-large-main.scss: -------------------------------------------------------------------------------- 1 | // GLOBAL CSS 2 | $mainblue: #152935; 3 | $maingrey: #F5F5F5; 4 | $palegrey: #e6e6e6; 5 | $brighterblue: #3D70B2; 6 | $accentgrey: #dadada; 7 | $tableblue-odd: #182336; 8 | $tableblue-even: #1F2F4E; 9 | $translucent-blue: rgba(21, 41, 53, 0.05); 10 | $headersize: 1.4rem; 11 | 12 | 13 | .blue-bg { 14 | background: url(https://adoptopenjdk.net/dist/assets/background.png); 15 | color: $maingrey !important; 16 | } 17 | 18 | .light-text { 19 | color: $maingrey; 20 | } 21 | 22 | .grey-bg { 23 | background-color: $maingrey; 24 | color: $mainblue; 25 | } 26 | 27 | .dark-link, .dark-link:visited, a, a:visited { 28 | color: $mainblue; 29 | cursor: pointer; 30 | } 31 | 32 | .dark-link:hover, a:hover { 33 | color: $brighterblue; 34 | } 35 | 36 | .light-link, .light-link:visited { 37 | color: $maingrey; 38 | } 39 | 40 | .light-link:hover { 41 | color: $brighterblue; 42 | } 43 | 44 | .blue-link-section a { 45 | text-decoration: none; 46 | } 47 | 48 | .blue-link-section a *, .blue-link-section a { 49 | color: $brighterblue; 50 | text-decoration: none; 51 | } 52 | 53 | .blue-link-section a *:hover, .blue-link-section a:hover { 54 | text-decoration: underline; 55 | } 56 | 57 | .full-width { 58 | width: 100%; 59 | } 60 | 61 | .no-underline { 62 | text-decoration: none; 63 | } 64 | 65 | .bold { 66 | font-weight: bold; 67 | } 68 | 69 | .hide { 70 | display: none !important; 71 | } 72 | 73 | .softHide { 74 | display: none; 75 | } 76 | 77 | .invisible { 78 | visibility: hidden; 79 | } 80 | 81 | .block { 82 | display: block; 83 | } 84 | 85 | .inline-block { 86 | display: inline-block; 87 | } 88 | 89 | .zero-margin { 90 | margin: 0; 91 | } 92 | 93 | .margin-auto { 94 | margin: 0 auto; 95 | } 96 | 97 | .margin-bottom { 98 | margin-bottom: 4rem; 99 | } 100 | 101 | .margin-top-4 { 102 | margin-top: 4rem; 103 | } 104 | 105 | .large-title { 106 | font-size: 3rem; 107 | margin-top: 0; 108 | } 109 | 110 | .align-left { 111 | text-align: left; 112 | } 113 | 114 | .align-center { 115 | text-align: center; 116 | } 117 | 118 | .vertical-align-top { 119 | vertical-align: top; 120 | } 121 | 122 | .fully-center-child { 123 | position: absolute; 124 | top: 50%; 125 | left: 50%; 126 | transform: translate(-50%, -50%); 127 | } 128 | 129 | .vertically-center-child { 130 | position: absolute; 131 | top: 50%; 132 | transform: translateY(-50%); 133 | } 134 | 135 | .vertically-center-parent { 136 | position: relative; 137 | } 138 | 139 | .social-icon { 140 | margin: 0 0.35rem; 141 | } 142 | 143 | .social-icon img { 144 | height: 2rem; 145 | margin: 0 auto; 146 | opacity: 0.5; 147 | transition-duration: 0.2s; 148 | } 149 | 150 | .social-icon img:hover { 151 | opacity: 1; 152 | } 153 | 154 | .fa-social-icon { 155 | color: #152935; 156 | } 157 | 158 | .fa-stack { 159 | border-radius: 50px; 160 | box-sizing: border-box; 161 | border: 1px solid transparent; 162 | transition: .5s; 163 | background: #ffffff; 164 | opacity: .5; 165 | } 166 | 167 | .fa-stack:hover { 168 | background: #fff; 169 | border-color: #000; 170 | opacity: 1; 171 | transform: scale(1.2); 172 | } 173 | 174 | input { 175 | padding: 0.5rem; 176 | min-width: 12rem; 177 | margin-top: 1rem; 178 | text-align: center; 179 | } 180 | 181 | .cursor-pointer { 182 | cursor: pointer; 183 | } 184 | 185 | .animated.fadeIn { 186 | animation-duration: 0.3s; 187 | } 188 | 189 | var { 190 | font-style: normal; 191 | } 192 | 193 | // NAV CSS 194 | 195 | nav { 196 | position: relative; 197 | } 198 | 199 | #logo { 200 | margin: 1.5rem auto; 201 | display: table; 202 | cursor: pointer; 203 | } 204 | 205 | #logo img{ 206 | height: 2.5em; 207 | } 208 | 209 | #header-social-bar { 210 | position: absolute; 211 | margin-right: 2rem; 212 | line-height: 1; 213 | top: 50%; 214 | transform: translateY(-50%); 215 | right: 0; 216 | } 217 | 218 | #menu-button { 219 | font-size: 2rem; 220 | color: $maingrey; 221 | position: absolute; 222 | margin-left: 2rem; 223 | cursor: pointer; 224 | line-height: 1; 225 | padding: 2rem 1rem; 226 | top: 50%; 227 | transform: translateY(-50%); 228 | } 229 | 230 | #menu-button:hover { 231 | color: $accentgrey; 232 | } 233 | 234 | #menu-container { 235 | position: fixed; 236 | background-color: $palegrey; 237 | z-index: 1000; 238 | width: 90%; 239 | max-width: 16rem; 240 | padding: 0 2rem 2rem 2rem; 241 | top: 0; 242 | left: 0; 243 | height: 100%; 244 | animation-duration: 0.25s; 245 | } 246 | 247 | #menu-header { 248 | background-color: $maingrey; 249 | width: 20rem; 250 | transform: translateX(-2rem); 251 | } 252 | 253 | #menu-close { 254 | font-size: 2rem; 255 | padding: 1.98rem; 256 | display: block; 257 | text-align: center; 258 | cursor: pointer; 259 | } 260 | 261 | #menu-close:hover { 262 | color: $brighterblue; 263 | } 264 | 265 | #menu-checkbox:not(:checked) + * { 266 | display: none; 267 | } 268 | 269 | #menu-content { 270 | overflow: auto; 271 | height: 80%; 272 | margin: 2rem 0; 273 | } 274 | 275 | #menu-content a { 276 | text-decoration: none; 277 | display: block; 278 | padding: .8rem 0; 279 | } 280 | 281 | #menu-content ul { 282 | margin: 0; 283 | padding: 0; 284 | } 285 | 286 | #menu-content li { 287 | border-bottom: 1px solid $accentgrey; 288 | margin: 0; 289 | line-height: 1.2rem; 290 | list-style: none; 291 | } 292 | 293 | #menu-content .submenu > a > .twisty { 294 | transition-duration: .3s; 295 | margin-right: 0.5rem; 296 | color: $brighterblue; 297 | float: left; 298 | } 299 | 300 | #menu-content .submenu > ul { 301 | display: none; 302 | } 303 | 304 | #menu-content .submenu > ul > li { 305 | padding-left: 1rem; 306 | font-size: 0.9rem; 307 | line-height: 0.9rem; 308 | border-top: 1px solid $accentgrey; 309 | border-bottom: none; 310 | background-color: rgba(255,255,255,.4); 311 | } 312 | 313 | #menu-content .submenu.open > ul { 314 | display: initial; 315 | } 316 | 317 | #menu-content .submenu.open > a > .twisty { 318 | transform: rotate(90deg); 319 | } 320 | 321 | #menu-social-bar { 322 | display: inline-block; 323 | margin: 1rem auto; 324 | } 325 | 326 | // MAIN CSS 327 | 328 | html, body { 329 | max-width: 100%; 330 | overflow-x: hidden; 331 | // height: 100%; // removed to see if this fixes scrolling issue on iPhone 332 | } 333 | 334 | main { 335 | padding: 2rem 2rem 5rem 2rem; 336 | text-align: center; 337 | } 338 | 339 | .home-main { 340 | padding: 3rem 2rem 5rem 2rem; 341 | } 342 | 343 | #error-container { 344 | text-align: center; 345 | color: red; 346 | } 347 | 348 | .grey-button { 349 | background-color: $accentgrey; 350 | color: $mainblue !important; 351 | border-radius: 0.2rem; 352 | padding: 0 1.5rem; 353 | line-height: 2rem; 354 | font-size: 1rem; 355 | cursor: pointer; 356 | display: inline-block; 357 | margin: 0.2rem; 358 | } 359 | 360 | .grey-button:hover { 361 | background-color: $palegrey; 362 | color: $mainblue !important; 363 | } 364 | 365 | .selected-grey { 366 | background-color: $palegrey; 367 | cursor: default; 368 | } 369 | 370 | .blue-button { 371 | background-color: $brighterblue; 372 | color: $maingrey !important; 373 | border-radius: 0.2rem; 374 | padding: 0 1.5rem; 375 | line-height: 2rem; 376 | font-size: 1rem; 377 | cursor: pointer; 378 | display: inline-block; 379 | margin: 0.2rem; 380 | } 381 | 382 | .blue-button:hover { 383 | background-color: rgb(68, 124, 195); 384 | color: $maingrey !important; 385 | } 386 | 387 | .a-button { 388 | text-decoration: none; 389 | } 390 | 391 | .empty-download{ 392 | border-radius: 0.2rem; 393 | font-size: inherit; 394 | width: 100%; 395 | min-width: 8rem; 396 | box-sizing: border-box; 397 | margin: 0; 398 | background-color: rgba(61, 112, 178, 0.18); 399 | padding: 0 1.5rem; 400 | line-height: 2rem; 401 | display: inline-block; 402 | } 403 | #search-error { 404 | text-align: center; 405 | margin-top: 2rem; 406 | } 407 | 408 | .info-page-container { 409 | max-width: 50rem; 410 | margin: auto; 411 | text-align: left; 412 | } 413 | 414 | .info-page-container li { 415 | margin-top: 2rem; 416 | line-height: 1.8rem; 417 | } 418 | 419 | pre { 420 | display: flex; 421 | justify-content: space-between; 422 | background-color: $mainblue; 423 | border-radius: 0.2rem; 424 | box-sizing: border-box; 425 | color: $accentgrey; 426 | font-family: Consolas, monospace; 427 | overflow: auto; 428 | padding: 0.6rem; 429 | padding-left: 0; 430 | white-space: pre-wrap; 431 | line-height: 1rem; 432 | } 433 | 434 | code { 435 | overflow: auto; 436 | white-space: pre; 437 | } 438 | 439 | code.highlighted { 440 | padding: 0; 441 | background: inherit; 442 | display: inline; 443 | } 444 | 445 | .copy-code-button, code.highlighted { 446 | padding: 0.2rem 1rem; 447 | } 448 | 449 | .copy-code-button { 450 | display: inline-flex; 451 | cursor: pointer; 452 | background-color: rgba(255, 255, 255, 0.3); 453 | font-size: 0.8rem; 454 | border-radius: 0.2rem; 455 | margin-left: 0.2rem; 456 | } 457 | 458 | .copy-code-button:hover { 459 | background-color: rgba(255, 255, 255, 0.5); 460 | } 461 | 462 | span.hljs-keyword, span.hljs-selector-tag, span.hljs-literal, span.hljs-doctag, span.hljs-title, span.hljs-section, span.hljs-type, span.hljs-name, span.hljs-strong { 463 | font-weight: normal; 464 | } 465 | 466 | .callout { 467 | background-color: $translucent-blue; 468 | border-left: 0.5rem solid $mainblue; 469 | padding: 0.5rem 1rem; 470 | } 471 | 472 | a.anchor { 473 | visibility: hidden; 474 | float:left; 475 | padding: .2rem; 476 | } 477 | 478 | div.anchor { 479 | position: relative; 480 | left: -25px; 481 | 482 | a.anchor { 483 | visibility: hidden; 484 | } 485 | 486 | &:hover a.anchor { 487 | visibility: visible; 488 | } 489 | } 490 | 491 | // SELECT ELEMENT - REMOVING DEFAULT STYLING 492 | select#platform-selector { 493 | // CHANGE FROM DISPLAY NONE TO DISPLAY BLOCK TO ACTIVATE VARIANT SELECTOR 494 | margin: auto; 495 | margin-top: 2rem; 496 | -webkit-appearance: none; 497 | -moz-appearance: none; 498 | appearance: none; 499 | background: url(../assets/arrow-down.png) 90%/1rem no-repeat #fff; 500 | border: 1px solid $accentgrey; 501 | padding: 0.5rem 1.5rem; 502 | padding-right: 4rem; 503 | border-radius: 10rem; 504 | cursor: pointer; 505 | } 506 | 507 | select#platform-selector:hover { 508 | background-color: #eaebec; 509 | } 510 | 511 | select#platform-selector:focus { 512 | outline:0; 513 | } 514 | 515 | select#platform-selector::-ms-expand { 516 | display: none; 517 | } 518 | 519 | @media screen and (min-width:0\0) { 520 | select#platform-selector { 521 | background:none\9; 522 | padding: 5px\9; 523 | } 524 | } 525 | // END SELECT ELEMENT 526 | 527 | // RADIO BUTTON STYLING 528 | .btn-container { 529 | display: flex; 530 | justify-content: center; 531 | margin-bottom: 2rem; 532 | margin-top: 1rem; 533 | } 534 | 535 | .btn-form { 536 | display: flex; 537 | flex-direction: column; 538 | text-align: left; 539 | margin: 0 2rem; 540 | } 541 | 542 | .btn-form > h3 { 543 | margin-bottom: 0.5rem; 544 | } 545 | 546 | .btn-label { 547 | margin-left: 1rem; 548 | cursor: pointer; 549 | display: flex; 550 | align-items: baseline; 551 | } 552 | 553 | .jvm-btn-form > .btn-label { 554 | width: 60%; 555 | } 556 | 557 | .jdk-btn-form > .btn-label { 558 | width: 100%; 559 | } 560 | .radio-button { 561 | min-width: 0; 562 | margin-right: 0.5rem; 563 | } 564 | // END OF RADIO BUTTON STYLING 565 | 566 | /* TOOLTIP STYLING */ 567 | [data-tooltip] { 568 | display: inline-block; 569 | position: relative; 570 | cursor: default; 571 | } 572 | 573 | [data-tooltip]:hover:before, 574 | [data-tooltip]:hover:after { 575 | display: block; 576 | z-index: 50; 577 | } 578 | 579 | [data-tooltip]:before { 580 | content: attr(data-tooltip); 581 | display: none; 582 | position: absolute; 583 | background: $mainblue; 584 | color: $maingrey; 585 | padding: 0.4rem 0.5rem; 586 | font-size: 0.8rem; 587 | white-space: nowrap; 588 | line-height: 1.2rem; 589 | text-align: center; 590 | border-radius: 0.4rem; 591 | left: 50%; 592 | transform: translate(-50%, 0%); 593 | top: 80%; 594 | margin-top: 0.5rem; 595 | } 596 | 597 | [data-tooltip]:after { 598 | content: ''; 599 | display: none; 600 | position: absolute; 601 | border-color: transparent; 602 | border-style: solid; 603 | left: 50%; 604 | top: 80%; 605 | margin-top: 0.2rem; 606 | border-width: 0 0.4rem 0.4rem; 607 | border-bottom-color: $mainblue; 608 | transform: translateX(-50%); 609 | } 610 | 611 | // FOOTER CSS 612 | 613 | footer { 614 | padding: 2rem; 615 | text-align: center; 616 | font-size: 0.7rem; 617 | } 618 | 619 | footer p { 620 | max-width: 20rem; 621 | margin: auto; 622 | } 623 | 624 | .footer-icon { 625 | margin: 0 1rem 1.5rem 1rem; 626 | transition-duration: 0.2s; 627 | } 628 | 629 | .footer-icon:hover { 630 | opacity: 0.7; 631 | } 632 | 633 | .footer-icon a:hover { 634 | color: $maingrey; 635 | } 636 | 637 | .footer-icon img { 638 | height: 3rem; 639 | margin: 0 auto; 640 | } 641 | 642 | #footer-social-bar { 643 | margin-bottom: 1rem; 644 | display: none; 645 | } 646 | 647 | 648 | // STAGING SERVER BANNER CSS 649 | 650 | /* The alert message box */ 651 | .alert { 652 | padding: 20px; 653 | background-color: #ff9800; /* orange */ 654 | color: white; 655 | } 656 | 657 | /* The close button */ 658 | .closebtn { 659 | margin-left: 15px; 660 | color: white; 661 | font-weight: bold; 662 | float: right; 663 | font-size: 22px; 664 | line-height: 20px; 665 | cursor: pointer; 666 | transition: 0.3s; 667 | } 668 | 669 | /* When moving the mouse over the close button */ 670 | .closebtn:hover { 671 | color: black; 672 | } 673 | 674 | -------------------------------------------------------------------------------- /src/scss/styles-11-sponsors.scss: -------------------------------------------------------------------------------- 1 | .sponsor-table { 2 | border-collapse: separate; 3 | border-spacing: 0 1rem; 4 | } 5 | 6 | .sponsor-table td { 7 | padding: 2rem; 8 | background-color: white; 9 | line-height: 1.8rem; 10 | } 11 | 12 | .sponsor-table td img { 13 | width: 8rem; 14 | } 15 | 16 | #services-grid { 17 | margin: auto; 18 | } 19 | 20 | #services-grid tr { 21 | text-align: center; 22 | } 23 | 24 | #services-grid td { 25 | vertical-align: middle; 26 | display: inline-block; 27 | margin: 2rem 3rem; 28 | } 29 | 30 | .sponsors img { 31 | transition-duration: 0.2s; 32 | } 33 | 34 | .sponsors img:hover { 35 | opacity: 0.5; 36 | } 37 | 38 | .sponsors a { 39 | text-decoration: none !important; 40 | } 41 | 42 | #services-grid img { 43 | width: 8rem; 44 | } 45 | 46 | @media all and (max-width: 800px) { 47 | 48 | .sponsor-table td { 49 | padding: 1rem; 50 | display: block; 51 | } 52 | 53 | .sponsors { 54 | text-align: center; 55 | } 56 | 57 | } 58 | -------------------------------------------------------------------------------- /src/scss/styles-12-archive.scss: -------------------------------------------------------------------------------- 1 | $mainblue: #152935; 2 | $maingrey: #F5F5F5; 3 | $brighterblue: #3D70B2; 4 | $accentgrey: #dadada; 5 | $tableblue-odd: #182336; 6 | $tableblue-even: #1F2F4E; 7 | 8 | 9 | // ARCHIVE CSS 10 | 11 | #archives-page .callout { 12 | max-width: 50rem; 13 | margin: auto auto 2rem; 14 | text-align: left; 15 | } 16 | 17 | #archive-list { 18 | overflow: auto; 19 | } 20 | 21 | .archive-container { 22 | margin: 0 auto; 23 | border-collapse: separate; 24 | border-spacing: .2rem 2rem; 25 | white-space: nowrap; 26 | 27 | td.release-info { 28 | vertical-align: top; 29 | } 30 | 31 | td.download { 32 | padding: 0.2rem; 33 | } 34 | 35 | .grey-button, .blue-button { 36 | font-size: inherit; 37 | width: 100%; 38 | box-sizing: border-box; 39 | margin: 0; 40 | } 41 | } 42 | 43 | .archive-container > tbody > tr > td { 44 | padding: 1rem 2rem; 45 | background-color: #fff; 46 | margin: 3rem 0.1rem; 47 | font-size: 0.8rem; 48 | } 49 | 50 | .archive-platforms { 51 | border-spacing: .5rem 0; 52 | } 53 | 54 | #pagination-container { 55 | display: inline-block; 56 | margin: auto; 57 | margin: 2rem 1rem 0 1rem; 58 | } 59 | 60 | .column-names span { 61 | font-weight: bold; 62 | margin-bottom: 0.5rem; 63 | display: inline-block; 64 | } 65 | -------------------------------------------------------------------------------- /src/scss/styles-13-upstream.scss: -------------------------------------------------------------------------------- 1 | $accentgrey: #dadada; 2 | 3 | .download table { 4 | background-color: $accentgrey; 5 | } 6 | 7 | table#release, table#ea { 8 | width: 100%; 9 | border-collapse: collapse; 10 | } 11 | 12 | table#release th, table#ea th { 13 | border: 2px solid #f5f5f5; 14 | } 15 | 16 | table#release td, table#ea td { 17 | padding: 0.5em; 18 | border: 2px solid #f5f5f5; 19 | border-style: solid; 20 | } 21 | 22 | table#release td.first_col, table#ea td.first_col { 23 | width: 8em; 24 | text-align: center; 25 | } 26 | 27 | table#release td.no_left, table#ea td.no_left { 28 | border-left: none; 29 | } 30 | 31 | table#release td.no_right, table#ea td.no_right { 32 | border-right: none; 33 | } 34 | 35 | td.midl { 36 | text-align: center; 37 | } 38 | 39 | table#ea th, table#release th { 40 | text-align: center; 41 | } 42 | 43 | table#ea td.arch, table#release td.arch { 44 | text-align: right; 45 | width: 8em; 46 | } 47 | 48 | table#ea tr.sep td, table#release tr.sep td { 49 | height: 2px; 50 | background-color: #152935; 51 | padding: 0; 52 | } 53 | 54 | .upstream-callout { 55 | width: 60%; 56 | margin: 0 auto; 57 | text-align: left; 58 | } 59 | 60 | .source { 61 | color: white; 62 | } 63 | 64 | .source a:visited { 65 | color: white; 66 | } -------------------------------------------------------------------------------- /src/scss/styles-14-logos.scss: -------------------------------------------------------------------------------- 1 | $mainblue: #152935; 2 | $maingrey: #F5F5F5; 3 | $brighterblue: #3D70B2; 4 | $accentgrey: #dadada; 5 | $tableblue-odd: #182336; 6 | $palegrey: #e6e6e6; 7 | $tableblue-even: #1F2F4E; 8 | $orange: #ff9800; 9 | 10 | main.logos ol, 11 | main.logos p, 12 | main.logos ul { 13 | max-width: 40rem; 14 | margin: 1rem auto; 15 | width: 80%; 16 | line-height: 1.8rem; 17 | } 18 | 19 | .logo { 20 | background-image: linear-gradient(45deg, #e6e6e6 25%, transparent 25%), linear-gradient(-45deg, #e6e6e6 25%, transparent 25%), linear-gradient(45deg, transparent 75%, #e6e6e6 75%), linear-gradient(-45deg, white 75%, #e6e6e6 75%); 21 | background-size: 1em 1em; 22 | background-position: 0 0, 0 0.5em, 0.5em -0.5em, -0.5em 0; 23 | height: 5em; 24 | margin: 1em; 25 | padding: 0.5em; 26 | } 27 | 28 | .guidelines { 29 | text-align: left; 30 | } 31 | 32 | .logo-white { 33 | background: #152935; 34 | } 35 | 36 | .banner { 37 | height: 14em; 38 | } 39 | 40 | .table { 41 | display: table; 42 | background-image: linear-gradient(45deg, #e6e6e6 25%, transparent 25%), linear-gradient(-45deg, #e6e6e6 25%, transparent 25%), linear-gradient(45deg, transparent 75%, #e6e6e6 75%), linear-gradient(-45deg, white 75%, #e6e6e6 75%); 43 | background-size: 1em 1em; 44 | background-position: 0 0, 0 0.5em, 0.5em -0.5em, -0.5em 0; 45 | border-collapse: separate; 46 | border-spacing: 1em; 47 | margin: 0 auto; 48 | } 49 | 50 | .row { 51 | display: table-row; 52 | } 53 | 54 | .square { 55 | width: 5em; 56 | height: 5em; 57 | display: table-cell; 58 | text-align: center; 59 | vertical-align: middle; 60 | } 61 | 62 | .mainblue { 63 | background-color: $mainblue; 64 | color: white; 65 | } 66 | 67 | .brighterblue { 68 | background-color: $brighterblue; 69 | color: white; 70 | } 71 | 72 | .tableblue-odd { 73 | background-color: $tableblue-odd; 74 | color: white; 75 | } 76 | 77 | .tableblue-even { 78 | background-color: $tableblue-even; 79 | color: white; 80 | } 81 | 82 | .maingrey { 83 | background-color: $maingrey; 84 | color: black; 85 | } 86 | 87 | .accentgrey { 88 | background-color: $accentgrey; 89 | color: black; 90 | } 91 | 92 | .palegrey { 93 | background-color: $palegrey; 94 | color: black; 95 | } 96 | 97 | .orange { 98 | background-color: $orange; 99 | color: black; 100 | } 101 | -------------------------------------------------------------------------------- /src/scss/styles-2-index.scss: -------------------------------------------------------------------------------- 1 | $mainblue: #152935; 2 | $maingrey: #F5F5F5; 3 | $brighterblue: #3D70B2; 4 | $accentgrey: #dadada; 5 | 6 | main .intro { 7 | max-width: 40rem; 8 | margin-bottom: 1rem; 9 | margin-left: auto; 10 | margin-right: auto; 11 | width: 80%; 12 | line-height: 1.8rem; 13 | } 14 | 15 | main .intro i { 16 | font-size: 1.8rem; 17 | margin-right: 0.5rem; 18 | transform: translateY(0.3rem); 19 | } 20 | 21 | main .intro a { 22 | text-decoration: none; 23 | color: $brighterblue; 24 | } 25 | 26 | main .intro a:hover { 27 | text-decoration: underline; 28 | color: $brighterblue; 29 | } 30 | 31 | #loading-index { 32 | position: absolute; 33 | left: 50%; 34 | transform: translate(-50%, 0.1rem); 35 | } 36 | 37 | .dl-container { 38 | margin: 0 auto; 39 | } 40 | 41 | a.dl-button { 42 | background-color: $brighterblue; 43 | color: $maingrey; 44 | border-radius: 0.2rem; 45 | width: 20rem; 46 | line-height: 5rem; 47 | font-size: 1.5rem; 48 | margin: 1.2rem 0.6rem 0 0.6rem; 49 | cursor: pointer; 50 | display: inline-block; 51 | transition-duration: 0.1s; 52 | } 53 | 54 | #dl-text { 55 | margin-top: 2.5rem; 56 | margin-bottom: 0; 57 | } 58 | 59 | a.dl-button #dl-version { 60 | transform: translateY(-0.6rem); 61 | } 62 | 63 | a.dl-button .dl-description { 64 | font-size: .8rem; 65 | position: absolute; 66 | left: 50%; 67 | white-space: nowrap; 68 | transform: translate(-50%,-3.8rem); 69 | height: 50%; /* div take 100% of a tag height and goes out of bound */ 70 | } 71 | 72 | a.dl-button:hover { 73 | background-color: rgb(68, 124, 195); 74 | color: $maingrey; 75 | } 76 | 77 | a.dl-thin-button { 78 | line-height: 2rem; 79 | font-size: 1rem; 80 | background-color: $accentgrey; 81 | color: $mainblue; 82 | display: block; 83 | margin: 1rem auto; 84 | } 85 | 86 | a.dl-thin-button:hover { 87 | background-color: #e6e6e6; 88 | color: $mainblue; 89 | } 90 | 91 | .dl-container select#variant-selector { 92 | margin-top: 1rem; 93 | } 94 | 95 | .home-links { 96 | padding: 0 1rem; 97 | } 98 | 99 | h2.transition-bright { 100 | color: #0085ff; 101 | transition-duration: 1s; 102 | } 103 | 104 | #minor-links { 105 | margin-top: 2rem; 106 | } 107 | 108 | #minor-links span { 109 | margin: 0 0.3rem; 110 | color: $accentgrey; 111 | font-size: 1.2rem; 112 | } 113 | 114 | #dl-latest { 115 | position: relative; 116 | z-index: 100; 117 | } 118 | 119 | #dl-latest span.tick { 120 | top: 0.3rem; 121 | right: -0.2rem; 122 | margin-right: 0.2rem; 123 | img { 124 | height: 1.2rem; 125 | } 126 | } 127 | 128 | .index-btn-container { 129 | margin-left: 8rem; 130 | } 131 | 132 | .index-jvm-btn-form > .btn-label { 133 | width: 30%; 134 | } 135 | 136 | .btn-form { 137 | position: relative; 138 | } 139 | 140 | .help-jvm { 141 | font-size: 0.9rem; 142 | font-weight: 100; 143 | margin-left: 1rem; 144 | text-decoration: underline; 145 | cursor: pointer; 146 | padding: 1rem 1rem 1rem 0; 147 | } 148 | 149 | .popup-content { 150 | visibility: hidden; 151 | position: absolute; 152 | width: 20rem; 153 | left: 18.8rem; 154 | top: 0.85rem; 155 | background: white; 156 | } 157 | 158 | .popup-heading { 159 | display: flex; 160 | background: $brighterblue; 161 | color: white; 162 | height: 2.5rem; 163 | align-items: center; 164 | padding-left: 1rem; 165 | } 166 | .popup-heading > h4 { 167 | font-weight: 400; 168 | } 169 | .popup-text { 170 | border: 1px solid #dadada; 171 | border-top: none; 172 | font-size: 0.8rem; 173 | padding: 0.5rem; 174 | text-align: left; 175 | -webkit-user-select: text; /* Chrome/Safari */ 176 | -moz-user-select: text; /* Firefox */ 177 | -ms-user-select: text; /* IE10+ */ 178 | } 179 | 180 | .popup-text a { 181 | color: $brighterblue; 182 | } 183 | 184 | .hotspot-text, .openj9-text, .lts-text { 185 | line-height: 1.2rem; 186 | } 187 | 188 | .help-jvm:hover ~ .popup-content, .popup-content:hover { 189 | visibility: visible; 190 | } 191 | 192 | /* Popup arrow */ 193 | .popup-heading::after { 194 | content: ""; 195 | position: absolute; 196 | border-width: 0.5rem; 197 | left: -1rem; 198 | border-style: solid; 199 | border-color: transparent $brighterblue transparent transparent; 200 | } 201 | 202 | @media all and (max-width: 300px) { 203 | #minor-links a { 204 | display: block; 205 | margin: 0.5rem 0; 206 | } 207 | 208 | #minor-links span { 209 | display: none; 210 | } 211 | } 212 | -------------------------------------------------------------------------------- /src/scss/styles-4-releases.scss: -------------------------------------------------------------------------------- 1 | $mainblue: #152935; 2 | $maingrey: #F5F5F5; 3 | $brighterblue: #3D70B2; 4 | $accentgrey: #dadada; 5 | $palegrey: #e6e6e6; 6 | $tableblue-odd: #182336; 7 | $tableblue-even: #1F2F4E; 8 | 9 | // LATEST RELEASE CSS 10 | 11 | div#latest-selector { 12 | margin: auto; 13 | overflow-x: scroll; 14 | width: 70%; 15 | @media (max-width: 1150px) { 16 | width: 90%; 17 | } 18 | } 19 | 20 | .main-download__variant__table { 21 | width: 100%; 22 | border-spacing: 0 10px !important; 23 | border-collapse: inherit !important; 24 | margin: 0 auto; 25 | table-layout: fixed; 26 | overflow-x:auto !important; 27 | } 28 | 29 | .main-download__variant__table td { 30 | background-color: #ffffff; 31 | width: 10em; 32 | } 33 | 34 | .main-download__variant__name { 35 | background-color: #333333 !important; 36 | border-right: 1px solid #f0f0f0; 37 | width: 13em; 38 | } 39 | 40 | .main-download__variant__name span { 41 | display: block; 42 | text-align: center; 43 | } 44 | 45 | .main-download__variant__architecture span, .main-download__variant__java-package span, .main-download__variant__os span { 46 | color: #777777; 47 | display: block; 48 | text-align: center; 49 | font-weight: 400; 50 | } 51 | 52 | .main-download__variant__name span:nth-child(1) { 53 | margin-top: 16px; 54 | margin-bottom: 7px; 55 | color: #ffffff; 56 | font-size: 16px; 57 | font-weight: 500; 58 | } 59 | 60 | .main-download__variant__name span:nth-child(2) { 61 | margin-bottom: 15px; 62 | color: #cccccc; 63 | font-size: 14px; 64 | font-weight: 400; 65 | } 66 | 67 | .main-download__variant__sub-table { 68 | width: 100%; 69 | border-spacing: 0 1px; 70 | scrollbar-width: none; 71 | -ms-overflow-style: none; 72 | } 73 | 74 | .main-download__variant__sub-table__row { 75 | padding-top: 1em; 76 | padding-bottom: 1em; 77 | border-bottom: 1px solid #f0f0f0; 78 | } 79 | 80 | .main-download__variant__download__title { 81 | color: #777777; 82 | font-size: 14px; 83 | font-weight: 400; 84 | border-bottom: 1px dotted #777777; 85 | cursor: pointer; 86 | } 87 | 88 | .main-download__variant__sub-table__copy-title { 89 | position: relative; 90 | cursor: pointer; 91 | } 92 | 93 | .main-download__variant__sub-table__download { 94 | display: -webkit-box; 95 | display: -webkit-flex; 96 | display: -ms-flexbox; 97 | display: flex; 98 | -webkit-box-align: center; 99 | -webkit-align-items: center; 100 | -ms-flex-align: center; 101 | align-items: center; 102 | -webkit-box-pack: center; 103 | -webkit-justify-content: center; 104 | -ms-flex-pack: center; 105 | justify-content: center; 106 | text-decoration: none; 107 | width: 8em; 108 | height: 40px; 109 | -webkit-border-radius: 3px; 110 | border-radius: 3px; 111 | background-color: $brighterblue; 112 | color: #ffffff !important; 113 | font-size: 14px; 114 | font-weight: 400; 115 | } 116 | 117 | .main-download__variant__architecture { 118 | border-right: 1px solid #f0f0f0; 119 | width: 6em !important; 120 | } 121 | 122 | .main-download__variant__heap_size { 123 | border-right: 1px solid #f0f0f0; 124 | width: 6em !important; 125 | } 126 | 127 | .main-download__variant__os { 128 | border-right: 1px solid #f0f0f0; 129 | } 130 | 131 | .main-download__variant__sub-table__row { 132 | width: 8em; 133 | } 134 | 135 | .main-download__variant__os span:nth-child(2) { 136 | font-size: 14px; 137 | } 138 | 139 | .early-access:after { 140 | width: 75px; 141 | line-height: 19px; 142 | -webkit-border-radius: 3px; 143 | border-radius: 3px; 144 | background-color: red; 145 | margin-left: 9px; 146 | color: #ffffff; 147 | font-size: 12px; 148 | font-weight: 400; 149 | display: -webkit-inline-box; 150 | display: -webkit-inline-flex; 151 | display: -ms-inline-flexbox; 152 | display: inline-flex; 153 | -webkit-box-pack: center; 154 | -webkit-justify-content: center; 155 | -ms-flex-pack: center; 156 | justify-content: center; 157 | -webkit-box-align: center; 158 | -webkit-align-items: center; 159 | -ms-flex-align: center; 160 | align-items: center; 161 | content: "early access" !important; 162 | } 163 | 164 | .download-last-version:after { 165 | width: 42px; 166 | line-height: 19px; 167 | -webkit-border-radius: 3px; 168 | border-radius: 3px; 169 | background-color: $brighterblue; 170 | margin-left: 9px; 171 | color: #ffffff; 172 | font-size: 12px; 173 | font-weight: 400; 174 | display: -webkit-inline-box; 175 | display: -webkit-inline-flex; 176 | display: -ms-inline-flexbox; 177 | display: inline-flex; 178 | -webkit-box-pack: center; 179 | -webkit-justify-content: center; 180 | -ms-flex-pack: center; 181 | justify-content: center; 182 | -webkit-box-align: center; 183 | -webkit-align-items: center; 184 | -ms-flex-align: center; 185 | align-items: center; 186 | } 187 | 188 | .filter { 189 | width: 8em; 190 | height: 2em; 191 | -webkit-appearance: button; 192 | -webkit-border-radius: 2px; 193 | -webkit-box-shadow: 0px 1px 3px rgba(0, 0, 0, 0.1); 194 | -webkit-padding-end: 20px; 195 | -webkit-padding-start: 2px; 196 | -webkit-user-select: none; 197 | background-image: url(https://adoptopenjdk.net/dist/assets/15xvbd5.png), -webkit-linear-gradient(#FAFAFA, #F4F4F4 40%, #E5E5E5); 198 | background-position: 97% center; 199 | background-repeat: no-repeat; 200 | border: 1px solid #AAA; 201 | color: #555; 202 | font-size: inherit; 203 | margin: 20px; 204 | overflow: hidden; 205 | padding: 5px 10px; 206 | text-overflow: ellipsis; 207 | white-space: nowrap; 208 | } 209 | 210 | .filter-divs { 211 | width: 40em; 212 | margin: auto; 213 | @media (max-width: 600px) { 214 | width: 50%; 215 | } 216 | } 217 | 218 | .filter-os { 219 | float: left; 220 | } 221 | 222 | .release_notes { 223 | color: #152935 !important; 224 | text-decoration: underline !important; 225 | } 226 | 227 | .modal-backdrop { 228 | position: relative !important; 229 | } 230 | 231 | .modal { 232 | display: none; 233 | z-index: 1; 234 | position: fixed; 235 | top:50%; 236 | bottom: 0; 237 | left: 0; 238 | right: 0; 239 | margin: auto; 240 | } 241 | 242 | .modal-body { 243 | resize: none; 244 | border-style: none; 245 | border-color: Transparent; 246 | } 247 | 248 | .modal-dialog { 249 | display: inline-block; 250 | text-align: left; 251 | padding: 2em; 252 | background-color: white; 253 | border-style: solid; 254 | border-width: medium; 255 | } 256 | 257 | .modal-button { 258 | float: right; 259 | } -------------------------------------------------------------------------------- /src/scss/styles-5-medium.scss: -------------------------------------------------------------------------------- 1 | //Styling for iPad/Mobile devices 2 | @media only screen 3 | and (max-device-width : 1024px) { 4 | .help-jvm { 5 | display: none; 6 | } 7 | .btn-container { 8 | margin-left: 0; 9 | } 10 | 11 | .btn-label { 12 | margin-left: 0.5rem; 13 | } 14 | 15 | .index-jvm-btn-form > .btn-label { 16 | width: auto; 17 | } 18 | 19 | .btn-label { 20 | white-space: nowrap; 21 | font-size: 0.9rem; 22 | display: flex; 23 | margin-bottom: 0.6rem; 24 | align-items: flex-end; 25 | } 26 | } 27 | 28 | @media all and (max-width: 950px) { 29 | 30 | .vertically-center-parent { 31 | position: initial; 32 | } 33 | .vertically-center-child { 34 | position: initial; 35 | top: initial; 36 | transform: initial; 37 | } 38 | 39 | .btn-container { 40 | margin-left: 0; 41 | } 42 | .help-jvm { 43 | display: none; 44 | } 45 | } 46 | 47 | @media all and (max-width: 800px) { 48 | 49 | .large-title { 50 | font-size: 2rem; 51 | } 52 | 53 | #latest-info, #latest-info .latest-info-container { 54 | display: block; 55 | } 56 | 57 | #latest-info .platform-section { 58 | display: block; 59 | border-right: none; 60 | padding: 0; 61 | min-width: 100%; 62 | } 63 | 64 | #latest-info .content-section { 65 | padding: 1rem 0 0; 66 | } 67 | 68 | } 69 | -------------------------------------------------------------------------------- /src/scss/styles-6-small.scss: -------------------------------------------------------------------------------- 1 | @media all and (max-width: 650px) { 2 | 3 | main { 4 | padding: 2rem 1rem 5rem 1rem; 5 | } 6 | 7 | main .intro { 8 | width: 100%; 9 | } 10 | 11 | #header-social-bar { 12 | display: none; 13 | } 14 | 15 | #footer-social-bar { 16 | display: block; 17 | } 18 | 19 | a.dl-button { 20 | width: 100%; 21 | margin: 0 auto; 22 | margin-top: 1.2rem; 23 | } 24 | 25 | a.dl-button .dl-description { 26 | transform: translate(-50%,-3.8rem); 27 | left: 50%; 28 | } 29 | 30 | .home-links { 31 | display: block; 32 | } 33 | 34 | #menu-button { 35 | margin-left: 0; 36 | font-size: 1.5rem; 37 | padding: 2.2rem 1rem; 38 | } 39 | 40 | input { 41 | min-width: 0; 42 | max-width: 80%; 43 | } 44 | 45 | .blue-button, .grey-button { 46 | padding: 0 1rem; 47 | } 48 | 49 | .archive-container .download-td { 50 | min-width: 9rem; 51 | } 52 | 53 | .archive-platforms span.tick { 54 | right: -0.3rem; 55 | } 56 | } 57 | --------------------------------------------------------------------------------