├── .circleci └── config.yml ├── .editorconfig ├── .env.example ├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md ├── PULL_REQUEST_TEMPLATE.md └── workflows │ ├── test-preview.yml │ ├── theme-bootstrap-vue.yml │ └── theme-tailwindcss.yml ├── .gitignore ├── .gitlab-ci.yml ├── .gitpod.yml ├── .gitpod ├── Dockerfile └── scripts │ ├── ddev-download-images.sh │ ├── ddev-setup.sh │ ├── drupal-setup.sh │ ├── env-setup.sh │ └── nuxt-setup.sh ├── .nvmrc ├── .vscode └── launch.json ├── LICENSE ├── README.md ├── drupal ├── .ddev │ ├── commands │ │ └── web │ │ │ ├── drupal-install │ │ │ └── druxt-add-consumer │ ├── config.yaml │ ├── docker-compose.env.yaml │ └── docker-compose.network-mtu.yaml ├── .gitignore ├── composer.json ├── composer.lock ├── load.environment.php └── web │ ├── .csslintrc │ ├── .eslintignore │ ├── .eslintrc.json │ ├── .ht.router.php │ ├── .htaccess │ ├── INSTALL.txt │ ├── README.md │ ├── autoload.php │ ├── example.gitignore │ ├── index.php │ ├── modules │ └── README.txt │ ├── profiles │ └── README.txt │ ├── sites │ ├── README.txt │ ├── default │ │ ├── default.services.yml │ │ ├── default.settings.php │ │ └── services.yml │ ├── development.services.yml │ ├── example.settings.local.php │ └── example.sites.php │ ├── themes │ └── README.txt │ ├── update.php │ └── web.config ├── jsconfig.json ├── nuxt ├── .babelrc ├── .eslintrc.js ├── .gitignore ├── .nvmrc ├── README.md ├── components │ ├── .gitkeep │ └── druxt │ │ ├── Logo.test.js │ │ ├── Logo.vue │ │ ├── __snapshots__ │ │ └── Logo.test.js.snap │ │ ├── block │ │ └── system │ │ │ ├── BrandingBlock.vue │ │ │ └── PoweredByBlock.vue │ │ └── site │ │ └── Olivero.vue ├── cypress.config.js ├── cypress │ ├── e2e │ │ └── homepage.cy.js │ └── support │ │ ├── commands.js │ │ └── e2e.js ├── jest.config.js ├── nuxt.config.js ├── package-lock.json ├── package.json ├── pages │ ├── .gitkeep │ └── user │ │ └── login.vue ├── static │ └── favicon.ico ├── store │ └── README.md └── stylelint.config.js └── renovate.json /.circleci/config.yml: -------------------------------------------------------------------------------- 1 | version: 2.1 2 | 3 | defaults: &defaults 4 | working_directory: ~/repo 5 | 6 | jobs: 7 | build: 8 | <<: *defaults 9 | 10 | docker: 11 | - image: php:8.1 12 | 13 | steps: 14 | - checkout 15 | 16 | - run: 17 | name: Install dependencies 18 | command: | 19 | apt-get update -yqq 20 | apt-get install -yqq git libpq-dev libcurl4-gnutls-dev libicu-dev libvpx-dev libjpeg-dev libpng-dev libxpm-dev zlib1g-dev libfreetype6-dev libxml2-dev libexpat1-dev libbz2-dev libgmp3-dev libldap2-dev unixodbc-dev libsqlite3-dev libaspell-dev libsnmp-dev libpcre3-dev libtidy-dev libonig-dev libzip-dev nodejs 21 | 22 | # Install PHP extensions 23 | docker-php-ext-install mbstring pdo_pgsql curl intl gd xml zip bz2 opcache 24 | 25 | # Install Composer 26 | curl -sS https://getcomposer.org/installer | php 27 | 28 | # Install NVM and Yarn 29 | curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash 30 | export NVM_DIR="$HOME/.nvm" && . "$NVM_DIR/nvm.sh" --no-use 31 | nvm install && nvm use 32 | npm install --global yarn 33 | 34 | - run: 35 | name: Validate and build composer packages 36 | command: | 37 | cd drupal && php ../composer.phar validate && php ../composer.phar install 38 | 39 | # @TODO - Circle not seeing NPM 40 | # - run: 41 | # name: Install and build Nuxt 42 | # command: | 43 | # which npm 44 | # cd nuxt && npm install && NUXT_TELEMETRY_DISABLED=1 npm run build 45 | 46 | # - run: 47 | # name: Install Codecov 48 | # command: cd nuxt && yarn add codecov 49 | 50 | - restore_cache: 51 | keys: 52 | - v1-dependencies-{{ checksum "drupal/composer.json" }}-{{ checksum "nuxt/package.json" }} 53 | # fallback to using the latest cache if no exact match is found. 54 | - v1-dependencies- 55 | 56 | # - save_cache: 57 | # paths: 58 | # - drupal/vendor 59 | # - nuxt/node_modules 60 | # key: v1-dependencies-{{ checksum "drupal/composer.json" }}-{{ checksum "nuxt/package.json" }} 61 | 62 | - persist_to_workspace: 63 | root: ~/repo 64 | paths: 65 | - . 66 | 67 | # lint: 68 | # <<: *defaults 69 | # steps: 70 | # - attach_workspace: 71 | # at: ~/repo 72 | 73 | # - run: 74 | # name: Run lint 75 | # command: yarn lint --format ./node_modules/eslint-junit/index.js 76 | # environment: 77 | # ESLINT_JUNIT_OUTPUT: ./reports/junit/eslint.xml 78 | 79 | # - run: 80 | # name: Renovate config validator 81 | # command: yarn lint:renovate 82 | 83 | # - run: 84 | # name: Bundlewatch 85 | # command: yarn bundlewatch 86 | 87 | # test_unit: 88 | # <<: *defaults 89 | # steps: 90 | # - attach_workspace: 91 | # at: ~/repo 92 | 93 | # - run: 94 | # name: Run unit tests 95 | # command: yarn test:unit --reporters=jest-junit --runInBand 96 | # environment: 97 | # JEST_JUNIT_OUTPUT_DIR: ./reports/junit/ 98 | # NODE_OPTIONS: --max_old_space_size=8192 99 | 100 | # - run: 101 | # name: Upload coverage report 102 | # command: yarn dlx codecov 103 | 104 | # - store_test_results: 105 | # path: ./reports/junit/ 106 | 107 | # - store_artifacts: 108 | # path: ./reports/junit 109 | 110 | test_e2e: 111 | machine: 112 | image: ubuntu-2004:2022.07.1 113 | working_directory: ~/repo 114 | environment: 115 | DDEV_NONINTERACTIVE: "true" 116 | steps: 117 | - attach_workspace: 118 | at: ~/repo 119 | 120 | - run: 121 | name: Install ddev 122 | command: | 123 | curl -LO https://raw.githubusercontent.com/drud/ddev/master/scripts/install_ddev.sh && bash install_ddev.sh 124 | 125 | - run: 126 | name: Setup .env 127 | command: cp .env.example .env 128 | 129 | - run: 130 | name: Start server running 131 | command: | 132 | cd drupal && ddev start -y 133 | 134 | - run: 135 | name: Install Drupal 136 | command: | 137 | cd drupal && ddev drupal-install 138 | 139 | - run: 140 | name: Install cypress 141 | command: npx cypress install 142 | 143 | - run: 144 | name: Run end-to-end tests 145 | command: cd nuxt && npm run test:e2e 146 | 147 | # - store_artifacts: 148 | # path: ./examples/druxt-site/test/cypress/screenshots 149 | # - store_artifacts: 150 | # path: ./examples/druxt-site/test/cypress/videos 151 | 152 | # - run: 153 | # name: Run DruxtJS.org end-to-end tests 154 | # command: yarn docs:test 155 | # - store_artifacts: 156 | # path: ./docs/nuxt/test/cypress/screenshots 157 | # - store_artifacts: 158 | # path: ./docs/nuxt/test/cypress/videos 159 | 160 | workflows: 161 | version: 2 162 | 163 | build_test: 164 | jobs: 165 | - build 166 | # - lint: 167 | # requires: 168 | # - build 169 | # - test_unit: 170 | # requires: 171 | # - build 172 | # - test_e2e: 173 | # requires: 174 | # - build 175 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # editorconfig.org 2 | root = true 3 | 4 | [*] 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | charset = utf-8 9 | trim_trailing_whitespace = true 10 | insert_final_newline = true 11 | 12 | [*.md] 13 | trim_trailing_whitespace = false 14 | -------------------------------------------------------------------------------- /.env.example: -------------------------------------------------------------------------------- 1 | BASE_URL=http://quickstart-druxtsite.ddev.site 2 | OAUTH_CLIENT_ID=2de21d20-7bca-4e31-a3d0-9f0445a79782 3 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | --- 8 | 9 | **Describe the bug** 10 | A clear and concise description of what the bug is. 11 | 12 | **To Reproduce** 13 | Steps to reproduce the behavior: 14 | 1. Go to '...' 15 | 2. Click on '....' 16 | 3. Scroll down to '....' 17 | 4. See error 18 | 19 | **Expected behavior** 20 | A clear and concise description of what you expected to happen. 21 | 22 | **Media** 23 | If applicable, add screenshots or video to help explain your problem. 24 | 25 | **Your Environment (please complete the following information):** 26 | - Device: [e.g. iPhone6] 27 | - OS: [e.g. iOS] 28 | - Browser [e.g. chrome, safari] 29 | - Version [e.g. 22] 30 | 31 | **Additional context** 32 | Add any other context about the problem here. 33 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | --- 8 | 9 | **Is your feature request related to a problem? Please describe.** 10 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 11 | 12 | **Describe the solution you'd like** 13 | A clear and concise description of what you want to happen. 14 | 15 | **Describe alternatives you've considered** 16 | A clear and concise description of any alternative solutions or features you've considered. 17 | 18 | **Additional context** 19 | Add any other context or screenshots about the feature request here. 20 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | ## Types of changes 4 | 5 | - [ ] Bug fix (a non-breaking change which fixes an issue) 6 | - [ ] New feature (a non-breaking change which adds functionality) 7 | - [ ] Breaking change (fix or feature that would cause existing functionality to change) 8 | 9 | 10 | ## Description 11 | 12 | 13 | 14 | 15 | 16 | ## Screenshots/Media: 17 | 18 | -------------------------------------------------------------------------------- /.github/workflows/test-preview.yml: -------------------------------------------------------------------------------- 1 | name: test-preview 2 | 3 | on: 4 | push: 5 | branches: 6 | - develop 7 | pull_request: 8 | branches: 9 | - develop 10 | 11 | jobs: 12 | test_preview: 13 | runs-on: ubuntu-latest 14 | 15 | steps: 16 | - name: Checkout 🛎 17 | uses: actions/checkout@master 18 | 19 | - name: Setup node env 🏗 20 | uses: actions/setup-node@v3.5.1 21 | with: 22 | node-version: 16 23 | check-latest: true 24 | 25 | - name: Update npm 🏗 26 | run: | 27 | npm install -g npm 28 | npm --version 29 | - name: Cache node_modules 📦 30 | uses: actions/cache@v3.0.11 31 | with: 32 | path: ~/.npm 33 | key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} 34 | restore-keys: | 35 | ${{ runner.os }}-node- 36 | - name: Install frontend dependencies 👨🏻‍💻 37 | run: cd nuxt && npm install 38 | 39 | - name: Lint code 👀 40 | run: cd nuxt && npm run lint 41 | 42 | - name: Create .env 👨🏻‍💻 43 | run: cp .env.example .env 44 | - name: Setup ddev 45 | uses: jonaseberle/github-action-setup-ddev@v1 46 | with: 47 | autostart: false 48 | - name: Start ddev 49 | run: cd drupal && ddev start 50 | - name: Install Drupal 👨🏻‍💻 51 | run: cd drupal && ddev drupal-install 52 | 53 | - name: Run unit tests 🧪 54 | run: cd nuxt && npm run test:unit 55 | 56 | - name: Generate dist 👨🏻‍💻 57 | run: cd nuxt && NUXT_TARGET=static NUXT_TELEMETRY_DISABLED=1 npm run generate 58 | 59 | - name: Run end-to-end tests 🧪 60 | run: cd nuxt && npm run test:e2e 61 | 62 | - name: Deploy to Netlify 63 | uses: nwtgck/actions-netlify@v1.2 64 | with: 65 | publish-dir: './nuxt/dist' 66 | production-branch: main 67 | github-token: ${{ secrets.GITHUB_TOKEN }} 68 | deploy-message: "Deploy from GitHub Actions" 69 | enable-pull-request-comment: true 70 | enable-commit-comment: true 71 | overwrites-pull-request-comment: true 72 | github-deployment-environment: ${{ github.head_ref }} 73 | env: 74 | NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }} 75 | NETLIFY_SITE_ID: ${{ secrets.NETLIFY_SITE_ID }} 76 | timeout-minutes: 1 77 | 78 | - uses: actions/upload-artifact@v3 79 | with: 80 | name: cypress-videos 81 | path: nuxt/cypress/videos 82 | - uses: actions/upload-artifact@v3 83 | if: failure() 84 | with: 85 | name: cypress-screenshots 86 | path: nuxt/cypress/screenshots 87 | 88 | - uses: codecov/codecov-action@v3 89 | with: 90 | files: ./nuxt/coverage/clover.xml 91 | name: codecov-umbrella 92 | fail_ci_if_error: true 93 | verbose: true 94 | -------------------------------------------------------------------------------- /.github/workflows/theme-bootstrap-vue.yml: -------------------------------------------------------------------------------- 1 | name: theme-bootstrap-vue 2 | 3 | on: 4 | push: 5 | branches: 6 | - develop 7 | - feature/theme-bootstrapvue 8 | 9 | jobs: 10 | theme_bootstrap_vue: 11 | runs-on: ubuntu-latest 12 | 13 | steps: 14 | - name: Checkout 🛎 15 | uses: actions/checkout@master 16 | 17 | - name: Setup node env 🏗 18 | uses: actions/setup-node@v3.5.1 19 | with: 20 | node-version: 16 21 | check-latest: true 22 | 23 | - name: Update npm 🏗 24 | run: | 25 | npm install -g npm 26 | npm --version 27 | - name: Cache node_modules 📦 28 | uses: actions/cache@v3.0.11 29 | with: 30 | path: ~/.npm 31 | key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} 32 | restore-keys: | 33 | ${{ runner.os }}-node- 34 | - name: Install frontend dependencies 👨🏻‍💻 35 | run: cd nuxt && npm install 36 | 37 | - name: Install BootstrapVue 👨🏻‍💻 38 | run: | 39 | cd nuxt 40 | npm install bootstrap-vue 41 | sed -i "s/modules: \[\]/modules: \['bootstrap-vue\/nuxt\']/g" nuxt.config.js 42 | 43 | - name: Commit & Push changes 🛎 44 | uses: actions-js/push@master 45 | with: 46 | branch: 'theme/bootstrap-vue' 47 | force: true 48 | github_token: ${{ secrets.GITHUB_TOKEN }} 49 | message: 'chore(theme-bootstrap-vue): add bootstrap-vue' 50 | -------------------------------------------------------------------------------- /.github/workflows/theme-tailwindcss.yml: -------------------------------------------------------------------------------- 1 | name: theme-tailwindcss 2 | 3 | on: 4 | push: 5 | branches: 6 | - develop 7 | 8 | jobs: 9 | theme_tailwindcss: 10 | runs-on: ubuntu-latest 11 | 12 | steps: 13 | - name: Checkout 🛎 14 | uses: actions/checkout@master 15 | 16 | - name: Setup node env 🏗 17 | uses: actions/setup-node@v3.5.1 18 | with: 19 | node-version: 16 20 | check-latest: true 21 | 22 | - name: Update npm 🏗 23 | run: | 24 | npm install -g npm 25 | npm --version 26 | - name: Cache node_modules 📦 27 | uses: actions/cache@v3.0.11 28 | with: 29 | path: ~/.npm 30 | key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} 31 | restore-keys: | 32 | ${{ runner.os }}-node- 33 | - name: Install frontend dependencies 👨🏻‍💻 34 | run: cd nuxt && npm install 35 | 36 | - name: Install TailwindCSS 👨🏻‍💻 37 | run: | 38 | cd nuxt 39 | npm install -D @nuxtjs/tailwindcss 40 | sed -i "s/modules: \[\]/modules: \['@nuxtjs\/tailwindcss\']/g" nuxt.config.js 41 | npx tailwindcss init 42 | 43 | - name: Commit & Push changes 🛎 44 | uses: actions-js/push@master 45 | with: 46 | branch: 'theme/tailwindcss' 47 | force: true 48 | github_token: ${{ secrets.GITHUB_TOKEN }} 49 | message: 'chore(theme-tailwindcss): add tailwindcss' 50 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | lerna-debug.log* 8 | 9 | # Diagnostic reports (https://nodejs.org/api/report.html) 10 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 11 | 12 | # Runtime data 13 | pids 14 | *.pid 15 | *.seed 16 | *.pid.lock 17 | 18 | # Directory for instrumented libs generated by jscoverage/JSCover 19 | lib-cov 20 | 21 | # Coverage directory used by tools like istanbul 22 | coverage 23 | *.lcov 24 | 25 | # nyc test coverage 26 | .nyc_output 27 | 28 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 29 | .grunt 30 | 31 | # Bower dependency directory (https://bower.io/) 32 | bower_components 33 | 34 | # node-waf configuration 35 | .lock-wscript 36 | 37 | # Compiled binary addons (https://nodejs.org/api/addons.html) 38 | build/Release 39 | 40 | # Dependency directories 41 | node_modules/ 42 | jspm_packages/ 43 | 44 | # TypeScript v1 declaration files 45 | typings/ 46 | 47 | # TypeScript cache 48 | *.tsbuildinfo 49 | 50 | # Optional npm cache directory 51 | .npm 52 | 53 | # Optional eslint cache 54 | .eslintcache 55 | 56 | # Microbundle cache 57 | .rpt2_cache/ 58 | .rts2_cache_cjs/ 59 | .rts2_cache_es/ 60 | .rts2_cache_umd/ 61 | 62 | # Optional REPL history 63 | .node_repl_history 64 | 65 | # Output of 'npm pack' 66 | *.tgz 67 | 68 | # Yarn Integrity file 69 | .yarn-integrity 70 | 71 | # dotenv environment variables file 72 | .env 73 | .env.test 74 | 75 | # parcel-bundler cache (https://parceljs.org/) 76 | .cache 77 | 78 | # Next.js build output 79 | .next 80 | 81 | # Nuxt.js build / generate output 82 | .nuxt 83 | dist 84 | 85 | # Gatsby files 86 | .cache/ 87 | # Comment in the public line in if your project uses Gatsby and *not* Next.js 88 | # https://nextjs.org/blog/next-9-1#public-directory-support 89 | # public 90 | 91 | # vuepress build output 92 | .vuepress/dist 93 | 94 | # Serverless directories 95 | .serverless/ 96 | 97 | # FuseBox cache 98 | .fusebox/ 99 | 100 | # DynamoDB Local files 101 | .dynamodb/ 102 | 103 | # VSCode 104 | .vscode/* 105 | # VSCode Xdebug settings 106 | !.vscode/launch.json 107 | 108 | # Intellij idea 109 | *.iml 110 | .idea 111 | 112 | # OSX 113 | .DS_Store 114 | .AppleDouble 115 | .LSOverride 116 | 117 | # Files that might appear in the root of a volume 118 | .DocumentRevisions-V100 119 | .fseventsd 120 | .Spotlight-V100 121 | .TemporaryItems 122 | .Trashes 123 | .VolumeIcon.icns 124 | .com.apple.timemachine.donotpresent 125 | 126 | # Directories potentially created on remote AFP share 127 | .AppleDB 128 | .AppleDesktop 129 | Network Trash Folder 130 | Temporary Items 131 | .apdisk 132 | CHANGELOG.md 133 | -------------------------------------------------------------------------------- /.gitlab-ci.yml: -------------------------------------------------------------------------------- 1 | stages: 2 | - build 3 | - test 4 | 5 | cache: 6 | paths: 7 | - drupal/vendor/ 8 | 9 | build: 10 | stage: build 11 | image: php:7.4 12 | before_script: 13 | - apt-get update -yqq 14 | - apt-get install -yqq git libpq-dev libcurl4-gnutls-dev libicu-dev libvpx-dev libjpeg-dev libpng-dev libxpm-dev zlib1g-dev libfreetype6-dev libxml2-dev libexpat1-dev libbz2-dev libgmp3-dev libldap2-dev unixodbc-dev libsqlite3-dev libaspell-dev libsnmp-dev libpcre3-dev libtidy-dev libonig-dev libzip-dev nodejs 15 | 16 | # Install PHP extensions 17 | - docker-php-ext-install mbstring pdo_pgsql curl intl gd xml zip bz2 opcache 18 | 19 | # Install Composer 20 | - curl -sS https://getcomposer.org/installer | php 21 | 22 | # Install NVM and Yarn 23 | - curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash 24 | - export NVM_DIR="$HOME/.nvm" && . "$NVM_DIR/nvm.sh" --no-use 25 | - nvm install && nvm use 26 | - npm install --global yarn 27 | 28 | script: 29 | # Validate and build composer packages 30 | - cd drupal && php composer.phar validate && php composer.phar install 31 | 32 | # Install and build Nuxt 33 | - cd ../nuxt && npm install && npm run build 34 | artifacts: 35 | paths: 36 | - drupal/web 37 | 38 | test_e2e: 39 | stage: test 40 | image: drud/ddev-gitpod-base:20220817 41 | dependencies: 42 | - build 43 | services: 44 | - name: docker:dind 45 | alias: dockerdaemon 46 | variables: 47 | DOCKER_HOST: tcp://dockerdaemon:2375/ 48 | DOCKER_DRIVER: overlay2 49 | DOCKER_TLS_CERTDIR: "" 50 | before_script: 51 | - sudo chown -R gitpod:gitpod . 52 | script: 53 | # Start DDev and install the Drupal backend. 54 | - cd drupal && ddev start -y && ddev drupal-install 55 | -------------------------------------------------------------------------------- /.gitpod.yml: -------------------------------------------------------------------------------- 1 | image: 2 | file: .gitpod/Dockerfile 3 | 4 | tasks: 5 | - init: | 6 | # Setup Gitpod .env 7 | $GITPOD_REPO_ROOT/.gitpod/scripts/env-setup.sh 8 | 9 | # Setup DDev 10 | $GITPOD_REPO_ROOT/.gitpod/scripts/ddev-download-images.sh 11 | $GITPOD_REPO_ROOT/.gitpod/scripts/ddev-setup.sh 12 | 13 | # Install Drupal 14 | $GITPOD_REPO_ROOT/.gitpod/scripts/drupal-setup.sh 15 | 16 | # Installing Nuxt 17 | $GITPOD_REPO_ROOT/.gitpod/scripts/nuxt-setup.sh 18 | command: | 19 | # Setup Gitpod .env 20 | $GITPOD_REPO_ROOT/.gitpod/scripts/env-setup.sh 21 | 22 | # Start DDev 23 | $GITPOD_REPO_ROOT/.gitpod/scripts/ddev-setup.sh 24 | 25 | # Add OAuth2 consumer 26 | cd $GITPOD_REPO_ROOT/drupal && ddev druxt-add-consumer 27 | 28 | # Setup Nuxt 29 | $GITPOD_REPO_ROOT/.gitpod/scripts/nuxt-setup.sh 30 | 31 | # Start Nuxt 32 | cd $GITPOD_REPO_ROOT/nuxt && NUXT_TELEMETRY_DISABLED=1 npm run dev 33 | 34 | # VScode xdebug extension 35 | vscode: 36 | extensions: 37 | - dbaeumer.vscode-eslint 38 | - editorconfig.editorconfig 39 | - felixfbecker.php-debug 40 | - octref.vetur 41 | 42 | ports: 43 | # Drupal 44 | - port: 8080 45 | onOpen: ignore 46 | visibility: public 47 | 48 | # Nuxt/Druxt 49 | - port: 3000 50 | onOpen: ignore 51 | visibility: public 52 | 53 | # Nuxt/Druxt 54 | - port: 3003 55 | onOpen: ignore 56 | visibility: public 57 | 58 | # Currently un-notified and unsupported mailhog http port 59 | - port: 8025 60 | onOpen: ignore 61 | # Currently un-notified and unsupported mailhog https port 62 | - port: 8026 63 | onOpen: ignore 64 | # Currently un-notified and unsupported phpmyadmin http port 65 | - port: 8036 66 | onOpen: ignore 67 | # Currently un-notified and unsupported phpmyadmin https port 68 | - port: 8037 69 | onOpen: ignore 70 | # router http port that we're ignoring. 71 | - port: 8888 72 | onOpen: ignore 73 | # router https port that we're ignoring. 74 | - port: 8889 75 | onOpen: ignore 76 | # xdebug port 77 | - port: 9000 78 | onOpen: ignore 79 | 80 | github: 81 | prebuilds: 82 | master: true 83 | branches: true 84 | pullRequests: true 85 | pullRequestsFromForks: true 86 | addCheck: true 87 | addComment: false 88 | addBadge: true 89 | addLabel: true 90 | -------------------------------------------------------------------------------- /.gitpod/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM gitpod/workspace-full 2 | SHELL ["/bin/bash", "-c"] 3 | 4 | RUN sudo apt-get -qq update 5 | 6 | # Install cypress dependencies 7 | RUN sudo DEBIAN_FRONTEND=noninteractive apt-get install -y libgtk2.0-0 libgtk-3-0 libnotify-dev libgconf-2-4 libnss3 libxss1 libasound2 libxtst6 xauth xvfb 8 | 9 | # Install ddev 10 | RUN brew update && brew install drud/ddev/ddev 11 | 12 | # Install latest composer 13 | RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" 14 | RUN sudo php composer-setup.php --install-dir /usr/bin --filename composer 15 | RUN php -r "unlink('composer-setup.php');" 16 | 17 | # Install latest npm 18 | RUN npm install -g npm 19 | 20 | # Install cypress 21 | RUN npx cypress install 22 | -------------------------------------------------------------------------------- /.gitpod/scripts/ddev-download-images.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | ddev version | awk '/(drud|phpmyadmin)/ {print $2;}' >/tmp/images.txt 4 | while IFS= read -r item 5 | do 6 | docker pull "$item" 7 | done < <(cat /tmp/images.txt) 8 | -------------------------------------------------------------------------------- /.gitpod/scripts/ddev-setup.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | DRUPAL_DIR="${GITPOD_REPO_ROOT}/drupal" 4 | 5 | # Misc housekeeping before start 6 | ddev config global --instrumentation-opt-in=true 7 | 8 | # Start ddev 9 | cd $DRUPAL_DIR && ddev start 10 | -------------------------------------------------------------------------------- /.gitpod/scripts/drupal-setup.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -eu -o pipefail 3 | 4 | DRUPAL_DIR="${GITPOD_REPO_ROOT}/drupal" 5 | 6 | # Set up Drupal website 7 | cd "$DRUPAL_DIR" && ddev drupal-install 8 | -------------------------------------------------------------------------------- /.gitpod/scripts/env-setup.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -eu -o pipefail 3 | 4 | echo -en "OAUTH_CALLBACK=https://3000-${GITPOD_WORKSPACE_ID}.${GITPOD_WORKSPACE_CLUSTER_HOST}/callback\nOAUTH_CLIENT_ID=${GITPOD_INSTANCE_ID}" > .env 5 | -------------------------------------------------------------------------------- /.gitpod/scripts/nuxt-setup.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # Set up Druxt for use on gitpod 4 | 5 | set -eu -o pipefail 6 | 7 | DRUXT_DIR="${GITPOD_REPO_ROOT}/nuxt" 8 | 9 | # Set up Nuxt 10 | cd "$DRUXT_DIR" && echo "BASE_URL=$(gp url 8080)" > .env 11 | cd "$DRUXT_DIR" && npm i 12 | -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | 16.18.1 2 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | "version": "0.2.0", 6 | "configurations": [ 7 | { 8 | "name": "Listen for XDebug", 9 | "type": "php", 10 | "request": "launch", 11 | "hostname": "0.0.0.0", 12 | "port": 9000, 13 | "pathMappings": { 14 | "/var/www/html": "${workspaceRoot}" 15 | } 16 | } 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 DruxtJS 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Druxt Quickstart 2 | 3 | > One click, fully Decoupled Drupal with DruxtJS. 4 | 5 | Druxt Quickstart provides a Drupal and Nuxt mono-repo to get you started with DruxtJS power decoupled Drupal development. 6 | 7 | This repostory provides a quickstart installation of: 8 | - Drupal 9 9 | - Nuxt 2 10 | - Druxt 0 11 | 12 | ## Quick-er-start 13 | 14 | Try it before you fork it: 15 | 16 | [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/druxt/quickstart) 17 | 18 | 19 | ## Theme branches 20 | 21 | Start quicker with a pre-installed UI Framework. 22 | 23 | - [BootstrapVue](https://github.com/druxt/quickstart/tree/theme/bootstrap-vue) 24 | - [TailwindCSS](https://github.com/druxt/quickstart/tree/theme/tailwindcss) 25 | 26 | 27 | ## Getting started 28 | 29 | ### Local development with [DDev](https://ddev.readthedocs.io) 30 | 31 | 1. Click the **Use this template** button in GitHub and follow the on-screen instructions to **Create a new repository**. 32 | 33 | 2. Clone the repository locally. 34 | 35 | Example: `git clone git@github.com:druxt/quickstart.git` 36 | 37 | 3. Setup an `.env` file and update as required: `cp .env.example .env` 38 | 39 | 4. Install and setup Drupal: 40 | 41 | (from repository root) 42 | 43 | ``` 44 | cd drupal 45 | ddev start 46 | ddev drupal-install 47 | ddev druxt-add-consumer 48 | ``` 49 | 50 | 5. Install and run Nuxt: 51 | 52 | (from repository root) 53 | 54 | ``` 55 | cd nuxt 56 | nvm use 57 | npm install 58 | npm run dev 59 | ``` 60 | 61 | 62 | ### Cloud development with [Gitpod.io](https://gitpod.io) 63 | 64 | 1. Click the **Use this template** button in GitHub and follow the on-screen instructions to **Create a new repository**. 65 | 66 | 2. Once the repository has been generated, open it in Gitpod by appending `https://gitpod.io#` to the GitHub url. 67 | 68 | Example: `https://gitpod.io#github.com/druxt/quickstart` 69 | 70 | _Note:_ If this is your first time using Gitpod, you can signup for a free plan with your Github account. 71 | 72 | 3. Wait for your codebase to build. 73 | 74 | _Note:_ To speed up this step, enable Prebuilds by follow the instructions @ https://www.gitpod.io/docs/prebuilds#enable-prebuilt-workspaces 75 | 76 | 77 | ## How to use it 78 | 79 | Your environment contains a pre-install, pre-configured and running instance of Drupal and Nuxt, with the DruxtSite module enabled. 80 | 81 | You can access the services in your browser, via the **Remote Explorer** extension, or via the URL pattern: `https://[PORT]-[GITPOD_ID].[GITPOD_SERVER].gitpod.io` 82 | 83 | 84 | ## Services 85 | 86 | | Port | Service | 87 | | -- | -- | 88 | | `3000` | Nuxt.js | 89 | | `3003` | Storybook | 90 | | `8080` | Drupal | 91 | 92 | 93 | ## Tools 94 | 95 | ### DDEV 96 | 97 | > DDEV is an open source tool that makes it dead simple to get local PHP development environments up and running within minutes. 98 | 99 | DDEV is used to manage the Drupal instance, and provides a CLI that can be used to run common drupal tasks, including `ddev drush`. 100 | 101 | These commands should be run from within the `/drupal` folder. 102 | 103 | Refer to the documentation for more details: https://ddev.readthedocs.io 104 | 105 | ### @nuxtjs/auth-next 106 | 107 | > Zero-boilerplate authentication support for Nuxt.js! 108 | 109 | The @nuxtjs/auth-next module is installed and configured to connect to the Drupal Simple OAuth module by way of the DruxtAuth module: 110 | 111 | ```js 112 | this.$auth.loginWith('drupal-authorization_code') 113 | ``` 114 | 115 | - More details on how to use the `$auth` service can be found at https://auth.nuxtjs.org/api/auth 116 | 117 | ### @nuxtjs/storybook 118 | 119 | > Storybook integration with NuxtJS . 120 | 121 | Druxt integrates with the Nuxt Storybook module to provide zero-configuration, auto-discovery stories with access to live data from your Drupal backend. 122 | 123 | To start Storybook, navigate to the `nuxt` directory and run `npx nuxt storybook`. 124 | 125 | 126 | ## License 127 | 128 | [MIT](https://github.com/druxt/druxt.js/blob/develop/LICENSE) 129 | -------------------------------------------------------------------------------- /drupal/.ddev/commands/web/drupal-install: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ## Description: Installs Drupal and configures for DruxtSite. 4 | ## Usage: drupal-install 5 | ## Example: "ddev drupal-install" 6 | 7 | # Install composer dependencies. 8 | composer install 9 | 10 | # Install a standard Drupal installation. 11 | drush -y site:install --site-name='quickstart-druxt-site' standard 12 | 13 | # Enable the Druxt module. 14 | drush -y pm:enable druxt 15 | 16 | # Allow the anonymous user read only access to required Druxt resources. 17 | drush role:perm:add anonymous "access druxt resources" 18 | 19 | # Enable the Simple OAuth module for authentication. 20 | drush -y pm:enable simple_oauth 21 | 22 | # Configure and generate keys for Simple OAuth. 23 | drush -y config:set simple_oauth.settings public_key ../keys/public.key 24 | drush -y config:set simple_oauth.settings private_key ../keys/private.key 25 | drush simple-oauth:generate-keys ../keys 26 | 27 | # Enable authenticated editting via JSON:API. 28 | drush -y config:set jsonapi.settings read_only 0 29 | -------------------------------------------------------------------------------- /drupal/.ddev/commands/web/druxt-add-consumer: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ## Description: Installs a Simple OAuth consumer for Druxt use on Gitpod. 4 | ## Usage: druxt-add-consumer 5 | ## Example: "ddev druxt-add-consumer" 6 | 7 | # Create a Druxt consumer. 8 | drush php-eval ' 9 | $consumer = \Drupal\consumers\Entity\Consumer::create([ 10 | "owner_id" => 1, 11 | "uuid" => getenv("OAUTH_CLIENT_ID") ?: \Drupal::service("uuid")->generate(), 12 | "label" => "Druxt", 13 | "description" => "DruxtJS is a bridge between frameworks, Drupal in the back, Nuxt in the front.\n\nhttps://druxtjs.org", 14 | "confidential" => FALSE, 15 | "pkce" => TRUE, 16 | "redirect" => getenv("OAUTH_CALLBACK") ?: "http://localhost:3000/callback", 17 | "image_styles" => [], 18 | "roles" => [], 19 | ]); 20 | $consumer->save(); 21 | ' 22 | -------------------------------------------------------------------------------- /drupal/.ddev/config.yaml: -------------------------------------------------------------------------------- 1 | name: quickstart-druxtsite 2 | type: drupal9 3 | docroot: web 4 | php_version: "8.1" 5 | webserver_type: nginx-fpm 6 | router_http_port: "80" 7 | router_https_port: "443" 8 | xdebug_enabled: false 9 | additional_hostnames: [] 10 | additional_fqdns: [] 11 | mariadb_version: "10.3" 12 | mysql_version: "" 13 | nfs_mount_enabled: false 14 | mutagen_enabled: false 15 | use_dns_when_possible: true 16 | composer_version: "2" 17 | web_environment: [] 18 | 19 | # Key features of ddev's config.yaml: 20 | 21 | # name: # Name of the project, automatically provides 22 | # http://projectname.ddev.site and https://projectname.ddev.site 23 | 24 | # type: # drupal6/7/8, backdrop, typo3, wordpress, php 25 | 26 | # docroot: # Relative path to the directory containing index.php. 27 | 28 | # php_version: "7.4" # PHP version to use, "5.6", "7.0", "7.1", "7.2", "7.3", "7.4", "8.0", "8.1" 29 | 30 | # You can explicitly specify the webimage, dbimage, dbaimage lines but this 31 | # is not recommended, as the images are often closely tied to ddev's' behavior, 32 | # so this can break upgrades. 33 | 34 | # webimage: # nginx/php docker image. 35 | # dbimage: # mariadb docker image. 36 | # dbaimage: 37 | 38 | # mariadb_version and mysql_version 39 | # ddev can use many versions of mariadb and mysql 40 | # However these directives are mutually exclusive 41 | # mariadb_version: 10.2 42 | # mysql_version: 8.0 43 | 44 | # router_http_port: # Port to be used for http (defaults to port 80) 45 | # router_https_port: # Port for https (defaults to 443) 46 | 47 | # xdebug_enabled: false # Set to true to enable xdebug and "ddev start" or "ddev restart" 48 | # Note that for most people the commands 49 | # "ddev xdebug" to enable xdebug and "ddev xdebug off" to disable it work better, 50 | # as leaving xdebug enabled all the time is a big performance hit. 51 | 52 | # xhprof_enabled: false # Set to true to enable xhprof and "ddev start" or "ddev restart" 53 | # Note that for most people the commands 54 | # "ddev xhprof" to enable xhprof and "ddev xhprof off" to disable it work better, 55 | # as leaving xhprof enabled all the time is a big performance hit. 56 | 57 | # webserver_type: nginx-fpm # or apache-fpm 58 | 59 | # timezone: Europe/Berlin 60 | # This is the timezone used in the containers and by PHP; 61 | # it can be set to any valid timezone, 62 | # see https://en.wikipedia.org/wiki/List_of_tz_database_time_zones 63 | # For example Europe/Dublin or MST7MDT 64 | 65 | # composer_version: "2" 66 | # if composer_version:"2" it will use the most recent composer v2 67 | # It can also be set to "1", to get most recent composer v1 68 | # or "" for the default v2 created at release time. 69 | # It can be set to any existing specific composer version. 70 | # After first project 'ddev start' this will not be updated until it changes 71 | 72 | # additional_hostnames: 73 | # - somename 74 | # - someothername 75 | # would provide http and https URLs for "somename.ddev.site" 76 | # and "someothername.ddev.site". 77 | 78 | # additional_fqdns: 79 | # - example.com 80 | # - sub1.example.com 81 | # would provide http and https URLs for "example.com" and "sub1.example.com" 82 | # Please take care with this because it can cause great confusion. 83 | 84 | # upload_dir: custom/upload/dir 85 | # would set the destination path for ddev import-files to /custom/upload/dir 86 | 87 | # working_dir: 88 | # web: /var/www/html 89 | # db: /home 90 | # would set the default working directory for the web and db services. 91 | # These values specify the destination directory for ddev ssh and the 92 | # directory in which commands passed into ddev exec are run. 93 | 94 | # omit_containers: [db, dba, ddev-ssh-agent] 95 | # Currently only these containers are supported. Some containers can also be 96 | # omitted globally in the ~/.ddev/global_config.yaml. Note that if you omit 97 | # the "db" container, several standard features of ddev that access the 98 | # database container will be unusable. In the global configuration it is also 99 | # possible to omit ddev-router, but not here. 100 | 101 | # nfs_mount_enabled: false 102 | # Great performance improvement but requires host configuration first. 103 | # See https://ddev.readthedocs.io/en/stable/users/performance/#using-nfs-to-mount-the-project-into-the-container 104 | 105 | # mutagen_enabled: false 106 | # Experimental performance improvement using mutagen asynchronous updates. 107 | # See https://ddev.readthedocs.io/en/latest/users/performance/#using-mutagen 108 | 109 | # fail_on_hook_fail: False 110 | # Decide whether 'ddev start' should be interrupted by a failing hook 111 | 112 | # host_https_port: "59002" 113 | # The host port binding for https can be explicitly specified. It is 114 | # dynamic unless otherwise specified. 115 | # This is not used by most people, most people use the *router* instead 116 | # of the localhost port. 117 | 118 | # host_webserver_port: "59001" 119 | # The host port binding for the ddev-webserver can be explicitly specified. It is 120 | # dynamic unless otherwise specified. 121 | # This is not used by most people, most people use the *router* instead 122 | # of the localhost port. 123 | 124 | # host_db_port: "59002" 125 | # The host port binding for the ddev-dbserver can be explicitly specified. It is dynamic 126 | # unless explicitly specified. 127 | 128 | # phpmyadmin_port: "8036" 129 | # phpmyadmin_https_port: "8037" 130 | # The PHPMyAdmin ports can be changed from the default 8036 and 8037 131 | 132 | # host_phpmyadmin_port: "8036" 133 | # The phpmyadmin (dba) port is not normally bound on the host at all, instead being routed 134 | # through ddev-router, but it can be specified and bound. 135 | 136 | # mailhog_port: "8025" 137 | # mailhog_https_port: "8026" 138 | # The MailHog ports can be changed from the default 8025 and 8026 139 | 140 | # host_mailhog_port: "8025" 141 | # The mailhog port is not normally bound on the host at all, instead being routed 142 | # through ddev-router, but it can be bound directly to localhost if specified here. 143 | 144 | # webimage_extra_packages: [php7.4-tidy, php-bcmath] 145 | # Extra Debian packages that are needed in the webimage can be added here 146 | 147 | # dbimage_extra_packages: [telnet,netcat] 148 | # Extra Debian packages that are needed in the dbimage can be added here 149 | 150 | # use_dns_when_possible: true 151 | # If the host has internet access and the domain configured can 152 | # successfully be looked up, DNS will be used for hostname resolution 153 | # instead of editing /etc/hosts 154 | # Defaults to true 155 | 156 | # project_tld: ddev.site 157 | # The top-level domain used for project URLs 158 | # The default "ddev.site" allows DNS lookup via a wildcard 159 | # If you prefer you can change this to "ddev.local" to preserve 160 | # pre-v1.9 behavior. 161 | 162 | # ngrok_args: --subdomain mysite --auth username:pass 163 | # Provide extra flags to the "ngrok http" command, see 164 | # https://ngrok.com/docs#http or run "ngrok http -h" 165 | 166 | # disable_settings_management: false 167 | # If true, ddev will not create CMS-specific settings files like 168 | # Drupal's settings.php/settings.ddev.php or TYPO3's AdditionalConfiguration.php 169 | # In this case the user must provide all such settings. 170 | 171 | # You can inject environment variables into the web container with: 172 | # web_environment: 173 | # - SOMEENV=somevalue 174 | # - SOMEOTHERENV=someothervalue 175 | 176 | # no_project_mount: false 177 | # (Experimental) If true, ddev will not mount the project into the web container; 178 | # the user is responsible for mounting it manually or via a script. 179 | # This is to enable experimentation with alternate file mounting strategies. 180 | # For advanced users only! 181 | 182 | # bind_all_interfaces: false 183 | # If true, host ports will be bound on all network interfaces, 184 | # not just the localhost interface. This means that ports 185 | # will be available on the local network if the host firewall 186 | # allows it. 187 | 188 | # Many ddev commands can be extended to run tasks before or after the 189 | # ddev command is executed, for example "post-start", "post-import-db", 190 | # "pre-composer", "post-composer" 191 | # See https://ddev.readthedocs.io/en/stable/users/extending-commands/ for more 192 | # information on the commands that can be extended and the tasks you can define 193 | # for them. Example: 194 | #hooks: 195 | # post-import-db: 196 | # - exec: drush cr 197 | # - exec: drush updb 198 | -------------------------------------------------------------------------------- /drupal/.ddev/docker-compose.env.yaml: -------------------------------------------------------------------------------- 1 | version: '3.6' 2 | 3 | services: 4 | web: 5 | env_file: 6 | - "$PWD/../.env" 7 | volumes: 8 | - "$PWD/../.env:/var/www/html/.env" 9 | -------------------------------------------------------------------------------- /drupal/.ddev/docker-compose.network-mtu.yaml: -------------------------------------------------------------------------------- 1 | networks: 2 | default: 3 | driver_opts: 4 | com.docker.network.driver.mtu: 1440 5 | -------------------------------------------------------------------------------- /drupal/.gitignore: -------------------------------------------------------------------------------- 1 | # Ignore directories generated by Composer 2 | bin/ 3 | drush/contrib/ 4 | keys/*.key 5 | vendor/ 6 | web/core/ 7 | web/modules/contrib/ 8 | web/themes/contrib/ 9 | web/profiles/contrib/ 10 | web/libraries/ 11 | 12 | # Ignore sensitive information 13 | web/sites/*/settings.local.php 14 | 15 | # Ignore Drupal's file directory 16 | web/sites/*/files/ 17 | !web/sites/default/files/.gitkeep 18 | 19 | # Ignore SimpleTest multi-site environment. 20 | web/sites/simpletest 21 | 22 | # Ignore environment specific files. 23 | .env 24 | web/robots.txt 25 | .editorconfig 26 | .gitattributes 27 | .ddev/docker-compose.host-docker-internal.yaml 28 | -------------------------------------------------------------------------------- /drupal/composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "drupal/recommended-project", 3 | "description": "Project template for Drupal 9 projects with a relocated document root", 4 | "type": "project", 5 | "license": "GPL-2.0-or-later", 6 | "homepage": "https://www.drupal.org/project/drupal", 7 | "support": { 8 | "docs": "https://www.drupal.org/docs/user_guide/en/index.html", 9 | "chat": "https://www.drupal.org/node/314178" 10 | }, 11 | "repositories": [ 12 | { 13 | "type": "composer", 14 | "url": "https://packages.drupal.org/8" 15 | } 16 | ], 17 | "require": { 18 | "composer/installers": "2.2.0", 19 | "cweagans/composer-patches": "^1.7.2", 20 | "drupal/core-composer-scaffold": "9.4.8", 21 | "drupal/core-project-message": "9.4.8", 22 | "drupal/core-recommended": "9.4.8", 23 | "drupal/druxt": "1.1.1", 24 | "drupal/simple_oauth": "^5.2.2", 25 | "drush/drush": "11.3.2", 26 | "vlucas/phpdotenv": "^5.5.0" 27 | }, 28 | "require-dev": { 29 | "drupal/core-dev": "9.4.8" 30 | }, 31 | "conflict": { 32 | "drupal/drupal": "*" 33 | }, 34 | "minimum-stability": "dev", 35 | "prefer-stable": true, 36 | "autoload": { 37 | "files": [ 38 | "load.environment.php" 39 | ] 40 | }, 41 | "config": { 42 | "sort-packages": true, 43 | "allow-plugins": { 44 | "composer/installers": true, 45 | "drupal/core-composer-scaffold": true, 46 | "drupal/core-project-message": true, 47 | "dealerdirect/phpcodesniffer-composer-installer": true, 48 | "cweagans/composer-patches": true 49 | } 50 | }, 51 | "extra": { 52 | "drupal-scaffold": { 53 | "locations": { 54 | "web-root": "web/" 55 | } 56 | }, 57 | "installer-paths": { 58 | "web/core": ["type:drupal-core"], 59 | "web/libraries/{$name}": ["type:drupal-library"], 60 | "web/modules/contrib/{$name}": ["type:drupal-module"], 61 | "web/profiles/contrib/{$name}": ["type:drupal-profile"], 62 | "web/themes/contrib/{$name}": ["type:drupal-theme"], 63 | "drush/Commands/contrib/{$name}": ["type:drupal-drush"], 64 | "web/modules/custom/{$name}": ["type:drupal-custom-module"], 65 | "web/profiles/custom/{$name}": ["type:drupal-custom-profile"], 66 | "web/themes/custom/{$name}": ["type:drupal-custom-theme"] 67 | }, 68 | "drupal-core-project-message": { 69 | "include-keys": ["homepage", "support"], 70 | "post-create-project-cmd-message": [ 71 | " ", 72 | " Congratulations, you’ve installed the Drupal codebase ", 73 | " from the drupal/recommended-project template! ", 74 | " ", 75 | "", 76 | "Next steps:", 77 | 78 | " * Install the site: https://www.drupal.org/docs/8/install", 79 | " * Read the user guide: https://www.drupal.org/docs/user_guide/en/index.html", 80 | " * Get support: https://www.drupal.org/support", 81 | " * Get involved with the Drupal community:", 82 | " https://www.drupal.org/getting-involved", 83 | " * Remove the plugin that prints this message:", 84 | " composer remove drupal/core-project-message" 85 | ] 86 | } 87 | } 88 | } 89 | -------------------------------------------------------------------------------- /drupal/load.environment.php: -------------------------------------------------------------------------------- 1 | load(); 17 | } 18 | catch (InvalidPathException $e) { 19 | // Do nothing. Production environments rarely use .env files. 20 | } 21 | $dotenv_local = Dotenv::createImmutable(__DIR__, '.env.local'); 22 | try { 23 | $dotenv_local->load(); 24 | } 25 | catch (InvalidPathException $e) { 26 | // Do nothing. Production environments rarely use .env files. 27 | } 28 | -------------------------------------------------------------------------------- /drupal/web/.csslintrc: -------------------------------------------------------------------------------- 1 | --errors=box-model, 2 | display-property-grouping, 3 | duplicate-background-images, 4 | duplicate-properties, 5 | empty-rules, 6 | ids, 7 | import, 8 | important, 9 | known-properties, 10 | outline-none, 11 | overqualified-elements, 12 | qualified-headings, 13 | shorthand, 14 | star-property-hack, 15 | text-indent, 16 | underscore-property-hack, 17 | unique-headings, 18 | unqualified-attributes, 19 | vendor-prefix, 20 | zero-units 21 | --ignore=adjoining-classes, 22 | box-sizing, 23 | bulletproof-font-face, 24 | compatible-vendor-prefixes, 25 | errors, 26 | fallback-colors, 27 | floats, 28 | font-faces, 29 | font-sizes, 30 | gradients, 31 | import-ie-limit, 32 | order-alphabetical, 33 | regex-selectors, 34 | rules-count, 35 | selector-max, 36 | selector-max-approaching, 37 | selector-newline, 38 | universal-selector 39 | --exclude-list=core/assets, 40 | vendor 41 | -------------------------------------------------------------------------------- /drupal/web/.eslintignore: -------------------------------------------------------------------------------- 1 | core/**/* 2 | vendor/**/* 3 | sites/**/files/**/* 4 | libraries/**/* 5 | sites/**/libraries/**/* 6 | profiles/**/libraries/**/* 7 | **/js_test_files/**/* 8 | **/node_modules/**/* 9 | -------------------------------------------------------------------------------- /drupal/web/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./core/.eslintrc.json" 3 | } 4 | -------------------------------------------------------------------------------- /drupal/web/.ht.router.php: -------------------------------------------------------------------------------- 1 | 7 | 8 | Require all denied 9 | 10 | 11 | Order allow,deny 12 | 13 | 14 | 15 | # Don't show directory listings for URLs which map to a directory. 16 | Options -Indexes 17 | 18 | # Set the default handler. 19 | DirectoryIndex index.php index.html index.htm 20 | 21 | # Add correct encoding for SVGZ. 22 | AddType image/svg+xml svg svgz 23 | AddEncoding gzip svgz 24 | 25 | # Most of the following PHP settings cannot be changed at runtime. See 26 | # sites/default/default.settings.php and 27 | # Drupal\Core\DrupalKernel::bootEnvironment() for settings that can be 28 | # changed at runtime. 29 | 30 | # PHP 7, Apache 1 and 2. 31 | 32 | php_value assert.active 0 33 | 34 | 35 | # PHP 8, Apache 1 and 2. 36 | 37 | php_value assert.active 0 38 | 39 | 40 | # Requires mod_expires to be enabled. 41 | 42 | # Enable expirations. 43 | ExpiresActive On 44 | 45 | # Cache all files for 2 weeks after access (A). 46 | ExpiresDefault A1209600 47 | 48 | 49 | # Do not allow PHP scripts to be cached unless they explicitly send cache 50 | # headers themselves. Otherwise all scripts would have to overwrite the 51 | # headers set by mod_expires if they want another caching behavior. This may 52 | # fail if an error occurs early in the bootstrap process, and it may cause 53 | # problems if a non-Drupal PHP file is installed in a subdirectory. 54 | ExpiresActive Off 55 | 56 | 57 | 58 | # Set a fallback resource if mod_rewrite is not enabled. This allows Drupal to 59 | # work without clean URLs. This requires Apache version >= 2.2.16. If Drupal is 60 | # not accessed by the top level URL (i.e.: http://example.com/drupal/ instead of 61 | # http://example.com/), the path to index.php will need to be adjusted. 62 | 63 | FallbackResource /index.php 64 | 65 | 66 | # Various rewrite rules. 67 | 68 | RewriteEngine on 69 | 70 | # Set "protossl" to "s" if we were accessed via https://. This is used later 71 | # if you enable "www." stripping or enforcement, in order to ensure that 72 | # you don't bounce between http and https. 73 | RewriteRule ^ - [E=protossl] 74 | RewriteCond %{HTTPS} on 75 | RewriteRule ^ - [E=protossl:s] 76 | 77 | # Make sure Authorization HTTP header is available to PHP 78 | # even when running as CGI or FastCGI. 79 | RewriteRule ^ - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 80 | 81 | # Block access to "hidden" directories whose names begin with a period. This 82 | # includes directories used by version control systems such as Subversion or 83 | # Git to store control files. Files whose names begin with a period, as well 84 | # as the control files used by CVS, are protected by the FilesMatch directive 85 | # above. 86 | # 87 | # NOTE: This only works when mod_rewrite is loaded. Without mod_rewrite, it is 88 | # not possible to block access to entire directories from .htaccess because 89 | # is not allowed here. 90 | # 91 | # If you do not have mod_rewrite installed, you should remove these 92 | # directories from your webroot or otherwise protect them from being 93 | # downloaded. 94 | RewriteRule "/\.|^\.(?!well-known/)" - [F] 95 | 96 | # If your site can be accessed both with and without the 'www.' prefix, you 97 | # can use one of the following settings to redirect users to your preferred 98 | # URL, either WITH or WITHOUT the 'www.' prefix. Choose ONLY one option: 99 | # 100 | # To redirect all users to access the site WITH the 'www.' prefix, 101 | # (http://example.com/foo will be redirected to http://www.example.com/foo) 102 | # uncomment the following: 103 | # RewriteCond %{HTTP_HOST} . 104 | # RewriteCond %{HTTP_HOST} !^www\. [NC] 105 | # RewriteRule ^ http%{ENV:protossl}://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 106 | # 107 | # To redirect all users to access the site WITHOUT the 'www.' prefix, 108 | # (http://www.example.com/foo will be redirected to http://example.com/foo) 109 | # uncomment the following: 110 | # RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] 111 | # RewriteRule ^ http%{ENV:protossl}://%1%{REQUEST_URI} [L,R=301] 112 | 113 | # Modify the RewriteBase if you are using Drupal in a subdirectory or in a 114 | # VirtualDocumentRoot and the rewrite rules are not working properly. 115 | # For example if your site is at http://example.com/drupal uncomment and 116 | # modify the following line: 117 | # RewriteBase /drupal 118 | # 119 | # If your site is running in a VirtualDocumentRoot at http://example.com/, 120 | # uncomment the following line: 121 | # RewriteBase / 122 | 123 | # Redirect common PHP files to their new locations. 124 | RewriteCond %{REQUEST_URI} ^(.*)?/(install\.php) [OR] 125 | RewriteCond %{REQUEST_URI} ^(.*)?/(rebuild\.php) 126 | RewriteCond %{REQUEST_URI} !core 127 | RewriteRule ^ %1/core/%2 [L,QSA,R=301] 128 | 129 | # Rewrite install.php during installation to see if mod_rewrite is working 130 | RewriteRule ^core/install\.php core/install.php?rewrite=ok [QSA,L] 131 | 132 | # Pass all requests not referring directly to files in the filesystem to 133 | # index.php. 134 | RewriteCond %{REQUEST_FILENAME} !-f 135 | RewriteCond %{REQUEST_FILENAME} !-d 136 | RewriteCond %{REQUEST_URI} !=/favicon.ico 137 | RewriteRule ^ index.php [L] 138 | 139 | # For security reasons, deny access to other PHP files on public sites. 140 | # Note: The following URI conditions are not anchored at the start (^), 141 | # because Drupal may be located in a subdirectory. To further improve 142 | # security, you can replace '!/' with '!^/'. 143 | # Allow access to PHP files in /core (like authorize.php or install.php): 144 | RewriteCond %{REQUEST_URI} !/core/[^/]*\.php$ 145 | # Allow access to test-specific PHP files: 146 | RewriteCond %{REQUEST_URI} !/core/modules/system/tests/https?\.php 147 | # Allow access to Statistics module's custom front controller. 148 | # Copy and adapt this rule to directly execute PHP files in contributed or 149 | # custom modules or to run another PHP application in the same directory. 150 | RewriteCond %{REQUEST_URI} !/core/modules/statistics/statistics\.php$ 151 | # Deny access to any other PHP files that do not match the rules above. 152 | # Specifically, disallow autoload.php from being served directly. 153 | RewriteRule "^(.+/.*|autoload)\.php($|/)" - [F] 154 | 155 | # Rules to correctly serve gzip compressed CSS and JS files. 156 | # Requires both mod_rewrite and mod_headers to be enabled. 157 | 158 | # Serve gzip compressed CSS files if they exist and the client accepts gzip. 159 | RewriteCond %{HTTP:Accept-encoding} gzip 160 | RewriteCond %{REQUEST_FILENAME}\.gz -s 161 | RewriteRule ^(.*)\.css $1\.css\.gz [QSA] 162 | 163 | # Serve gzip compressed JS files if they exist and the client accepts gzip. 164 | RewriteCond %{HTTP:Accept-encoding} gzip 165 | RewriteCond %{REQUEST_FILENAME}\.gz -s 166 | RewriteRule ^(.*)\.js $1\.js\.gz [QSA] 167 | 168 | # Serve correct content types, and prevent double compression. 169 | RewriteRule \.css\.gz$ - [T=text/css,E=no-gzip:1,E=no-brotli:1] 170 | RewriteRule \.js\.gz$ - [T=text/javascript,E=no-gzip:1,E=no-brotli:1] 171 | 172 | 173 | # Serve correct encoding type. 174 | Header set Content-Encoding gzip 175 | # Force proxies to cache gzipped & non-gzipped css/js files separately. 176 | Header append Vary Accept-Encoding 177 | 178 | 179 | 180 | 181 | # Various header fixes. 182 | 183 | # Disable content sniffing, since it's an attack vector. 184 | Header always set X-Content-Type-Options nosniff 185 | # Disable Proxy header, since it's an attack vector. 186 | RequestHeader unset Proxy 187 | 188 | -------------------------------------------------------------------------------- /drupal/web/INSTALL.txt: -------------------------------------------------------------------------------- 1 | 2 | Please read core/INSTALL.txt for detailed installation instructions for your 3 | Drupal website. 4 | -------------------------------------------------------------------------------- /drupal/web/README.md: -------------------------------------------------------------------------------- 1 | Drupal Logo 2 | 3 | Drupal is an open source content management platform supporting a variety of 4 | websites ranging from personal weblogs to large community-driven websites. For 5 | more information, visit the Drupal website, [Drupal.org][Drupal.org], and join 6 | the [Drupal community][Drupal community]. 7 | 8 | ## Contributing 9 | 10 | Drupal is developed on [Drupal.org][Drupal.org], the home of the international 11 | Drupal community since 2001! 12 | 13 | [Drupal.org][Drupal.org] hosts Drupal's [GitLab repository][GitLab repository], 14 | its [issue queue][issue queue], and its [documentation][documentation]. Before 15 | you start working on code, be sure to search the [issue queue][issue queue] and 16 | create an issue if your aren't able to find an existing issue. 17 | 18 | Every issue on Drupal.org automatically creates a new community-accessible fork 19 | that you can contribute to. Learn more about the code contribution process on 20 | the [Issue forks & merge requests page][issue forks]. 21 | 22 | ## Usage 23 | 24 | For a brief introduction, see [USAGE.txt](/core/USAGE.txt). You can also find 25 | guides, API references, and more by visiting Drupal's [documentation 26 | page][documentation]. 27 | 28 | You can quickly extend Drupal's core feature set by installing any of its 29 | [thousands of free and open source modules][modules]. With Drupal and its 30 | module ecosystem, you can often build most or all of what your project needs 31 | before writing a single line of code. 32 | 33 | ## Changelog 34 | 35 | Drupal keeps detailed [change records][changelog]. You can search Drupal's 36 | changes for a record of every notable breaking change and new feature since 37 | 2011. 38 | 39 | ## Security 40 | 41 | For a list of security announcements, see the [Security advisories 42 | page][Security advisories] (available as [an RSS feed][security RSS]). This 43 | page also describes how to subscribe to these announcements via email. 44 | 45 | For information about the Drupal security process, or to find out how to report 46 | a potential security issue to the Drupal security team, see the [Security team 47 | page][security team]. 48 | 49 | ## Need a helping hand? 50 | 51 | Visit the [Support page][support] or browse [over a thousand Drupal 52 | providers][service providers] offering design, strategy, development, and 53 | hosting services. 54 | 55 | ## Legal matters 56 | 57 | Know your rights when using Drupal by reading Drupal core's 58 | [license](/core/LICENSE.txt). 59 | 60 | Learn about the [Drupal trademark and logo policy here][trademark]. 61 | 62 | [Drupal.org]: https://www.drupal.org 63 | [Drupal community]: https://www.drupal.org/community 64 | [GitLab repository]: https://git.drupalcode.org/project/drupal 65 | [issue queue]: https://www.drupal.org/project/issues/drupal 66 | [issue forks]: https://www.drupal.org/drupalorg/docs/gitlab-integration/issue-forks-merge-requests 67 | [documentation]: https://www.drupal.org/documentation 68 | [changelog]: https://www.drupal.org/list-changes/drupal 69 | [modules]: https://www.drupal.org/project/project_module 70 | [security advisories]: https://www.drupal.org/security 71 | [security RSS]: https://www.drupal.org/security/rss.xml 72 | [security team]: https://www.drupal.org/drupal-security-team 73 | [service providers]: https://www.drupal.org/drupal-services 74 | [support]: https://www.drupal.org/support 75 | [trademark]: https://www.drupal.com/trademark 76 | -------------------------------------------------------------------------------- /drupal/web/autoload.php: -------------------------------------------------------------------------------- 1 | handle($request); 20 | $response->send(); 21 | 22 | $kernel->terminate($request, $response); 23 | -------------------------------------------------------------------------------- /drupal/web/modules/README.txt: -------------------------------------------------------------------------------- 1 | Modules extend your site functionality beyond Drupal core. 2 | 3 | WHAT TO PLACE IN THIS DIRECTORY? 4 | -------------------------------- 5 | 6 | Placing downloaded and custom modules in this directory separates downloaded and 7 | custom modules from Drupal core's modules. This allows Drupal core to be updated 8 | without overwriting these files. 9 | 10 | DOWNLOAD ADDITIONAL MODULES 11 | --------------------------- 12 | 13 | Contributed modules from the Drupal community may be downloaded at 14 | https://www.drupal.org/project/project_module. 15 | 16 | ORGANIZING MODULES IN THIS DIRECTORY 17 | ------------------------------------ 18 | 19 | You may create subdirectories in this directory, to organize your added modules, 20 | without breaking the site. Some common subdirectories include "contrib" for 21 | contributed modules, and "custom" for custom modules. Note that if you move a 22 | module to a subdirectory after it has been enabled, you may need to clear the 23 | Drupal cache so it can be found. 24 | 25 | There are number of directories that are ignored when looking for modules. These 26 | are 'src', 'lib', 'vendor', 'assets', 'css', 'files', 'images', 'js', 'misc', 27 | 'templates', 'includes', 'fixtures' and 'Drupal'. 28 | 29 | MULTISITE CONFIGURATION 30 | ----------------------- 31 | 32 | In multisite configurations, modules found in this directory are available to 33 | all sites. You may also put modules in the sites/all/modules directory, and the 34 | versions in sites/all/modules will take precedence over versions of the same 35 | module that are here. Alternatively, the sites/your_site_name/modules directory 36 | pattern may be used to restrict modules to a specific site instance. 37 | 38 | MORE INFORMATION 39 | ---------------- 40 | 41 | Refer to the “Developing for Drupal” section of the README.txt in the Drupal 42 | root directory for further information on extending Drupal with custom modules. 43 | -------------------------------------------------------------------------------- /drupal/web/profiles/README.txt: -------------------------------------------------------------------------------- 1 | Installation profiles define additional steps that run after the base 2 | installation of Drupal is completed. They may also offer additional 3 | functionality and change the behavior of the site. 4 | 5 | WHAT TO PLACE IN THIS DIRECTORY? 6 | -------------------------------- 7 | 8 | Place downloaded and custom installation profiles in this directory. 9 | Note that installation profiles are generally provided as part of a Drupal 10 | distribution. 11 | 12 | DOWNLOAD ADDITIONAL DISTRIBUTIONS 13 | --------------------------------- 14 | 15 | Contributed distributions from the Drupal community may be downloaded at 16 | https://www.drupal.org/project/project_distribution. 17 | 18 | MULTISITE CONFIGURATION 19 | ----------------------- 20 | 21 | In multisite configurations, installation profiles found in this directory are 22 | available to all sites during their initial site installation. 23 | 24 | MORE INFORMATION 25 | ---------------- 26 | 27 | Refer to the "Installation profiles" section of the README.txt in the Drupal 28 | root directory for further information on extending Drupal with custom profiles. 29 | -------------------------------------------------------------------------------- /drupal/web/sites/README.txt: -------------------------------------------------------------------------------- 1 | This directory structure contains the settings and configuration files specific 2 | to your site or sites and is an integral part of multisite configurations. 3 | 4 | It is now recommended to place your custom and downloaded extensions in the 5 | /modules, /themes, and /profiles directories located in the Drupal root. The 6 | sites/all/ subdirectory structure, which was recommended in previous versions 7 | of Drupal, is still supported. 8 | 9 | See core/INSTALL.txt for information about single-site installation or 10 | multisite configuration. 11 | -------------------------------------------------------------------------------- /drupal/web/sites/default/default.services.yml: -------------------------------------------------------------------------------- 1 | parameters: 2 | session.storage.options: 3 | # Default ini options for sessions. 4 | # 5 | # Some distributions of Linux (most notably Debian) ship their PHP 6 | # installations with garbage collection (gc) disabled. Since Drupal depends 7 | # on PHP's garbage collection for clearing sessions, ensure that garbage 8 | # collection occurs by using the most common settings. 9 | # @default 1 10 | gc_probability: 1 11 | # @default 100 12 | gc_divisor: 100 13 | # 14 | # Set session lifetime (in seconds), i.e. the grace period for session 15 | # data. Sessions are deleted by the session garbage collector after one 16 | # session lifetime has elapsed since the user's last visit. When a session 17 | # is deleted, authenticated users are logged out, and the contents of the 18 | # user's session is discarded. 19 | # @default 200000 20 | gc_maxlifetime: 200000 21 | # 22 | # Set session cookie lifetime (in seconds), i.e. the time from the session 23 | # is created to the cookie expires, i.e. when the browser is expected to 24 | # discard the cookie. The value 0 means "until the browser is closed". 25 | # @default 2000000 26 | cookie_lifetime: 2000000 27 | # 28 | # Drupal automatically generates a unique session cookie name based on the 29 | # full domain name used to access the site. This mechanism is sufficient 30 | # for most use-cases, including multi-site deployments. However, if it is 31 | # desired that a session can be reused across different subdomains, the 32 | # cookie domain needs to be set to the shared base domain. Doing so assures 33 | # that users remain logged in as they cross between various subdomains. 34 | # To maximize compatibility and normalize the behavior across user agents, 35 | # the cookie domain should start with a dot. 36 | # 37 | # @default none 38 | # cookie_domain: '.example.com' 39 | # 40 | # Set the session ID string length. The length can be between 22 to 256. The 41 | # PHP recommended value is 48. See 42 | # https://www.php.net/manual/session.security.ini.php for more information. 43 | # This value should be kept in sync with 44 | # \Drupal\Core\Session\SessionConfiguration::__construct() 45 | # @default 48 46 | sid_length: 48 47 | # 48 | # Set the number of bits in encoded session ID character. The possible 49 | # values are '4' (0-9, a-f), '5' (0-9, a-v), and '6' (0-9, a-z, A-Z, "-", 50 | # ","). The PHP recommended value is 6. See 51 | # https://www.php.net/manual/session.security.ini.php for more information. 52 | # This value should be kept in sync with 53 | # \Drupal\Core\Session\SessionConfiguration::__construct() 54 | # @default 6 55 | sid_bits_per_character: 6 56 | twig.config: 57 | # Twig debugging: 58 | # 59 | # When debugging is enabled: 60 | # - The markup of each Twig template is surrounded by HTML comments that 61 | # contain theming information, such as template file name suggestions. 62 | # - Note that this debugging markup will cause automated tests that directly 63 | # check rendered HTML to fail. When running automated tests, 'debug' 64 | # should be set to FALSE. 65 | # - The dump() function can be used in Twig templates to output information 66 | # about template variables. 67 | # - Twig templates are automatically recompiled whenever the source code 68 | # changes (see auto_reload below). 69 | # 70 | # For more information about debugging Twig templates, see 71 | # https://www.drupal.org/node/1906392. 72 | # 73 | # Enabling Twig debugging is not recommended in production environments. 74 | # @default false 75 | debug: false 76 | # Twig auto-reload: 77 | # 78 | # Automatically recompile Twig templates whenever the source code changes. 79 | # If you don't provide a value for auto_reload, it will be determined 80 | # based on the value of debug. 81 | # 82 | # Enabling auto-reload is not recommended in production environments. 83 | # @default null 84 | auto_reload: null 85 | # Twig cache: 86 | # 87 | # By default, Twig templates will be compiled and stored in the filesystem 88 | # to increase performance. Disabling the Twig cache will recompile the 89 | # templates from source each time they are used. In most cases the 90 | # auto_reload setting above should be enabled rather than disabling the 91 | # Twig cache. 92 | # 93 | # Disabling the Twig cache is not recommended in production environments. 94 | # @default true 95 | cache: true 96 | renderer.config: 97 | # Renderer required cache contexts: 98 | # 99 | # The Renderer will automatically associate these cache contexts with every 100 | # render array, hence varying every render array by these cache contexts. 101 | # 102 | # @default ['languages:language_interface', 'theme', 'user.permissions'] 103 | required_cache_contexts: ['languages:language_interface', 'theme', 'user.permissions'] 104 | # Renderer automatic placeholdering conditions: 105 | # 106 | # Drupal allows portions of the page to be automatically deferred when 107 | # rendering to improve cache performance. That is especially helpful for 108 | # cache contexts that vary widely, such as the active user. On some sites 109 | # those may be different, however, such as sites with only a handful of 110 | # users. If you know what the high-cardinality cache contexts are for your 111 | # site, specify those here. If you're not sure, the defaults are fairly safe 112 | # in general. 113 | # 114 | # For more information about rendering optimizations see 115 | # https://www.drupal.org/developing/api/8/render/arrays/cacheability#optimizing 116 | auto_placeholder_conditions: 117 | # Max-age at or below which caching is not considered worthwhile. 118 | # 119 | # Disable by setting to -1. 120 | # 121 | # @default 0 122 | max-age: 0 123 | # Cache contexts with a high cardinality. 124 | # 125 | # Disable by setting to []. 126 | # 127 | # @default ['session', 'user'] 128 | contexts: ['session', 'user'] 129 | # Tags with a high invalidation frequency. 130 | # 131 | # Disable by setting to []. 132 | # 133 | # @default [] 134 | tags: [] 135 | # Cacheability debugging: 136 | # 137 | # Responses with cacheability metadata (CacheableResponseInterface instances) 138 | # get X-Drupal-Cache-Tags, X-Drupal-Cache-Contexts and X-Drupal-Cache-Max-Age 139 | # headers. 140 | # 141 | # For more information about debugging cacheable responses, see 142 | # https://www.drupal.org/developing/api/8/response/cacheable-response-interface 143 | # 144 | # Enabling cacheability debugging is not recommended in production 145 | # environments. 146 | # @default false 147 | http.response.debug_cacheability_headers: false 148 | factory.keyvalue: {} 149 | # Default key/value storage service to use. 150 | # @default keyvalue.database 151 | # default: keyvalue.database 152 | # Collection-specific overrides. 153 | # state: keyvalue.database 154 | factory.keyvalue.expirable: {} 155 | # Default key/value expirable storage service to use. 156 | # @default keyvalue.database.expirable 157 | # default: keyvalue.database.expirable 158 | # Allowed protocols for URL generation. 159 | filter_protocols: 160 | - http 161 | - https 162 | - ftp 163 | - news 164 | - nntp 165 | - tel 166 | - telnet 167 | - mailto 168 | - irc 169 | - ssh 170 | - sftp 171 | - webcal 172 | - rtsp 173 | 174 | # Configure Cross-Site HTTP requests (CORS). 175 | # Read https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS 176 | # for more information about the topic in general. 177 | # Note: By default the configuration is disabled. 178 | cors.config: 179 | enabled: false 180 | # Specify allowed headers, like 'x-allowed-header'. 181 | allowedHeaders: [] 182 | # Specify allowed request methods, specify ['*'] to allow all possible ones. 183 | allowedMethods: [] 184 | # Configure requests allowed from specific origins. 185 | allowedOrigins: ['*'] 186 | # Sets the Access-Control-Expose-Headers header. 187 | exposedHeaders: false 188 | # Sets the Access-Control-Max-Age header. 189 | maxAge: false 190 | # Sets the Access-Control-Allow-Credentials header. 191 | supportsCredentials: false 192 | -------------------------------------------------------------------------------- /drupal/web/sites/default/default.settings.php: -------------------------------------------------------------------------------- 1 | 'databasename', 81 | * 'username' => 'sqlusername', 82 | * 'password' => 'sqlpassword', 83 | * 'host' => 'localhost', 84 | * 'port' => '3306', 85 | * 'driver' => 'mysql', 86 | * 'prefix' => '', 87 | * 'collation' => 'utf8mb4_general_ci', 88 | * ]; 89 | * @endcode 90 | */ 91 | $databases = []; 92 | 93 | /** 94 | * Customizing database settings. 95 | * 96 | * Many of the values of the $databases array can be customized for your 97 | * particular database system. Refer to the sample in the section above as a 98 | * starting point. 99 | * 100 | * The "driver" property indicates what Drupal database driver the 101 | * connection should use. This is usually the same as the name of the 102 | * database type, such as mysql or sqlite, but not always. The other 103 | * properties will vary depending on the driver. For SQLite, you must 104 | * specify a database file name in a directory that is writable by the 105 | * webserver. For most other drivers, you must specify a 106 | * username, password, host, and database name. 107 | * 108 | * Drupal core implements drivers for mysql, pgsql, and sqlite. Other drivers 109 | * can be provided by contributed or custom modules. To use a contributed or 110 | * custom driver, the "namespace" property must be set to the namespace of the 111 | * driver. The code in this namespace must be autoloadable prior to connecting 112 | * to the database, and therefore, prior to when module root namespaces are 113 | * added to the autoloader. To add the driver's namespace to the autoloader, 114 | * set the "autoload" property to the PSR-4 base directory of the driver's 115 | * namespace. This is optional for projects managed with Composer if the 116 | * driver's namespace is in Composer's autoloader. 117 | * 118 | * For each database, you may optionally specify multiple "target" databases. 119 | * A target database allows Drupal to try to send certain queries to a 120 | * different database if it can but fall back to the default connection if not. 121 | * That is useful for primary/replica replication, as Drupal may try to connect 122 | * to a replica server when appropriate and if one is not available will simply 123 | * fall back to the single primary server (The terms primary/replica are 124 | * traditionally referred to as master/slave in database server documentation). 125 | * 126 | * The general format for the $databases array is as follows: 127 | * @code 128 | * $databases['default']['default'] = $info_array; 129 | * $databases['default']['replica'][] = $info_array; 130 | * $databases['default']['replica'][] = $info_array; 131 | * $databases['extra']['default'] = $info_array; 132 | * @endcode 133 | * 134 | * In the above example, $info_array is an array of settings described above. 135 | * The first line sets a "default" database that has one primary database 136 | * (the second level default). The second and third lines create an array 137 | * of potential replica databases. Drupal will select one at random for a given 138 | * request as needed. The fourth line creates a new database with a name of 139 | * "extra". 140 | * 141 | * You can optionally set a prefix for all database table names by using the 142 | * 'prefix' setting. If a prefix is specified, the table name will be prepended 143 | * with its value. Be sure to use valid database characters only, usually 144 | * alphanumeric and underscore. If no prefix is desired, do not set the 'prefix' 145 | * key or set its value to an empty string ''. 146 | * 147 | * For example, to have all database table prefixed with 'main_', set: 148 | * @code 149 | * 'prefix' => 'main_', 150 | * @endcode 151 | * 152 | * Advanced users can add or override initial commands to execute when 153 | * connecting to the database server, as well as PDO connection settings. For 154 | * example, to enable MySQL SELECT queries to exceed the max_join_size system 155 | * variable, and to reduce the database connection timeout to 5 seconds: 156 | * @code 157 | * $databases['default']['default'] = [ 158 | * 'init_commands' => [ 159 | * 'big_selects' => 'SET SQL_BIG_SELECTS=1', 160 | * ], 161 | * 'pdo' => [ 162 | * PDO::ATTR_TIMEOUT => 5, 163 | * ], 164 | * ]; 165 | * @endcode 166 | * 167 | * WARNING: The above defaults are designed for database portability. Changing 168 | * them may cause unexpected behavior, including potential data loss. See 169 | * https://www.drupal.org/developing/api/database/configuration for more 170 | * information on these defaults and the potential issues. 171 | * 172 | * More details can be found in the constructor methods for each driver: 173 | * - \Drupal\mysql\Driver\Database\mysql\Connection::__construct() 174 | * - \Drupal\pgsql\Driver\Database\pgsql\Connection::__construct() 175 | * - \Drupal\sqlite\Driver\Database\sqlite\Connection::__construct() 176 | * 177 | * Sample Database configuration format for PostgreSQL (pgsql): 178 | * @code 179 | * $databases['default']['default'] = [ 180 | * 'driver' => 'pgsql', 181 | * 'database' => 'databasename', 182 | * 'username' => 'sqlusername', 183 | * 'password' => 'sqlpassword', 184 | * 'host' => 'localhost', 185 | * 'prefix' => '', 186 | * ]; 187 | * @endcode 188 | * 189 | * Sample Database configuration format for SQLite (sqlite): 190 | * @code 191 | * $databases['default']['default'] = [ 192 | * 'driver' => 'sqlite', 193 | * 'database' => '/path/to/databasefilename', 194 | * ]; 195 | * @endcode 196 | * 197 | * Sample Database configuration format for a driver in a contributed module: 198 | * @code 199 | * $databases['default']['default'] = [ 200 | * 'driver' => 'my_driver', 201 | * 'namespace' => 'Drupal\my_module\Driver\Database\my_driver', 202 | * 'autoload' => 'modules/my_module/src/Driver/Database/my_driver/', 203 | * 'database' => 'databasename', 204 | * 'username' => 'sqlusername', 205 | * 'password' => 'sqlpassword', 206 | * 'host' => 'localhost', 207 | * 'prefix' => '', 208 | * ]; 209 | * @endcode 210 | */ 211 | 212 | /** 213 | * Location of the site configuration files. 214 | * 215 | * The $settings['config_sync_directory'] specifies the location of file system 216 | * directory used for syncing configuration data. On install, the directory is 217 | * created. This is used for configuration imports. 218 | * 219 | * The default location for this directory is inside a randomly-named 220 | * directory in the public files path. The setting below allows you to set 221 | * its location. 222 | */ 223 | # $settings['config_sync_directory'] = '/directory/outside/webroot'; 224 | 225 | /** 226 | * Settings: 227 | * 228 | * $settings contains environment-specific configuration, such as the files 229 | * directory and reverse proxy address, and temporary configuration, such as 230 | * security overrides. 231 | * 232 | * @see \Drupal\Core\Site\Settings::get() 233 | */ 234 | 235 | /** 236 | * Salt for one-time login links, cancel links, form tokens, etc. 237 | * 238 | * This variable will be set to a random value by the installer. All one-time 239 | * login links will be invalidated if the value is changed. Note that if your 240 | * site is deployed on a cluster of web servers, you must ensure that this 241 | * variable has the same value on each server. 242 | * 243 | * For enhanced security, you may set this variable to the contents of a file 244 | * outside your document root; you should also ensure that this file is not 245 | * stored with backups of your database. 246 | * 247 | * Example: 248 | * @code 249 | * $settings['hash_salt'] = file_get_contents('/home/example/salt.txt'); 250 | * @endcode 251 | */ 252 | $settings['hash_salt'] = ''; 253 | 254 | /** 255 | * Deployment identifier. 256 | * 257 | * Drupal's dependency injection container will be automatically invalidated and 258 | * rebuilt when the Drupal core version changes. When updating contributed or 259 | * custom code that changes the container, changing this identifier will also 260 | * allow the container to be invalidated as soon as code is deployed. 261 | */ 262 | # $settings['deployment_identifier'] = \Drupal::VERSION; 263 | 264 | /** 265 | * Access control for update.php script. 266 | * 267 | * If you are updating your Drupal installation using the update.php script but 268 | * are not logged in using either an account with the "Administer software 269 | * updates" permission or the site maintenance account (the account that was 270 | * created during installation), you will need to modify the access check 271 | * statement below. Change the FALSE to a TRUE to disable the access check. 272 | * After finishing the upgrade, be sure to open this file again and change the 273 | * TRUE back to a FALSE! 274 | */ 275 | $settings['update_free_access'] = FALSE; 276 | 277 | /** 278 | * Fallback to HTTP for Update Manager and for fetching security advisories. 279 | * 280 | * If your site fails to connect to updates.drupal.org over HTTPS (either when 281 | * fetching data on available updates, or when fetching the feed of critical 282 | * security announcements), you may uncomment this setting and set it to TRUE to 283 | * allow an insecure fallback to HTTP. Note that doing so will open your site up 284 | * to a potential man-in-the-middle attack. You should instead attempt to 285 | * resolve the issues before enabling this option. 286 | * @see https://www.drupal.org/docs/system-requirements/php-requirements#openssl 287 | * @see https://en.wikipedia.org/wiki/Man-in-the-middle_attack 288 | * @see \Drupal\update\UpdateFetcher 289 | * @see \Drupal\system\SecurityAdvisories\SecurityAdvisoriesFetcher 290 | */ 291 | # $settings['update_fetch_with_http_fallback'] = TRUE; 292 | 293 | /** 294 | * External access proxy settings: 295 | * 296 | * If your site must access the Internet via a web proxy then you can enter the 297 | * proxy settings here. Set the full URL of the proxy, including the port, in 298 | * variables: 299 | * - $settings['http_client_config']['proxy']['http']: The proxy URL for HTTP 300 | * requests. 301 | * - $settings['http_client_config']['proxy']['https']: The proxy URL for HTTPS 302 | * requests. 303 | * You can pass in the user name and password for basic authentication in the 304 | * URLs in these settings. 305 | * 306 | * You can also define an array of host names that can be accessed directly, 307 | * bypassing the proxy, in $settings['http_client_config']['proxy']['no']. 308 | */ 309 | # $settings['http_client_config']['proxy']['http'] = 'http://proxy_user:proxy_pass@example.com:8080'; 310 | # $settings['http_client_config']['proxy']['https'] = 'http://proxy_user:proxy_pass@example.com:8080'; 311 | # $settings['http_client_config']['proxy']['no'] = ['127.0.0.1', 'localhost']; 312 | 313 | /** 314 | * Reverse Proxy Configuration: 315 | * 316 | * Reverse proxy servers are often used to enhance the performance 317 | * of heavily visited sites and may also provide other site caching, 318 | * security, or encryption benefits. In an environment where Drupal 319 | * is behind a reverse proxy, the real IP address of the client should 320 | * be determined such that the correct client IP address is available 321 | * to Drupal's logging, statistics, and access management systems. In 322 | * the most simple scenario, the proxy server will add an 323 | * X-Forwarded-For header to the request that contains the client IP 324 | * address. However, HTTP headers are vulnerable to spoofing, where a 325 | * malicious client could bypass restrictions by setting the 326 | * X-Forwarded-For header directly. Therefore, Drupal's proxy 327 | * configuration requires the IP addresses of all remote proxies to be 328 | * specified in $settings['reverse_proxy_addresses'] to work correctly. 329 | * 330 | * Enable this setting to get Drupal to determine the client IP from the 331 | * X-Forwarded-For header. If you are unsure about this setting, do not have a 332 | * reverse proxy, or Drupal operates in a shared hosting environment, this 333 | * setting should remain commented out. 334 | * 335 | * In order for this setting to be used you must specify every possible 336 | * reverse proxy IP address in $settings['reverse_proxy_addresses']. 337 | * If a complete list of reverse proxies is not available in your 338 | * environment (for example, if you use a CDN) you may set the 339 | * $_SERVER['REMOTE_ADDR'] variable directly in settings.php. 340 | * Be aware, however, that it is likely that this would allow IP 341 | * address spoofing unless more advanced precautions are taken. 342 | */ 343 | # $settings['reverse_proxy'] = TRUE; 344 | 345 | /** 346 | * Specify every reverse proxy IP address in your environment. 347 | * This setting is required if $settings['reverse_proxy'] is TRUE. 348 | */ 349 | # $settings['reverse_proxy_addresses'] = ['a.b.c.d', ...]; 350 | 351 | /** 352 | * Reverse proxy trusted headers. 353 | * 354 | * Sets which headers to trust from your reverse proxy. 355 | * 356 | * Common values are: 357 | * - \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_FOR 358 | * - \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_HOST 359 | * - \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_PORT 360 | * - \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_PROTO 361 | * - \Symfony\Component\HttpFoundation\Request::HEADER_FORWARDED 362 | * 363 | * Note the default value of 364 | * @code 365 | * \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_FOR | \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_HOST | \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_PORT | \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_PROTO | \Symfony\Component\HttpFoundation\Request::HEADER_FORWARDED 366 | * @endcode 367 | * is not secure by default. The value should be set to only the specific 368 | * headers the reverse proxy uses. For example: 369 | * @code 370 | * \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_FOR | \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_HOST | \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_PORT | \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_PROTO 371 | * @endcode 372 | * This would trust the following headers: 373 | * - X_FORWARDED_FOR 374 | * - X_FORWARDED_HOST 375 | * - X_FORWARDED_PROTO 376 | * - X_FORWARDED_PORT 377 | * 378 | * @see \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_FOR 379 | * @see \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_HOST 380 | * @see \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_PORT 381 | * @see \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_PROTO 382 | * @see \Symfony\Component\HttpFoundation\Request::HEADER_FORWARDED 383 | * @see \Symfony\Component\HttpFoundation\Request::setTrustedProxies 384 | */ 385 | # $settings['reverse_proxy_trusted_headers'] = \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_FOR | \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_HOST | \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_PORT | \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_PROTO | \Symfony\Component\HttpFoundation\Request::HEADER_FORWARDED; 386 | 387 | 388 | /** 389 | * Page caching: 390 | * 391 | * By default, Drupal sends a "Vary: Cookie" HTTP header for anonymous page 392 | * views. This tells a HTTP proxy that it may return a page from its local 393 | * cache without contacting the web server, if the user sends the same Cookie 394 | * header as the user who originally requested the cached page. Without "Vary: 395 | * Cookie", authenticated users would also be served the anonymous page from 396 | * the cache. If the site has mostly anonymous users except a few known 397 | * editors/administrators, the Vary header can be omitted. This allows for 398 | * better caching in HTTP proxies (including reverse proxies), i.e. even if 399 | * clients send different cookies, they still get content served from the cache. 400 | * However, authenticated users should access the site directly (i.e. not use an 401 | * HTTP proxy, and bypass the reverse proxy if one is used) in order to avoid 402 | * getting cached pages from the proxy. 403 | */ 404 | # $settings['omit_vary_cookie'] = TRUE; 405 | 406 | 407 | /** 408 | * Cache TTL for client error (4xx) responses. 409 | * 410 | * Items cached per-URL tend to result in a large number of cache items, and 411 | * this can be problematic on 404 pages which by their nature are unbounded. A 412 | * fixed TTL can be set for these items, defaulting to one hour, so that cache 413 | * backends which do not support LRU can purge older entries. To disable caching 414 | * of client error responses set the value to 0. Currently applies only to 415 | * page_cache module. 416 | */ 417 | # $settings['cache_ttl_4xx'] = 3600; 418 | 419 | /** 420 | * Expiration of cached forms. 421 | * 422 | * Drupal's Form API stores details of forms in a cache and these entries are 423 | * kept for at least 6 hours by default. Expired entries are cleared by cron. 424 | * 425 | * @see \Drupal\Core\Form\FormCache::setCache() 426 | */ 427 | # $settings['form_cache_expiration'] = 21600; 428 | 429 | /** 430 | * Class Loader. 431 | * 432 | * If the APCu extension is detected, the classloader will be optimized to use 433 | * it. Set to FALSE to disable this. 434 | * 435 | * @see https://getcomposer.org/doc/articles/autoloader-optimization.md 436 | */ 437 | # $settings['class_loader_auto_detect'] = FALSE; 438 | 439 | /** 440 | * Authorized file system operations: 441 | * 442 | * The Update Manager module included with Drupal provides a mechanism for 443 | * site administrators to securely install missing updates for the site 444 | * directly through the web user interface. On securely-configured servers, 445 | * the Update manager will require the administrator to provide SSH or FTP 446 | * credentials before allowing the installation to proceed; this allows the 447 | * site to update the new files as the user who owns all the Drupal files, 448 | * instead of as the user the webserver is running as. On servers where the 449 | * webserver user is itself the owner of the Drupal files, the administrator 450 | * will not be prompted for SSH or FTP credentials (note that these server 451 | * setups are common on shared hosting, but are inherently insecure). 452 | * 453 | * Some sites might wish to disable the above functionality, and only update 454 | * the code directly via SSH or FTP themselves. This setting completely 455 | * disables all functionality related to these authorized file operations. 456 | * 457 | * @see https://www.drupal.org/node/244924 458 | * 459 | * Remove the leading hash signs to disable. 460 | */ 461 | # $settings['allow_authorize_operations'] = FALSE; 462 | 463 | /** 464 | * Default mode for directories and files written by Drupal. 465 | * 466 | * Value should be in PHP Octal Notation, with leading zero. 467 | */ 468 | # $settings['file_chmod_directory'] = 0775; 469 | # $settings['file_chmod_file'] = 0664; 470 | 471 | /** 472 | * Public file base URL: 473 | * 474 | * An alternative base URL to be used for serving public files. This must 475 | * include any leading directory path. 476 | * 477 | * A different value from the domain used by Drupal to be used for accessing 478 | * public files. This can be used for a simple CDN integration, or to improve 479 | * security by serving user-uploaded files from a different domain or subdomain 480 | * pointing to the same server. Do not include a trailing slash. 481 | */ 482 | # $settings['file_public_base_url'] = 'http://downloads.example.com/files'; 483 | 484 | /** 485 | * Public file path: 486 | * 487 | * A local file system path where public files will be stored. This directory 488 | * must exist and be writable by Drupal. This directory must be relative to 489 | * the Drupal installation directory and be accessible over the web. 490 | */ 491 | # $settings['file_public_path'] = 'sites/default/files'; 492 | 493 | /** 494 | * Additional public file schemes: 495 | * 496 | * Public schemes are URI schemes that allow download access to all users for 497 | * all files within that scheme. 498 | * 499 | * The "public" scheme is always public, and the "private" scheme is always 500 | * private, but other schemes, such as "https", "s3", "example", or others, 501 | * can be either public or private depending on the site. By default, they're 502 | * private, and access to individual files is controlled via 503 | * hook_file_download(). 504 | * 505 | * Typically, if a scheme should be public, a module makes it public by 506 | * implementing hook_file_download(), and granting access to all users for all 507 | * files. This could be either the same module that provides the stream wrapper 508 | * for the scheme, or a different module that decides to make the scheme 509 | * public. However, in cases where a site needs to make a scheme public, but 510 | * is unable to add code in a module to do so, the scheme may be added to this 511 | * variable, the result of which is that system_file_download() grants public 512 | * access to all files within that scheme. 513 | */ 514 | # $settings['file_additional_public_schemes'] = ['example']; 515 | 516 | /** 517 | * Private file path: 518 | * 519 | * A local file system path where private files will be stored. This directory 520 | * must be absolute, outside of the Drupal installation directory and not 521 | * accessible over the web. 522 | * 523 | * Note: Caches need to be cleared when this value is changed to make the 524 | * private:// stream wrapper available to the system. 525 | * 526 | * See https://www.drupal.org/documentation/modules/file for more information 527 | * about securing private files. 528 | */ 529 | # $settings['file_private_path'] = ''; 530 | 531 | /** 532 | * Temporary file path: 533 | * 534 | * A local file system path where temporary files will be stored. This directory 535 | * must be absolute, outside of the Drupal installation directory and not 536 | * accessible over the web. 537 | * 538 | * If this is not set, the default for the operating system will be used. 539 | * 540 | * @see \Drupal\Component\FileSystem\FileSystem::getOsTemporaryDirectory() 541 | */ 542 | # $settings['file_temp_path'] = '/tmp'; 543 | 544 | /** 545 | * Session write interval: 546 | * 547 | * Set the minimum interval between each session write to database. 548 | * For performance reasons it defaults to 180. 549 | */ 550 | # $settings['session_write_interval'] = 180; 551 | 552 | /** 553 | * String overrides: 554 | * 555 | * To override specific strings on your site with or without enabling the Locale 556 | * module, add an entry to this list. This functionality allows you to change 557 | * a small number of your site's default English language interface strings. 558 | * 559 | * Remove the leading hash signs to enable. 560 | * 561 | * The "en" part of the variable name, is dynamic and can be any langcode of 562 | * any added language. (eg locale_custom_strings_de for german). 563 | */ 564 | # $settings['locale_custom_strings_en'][''] = [ 565 | # 'forum' => 'Discussion board', 566 | # '@count min' => '@count minutes', 567 | # ]; 568 | 569 | /** 570 | * A custom theme for the offline page: 571 | * 572 | * This applies when the site is explicitly set to maintenance mode through the 573 | * administration page or when the database is inactive due to an error. 574 | * The template file should also be copied into the theme. It is located inside 575 | * 'core/modules/system/templates/maintenance-page.html.twig'. 576 | * 577 | * Note: This setting does not apply to installation and update pages. 578 | */ 579 | # $settings['maintenance_theme'] = 'bartik'; 580 | 581 | /** 582 | * PHP settings: 583 | * 584 | * To see what PHP settings are possible, including whether they can be set at 585 | * runtime (by using ini_set()), read the PHP documentation: 586 | * http://php.net/manual/ini.list.php 587 | * See \Drupal\Core\DrupalKernel::bootEnvironment() for required runtime 588 | * settings and the .htaccess file for non-runtime settings. 589 | * Settings defined there should not be duplicated here so as to avoid conflict 590 | * issues. 591 | */ 592 | 593 | /** 594 | * If you encounter a situation where users post a large amount of text, and 595 | * the result is stripped out upon viewing but can still be edited, Drupal's 596 | * output filter may not have sufficient memory to process it. If you 597 | * experience this issue, you may wish to uncomment the following two lines 598 | * and increase the limits of these variables. For more information, see 599 | * http://php.net/manual/pcre.configuration.php. 600 | */ 601 | # ini_set('pcre.backtrack_limit', 200000); 602 | # ini_set('pcre.recursion_limit', 200000); 603 | 604 | /** 605 | * Add Permissions-Policy header to disable Google FLoC. 606 | * 607 | * By default, Drupal sends the 'Permissions-Policy: interest-cohort=()' header 608 | * to disable Google's Federated Learning of Cohorts feature, introduced in 609 | * Chrome 89. 610 | * 611 | * See https://en.wikipedia.org/wiki/Federated_Learning_of_Cohorts for more 612 | * information about FLoC. 613 | * 614 | * If you don't wish to disable FLoC in Chrome, you can set this value 615 | * to FALSE. 616 | */ 617 | # $settings['block_interest_cohort'] = TRUE; 618 | 619 | /** 620 | * Configuration overrides. 621 | * 622 | * To globally override specific configuration values for this site, 623 | * set them here. You usually don't need to use this feature. This is 624 | * useful in a configuration file for a vhost or directory, rather than 625 | * the default settings.php. 626 | * 627 | * Note that any values you provide in these variable overrides will not be 628 | * viewable from the Drupal administration interface. The administration 629 | * interface displays the values stored in configuration so that you can stage 630 | * changes to other environments that don't have the overrides. 631 | * 632 | * There are particular configuration values that are risky to override. For 633 | * example, overriding the list of installed modules in 'core.extension' is not 634 | * supported as module install or uninstall has not occurred. Other examples 635 | * include field storage configuration, because it has effects on database 636 | * structure, and 'core.menu.static_menu_link_overrides' since this is cached in 637 | * a way that is not config override aware. Also, note that changing 638 | * configuration values in settings.php will not fire any of the configuration 639 | * change events. 640 | */ 641 | # $config['system.site']['name'] = 'My Drupal site'; 642 | # $config['user.settings']['anonymous'] = 'Visitor'; 643 | 644 | /** 645 | * Fast 404 pages: 646 | * 647 | * Drupal can generate fully themed 404 pages. However, some of these responses 648 | * are for images or other resource files that are not displayed to the user. 649 | * This can waste bandwidth, and also generate server load. 650 | * 651 | * The options below return a simple, fast 404 page for URLs matching a 652 | * specific pattern: 653 | * - $config['system.performance']['fast_404']['exclude_paths']: A regular 654 | * expression to match paths to exclude, such as images generated by image 655 | * styles, or dynamically-resized images. The default pattern provided below 656 | * also excludes the private file system. If you need to add more paths, you 657 | * can add '|path' to the expression. 658 | * - $config['system.performance']['fast_404']['paths']: A regular expression to 659 | * match paths that should return a simple 404 page, rather than the fully 660 | * themed 404 page. If you don't have any aliases ending in htm or html you 661 | * can add '|s?html?' to the expression. 662 | * - $config['system.performance']['fast_404']['html']: The html to return for 663 | * simple 404 pages. 664 | * 665 | * Remove the leading hash signs if you would like to alter this functionality. 666 | */ 667 | # $config['system.performance']['fast_404']['exclude_paths'] = '/\/(?:styles)|(?:system\/files)\//'; 668 | # $config['system.performance']['fast_404']['paths'] = '/\.(?:txt|png|gif|jpe?g|css|js|ico|swf|flv|cgi|bat|pl|dll|exe|asp)$/i'; 669 | # $config['system.performance']['fast_404']['html'] = '404 Not Found

