├── .editorconfig ├── .flake8 ├── .github ├── dependabot.yml └── workflows │ ├── meta.yml │ └── test-matrix.yml ├── .gitignore ├── .meta.toml ├── .pre-commit-config.yaml ├── .stylelintignore ├── .stylelintrc ├── CHANGES.md ├── CONTRIBUTING.rst ├── HOWTO_DEVELOP.md ├── MANIFEST.in ├── README.md ├── news ├── +fix-tiny-padding.bugfix.md ├── +mobilemenu.feature.md ├── .changelog_template.jinja └── .gitkeep ├── package.json ├── pnpm-lock.yaml ├── postcss.config.js ├── pyproject.toml ├── scss ├── _alerts.scss ├── _breadcrumbs.scss ├── _cards.scss ├── _collapsible.scss ├── _comments.scss ├── _content.scss ├── _content_base.scss ├── _content_tables.scss ├── _controlpanels.scss ├── _footer.scss ├── _forms.scss ├── _grid.scss ├── _header.scss ├── _icons.scss ├── _login.scss ├── _portlets.scss ├── _roboto-webfont.scss ├── _root_variables.scss ├── _scaffolding.scss ├── _sitenav.scss ├── _toolbar.scss ├── _variables.barceloneta.scss ├── _variables.colors.dark.plone.scss ├── _variables.colors.plone.scss ├── _variables.properties.scss ├── barceloneta-toolbar.scss ├── barceloneta.scss ├── base.scss ├── mixins │ ├── _mixin.buttons.plone.scss │ ├── _mixin.font.plone.scss │ ├── _mixin.forms.plone.scss │ ├── _mixin.portlets.plone.scss │ ├── _mixin.prefixes.plone.scss │ └── _mixin.tabfocus.plone.scss ├── plone-toolbarlogo.svg └── print.scss ├── setup.py ├── src └── plonetheme │ ├── __init__.py │ └── barceloneta │ ├── __init__.py │ ├── configure.zcml │ ├── interfaces.py │ ├── profiles │ └── default │ │ ├── metadata.xml │ │ ├── registry │ │ └── tinymce.xml │ │ └── theme.xml │ ├── theme │ ├── backend.xml │ ├── barceloneta-apple-touch-icon-114x114-precomposed.png │ ├── barceloneta-apple-touch-icon-144x144-precomposed.png │ ├── barceloneta-apple-touch-icon-57x57-precomposed.png │ ├── barceloneta-apple-touch-icon-72x72-precomposed.png │ ├── barceloneta-apple-touch-icon-precomposed.png │ ├── barceloneta-apple-touch-icon.png │ ├── barceloneta-favicon.ico │ ├── css │ │ ├── barceloneta-toolbar.css │ │ ├── barceloneta-toolbar.css.map │ │ ├── barceloneta-toolbar.min.css │ │ ├── barceloneta-toolbar.min.css.map │ │ ├── barceloneta.css │ │ ├── barceloneta.css.map │ │ ├── barceloneta.min.css │ │ └── barceloneta.min.css.map │ ├── grid-col-marker.xml │ ├── index.html │ ├── manifest.cfg │ ├── preview.png │ ├── roboto │ │ ├── Apache License.txt │ │ ├── README.rst │ │ ├── generator_config.txt │ │ ├── roboto-black.eot │ │ ├── roboto-black.svg │ │ ├── roboto-black.ttf │ │ ├── roboto-black.woff │ │ ├── roboto-black.woff2 │ │ ├── roboto-blackitalic.eot │ │ ├── roboto-blackitalic.ttf │ │ ├── roboto-blackitalic.woff │ │ ├── roboto-blackitalic.woff2 │ │ ├── roboto-bold.eot │ │ ├── roboto-bold.ttf │ │ ├── roboto-bold.woff │ │ ├── roboto-bold.woff2 │ │ ├── roboto-bolditalic.eot │ │ ├── roboto-bolditalic.ttf │ │ ├── roboto-bolditalic.woff │ │ ├── roboto-bolditalic.woff2 │ │ ├── roboto-italic.eot │ │ ├── roboto-italic.ttf │ │ ├── roboto-italic.woff │ │ ├── roboto-italic.woff2 │ │ ├── roboto-light.eot │ │ ├── roboto-light.ttf │ │ ├── roboto-light.woff │ │ ├── roboto-light.woff2 │ │ ├── roboto-lightitalic.eot │ │ ├── roboto-lightitalic.ttf │ │ ├── roboto-lightitalic.woff │ │ ├── roboto-lightitalic.woff2 │ │ ├── roboto-medium.eot │ │ ├── roboto-medium.ttf │ │ ├── roboto-medium.woff │ │ ├── roboto-medium.woff2 │ │ ├── roboto-mediumitalic.eot │ │ ├── roboto-mediumitalic.ttf │ │ ├── roboto-mediumitalic.woff │ │ ├── roboto-mediumitalic.woff2 │ │ ├── roboto-regular.eot │ │ ├── roboto-regular.ttf │ │ ├── roboto-regular.woff │ │ ├── roboto-regular.woff2 │ │ ├── roboto-thin.eot │ │ ├── roboto-thin.ttf │ │ ├── roboto-thin.woff │ │ ├── roboto-thin.woff2 │ │ ├── roboto-thinitalic.eot │ │ ├── roboto-thinitalic.ttf │ │ ├── roboto-thinitalic.woff │ │ ├── roboto-thinitalic.woff2 │ │ ├── robotocondensed-bold.eot │ │ ├── robotocondensed-bold.ttf │ │ ├── robotocondensed-bold.woff │ │ ├── robotocondensed-bold.woff2 │ │ ├── robotocondensed-bolditalic.eot │ │ ├── robotocondensed-bolditalic.ttf │ │ ├── robotocondensed-bolditalic.woff │ │ ├── robotocondensed-bolditalic.woff2 │ │ ├── robotocondensed-italic.eot │ │ ├── robotocondensed-italic.ttf │ │ ├── robotocondensed-italic.woff │ │ ├── robotocondensed-italic.woff2 │ │ ├── robotocondensed-light.eot │ │ ├── robotocondensed-light.ttf │ │ ├── robotocondensed-light.woff │ │ ├── robotocondensed-light.woff2 │ │ ├── robotocondensed-lightitalic.eot │ │ ├── robotocondensed-lightitalic.ttf │ │ ├── robotocondensed-lightitalic.woff │ │ ├── robotocondensed-lightitalic.woff2 │ │ ├── robotocondensed-regular.eot │ │ ├── robotocondensed-regular.ttf │ │ ├── robotocondensed-regular.woff │ │ └── robotocondensed-regular.woff2 │ ├── rules.xml │ └── tinymce │ │ ├── tinymce-formats.css │ │ └── tinymce-ui-content.css │ └── upgrades │ ├── __init__.py │ ├── configure.zcml │ └── upgrades.py ├── toolbar-demo.html └── tox.ini /.editorconfig: -------------------------------------------------------------------------------- 1 | # Generated from: 2 | # https://github.com/plone/meta/tree/main/src/plone/meta/default 3 | # See the inline comments on how to expand/tweak this configuration file 4 | # 5 | # EditorConfig Configuration file, for more details see: 6 | # http://EditorConfig.org 7 | # EditorConfig is a convention description, that could be interpreted 8 | # by multiple editors to enforce common coding conventions for specific 9 | # file types 10 | 11 | # top-most EditorConfig file: 12 | # Will ignore other EditorConfig files in Home directory or upper tree level. 13 | root = true 14 | 15 | 16 | [*] 17 | # Default settings for all files. 18 | # Unix-style newlines with a newline ending every file 19 | end_of_line = lf 20 | insert_final_newline = true 21 | trim_trailing_whitespace = true 22 | # Set default charset 23 | charset = utf-8 24 | # Indent style default 25 | indent_style = space 26 | # Max Line Length - a hard line wrap, should be disabled 27 | max_line_length = off 28 | 29 | [*.{py,cfg,ini}] 30 | # 4 space indentation 31 | indent_size = 4 32 | 33 | [*.{yml,zpt,pt,dtml,zcml,html,xml}] 34 | # 2 space indentation 35 | indent_size = 2 36 | 37 | [*.{json,jsonl,js,jsx,ts,tsx,css,less,scss}] 38 | # Frontend development 39 | # 2 space indentation 40 | indent_size = 2 41 | max_line_length = 80 42 | 43 | [{Makefile,.gitmodules}] 44 | # Tab indentation (no size specified, but view as 4 spaces) 45 | indent_style = tab 46 | indent_size = unset 47 | tab_width = unset 48 | 49 | 50 | ## 51 | # Add extra configuration options in .meta.toml: 52 | # [editorconfig] 53 | # extra_lines = """ 54 | # _your own configuration lines_ 55 | # """ 56 | ## 57 | -------------------------------------------------------------------------------- /.flake8: -------------------------------------------------------------------------------- 1 | # Generated from: 2 | # https://github.com/plone/meta/tree/main/src/plone/meta/default 3 | # See the inline comments on how to expand/tweak this configuration file 4 | [flake8] 5 | doctests = 1 6 | ignore = 7 | # black takes care of line length 8 | E501, 9 | # black takes care of where to break lines 10 | W503, 11 | # black takes care of spaces within slicing (list[:]) 12 | E203, 13 | # black takes care of spaces after commas 14 | E231, 15 | 16 | ## 17 | # Add extra configuration options in .meta.toml: 18 | # [flake8] 19 | # extra_lines = """ 20 | # _your own configuration lines_ 21 | # """ 22 | ## 23 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | # Generated from: 2 | # https://github.com/plone/meta/tree/main/src/plone/meta/default 3 | # See the inline comments on how to expand/tweak this configuration file 4 | version: 2 5 | updates: 6 | 7 | - package-ecosystem: "github-actions" 8 | directory: "/" 9 | schedule: 10 | # Check for updates to GitHub Actions every week 11 | interval: "weekly" 12 | -------------------------------------------------------------------------------- /.github/workflows/meta.yml: -------------------------------------------------------------------------------- 1 | # Generated from: 2 | # https://github.com/plone/meta/tree/main/src/plone/meta/default 3 | # See the inline comments on how to expand/tweak this configuration file 4 | name: Meta 5 | on: 6 | push: 7 | branches: 8 | - master 9 | - main 10 | pull_request: 11 | branches: 12 | - master 13 | - main 14 | workflow_dispatch: 15 | 16 | ## 17 | # To set environment variables for all jobs, add in .meta.toml: 18 | # [github] 19 | # env = """ 20 | # debug: 1 21 | # image-name: 'org/image' 22 | # image-tag: 'latest' 23 | # """ 24 | ## 25 | 26 | jobs: 27 | qa: 28 | uses: plone/meta/.github/workflows/qa.yml@2.x 29 | coverage: 30 | uses: plone/meta/.github/workflows/coverage.yml@2.x 31 | dependencies: 32 | uses: plone/meta/.github/workflows/dependencies.yml@2.x 33 | release_ready: 34 | uses: plone/meta/.github/workflows/release_ready.yml@2.x 35 | circular: 36 | uses: plone/meta/.github/workflows/circular.yml@2.x 37 | 38 | ## 39 | # To modify the list of default jobs being created add in .meta.toml: 40 | # [github] 41 | # jobs = [ 42 | # "qa", 43 | # "coverage", 44 | # "dependencies", 45 | # "release_ready", 46 | # "circular", 47 | # ] 48 | ## 49 | 50 | ## 51 | # To request that some OS level dependencies get installed 52 | # when running tests/coverage jobs, add in .meta.toml: 53 | # [github] 54 | # os_dependencies = "git libxml2 libxslt" 55 | ## 56 | 57 | 58 | ## 59 | # Specify additional jobs in .meta.toml: 60 | # [github] 61 | # extra_lines = """ 62 | # another: 63 | # uses: org/repo/.github/workflows/file.yml@main 64 | # """ 65 | ## 66 | -------------------------------------------------------------------------------- /.github/workflows/test-matrix.yml: -------------------------------------------------------------------------------- 1 | # Generated from: 2 | # https://github.com/plone/meta/tree/main/src/plone/meta/default 3 | # See the inline comments on how to expand/tweak this configuration file 4 | name: Tests 5 | 6 | on: 7 | push: 8 | 9 | jobs: 10 | build: 11 | permissions: 12 | contents: read 13 | pull-requests: write 14 | strategy: 15 | # We want to see all failures: 16 | fail-fast: false 17 | matrix: 18 | os: 19 | - ["ubuntu", "ubuntu-latest"] 20 | config: 21 | # [Python version, visual name, tox env] 22 | - ["3.13", "6.2 on py3.13", "py313-plone62"] 23 | - ["3.10", "6.2 on py3.10", "py310-plone62"] 24 | - ["3.13", "6.1 on py3.13", "py313-plone61"] 25 | - ["3.10", "6.1 on py3.10", "py310-plone61"] 26 | 27 | runs-on: ${{ matrix.os[1] }} 28 | if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name 29 | name: ${{ matrix.config[1] }} 30 | steps: 31 | - uses: actions/checkout@v5 32 | with: 33 | persist-credentials: false 34 | - name: Set up Python 35 | uses: actions/setup-python@v6 36 | with: 37 | python-version: ${{ matrix.config[0] }} 38 | allow-prereleases: true 39 | - name: Pip cache 40 | uses: actions/cache@v4 41 | with: 42 | path: ~/.cache/pip 43 | key: ${{ runner.os }}-pip-${{ matrix.config[0] }}-${{ hashFiles('setup.*', 'tox.ini') }} 44 | restore-keys: | 45 | ${{ runner.os }}-pip-${{ matrix.config[0] }}- 46 | ${{ runner.os }}-pip- 47 | - name: Install dependencies 48 | run: | 49 | python -m pip install --upgrade pip 50 | pip install tox 51 | - name: Initialize tox 52 | # the bash one-liner below does not work on Windows 53 | if: contains(matrix.os, 'ubuntu') 54 | run: | 55 | if [ `tox list --no-desc -f init|wc -l` = 1 ]; then tox -e init;else true; fi 56 | - name: Test 57 | run: tox -e ${{ matrix.config[2] }} 58 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Generated from: 2 | # https://github.com/plone/meta/tree/main/src/plone/meta/default 3 | # See the inline comments on how to expand/tweak this configuration file 4 | # python related 5 | *.egg-info 6 | *.pyc 7 | *.pyo 8 | 9 | # translation related 10 | *.mo 11 | 12 | # tools related 13 | build/ 14 | .coverage 15 | .*project 16 | coverage.xml 17 | dist/ 18 | docs/_build 19 | __pycache__/ 20 | .tox 21 | .vscode/ 22 | node_modules/ 23 | forest.dot 24 | forest.json 25 | 26 | # venv / buildout related 27 | bin/ 28 | develop-eggs/ 29 | eggs/ 30 | .eggs/ 31 | etc/ 32 | .installed.cfg 33 | include/ 34 | lib/ 35 | lib64 36 | .mr.developer.cfg 37 | parts/ 38 | pyvenv.cfg 39 | var/ 40 | local.cfg 41 | 42 | # mxdev 43 | /instance/ 44 | /.make-sentinels/ 45 | /*-mxdev.txt 46 | /reports/ 47 | /sources/ 48 | /venv/ 49 | .installed.txt 50 | 51 | 52 | ## 53 | # Add extra configuration options in .meta.toml: 54 | # [gitignore] 55 | # extra_lines = """ 56 | # _your own configuration lines_ 57 | # """ 58 | ## 59 | -------------------------------------------------------------------------------- /.meta.toml: -------------------------------------------------------------------------------- 1 | # Generated from: 2 | # https://github.com/plone/meta/tree/main/src/plone/meta/default 3 | # See the inline comments on how to expand/tweak this configuration file 4 | [meta] 5 | template = "default" 6 | commit-id = "2.0.1.dev0" 7 | 8 | [pyproject] 9 | codespell_skip = "*.css.map,pnpm-lock.yaml" 10 | 11 | [tox] 12 | test_matrix = {"6.2" = ["3.13", "3.10"], "6.1" = ["3.13", "3.10"]} 13 | -------------------------------------------------------------------------------- /.pre-commit-config.yaml: -------------------------------------------------------------------------------- 1 | # Generated from: 2 | # https://github.com/plone/meta/tree/main/src/plone/meta/default 3 | # See the inline comments on how to expand/tweak this configuration file 4 | ci: 5 | autofix_prs: false 6 | autoupdate_schedule: monthly 7 | 8 | repos: 9 | - repo: https://github.com/asottile/pyupgrade 10 | rev: v3.20.0 11 | hooks: 12 | - id: pyupgrade 13 | args: [--py38-plus] 14 | - repo: https://github.com/pycqa/isort 15 | rev: 6.1.0 16 | hooks: 17 | - id: isort 18 | - repo: https://github.com/psf/black-pre-commit-mirror 19 | rev: 25.9.0 20 | hooks: 21 | - id: black 22 | - repo: https://github.com/collective/zpretty 23 | rev: 3.1.1 24 | hooks: 25 | - id: zpretty 26 | 27 | ## 28 | # Add extra configuration options in .meta.toml: 29 | # [pre_commit] 30 | # zpretty_extra_lines = """ 31 | # _your own configuration lines_ 32 | # """ 33 | ## 34 | - repo: https://github.com/PyCQA/flake8 35 | rev: 7.3.0 36 | hooks: 37 | - id: flake8 38 | 39 | ## 40 | # Add extra configuration options in .meta.toml: 41 | # [pre_commit] 42 | # flake8_extra_lines = """ 43 | # _your own configuration lines_ 44 | # """ 45 | ## 46 | - repo: https://github.com/codespell-project/codespell 47 | rev: v2.4.1 48 | hooks: 49 | - id: codespell 50 | additional_dependencies: 51 | - tomli 52 | 53 | ## 54 | # Add extra configuration options in .meta.toml: 55 | # [pre_commit] 56 | # codespell_extra_lines = """ 57 | # _your own configuration lines_ 58 | # """ 59 | ## 60 | - repo: https://github.com/mgedmin/check-manifest 61 | rev: "0.50" 62 | hooks: 63 | - id: check-manifest 64 | - repo: https://github.com/regebro/pyroma 65 | rev: "5.0" 66 | hooks: 67 | - id: pyroma 68 | - repo: https://github.com/mgedmin/check-python-versions 69 | rev: "0.22.1" 70 | hooks: 71 | - id: check-python-versions 72 | args: ['--only', 'setup.py,pyproject.toml'] 73 | - repo: https://github.com/collective/i18ndude 74 | rev: "6.2.1" 75 | hooks: 76 | - id: i18ndude 77 | 78 | 79 | ## 80 | # Add extra configuration options in .meta.toml: 81 | # [pre_commit] 82 | # i18ndude_extra_lines = """ 83 | # _your own configuration lines_ 84 | # """ 85 | ## 86 | 87 | 88 | ## 89 | # Add extra configuration options in .meta.toml: 90 | # [pre_commit] 91 | # extra_lines = """ 92 | # _your own configuration lines_ 93 | # """ 94 | ## 95 | -------------------------------------------------------------------------------- /.stylelintignore: -------------------------------------------------------------------------------- 1 | **/*.min.css 2 | **/dist/ 3 | **/vendor/ 4 | /_gh_pages/ 5 | -------------------------------------------------------------------------------- /.stylelintrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "stylelint-config-twbs-bootstrap" 4 | ], 5 | "rules": { 6 | "property-blacklist": [ 7 | "border-radius", 8 | "border-top-left-radius", 9 | "border-top-right-radius", 10 | "border-bottom-right-radius", 11 | "border-bottom-left-radius", 12 | "transition" 13 | ], 14 | "function-blacklist": ["calc"] 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /CHANGES.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | 9 | 10 | 11 | 12 | ## 3.3.1 (2025-10-01) 13 | 14 | 15 | ### Bug fixes: 16 | 17 | - Update: Bootstrap 5.3.8 @petschki 18 | 19 | 20 | ### Internal: 21 | 22 | - Move distribution to src layout [gforcada] #4217 23 | 24 | ## 3.3.0 (2025-06-20) 25 | 26 | 27 | ### New features: 28 | 29 | - (Re)Introduce the ajax_load theme parameter and skip diazo theming, if set. 30 | - Add a dedicated barceloneta-toolbar stylesheet. 31 | 32 | Add a new stylesheet which only compiles the barceloneta toolbar styles. 33 | This stylesheet can be used in situations where only the toolbar is wanted but 34 | not the whole Barceloneta design system. 35 | [thet] 36 | 37 | 38 | ### Bug fixes: 39 | 40 | - Update dependencies: Bootstrap 5.3.7, TinyMCE 7.9.1. @petschki 41 | 42 | ## 3.2.4 (2025-05-16) 43 | 44 | 45 | ### New features: 46 | 47 | - Support for required and invalid styles on form tabs. 48 | [thet] 49 | 50 | 51 | ### Bug fixes: 52 | 53 | - Update dependencies: Bootstrap 5.3.5, TinyMCE 7.8.0. @petschki #397 54 | - Update dependencies: Bootstrap 5.3.6, TinyMCE 7.9.0. @petschki 55 | 56 | ## 3.2.3 (2025-03-18) 57 | 58 | 59 | ### Bug fixes: 60 | 61 | - Switch from npm to pnpm. @petschki 62 | 63 | Update `TinyMCE=7.7.1`. @petschki 64 | 65 | Update Developer documentation. @petschki #392 66 | 67 | ## 3.2.2 (2025-01-27) 68 | 69 | 70 | ### Bug fixes: 71 | 72 | - Fix DeprecationWarnings. [maurits] #4090 73 | 74 | 75 | ### Internal: 76 | 77 | - TinyMCE = 7.6.1 78 | [petschki] #389 79 | 80 | ## 3.2.1 (2024-12-17) 81 | 82 | 83 | ### Bug fixes: 84 | 85 | - Upgrade TinyMCE 7.6.0 86 | [petschki] #384 87 | 88 | 89 | ### Internal: 90 | 91 | - Upgrade development dependencies. 92 | [petschki] #384 93 | 94 | ## 3.2.0 (2024-10-30) 95 | 96 | 97 | ### Bug fixes: 98 | 99 | - Upgrade dependencies. 100 | [petschki] #382 101 | 102 | ## 3.2.0a6 (2024-09-03) 103 | 104 | 105 | ### Bug fixes: 106 | 107 | - Upgrade dependencies. 108 | [petschki] #380 109 | 110 | ## 3.2.0a5 (2024-08-01) 111 | 112 | 113 | ### New features: 114 | 115 | - Add styles for details/summary based collapsibles. 116 | Add support for labels wrapping input fields. 117 | 118 | Ref: https://github.com/plone/Products.CMFPlone/pull/3976 #374 119 | - [yurj] Add the portal_url parameter to be used with Diazo rules and implement it in backend.xml #376 120 | 121 | ## 3.2.0a4 (2024-04-26) 122 | 123 | 124 | ### New features: 125 | 126 | - TinyMCE 7.0 127 | this is a version bump only. There are no CSS changes from TinyMCE 6 -> 7 128 | [petschki] #371 129 | 130 | 131 | ### Bug fixes: 132 | 133 | - Remove deprecated SVG font resources 134 | [petschki] #357 135 | - Fix sticky `.formControls` to not break modals with buttons. 136 | [petschki] #367 137 | 138 | ## 3.2.0a3 (2024-01-23) 139 | 140 | 141 | ### Bug fixes: 142 | 143 | - pat-plone-modal works fine now and also this would remove "nav-link dropdown-item" classes, unstyling the menu entries 144 | [yurj] #358 145 | - Sticky formControls in edit forms. 146 | Dependency updates. 147 | [petschki] #361 148 | 149 | ## 3.2.0a2 (2023-12-12) 150 | 151 | 152 | ### Bug fixes: 153 | 154 | - Sanitize color variables to more Bootstrap like approach with main `$primary` color. 155 | [petschki] #251 156 | - Upgrade dependencies. 157 | [petschki] #356 158 | 159 | 160 | ## 3.2.0a1 (2023-10-24) 161 | 162 | 163 | ### New features: 164 | 165 | - Upgrade TinyMCE styles to version 6 166 | [petschki] #350 167 | 168 | 169 | ## 3.1.6 (2023-10-24) 170 | 171 | 172 | ### Internal: 173 | 174 | - Fix typo (BS version) in README 175 | [petschki] #0 176 | 177 | 178 | ## 3.1.5 (2023-09-19) 179 | 180 | 181 | ### Bug fixes: 182 | 183 | - Update Bootstrap to ``5.3.2`` 184 | [petschki] #346 185 | 186 | 187 | ## 3.1.4 (2023-07-30) 188 | 189 | 190 | ### Bug fixes: 191 | 192 | - Update Bootstrap to ``5.3.1`` 193 | [petschki] #343 194 | 195 | 196 | ### Internal: 197 | 198 | - Update configuration files. 199 | [plone devs] cfffba8c 200 | 201 | 202 | ### Documentation: 203 | 204 | - Fix broken links in the readme. 205 | [maurits] #338 206 | 207 | 208 | ## 3.1.3 (2023-06-05) 209 | 210 | 211 | ### New features: 212 | 213 | - Update to Bootstrap 5.3 final release. 214 | [petschki] #333 215 | 216 | 217 | ### Bug fixes: 218 | 219 | - Add "!optional" to extended grid breakpoints selectors to avoid errors when `$grid-breakpoints` is customized. 220 | [petschki] #329 221 | 222 | 223 | ## 3.1.2 (2023-04-18) 224 | 225 | ### New features: 226 | 227 | - Upgrade Bootstrap `5.3.0-alpha3` 228 | [petschki] (#325) 229 | 230 | ### Internal: 231 | 232 | - Update configuration files. [plone devs] (7032e1d4) 233 | 234 | ## 3.1.1 (2023-03-31) 235 | 236 | ### New features: 237 | 238 | - Update to Bootstrap 5.3.0-alpha2. [toalba,lenadax] (#324) 239 | 240 | ## 3.1.0 (2023-03-05) 241 | 242 | ### New features: 243 | 244 | - Simplify alert related styles. [lenadax] (#321) 245 | - Adopt colormode related variables from Bootstrap 5.3. [lenadax] 246 | (#321) 247 | - Update Bootstrap -> 5.3.0 [agitator] (#320) 248 | 249 | ### Bug fixes: 250 | 251 | - Fix Diazo rule problem with undefined footer_portlets and 252 | footer_portlets_count variables. See: 253 | 254 | (#239) 255 | 256 | ## 3.0.0 (2022-12-03) 257 | 258 | ### New features: 259 | 260 | - Update Bootstrap -> 5.2.3 [petschki] (#316) 261 | 262 | ## 3.0.0b6 (2022-10-04) 263 | 264 | ### New features: 265 | 266 | - Bootstrap 5.2.2 [petschki] (#313) 267 | 268 | ### Bug fixes: 269 | 270 | - Add TinyMCE ui styles in non-inline mode. [petschki] (#307) 271 | - Add content table styles [MrTango] (#311) 272 | 273 | ## 3.0.0b5 (2022-09-09) 274 | 275 | ### Bug fixes: 276 | 277 | - Fix npm release, rm npmignore, use explicit whitelist in 278 | package.json, rm legacy scss [MrTango] (#306) 279 | 280 | ## 3.0.0b4 (2022-09-09) 281 | 282 | ### Bug fixes: 283 | 284 | - prefix icon ptch in index.html with ++theme++barceloneta to prevent 285 | broken icon in other themes [MrTango] (#304) 286 | 287 | ## 3.0.0b3 (2022-09-07) 288 | 289 | ### Bug fixes: 290 | 291 | - Include tinymce-formats.css in theme, so that they have an effect. 292 | [MrTango] (#301) 293 | 294 | - Define max-height for toolbar dropdown so it scrolls if item list is 295 | too long. [petschki] (#302) 296 | 297 | - disable diazo for manage-viewlets view, because Diazo is messing with viewlets and viewlet manager, which is more confusing than helpful 298 | [MrTango] (#303) 299 | 300 | ## 3.0.0b2 (2022-07-21) 301 | 302 | ### New features: 303 | 304 | - Update Bootstrap 5.2.0 [petschki] (#300) 305 | 306 | ### Bug fixes: 307 | 308 | - Show footer portlets when managing all portlets from 309 | @@manage-portlets [frapell] (#281) 310 | 311 | ## 3.0.0b1 (2022-06-24) 312 | 313 | ### New features: 314 | 315 | - Example for extra styles that get automatically populated to the 316 | TinyMCE formats menu added. [agitator] (#282) 317 | - Reimplement dropout toolbar submenus and collapsed icons. Create CSS 318 | variables for Plone colors. [petschki, agitator] (#283) 319 | - Update to Bootstrap 5.2.0-beta1 and make use of CSS variables. 320 | [agitator] (#286) 321 | - Global sections: add support for css variables and color modes 322 | barceloneta, dark, light [agitator] (#288) 323 | 324 | ### Bug fixes: 325 | 326 | - Fix columns-order when only col-one is displayed. [pbauer] (#279) 327 | - Fix text wrapping of long toolbar labels. [agitator] (#289) 328 | - Toolbar width and wrapping tweaks. [agitator] (#292) 329 | - Ensure pointer cursor on toolbar toggle icon. [petschki] (#294) 330 | 331 | ## 3.0.0a11 (2022-04-08) 332 | 333 | ### New features: 334 | 335 | - Styling for liveSearch results with images. [agitator] (#278) 336 | 337 | ## 3.0.0a10 (2022-04-07) 338 | 339 | ### New features: 340 | 341 | - moved toolbar css from mockup to barceloneta [petschki] (#267) 342 | - Optimize image floating for content [MrTango] (#269) 343 | - Mobile navigation as offcanvas sidebar and integration of search 344 | into main navigation. [agitator] (#271) 345 | - Sticky footer [agitator] (#274) 346 | - update title and preview for Plone 6 [petschki] (#275) 347 | 348 | ### Bug fixes: 349 | 350 | - Reintroduce diff-styles for CMFEditions [pbauer] (#268) 351 | - Update main grid breakpoint to lg. [agitator] (#277) 352 | 353 | ## 3.0.0a9 (2022-01-28) 354 | 355 | ### New features: 356 | 357 | - del favicons from index.html and rules [talarias] (plip-favicon) 358 | 359 | ### Bug fixes: 360 | 361 | - Be more specific where replacing the head title element [ale-rt] 362 | (#264) 363 | 364 | ## 3.0.0a8 (2021-12-01) 365 | 366 | ### New features: 367 | 368 | - Refactored the scss for the alerts. [klye] (#250) 369 | 370 | ### Bug fixes: 371 | 372 | - Remove unused IBarcelonetaLayer. [agitator] (#254) 373 | - Add print styles. Disable important for utility classes. Enable 374 | negative margin utility classes. [agitator] (#255) 375 | 376 | ## 3.0.0a7 (2021-10-29) 377 | 378 | ### New features: 379 | 380 | - Make loading of webfont optional. Move Barceloneta specific styles 381 | out of base.scss. Update to Bootstrap 5.1.3. [agitator] (#253) 382 | 383 | ### Bug fixes: 384 | 385 | - event listing datecard style [petschki] (#252) 386 | 387 | ## 3.0.0a6 (2021-10-16) 388 | 389 | ### New features: 390 | 391 | - Added npm packaging info [agitator] (#251) 392 | 393 | ## 3.0.0a5 (2021-09-15) 394 | 395 | ### New features: 396 | 397 | - Update to Bootstrap 5.1.0 [petschki] (#247) 398 | - Update to Bootstrap 5.1.1 [petschki] (#248) 399 | 400 | ## 3.0.0a4 (2021-08-04) 401 | 402 | ### Bug fixes: 403 | 404 | - Optimize responsive header behavior. [agitator] (#1) 405 | 406 | ## 3.0.0a3 (2021-08-04) 407 | 408 | ### New features: 409 | 410 | - Update to Bootstrap 5.0.1 [agitator] (#241) 411 | - Update to Bootstrap 5.0.2 Update sitenav with Bootstrap defaults and 412 | cleanup. [agitator] (#243) 413 | 414 | ## 3.0.0a2 (2021-06-14) 415 | 416 | ### New features: 417 | 418 | - Rework contenttype views. Update to Bootstrap 5.0.0-beta3 419 | [agitator] (#236) 420 | - Update to Bootstrap 5.0.1 [agitator] (#238) 421 | 422 | ## 3.0.0a1 (2021-04-20) 423 | 424 | ### New features: 425 | 426 | - Remove hero move to top from rules. [jensens] (hero) 427 | - Change Templates to Bootstrap 5. [agitator, santonelli] (#137) 428 | - Change to relative xml include path to make external includes 429 | possible [gomez] (#212) 430 | - Add styling for comments. [santonelli] (#225) 431 | - Update markup for document byline [santonelli] (#235) (#235) 432 | - Use CSS class grid marker in body tag and Bootstrap mixins to 433 | define the grid, instead injecting them with Diazo. This will 434 | work even without Diazo and is more flexible. [MrTango] (#245) 435 | 436 | ### Bug fixes: 437 | 438 | - Update `lodash` via @dependabot notification. [jensens] (#209) 439 | - Cleanup code base: 440 | - Black code style, 441 | - Remove unnecessary code snippets, e.g. the magic utf8 header not 442 | needed in Python 3 and unused ZCML namespaces, 443 | - Remove skins.xml GS import step, 444 | - Remove unused less resource directory. (#229) 445 | - Also leave `#edit-bar` intact when copying the toolbar html into the 446 | theme using backend.xml, as was fixed two years to in the normal 447 | rules.xml. [fredvd] (#3191) 448 | 449 | ## 2.1.6 (2019-10-21) 450 | 451 | ### Bug fixes: 452 | 453 | - Revert "Fix the different width of Hide and Show button in action 454 | control panel" [vincentfretin] (#187) 455 | 456 | ## 2.1.5 (2019-10-12) 457 | 458 | ### Bug fixes: 459 | 460 | - Load zcml of `plone.resource` for our use of the `plone:static` 461 | directive. [maurits] (#2952) 462 | 463 | ## 2.1.4 (2019-06-27) 464 | 465 | ### Bug fixes: 466 | 467 | - Allow long photoAlbumEntryTitle entries to break to fit width. 468 | [agitator] (#183) 469 | 470 | ## 2.1.3 (2019-06-19) 471 | 472 | ### Bug fixes: 473 | 474 | - Fix submenu width for long entries [agitator] (#182) 475 | 476 | ## 2.1.2 (2019-03-06) 477 | 478 | ### Bug fixes: 479 | 480 | - Navigation style and overflow improvements [agitator] (#180) 481 | - Further navigation style improvements - increase button touch area 482 | [agitator] (#181) 483 | 484 | ## 2.1.1 (2019-02-13) 485 | 486 | ### Bug fixes: 487 | 488 | - Fix sitemap links (#173) 489 | - Sitenav style improvements (#176) 490 | - Fix overlapping css issue of Remove and Save button in pattern 491 | option of Resource Registries (#1111) 492 | 493 | ## 2.1.0 (2019-02-08) 494 | 495 | ### New features: 496 | 497 | - Added styles for multilevel dropdown navigation [agitator] (#2516) 498 | 499 | ### Bug fixes: 500 | 501 | - Fix the different width of Hide and Show button in action control 502 | panel (#2480) 503 | 504 | ## 2.0.0 (2019-01-15) 505 | 506 | ### Bug fixes: 507 | 508 | - Make final release. [maurits] (#170) 509 | - Initialize towncrier. [gforcada] (#2548) 510 | 511 | ## 2.0.0a1 (2018-11-05) 512 | 513 | Breaking changes: 514 | 515 | - Re-ordering of content columns: Have content container before 516 | column1 before column2. [tmassman] 517 | 518 | ### New features: 519 | 520 | - Additional footer portlets show in a doormat footer. [tmassman] 521 | 522 | ## 1.9.1 (2018-10-08) 523 | 524 | ### Bug fixes: 525 | 526 | - Do not strip the `#edit-bar` section from the toolbar. Refs: 527 | https://github.com/plone/Products.CMFPlone/issues/2322 [thet] 528 | 529 | ## 1.9.0 (2018-09-26) 530 | 531 | ### New features: 532 | 533 | - Integrated plone.app.event styles and further cleanup. [agitator] 534 | 535 | ## 1.8.2 (2018-07-26) 536 | 537 | ### Bug fixes: 538 | 539 | - Fix nested navigation tree and icon visibility [petschki] 540 | 541 | ## 1.8.1 (2018-04-08) 542 | 543 | ### Bug fixes: 544 | 545 | - Fix missing colons in less variables [pnicolli] 546 | 547 | ## 1.8 (2018-02-05) 548 | 549 | ### New features: 550 | 551 | - Pagination: made label and arrows easier to customise. [iham] 552 | 553 | ### Bug fixes: 554 | 555 | - fix overlapping of images when portlets exist 556 | https://github.com/plone/Products.CMFPlone/issues/2179 [fgrcon] 557 | - Fix horizontal scrollbar issue on some screen sizes. [agitator, 558 | davilima6] 559 | - Remove duplicate definition of container size variables [agitator, 560 | davilima6] 561 | - Added extra large & extra small break points [agitator, davilima6] 562 | 563 | ## 1.7.5 (2017-11-25) 564 | 565 | ### New features: 566 | 567 | - Add more HTML text based input types. [thet] 568 | - Fix disabled styles for readonly and disabled inputs, selects, 569 | textareas and fieldsets. [thet] 570 | - Define variable `cursor-disabled` in variables.less for better 571 | reuse. [thet] 572 | - Add theme classifier. [tmassman] 573 | 574 | ## 1.7.4 (2017-09-03) 575 | 576 | Breaking changes: 577 | 578 | - Simplify `contents.plone.less`. Contenttype icons now use the 579 | `::before` instead of `::after` pseudo element selector. [thet] 580 | 581 | ### New features: 582 | 583 | - Do not use nested selectors for contenttype-icons, so that they can 584 | be shown anywhere, also outside the Plone main wrappers. Still use 585 | specific styles for the toolbar. This solves a problem, where 586 | contenttype-icons couldn't be shown in DOM nodes injected by 587 | JavaScript outside the main Plone wrapper. [thet] 588 | 589 | ### Bug fixes: 590 | 591 | - Force state colors everywhere. Fixes #133. [thet] 592 | - Limited printed data to page content only #139. [enkidulan] 593 | - Fixed vertical align of nav items thumbs in navigation portlet 594 | #137. [enkidulan] 595 | - Change `:before` and `:after` to `::before` and `::after` to follow 596 | CSS3 specs. [thet] 597 | 598 | ## 1.7.3 (2017-07-04) 599 | 600 | ### New features: 601 | 602 | - Added Bootstrap-Dropdown default styles. [agitator] 603 | 604 | ## 1.7.2 (2017-07-03) 605 | 606 | ### New features: 607 | 608 | - remove paperclip fontello icon for file types (is being replaced by 609 | mimetype icons) remove superfluous bullets in portlets ... fix icons 610 | in select default page pop up 611 | [fgrcon] 612 | 613 | ### Bug fixes: 614 | 615 | - Fix position of checkboxes with long fieldhelp [agitator] 616 | 617 | ## 1.7.1 (2017-03-28) 618 | 619 | ### Bug fixes: 620 | 621 | - Added styles for input type number. [agitator] 622 | 623 | ## 1.7 (2017-02-20) 624 | 625 | ### Bug fixes: 626 | 627 | - Remove redundant PickADate rules. [thet] 628 | 629 | ## 1.6.23 (2017-01-02) 630 | 631 | ### Bug fixes: 632 | 633 | - fix weird nav scrollbars on mobile [agitator] 634 | 635 | ## 1.6.22 (2016-11-09) 636 | 637 | ### New features: 638 | 639 | - Add default content type icon to add menu only. Add missing npm 640 | dependency. [alecm] 641 | 642 | ### Bug fixes: 643 | 644 | - Unset select width and display [agitator] 645 | - Isolate the autotabs class for `ul` elements to 646 | `.autotabs ul.autotoc-nav`. Fixes an issue, where list elements in 647 | an inline TinyMCE content area were displayed wrong. [thet] 648 | - Fix buttons alignment in ordered selection widget [ale-rt] 649 | 650 | ## 1.6.21 (2016-06-07) 651 | 652 | ### Bug fixes: 653 | 654 | - Remove references to discarded offcanvas feature [davilima6] 655 | 656 | ## 1.6.20 (2016-05-25) 657 | 658 | ### Bug fixes: 659 | 660 | - Set news lead image background for transparent images 661 | 662 | [staeff] 663 | 664 | ## 1.6.19 (2016-05-15) 665 | 666 | New: 667 | 668 | - Add styles for manage portlets jumplist [davilima6] 669 | 670 | Fixes: 671 | 672 | - Use `.alert.status` selector as an alternative to `.portalMessage`. 673 | This class is used by the structure pattern. [thet] 674 | - Make search button grow with the search buttons text. Fixes an issue 675 | where translated button texts were not fitting into the button. 676 | [kkhan, thet] 677 | 678 | ## 1.6.18 (2016-03-31) 679 | 680 | New: 681 | 682 | - Add missing caret styles. [thet] 683 | - Extended form styles for input type="email". [agitator] 684 | - Isolate calendar portlet styles. [agitator] 685 | - Added invisible-grid table styles. [agitator] 686 | - Action control panel specific rendering. [ebrehault] 687 | 688 | Fixes: 689 | 690 | - Improved "feel" for the Site Setup (@@overview-controlpanel) 691 | 692 | [pigeonflight] 693 | - Fix code analysis errors reported by 694 | 695 | [gforcada] 696 | - Drop toolbar for anonymous users. 697 | - Fixed html validation: 698 | - the banner role is unnecessary for element header, 699 | - element main does not need a role attribute, 700 | - the contentinfo role is unnecessary for element footer. 701 | [maurits] 702 | 703 | ## 1.6.17 (2016-02-27) 704 | 705 | New: 706 | 707 | - Modernize pagination markup and switches deprecated `listingBar` CSS 708 | class to `pagination`. [davilima6] 709 | 710 | Fixes: 711 | 712 | - Move hero to content Issue 713 | [gyst] 714 | - Add `barceloneta-mixin-font` to the registerless profile. 715 | [pcdummy] 716 | - Inline `style` tags in head are no more skipped [keul] 717 | - Follow best practice for readme.rst [allcaps] 718 | - Center the leadimage on the modal window. Partially close 719 | [#321](https://github.com/plone/plone.app.contenttypes/issues/321). 720 | [keul] 721 | - Fix filenames for roboto-lightitalic.ttf, -mediumitalic.ttd and 722 | -bolditalic.ttf to match those in less files [datakurre] 723 | 724 | ## 1.6.16 (2016-01-08) 725 | 726 | Fixes: 727 | 728 | - Add 2014 Roboto [allcaps] 729 | - Fix @font-face. Load eot, svg and woff. [allcaps] 730 | - Add Roboto fonts with full glyph set [allcaps] 731 | - Add weight to all fonts (contributes to 732 | [#24](https://github.com/plone/plonetheme.barceloneta/issues/24)). 733 | [allcaps] 734 | - Restore the principal aka jumbotron background. [allcaps] 735 | - Fix sitemap layout. Drop the columns. (closes 736 | [#57](https://github.com/plone/plonetheme.barceloneta/issues/57)). 737 | [allcaps] 738 | - Remove trailing comma's in Grunt file. [allcaps] 739 | - Use border radius variables in portlets. [allcaps] 740 | - Mismatched properties and values. [allcaps] 741 | - Ignore diff of map file. [allcaps] 742 | 743 | ## 1.6.15 (2015-11-28) 744 | 745 | Fixes: 746 | 747 | - Fixed some css rules (missing clearfixes, aligning thumbs, ...). 748 | 749 | [fgrcon] 750 | - Added css-rules for thumbnails in listings and portlets. Related to 751 | [#1226](https://github.com/plone/Products.CMFPlone/issues/1226). 752 | [fgrcon] 753 | - Underline links in #content-core (criterion 1.4.1). [polyester] 754 | - Increased contrast, eliminated contrast-checker false positives. 755 | [polyester] 756 | - Title under thumb in albumview (closes 757 | [#1091](https://github.com/plone/Products.CMFPlone/issues/1091)). 758 | [polyester] 759 | - Don't include diazo bundle in backend theme. [instification] 760 | - Discard duplicated ids for columns (closes 761 | [#1105](https://github.com/plone/Products.CMFPlone/issues/1105)) 762 | [davilima6] 763 | - Add comment to alert on duplicate resource registering [davilima6] 764 | 765 | ## 1.6.14 (2015-09-27) 766 | 767 | - Fix in barceloneta word wrap in event listing. [sneridagh] 768 | 769 | ## 1.6.13 (2015-09-20) 770 | 771 | - Add spaces between checks and labels in search filter (closes 772 | [#982](https://github.com/plone/Products.CMFPlone/issues/982)). 773 | [rodfersou] 774 | - Center buttons on ordered selection lists (closes 775 | [#1017](https://github.com/plone/Products.CMFPlone/issues/1017)). 776 | [rodfersou] 777 | - Center checkboxes on user/group matrix (closes 778 | [#1003](https://github.com/plone/Products.CMFPlone/issues/1003)). 779 | [rodfersou] 780 | - Remove hero-element from index.html. Instead include a view @@hero. 781 | Fixes 782 | [pbauer] 783 | - Harmonize plone.app.discussion styles and discussion.plone.less 784 | styles refs (refs 785 | [#764](https://github.com/plone/Products.CMFPlone/issues/764)) 786 | [ichim-david] 787 | - Fix display of date widget arrows and footer buttons (refs 788 | [#891](https://github.com/plone/Products.CMFPlone/issues/891)). 789 | [ichim-david] 790 | - Clean Gruntfile.js, package.json and HOWTO_DEVELOP.rst of grunt 791 | plugins and information which this package no longer uses since 792 | commit 9f5434 [ichim-david] 793 | - provide basic table styles [vangheem] 794 | - Fixed (refs 795 | [#979](https://github.com/plone/Products.CMFPlone/issues/979) and 796 | [#981](https://github.com/plone/Products.CMFPlone/issues/981)) 797 | related to text not wrapping when unusual (and artificial) text with 798 | no white-space exists in the page [sneridagh] 799 | - Fixed styling problems when figcaption is very long [sneridagh] 800 | - Renamed the news.plone.less into behaviors.plone.less as it no 801 | longer make sense [sneridagh] 802 | 803 | ## 1.6.12 (2015-09-12) 804 | 805 | - Fix display of album_view title links (closes 806 | [#911](https://github.com/plone/Products.CMFPlone/issues/911)). 807 | [ichim-david] 808 | 809 | ## 1.6.11 (2015-09-08) 810 | 811 | - Bring back document byline (closes 812 | [#741](https://github.com/plone/Products.CMFPlone/issues/741)). 813 | [rodfersou] 814 | - Prefer rules with CSS selectors over XPath whenever possible 815 | [davilima6] 816 | 817 | ## 1.6.10 (2015-09-07) 818 | 819 | - Add a pared down version of barceloneta to include in your theme to 820 | save you making a custom backend theme. [djay] 821 | 822 | ## 1.6.9 (2015-08-22) 823 | 824 | - Hide searchbox, personaltools, breadcrumbs in print.css [gomez] 825 | - Updated font-weight on portlet headers [pigeonflight] 826 | - Update font-weight on portlet management items [vangheem] 827 | - Updated to index.html: link to plone.com opens in new window/tab 828 | [tkimnguyen] 829 | 830 | ## 1.6.8 (2015-07-18) 831 | 832 | - New control panel overview and portlet layout. [sneridagh] 833 | - Fixed bug in portlet navigation due to a CSS error. [sneridagh] 834 | - Fix problem with CSS leaking from the cp overview to the portlet. 835 | [sneridagh] 836 | - Fix map. [sneridagh] 837 | - Added a:hover styles for h1 h2 h3. [agitator] 838 | - Role for gigantic is complementary. [bloodbare] 839 | - Do not use absolute prefix to reference index.html to copying themes 840 | does not reference original theme file. [vangheem] 841 | - Toolbar fixes. [bloodbare] 842 | - Various mobile fixes. [agitator] 843 | - Update index.html. Change plone.org link to plone.com. 844 | [tkimnguyen] 845 | - Do not uppercase the colophon. [gforcada] 846 | 847 | ## 1.6.7 (2015-06-05) 848 | 849 | - provide more sane default widths and heights to select[multiple] 850 | and textareas [vangheem] 851 | - hide crud-form select header by default [vangheem] 852 | - remove loader since it is in mockup now [vangheem] 853 | - tweak manage portlets styles [vangheem] 854 | - fixed rules for copying content. [hvozdovych] 855 | 856 | ## 1.6.6 (2015-05-13) 857 | 858 | - provide some spacing between event summary and content [vangheem] 859 | 860 | ## 1.6.5 (2015-05-05) 861 | 862 | - Fix extending barceloneta with xi:include [pbauer] 863 | 864 | ## 1.6.4 (2015-05-04) 865 | 866 | - fix in and out widget button style [vangheme] 867 | - no one likes the star for required field label, try circle 868 | [vangheem] 869 | - add plone-loader style so you can add decent loader to javascript 870 | [vangheem] 871 | - add styles for search form [vangheem] 872 | - Cleanup: Remove unused resources. [thet] 873 | - Fix toggling navigation at mobile widths. [davisagli] 874 | - Remove sticky footer (it required a hardcoded height, which does not 875 | work for an element that may have varying content). [davisagli] 876 | - Add clearfix to `.row`. [davisagli] 877 | - pat-modal pattern has been renamed to pat-plone-modal [jcbrand] 878 | 879 | ## 1.6.3 (2015-03-26) 880 | 881 | - Add language selector widget [bloodbare] 882 | 883 | ## 1.6.2 (2015-03-21) 884 | 885 | - Change font family of `form.widgets.IRichText.text` textareas to 886 | monospace. This affects the texteditor only in non-Richtext mode and 887 | helps editing e.g. Restructured Text. [thet] 888 | - Change `min-height` of textarea fields from auto to `4em` 889 | (description, etc.), respectively `12em` for IRichText widgets (e.g. 890 | when displayed without a visual editor). [thet] 891 | - Return to being a clean Diazo theme so that we are a safe starting 892 | point for people building their own themes and a good practice 893 | example that works when copying the theme in the TTW theme editor. 894 | [optilude, bloodbare] 895 | 896 | ## 1.6.1 (2014-11-01) 897 | 898 | - Remind committers to add changelog entries. I'm not your monkey. 899 | [esteele] 900 | 901 | ## 1.6.0 (2014-04-20) 902 | 903 | - Initial release [esteele] 904 | -------------------------------------------------------------------------------- /CONTRIBUTING.rst: -------------------------------------------------------------------------------- 1 | Please see https://6.docs.plone.org/contributing/core/ 2 | -------------------------------------------------------------------------------- /HOWTO_DEVELOP.md: -------------------------------------------------------------------------------- 1 | ## Install package manager 2 | 3 | ### pnpm 4 | 5 | Using corepack: 6 | 7 | ```shell 8 | corepack prepare pnpm@latest --activate 9 | ``` 10 | 11 | or using `npm`: 12 | 13 | ```shell 14 | npm install -g pnpm@latest 15 | ``` 16 | 17 | Verify the latest version. 18 | 19 | ```shell 20 | pnpm --version 21 | ``` 22 | 23 | ### Install dependencies 24 | 25 | In order to develop plonetheme.barceloneta you need to execute on the root of the package:: 26 | 27 | ```shell 28 | pnpm install 29 | ``` 30 | 31 | You can also updated dependencies with 32 | 33 | ```shell 34 | pnpm update 35 | ``` 36 | 37 | or you can inspect latest versions of dependencies with 38 | 39 | ```shell 40 | pnpm update --interactive --latest 41 | ``` 42 | 43 | After executing this you can run the following command to watch for any scss changes 44 | in the path `plonetheme.barceloneta/scss`:: 45 | 46 | ```shell 47 | pnpm watch 48 | ``` 49 | 50 | This will make sure that the many .scss files are compiled to .css on the fly 51 | and then copied over to the theme. 52 | 53 | If you simply want to compile all resources before a release run:: 54 | 55 | ```shell 56 | pnpm build 57 | ``` 58 | 59 | 60 | ## Release Instructions 61 | 62 | ```{note} 63 | You need the correct access rights to publish to npm or pypi. 64 | ``` 65 | 66 | - First create a pypi release using zest.releaser. This tool also creates the correct tag based on the setup.py version. 67 | - After the pypi release edit the release version in package.json. 68 | Or better yet, run something like `pnpm version 3.2.0-alpha.5` 69 | - Run: `pnpm publish` 70 | 71 | 72 | ### Pre-Releases 73 | 74 | Based on https://survivejs.com/maintenance/packaging/publishing/#publishing-a-pre-release-version 75 | 76 | - Change version in package.json to corresponding version in setup.py 77 | - You can also use `pnpm version 3.0.0-beta1` - This will change the version in package.json and create a git tag. 78 | - `pnpm publish --tag beta` - Publish the package under beta tag. 79 | - Mark beta release as latest with `npm dist-tag add @plone/plonetheme-barceloneta-base@3.0.0-beta1 latest`` 80 | 81 | To consume the test version, users have to use `pnpm install @plone/plonetheme-barceloneta-base@beta`. 82 | 83 | 84 | ## Theme 85 | 86 | See `plonetheme.barceloneta/src/plonetheme/barceloneta/theme/rules.xml` for the relevant Diazo theme rules. 87 | 88 | 89 | ## Fonts 90 | 91 | Read `plonetheme.barceloneta/src/plonetheme/barceloneta/theme/roboto/README.rst` if you need to update the shipped fonts. 92 | -------------------------------------------------------------------------------- /MANIFEST.in: -------------------------------------------------------------------------------- 1 | recursive-include src * 2 | include *.rst *.js *.json *.html *.md 3 | global-exclude *.pyc 4 | prune design 5 | include pyproject.toml 6 | recursive-exclude news * 7 | exclude news 8 | # npm/yarn world excludes 9 | prune scss 10 | exclude yarn.lock 11 | exclude package.json 12 | exclude postcss.config.js 13 | exclude .stylelint* 14 | exclude pnpm-lock.yaml 15 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Barceloneta 2 | 3 | Classic-UI theme resources for Plone 6 - based on Bootstrap 5 4 | 5 | This package provides scss resources to build your own theme based on the Plone default theme for (backend rendered) Classic UI of Plone. 6 | 7 | Latest version on [npmjs.com](https://www.npmjs.com/package/@plone/plonetheme-barceloneta-base) 8 | 9 | ## Documentation 10 | The documentation for `plonetheme.barceloneta` is part of the official Plone documentation, [Classic UI theming based on Barceloneta](https://6.docs.plone.org/classic-ui/theming/barceloneta.html). 11 | 12 | ## Changelog 13 | https://github.com/plone/plonetheme.barceloneta/blob/master/CHANGES.md 14 | 15 | ## Source Code and Contribution 16 | 17 | ### Contributors 18 | 19 | Please read the document [Contributing to Plone](https://6.docs.plone.org/contributing/index.html). 20 | 21 | Also consult the development notes [Develop Barceloneta Theme](https://github.com/plone/plonetheme.barceloneta/blob/master/HOWTO_DEVELOP.md). 22 | 23 | ### Source-Code 24 | 25 | Plone code repository hosted at Github https://github.com/plone/plonetheme.barceloneta. 26 | 27 | ### Issues 28 | 29 | Please use the [Issue-Tracker](https://github.com/plone/plonetheme.barceloneta/issues) 30 | -------------------------------------------------------------------------------- /news/+fix-tiny-padding.bugfix.md: -------------------------------------------------------------------------------- 1 | Add padding to the TinyMCE‌ content area. 2 | 3 | Add a padding to the TinyMCE‌ content area to make the cursor visible and avoid 4 | text touching the border. 5 | [thet] 6 | -------------------------------------------------------------------------------- /news/+mobilemenu.feature.md: -------------------------------------------------------------------------------- 1 | Add a bit more separation between the menu and the search field in the mobile menu. 2 | [thet] 3 | -------------------------------------------------------------------------------- /news/.changelog_template.jinja: -------------------------------------------------------------------------------- 1 | {% if sections[""] %} 2 | {% for category, val in definitions.items() if category in sections[""] %} 3 | 4 | ### {{ definitions[category]['name'] }} 5 | 6 | {% for text, values in sections[""][category].items() %} 7 | - {{ text }} {{ values|join(', ') }} 8 | {% endfor %} 9 | 10 | {% endfor %} 11 | {% else %} 12 | No significant changes. 13 | 14 | 15 | {% endif %} -------------------------------------------------------------------------------- /news/.gitkeep: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@plone/plonetheme-barceloneta-base", 3 | "description": "Plone Theme Barceloneta Resources", 4 | "version": "3.3.1", 5 | "files": [ 6 | "/scss", 7 | "/src/plonetheme/barceloneta/theme/tinymce/*.css" 8 | ], 9 | "repository": { 10 | "type": "git", 11 | "url": "git@github.com:plone/plonetheme.barceloneta.git" 12 | }, 13 | "bugs": { 14 | "url": "https://github.com/plone/plonetheme.barceloneta/issues", 15 | "email": "plone-developers@lists.sourceforge.net" 16 | }, 17 | "homepage": "https://plone.org", 18 | "license": "MIT", 19 | "keywords": [ 20 | "plone", 21 | "front-end", 22 | "sass", 23 | "css" 24 | ], 25 | "devDependencies": { 26 | "autoprefixer": "^10.4.21", 27 | "clean-css-cli": "^5.6.3", 28 | "nodemon": "^3.1.10", 29 | "npm-run-all2": "^8.0.4", 30 | "postcss": "^8.5.6", 31 | "postcss-cli": "^11.0.1", 32 | "sass": "1.77.6", 33 | "stylelint": "^16.23.1", 34 | "stylelint-config-twbs-bootstrap": "^16.1.0", 35 | "tinymce": "^7.9.1" 36 | }, 37 | "scripts": { 38 | "watch": "nodemon --watch scss/ --ext scss --exec \"npm run css-main\"", 39 | "build": "npm-run-all css-compile-main css-prefix-main css-minify-main copy-tinymce-ui-css css-compile-toolbar css-minify-toolbar", 40 | "css-main": "npm-run-all css-compile-main css-prefix-main css-minify-main", 41 | "css-compile-main": "sass --load-path=node_modules --style expanded --source-map --embed-sources --no-error-css scss/barceloneta.scss:src/plonetheme/barceloneta/theme/css/barceloneta.css", 42 | "css-prefix-main": "postcss --config postcss.config.js --replace \"src/plonetheme/barceloneta/theme/css/*.css\" \"!src/plonetheme/barceloneta/theme/css/*.min.css\"", 43 | "css-minify-main": "cleancss -O1 --format breakWith=lf --with-rebase --source-map --source-map-inline-sources --output src/plonetheme/barceloneta/theme/css/barceloneta.min.css src/plonetheme/barceloneta/theme/css/barceloneta.css", 44 | "css-compile-toolbar": "sass --load-path=node_modules --style expanded --source-map --embed-sources --no-error-css scss/barceloneta-toolbar.scss:src/plonetheme/barceloneta/theme/css/barceloneta-toolbar.css", 45 | "css-minify-toolbar": "cleancss -O1 --format breakWith=lf --with-rebase --source-map --source-map-inline-sources --output src/plonetheme/barceloneta/theme/css/barceloneta-toolbar.min.css src/plonetheme/barceloneta/theme/css/barceloneta-toolbar.css", 46 | "css-lint": "stylelint \"scss/**/*.scss\" --cache --cache-location .cache/.stylelintcache", 47 | "copy-tinymce-ui-css": "cp \"node_modules/tinymce/skins/ui/oxide/content.css\" \"src/plonetheme/barceloneta/theme/tinymce/tinymce-ui-content.css\"" 48 | }, 49 | "dependencies": { 50 | "bootstrap": "5.3.8" 51 | }, 52 | "packageManager": "pnpm@10.12.1+sha512.f0dda8580f0ee9481c5c79a1d927b9164f2c478e90992ad268bbb2465a736984391d6333d2c327913578b2804af33474ca554ba29c04a8b13060a717675ae3ac" 53 | } 54 | -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | module.exports = (ctx) => ({ 4 | map: ctx.file.dirname.includes('examples') ? false : { 5 | inline: false, 6 | annotation: true, 7 | sourcesContent: true 8 | }, 9 | plugins: { 10 | autoprefixer: { 11 | cascade: false 12 | } 13 | } 14 | }) 15 | -------------------------------------------------------------------------------- /pyproject.toml: -------------------------------------------------------------------------------- 1 | # Generated from: 2 | # https://github.com/plone/meta/tree/main/src/plone/meta/default 3 | # See the inline comments on how to expand/tweak this configuration file 4 | [build-system] 5 | requires = ["setuptools>=68.2,<80", "wheel"] 6 | 7 | [tool.towncrier] 8 | directory = "news/" 9 | filename = "CHANGES.md" 10 | start_string = "\n" 11 | title_format = "## {version} ({project_date})" 12 | template = "news/.changelog_template.jinja" 13 | underlines = ["", "", ""] 14 | 15 | [[tool.towncrier.type]] 16 | directory = "breaking" 17 | name = "Breaking changes:" 18 | showcontent = true 19 | 20 | [[tool.towncrier.type]] 21 | directory = "feature" 22 | name = "New features:" 23 | showcontent = true 24 | 25 | [[tool.towncrier.type]] 26 | directory = "bugfix" 27 | name = "Bug fixes:" 28 | showcontent = true 29 | 30 | [[tool.towncrier.type]] 31 | directory = "internal" 32 | name = "Internal:" 33 | showcontent = true 34 | 35 | [[tool.towncrier.type]] 36 | directory = "documentation" 37 | name = "Documentation:" 38 | showcontent = true 39 | 40 | [[tool.towncrier.type]] 41 | directory = "tests" 42 | name = "Tests:" 43 | showcontent = true 44 | 45 | ## 46 | # Add extra configuration options in .meta.toml: 47 | # [pyproject] 48 | # towncrier_extra_lines = """ 49 | # extra_configuration 50 | # """ 51 | ## 52 | 53 | [tool.isort] 54 | profile = "plone" 55 | 56 | ## 57 | # Add extra configuration options in .meta.toml: 58 | # [pyproject] 59 | # isort_extra_lines = """ 60 | # extra_configuration 61 | # """ 62 | ## 63 | 64 | [tool.black] 65 | target-version = ["py38"] 66 | 67 | ## 68 | # Add extra configuration options in .meta.toml: 69 | # [pyproject] 70 | # black_extra_lines = """ 71 | # extra_configuration 72 | # """ 73 | ## 74 | 75 | [tool.codespell] 76 | ignore-words-list = "discreet,assertin,thet," 77 | skip = "*.po,*.css.map,pnpm-lock.yaml" 78 | ## 79 | # Add extra configuration options in .meta.toml: 80 | # [pyproject] 81 | # codespell_ignores = "foo,bar" 82 | # codespell_skip = "*.po,*.map,package-lock.json" 83 | ## 84 | 85 | [tool.dependencychecker] 86 | Zope = [ 87 | # Zope own provided namespaces 88 | 'App', 'OFS', 'Products.Five', 'Products.OFSP', 'Products.PageTemplates', 89 | 'Products.SiteAccess', 'Shared', 'Testing', 'ZPublisher', 'ZTUtils', 90 | 'Zope2', 'webdav', 'zmi', 91 | # ExtensionClass own provided namespaces 92 | 'ExtensionClass', 'ComputedAttribute', 'MethodObject', 93 | # Zope dependencies 94 | 'AccessControl', 'Acquisition', 'AuthEncoding', 'beautifulsoup4', 'BTrees', 95 | 'cffi', 'Chameleon', 'DateTime', 'DocumentTemplate', 96 | 'MultiMapping', 'multipart', 'PasteDeploy', 'Persistence', 'persistent', 97 | 'pycparser', 'python-gettext', 'pytz', 'RestrictedPython', 'roman', 98 | 'soupsieve', 'transaction', 'waitress', 'WebOb', 'WebTest', 'WSGIProxy2', 99 | 'z3c.pt', 'zc.lockfile', 'ZConfig', 'zExceptions', 'ZODB', 'zodbpickle', 100 | 'zope.annotation', 'zope.browser', 'zope.browsermenu', 'zope.browserpage', 101 | 'zope.browserresource', 'zope.cachedescriptors', 'zope.component', 102 | 'zope.configuration', 'zope.container', 'zope.contentprovider', 103 | 'zope.contenttype', 'zope.datetime', 'zope.deferredimport', 104 | 'zope.deprecation', 'zope.dottedname', 'zope.event', 'zope.exceptions', 105 | 'zope.filerepresentation', 'zope.globalrequest', 'zope.hookable', 106 | 'zope.i18n', 'zope.i18nmessageid', 'zope.interface', 'zope.lifecycleevent', 107 | 'zope.location', 'zope.pagetemplate', 'zope.processlifetime', 'zope.proxy', 108 | 'zope.ptresource', 'zope.publisher', 'zope.schema', 'zope.security', 109 | 'zope.sequencesort', 'zope.site', 'zope.size', 'zope.structuredtext', 110 | 'zope.tal', 'zope.tales', 'zope.testbrowser', 'zope.testing', 111 | 'zope.traversing', 'zope.viewlet' 112 | ] 113 | 'Products.CMFCore' = [ 114 | 'docutils', 'five.localsitemanager', 'Missing', 'Products.BTreeFolder2', 115 | 'Products.GenericSetup', 'Products.MailHost', 'Products.PythonScripts', 116 | 'Products.StandardCacheManagers', 'Products.ZCatalog', 'Record', 117 | 'zope.sendmail', 'Zope' 118 | ] 119 | 'plone.base' = [ 120 | 'plone.batching', 'plone.registry', 'plone.schema','plone.z3cform', 121 | 'Products.CMFCore', 'Products.CMFDynamicViewFTI', 122 | ] 123 | python-dateutil = ['dateutil'] 124 | pytest-plone = ['pytest', 'zope.pytestlayer', 'plone.testing', 'plone.app.testing'] 125 | 126 | ## 127 | # Add extra configuration options in .meta.toml: 128 | # [pyproject] 129 | # dependencies_ignores = "['zestreleaser.towncrier']" 130 | # dependencies_mappings = [ 131 | # "gitpython = ['git']", 132 | # "pygithub = ['github']", 133 | # ] 134 | ## 135 | 136 | [tool.check-manifest] 137 | ignore = [ 138 | ".editorconfig", 139 | ".flake8", 140 | ".meta.toml", 141 | ".pre-commit-config.yaml", 142 | "dependabot.yml", 143 | "mx.ini", 144 | "tox.ini", 145 | 146 | ] 147 | 148 | ## 149 | # Add extra configuration options in .meta.toml: 150 | # [pyproject] 151 | # check_manifest_ignores = """ 152 | # "*.map.js", 153 | # "*.pyc", 154 | # """ 155 | # check_manifest_extra_lines = """ 156 | # ignore-bad-ideas = [ 157 | # "some/test/file/PKG-INFO", 158 | # ] 159 | # """ 160 | ## 161 | 162 | 163 | ## 164 | # Add extra configuration options in .meta.toml: 165 | # [pyproject] 166 | # extra_lines = """ 167 | # _your own configuration lines_ 168 | # """ 169 | ## 170 | -------------------------------------------------------------------------------- /scss/_alerts.scss: -------------------------------------------------------------------------------- 1 | .alert { 2 | position: relative; 3 | padding: 1rem 1rem; 4 | border: 3px solid transparent; 5 | border-radius: 0.25rem; 6 | animation-fill-mode: forwards !important; 7 | animation-delay: 1.0s !important; 8 | animation: 1.5s ease-in alert-animation; 9 | 10 | a { 11 | font-weight: 700; 12 | position: relative; 13 | text-decoration: none; 14 | color: var(--#{$prefix}alert-color); 15 | 16 | &::after { 17 | content: ''; 18 | position: absolute; 19 | height: 2px; 20 | left: 0px; 21 | bottom: 0px; 22 | background-color: var(--#{$prefix}alert-color); 23 | animation: 1.6s ease-in alert-link-animation; 24 | animation-delay: 3s; 25 | animation-fill-mode: forwards; 26 | } 27 | } 28 | } 29 | 30 | @keyframes alert-animation { 31 | 0% { 32 | border-color: var(--#{$prefix}alert-bg); 33 | } 34 | 50% { 35 | border-color: var(--#{$prefix}alert-border-secondary); 36 | } 37 | 100% { 38 | border-color: var(--#{$prefix}alert-border-color); 39 | } 40 | } 41 | 42 | @keyframes alert-link-animation { 43 | 0% { 44 | width: 0%; 45 | opacity: 0; 46 | } 47 | 48 | 100% { 49 | width: 100%; 50 | opacity: 1; 51 | } 52 | } 53 | 54 | .alert-heading { 55 | color: inherit; 56 | } 57 | 58 | .alert-dismissible { 59 | padding-right: 3rem; 60 | 61 | .btn-close { 62 | position: absolute; 63 | top: 0; 64 | right: 0; 65 | z-index: 2; 66 | padding: 1.25rem 1rem; 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /scss/_breadcrumbs.scss: -------------------------------------------------------------------------------- 1 | //*// BREADCRUMBS //*// 2 | 3 | #portal-breadcrumbs { 4 | background-color: $breadcrumb-bg; 5 | margin-bottom: $breadcrumb-margin-bottom; 6 | 7 | .breadcrumb { 8 | background-color: transparent; 9 | } 10 | 11 | } -------------------------------------------------------------------------------- /scss/_cards.scss: -------------------------------------------------------------------------------- 1 | .card-light { 2 | border: none; 3 | 4 | .card-body { 5 | padding: 0; 6 | } 7 | } 8 | 9 | .card-icon { 10 | font-size: 2em; 11 | text-align: center; 12 | padding-top: 1.25rem; 13 | } 14 | -------------------------------------------------------------------------------- /scss/_collapsible.scss: -------------------------------------------------------------------------------- 1 | // Extra styles to the Bootstrap accordion to work with a details/summary based collapsible. 2 | // The structure should be like this: 3 | // 4 | //
5 | //
6 | // 7 | // HEADER 8 | // 9 | //
10 | // CONTENT 11 | //
12 | //
13 | //
14 | 15 | // Let the default details button not look like a button. 16 | // raise specificity with double class selector. 17 | details .accordion-button.accordion-button { 18 | background-color: var(--#{$prefix}accordion-bg); 19 | } 20 | 21 | // Apply accordion styles to the details button element. 22 | details[open] .accordion-button { 23 | color: var(--#{$prefix}accordion-active-color); 24 | background-color: var(--#{$prefix}accordion-active-bg); 25 | box-shadow: inset 0 calc(-1 * var(--#{$prefix}accordion-border-width)) 0 var(--#{$prefix}accordion-border-color); // stylelint-disable-line function-disallowed-list 26 | 27 | &::after { 28 | background-image: var(--#{$prefix}accordion-btn-active-icon); 29 | transform: var(--#{$prefix}accordion-btn-icon-transform); 30 | } 31 | } 32 | 33 | // Fix the details button arror to reflect open/closed states correctly. 34 | details:not([open]) .accordion-button::after { 35 | transform: none; 36 | } 37 | -------------------------------------------------------------------------------- /scss/_comments.scss: -------------------------------------------------------------------------------- 1 | .discussion { 2 | 3 | margin-bottom: 2em; 4 | 5 | .comment { 6 | padding: 1em; 7 | margin-bottom: 1em; 8 | border: 1px solid $gray-300; 9 | 10 | .comment-image { 11 | img { 12 | width: 50px; 13 | height: 50px; 14 | } 15 | } 16 | 17 | .actions-workflow { 18 | margin-left: 0.5em; 19 | } 20 | 21 | .comment-action { 22 | margin-left: 0.25em; 23 | } 24 | 25 | } 26 | 27 | .level-1 { 28 | margin-left: 1em; 29 | } 30 | 31 | .level-2 { 32 | margin-left: 2em; 33 | } 34 | 35 | .level-3 { 36 | margin-left: 3em; 37 | } 38 | 39 | .level-4 { 40 | margin-left: 4em; 41 | } 42 | 43 | .level-5 { 44 | margin-left: 5em; 45 | } 46 | 47 | .level-6 { 48 | margin-left: 6em; 49 | } 50 | 51 | .level-7 { 52 | margin-left: 7em; 53 | } 54 | 55 | .level-8 { 56 | margin-left: 8em; 57 | } 58 | 59 | .level-9 { 60 | margin-left: 9em; 61 | } 62 | 63 | .level-10 { 64 | margin-left: 10em; 65 | } 66 | 67 | } -------------------------------------------------------------------------------- /scss/_content.scss: -------------------------------------------------------------------------------- 1 | main { 2 | margin-bottom: 1.5rem; 3 | } 4 | 5 | h1 { 6 | margin-bottom: 1rem; 7 | } 8 | 9 | .lead { 10 | margin-bottom: 2rem; 11 | } 12 | 13 | article { 14 | >header { 15 | margin-bottom: 2rem; 16 | } 17 | } 18 | 19 | .alert { 20 | margin-bottom: 2rem; 21 | } 22 | 23 | #content-core { 24 | margin-bottom: 2rem; 25 | } 26 | 27 | #section-byline { 28 | margin-bottom: 1rem; 29 | } 30 | 31 | #section-image { 32 | margin-bottom: 1rem; 33 | } 34 | 35 | #section-leadimage { 36 | margin-bottom: 2rem; 37 | } 38 | 39 | #section-next-prev { 40 | margin-bottom: 2rem; 41 | } 42 | 43 | #section-document-actions { 44 | margin-bottom: 2rem; 45 | } 46 | 47 | #section-rights { 48 | margin-bottom: 1rem; 49 | } 50 | 51 | #section-contributors { 52 | margin-bottom: 1rem; 53 | // padding: 1rem; 54 | // background: #eee; 55 | } 56 | 57 | #section-related { 58 | margin-top: 3rem; 59 | 60 | .section-heading { 61 | @include font-size($h5-font-size); 62 | margin-bottom: $headings-margin-bottom; 63 | font-family: $headings-font-family; 64 | font-weight: $headings-font-weight; 65 | line-height: $headings-line-height; 66 | 67 | } 68 | 69 | .media { 70 | margin-bottom: 1rem; 71 | } 72 | } 73 | 74 | #section-category { 75 | margin-bottom: 2rem; 76 | } 77 | 78 | .meta-icon { 79 | font-size: 1.5em; 80 | line-height: 1; 81 | } 82 | 83 | .event-summary { 84 | margin-bottom: $spacer * 2; 85 | 86 | .meta-icon { 87 | margin-right: $spacer * .5; 88 | margin-top: -0.2em; 89 | } 90 | 91 | .meta-label { 92 | display: none; 93 | } 94 | } 95 | 96 | .section { 97 | margin-bottom: 1em; 98 | 99 | header { 100 | font-weight: bold; 101 | margin-bottom: 1em; 102 | } 103 | 104 | } 105 | 106 | .section-main { 107 | text-align: center; 108 | padding: 2em 1em 1em 1em; 109 | 110 | } 111 | 112 | .section-actions { 113 | text-align: center; 114 | margin-bottom: 3em; 115 | } 116 | -------------------------------------------------------------------------------- /scss/_content_base.scss: -------------------------------------------------------------------------------- 1 | img, 2 | picture { 3 | max-width: 100%; 4 | height: auto; 5 | } 6 | 7 | .text-columns-2 { 8 | columns: 2; 9 | } 10 | 11 | .text-columns-3 { 12 | columns: 3; 13 | } 14 | 15 | figure{ 16 | display: table; 17 | } 18 | figcaption{ 19 | display: table-caption; 20 | caption-side: bottom; 21 | } 22 | 23 | .image-right { 24 | @extend .mx-auto; 25 | @extend .my-2; 26 | 27 | &.picture-variant-large { 28 | @extend .float-xxl-end !optional; 29 | @extend .ms-xxl-2 !optional; 30 | } 31 | 32 | &.picture-variant-medium { 33 | @extend .float-xl-end !optional; 34 | @extend .ms-xl-2 !optional; 35 | } 36 | 37 | &.picture-variant-small { 38 | @extend .float-md-end !optional; 39 | @extend .ms-md-2 !optional; 40 | } 41 | } 42 | 43 | .image-left { 44 | @extend .mx-auto; 45 | @extend .my-2; 46 | 47 | &.picture-variant-large { 48 | @extend .float-xxl-start !optional; 49 | @extend .me-xxl-2 !optional; 50 | } 51 | 52 | &.picture-variant-medium { 53 | @extend .float-xl-start !optional; 54 | @extend .me-xl-2 !optional; 55 | } 56 | 57 | &.picture-variant-small { 58 | @extend .float-md-start !optional; 59 | @extend .me-md-2 !optional; 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /scss/_content_tables.scss: -------------------------------------------------------------------------------- 1 | table.listing{ 2 | @extend .table; 3 | } 4 | 5 | table.listing-compact{ 6 | @extend .table; 7 | @extend .table-sm; 8 | } 9 | 10 | table.plain{ 11 | @extend .table; 12 | @extend .table-bordered; 13 | } 14 | 15 | table.invisible-grid{ 16 | @extend .table; 17 | @extend .table-borderless; 18 | } 19 | -------------------------------------------------------------------------------- /scss/_controlpanels.scss: -------------------------------------------------------------------------------- 1 | //*// Site Setup 2 | 3 | // todo convert "portlet" into several cards 4 | 5 | body[class*="-controlpanel"] { 6 | 7 | .controlPanel, 8 | article { 9 | >header { 10 | margin-bottom: 2rem; 11 | } 12 | 13 | .configlets { 14 | .overview-icon { 15 | width: 3rem; 16 | height: 3rem; 17 | } 18 | 19 | .btn .bi, 20 | .btn .icon { 21 | margin-right: 0.25rem; 22 | } 23 | } 24 | } 25 | 26 | .prefs-configlet { 27 | a { 28 | display: flex; 29 | align-items: center; 30 | 31 | .icon { 32 | margin-right: 0.5rem; 33 | } 34 | } 35 | } 36 | 37 | .custom-select { 38 | width: auto; 39 | display: block; 40 | } 41 | 42 | textarea.form-control { 43 | height: 10rem; 44 | } 45 | } 46 | 47 | .template-usergroup-userprefs, 48 | .template-usergroup-groupprefs { 49 | table { 50 | th.rotate { 51 | height: 12rem; 52 | padding-bottom: 1rem; 53 | white-space: nowrap; 54 | 55 | &>div { 56 | transform: 57 | /* Magic Numbers */ 58 | // translate(25px, 51px) 59 | /* 45 is really 360 - 45 */ 60 | // rotate(315deg); 61 | rotate(270deg); 62 | width: 30px; 63 | } 64 | } 65 | 66 | .listingcheckbox { 67 | width: 30px; 68 | } 69 | } 70 | } -------------------------------------------------------------------------------- /scss/_footer.scss: -------------------------------------------------------------------------------- 1 | #portal-footer-wrapper { 2 | background-color: $footer-bg; 3 | color: $footer-color; 4 | text-align: center; 5 | padding: $spacer; 6 | 7 | .copyright { 8 | padding: $spacer * .5; 9 | } 10 | 11 | .colophon { 12 | padding: $spacer * .5; 13 | } 14 | 15 | .site-actions { 16 | padding: $spacer * .5; 17 | 18 | ul { 19 | padding: 0; 20 | margin: 0; 21 | 22 | li { 23 | display: inline; 24 | margin: 0 $spacer * .5; 25 | } 26 | 27 | } 28 | 29 | } 30 | 31 | } -------------------------------------------------------------------------------- /scss/_forms.scss: -------------------------------------------------------------------------------- 1 | .pat-autotoc.autotabs { 2 | .autotoc-nav { 3 | margin-bottom: $spacer; 4 | } 5 | } 6 | 7 | // Labels wrapping inputs 8 | label:has(input, select, textarea) { 9 | display: block; 10 | } 11 | label input, 12 | label select, 13 | label textarea { 14 | margin: 0.5rem 0; 15 | display: block; 16 | } 17 | 18 | // Required style on input fields and form tabs 19 | label .required:after, 20 | label.required:after, 21 | .autotoc-nav .required:after { 22 | display: inline-block; 23 | color: $danger; 24 | content: "•"; 25 | transform:scale(2); 26 | margin-left: 0.3rem; 27 | } 28 | 29 | // Invalid on form tabs 30 | // Override specific styles from pat-autotoc and provide a general selector, 31 | // if autotoc is used with different UI elements. 32 | .pat-autotoc.autotabs .autotoc-nav a.invalid, 33 | .pat-autotoc.autotabs .autotoc-nav a.active.invalid, 34 | .autotoc-nav .invalid { 35 | color: $danger; 36 | font-style: italic; 37 | } 38 | 39 | /* show validation feedback always since it comes from 40 | server-side rendering or pat-validation 41 | */ 42 | .invalid-feedback, 43 | .valid-feedback { 44 | display: block; 45 | } 46 | 47 | .form-group { 48 | .select2-container { 49 | display: block; 50 | } 51 | } 52 | 53 | .formControls { 54 | margin-top: $spacer * 1.5; 55 | margin-bottom: $spacer * 0.5; 56 | } 57 | 58 | form.pat-autotoc > .formControls { 59 | background-color: var(--#{$prefix}body-bg); 60 | padding: $spacer 0; 61 | border-top: solid 1px var(--#{$prefix}border-color); 62 | 63 | /* sticky bottom */ 64 | @extend .sticky-bottom; 65 | } 66 | 67 | /* relateditems widget */ 68 | .pattern-relateditems-result { 69 | .pattern-relateditems-result-browse-wrapper { 70 | .pattern-relateditems-result-browse { 71 | font-size: $font-size-base; 72 | } 73 | } 74 | } 75 | 76 | .select2-results .select2-highlighted { 77 | color: $link-hover-color; 78 | } 79 | 80 | .pattern-relateditems-item-title, 81 | .pattern-relateditems-result-title { 82 | &, 83 | &[class*="contenttype-"]:before { 84 | font-size: $font-size-lg; 85 | } 86 | } 87 | 88 | // Diff styles for CMFEditions from old compare.css 89 | body.template-history { 90 | .inline-diff { 91 | font-size: 100%; 92 | padding: 1em; 93 | } 94 | 95 | .diff-head { 96 | padding-bottom: 1em; 97 | } 98 | 99 | .diff-legend-label { 100 | border-style: solid; 101 | border-width: 1px; 102 | text-align: center; 103 | } 104 | 105 | #diff-legend { 106 | position: relative; 107 | } 108 | 109 | #diff-table { 110 | float: right; 111 | width: 22.5em; 112 | text-align: left; 113 | padding: 0px; 114 | margin: 0px; 115 | } 116 | 117 | .delete { 118 | background-color: $red-200; 119 | padding: 0 0.2em 0 0.2em; 120 | } 121 | 122 | .insert { 123 | background-color: $teal-200; 124 | padding: 0 0.2em 0 0.2em; 125 | } 126 | 127 | .tagInsert { 128 | background-color: $success; 129 | font-weight: bold; 130 | padding: 0 0.2em 0 0.2em; 131 | color: white; 132 | } 133 | 134 | .tagDelete { 135 | background-color: $danger; 136 | font-weight: bold; 137 | padding: 0 0.2em 0 0.2em; 138 | color: white; 139 | } 140 | 141 | .diff_header { 142 | background-color: #e0e0e0; 143 | } 144 | 145 | td.diff_header { 146 | text-align: right; 147 | } 148 | 149 | .diff_next { 150 | background-color: #c0c0c0; 151 | } 152 | 153 | .diff_add { 154 | background-color: $teal-200; 155 | } 156 | 157 | .diff_chg { 158 | background-color: $yellow-200; 159 | } 160 | 161 | .diff_sub { 162 | background-color: $red-200; 163 | } 164 | 165 | table.diff td { 166 | border-top: 1px solid $gray-300; 167 | } 168 | } 169 | 170 | .tox .tox-edit-area { 171 | /* Spacing between editor border and text to improve readability and make 172 | the cursor visible. */ 173 | padding: 1em; 174 | } 175 | -------------------------------------------------------------------------------- /scss/_grid.scss: -------------------------------------------------------------------------------- 1 | // @include media-breakpoint-up(xs) { 2 | // body:before { 3 | // content: "xs"; 4 | // } 5 | // } 6 | // @include media-breakpoint-up(sm) { 7 | // body:before { 8 | // content: "sm"; 9 | // } 10 | // } 11 | // @include media-breakpoint-up(md) { 12 | // body:before { 13 | // content: "md"; 14 | // } 15 | // } 16 | // @include media-breakpoint-up(lg) { 17 | // body:before { 18 | // content: "lg"; 19 | // } 20 | // } 21 | // @include media-breakpoint-up(xl) { 22 | // body:before { 23 | // content: "xl"; 24 | // } 25 | // } 26 | // @include media-breakpoint-up(xxl) { 27 | // body:before { 28 | // content: "xxl"; 29 | // } 30 | // } 31 | 32 | // -- Bootstrap grid definitions -- 33 | // content-column only: 34 | body.col-content { 35 | #portal-column-content { 36 | @include make-col-ready(); 37 | @include make-col(12); 38 | } 39 | } 40 | 41 | // content-column + col-two: 42 | body.col-two.col-content { 43 | #portal-column-content { 44 | @include make-col-ready(); 45 | 46 | @include media-breakpoint-up(md) { 47 | @include make-col(12); 48 | } 49 | 50 | @include media-breakpoint-up(lg) { 51 | @include make-col(9); 52 | } 53 | } 54 | 55 | #portal-column-two { 56 | @include make-col-ready(); 57 | 58 | @include media-breakpoint-up(md) { 59 | @include make-col(12); 60 | } 61 | 62 | @include media-breakpoint-up(lg) { 63 | @include make-col(3); 64 | } 65 | } 66 | } 67 | 68 | // content-column + col-one: 69 | body.col-one.col-content { 70 | #portal-column-content { 71 | @include make-col-ready(); 72 | 73 | @include media-breakpoint-up(md) { 74 | @include make-col(12); 75 | } 76 | 77 | @include media-breakpoint-up(lg) { 78 | order: 2; 79 | @include make-col(9); 80 | } 81 | } 82 | 83 | #portal-column-one { 84 | @include make-col-ready(); 85 | 86 | @include media-breakpoint-up(md) { 87 | @include make-col(12); 88 | } 89 | 90 | @include media-breakpoint-up(lg) { 91 | order: 1; 92 | @include make-col(3); 93 | } 94 | } 95 | } 96 | 97 | // all 3 columns: 98 | body.col-one.col-two.col-content { 99 | #portal-column-content { 100 | @include make-col-ready(); 101 | 102 | @include media-breakpoint-up(sm) { 103 | @include make-col(12); 104 | } 105 | 106 | @include media-breakpoint-up(md) { 107 | @include make-col(12); 108 | } 109 | 110 | @include media-breakpoint-up(lg) { 111 | order: 2; 112 | @include make-col(6); 113 | } 114 | } 115 | 116 | #portal-column-one { 117 | @include make-col-ready(); 118 | 119 | @include media-breakpoint-up(sm) { 120 | @include make-col(12); 121 | } 122 | 123 | @include media-breakpoint-up(md) { 124 | @include make-col(6); 125 | } 126 | 127 | @include media-breakpoint-up(lg) { 128 | order: 1; 129 | @include make-col(3); 130 | } 131 | } 132 | 133 | #portal-column-two { 134 | @include make-col-ready(); 135 | 136 | @include media-breakpoint-up(sm) { 137 | @include make-col(12); 138 | } 139 | 140 | @include media-breakpoint-up(md) { 141 | @include make-col(6); 142 | } 143 | 144 | @include media-breakpoint-up(lg) { 145 | order: 3; 146 | @include make-col(3); 147 | } 148 | } 149 | } -------------------------------------------------------------------------------- /scss/_header.scss: -------------------------------------------------------------------------------- 1 | // // DEBUG MEDIA QUERIES 2 | // @include media-breakpoint-up($nav-main-breakpoint) { 3 | // #content-header::before { 4 | // content: "main"; 5 | // position: sticky; 6 | // top: 1em; 7 | // left: 0; 8 | // } 9 | // } 10 | // @include media-breakpoint-up(xs) { 11 | // body::before { 12 | // content: "xs"; 13 | // position: sticky; 14 | // top: 0; 15 | // left: 0; 16 | // } 17 | // } 18 | // @include media-breakpoint-up(sm) { 19 | // body::before { 20 | // content: "sm"; 21 | // position: sticky; 22 | // top: 0; 23 | // left: 0; 24 | // } 25 | // } 26 | // @include media-breakpoint-up(md) { 27 | // body::before { 28 | // content: "md"; 29 | // position: sticky; 30 | // top: 0; 31 | // left: 0; 32 | // } 33 | // } 34 | // @include media-breakpoint-up(lg) { 35 | // body::before { 36 | // content: "lg"; 37 | // position: sticky; 38 | // top: 0; 39 | // left: 0; 40 | // } 41 | // } 42 | 43 | //*// HEADER //*// 44 | 45 | 46 | #portal-languageselector { 47 | display: inline-block; 48 | margin-bottom: 0; 49 | padding: 5px 0 0 0; 50 | list-style: none; 51 | margin-left: $spacer; 52 | 53 | li { 54 | display: inline-block; 55 | margin-left: 10px; 56 | } 57 | } 58 | 59 | #portal-anontools { 60 | padding-top: 5px; 61 | margin-left: $spacer; 62 | 63 | ul { 64 | padding: 0; 65 | margin: 0; 66 | list-style: none; 67 | 68 | li { 69 | margin-right: 10px; 70 | } 71 | } 72 | } 73 | 74 | #portal-membertools-wrapper { 75 | margin-top: 5px; 76 | margin-left: $spacer * 1.5; 77 | margin-right: $spacer * 0.5; 78 | 79 | ul { 80 | margin: 0 0 $spacer $spacer; 81 | padding-right: 0; 82 | } 83 | } 84 | 85 | //*// Don't shrink search input when navigation has many items 86 | #portal-searchbox {flex-shrink: 0;} 87 | 88 | .livesearch-results { 89 | margin-top: 1rem; 90 | width: 100%; 91 | 92 | @include media-breakpoint-up($nav-main-breakpoint) { 93 | position: absolute; 94 | z-index: $zindex-offcanvas + 1; 95 | margin-top: 3rem; 96 | right: 0; 97 | width: 28rem; 98 | 99 | @if $enable-shadows==true { 100 | @include box-shadow($box-shadow); 101 | } 102 | } 103 | 104 | .heading { 105 | font-size: $h5-font-size; 106 | } 107 | 108 | .col.img { 109 | flex: 0 0 auto; 110 | max-width: 50%; 111 | width: auto; 112 | } 113 | } 114 | 115 | .pat-livesearch.show_images+.livesearch-results { 116 | @include media-breakpoint-up($nav-main-breakpoint) { 117 | width: 34rem; 118 | } 119 | } -------------------------------------------------------------------------------- /scss/_icons.scss: -------------------------------------------------------------------------------- 1 | .plone-icon { 2 | height: 1em; 3 | width: auto; 4 | } 5 | 6 | .icon-inline { 7 | // margin-bottom: 0.25em; 8 | vertical-align: middle; 9 | bottom: -0.125em; 10 | position: relative; 11 | } 12 | 13 | .icon-x15 { 14 | height: 1.5em; 15 | width: auto; 16 | } 17 | 18 | .icon-x2 { 19 | height: 2em; 20 | width: auto; 21 | } 22 | 23 | .icon-x3 { 24 | height: 3em; 25 | width: auto; 26 | } 27 | 28 | .icon-x4 { 29 | height: 4em; 30 | width: auto; 31 | } 32 | 33 | .icon-x5 { 34 | height: 5em; 35 | width: auto; 36 | } -------------------------------------------------------------------------------- /scss/_login.scss: -------------------------------------------------------------------------------- 1 | .login-wrapper { 2 | display: flex; 3 | justify-content: center; 4 | 5 | .card { 6 | margin-top: $spacer; 7 | margin-bottom: $spacer * 2; 8 | max-width: 26rem; 9 | 10 | #form-widgets-mail_me { 11 | display: none; 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /scss/_portlets.scss: -------------------------------------------------------------------------------- 1 | //*// PORTLETS //*// 2 | 3 | .portlet { 4 | margin-bottom: $spacer; 5 | overflow: hidden; 6 | 7 | @if $enable-shadows==true { 8 | @include box-shadow($box-shadow); 9 | } 10 | 11 | @else { 12 | box-shadow: None; 13 | } 14 | 15 | .card-footer { 16 | // @include gradient-y(rgba(0, 0, 0, .02), $plone-portlet-footer-bg, 0%, 50%); 17 | font-size: $font-size-sm; 18 | } 19 | 20 | // .formControls { 21 | // border: 0; 22 | // background: none; 23 | // padding: 0; 24 | // box-shadow: none; 25 | // } 26 | } 27 | 28 | // .portletSiteSetup, 29 | .portletRecent, 30 | .portletNavigationTree, 31 | .portletEvents, 32 | .portletNews, 33 | .portletCollection, 34 | .portletRss { 35 | .card-body { 36 | 37 | padding: 0; 38 | 39 | img { 40 | // &.pull-right { 41 | // @include float-right; 42 | // } 43 | } 44 | 45 | >ul { 46 | padding: 0; 47 | margin: 0; 48 | list-style: none; 49 | 50 | >li { 51 | border-top: $list-group-border-width solid $list-group-border-color; 52 | padding: $card-spacer-y $card-spacer-x; 53 | 54 | a { 55 | display: block; 56 | } 57 | 58 | &:first-child { 59 | border-top: 0; 60 | } 61 | } 62 | 63 | ul { 64 | padding-left: 15px; 65 | list-style: none; 66 | } 67 | 68 | li:hover { 69 | background: var(--plone-portlet-footer-bg); 70 | } 71 | } 72 | } 73 | } 74 | 75 | //*// Navigation 76 | .portletNavigationTree { 77 | .card-body { 78 | ul { 79 | ul { 80 | padding-left: 0; 81 | } 82 | li { 83 | padding: 0; 84 | 85 | a { 86 | display: block; 87 | padding: $spacer * .75 $spacer; 88 | 89 | &:hover { 90 | text-decoration: none; 91 | background: var(--plone-portlet-footer-bg); 92 | color: $plone-portlet-list-bullet; 93 | } 94 | 95 | &:hover::before { 96 | color: $plone-portlet-list-bullet; 97 | } 98 | 99 | &:hover::after { 100 | content: "⟩"; 101 | position: absolute; 102 | right: 10px; 103 | font-size: $font-size-lg; 104 | margin-top: -3px; 105 | color: $light; 106 | } 107 | } 108 | 109 | } 110 | li { 111 | border-top: $list-group-border-width solid $list-group-border-color; 112 | } 113 | } 114 | 115 | >ul>li>a>img.image-icon { 116 | max-height: $line-height-base; 117 | } 118 | 119 | .navTreeCurrentNode>a { 120 | background: var(--plone-portlet-footer-bg); 121 | color: var(--#{$prefix}secondary-text); 122 | 123 | &::after { 124 | content: "⟩"; 125 | position: absolute; 126 | right: 10px; 127 | font-size: $font-size-lg; 128 | margin-top: -3px; 129 | color: $light; 130 | } 131 | } 132 | 133 | @include navtree-level-loop($plone-portlet-navtree-maxlevel); 134 | } 135 | } 136 | 137 | //*// Manage portlets 138 | // Jumplist for quick navigation across portlet managers 139 | .switch-portlet-manager { 140 | margin-top: 0.5em; 141 | width: auto; 142 | } 143 | 144 | // Assigned portlet 145 | .managedPortlet { 146 | 147 | // Parents, groups and content types portlet assignments 148 | // &.inheritedPortlet { 149 | // margin: 5px 15px; 150 | 151 | // .portletHeader { 152 | // padding: 3px 15px; 153 | // } 154 | // } 155 | 156 | // Blocked inherited portlet assignments 157 | &.blockedPortlet { 158 | opacity: 0.7; 159 | } 160 | } 161 | 162 | // Buttons for hide/show and remove assigned portlet 163 | .managedPortletActions { 164 | 165 | // margin-top: -$plone-padding-base-vertical; 166 | form { 167 | display: inline-block; 168 | } 169 | } 170 | -------------------------------------------------------------------------------- /scss/_roboto-webfont.scss: -------------------------------------------------------------------------------- 1 | @if $enable-roboto-webfont { 2 | 3 | //*// WEBFONTS //*// 4 | $roboto-base-path: "../roboto/" !default; 5 | 6 | // 300 Light 7 | @include font-face($name: "Roboto", 8 | $local: "Roboto Light", 9 | $svg-id: "robotolight", 10 | $path: $roboto-base-path + "roboto-light", 11 | $weight: 300, 12 | $style: normal); 13 | 14 | // 300 Light Italic 15 | @include font-face($name: "Roboto", 16 | $local: "Roboto Light Italic", 17 | $svg-id: "robotolight_itfalse", 18 | $path: $roboto-base-path + "roboto-lightitalic", 19 | $weight: 300, 20 | $style: italic); 21 | 22 | // 400 Regular 23 | @include font-face($name: "Roboto", 24 | $local: "Roboto Regular", 25 | $svg-id: "robotoregular", 26 | $path: $roboto-base-path + "roboto-regular", 27 | $weight: 400, 28 | $style: normal); 29 | 30 | // 400 Italic 31 | @include font-face($name: "Roboto", 32 | $local: "Roboto Italic", 33 | $svg-id: "robotoitalic", 34 | $path: $roboto-base-path + "roboto-italic", 35 | $weight: 400, 36 | $style: italic); 37 | 38 | // 500 Medium 39 | @include font-face($name: "Roboto", 40 | $local: "Roboto Medium", 41 | $svg-id: "robotomedium", 42 | $path: $roboto-base-path + "roboto-medium", 43 | $weight: 500, 44 | $style: normal); 45 | 46 | // 500 Medium Italic 47 | @include font-face($name: "Roboto", 48 | $local: "Roboto Medium Italic", 49 | $svg-id: "robotomedium_italic", 50 | $path: $roboto-base-path + "roboto-mediumitalic", 51 | $weight: 500, 52 | $style: italic); 53 | 54 | // 700 Bold 55 | @include font-face($name: "Roboto", 56 | $local: "Roboto Bold", 57 | $svg-id: "robotobold", 58 | $path: $roboto-base-path + "roboto-bold", 59 | $weight: 700, 60 | $style: normal); 61 | 62 | // 700 Bold Italic 63 | @include font-face($name: "Roboto", 64 | $local: "Roboto Bold Italic", 65 | $svg-id: "robotobold_italic", 66 | $path: $roboto-base-path + "roboto-bolditalic", 67 | $weight: 700, 68 | $style: italic); 69 | 70 | // 300 Light Condensed (toolbar) 71 | @include font-face($name: "Roboto Condensed", 72 | $local: "Roboto Condensed Light", 73 | $svg-id: "roboto_condensedlight", 74 | $path: $roboto-base-path + "robotocondensed-light", 75 | $weight: 300, 76 | $style: normal); 77 | 78 | // 300 Light Condensed Italic (toolbar) 79 | @include font-face($name: "Roboto Condensed", 80 | $local: "Roboto Condensed Thin Italic", 81 | $svg-id: "roboto_condensedlight_italic", 82 | $path: $roboto-base-path + "robotocondensed-lightitalic", 83 | $weight: 300, 84 | $style: italic); 85 | 86 | } -------------------------------------------------------------------------------- /scss/_root_variables.scss: -------------------------------------------------------------------------------- 1 | :root, 2 | [data-bs-theme="light"] { 3 | // Note: Custom variable values only support SassScript inside `#{}`. 4 | 5 | // Colors 6 | // 7 | // Generate palettes for full colors, grays, and theme colors. 8 | 9 | @each $color, 10 | $value in $plone-colors { 11 | --plone-#{$color}: #{$value}; 12 | } 13 | 14 | @each $color, 15 | $value in $state-colors { 16 | --plone-state-#{$color}: #{$value}; 17 | } 18 | } 19 | 20 | @if $enable-dark-mode { 21 | @include color-mode(dark, true) { 22 | // scss-docs-start root-dark-mode-vars 23 | @each $color, 24 | $value in $plone-colors-dark { 25 | --plone-#{$color}: #{$value}; 26 | } 27 | 28 | @each $color, 29 | $value in $state-colors-dark { 30 | --plone-state-#{$color}: #{$value}; 31 | } 32 | } 33 | } -------------------------------------------------------------------------------- /scss/_scaffolding.scss: -------------------------------------------------------------------------------- 1 | // Only display content to screen readers 2 | // 3 | // See: http://a11yproject.com/posts/how-to-hide-content/ 4 | 5 | .sr-only, 6 | .hiddenStructure, 7 | .crud-form .header-select { 8 | position: absolute; 9 | width: 1px; 10 | height: 1px; 11 | margin: -1px; 12 | padding: 0; 13 | overflow: hidden; 14 | clip: rect(0, 0, 0, 0); 15 | border: 0; 16 | color: #fff; 17 | background-color: #000; 18 | } 19 | 20 | .sr-only a, 21 | .hiddenStructure a { 22 | color: #fff; 23 | background-color: #000; 24 | } 25 | 26 | // Use in conjunction with .sr-only to only display content when it's focused. 27 | // Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1 28 | // Credit: HTML5 Boilerplate 29 | 30 | .sr-only-focusable { 31 | 32 | &:active, 33 | &:focus { 34 | position: static; 35 | width: auto; 36 | height: auto; 37 | margin: 0; 38 | overflow: visible; 39 | clip: auto; 40 | } 41 | } -------------------------------------------------------------------------------- /scss/_sitenav.scss: -------------------------------------------------------------------------------- 1 | .navbar { 2 | // Barceloneta specific css variables 3 | --#{$prefix}navbar-nav-link-padding-y: #{$navbar-nav-link-padding-y}; 4 | --#{$prefix}navbar-nav-link-padding-x: #{$navbar-nav-link-padding-x}; 5 | 6 | --#{$prefix}navbar-color: #{$navbar-light-color}; 7 | --#{$prefix}navbar-active-color: #{$navbar-light-active-color}; 8 | --#{$prefix}navbar-hover-color: #{$navbar-light-hover-color}; 9 | 10 | --#{$prefix}navbar-background: var(--#{$prefix}light); 11 | --#{$prefix}navbar-active-background: #{$navbar-light-active-background}; 12 | --#{$prefix}navbar-hover-background: #{$navbar-light-hover-background}; 13 | // 14 | 15 | .offcanvas { 16 | // offcanvas background within navigation is navbar background 17 | --#{$prefix}offcanvas-bg: var(--#{$prefix}navbar-background); 18 | } 19 | } 20 | 21 | .navbar-nav { 22 | flex-wrap: wrap; 23 | 24 | li { 25 | position: relative; 26 | display: block; 27 | background-color: var(--#{$prefix}navbar-background); 28 | color: var(--#{$prefix}navbar-color); 29 | 30 | &.inPath>a, 31 | &.current>a, 32 | &.active>a, 33 | &.selected>a { 34 | background-color: var(--#{$prefix}navbar-active-background); 35 | 36 | &, 37 | &:hover, 38 | &:focus { 39 | color: var(--#{$prefix}navbar-hover-color); 40 | } 41 | } 42 | 43 | @include media-breakpoint-up($nav-main-breakpoint) { 44 | 45 | &.has_subtree:hover>ul, 46 | &.has_subtree .has_subtree:hover>ul { 47 | opacity: 1; 48 | visibility: visible; 49 | transition: ease-in .35s; 50 | } 51 | 52 | &.has_subtree .has_subtree ul { 53 | z-index: -1; 54 | left: 0em; 55 | top: 0px; 56 | } 57 | 58 | &.has_subtree .has_subtree:hover>ul { 59 | // we only shift the submenus to the right if visible 60 | // to prevent horizontal scrollers if not needed 61 | left: 16em; 62 | } 63 | 64 | &.has_subtree ul li { 65 | // 2nd level openers pointing sideways on desktop 66 | .opener+label:after { 67 | transform: rotate(-90deg); 68 | } 69 | } 70 | 71 | } 72 | 73 | &.has_subtree a.nav-link { 74 | padding-right: 2.0em; 75 | } 76 | 77 | label { 78 | margin: 0; 79 | } 80 | 81 | a { 82 | position: relative; 83 | display: block; 84 | padding: var(--#{$prefix}navbar-nav-link-padding-y) var(--#{$prefix}navbar-nav-link-padding-x); 85 | hyphens: auto; 86 | word-break: break-word; 87 | text-decoration: none; 88 | 89 | &:hover, 90 | &:focus { 91 | text-decoration: none; 92 | background-color: var(--#{$prefix}navbar-hover-background); 93 | } 94 | 95 | } 96 | 97 | // Navigation sublevels 98 | ul { 99 | @include media-breakpoint-up($nav-main-breakpoint) { 100 | padding-left: 0em; 101 | 102 | } 103 | 104 | padding-left: 0.5em; 105 | visibility: hidden; 106 | opacity: 0; 107 | height: 0; 108 | 109 | @include media-breakpoint-up($nav-main-breakpoint) { 110 | position: absolute; 111 | z-index: $zindex-dropdown; 112 | transition: ease-out 0.75s; 113 | } 114 | 115 | li { 116 | background-color: var(--#{$prefix}navbar-background); 117 | 118 | a { 119 | @include media-breakpoint-up($nav-main-breakpoint) { 120 | min-width: 16em; 121 | } 122 | } 123 | 124 | } 125 | } 126 | 127 | .opener { 128 | display: none; 129 | 130 | &+label:after { 131 | transform: rotate(0deg); 132 | transition: ease-in 0.35s; 133 | } 134 | 135 | &:checked+label:after { 136 | transform: rotate(-180deg); 137 | transition: ease-in 0.35s; 138 | 139 | @include media-breakpoint-up($nav-main-breakpoint) { 140 | transform: rotate(0deg); 141 | } 142 | } 143 | 144 | &~ul { 145 | transition: ease-out 0.35s; 146 | } 147 | 148 | &:checked~ul { 149 | height: auto; 150 | transition: ease-in 0.35s; 151 | } 152 | 153 | &:checked~ul { 154 | @include media-breakpoint-down($nav-main-breakpoint) { 155 | visibility: visible; 156 | opacity: 1; 157 | } 158 | } 159 | } 160 | 161 | label { 162 | position: absolute; 163 | right: 0em; 164 | top: 0em; 165 | height: 3em; 166 | width: 4em; 167 | text-align: center; 168 | display: flex; 169 | flex-direction: column; 170 | justify-content: center; 171 | align-items: flex-end; 172 | padding-right: 0.5em; 173 | 174 | @include media-breakpoint-up($nav-main-breakpoint) { 175 | align-items: flex-start; 176 | width: auto; 177 | } 178 | 179 | &:after { 180 | background-color: var(--#{$prefix}navbar-hover-background); 181 | color: var(--#{$prefix}navbar-color); 182 | border-radius: $input-border-radius; 183 | content: "▼"; 184 | cursor: pointer; 185 | display: inline-block; 186 | line-height: 1; 187 | font-size: 1.25em; 188 | padding: 0.25em; 189 | 190 | @include media-breakpoint-up($nav-main-breakpoint) { 191 | font-size: 0.75em; 192 | background: transparent; 193 | } 194 | } 195 | } 196 | 197 | } 198 | 199 | @include media-breakpoint-down($nav-main-breakpoint) { 200 | /* Mobile menu variant */ 201 | margin-bottom: 1em; /* Separator between navbar and search field */ 202 | } 203 | } 204 | 205 | .navbar-dark { 206 | // Dark scheme highlight overrides 207 | --#{$prefix}navbar-color: #{$navbar-dark-color}; 208 | --#{$prefix}navbar-active-color: #{$navbar-dark-active-color}; 209 | --#{$prefix}navbar-hover-color: #{$navbar-dark-hover-color}; 210 | 211 | --#{$prefix}navbar-background: var(--#{$prefix}dark); 212 | --#{$prefix}navbar-active-background: #{$navbar-dark-active-background}; 213 | --#{$prefix}navbar-hover-background: #{$navbar-dark-hover-background}; 214 | // 215 | } 216 | 217 | .navbar-barceloneta { 218 | // Barceloneta specific highlight overrides 219 | --#{$prefix}navbar-color: #{$navbar-barceloneta-color}; 220 | --#{$prefix}navbar-active-color: #{$navbar-barceloneta-active-color}; 221 | --#{$prefix}navbar-hover-color: #{$navbar-barceloneta-hover-color}; 222 | 223 | --#{$prefix}navbar-background: #{$navbar-barceloneta-background}; 224 | --#{$prefix}navbar-active-background: #{$navbar-barceloneta-active-background}; 225 | --#{$prefix}navbar-hover-background: #{$navbar-barceloneta-hover-background}; 226 | // 227 | 228 | padding: var(--#{$prefix}navbar-padding-y) var(--#{$prefix}navbar-padding-x); 229 | background-color: var(--#{$prefix}navbar-background); 230 | } 231 | -------------------------------------------------------------------------------- /scss/_toolbar.scss: -------------------------------------------------------------------------------- 1 | :root { 2 | --plone-toolbar-bg: var(--#{$prefix}dark); 3 | --plone-toolbar-text-color: var(--#{$prefix}white); 4 | --plone-toolbar-locked-color: var(--#{$prefix}warning); 5 | --plone-toolbar-font: "Roboto", "Helvetica Neue", Helvetica, Arial, sans-serif; 6 | --plone-toolbar-separator-color: var(--#{$prefix}gray-500); 7 | --plone-toolbar-link-color: var(--plone-link-color); 8 | --plone-toolbar-link-hover-color: var(--plone-link-hover-color); 9 | --plone-toolbar-width: 220px; 10 | --plone-toolbar-width-collapsed: 60px; 11 | --plone-toolbar-top-height: 2.5rem; 12 | } 13 | 14 | /* general collapsed dark mode */ 15 | #edit-zone { 16 | font-family: var(--plone-toolbar-font); 17 | position: fixed; 18 | z-index: $zindex-offcanvas-backdrop; 19 | top: 0; 20 | left: 0; 21 | bottom: 0; 22 | display: flex; 23 | flex-direction: column; 24 | height: 100%; 25 | background: var(--plone-toolbar-bg); 26 | width: var(--plone-toolbar-width); 27 | color: var(--plone-toolbar-text-color); 28 | border-right: none; 29 | 30 | &, 31 | .dropdown-menu { 32 | background-color: var(--plone-toolbar-bg); 33 | } 34 | 35 | .dropdown-header { 36 | color: var(--plone-toolbar-text-color); 37 | } 38 | 39 | .dropdown-menu { 40 | border-radius: 0; 41 | min-width: 12rem; 42 | overflow-y: auto; 43 | max-height:100vh; 44 | } 45 | 46 | .nav-link, 47 | .dropdown-item { 48 | color: var(--plone-toolbar-text-color); 49 | 50 | &:hover, 51 | &:focus { 52 | background: var(--plone-toolbar-link-color); 53 | color: var(--plone-toolbar-text-color); 54 | 55 | .label-state-published, 56 | .label-state-external { 57 | color: var(--plone-toolbar-link-hover-color) !important; 58 | } 59 | } 60 | } 61 | 62 | .toolbar-header { 63 | background: var(--#{$prefix}primary); 64 | padding: 0.5rem 1rem; 65 | margin-bottom: 0.5rem; 66 | height: var(--plone-toolbar-top-height); 67 | 68 | a { 69 | color: var(--plone-toolbar-text-color); 70 | cursor:pointer; 71 | 72 | @include media-breakpoint-down(md) { 73 | display: none; 74 | } 75 | } 76 | } 77 | 78 | 79 | .label-state-published, 80 | .label-state-external { 81 | color: var(--plone-link-color-on-dark) !important; 82 | } 83 | 84 | .label-state-internally_published { 85 | color: var(--plone-state-internally-published-color) !important; 86 | } 87 | 88 | .label-state-pending { 89 | color: var(--plone-state-pending) !important; 90 | } 91 | 92 | li.active .label-state-pending, 93 | .label-state-pending:hover { 94 | color: var(--plone-toolbar-text-color) !important; 95 | } 96 | 97 | .label-state-draft, 98 | .label-state-internal { 99 | color: var(--plone-state-draft) !important; 100 | } 101 | 102 | .label-state-private { 103 | color: var(--plone-state-private) !important; 104 | } 105 | 106 | .personaltools-wrapper { 107 | margin-top: auto; 108 | border-top: solid 1px var(--plone-toolbar-separator-color); 109 | padding: 0.5rem 0; 110 | } 111 | 112 | } 113 | 114 | body.plone-toolbar-left { 115 | padding-left: var(--plone-toolbar-width-collapsed); 116 | 117 | .toolbar-expand, 118 | .toolbar-collapse { 119 | display: none; 120 | } 121 | 122 | #edit-zone { 123 | .nav-link { 124 | display: flex; 125 | width: 100%; 126 | padding-right: 0.5rem; 127 | .plone-icon { 128 | margin-top: 0.25em; 129 | margin-right: 0.5em; 130 | flex-shrink: 0; 131 | } 132 | .toolbar-label { 133 | flex-grow: 1; 134 | } 135 | &:after { 136 | margin-top: 0.5em; 137 | width: 0.3em; 138 | height: 0.3em; 139 | } 140 | } 141 | 142 | .border-top { 143 | border-top-color: var(--plone-toolbar-separator-color); 144 | } 145 | } 146 | 147 | .toolbar-expand { 148 | display: block; 149 | } 150 | 151 | #edit-zone { 152 | visibility: visible !important; 153 | transform: none; 154 | transition: none; 155 | width: var(--plone-toolbar-width-collapsed); 156 | 157 | .toolbar-label { 158 | display: none; 159 | } 160 | } 161 | 162 | // ONLY IF MD OR HIGHER 163 | @include media-breakpoint-up(md) { 164 | &.plone-toolbar-left-expanded { 165 | .toolbar-expand { 166 | display: none; 167 | } 168 | 169 | .toolbar-collapse { 170 | display: block; 171 | } 172 | 173 | padding-left: var(--plone-toolbar-width); 174 | 175 | #edit-zone { 176 | width: var(--plone-toolbar-width); 177 | 178 | .toolbar-label { 179 | display: inline-block; 180 | white-space: initial; 181 | hyphens: auto; 182 | word-break: break-word; 183 | vertical-align: top; 184 | } 185 | } 186 | } 187 | } 188 | } 189 | 190 | /* extending dropdown from BS5 outside media query */ 191 | body.plone-toolbar-top { 192 | padding-left: var(--plone-toolbar-width-collapsed); 193 | padding-top: 0; 194 | 195 | .toolbar-expand, 196 | .toolbar-collapse { 197 | display: none; 198 | } 199 | 200 | .toolbar-label { 201 | display: none; 202 | } 203 | } 204 | 205 | @include media-breakpoint-up(md) { 206 | body.plone-toolbar-top { 207 | padding-top: var(--plone-toolbar-top-height); 208 | padding-left: 0; 209 | 210 | .toolbar-collapse, 211 | .toolbar-header { 212 | height: 100%; 213 | } 214 | 215 | #edit-zone { 216 | bottom: unset; 217 | width: 100%; 218 | flex-direction: row; 219 | height: var(--plone-toolbar-top-height); 220 | 221 | .plone-toolbar-main { 222 | flex-direction: row; 223 | 224 | >.border-top { 225 | border-top: none; 226 | border-right: solid 1px var(--plone-toolbar-separator-color); 227 | } 228 | } 229 | 230 | .personaltools-wrapper { 231 | margin-left: auto; 232 | margin-top: 0; 233 | padding: 0; 234 | border-top: none; 235 | } 236 | 237 | } 238 | } 239 | } 240 | 241 | /* Dropdown fixes for mobile with top bar */ 242 | @include media-breakpoint-down(md) { 243 | body.plone-toolbar-top { 244 | #edit-zone { 245 | width: var(--plone-toolbar-width-collapsed); 246 | 247 | .nav-link { 248 | padding-right: 0.5rem; 249 | 250 | &.dropdown-toggle::after { 251 | vertical-align: 0; 252 | margin-left: 0; 253 | border-top: .3em solid transparent; 254 | border-right: 0; 255 | border-bottom: .3em solid transparent; 256 | border-left: .3em solid; 257 | } 258 | } 259 | 260 | .dropdown-menu.show { 261 | display: block; 262 | margin-left: var(--plone-toolbar-width-collapsed) !important; 263 | margin-top: -2.5rem !important; 264 | } 265 | 266 | 267 | } 268 | } 269 | } 270 | -------------------------------------------------------------------------------- /scss/_variables.barceloneta.scss: -------------------------------------------------------------------------------- 1 | // Barceloneta settings 2 | 3 | $spacer: 1rem!default; // not changed but needed to calc other definitions 4 | 5 | 6 | // Grid columns 7 | // Set the number of columns and specify the width of the gutters. 8 | 9 | // $grid-columns: 12 !default; 10 | // $grid-gutter-width: 1.5rem !default; 11 | // $grid-row-columns: 6 !default; 12 | 13 | $grid-main-breakpoint: lg!default; 14 | $nav-main-breakpoint: $grid-main-breakpoint!default; 15 | 16 | $navbar-barceloneta-background: $primary!default; 17 | 18 | $navbar-padding-y: 0 !default; 19 | $navbar-padding-x: 0 !default; 20 | $navbar-nav-link-padding-y: $spacer * .75 !default; 21 | $navbar-nav-link-padding-x: $spacer !default; 22 | 23 | $navbar-light-color: rgba($black, .55) !default; 24 | $navbar-light-active-color: rgba($black, .7) !default; 25 | $navbar-light-active-background: rgba($black, .2) !default; 26 | $navbar-light-hover-color: rgba($black, .9) !default; 27 | $navbar-light-hover-background: rgba($black, .3) !default; 28 | 29 | $navbar-dark-color: rgba($white, 1) !default; 30 | $navbar-dark-active-color: rgba($white, 1) !default; 31 | $navbar-dark-active-background: rgba($white, .2) !default; 32 | $navbar-dark-hover-color: rgba($white, 1) !default; 33 | $navbar-dark-hover-background: rgba($white, .3) !default; 34 | 35 | $navbar-barceloneta-color: rgba($white, 1) !default; 36 | $navbar-barceloneta-active-color: rgba($white, 1) !default; 37 | $navbar-barceloneta-active-background: rgba($black, .2) !default; 38 | $navbar-barceloneta-hover-color: rgba($white, 1) !default; 39 | $navbar-barceloneta-hover-background: rgba($black, .3) !default; 40 | 41 | 42 | $plone-portlet-navtree-maxlevel: 5!default; 43 | 44 | 45 | // Typography 46 | // While Plone Logo uses the DIN Font, we use Roboto, which was designed for Android and so mobile optimized 47 | // A free DIN variant is available here (TTF only): https://www.1001fonts.com/alte-din-1451-mittelschrift-font.html 48 | $font-family-sans-serif: "Roboto", "Helvetica Neue", Helvetica, Arial, sans-serif!default; 49 | $font-family-condensed: "Roboto Condensed", "Arial Narrow", sans-serif!default; //just on toolbar 50 | $font-family-serif: Georgia, "Times New Roman", Times, serif!default; 51 | // $font-family-base: var(--#{$prefix}font-sans-serif) !default; 52 | // $font-family-code: var(--#{$prefix}font-monospace) !default; 53 | 54 | // Include Roboto as webfont 55 | $enable-roboto-webfont: true !default; 56 | 57 | // $font-size-base: 1rem !default; // Assumes the browser default, typically `16px` 58 | // $font-size-sm: $font-size-base * .875 !default; 59 | // $font-size-lg: $font-size-base * 1.25 !default; 60 | 61 | $font-weight-lighter: lighter !default; 62 | $font-weight-light: 300 !default; 63 | $font-weight-normal: 400 !default; 64 | $font-weight-semibold: 600 !default; 65 | $font-weight-bold: 700 !default; 66 | $font-weight-bolder: bolder !default; 67 | 68 | // $font-weight-base: $font-weight-normal !default; 69 | 70 | // $line-height-base: 1.5 !default; 71 | // $line-height-sm: 1.25 !default; 72 | // $line-height-lg: 2 !default; 73 | 74 | // $h1-font-size: $font-size-base * 2.5 !default; 75 | // $h2-font-size: $font-size-base * 2 !default; 76 | // $h3-font-size: $font-size-base * 1.75 !default; 77 | // $h4-font-size: $font-size-base * 1.5 !default; 78 | // $h5-font-size: $font-size-base * 1.25 !default; 79 | // $h6-font-size: $font-size-base !default; 80 | 81 | // $headings-margin-bottom: $spacer * .5 !default; 82 | // $headings-font-family: null !default; 83 | // $headings-font-style: null !default; 84 | $headings-font-weight: $font-weight-normal !default; 85 | // $headings-line-height: 1.2 !default; 86 | // $headings-color: null !default; 87 | 88 | // Breadcrumbs 89 | $breadcrumb-margin-bottom: 2rem !default; 90 | $breadcrumb-bg: var(--bs-secondary-bg) !default; 91 | $breadcrumb-padding-y: $spacer * 0.5 !default; 92 | $breadcrumb-padding-x: $spacer * 1 !default; 93 | 94 | 95 | // Footer 96 | $footer-bg: $gray-900 !default; 97 | $footer-color: $gray-300 !default; 98 | 99 | -------------------------------------------------------------------------------- /scss/_variables.colors.dark.plone.scss: -------------------------------------------------------------------------------- 1 | // Plone specific colors 2 | //colors 3 | $state-draft-color-dark: #fab82a!default; // lime-yellow //draft is visible 4 | $state-pending-color-dark: #e2e721!default; // orange 5 | $state-private-color-dark: #f96483!default; // red 6 | $state-internal-color-dark: #fab82a!default; // is draft 7 | $state-internally-published-color-dark: #ab75ff!default; // is intranet 8 | 9 | // Plone 10 | $plone-link-color-dark: #007bb1!default; //plone blue made slightly darker for wcag 2.0 11 | $plone-link-color-on-dark: #16a1e3!default; //plone blue 12 | //if you need different contrast 13 | $plone-link-color-on-grey: #086ca3!default; //valid wcag 2.0 14 | $plone-link-hover-color-dark: darken($plone-link-color, 15%)!default; 15 | 16 | // Portlets 17 | $plone-portlet-list-hover-bg-dark: #161719!default; 18 | $plone-portlet-footer-bg-dark: #161719!default; 19 | $plone-portlet-list-bullet-dark: #64bee8!default; 20 | 21 | $plone-colors-dark: ( 22 | "link-color": $plone-link-color-dark, 23 | "link-color-on-dark": $plone-link-color-on-dark, // only used once 24 | "link-color-on-grey": $plone-link-color-on-grey, // never used 25 | "link-hover-color": $plone-link-hover-color-dark, 26 | "portlet-list-hover-bg": $plone-portlet-list-hover-bg-dark, 27 | "portlet-footer-bg": $plone-portlet-footer-bg-dark, 28 | "portlet-list-bullet": $plone-portlet-list-bullet-dark, 29 | ) !default; 30 | 31 | $state-colors-dark: ( 32 | "draft": $state-draft-color-dark, 33 | "pending": $state-pending-color-dark, 34 | "private": $state-private-color-dark, 35 | "internal": $state-internal-color-dark, 36 | "internally-published": $state-internally-published-color-dark, 37 | ) !default; 38 | -------------------------------------------------------------------------------- /scss/_variables.colors.plone.scss: -------------------------------------------------------------------------------- 1 | // These are copied from Bootstrap so that we can use and redefine default values for the theme. 2 | 3 | // Color system 4 | $white: #fff !default; 5 | $gray-100: #f8f9fa !default; 6 | $gray-200: #e9ecef !default; 7 | $gray-300: #dee2e6 !default; 8 | $gray-400: #ced4da !default; 9 | $gray-500: #adb5bd !default; 10 | $gray-600: #6c757d !default; 11 | $gray-700: #495057 !default; 12 | $gray-800: #343a40 !default; 13 | $gray-900: #212529 !default; 14 | $black: #000 !default; 15 | 16 | $blue: #0d6efd !default; 17 | $indigo: #6610f2 !default; 18 | $purple: #6f42c1 !default; 19 | $pink: #d63384 !default; 20 | $red: #dc3545 !default; 21 | $orange: #fd7e14 !default; 22 | $yellow: #ffc107 !default; 23 | $green: #198754 !default; 24 | $teal: #20c997 !default; 25 | $cyan: #0dcaf0 !default; 26 | 27 | // scss-docs-start colors-map 28 | $colors: ( 29 | "blue": $blue, 30 | "indigo": $indigo, 31 | "purple": $purple, 32 | "pink": $pink, 33 | "red": $red, 34 | "orange": $orange, 35 | "yellow": $yellow, 36 | "green": $green, 37 | "teal": $teal, 38 | "cyan": $cyan, 39 | "white": $white, 40 | "gray": $gray-600, 41 | "gray-dark": $gray-800 42 | ) !default; 43 | // scss-docs-end colors-map 44 | 45 | // Plone specific colors 46 | //colors 47 | $state-draft-color: #fab82a!default; // lime-yellow //draft is visible 48 | $state-pending-color: #ccd111!default; // orange 49 | $state-private-color: #c4183c!default; // red 50 | $state-internal-color: #fab82a!default; // is draft 51 | $state-internally-published-color: #883dfa!default; // is intranet 52 | 53 | // Plone 54 | // Bootstrap $primary color is Plone blue 55 | $primary: #007bb1!default; //plone blue made slightly darker for wcag 2.0 56 | 57 | $plone-link-color: $primary !default; 58 | $plone-link-color-on-dark: #16a1e3!default; //plone blue 59 | //if you need different contrast 60 | $plone-link-color-on-grey: #086ca3!default; //valid wcag 2.0 61 | $plone-link-hover-color: darken($plone-link-color, 15%)!default; 62 | 63 | $plone-light-color: $gray-100 !default; 64 | $plone-dark-color: $gray-900 !default; 65 | 66 | // Portlets 67 | $plone-portlet-list-hover-bg: #fcfcfd!default; 68 | $plone-portlet-footer-bg: #fcfcfd!default; 69 | $plone-portlet-list-bullet: #64bee8!default; 70 | 71 | $plone-colors: ( 72 | "link-color": $plone-link-color, 73 | "link-color-on-dark": $plone-link-color-on-dark, 74 | "link-color-on-grey": $plone-link-color-on-grey, 75 | "link-hover-color": $plone-link-hover-color, 76 | "portlet-list-hover-bg": $plone-portlet-list-hover-bg, 77 | "portlet-footer-bg": $plone-portlet-footer-bg, 78 | "portlet-list-bullet": $plone-portlet-list-bullet, 79 | ) !default; 80 | 81 | $state-colors: ( 82 | "draft": $state-draft-color, 83 | "pending": $state-pending-color, 84 | "private": $state-private-color, 85 | "internal": $state-internal-color, 86 | "internally-published": $state-internally-published-color, 87 | ) !default; 88 | -------------------------------------------------------------------------------- /scss/_variables.properties.scss: -------------------------------------------------------------------------------- 1 | // Options 2 | // 3 | // Quickly modify global styling by enabling or disabling optional features. 4 | 5 | $enable-caret: true !default; 6 | $enable-rounded: true !default; 7 | $enable-shadows: false !default; 8 | $enable-gradients: false !default; 9 | $enable-transitions: true !default; 10 | $enable-reduced-motion: true !default; 11 | $enable-smooth-scroll: true !default; 12 | $enable-grid-classes: true !default; 13 | $enable-container-classes: true !default; 14 | $enable-cssgrid: false !default; 15 | $enable-button-pointers: true !default; 16 | $enable-rfs: true !default; 17 | $enable-validation-icons: true !default; 18 | $enable-negative-margins: true !default; 19 | $enable-deprecation-messages: true !default; 20 | $enable-important-utilities: false !default; -------------------------------------------------------------------------------- /scss/barceloneta-toolbar.scss: -------------------------------------------------------------------------------- 1 | // Barceloneta toolbar-specific styles 2 | @import "bootstrap/scss/functions"; 3 | @import "bootstrap/scss/variables"; 4 | @import "bootstrap/scss/maps"; 5 | @import "bootstrap/scss/mixins"; 6 | @import "bootstrap/scss/utilities"; 7 | 8 | @import "bootstrap/scss/root"; 9 | @import "bootstrap/scss/reboot"; 10 | @import "bootstrap/scss/nav"; 11 | 12 | @import "variables.colors.plone"; 13 | @import "variables.colors.dark.plone"; 14 | @import "root_variables"; 15 | @import "toolbar"; 16 | 17 | 18 | // Define the utilities, we need. 19 | $utilities: map-get-multiple( 20 | $utilities, 21 | ( 22 | "flex-direction", 23 | ) 24 | ); 25 | 26 | // Build the utilities map 27 | @import "bootstrap/scss/utilities/api"; 28 | -------------------------------------------------------------------------------- /scss/barceloneta.scss: -------------------------------------------------------------------------------- 1 | // Plone Barceloneta Styling & components 2 | 3 | // Plone colors 4 | @import "variables.colors.plone"; 5 | @import "variables.colors.dark.plone"; 6 | 7 | // Plone specific default variables & properties 8 | @import "variables.properties"; 9 | @import "variables.barceloneta"; 10 | 11 | @import "base"; 12 | @import "root_variables"; 13 | 14 | @import "mixins/mixin.portlets.plone"; 15 | @import "mixins/mixin.font.plone"; 16 | 17 | 18 | // Plone components 19 | @import "cards"; 20 | @import "scaffolding"; 21 | 22 | 23 | // // style.scss 24 | @import "icons"; 25 | @import "header"; 26 | @import "sitenav"; 27 | @import "breadcrumbs"; 28 | @import "content"; 29 | @import "comments"; 30 | @import "portlets"; 31 | @import "footer"; 32 | 33 | @import "print"; 34 | 35 | @import "roboto-webfont"; 36 | 37 | @import "../src/plonetheme/barceloneta/theme/tinymce/tinymce-formats"; 38 | -------------------------------------------------------------------------------- /scss/base.scss: -------------------------------------------------------------------------------- 1 | // Use this file as base for base styling 2 | // for example to use with backend.xml 3 | 4 | // Bootstrap - imported with --load-path=node_modules 5 | @import "bootstrap/scss/bootstrap"; 6 | 7 | // Plone backend or minimal styles 8 | @import "alerts"; 9 | @import "forms"; 10 | @import "collapsible"; 11 | @import "controlpanels"; 12 | @import "login"; 13 | @import "toolbar"; 14 | @import "grid"; 15 | @import "content_base"; 16 | @import "content_tables"; 17 | -------------------------------------------------------------------------------- /scss/mixins/_mixin.buttons.plone.scss: -------------------------------------------------------------------------------- 1 | //*// MIXIN BUTTONS //*// 2 | 3 | @mixin button-variant($color, $background, $border) { 4 | color: $color; 5 | background-color: $background; 6 | border-color: $border; 7 | 8 | &:hover, 9 | &:focus, 10 | &:active, 11 | &.active, 12 | .open > .dropdown-toggle & { 13 | color: $color; 14 | background-color: darken($background, 10%); 15 | border-color: darken($border, 12%); 16 | } 17 | &:active, 18 | &.active, 19 | .open > .dropdown-toggle & { 20 | background-image: none; 21 | } 22 | &.disabled, 23 | &[disabled], 24 | fieldset[disabled] & { 25 | &, 26 | &:hover, 27 | &:focus, 28 | &:active, 29 | &.active { 30 | background-color: $background; 31 | border-color: $border; 32 | } 33 | } 34 | 35 | .badge { 36 | color: $background; 37 | background-color: $color; 38 | } 39 | } 40 | 41 | @mixin button-size($padding-y, $padding-x, $font-size, $line-height, $border-radius) { 42 | padding: $padding-y $padding-x; 43 | font-size: $font-size; 44 | line-height: $line-height; 45 | border-radius: $border-radius; 46 | } 47 | -------------------------------------------------------------------------------- /scss/mixins/_mixin.font.plone.scss: -------------------------------------------------------------------------------- 1 | // ============================================================================= 2 | // String Replace 3 | // ============================================================================= 4 | 5 | @function str-replace($string, $search, $replace: "") { 6 | $index: str-index($string, $search); 7 | 8 | @if $index { 9 | @return str-slice($string, 1, $index - 1)+$replace+str-replace(str-slice($string, $index + str-length($search)), $search, $replace); 10 | } 11 | 12 | @return $string; 13 | } 14 | 15 | // ============================================================================= 16 | // Font Face 17 | // ============================================================================= 18 | 19 | @mixin font-face($name, $local: null, $svg-id: null, $path: null, $weight: null, $style: null, $exts: eot woff2 woff ttf) { 20 | $src: null; 21 | 22 | $extmods: ( 23 | eot: "?#iefix" 24 | ); 25 | 26 | $formats: ( 27 | eot: "embedded-opentype", 28 | otf: "opentype", 29 | ttf: "truetype" 30 | ); 31 | 32 | @each $ext in $exts { 33 | $extmod: if(map-has-key($extmods, $ext), $ext + map-get($extmods, $ext), $ext); 34 | $format: if(map-has-key($formats, $ext), map-get($formats, $ext), $ext); 35 | $src: append($src, url(quote($path + "." + $extmod)) format(quote($format)), comma); 36 | } 37 | 38 | @font-face { 39 | font-family: quote($name); 40 | src: url(quote($path + ".eot")); 41 | src: local(quote($local)), $src; 42 | font-weight: $weight; 43 | font-style: $style; 44 | font-display: swap; 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /scss/mixins/_mixin.forms.plone.scss: -------------------------------------------------------------------------------- 1 | //*// MIXIN FORMS //*// 2 | 3 | // Form validation states 4 | // 5 | // Used in forms.scss to generate the form validation CSS for warnings, errors, 6 | // and successes. 7 | 8 | @mixin form-control-validation($plone-text-color: #555, $plone-border-color: #ccc, $plone-background-color: #f5f5f5) { 9 | // Color the label and help text 10 | .help-block, 11 | .control-label, 12 | .radio, 13 | .checkbox, 14 | .radio-inline, 15 | .checkbox-inline { 16 | color: $plone-text-color; 17 | } 18 | // Set the border and box shadow on specific inputs to match 19 | .form-control { 20 | border-color: $plone-border-color; 21 | @include box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work 22 | &:focus { 23 | border-color: darken($plone-border-color, 10%); 24 | $plone-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten($plone-border-color, 20%); 25 | @include box-shadow($plone-shadow); 26 | } 27 | } 28 | // Set validation states also for addons 29 | .input-group-addon { 30 | color: $plone-text-color; 31 | border-color: $plone-border-color; 32 | background-color: $plone-background-color; 33 | } 34 | // Optional feedback icon 35 | .form-control-feedback { 36 | color: $plone-text-color; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /scss/mixins/_mixin.portlets.plone.scss: -------------------------------------------------------------------------------- 1 | // Loop for .navTreeLevel 2 | @mixin navtree-level-loop($maxlevel) { 3 | @for $i from 0 through $maxlevel { 4 | ul.navTreeLevel#{$i}>li a { 5 | padding-left: $spacer * ($i + 1); 6 | } 7 | } 8 | } -------------------------------------------------------------------------------- /scss/mixins/_mixin.prefixes.plone.scss: -------------------------------------------------------------------------------- 1 | //*// MIXIN PREFIXES //*// 2 | 3 | @mixin box-sizing($boxmodel) { 4 | -webkit-box-sizing: $boxmodel; 5 | -moz-box-sizing: $boxmodel; 6 | box-sizing: $boxmodel; 7 | } 8 | 9 | @mixin opacity($opacity) { 10 | opacity: $opacity; 11 | // IE8 filter 12 | $opacity-ie: ($opacity * 100); 13 | filter: "alpha(opacity=#{$opacity-ie})"; 14 | } 15 | 16 | @mixin user-select($select) { 17 | -webkit-user-select: $select; 18 | -moz-user-select: $select; 19 | -ms-user-select: $select; // IE10+ 20 | user-select: $select; 21 | } 22 | -------------------------------------------------------------------------------- /scss/mixins/_mixin.tabfocus.plone.scss: -------------------------------------------------------------------------------- 1 | //*// MIXIN TAB FOCUS //*// 2 | 3 | @mixin tab-focus() { 4 | // Default 5 | outline: thin dotted; 6 | // WebKit 7 | outline: 5px auto -webkit-focus-ring-color; 8 | outline-offset: -2px; 9 | } 10 | 11 | @mixin placeholder($plone-color: $plone-input-color-placeholder) { 12 | &::-moz-placeholder { color: $plone-color; // Firefox 13 | opacity: 1; } // See https://github.com/twbs/bootstrap/pull/11526 14 | &:-ms-input-placeholder { color: $plone-color; } // Internet Explorer 10+ 15 | &::-webkit-input-placeholder { color: $plone-color; } // Safari and Chrome 16 | } -------------------------------------------------------------------------------- /scss/plone-toolbarlogo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 10 | 11 | 12 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /scss/print.scss: -------------------------------------------------------------------------------- 1 | @media print { 2 | * { 3 | text-shadow: none !important; 4 | color: $black !important; 5 | background: transparent !important; 6 | box-shadow: none !important; 7 | } 8 | 9 | #content-header, 10 | #edit-zone, 11 | #mainnavigation-wrapper, 12 | #portal-breadcrumbs, 13 | #portal-footer-wrapper, 14 | #portal-personaltools, 15 | #portal-searchbox, 16 | .link-https .sidebar-offcanvas { 17 | display: none; 18 | visibility: hidden; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | from pathlib import Path 2 | from setuptools import find_packages 3 | from setuptools import setup 4 | 5 | 6 | version = "3.3.2.dev0" 7 | 8 | long_description = f"{Path('README.md').read_text()}\n{Path('CHANGES.md').read_text()}" 9 | 10 | setup( 11 | name="plonetheme.barceloneta", 12 | version=version, 13 | description="The Classic-UI theme for Plone 6.", 14 | long_description=long_description, 15 | long_description_content_type="text/markdown", 16 | # Get more strings from 17 | # https://pypi.org/classifiers/ 18 | classifiers=[ 19 | "Development Status :: 5 - Production/Stable", 20 | "Environment :: Web Environment", 21 | "Framework :: Plone", 22 | "Framework :: Plone :: 6.0", 23 | "Framework :: Plone :: 6.1", 24 | "Framework :: Plone :: Core", 25 | "Framework :: Plone :: Theme", 26 | "Framework :: Zope :: 5", 27 | "License :: OSI Approved :: GNU General Public License v2 (GPLv2)", 28 | "Operating System :: OS Independent", 29 | "Programming Language :: Python", 30 | "Programming Language :: Python :: 3.8", 31 | "Programming Language :: Python :: 3.9", 32 | "Programming Language :: Python :: 3.10", 33 | "Programming Language :: Python :: 3.11", 34 | "Programming Language :: Python :: 3.12", 35 | "Programming Language :: Python :: 3.13", 36 | ], 37 | keywords="web zope plone theme", 38 | author="Plone Foundation", 39 | author_email="plone-developers@lists.sourceforge.net", 40 | url="https://github.com/plone/plonetheme.barceloneta", 41 | license="GPL version 2", 42 | packages=find_packages("src"), 43 | namespace_packages=["plonetheme"], 44 | package_dir={"": "src"}, 45 | include_package_data=True, 46 | zip_safe=False, 47 | python_requires=">=3.8", 48 | install_requires=[ 49 | "setuptools", 50 | "plone.app.theming", 51 | "plone.resource", 52 | "plone.theme", 53 | "Products.GenericSetup", 54 | ], 55 | extras_require={"test": []}, 56 | entry_points=""" 57 | [z3c.autoinclude.plugin] 58 | target = plone 59 | """, 60 | ) 61 | -------------------------------------------------------------------------------- /src/plonetheme/__init__.py: -------------------------------------------------------------------------------- 1 | __import__("pkg_resources").declare_namespace(__name__) 2 | -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/__init__.py -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/configure.zcml: -------------------------------------------------------------------------------- 1 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 18 | 19 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/interfaces.py: -------------------------------------------------------------------------------- 1 | from plone.theme.interfaces import IDefaultPloneLayer 2 | 3 | 4 | class IBarcelonetaLayer(IDefaultPloneLayer): 5 | """Marker interface that defines a Zope 3 browser layer and a plone skin 6 | marker. 7 | """ 8 | -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/profiles/default/metadata.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 3 4 | 5 | profile-plone.app.theming:default 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/profiles/default/registry/tinymce.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 10 | ++theme++barceloneta/tinymce/tinymce-formats.css 11 | ++theme++barceloneta/tinymce/tinymce-ui-content.css 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/profiles/default/theme.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | barceloneta 4 | true 5 | 6 | -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/backend.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 27 | 28 | 29 | 30 | 31 | 36 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 53 | 54 | 55 | 56 | 57 | 61 | 62 | 65 | 66 | 69 | 70 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 83 | 84 | 85 | 86 | 89 | 90 | 91 | 92 | 95 | 96 | 97 | 98 | 99 | 100 | 103 | 104 | 105 | 108 | 109 | 110 | 113 | 114 | 115 | 118 | 119 | 120 | 123 | 124 | 125 | 128 | 131 | 132 | 133 | 136 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/barceloneta-apple-touch-icon-114x114-precomposed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/barceloneta-apple-touch-icon-114x114-precomposed.png -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/barceloneta-apple-touch-icon-144x144-precomposed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/barceloneta-apple-touch-icon-144x144-precomposed.png -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/barceloneta-apple-touch-icon-57x57-precomposed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/barceloneta-apple-touch-icon-57x57-precomposed.png -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/barceloneta-apple-touch-icon-72x72-precomposed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/barceloneta-apple-touch-icon-72x72-precomposed.png -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/barceloneta-apple-touch-icon-precomposed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/barceloneta-apple-touch-icon-precomposed.png -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/barceloneta-apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/barceloneta-apple-touch-icon.png -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/barceloneta-favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/barceloneta-favicon.ico -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/css/barceloneta-toolbar.min.css: -------------------------------------------------------------------------------- 1 | :root,[data-bs-theme=light]{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-black:#000;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#e9ecef;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray-900:#212529;--bs-primary:#0d6efd;--bs-secondary:#6c757d;--bs-success:#198754;--bs-info:#0dcaf0;--bs-warning:#ffc107;--bs-danger:#dc3545;--bs-light:#f8f9fa;--bs-dark:#212529;--bs-primary-rgb:13,110,253;--bs-secondary-rgb:108,117,125;--bs-success-rgb:25,135,84;--bs-info-rgb:13,202,240;--bs-warning-rgb:255,193,7;--bs-danger-rgb:220,53,69;--bs-light-rgb:248,249,250;--bs-dark-rgb:33,37,41;--bs-primary-text-emphasis:#052c65;--bs-secondary-text-emphasis:#2b2f32;--bs-success-text-emphasis:#0a3622;--bs-info-text-emphasis:#055160;--bs-warning-text-emphasis:#664d03;--bs-danger-text-emphasis:#58151c;--bs-light-text-emphasis:#495057;--bs-dark-text-emphasis:#495057;--bs-primary-bg-subtle:#cfe2ff;--bs-secondary-bg-subtle:#e2e3e5;--bs-success-bg-subtle:#d1e7dd;--bs-info-bg-subtle:#cff4fc;--bs-warning-bg-subtle:#fff3cd;--bs-danger-bg-subtle:#f8d7da;--bs-light-bg-subtle:#fcfcfd;--bs-dark-bg-subtle:#ced4da;--bs-primary-border-subtle:#9ec5fe;--bs-secondary-border-subtle:#c4c8cb;--bs-success-border-subtle:#a3cfbb;--bs-info-border-subtle:#9eeaf9;--bs-warning-border-subtle:#ffe69c;--bs-danger-border-subtle:#f1aeb5;--bs-light-border-subtle:#e9ecef;--bs-dark-border-subtle:#adb5bd;--bs-white-rgb:255,255,255;--bs-black-rgb:0,0,0;--bs-font-sans-serif:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue","Noto Sans","Liberation Sans",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--bs-font-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--bs-gradient:linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-body-font-family:var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight:400;--bs-body-line-height:1.5;--bs-body-color:#212529;--bs-body-color-rgb:33,37,41;--bs-body-bg:#fff;--bs-body-bg-rgb:255,255,255;--bs-emphasis-color:#000;--bs-emphasis-color-rgb:0,0,0;--bs-secondary-color:rgba(33, 37, 41, 0.75);--bs-secondary-color-rgb:33,37,41;--bs-secondary-bg:#e9ecef;--bs-secondary-bg-rgb:233,236,239;--bs-tertiary-color:rgba(33, 37, 41, 0.5);--bs-tertiary-color-rgb:33,37,41;--bs-tertiary-bg:#f8f9fa;--bs-tertiary-bg-rgb:248,249,250;--bs-heading-color:inherit;--bs-link-color:#0d6efd;--bs-link-color-rgb:13,110,253;--bs-link-decoration:underline;--bs-link-hover-color:#0a58ca;--bs-link-hover-color-rgb:10,88,202;--bs-code-color:#d63384;--bs-highlight-color:#212529;--bs-highlight-bg:#fff3cd;--bs-border-width:1px;--bs-border-style:solid;--bs-border-color:#dee2e6;--bs-border-color-translucent:rgba(0, 0, 0, 0.175);--bs-border-radius:0.375rem;--bs-border-radius-sm:0.25rem;--bs-border-radius-lg:0.5rem;--bs-border-radius-xl:1rem;--bs-border-radius-xxl:2rem;--bs-border-radius-2xl:var(--bs-border-radius-xxl);--bs-border-radius-pill:50rem;--bs-box-shadow:0 0.5rem 1rem rgba(0, 0, 0, 0.15);--bs-box-shadow-sm:0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);--bs-box-shadow-lg:0 1rem 3rem rgba(0, 0, 0, 0.175);--bs-box-shadow-inset:inset 0 1px 2px rgba(0, 0, 0, 0.075);--bs-focus-ring-width:0.25rem;--bs-focus-ring-opacity:0.25;--bs-focus-ring-color:rgba(13, 110, 253, 0.25);--bs-form-valid-color:#198754;--bs-form-valid-border-color:#198754;--bs-form-invalid-color:#dc3545;--bs-form-invalid-border-color:#dc3545}[data-bs-theme=dark]{color-scheme:dark;--bs-body-color:#dee2e6;--bs-body-color-rgb:222,226,230;--bs-body-bg:#212529;--bs-body-bg-rgb:33,37,41;--bs-emphasis-color:#fff;--bs-emphasis-color-rgb:255,255,255;--bs-secondary-color:rgba(222, 226, 230, 0.75);--bs-secondary-color-rgb:222,226,230;--bs-secondary-bg:#343a40;--bs-secondary-bg-rgb:52,58,64;--bs-tertiary-color:rgba(222, 226, 230, 0.5);--bs-tertiary-color-rgb:222,226,230;--bs-tertiary-bg:#2b3035;--bs-tertiary-bg-rgb:43,48,53;--bs-primary-text-emphasis:#6ea8fe;--bs-secondary-text-emphasis:#a7acb1;--bs-success-text-emphasis:#75b798;--bs-info-text-emphasis:#6edff6;--bs-warning-text-emphasis:#ffda6a;--bs-danger-text-emphasis:#ea868f;--bs-light-text-emphasis:#f8f9fa;--bs-dark-text-emphasis:#dee2e6;--bs-primary-bg-subtle:#031633;--bs-secondary-bg-subtle:#161719;--bs-success-bg-subtle:#051b11;--bs-info-bg-subtle:#032830;--bs-warning-bg-subtle:#332701;--bs-danger-bg-subtle:#2c0b0e;--bs-light-bg-subtle:#343a40;--bs-dark-bg-subtle:#1a1d20;--bs-primary-border-subtle:#084298;--bs-secondary-border-subtle:#41464b;--bs-success-border-subtle:#0f5132;--bs-info-border-subtle:#087990;--bs-warning-border-subtle:#997404;--bs-danger-border-subtle:#842029;--bs-light-border-subtle:#495057;--bs-dark-border-subtle:#343a40;--bs-heading-color:inherit;--bs-link-color:#6ea8fe;--bs-link-hover-color:#8bb9fe;--bs-link-color-rgb:110,168,254;--bs-link-hover-color-rgb:139,185,254;--bs-code-color:#e685b5;--bs-highlight-color:#dee2e6;--bs-highlight-bg:#664d03;--bs-border-color:#495057;--bs-border-color-translucent:rgba(255, 255, 255, 0.15);--bs-form-valid-color:#75b798;--bs-form-valid-border-color:#75b798;--bs-form-invalid-color:#ea868f;--bs-form-invalid-border-color:#ea868f}*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;border:0;border-top:var(--bs-border-width) solid;opacity:.25}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2;color:var(--bs-heading-color)}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[title]{text-decoration:underline dotted;cursor:help;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.1875em;color:var(--bs-highlight-color);background-color:var(--bs-highlight-bg)}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:rgba(var(--bs-link-color-rgb),var(--bs-link-opacity,1));text-decoration:underline}a:hover{--bs-link-color-rgb:var(--bs-link-hover-color-rgb)}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:var(--bs-font-monospace);font-size:1em}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:var(--bs-code-color);word-wrap:break-word}a>code{color:inherit}kbd{padding:.1875rem .375rem;font-size:.875em;color:var(--bs-body-bg);background-color:var(--bs-body-color);border-radius:.25rem}kbd kbd{padding:0;font-size:1em}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:var(--bs-secondary-color);text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator{display:none!important}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;line-height:inherit;font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button{cursor:pointer;filter:grayscale(1)}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}.nav{--bs-nav-link-padding-x:1rem;--bs-nav-link-padding-y:0.5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color:var(--bs-link-color);--bs-nav-link-hover-color:var(--bs-link-hover-color);--bs-nav-link-disabled-color:var(--bs-secondary-color);display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);font-size:var(--bs-nav-link-font-size);font-weight:var(--bs-nav-link-font-weight);color:var(--bs-nav-link-color);text-decoration:none;background:0 0;border:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}@media (prefers-reduced-motion:reduce){.nav-link{transition:none}}.nav-link:focus,.nav-link:hover{color:var(--bs-nav-link-hover-color)}.nav-link:focus-visible{outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.nav-link.disabled,.nav-link:disabled{color:var(--bs-nav-link-disabled-color);pointer-events:none;cursor:default}.nav-tabs{--bs-nav-tabs-border-width:var(--bs-border-width);--bs-nav-tabs-border-color:var(--bs-border-color);--bs-nav-tabs-border-radius:var(--bs-border-radius);--bs-nav-tabs-link-hover-border-color:var(--bs-secondary-bg) var(--bs-secondary-bg) var(--bs-border-color);--bs-nav-tabs-link-active-color:var(--bs-emphasis-color);--bs-nav-tabs-link-active-bg:var(--bs-body-bg);--bs-nav-tabs-link-active-border-color:var(--bs-border-color) var(--bs-border-color) var(--bs-body-bg);border-bottom:var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color)}.nav-tabs .nav-link{margin-bottom:calc(-1 * var(--bs-nav-tabs-border-width));border:var(--bs-nav-tabs-border-width) solid transparent;border-top-left-radius:var(--bs-nav-tabs-border-radius);border-top-right-radius:var(--bs-nav-tabs-border-radius)}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{isolation:isolate;border-color:var(--bs-nav-tabs-link-hover-border-color)}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:var(--bs-nav-tabs-link-active-color);background-color:var(--bs-nav-tabs-link-active-bg);border-color:var(--bs-nav-tabs-link-active-border-color)}.nav-tabs .dropdown-menu{margin-top:calc(-1 * var(--bs-nav-tabs-border-width));border-top-left-radius:0;border-top-right-radius:0}.nav-pills{--bs-nav-pills-border-radius:var(--bs-border-radius);--bs-nav-pills-link-active-color:#fff;--bs-nav-pills-link-active-bg:#0d6efd}.nav-pills .nav-link{border-radius:var(--bs-nav-pills-border-radius)}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:var(--bs-nav-pills-link-active-color);background-color:var(--bs-nav-pills-link-active-bg)}.nav-underline{--bs-nav-underline-gap:1rem;--bs-nav-underline-border-width:0.125rem;--bs-nav-underline-link-active-color:var(--bs-emphasis-color);gap:var(--bs-nav-underline-gap)}.nav-underline .nav-link{padding-right:0;padding-left:0;border-bottom:var(--bs-nav-underline-border-width) solid transparent}.nav-underline .nav-link:focus,.nav-underline .nav-link:hover{border-bottom-color:currentcolor}.nav-underline .nav-link.active,.nav-underline .show>.nav-link{font-weight:700;color:var(--bs-nav-underline-link-active-color);border-bottom-color:currentcolor}.nav-fill .nav-item,.nav-fill>.nav-link{flex:1 1 auto;text-align:center}.nav-justified .nav-item,.nav-justified>.nav-link{flex-grow:1;flex-basis:0;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}:root,[data-bs-theme=light]{--plone-link-color:#0d6efd;--plone-link-color-on-dark:#16a1e3;--plone-link-color-on-grey:#086ca3;--plone-link-hover-color:#024dbc;--plone-portlet-list-hover-bg:#fcfcfd;--plone-portlet-footer-bg:#fcfcfd;--plone-portlet-list-bullet:#64bee8;--plone-state-draft:#fab82a;--plone-state-pending:#ccd111;--plone-state-private:#c4183c;--plone-state-internal:#fab82a;--plone-state-internally-published:#883dfa}[data-bs-theme=dark]{--plone-link-color:#007bb1;--plone-link-color-on-dark:#16a1e3;--plone-link-color-on-grey:#086ca3;--plone-link-hover-color:#024dbc;--plone-portlet-list-hover-bg:#161719;--plone-portlet-footer-bg:#161719;--plone-portlet-list-bullet:#64bee8;--plone-state-draft:#fab82a;--plone-state-pending:#e2e721;--plone-state-private:#f96483;--plone-state-internal:#fab82a;--plone-state-internally-published:#ab75ff}:root{--plone-toolbar-bg:var(--bs-dark);--plone-toolbar-text-color:var(--bs-white);--plone-toolbar-locked-color:var(--bs-warning);--plone-toolbar-font:"Roboto","Helvetica Neue",Helvetica,Arial,sans-serif;--plone-toolbar-separator-color:var(--bs-gray-500);--plone-toolbar-link-color:var(--plone-link-color);--plone-toolbar-link-hover-color:var(--plone-link-hover-color);--plone-toolbar-width:220px;--plone-toolbar-width-collapsed:60px;--plone-toolbar-top-height:2.5rem}#edit-zone{font-family:var(--plone-toolbar-font);position:fixed;z-index:1040;top:0;left:0;bottom:0;display:flex;flex-direction:column;height:100%;background:var(--plone-toolbar-bg);width:var(--plone-toolbar-width);color:var(--plone-toolbar-text-color);border-right:none}#edit-zone,#edit-zone .dropdown-menu{background-color:var(--plone-toolbar-bg)}#edit-zone .dropdown-header{color:var(--plone-toolbar-text-color)}#edit-zone .dropdown-menu{border-radius:0;min-width:12rem;overflow-y:auto;max-height:100vh}#edit-zone .dropdown-item,#edit-zone .nav-link{color:var(--plone-toolbar-text-color)}#edit-zone .dropdown-item:focus,#edit-zone .dropdown-item:hover,#edit-zone .nav-link:focus,#edit-zone .nav-link:hover{background:var(--plone-toolbar-link-color);color:var(--plone-toolbar-text-color)}#edit-zone .dropdown-item:focus .label-state-external,#edit-zone .dropdown-item:focus .label-state-published,#edit-zone .dropdown-item:hover .label-state-external,#edit-zone .dropdown-item:hover .label-state-published,#edit-zone .nav-link:focus .label-state-external,#edit-zone .nav-link:focus .label-state-published,#edit-zone .nav-link:hover .label-state-external,#edit-zone .nav-link:hover .label-state-published{color:var(--plone-toolbar-link-hover-color)!important}#edit-zone .toolbar-header{background:var(--bs-primary);padding:.5rem 1rem;margin-bottom:.5rem;height:var(--plone-toolbar-top-height)}#edit-zone .toolbar-header a{color:var(--plone-toolbar-text-color);cursor:pointer}@media (max-width:767.98px){#edit-zone .toolbar-header a{display:none}}#edit-zone .label-state-external,#edit-zone .label-state-published{color:var(--plone-link-color-on-dark)!important}#edit-zone .label-state-internally_published{color:var(--plone-state-internally-published-color)!important}#edit-zone .label-state-pending{color:var(--plone-state-pending)!important}#edit-zone .label-state-pending:hover,#edit-zone li.active .label-state-pending{color:var(--plone-toolbar-text-color)!important}#edit-zone .label-state-draft,#edit-zone .label-state-internal{color:var(--plone-state-draft)!important}#edit-zone .label-state-private{color:var(--plone-state-private)!important}#edit-zone .personaltools-wrapper{margin-top:auto;border-top:solid 1px var(--plone-toolbar-separator-color);padding:.5rem 0}body.plone-toolbar-left{padding-left:var(--plone-toolbar-width-collapsed)}body.plone-toolbar-left .toolbar-collapse,body.plone-toolbar-left .toolbar-expand{display:none}body.plone-toolbar-left #edit-zone .nav-link{display:flex;width:100%;padding-right:.5rem}body.plone-toolbar-left #edit-zone .nav-link .plone-icon{margin-top:.25em;margin-right:.5em;flex-shrink:0}body.plone-toolbar-left #edit-zone .nav-link .toolbar-label{flex-grow:1}body.plone-toolbar-left #edit-zone .nav-link:after{margin-top:.5em;width:.3em;height:.3em}body.plone-toolbar-left #edit-zone .border-top{border-top-color:var(--plone-toolbar-separator-color)}body.plone-toolbar-left .toolbar-expand{display:block}body.plone-toolbar-left #edit-zone{visibility:visible!important;transform:none;transition:none;width:var(--plone-toolbar-width-collapsed)}body.plone-toolbar-left #edit-zone .toolbar-label{display:none}@media (min-width:768px){body.plone-toolbar-left.plone-toolbar-left-expanded{padding-left:var(--plone-toolbar-width)}body.plone-toolbar-left.plone-toolbar-left-expanded .toolbar-expand{display:none}body.plone-toolbar-left.plone-toolbar-left-expanded .toolbar-collapse{display:block}body.plone-toolbar-left.plone-toolbar-left-expanded #edit-zone{width:var(--plone-toolbar-width)}body.plone-toolbar-left.plone-toolbar-left-expanded #edit-zone .toolbar-label{display:inline-block;white-space:initial;hyphens:auto;word-break:break-word;vertical-align:top}}body.plone-toolbar-top{padding-left:var(--plone-toolbar-width-collapsed);padding-top:0}body.plone-toolbar-top .toolbar-collapse,body.plone-toolbar-top .toolbar-expand{display:none}body.plone-toolbar-top .toolbar-label{display:none}@media (min-width:768px){body.plone-toolbar-top{padding-top:var(--plone-toolbar-top-height);padding-left:0}body.plone-toolbar-top .toolbar-collapse,body.plone-toolbar-top .toolbar-header{height:100%}body.plone-toolbar-top #edit-zone{bottom:unset;width:100%;flex-direction:row;height:var(--plone-toolbar-top-height)}body.plone-toolbar-top #edit-zone .plone-toolbar-main{flex-direction:row}body.plone-toolbar-top #edit-zone .plone-toolbar-main>.border-top{border-top:none;border-right:solid 1px var(--plone-toolbar-separator-color)}body.plone-toolbar-top #edit-zone .personaltools-wrapper{margin-left:auto;margin-top:0;padding:0;border-top:none}}@media (max-width:767.98px){body.plone-toolbar-top #edit-zone{width:var(--plone-toolbar-width-collapsed)}body.plone-toolbar-top #edit-zone .nav-link{padding-right:.5rem}body.plone-toolbar-top #edit-zone .nav-link.dropdown-toggle::after{vertical-align:0;margin-left:0;border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}body.plone-toolbar-top #edit-zone .dropdown-menu.show{display:block;margin-left:var(--plone-toolbar-width-collapsed)!important;margin-top:-2.5rem!important}}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}@media (min-width:576px){.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}}@media (min-width:768px){.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}}@media (min-width:992px){.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}}@media (min-width:1200px){.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}}@media (min-width:1400px){.flex-xxl-row{flex-direction:row!important}.flex-xxl-column{flex-direction:column!important}.flex-xxl-row-reverse{flex-direction:row-reverse!important}.flex-xxl-column-reverse{flex-direction:column-reverse!important}} 2 | /*# sourceMappingURL=barceloneta-toolbar.min.css.map */ -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/grid-col-marker.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 10 | 11 | 12 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 29 | 30 | 31 | 32 | 38 | 39 | 40 | 41 | 47 | 48 | -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Plone Theme 6 | 9 | 13 | 17 | 21 | 25 | 28 | 29 | 30 | 31 |
32 |
33 | 34 |
35 |
38 | 39 |
42 |
43 | 44 |
47 | 50 | 60 |
61 | 62 |
63 | 64 | 96 | 97 |
100 |
101 |
102 |
103 |
104 |
105 | 106 |
107 |
108 |
109 |
110 | 111 |
112 |
113 | 116 |
117 |
120 |
121 |
122 | 124 | 128 |
129 | 130 |
131 | 132 | 133 |
134 | 135 | 136 |
139 | 153 |
154 | 155 | 156 | 157 | 158 | -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/manifest.cfg: -------------------------------------------------------------------------------- 1 | [theme] 2 | title = Barceloneta Theme 3 | description = The default theme for Plone 6 4 | preview = preview.png 5 | rules = /++theme++barceloneta/rules.xml 6 | prefix = /++theme++barceloneta 7 | doctype = 8 | enabled-bundles = 9 | disabled-bundles = 10 | 11 | # Resources must be registered either here in the Diazo bundle or in registry.xml 12 | development-css = ++theme++barceloneta/css/barceloneta.css 13 | production-css = ++theme++barceloneta/css/barceloneta.min.css 14 | tinymce-content-css = /++theme++barceloneta/css/barceloneta.min.css 15 | development-js = 16 | production-js = 17 | 18 | [theme:parameters] 19 | ajax_load = python:request.get('ajax_load') 20 | portal_url = portal_state/portal_url 21 | -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/preview.png -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/Apache License.txt: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright [yyyy] [name of copyright owner] 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/README.rst: -------------------------------------------------------------------------------- 1 | Fonts 2 | ----- 3 | 4 | This readme has some information about the shipped font files and where these 5 | font files are from. 6 | 7 | Download 8 | -------- 9 | 10 | The Roboto ttf fonts in this directory are downloaded from: 11 | 12 | `http://www.fontsquirrel.com/fonts/roboto-2014` 13 | 14 | Other formats are generated with: 15 | 16 | `http://www.fontsquirrel.com/tools/webfont-generator` 17 | 18 | 19 | For the used settings upload the `generator_config.txt` file to the generator. 20 | 21 | 22 | Subsetting 23 | ---------- 24 | 25 | Subsetting reduces the number of glyphs in the font to make a smaller file. 26 | The shipped with Barceloneta contain all designed glyphs (no subset). 27 | 28 | 29 | Formats 30 | ------- 31 | 32 | Roboto fonts shipped with Barceloneta are available in the following file types: 33 | 34 | TTF - Works in most browsers except IE and iPhone. 35 | EOT - IE only. 36 | WOFF - Compressed, emerging standard. 37 | WOFF2 - Better compressed, emerging standard. 38 | SVG - iPhone/iPad. 39 | 40 | 41 | Changes 42 | ------- 43 | 44 | - All downloaded fonts are moved into one `roboto` directory 45 | - `Apache License.txt` is moved into the `roboto` directory 46 | - `generator_config.txt` is moved into the `roboto` directory 47 | - Changed the .ttf files to lower case. 48 | 49 | 50 | SVG IDs 51 | ------- 52 | 53 | SVG fonts need the correct ID in the font-face declaration. These are the 54 | id's as supplied in the font-face declarations by Font Squirrel: 55 | 56 | - roboto-black.svg#robotoblack 57 | - roboto-blackitalic.svg#robotoblack_italic 58 | - roboto-bold.svg#robotobold 59 | - roboto-bolditalic.svg#robotobold_italic 60 | - roboto-italic.svg#robotoitalic 61 | - roboto-light.svg#robotolight 62 | - roboto-lightitalic.svg#robotolight_italic 63 | - roboto-medium.svg#robotomedium 64 | - roboto-mediumitalic.svg#robotomedium_italic 65 | - roboto-regular.svg#robotoregular 66 | - roboto-thin.svg#robotothin 67 | - roboto-thinitalic.svg#robotothin_italic 68 | 69 | - robotocondensed-regular.svg#roboto_condensedregular 70 | - robotocondensed-lightitalic.svg#roboto_condensedlight_italic 71 | - robotocondensed-bolditalic.svg#roboto_condensedbold_italic 72 | - robotocondensed-italic.svg#roboto_condenseditalic 73 | - robotocondensed-light.svg#roboto_condensedlight 74 | - robotocondensed-bold.svg#roboto_condensedbold 75 | 76 | 77 | Local 78 | ----- 79 | 80 | Roboto is Androids default font. Therefore it is likely to be available on many 81 | devices. We use `local` in the font-face declaration to let the browser 82 | try to load the system installed Roboto first. 83 | 84 | Noto 85 | ---- 86 | 87 | Google has been developing a font family called Noto, which aims to support 88 | all languages with a harmonious look and feel. So checkout 89 | `http://www.google.com/get/noto` if you need to support a language that 90 | has other writing system than supported by Roboto. 91 | -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/generator_config.txt: -------------------------------------------------------------------------------- 1 | # Font Squirrel Font-face Generator Configuration File 2 | # Upload this file to the generator to recreate the settings 3 | # you used to create these fonts. 4 | 5 | {"mode":"expert","formats":["ttf","woff","woff2","eotz","svg"],"tt_instructor":"keep","fix_vertical_metrics":"N","metrics_ascent":"","metrics_descent":"","metrics_linegap":"","fallback":"none","fallback_custom":"100","options_subset":"none","subset_custom":"","subset_custom_range":"","subset_ot_features_list":"","css_stylesheet":"stylesheet.css","filename_suffix":"","emsquare":"2048","spacing_adjustment":"0","rememberme":"Y"} -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/roboto-black.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/roboto-black.eot -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/roboto-black.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/roboto-black.ttf -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/roboto-black.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/roboto-black.woff -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/roboto-black.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/roboto-black.woff2 -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/roboto-blackitalic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/roboto-blackitalic.eot -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/roboto-blackitalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/roboto-blackitalic.ttf -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/roboto-blackitalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/roboto-blackitalic.woff -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/roboto-blackitalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/roboto-blackitalic.woff2 -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/roboto-bold.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/roboto-bold.eot -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/roboto-bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/roboto-bold.ttf -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/roboto-bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/roboto-bold.woff -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/roboto-bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/roboto-bold.woff2 -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/roboto-bolditalic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/roboto-bolditalic.eot -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/roboto-bolditalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/roboto-bolditalic.ttf -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/roboto-bolditalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/roboto-bolditalic.woff -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/roboto-bolditalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/roboto-bolditalic.woff2 -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/roboto-italic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/roboto-italic.eot -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/roboto-italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/roboto-italic.ttf -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/roboto-italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/roboto-italic.woff -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/roboto-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/roboto-italic.woff2 -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/roboto-light.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/roboto-light.eot -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/roboto-light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/roboto-light.ttf -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/roboto-light.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/roboto-light.woff -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/roboto-light.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/roboto-light.woff2 -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/roboto-lightitalic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/roboto-lightitalic.eot -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/roboto-lightitalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/roboto-lightitalic.ttf -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/roboto-lightitalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/roboto-lightitalic.woff -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/roboto-lightitalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/roboto-lightitalic.woff2 -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/roboto-medium.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/roboto-medium.eot -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/roboto-medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/roboto-medium.ttf -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/roboto-medium.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/roboto-medium.woff -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/roboto-medium.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/roboto-medium.woff2 -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/roboto-mediumitalic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/roboto-mediumitalic.eot -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/roboto-mediumitalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/roboto-mediumitalic.ttf -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/roboto-mediumitalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/roboto-mediumitalic.woff -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/roboto-mediumitalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/roboto-mediumitalic.woff2 -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/roboto-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/roboto-regular.eot -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/roboto-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/roboto-regular.ttf -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/roboto-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/roboto-regular.woff -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/roboto-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/roboto-regular.woff2 -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/roboto-thin.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/roboto-thin.eot -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/roboto-thin.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/roboto-thin.ttf -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/roboto-thin.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/roboto-thin.woff -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/roboto-thin.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/roboto-thin.woff2 -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/roboto-thinitalic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/roboto-thinitalic.eot -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/roboto-thinitalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/roboto-thinitalic.ttf -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/roboto-thinitalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/roboto-thinitalic.woff -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/roboto-thinitalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/roboto-thinitalic.woff2 -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/robotocondensed-bold.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/robotocondensed-bold.eot -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/robotocondensed-bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/robotocondensed-bold.ttf -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/robotocondensed-bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/robotocondensed-bold.woff -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/robotocondensed-bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/robotocondensed-bold.woff2 -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/robotocondensed-bolditalic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/robotocondensed-bolditalic.eot -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/robotocondensed-bolditalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/robotocondensed-bolditalic.ttf -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/robotocondensed-bolditalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/robotocondensed-bolditalic.woff -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/robotocondensed-bolditalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/robotocondensed-bolditalic.woff2 -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/robotocondensed-italic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/robotocondensed-italic.eot -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/robotocondensed-italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/robotocondensed-italic.ttf -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/robotocondensed-italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/robotocondensed-italic.woff -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/robotocondensed-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/robotocondensed-italic.woff2 -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/robotocondensed-light.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/robotocondensed-light.eot -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/robotocondensed-light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/robotocondensed-light.ttf -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/robotocondensed-light.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/robotocondensed-light.woff -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/robotocondensed-light.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/robotocondensed-light.woff2 -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/robotocondensed-lightitalic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/robotocondensed-lightitalic.eot -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/robotocondensed-lightitalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/robotocondensed-lightitalic.ttf -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/robotocondensed-lightitalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/robotocondensed-lightitalic.woff -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/robotocondensed-lightitalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/robotocondensed-lightitalic.woff2 -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/robotocondensed-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/robotocondensed-regular.eot -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/robotocondensed-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/robotocondensed-regular.ttf -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/robotocondensed-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/robotocondensed-regular.woff -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/roboto/robotocondensed-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/theme/roboto/robotocondensed-regular.woff2 -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/rules.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 22 | 23 | 26 | 27 | 30 | 31 | 34 | 35 | 36 | 37 | 40 | 43 | 44 | 47 | 48 | 49 | 50 | 54 | 58 | 59 | 60 | 63 | 64 | 68 | 69 | 73 | 74 | 75 | 76 | 80 | 81 | 82 | 85 | 86 | 87 | 90 | 91 | 92 | 95 | 96 | 97 | 100 | 101 | 102 | 105 | 108 | 109 | 110 | 113 | 116 | 117 | 118 | 122 | 123 | 124 | 127 | 130 | 131 | 132 | 135 | 138 | 139 | 140 | 143 | 146 | 147 | 148 | 149 | 152 | 155 | 156 | col-md-12 157 | col-md-6 158 | col-md-4 159 | col-md-3 160 | col-md-4 161 | 162 | 163 |
164 | 165 | 166 | 167 | 168 | 169 |