Not Found

The requested URL "@path" was not found on this server.

'; 670 | 671 | /** 672 | * Load services definition file. 673 | */ 674 | $settings['container_yamls'][] = $app_root . '/' . $site_path . '/services.yml'; 675 | 676 | /** 677 | * Override the default service container class. 678 | * 679 | * This is useful for example to trace the service container for performance 680 | * tracking purposes, for testing a service container with an error condition or 681 | * to test a service container that throws an exception. 682 | */ 683 | # $settings['container_base_class'] = '\Drupal\Core\DependencyInjection\Container'; 684 | 685 | /** 686 | * Override the default yaml parser class. 687 | * 688 | * Provide a fully qualified class name here if you would like to provide an 689 | * alternate implementation YAML parser. The class must implement the 690 | * \Drupal\Component\Serialization\SerializationInterface interface. 691 | */ 692 | # $settings['yaml_parser_class'] = NULL; 693 | 694 | /** 695 | * Trusted host configuration. 696 | * 697 | * Drupal core can use the Symfony trusted host mechanism to prevent HTTP Host 698 | * header spoofing. 699 | * 700 | * To enable the trusted host mechanism, you enable your allowable hosts 701 | * in $settings['trusted_host_patterns']. This should be an array of regular 702 | * expression patterns, without delimiters, representing the hosts you would 703 | * like to allow. 704 | * 705 | * For example: 706 | * @code 707 | * $settings['trusted_host_patterns'] = [ 708 | * '^www\.example\.com$', 709 | * ]; 710 | * @endcode 711 | * will allow the site to only run from www.example.com. 712 | * 713 | * If you are running multisite, or if you are running your site from 714 | * different domain names (eg, you don't redirect http://www.example.com to 715 | * http://example.com), you should specify all of the host patterns that are 716 | * allowed by your site. 717 | * 718 | * For example: 719 | * @code 720 | * $settings['trusted_host_patterns'] = [ 721 | * '^example\.com$', 722 | * '^.+\.example\.com$', 723 | * '^example\.org$', 724 | * '^.+\.example\.org$', 725 | * ]; 726 | * @endcode 727 | * will allow the site to run off of all variants of example.com and 728 | * example.org, with all subdomains included. 729 | * 730 | * @see https://www.drupal.org/docs/installing-drupal/trusted-host-settings 731 | */ 732 | 733 | /** 734 | * The default list of directories that will be ignored by Drupal's file API. 735 | * 736 | * By default ignore node_modules and bower_components folders to avoid issues 737 | * with common frontend tools and recursive scanning of directories looking for 738 | * extensions. 739 | * 740 | * @see \Drupal\Core\File\FileSystemInterface::scanDirectory() 741 | * @see \Drupal\Core\Extension\ExtensionDiscovery::scanDirectory() 742 | */ 743 | $settings['file_scan_ignore_directories'] = [ 744 | 'node_modules', 745 | 'bower_components', 746 | ]; 747 | 748 | /** 749 | * The default number of entities to update in a batch process. 750 | * 751 | * This is used by update and post-update functions that need to go through and 752 | * change all the entities on a site, so it is useful to increase this number 753 | * if your hosting configuration (i.e. RAM allocation, CPU speed) allows for a 754 | * larger number of entities to be processed in a single batch run. 755 | */ 756 | $settings['entity_update_batch_size'] = 50; 757 | 758 | /** 759 | * Entity update backup. 760 | * 761 | * This is used to inform the entity storage handler that the backup tables as 762 | * well as the original entity type and field storage definitions should be 763 | * retained after a successful entity update process. 764 | */ 765 | $settings['entity_update_backup'] = TRUE; 766 | 767 | /** 768 | * Node migration type. 769 | * 770 | * This is used to force the migration system to use the classic node migrations 771 | * instead of the default complete node migrations. The migration system will 772 | * use the classic node migration only if there are existing migrate_map tables 773 | * for the classic node migrations and they contain data. These tables may not 774 | * exist if you are developing custom migrations and do not want to use the 775 | * complete node migrations. Set this to TRUE to force the use of the classic 776 | * node migrations. 777 | */ 778 | $settings['migrate_node_migrate_type_classic'] = FALSE; 779 | 780 | /** 781 | * Load local development override configuration, if available. 782 | * 783 | * Create a settings.local.php file to override variables on secondary (staging, 784 | * development, etc.) installations of this site. 785 | * 786 | * Typical uses of settings.local.php include: 787 | * - Disabling caching. 788 | * - Disabling JavaScript/CSS compression. 789 | * - Rerouting outgoing emails. 790 | * 791 | * Keep this code block at the end of this file to take full effect. 792 | */ 793 | # 794 | # if (file_exists($app_root . '/' . $site_path . '/settings.local.php')) { 795 | # include $app_root . '/' . $site_path . '/settings.local.php'; 796 | # } 797 | -------------------------------------------------------------------------------- /drupal/web/sites/default/services.yml: -------------------------------------------------------------------------------- 1 | parameters: 2 | session.storage.options: 3 | # Default ini options for sessions. 4 | # 5 | # Some distributions of Linux (most notably Debian) ship their PHP 6 | # installations with garbage collection (gc) disabled. Since Drupal depends 7 | # on PHP's garbage collection for clearing sessions, ensure that garbage 8 | # collection occurs by using the most common settings. 9 | # @default 1 10 | gc_probability: 1 11 | # @default 100 12 | gc_divisor: 100 13 | # 14 | # Set session lifetime (in seconds), i.e. the grace period for session 15 | # data. Sessions are deleted by the session garbage collector after one 16 | # session lifetime has elapsed since the user's last visit. When a session 17 | # is deleted, authenticated users are logged out, and the contents of the 18 | # user's session is discarded. 19 | # @default 200000 20 | gc_maxlifetime: 200000 21 | # 22 | # Set session cookie lifetime (in seconds), i.e. the time from the session 23 | # is created to the cookie expires, i.e. when the browser is expected to 24 | # discard the cookie. The value 0 means "until the browser is closed". 25 | # @default 2000000 26 | cookie_lifetime: 2000000 27 | # 28 | # Drupal automatically generates a unique session cookie name based on the 29 | # full domain name used to access the site. This mechanism is sufficient 30 | # for most use-cases, including multi-site deployments. However, if it is 31 | # desired that a session can be reused across different subdomains, the 32 | # cookie domain needs to be set to the shared base domain. Doing so assures 33 | # that users remain logged in as they cross between various subdomains. 34 | # To maximize compatibility and normalize the behavior across user agents, 35 | # the cookie domain should start with a dot. 36 | # 37 | # @default none 38 | # cookie_domain: '.example.com' 39 | # 40 | # Set the session ID string length. The length can be between 22 to 256. The 41 | # PHP recommended value is 48. See 42 | # https://www.php.net/manual/session.security.ini.php for more information. 43 | # This value should be kept in sync with 44 | # \Drupal\Core\Session\SessionConfiguration::__construct() 45 | # @default 48 46 | sid_length: 48 47 | # 48 | # Set the number of bits in encoded session ID character. The possible 49 | # values are '4' (0-9, a-f), '5' (0-9, a-v), and '6' (0-9, a-z, A-Z, "-", 50 | # ","). The PHP recommended value is 6. See 51 | # https://www.php.net/manual/session.security.ini.php for more information. 52 | # This value should be kept in sync with 53 | # \Drupal\Core\Session\SessionConfiguration::__construct() 54 | # @default 6 55 | sid_bits_per_character: 6 56 | twig.config: 57 | # Twig debugging: 58 | # 59 | # When debugging is enabled: 60 | # - The markup of each Twig template is surrounded by HTML comments that 61 | # contain theming information, such as template file name suggestions. 62 | # - Note that this debugging markup will cause automated tests that directly 63 | # check rendered HTML to fail. When running automated tests, 'debug' 64 | # should be set to FALSE. 65 | # - The dump() function can be used in Twig templates to output information 66 | # about template variables. 67 | # - Twig templates are automatically recompiled whenever the source code 68 | # changes (see auto_reload below). 69 | # 70 | # For more information about debugging Twig templates, see 71 | # https://www.drupal.org/node/1906392. 72 | # 73 | # Not recommended in production environments 74 | # @default false 75 | debug: false 76 | # Twig auto-reload: 77 | # 78 | # Automatically recompile Twig templates whenever the source code changes. 79 | # If you don't provide a value for auto_reload, it will be determined 80 | # based on the value of debug. 81 | # 82 | # Not recommended in production environments 83 | # @default null 84 | auto_reload: null 85 | # Twig cache: 86 | # 87 | # By default, Twig templates will be compiled and stored in the filesystem 88 | # to increase performance. Disabling the Twig cache will recompile the 89 | # templates from source each time they are used. In most cases the 90 | # auto_reload setting above should be enabled rather than disabling the 91 | # Twig cache. 92 | # 93 | # Not recommended in production environments 94 | # @default true 95 | cache: true 96 | renderer.config: 97 | # Renderer required cache contexts: 98 | # 99 | # The Renderer will automatically associate these cache contexts with every 100 | # render array, hence varying every render array by these cache contexts. 101 | # 102 | # @default ['languages:language_interface', 'theme', 'user.permissions'] 103 | required_cache_contexts: ['languages:language_interface', 'theme', 'user.permissions'] 104 | # Renderer automatic placeholdering conditions: 105 | # 106 | # Drupal allows portions of the page to be automatically deferred when 107 | # rendering to improve cache performance. That is especially helpful for 108 | # cache contexts that vary widely, such as the active user. On some sites 109 | # those may be different, however, such as sites with only a handful of 110 | # users. If you know what the high-cardinality cache contexts are for your 111 | # site, specify those here. If you're not sure, the defaults are fairly safe 112 | # in general. 113 | # 114 | # For more information about rendering optimizations see 115 | # https://www.drupal.org/developing/api/8/render/arrays/cacheability#optimizing 116 | auto_placeholder_conditions: 117 | # Max-age at or below which caching is not considered worthwhile. 118 | # 119 | # Disable by setting to -1. 120 | # 121 | # @default 0 122 | max-age: 0 123 | # Cache contexts with a high cardinality. 124 | # 125 | # Disable by setting to []. 126 | # 127 | # @default ['session', 'user'] 128 | contexts: ['session', 'user'] 129 | # Tags with a high invalidation frequency. 130 | # 131 | # Disable by setting to []. 132 | # 133 | # @default [] 134 | tags: [] 135 | # Cacheability debugging: 136 | # 137 | # Responses with cacheability metadata (CacheableResponseInterface instances) 138 | # get X-Drupal-Cache-Tags, X-Drupal-Cache-Contexts and X-Drupal-Cache-Max-Age 139 | # headers. 140 | # 141 | # For more information about debugging cacheable responses, see 142 | # https://www.drupal.org/developing/api/8/response/cacheable-response-interface 143 | # 144 | # Not recommended in production environments 145 | # @default false 146 | http.response.debug_cacheability_headers: false 147 | factory.keyvalue: {} 148 | # Default key/value storage service to use. 149 | # @default keyvalue.database 150 | # default: keyvalue.database 151 | # Collection-specific overrides. 152 | # state: keyvalue.database 153 | factory.keyvalue.expirable: {} 154 | # Default key/value expirable storage service to use. 155 | # @default keyvalue.database.expirable 156 | # default: keyvalue.database.expirable 157 | # Allowed protocols for URL generation. 158 | filter_protocols: 159 | - http 160 | - https 161 | - ftp 162 | - news 163 | - nntp 164 | - tel 165 | - telnet 166 | - mailto 167 | - irc 168 | - ssh 169 | - sftp 170 | - webcal 171 | - rtsp 172 | 173 | # Configure Cross-Site HTTP requests (CORS). 174 | # Read https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS 175 | # for more information about the topic in general. 176 | # Note: By default the configuration is disabled. 177 | cors.config: 178 | enabled: true 179 | # Specify allowed headers, like 'x-allowed-header'. 180 | allowedHeaders: ['*'] 181 | # Specify allowed request methods, specify ['*'] to allow all possible ones. 182 | allowedMethods: ['*'] 183 | # Configure requests allowed from specific origins. 184 | allowedOrigins: ['*'] 185 | # Sets the Access-Control-Expose-Headers header. 186 | exposedHeaders: false 187 | # Sets the Access-Control-Max-Age header. 188 | maxAge: false 189 | # Sets the Access-Control-Allow-Credentials header. 190 | supportsCredentials: true 191 | -------------------------------------------------------------------------------- /drupal/web/sites/development.services.yml: -------------------------------------------------------------------------------- 1 | # Local development services. 2 | # 3 | # To activate this feature, follow the instructions at the top of the 4 | # 'example.settings.local.php' file, which sits next to this file. 5 | parameters: 6 | http.response.debug_cacheability_headers: true 7 | services: 8 | cache.backend.null: 9 | class: Drupal\Core\Cache\NullBackendFactory 10 | -------------------------------------------------------------------------------- /drupal/web/sites/example.settings.local.php: -------------------------------------------------------------------------------- 1 | ..' => 'directory'. As an 26 | * example, to map https://www.drupal.org:8080/mysite/test to the configuration 27 | * directory sites/example.com, the array should be defined as: 28 | * @code 29 | * $sites = [ 30 | * '8080.www.drupal.org.mysite.test' => 'example.com', 31 | * ]; 32 | * @endcode 33 | * The URL, https://www.drupal.org:8080/mysite/test/, could be a symbolic link 34 | * or an Apache Alias directive that points to the Drupal root containing 35 | * index.php. An alias could also be created for a subdomain. See the 36 | * @link https://www.drupal.org/documentation/install online Drupal installation guide @endlink 37 | * for more information on setting up domains, subdomains, and subdirectories. 38 | * 39 | * The following examples look for a site configuration in sites/example.com: 40 | * @code 41 | * URL: http://dev.drupal.org 42 | * $sites['dev.drupal.org'] = 'example.com'; 43 | * 44 | * URL: http://localhost/example 45 | * $sites['localhost.example'] = 'example.com'; 46 | * 47 | * URL: http://localhost:8080/example 48 | * $sites['8080.localhost.example'] = 'example.com'; 49 | * 50 | * URL: https://www.drupal.org:8080/mysite/test/ 51 | * $sites['8080.www.drupal.org.mysite.test'] = 'example.com'; 52 | * @endcode 53 | * 54 | * @see default.settings.php 55 | * @see \Drupal\Core\DrupalKernel::getSitePath() 56 | * @see https://www.drupal.org/documentation/install/multi-site 57 | */ 58 | -------------------------------------------------------------------------------- /drupal/web/themes/README.txt: -------------------------------------------------------------------------------- 1 | Themes allow you to change the look and feel of your Drupal site. You can use 2 | themes contributed by others or create your own. 3 | 4 | WHAT TO PLACE IN THIS DIRECTORY? 5 | -------------------------------- 6 | 7 | Placing downloaded and custom themes in this directory separates downloaded and 8 | custom themes from Drupal core's themes. This allows Drupal core to be updated 9 | without overwriting these files. 10 | 11 | DOWNLOAD ADDITIONAL THEMES 12 | -------------------------- 13 | 14 | Contributed themes from the Drupal community may be downloaded at 15 | https://www.drupal.org/project/project_theme. 16 | 17 | MULTISITE CONFIGURATION 18 | ----------------------- 19 | 20 | In multisite configurations, themes found in this directory are available to 21 | all sites. You may also put themes in the sites/all/themes directory, and the 22 | versions in sites/all/themes will take precedence over versions of the same 23 | themes that are here. Alternatively, the sites/your_site_name/themes directory 24 | pattern may be used to restrict themes to a specific site instance. 25 | 26 | MORE INFORMATION 27 | ----------------- 28 | 29 | Refer to the "Appearance" section of the README.txt in the Drupal root directory 30 | for further information on customizing the appearance of Drupal with custom 31 | themes. 32 | -------------------------------------------------------------------------------- /drupal/web/update.php: -------------------------------------------------------------------------------- 1 | handle($request); 28 | $response->send(); 29 | 30 | $kernel->terminate($request, $response); 31 | -------------------------------------------------------------------------------- /drupal/web/web.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 13 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 39 | 48 | 49 | 52 | 61 | 62 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "baseUrl": ".", 4 | "paths": { 5 | "~/*": ["./*"], 6 | "@/*": ["./*"], 7 | "~~/*": ["./*"], 8 | "@@/*": ["./*"] 9 | } 10 | }, 11 | "exclude": ["node_modules", ".nuxt", "dist"] 12 | } 13 | -------------------------------------------------------------------------------- /nuxt/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "test": { 4 | "presets": [ 5 | [ 6 | "@babel/preset-env", 7 | { 8 | "targets": { 9 | "node": "current" 10 | } 11 | } 12 | ] 13 | ] 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /nuxt/.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | env: { 4 | browser: true, 5 | node: true, 6 | }, 7 | parserOptions: { 8 | parser: '@babel/eslint-parser', 9 | requireConfigFile: false, 10 | }, 11 | extends: ['@nuxtjs', 'plugin:nuxt/recommended', 'prettier'], 12 | plugins: [], 13 | ignorePatterns: ['*/templates/*'], 14 | // add your custom rules here 15 | rules: { 16 | 'vue/multi-word-component-names': 'off', 17 | }, 18 | } 19 | -------------------------------------------------------------------------------- /nuxt/.gitignore: -------------------------------------------------------------------------------- 1 | # Created by .ignore support plugin (hsz.mobi) 2 | ### Node template 3 | # Logs 4 | /logs 5 | *.log 6 | npm-debug.log* 7 | yarn-debug.log* 8 | yarn-error.log* 9 | 10 | # Runtime data 11 | pids 12 | *.pid 13 | *.seed 14 | *.pid.lock 15 | 16 | # Directory for instrumented libs generated by jscoverage/JSCover 17 | lib-cov 18 | 19 | # Coverage directory used by tools like istanbul 20 | coverage 21 | 22 | # nyc test coverage 23 | .nyc_output 24 | 25 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 26 | .grunt 27 | 28 | # Bower dependency directory (https://bower.io/) 29 | bower_components 30 | 31 | # node-waf configuration 32 | .lock-wscript 33 | 34 | # Compiled binary addons (https://nodejs.org/api/addons.html) 35 | build/Release 36 | 37 | # Dependency directories 38 | node_modules/ 39 | jspm_packages/ 40 | 41 | # TypeScript v1 declaration files 42 | typings/ 43 | 44 | # Optional npm cache directory 45 | .npm 46 | 47 | # Optional eslint cache 48 | .eslintcache 49 | 50 | # Optional REPL history 51 | .node_repl_history 52 | 53 | # Output of 'npm pack' 54 | *.tgz 55 | 56 | # Yarn Integrity file 57 | .yarn-integrity 58 | 59 | # dotenv environment variables file 60 | .env 61 | 62 | # parcel-bundler cache (https://parceljs.org/) 63 | .cache 64 | 65 | # next.js build output 66 | .next 67 | 68 | # nuxt.js build output 69 | .nuxt 70 | 71 | # Nuxt generate 72 | dist 73 | 74 | # Nuxt Storybook 75 | .nuxt-storybook 76 | 77 | # vuepress build output 78 | .vuepress/dist 79 | 80 | # Serverless directories 81 | .serverless 82 | 83 | # IDE / Editor 84 | .idea 85 | 86 | # Service worker 87 | sw.* 88 | 89 | # macOS 90 | .DS_Store 91 | 92 | # Vim swap files 93 | *.swp 94 | -------------------------------------------------------------------------------- /nuxt/.nvmrc: -------------------------------------------------------------------------------- 1 | 16.18.1 2 | -------------------------------------------------------------------------------- /nuxt/README.md: -------------------------------------------------------------------------------- 1 | # quickstart-druxt-site 2 | make sure to use either node v14, or node v16 when running the following commands of the setup. 3 | 4 | ## Build Setup 5 | 6 | ```bash 7 | 8 | # use node version from nvmrc file when you have nvm installed locally 9 | $ nvm use 10 | 11 | # install dependencies 12 | $ npm install 13 | 14 | # serve with hot reload at localhost:3000 15 | $ npm run dev 16 | 17 | # build for production and launch server 18 | $ npm run build 19 | $ npm run start 20 | 21 | # generate static project 22 | $ npm run generate 23 | ``` 24 | 25 | For detailed explanation on how things work, check out the [documentation](https://nuxtjs.org). 26 | 27 | ## Special Directories 28 | 29 | You can create the following extra directories, some of which have special behaviors. Only `pages` is required; you can delete them if you don't want to use their functionality. 30 | 31 | ### `assets` 32 | 33 | The assets directory contains your uncompiled assets such as Stylus or Sass files, images, or fonts. 34 | 35 | More information about the usage of this directory in [the documentation](https://nuxtjs.org/docs/2.x/directory-structure/assets). 36 | 37 | ### `components` 38 | 39 | The components directory contains your Vue.js components. Components make up the different parts of your page and can be reused and imported into your pages, layouts and even other components. 40 | 41 | More information about the usage of this directory in [the documentation](https://nuxtjs.org/docs/2.x/directory-structure/components). 42 | 43 | ### `layouts` 44 | 45 | Layouts are a great help when you want to change the look and feel of your Nuxt app, whether you want to include a sidebar or have distinct layouts for mobile and desktop. 46 | 47 | More information about the usage of this directory in [the documentation](https://nuxtjs.org/docs/2.x/directory-structure/layouts). 48 | 49 | 50 | ### `pages` 51 | 52 | This directory contains your application views and routes. Nuxt will read all the `*.vue` files inside this directory and setup Vue Router automatically. 53 | 54 | More information about the usage of this directory in [the documentation](https://nuxtjs.org/docs/2.x/get-started/routing). 55 | 56 | ### `plugins` 57 | 58 | The plugins directory contains JavaScript plugins that you want to run before instantiating the root Vue.js Application. This is the place to add Vue plugins and to inject functions or constants. Every time you need to use `Vue.use()`, you should create a file in `plugins/` and add its path to plugins in `nuxt.config.js`. 59 | 60 | More information about the usage of this directory in [the documentation](https://nuxtjs.org/docs/2.x/directory-structure/plugins). 61 | 62 | ### `static` 63 | 64 | This directory contains your static files. Each file inside this directory is mapped to `/`. 65 | 66 | Example: `/static/robots.txt` is mapped as `/robots.txt`. 67 | 68 | More information about the usage of this directory in [the documentation](https://nuxtjs.org/docs/2.x/directory-structure/static). 69 | 70 | ### `store` 71 | 72 | This directory contains your Vuex store files. Creating a file in this directory automatically activates Vuex. 73 | 74 | More information about the usage of this directory in [the documentation](https://nuxtjs.org/docs/2.x/directory-structure/store). 75 | -------------------------------------------------------------------------------- /nuxt/components/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/druxt/quickstart/5b83d115be83b81d266d2e8669a8046bc40e3a60/nuxt/components/.gitkeep -------------------------------------------------------------------------------- /nuxt/components/druxt/Logo.test.js: -------------------------------------------------------------------------------- 1 | /* global describe, expect, test */ 2 | 3 | import { mount } from '@vue/test-utils' 4 | import Logo from './Logo.vue' 5 | 6 | describe('Logo', () => { 7 | test('is a Vue instance', () => { 8 | const wrapper = mount(Logo, {}) 9 | expect(wrapper.vm).toBeTruthy() 10 | 11 | // Expect HTML to match snapshot. 12 | expect(wrapper.html()).toMatchSnapshot() 13 | }) 14 | }) 15 | -------------------------------------------------------------------------------- /nuxt/components/druxt/Logo.vue: -------------------------------------------------------------------------------- 1 | 20 | -------------------------------------------------------------------------------- /nuxt/components/druxt/__snapshots__/Logo.test.js.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`Logo is a Vue instance 1`] = ` 4 | " 5 | 6 | 7 | 8 | " 9 | `; 10 | -------------------------------------------------------------------------------- /nuxt/components/druxt/block/system/BrandingBlock.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 17 | 18 | 27 | -------------------------------------------------------------------------------- /nuxt/components/druxt/block/system/PoweredByBlock.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | -------------------------------------------------------------------------------- /nuxt/components/druxt/site/Olivero.vue: -------------------------------------------------------------------------------- 1 | 32 | 33 | 81 | -------------------------------------------------------------------------------- /nuxt/cypress.config.js: -------------------------------------------------------------------------------- 1 | const { defineConfig } = require("cypress"); 2 | 3 | module.exports = defineConfig({ 4 | e2e: { 5 | baseUrl: 'http://localhost:3000', 6 | setupNodeEvents(on, config) { 7 | // implement node event listeners here 8 | }, 9 | }, 10 | }); 11 | -------------------------------------------------------------------------------- /nuxt/cypress/e2e/homepage.cy.js: -------------------------------------------------------------------------------- 1 | /* global it, cy */ 2 | 3 | it('Homepage', () => { 4 | // Given I visit the homepage. 5 | cy.visit('/') 6 | 7 | // Expect primary menu. 8 | cy.get('div[blocks][name="primary_menu"]').should('exist') 9 | .find('li').should('have.length', 1) 10 | .first().should('contain.text', 'Home') 11 | 12 | // Expect secondary menu. 13 | cy.get('div[blocks][name="secondary_menu"]').should('exist') 14 | .find('li').should('have.length', 1) 15 | .first().should('contain.text', 'Log in') 16 | 17 | // Expect empty frontpage in content block. 18 | cy.get('div[blocks][name="content"]').should('exist') 19 | .should('contain.text', 'No front page content has been created yet.') 20 | }) 21 | -------------------------------------------------------------------------------- /nuxt/cypress/support/commands.js: -------------------------------------------------------------------------------- 1 | // *********************************************** 2 | // This example commands.js shows you how to 3 | // create various custom commands and overwrite 4 | // existing commands. 5 | // 6 | // For more comprehensive examples of custom 7 | // commands please read more here: 8 | // https://on.cypress.io/custom-commands 9 | // *********************************************** 10 | // 11 | // 12 | // -- This is a parent command -- 13 | // Cypress.Commands.add('login', (email, password) => { ... }) 14 | // 15 | // 16 | // -- This is a child command -- 17 | // Cypress.Commands.add('drag', { prevSubject: 'element'}, (subject, options) => { ... }) 18 | // 19 | // 20 | // -- This is a dual command -- 21 | // Cypress.Commands.add('dismiss', { prevSubject: 'optional'}, (subject, options) => { ... }) 22 | // 23 | // 24 | // -- This will overwrite an existing command -- 25 | // Cypress.Commands.overwrite('visit', (originalFn, url, options) => { ... }) 26 | -------------------------------------------------------------------------------- /nuxt/cypress/support/e2e.js: -------------------------------------------------------------------------------- 1 | // *********************************************************** 2 | // This example support/e2e.js is processed and 3 | // loaded automatically before your test files. 4 | // 5 | // This is a great place to put global configuration and 6 | // behavior that modifies Cypress. 7 | // 8 | // You can change the location of this file or turn off 9 | // automatically serving support files with the 10 | // 'supportFile' configuration option. 11 | // 12 | // You can read more here: 13 | // https://on.cypress.io/configuration 14 | // *********************************************************** 15 | 16 | // Import commands.js using ES2015 syntax: 17 | import './commands' 18 | 19 | // Alternatively you can use CommonJS syntax: 20 | // require('./commands') 21 | -------------------------------------------------------------------------------- /nuxt/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | moduleNameMapper: { 3 | '^@/(.*)$': '/$1', 4 | '^~/(.*)$': '/$1', 5 | '^vue$': 'vue/dist/vue.common.js', 6 | '^~storybook': '/.nuxt-storybook/storybook/preview.js', 7 | }, 8 | moduleFileExtensions: ['js', 'vue', 'json'], 9 | transform: { 10 | '^.+\\.js$': 'babel-jest', 11 | '.*\\.(vue)$': 'vue-jest', 12 | }, 13 | collectCoverage: true, 14 | collectCoverageFrom: [ 15 | '/components/**/*.vue', 16 | '/pages/**/*.vue', 17 | ], 18 | testEnvironment: 'jsdom', 19 | } 20 | -------------------------------------------------------------------------------- /nuxt/nuxt.config.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config({ path: '../.env' }) 2 | const baseUrl = process.env.BASE_URL || '' 3 | 4 | export default { 5 | target: process.env.NUXT_TARGET, 6 | 7 | // Global page headers: https://go.nuxtjs.dev/config-head 8 | head: { 9 | title: 'quickstart-druxt-site', 10 | htmlAttrs: { 11 | lang: 'en' 12 | }, 13 | meta: [ 14 | { charset: 'utf-8' }, 15 | { name: 'viewport', content: 'width=device-width, initial-scale=1' }, 16 | { hid: 'description', name: 'description', content: '' }, 17 | { name: 'format-detection', content: 'telephone=no' } 18 | ], 19 | link: [ 20 | { rel: 'icon', type: 'image/x-icon', href: '/favicon.ico' } 21 | ] 22 | }, 23 | 24 | // Global CSS: https://go.nuxtjs.dev/config-css 25 | css: [ 26 | ], 27 | 28 | // Plugins to run before rendering page: https://go.nuxtjs.dev/config-plugins 29 | plugins: [ 30 | ], 31 | 32 | // Auto import components: https://go.nuxtjs.dev/config-components 33 | components: true, 34 | 35 | // Modules for dev and build (recommended): https://go.nuxtjs.dev/config-modules 36 | buildModules: [ 37 | // https://go.nuxtjs.dev/eslint 38 | '@nuxtjs/eslint-module', 39 | ['druxt-auth', { clientId: process.env.OAUTH_CLIENT_ID }], 40 | 'druxt-site' 41 | ], 42 | 43 | // Modules: https://go.nuxtjs.dev/config-modules 44 | modules: [], 45 | 46 | // DruxtJS: https://druxtjs.org 47 | druxt: { 48 | // The baseUrl of the Druxt enabled Drupal JSON:API server. 49 | baseUrl, 50 | 51 | // Set the JSON:API endpoint, `/jsonapi` by default. 52 | // endpoint: '/jsonapi' 53 | 54 | // DruxtEntity module settings; https://druxtjs.org/modules/entity 55 | entity: { 56 | // Disable the deprecated DruxtField components. 57 | components: { fields: false }, 58 | 59 | query: { 60 | // Enable Drupal display mode schema based filtering of the JSON:API 61 | // resource to reduce query size. 62 | // schema: true, 63 | }, 64 | }, 65 | 66 | // DruxtMenu module settings; https://druxtjs.org/modules/menu 67 | menu: { 68 | // Disable JSON:API Menu Items support. Enabled by the DruxtSite module. 69 | // jsonApiMenuItems: false 70 | }, 71 | 72 | // Druxt proxy settings. 73 | proxy: { 74 | // Proxy the JSON:API request via the Nuxt proxy to prevent CORS issues. 75 | api: true 76 | 77 | // Proxy the Drupal files system, using `sites/default/files` by default. 78 | // Disable the proxy, or set a specific site to proxy. 79 | // files: 'domain.tld' 80 | }, 81 | 82 | // DruxtRouter module settings; https://druxtjs.org/modules/router 83 | router: { 84 | // Experimental; Disable the DruxtRouter page middleware, removing routing 85 | // requests and server side redirects. Doing this allows Full Static 86 | // builds without the need of a live Drupal backend. The Route is still 87 | // is retrieved by the fetch hook instead. 88 | middleware: false 89 | 90 | // Disable the wildcard router, which is enabled by default in the 91 | // DruxtSite module. This allows more fine grained control over your 92 | // routing. 93 | // wildcard: false 94 | }, 95 | 96 | // DruxtSite module settings; https://druxtjs.org/modules/site 97 | site: { 98 | // Disable the DruxtSite default layout. 99 | // layout: false, 100 | 101 | // Set the backend theme for DruxtBlock layouts. 102 | theme: 'olivero' 103 | }, 104 | 105 | // DruxtViews module settings; https://druxtjs.org/modules/views 106 | views: { 107 | query: { 108 | // Filter the View results using the Views bundle filter, if available. 109 | // This reduces requests to just ID and type, and can be done manually 110 | // if the bundle filter has not been set in Drupal. 111 | bundleFilter: true, 112 | } 113 | } 114 | }, 115 | 116 | // Build Configuration: https://go.nuxtjs.dev/config-build 117 | build: { 118 | } 119 | } 120 | -------------------------------------------------------------------------------- /nuxt/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "quickstart-druxt-site", 3 | "version": "1.0.0", 4 | "private": true, 5 | "scripts": { 6 | "build": "nuxt build", 7 | "dev": "nuxt", 8 | "generate": "nuxt generate", 9 | "lint": "npm run lint:js && npm run lint:style", 10 | "lint:fix": "prettier --write --list-different . && npm run lint:js -- --fix && npm run lint:style -- --fix", 11 | "lint:js": "eslint --ext .js,.vue --ignore-path ../.gitignore .", 12 | "lint:style": "stylelint **/*.{vue,css} --ignore-path ../.gitignore", 13 | "serve": "npm run build && npm start", 14 | "start": "nuxt start", 15 | "test": "npm run test:unit && npm run test:e2e", 16 | "test:e2e": "start-server-and-test serve http://localhost:3000 'npx cypress run'", 17 | "test:e2e:dev": "start-server-and-test dev http://localhost:3000 'npx cypress open'", 18 | "test:e2e:open": "start-server-and-test serve http://localhost:3000 'npx cypress open'", 19 | "test:unit": "jest" 20 | }, 21 | "lint-staged": { 22 | "*.{js,vue}": "eslint", 23 | "*.{css,vue}": "stylelint" 24 | }, 25 | "husky": { 26 | "hooks": { 27 | "pre-commit": "lint-staged" 28 | } 29 | }, 30 | "dependencies": { 31 | "core-js": "3.26.1", 32 | "dotenv": "^16.0.3", 33 | "druxt-auth": "^0.2.0", 34 | "druxt-site": "^0.14.0", 35 | "nuxt": "2.15.8", 36 | "vue-server-renderer": "^2.7.14", 37 | "vue-template-compiler": "^2.7.14" 38 | }, 39 | "devDependencies": { 40 | "@babel/eslint-parser": "^7.19.1", 41 | "@nuxtjs/eslint-config": "^11.0.0", 42 | "@nuxtjs/eslint-module": "^3.1.0", 43 | "@nuxtjs/storybook": "^4.2.0", 44 | "@vue/test-utils": "^1.3.3", 45 | "babel-jest": "^29.3.1", 46 | "cypress": "^10.11.0", 47 | "eslint": "^8.27.0", 48 | "eslint-config-prettier": "^8.5.0", 49 | "eslint-plugin-nuxt": "^4.0.0", 50 | "eslint-plugin-prettier": "^4.2.1", 51 | "eslint-plugin-vue": "^9.7.0", 52 | "husky": "^8.0.2", 53 | "jest": "^29.3.1", 54 | "jest-environment-jsdom": "^29.3.1", 55 | "lint-staged": "^13.0.3", 56 | "postcss": "8.4.19", 57 | "start-server-and-test": "^1.14.0", 58 | "stylelint": "^14.15.0", 59 | "stylelint-config-prettier": "^9.0.4", 60 | "stylelint-config-recommended-vue": "^1.4.0", 61 | "stylelint-config-standard": "^28.0.0", 62 | "vue-jest": "^3.0.7" 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /nuxt/pages/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/druxt/quickstart/5b83d115be83b81d266d2e8669a8046bc40e3a60/nuxt/pages/.gitkeep -------------------------------------------------------------------------------- /nuxt/pages/user/login.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 12 | -------------------------------------------------------------------------------- /nuxt/static/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/druxt/quickstart/5b83d115be83b81d266d2e8669a8046bc40e3a60/nuxt/static/favicon.ico -------------------------------------------------------------------------------- /nuxt/store/README.md: -------------------------------------------------------------------------------- 1 | # STORE 2 | 3 | **This directory is not required, you can delete it if you don't want to use it.** 4 | 5 | This directory contains your Vuex Store files. 6 | Vuex Store option is implemented in the Nuxt.js framework. 7 | 8 | Creating a file in this directory automatically activates the option in the framework. 9 | 10 | More information about the usage of this directory in [the documentation](https://nuxtjs.org/guide/vuex-store). 11 | -------------------------------------------------------------------------------- /nuxt/stylelint.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | customSyntax: 'postcss-html', 3 | extends: [ 4 | 'stylelint-config-standard', 5 | 'stylelint-config-recommended-vue', 6 | 'stylelint-config-prettier', 7 | ], 8 | // add your custom config here 9 | // https://stylelint.io/user-guide/configuration 10 | rules: {}, 11 | } 12 | -------------------------------------------------------------------------------- /renovate.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "@nuxtjs" 4 | ], 5 | "ignoreDeps": [ 6 | "@nuxtjs/storybook" 7 | ] 8 | } 9 | --------------------------------------------------------------------------------