170 |
171 |
172 | 173 | 174 |
    175 | 176 |
  • 177 | 178 | 179 |
  • 180 |
    181 |
182 |
183 | 184 | 185 | 186 |
187 | 188 |

189 |
190 |
191 | 192 | 193 | 194 |
195 |
196 |
197 |
198 |
199 | 200 | 201 | 204 | 205 | 206 | 211 | 214 | 215 | 216 |
217 | -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/theme/tinymce/tinymce-formats.css: -------------------------------------------------------------------------------- 1 | /* tinyMCE format examples 2 | Styles in will be automatically added to the top level of the formats menu. 3 | Condition is that the file is named tinymce-formats.css and registered in the TinyMCE controlpanel. 4 | */ 5 | 6 | .highlight-inline { 7 | background: #FFFE14; 8 | } 9 | 10 | p.highlight-paragraph { 11 | background: #FFFE14; 12 | padding: 1rem; 13 | } 14 | -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/upgrades/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plone/plonetheme.barceloneta/ea7eaa176692009b8f7b02596eb76c7e833b188e/src/plonetheme/barceloneta/upgrades/__init__.py -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/upgrades/configure.zcml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 13 | 14 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /src/plonetheme/barceloneta/upgrades/upgrades.py: -------------------------------------------------------------------------------- 1 | from plone.app.theming import utils as theme_utils 2 | 3 | import logging 4 | 5 | 6 | logger = logging.getLogger(__name__) 7 | 8 | 9 | def reload_theme(context): 10 | # Reload theme to add ajax_load theme parameter. 11 | if theme_utils.getCurrentTheme() == "barceloneta": 12 | theme = theme_utils.getTheme("barceloneta") 13 | theme_utils.applyTheme(theme) 14 | logger.info("Reloaded Barceloneta.") 15 | -------------------------------------------------------------------------------- /toolbar-demo.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Barcelona Toolbar Demo 5 | 8 | 9 | 10 | 71 | 72 | 73 | -------------------------------------------------------------------------------- /tox.ini: -------------------------------------------------------------------------------- 1 | # Generated from: 2 | # https://github.com/plone/meta/tree/main/src/plone/meta/default 3 | # See the inline comments on how to expand/tweak this configuration file 4 | [tox] 5 | # We need 4.4.0 for constrain_package_deps. 6 | min_version = 4.4.0 7 | envlist = 8 | lint 9 | test 10 | py313-plone62 11 | py310-plone62 12 | py313-plone61 13 | py310-plone61 14 | dependencies 15 | 16 | 17 | ## 18 | # Add extra configuration options in .meta.toml: 19 | # - to specify a custom testing combination of Plone and python versions, use `test_matrix` 20 | # - to specify extra custom environments, use `envlist_lines` 21 | # - to specify extra `tox` top-level options, use `config_lines` 22 | # [tox] 23 | # test_matrix = {"6.2" = ["3.13", "3.12"], "6.1" = ["3.10", "3.9"]} 24 | # envlist_lines = """ 25 | # my_other_environment 26 | # """ 27 | # config_lines = """ 28 | # my_extra_top_level_tox_configuration_lines 29 | # """ 30 | ## 31 | 32 | [testenv:init] 33 | description = Prepare environment 34 | skip_install = true 35 | allowlist_externals = 36 | echo 37 | commands = 38 | echo "Initial setup complete" 39 | 40 | [testenv:format] 41 | description = automatically reformat code 42 | skip_install = true 43 | deps = 44 | pre-commit 45 | commands = 46 | pre-commit run -a pyupgrade 47 | pre-commit run -a isort 48 | pre-commit run -a black 49 | pre-commit run -a zpretty 50 | 51 | [testenv:lint] 52 | description = run linters that will help improve the code style 53 | skip_install = true 54 | deps = 55 | pre-commit 56 | commands = 57 | pre-commit run -a 58 | 59 | [testenv:dependencies] 60 | description = check if the package defines all its dependencies 61 | skip_install = true 62 | deps = 63 | build 64 | z3c.dependencychecker==2.14.3 65 | commands = 66 | python -m build --sdist 67 | dependencychecker 68 | 69 | [testenv:dependencies-graph] 70 | description = generate a graph out of the dependencies of the package 71 | skip_install = false 72 | allowlist_externals = 73 | sh 74 | deps = 75 | pipdeptree==2.5.1 76 | graphviz # optional dependency of pipdeptree 77 | commands = 78 | sh -c 'pipdeptree --exclude setuptools,wheel,pipdeptree,zope.interface,zope.component --graph-output svg > dependencies.svg' 79 | 80 | 81 | [test_runner] 82 | deps = zope.testrunner 83 | test = 84 | zope-testrunner --all --test-path={toxinidir}/src -s plonetheme.barceloneta {posargs} 85 | coverage = 86 | coverage run --branch --source plonetheme.barceloneta {envbindir}/zope-testrunner --quiet --all --test-path={toxinidir}/src -s plonetheme.barceloneta {posargs} 87 | coverage report -m --format markdown 88 | coverage xml 89 | coverage html 90 | 91 | [base] 92 | description = shared configuration for tests and coverage 93 | use_develop = true 94 | skip_install = false 95 | constrain_package_deps = true 96 | set_env = 97 | ROBOT_BROWSER=headlesschrome 98 | 99 | ## 100 | # Specify extra test environment variables in .meta.toml: 101 | # [tox] 102 | # test_environment_variables = """ 103 | # PIP_EXTRA_INDEX_URL=https://my-pypi.my-server.com/ 104 | # """ 105 | # 106 | # Set constrain_package_deps .meta.toml: 107 | # [tox] 108 | # constrain_package_deps = false 109 | ## 110 | deps = 111 | {[test_runner]deps} 112 | plone62: -c https://dist.plone.org/release/6.2-dev/constraints.txt 113 | plone61: -c https://dist.plone.org/release/6.1-dev/constraints.txt 114 | 115 | ## 116 | # Specify additional deps in .meta.toml: 117 | # [tox] 118 | # test_deps_additional = """ 119 | # -esources/plonegovbr.portal_base[test] 120 | # """ 121 | # 122 | # Specify a custom constraints file in .meta.toml: 123 | # [tox] 124 | # constraints_file = "https://my-server.com/constraints.txt" 125 | ## 126 | extras = 127 | test 128 | 129 | 130 | ## 131 | # Add extra configuration options in .meta.toml: 132 | # [tox] 133 | # test_extras = """ 134 | # tests 135 | # widgets 136 | # """ 137 | # 138 | # Add extra configuration options in .meta.toml: 139 | # [tox] 140 | # testenv_options = """ 141 | # basepython = /usr/bin/python3.8 142 | # """ 143 | ## 144 | 145 | [testenv:test] 146 | description = run the distribution tests 147 | use_develop = {[base]use_develop} 148 | skip_install = {[base]skip_install} 149 | constrain_package_deps = {[base]constrain_package_deps} 150 | set_env = {[base]set_env} 151 | deps = 152 | {[test_runner]deps} 153 | -c https://dist.plone.org/release/6.2-dev/constraints.txt 154 | 155 | commands = {[test_runner]test} 156 | extras = {[base]extras} 157 | 158 | 159 | [testenv] 160 | description = run the distribution tests (generative environments) 161 | use_develop = {[base]use_develop} 162 | skip_install = {[base]skip_install} 163 | constrain_package_deps = {[base]constrain_package_deps} 164 | set_env = {[base]set_env} 165 | deps = {[base]deps} 166 | commands = {[test_runner]test} 167 | extras = {[base]extras} 168 | 169 | 170 | [testenv:coverage] 171 | description = get a test coverage report 172 | use_develop = {[base]use_develop} 173 | skip_install = {[base]skip_install} 174 | constrain_package_deps = {[base]constrain_package_deps} 175 | set_env = {[base]set_env} 176 | deps = 177 | {[test_runner]deps} 178 | coverage 179 | -c https://dist.plone.org/release/6.2-dev/constraints.txt 180 | 181 | commands = {[test_runner]coverage} 182 | extras = {[base]extras} 183 | 184 | 185 | [testenv:release-check] 186 | description = ensure that the distribution is ready to release 187 | skip_install = true 188 | deps = 189 | twine 190 | build 191 | towncrier 192 | -c https://dist.plone.org/release/6.2-dev/constraints.txt 193 | 194 | commands = 195 | # fake version to not have to install the package 196 | # we build the change log as news entries might break 197 | # the README that is displayed on PyPI 198 | towncrier build --version=100.0.0 --yes 199 | python -m build --sdist 200 | twine check dist/* 201 | 202 | [testenv:circular] 203 | description = ensure there are no cyclic dependencies 204 | use_develop = true 205 | skip_install = false 206 | # Here we must always constrain the package deps to what is already installed, 207 | # otherwise we simply get the latest from PyPI, which may not work. 208 | constrain_package_deps = true 209 | set_env = 210 | 211 | ## 212 | # Specify extra test environment variables in .meta.toml: 213 | # [tox] 214 | # test_environment_variables = """ 215 | # PIP_EXTRA_INDEX_URL=https://my-pypi.my-server.com/ 216 | # """ 217 | ## 218 | allowlist_externals = 219 | sh 220 | deps = 221 | pipdeptree 222 | pipforester 223 | -c https://dist.plone.org/release/6.2-dev/constraints.txt 224 | 225 | commands = 226 | # Generate the full dependency tree 227 | sh -c 'pipdeptree -j > forest.json' 228 | # Generate a DOT graph with the circular dependencies, if any 229 | pipforester -i forest.json -o forest.dot --cycles 230 | # Report if there are any circular dependencies, i.e. error if there are any 231 | pipforester -i forest.json --check-cycles -o /dev/null 232 | 233 | 234 | ## 235 | # Add extra configuration options in .meta.toml: 236 | # [tox] 237 | # extra_lines = """ 238 | # _your own configuration lines_ 239 | # """ 240 | ## 241 | --------------------------------------------------------------------------------