diff --git a/.github/workflows/detect-secrets.yaml b/.github/workflows/detect-secrets.yaml index ab471b79..59029c2c 100644 --- a/.github/workflows/detect-secrets.yaml +++ b/.github/workflows/detect-secrets.yaml @@ -8,13 +8,16 @@ jobs: container: python:latest steps: - - uses: actions/checkout@v2 - + - uses: actions/checkout@v3 + + - run: git config --global --add safe.directory "$GITHUB_WORKSPACE" + - name: Install Yelp's detect secrets run: | apt-get update && apt-get install -y jq + pip install --upgrade pip pip install yq pip install detect-secrets==$(yq -r .repos[0].rev .pre-commit-config.yaml) - name: Detect potential secrets - run: find -type f -not -path './.git/*' -printf '%P\n' | xargs detect-secrets-hook --baseline .secrets.baseline + run: git ls-files -z | xargs -0 detect-secrets-hook --baseline .secrets.baseline diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 919e6409..6ea4002c 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,6 +1,6 @@ repos: - repo: git@github.com:Yelp/detect-secrets - rev: v1.0.3 + rev: v1.4.0 hooks: - id: detect-secrets args: ['--baseline', '.secrets.baseline'] diff --git a/.secrets.baseline b/.secrets.baseline index a27b7e7b..3d3fccba 100644 --- a/.secrets.baseline +++ b/.secrets.baseline @@ -1,5 +1,5 @@ { - "version": "1.0.3", + "version": "1.4.0", "plugins_used": [ { "name": "ArtifactoryDetector" @@ -20,6 +20,12 @@ { "name": "CloudantDetector" }, + { + "name": "DiscordBotTokenDetector" + }, + { + "name": "GitHubTokenDetector" + }, { "name": "HexHighEntropyString", "limit": 3.0 @@ -46,6 +52,9 @@ { "name": "PrivateKeyDetector" }, + { + "name": "SendGridDetector" + }, { "name": "SlackDetector" }, @@ -80,6 +89,12 @@ { "path": "detect_secrets.filters.heuristic.is_likely_id_string" }, + { + "path": "detect_secrets.filters.heuristic.is_lock_file" + }, + { + "path": "detect_secrets.filters.heuristic.is_not_alphanumeric_string" + }, { "path": "detect_secrets.filters.heuristic.is_potential_uuid" }, @@ -89,6 +104,9 @@ { "path": "detect_secrets.filters.heuristic.is_sequential_string" }, + { + "path": "detect_secrets.filters.heuristic.is_swagger_file" + }, { "path": "detect_secrets.filters.heuristic.is_templated_secret" } @@ -98,25 +116,39 @@ { "type": "Secret Keyword", "filename": "appconfigservice/README.md", - "hashed_secret": "055d8a847dfea9c1c840140dd0940b0a5a832565", + "hashed_secret": "3c934d2c3326a4f2d2d77be4629b074872750d76", "is_verified": false, - "line_number": 22, + "line_number": 52, "is_secret": false - }, + } + ], + "appconfigservice/api/test/test_app_config.py": [ { "type": "Secret Keyword", - "filename": "appconfigservice/README.md", - "hashed_secret": "c2d2d8a23ffdcdee0e074b02d3a076d1546dc803", + "filename": "appconfigservice/api/test/test_app_config.py", + "hashed_secret": "bb21158c733229347bd4e681891e213d94c685be", "is_verified": false, - "line_number": 28, + "line_number": 55, "is_secret": false - }, + } + ], + "appconfigservice/api/test/test_index.py": [ { "type": "Secret Keyword", - "filename": "appconfigservice/README.md", - "hashed_secret": "93b6e269c00e67237d474cb068bbfb1362ea48b8", + "filename": "appconfigservice/api/test/test_index.py", + "hashed_secret": "bb21158c733229347bd4e681891e213d94c685be", "is_verified": false, - "line_number": 52, + "line_number": 29, + "is_secret": false + } + ], + "appconfigservice/api/test/test_search_config.py": [ + { + "type": "Secret Keyword", + "filename": "appconfigservice/api/test/test_search_config.py", + "hashed_secret": "bb21158c733229347bd4e681891e213d94c685be", + "is_verified": false, + "line_number": 29, "is_secret": false } ], @@ -128,100 +160,118 @@ "is_verified": false, "line_number": 65, "is_secret": false - } - ], - "auth-middleware-test-svc/README.md": [ + }, { "type": "Secret Keyword", - "filename": "auth-middleware-test-svc/README.md", - "hashed_secret": "055d8a847dfea9c1c840140dd0940b0a5a832565", + "filename": "appconfigservice/appconfig.yaml", + "hashed_secret": "a45a360e6ff9bceaf3fcfef370a6d6e1d4ba9271", "is_verified": false, - "line_number": 30, + "line_number": 65, "is_secret": false - } - ], - "authservice/README.md": [ + }, { "type": "Secret Keyword", - "filename": "authservice/README.md", - "hashed_secret": "c2d2d8a23ffdcdee0e074b02d3a076d1546dc803", + "filename": "appconfigservice/appconfig.yaml", + "hashed_secret": "967b337f4eb99a877c1d326531d6a197b972a713", "is_verified": false, - "line_number": 73, + "line_number": 300, "is_secret": false } ], - "contributions/catalog/Dockerfile": [ + "contributions/README.md": [ { - "type": "Secret Keyword", - "filename": "contributions/catalog/Dockerfile", - "hashed_secret": "b6ee60926c0a426addcbb7e087d4274498f35b1c", + "type": "Hex High Entropy String", + "filename": "contributions/README.md", + "hashed_secret": "1da0126accdd44a043f50ae89644c355579e9008", "is_verified": false, - "line_number": 23, + "line_number": 150, "is_secret": false - } - ], - "eventservice/README.md": [ + }, { - "type": "Secret Keyword", - "filename": "eventservice/README.md", - "hashed_secret": "c2d2d8a23ffdcdee0e074b02d3a076d1546dc803", + "type": "Hex High Entropy String", + "filename": "contributions/README.md", + "hashed_secret": "923f444e304cd39f5803a8fe3a64f624837cb0a0", "is_verified": false, - "line_number": 24, + "line_number": 833, "is_secret": false }, { - "type": "Secret Keyword", - "filename": "eventservice/README.md", - "hashed_secret": "99f11f7789a5315285e569895445507118f188bd", + "type": "Hex High Entropy String", + "filename": "contributions/README.md", + "hashed_secret": "f6b110e76ea7968dbbfb44b70822238ba8d55740", + "is_verified": false, + "line_number": 873, + "is_secret": false + }, + { + "type": "Hex High Entropy String", + "filename": "contributions/README.md", + "hashed_secret": "3b5dcb0f5163198f51b25c9ac24a1e3950f23b6f", "is_verified": false, - "line_number": 30, + "line_number": 1174, "is_secret": false } ], - "loggingservice/README.md": [ + "contributions/contribution.yaml": [ { "type": "Secret Keyword", - "filename": "loggingservice/README.md", - "hashed_secret": "c2d2d8a23ffdcdee0e074b02d3a076d1546dc803", + "filename": "contributions/contribution.yaml", + "hashed_secret": "967b337f4eb99a877c1d326531d6a197b972a713", "is_verified": false, - "line_number": 22, + "line_number": 862, "is_secret": false - }, + } + ], + "eventservice/README.md": [ + { + "type": "Hex High Entropy String", + "filename": "eventservice/README.md", + "hashed_secret": "738cfd4b80282ef1adafa910355da8c0f4ba3a83", + "is_verified": false, + "line_number": 120, + "is_secret": false + } + ], + "eventservice/events.yaml": [ { "type": "Secret Keyword", - "filename": "loggingservice/README.md", - "hashed_secret": "99f11f7789a5315285e569895445507118f188bd", + "filename": "eventservice/events.yaml", + "hashed_secret": "967b337f4eb99a877c1d326531d6a197b972a713", "is_verified": false, - "line_number": 28, + "line_number": 950, "is_secret": false } ], - "profileservice/README.md": [ + "lib/auth-middleware/auth_middleware/__init__.py": [ { "type": "Secret Keyword", - "filename": "profileservice/README.md", - "hashed_secret": "055d8a847dfea9c1c840140dd0940b0a5a832565", + "filename": "lib/auth-middleware/auth_middleware/__init__.py", + "hashed_secret": "f6e3f71c77bbae9e01381e855927239c0d679530", "is_verified": false, - "line_number": 38, + "line_number": 34, "is_secret": false - }, + } + ], + "loggingservice/logging.yaml": [ { "type": "Secret Keyword", - "filename": "profileservice/README.md", - "hashed_secret": "c2d2d8a23ffdcdee0e074b02d3a076d1546dc803", + "filename": "loggingservice/logging.yaml", + "hashed_secret": "967b337f4eb99a877c1d326531d6a197b972a713", "is_verified": false, - "line_number": 44, + "line_number": 155, "is_secret": false - }, + } + ], + "profileservice/profile.yaml": [ { "type": "Secret Keyword", - "filename": "profileservice/README.md", - "hashed_secret": "99f11f7789a5315285e569895445507118f188bd", + "filename": "profileservice/profile.yaml", + "hashed_secret": "967b337f4eb99a877c1d326531d6a197b972a713", "is_verified": false, - "line_number": 50, + "line_number": 673, "is_secret": false } ] }, - "generated_at": "2021-11-17T22:48:48Z" + "generated_at": "2023-03-07T18:58:39Z" } diff --git a/CHANGELOG.md b/CHANGELOG.md index 4eeb3023..f74850f5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,37 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [1.18.0] - 2023-03-30 +### Added +- Footer to all pages. [#1044](https://github.com/rokwire/rokwire-building-blocks-api/issues/1044) +- Input validation for contribute create page. [#1103](https://github.com/rokwire/rokwire-building-blocks-api/issues/1103) + +### Changed +- UI for capability view page. [#1034](https://github.com/rokwire/rokwire-building-blocks-api/issues/1034) +- Updated footer UI. [#1036](https://github.com/rokwire/rokwire-building-blocks-api/issues/1036) +- UI changes to top navigation bar. [#1040](https://github.com/rokwire/rokwire-building-blocks-api/issues/1040) +- UI for talent view page. [#1060](https://github.com/rokwire/rokwire-building-blocks-api/issues/1060) +- UI changes for contribution details page. [#1041](https://github.com/rokwire/rokwire-building-blocks-api/issues/1041) +- Catalog home page UI. [#1063](https://github.com/rokwire/rokwire-building-blocks-api/issues/1063) +- CODEOWNERS file to include CHANGELOG. [#1059](https://github.com/rokwire/rokwire-building-blocks-api/issues/1059) +- Create contribution page UI. [#1065](https://github.com/rokwire/rokwire-building-blocks-api/issues/1065) +- Review block in contribution details page. [#1066](https://github.com/rokwire/rokwire-building-blocks-api/issues/1066) +- Rearranged divs in contribute page. [#1079](https://github.com/rokwire/rokwire-building-blocks-api/issues/1079) +- Element stylings in contribute page. [#1087](https://github.com/rokwire/rokwire-building-blocks-api/issues/1087) +- Cryptography version bump for contributions. [#1089](https://github.com/rokwire/rokwire-building-blocks-api/issues/1089) +- Cryptography version bump for appconfigservice. [#1089](https://github.com/rokwire/rokwire-building-blocks-api/issues/1100) +- Catalog home page card alignment. [#1084](https://github.com/rokwire/rokwire-building-blocks-api/issues/1084) +- Updated button styles to match design. [#1085](https://github.com/rokwire/rokwire-building-blocks-api/issues/1085) +- Update werkzeug version in catalog. [#1099](https://github.com/rokwire/rokwire-building-blocks-api/issues/1099) +- Custom dropdown menu style. [#1090](https://github.com/rokwire/rokwire-building-blocks-api/issues/1090) +- Fill footer at the bottom of pages. [#1092](https://github.com/rokwire/rokwire-building-blocks-api/issues/1092) +- Contribute form field labels and placeholders. [#1102](https://github.com/rokwire/rokwire-building-blocks-api/issues/1102) +- Wordings of view pages. [#1069](https://github.com/rokwire/rokwire-building-blocks-api/issues/1069) + +### Fixed +- Detect secrets GitHub action build error and updated baseline. [#1077](https://github.com/rokwire/rokwire-building-blocks-api/issues/1077) +- Overlapping divs in catalog contribute create page. [#1054](https://github.com/rokwire/rokwire-building-blocks-api/issues/1054) + ## [1.17.0] - 2022-12-06 ### Added - Cancel button in contribution edit page. [#986](https://github.com/rokwire/rokwire-building-blocks-api/issues/986) @@ -548,6 +579,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Removed - References to AWS keys and variables in the Events Building Block. +[Unreleased]: https://github.com/rokwire/rokwire-building-blocks-api/compare/1.18.0...HEAD +[1.18.0]: https://github.com/rokwire/rokwire-building-blocks-api/compare/1.17.0...1.18.0 [Unreleased]: https://github.com/rokwire/rokwire-building-blocks-api/compare/1.17.0...HEAD [1.17.0]: https://github.com/rokwire/rokwire-building-blocks-api/compare/1.16.0...1.17.0 [1.16.0]: https://github.com/rokwire/rokwire-building-blocks-api/compare/1.15.0...1.16.0 diff --git a/CODEOWNERS b/CODEOWNERS index 98b8ea8e..14cae5f8 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -1,6 +1,9 @@ # Default assignment * @sandeep-ps +# CHANGELOG +CHANGELOG.md @minump @bingzhang @sandeep-ps + # App Config Building Block /appconfigservice/ @minump diff --git a/SECURITY.md b/SECURITY.md index 73292cab..a294f728 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -6,6 +6,7 @@ Patches for **Rokwire Building Blocks** in this repository will only be applied | Version | Supported | |----------| ------------------ | +| 1.18.0 | :white_check_mark: | | 1.17.0 | :white_check_mark: | | 1.16.0 | :white_check_mark: | | 1.15.0 | :white_check_mark: | diff --git a/appconfigservice/appconfig.yaml b/appconfigservice/appconfig.yaml index cd3a356d..0aec144b 100755 --- a/appconfigservice/appconfig.yaml +++ b/appconfigservice/appconfig.yaml @@ -2,7 +2,7 @@ openapi: 3.0.0 info: title: Rokwire App Config Building Block API description: App Config Building Block API Documentation - version: 1.16.0 + version: 1.18.0 servers: - url: https://api.rokwire.illinois.edu description: Production server diff --git a/appconfigservice/requirements.txt b/appconfigservice/requirements.txt index e016d14c..406eb0c6 100644 --- a/appconfigservice/requirements.txt +++ b/appconfigservice/requirements.txt @@ -5,10 +5,10 @@ pymongo[tls,srv]==3.7.2 pytest==5.0.1 requests==2.22.0 pyjwt==2.4.0 -cryptography==3.3.2 +cryptography==39.0.1 gunicorn==20.0.4 python-dotenv==0.10.3 -gevent==20.9.0 +gevent==21.12.0 diskcache==4.0.0 connexion[swagger-ui]==2.9.0 diff --git a/contributions/catalog/requirements.txt b/contributions/catalog/requirements.txt index ffd96d4c..366e4339 100644 --- a/contributions/catalog/requirements.txt +++ b/contributions/catalog/requirements.txt @@ -1,5 +1,5 @@ -Flask==1.1.1 -werkzeug==2.0.2 +Flask==2.2.3 +werkzeug==2.2.3 itsdangerous==2.0.1 Jinja2==3.0.3 pymongo==3.7.2 diff --git a/contributions/catalog/webapps/static/block-i-white-orange.png b/contributions/catalog/webapps/static/block-i-white-orange.png new file mode 100644 index 00000000..cf769386 Binary files /dev/null and b/contributions/catalog/webapps/static/block-i-white-orange.png differ diff --git a/contributions/catalog/webapps/static/bookshelf.jpg b/contributions/catalog/webapps/static/bookshelf.jpg new file mode 100644 index 00000000..a52defd6 Binary files /dev/null and b/contributions/catalog/webapps/static/bookshelf.jpg differ diff --git a/contributions/catalog/webapps/static/bookshelf@1x.jpg b/contributions/catalog/webapps/static/bookshelf@1x.jpg new file mode 100644 index 00000000..a52defd6 Binary files /dev/null and b/contributions/catalog/webapps/static/bookshelf@1x.jpg differ diff --git a/contributions/catalog/webapps/static/bookshelf@2x.jpg b/contributions/catalog/webapps/static/bookshelf@2x.jpg new file mode 100644 index 00000000..f3aba2c2 Binary files /dev/null and b/contributions/catalog/webapps/static/bookshelf@2x.jpg differ diff --git a/contributions/catalog/webapps/static/bookshelf@3x.jpg b/contributions/catalog/webapps/static/bookshelf@3x.jpg new file mode 100644 index 00000000..79e62b7d Binary files /dev/null and b/contributions/catalog/webapps/static/bookshelf@3x.jpg differ diff --git a/contributions/catalog/webapps/static/checkbox-checked.svg b/contributions/catalog/webapps/static/checkbox-checked.svg new file mode 100644 index 00000000..e39fdfa7 --- /dev/null +++ b/contributions/catalog/webapps/static/checkbox-checked.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/contributions/catalog/webapps/static/css/style.css b/contributions/catalog/webapps/static/css/style.css index abff5451..11700664 100644 --- a/contributions/catalog/webapps/static/css/style.css +++ b/contributions/catalog/webapps/static/css/style.css @@ -1,32 +1,116 @@ -/* Add a black background color to the top navigation */ +html * { + font-family: proxima-nova,sans-serif; +} + +* { + box-sizing: border-box; +} + +/* Style the navigation bar */ .topnav { overflow: hidden; - background-color: #2a4b45; + background-color: #13294b; width: 100%; order: 1; + margin: 0 0 10px; + padding: 32px 32px 32px 32px; } - -/* Style the links inside the navigation bar */ -.topnav a { +/* Left-aligned section inside the top navigation */ +.topnav-left { + display: flex; float: left; - display: inline-block; - color: #f2f2f2; - text-align: center; - padding: 14px 16px; - text-decoration: none; - font-size: 17px; + align-items: center; +} +.topnav-left div { + flex:auto; } -/* Change the color of links on hover */ -.topnav a:hover { - background-color: #ddd; - color: #4c4c4c; +/* Right-aligned section inside the top navigation */ +.topnav-right { + display: flex; + float: right; + align-items: center; + color: #ffffff; +} +.topnav-right div { + flex:2 min-content auto; } -/* Add an active class to highlight the current page */ -.topnav a.active { - background-color: #88aeaf; - color: white; +.topnav-contribute button{ + margin-left: 10px; + outline: none; + border-radius: 24px; + color: #002855; + font-weight: bold; + border: solid 2px #e84a27; + background-color: #ffffff; +} +.topnav-contribute i{ + cursor: pointer; + color: #e84a27; +} + +.topnav-contribute:hover button{ + margin-left: 10px; + outline: none; + border-radius: 24px; + color: #fff; + font-weight: bold; + border: solid 2px #e84a27; + background-color: #e84a27; +} +.topnav-contribute:hover i{ + cursor: pointer; + color: #fff; +} + +.topnav-contribute button:active, .topnav-contribute button:focus{ + margin-left: 10px; + outline: none; + border-radius: 24px; + color: #002855; + font-weight: bold; + border: solid 2px #009fd4; + background-color: #ffffff; +} +.topnav-contribute:active i, .topnav-contribute:focus i{ + cursor: pointer; + color: #009fd4; +} + + +.topnav-login-logout-button{ + float: right; + margin: 15px 15px 5px 15px; + width:100px; + outline: none; + border-radius: 24px; + color: #002855; + font-weight: bold; + border: solid 2px #e84a27; + background-color: #ffffff; +} +.topnav-login-logout-button:hover{ + float: right; + margin: 15px 15px 5px 15px; + width:100px; + outline: none; + border-radius: 24px; + color: #fff; + font-weight: bold; + border: solid 2px #e84a27; + background-color: #e84a27; +} +.topnav-login-logout-button:active, .topnav-login-logout-button:focus{ + float: right; + margin: 15px 15px 5px 15px; + width:100px; + outline: none; + border-radius: 24px; + color: #002855; + font-weight: bold; + border: solid 2px #009fd4; + background-color: #ffffff; } /* Hide the link that should open and close the topnav on small screens */ @@ -34,75 +118,180 @@ display: none; } -/* Right-aligned section inside the top navigation */ -.topnav-right { +.user-greeting{ + font-size: 16px; + margin-top: 20px; float: right; +} + +.rokwire-footer { + width: 100%; + color: #ffffff; + text-align: center; + padding: 85px 363px 26px; + transform: rotate(-360deg); + background-color: #13294b; + clip-path: polygon(0 50%, 100% 0, 100% 100%, 0% 100%); +} + +/* home page main container */ +.main { + margin: auto; + position: relative; + max-width: 1010px; + min-height: 70%; + min-height: -webkit-calc(100vh - 176px); + min-height: -moz-calc(100vh - 176px); + min-height: calc(100vh - 176px); +} + +.row { + display: flex; + flex-wrap: wrap; + margin: 10px -16px; +} + +/* Add padding between each column in catalog home page*/ +.row, +.row > .column { + padding: 10px; +} + +/* Create three equal columns that floats next to each other */ +.column { + float: left; + width: 33.33%; /* if 5 cards in a row, put 20%. to change the width, adjust max-width in main class */ +} + +/* Clear floats after rows */ +.row:after { + content: ""; + display: table; + clear: both; +} + +label { + font-size: 16px; + font-weight: 500; + font-stretch: normal; + font-style: normal; + letter-spacing: normal; + line-height: 30px; + color: #13294b; +} + +.form-control { + height: 48px; + font-size: 16px; + padding: 10px 8px 10px; + border: 1px solid #002855; + border-radius: 0; + background-color: #fff; + color: #404040; +} + +.form-check-input { + height: 20px; + font-size: 16px; + border: 1px solid #002855; + border-radius: 0; + background-color: #fff; + color: #404040; cursor: pointer; } -* { - box-sizing: border-box; +.form-check-label{ + height: 48px; + font-size: 16px; } -input[type=text], select, textarea { - color: #090000; +select, textarea { + height: 48px; width: 100%; - padding: 12px; - border: 1px solid #ccc; - border-radius: 4px; - resize: vertical; + font-size: 16px; + padding: 12px 8px; + border: 1px solid #002855; + border-radius: 0; + background-color: #fff; + color: #404040; } -label { - padding: 12px 12px 12px 0; - display: inline-block; +input[type=text], input[type=url], select, textarea { + width: 100%; } +input[type=number]{ + width:auto; + resize: vertical; +} -input[type=submit] { - background-color: #84af9d; - color: #090000; - padding: 15px 25px; - text-align: center; - margin: 5px 5px; - transition-duration: 0.2s; - border: none; - border-radius: 4px; +input[type=date]{ + height: 34px; + width:auto; + resize: vertical; + border: 1px solid #002855; + border-radius: 0; +} +input[type=date]::-webkit-calendar-picker-indicator:hover { cursor: pointer; - float: right; + } + +input[type=text]:focus, input[type=number]:focus, input[type=date]:focus, input[type=submit]:focus, select:focus, textarea:focus, .form-check-input:focus{ + box-shadow: none; } -input[type=submit]:hover { - background-color: #45a049; - /*color: white;*/ +input[type=file]{ + height: 48px; + color: #404040; + padding: 10px 0px; + font-size: 16px; + letter-spacing: normal; + line-height: 30px; + } -input[type=reset] { - background-color: #6b9ec0; - color: #090000; - padding: 15px 25px; - text-align: center; - margin: 5px 5px; - transition-duration: 0.2s; - border: none; - border-radius: 4px; - cursor: pointer; - float: right; +input[type=checkbox]{ + vertical-align: middle; + width: 20px; + height: 20px; + display: inline-grid; + place-content: center; + position: inherit; } -input[type=reset]:hover { - background-color: #378bc4; - /*color: white;*/ +input[type=checkbox]::before { + content: ""; + width: inherit; + height: inherit; + background-image: url("../checkbox-checked.svg"); + transform: scale(0); + transform-origin: center; + transition: 20ms transform ease-in-out; } -/*input:hover {*/ -/* color: white;*/ -/*}*/ +input[type=checkbox]:checked::before { + transform: scale(1); + background-color: #20375c; +} + +input[type=checkbox]:checked:focus, input[type=checkbox]:not(:checked):focus{ + box-shadow: none; +} .container { border-radius: 5px; background-color: #ffffff; - padding: 20px; + padding: 5px; +} +.details-container{ + min-height: 70%; + min-height: -webkit-calc(100vh - 300px); + min-height: -moz-calc(100vh - 300px); + min-height: calc(100vh - 300px); +} + +.col-sm-2 { + padding-left: 1px; } .col-25 { @@ -117,13 +306,6 @@ input[type=reset]:hover { margin-top: 6px; } -/* Clear floats after the columns */ -.row:after { - content: ""; - display: table; - clear: both; -} - .key-val { -ms-flex: 0 0 83.333333%; flex: 0 0 83.333333%; @@ -139,80 +321,149 @@ input[type=reset]:hover { } .button { - background-color: #4CAF50; /* Green */ border: none; border-radius: 4px; color: white; - padding: 10px 10px; + padding: 5px 15px 5px 15px; text-align: center; display: inline-block; - font-size: 15px; + font-size: 14px; margin: 5px 5px; transition-duration: 0.2s; cursor: pointer; float: none; + height: 36px; + line-height: 20px; + font-weight: bold; } -.button1 { - background-color: white; - color: black; - border: 1px solid #4CAF50; - display: inline-block; -} - -.button1:hover { - background-color: #4CAF50; - color: white; +.button1, .button1:hover { display: inline-block; + color: #002855; + border-radius: 24px; + border: solid 2px #e84a27; + background-color: #fff; } .button2 { - background-color: white; - color: black; - border: 1px solid #008CBA; + color: #002855; display: inline-block; + border-radius: 24px; + border: solid 2px #e84a27; + background-color: #fff; + text-decoration: none; } - -.button2:hover { - background-color: #008CBA; +.button2:hover{ color: white; display: inline-block; + border-radius: 24px; + border: solid 2px #e84a27; + background-color: #e84a27; + text-decoration: none; +} +.button2:active, .button2:focus{ + color: #002855; + display: inline-block; + border-radius: 24px; + border: solid 2px #009fd4; + background-color: #fff; + text-decoration: none; } + .button3 { - background-color: white; - color: black; - border: 1px solid #f44336; + color: white; display: inline-block; + border-radius: 24px; + border: solid 2px #e84a27; + background-color: #e84a27; + text-decoration: none; } - .button3:hover { - background-color: #f44336; color: white; display: inline-block; + border-radius: 24px; + border: solid 2px #f5821e; + background-color: #f5821e; + text-decoration: none; +} +.button3:active, .button3:focus { + color: white; + display: inline-block; + border-radius: 24px; + border: solid 2px #009fd4; + background-color: #e84a27; + text-decoration: none; } .button4 { background-color: white; - color: black; - border: 1px solid #e7e7e7; + color: #002855; display: inline-block; + border-radius: 24px; + border: solid 2px #002855; + text-decoration: none; } - .button4:hover { - background-color: #e7e7e7; + background-color: #002855; + color: white; + display: inline-block; + border-radius: 24px; + border: solid 2px #002855; + text-decoration: none; +} +.button4:active, .button4:focus { + background-color: white; + color: #002855; + display: inline-block; + border-radius: 24px; + border: solid 2px #009fd4; + text-decoration: none; } .button5 { background-color: white; - color: black; - border: 1px solid #555555; + color: #002855; display: inline-block; + border: solid 2px #e84a27; + border-radius: 24px; + font-size: 14px; + line-height: 1.14; + letter-spacing: normal; + text-align: center; + padding: 5px 15px 5px 15px; } -.button5:hover { - background-color: #555555; +.button5:hover { color: white; + border: solid 2px #e84a27; + background-color: #e84a27; +} + +/* Dropdown menu style */ +.catalog-dropdown-menu { + position: relative; + border: 1px solid #002855; + border-radius: 0; +} +.catalog-dropdown-menu:hover { + border: 1px solid #dadde1; + border-radius: 0; +} +.catalog-dropdown-menu select { + /*display: none; !* hide original select element *!*/ + background-image: url("../icon-arrows-caret-down-orange.png"); + background-repeat: no-repeat; + background-position: right .7em top 50%, 0 0; + background-size: auto; + position: relative; + object-fit: contain; + -moz-appearance: none; + -webkit-appearance: none; + -webkit-border-radius: 0px; + appearance: none; + outline-width: 0; + border: none; } /* Style the buttons */ @@ -237,22 +488,26 @@ input[type=reset]:hover { #header { border: none; + margin: auto; padding: 30px; - background: linear-gradient(rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.5)), url("https://images.unsplash.com/photo-1521587760476-6c12a4b040da?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1350&q=80"); + max-width: 1500px; + background-image: url("../bookshelf.jpg"); + background-image: -webkit-image-set(url("../bookshelf@1x.jpg") 1x, url("../bookshelf@2x.jpg") 2x, url("../bookshelf@3x.jpg") 3x); + background-image: image-set(url("../bookshelf@1x.jpg") 1x, url("../bookshelf@2x.jpg") 2x, url("../bookshelf@3x.jpg") 3x); background-repeat: no-repeat; - height: 20%; + height: 200px; background-position: center; background-size: auto; - position: fixed; + position: relative; + object-fit: contain; } #title { text-align: center; position: relative; top: 25%; - /*left: 50%;*/ - transform: translate(-25%, -25%); color: white; + font-size: 32px; } .search { @@ -272,21 +527,21 @@ input[type=reset]:hover { } /* the card feature */ -.content { - background-color: #eaefee; - /*background: url("https://images.unsplash.com/photo-1463947628408-f8581a2f4aca?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1350&q=80");*/ +.card { + position: relative; + background-color: #FFFFFF; height: 160px; - box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2); - padding: 10px; + box-shadow: 0 0 4px 0 #d2d2d2; + padding: 10px 10px 10px 16px; transition-duration: 0.2s; - border: none; - border-radius: 4px; + border: solid 1px #dadde1; + border-radius: 8px; overflow-wrap: break-word; word-wrap: break-word; } -.content:hover { - box-shadow: 0 8px 16px 0 rgba(0, 0, 0, 0.2); +.card:hover { + box-shadow: 0 0 4px 0 #d2d2d2; } .required:after { @@ -333,10 +588,8 @@ hr.dotted { /* The Close Button */ .close { - color: #aaaaaa; - float: right; - font-size: 28px; - font-weight: bold; + color: #888; + /*color: #aaaaaa;*/ } .close:hover, @@ -352,6 +605,28 @@ hr.dotted { background-color: #2a4b45; } +.catalog-home { + white-space: nowrap; + margin-left: 20px; + margin-right: 20px; + /*float: left;*/ + display: inline-block; + font-size: 32px; + font-weight: 800; + font-stretch: normal; + font-style: normal; + letter-spacing: normal; + line-height: 1.13; + color: #FFFFFF; +} + +.block-i { + margin-left: 30px; + margin-right: 10px; + margin-bottom: 10px; + align-items: center; +} + .dropdown-content { display: none; position: relative; @@ -384,6 +659,30 @@ hr.dotted { display: block; } +.link { + color: #e84a27; +} + +.contribution-link { + position: absolute; + bottom: 20px; + font-size: 16px; + font-weight: normal; + font-stretch: normal; + font-style: normal; + line-height: 1.38; + letter-spacing: normal; + text-align: left; + color: #002855; + text-decoration: underline; + text-decoration-color: #e84a27; + text-underline-offset: 5px; +} + +.contribution-link:hover, .contribution-link:active { + color: #e84a27; +} + #togglePassword { cursor: pointer; position: relative; @@ -395,16 +694,24 @@ hr.dotted { margin-left: 1%; } +.env-var-div-row{ + margin-bottom: 15px; +} + input.envvar-key[type=text] { width: 47%; display: table-cell; + margin-bottom: 5px; } input.envvar-value { width: 47%; margin-left: 1%; margin-right: 1%; + margin-bottom: 5px; display: table-cell; + resize: vertical; + } input.datadel-endpoint[type=text] { @@ -417,7 +724,97 @@ input.datadel-api { margin-left: 1%; margin-right: 1%; display: inline-block; + margin-bottom: 5px; + } .hidetext { -webkit-text-security: disc; } -.showtext { -webkit-text-security: none; } \ No newline at end of file +.showtext { -webkit-text-security: none; } + +.table-row-inputs { + display: table-cell; +} + +.checkbox-inline { + padding-top: 5px; + padding-left: 2px; + cursor: default; +} + +h1 { + font-size: 32px; + height: 36px; + font-weight: 800; + font-stretch: normal; + font-style: normal; + letter-spacing: normal; + text-align: center; + color: #13294b; +} + +h2 { + font-size: 24px; + font-weight: 800; + font-stretch: normal; + font-style: normal; + line-height: 1.17; + letter-spacing: normal; + color: #13294b; +} + +h3 { + font-size: 20px; + font-weight: 800; + font-stretch: normal; + font-style: normal; + line-height: 1.2; + letter-spacing: normal; + color: #ff552e; +} + +h4{ + font-size: 16px; + height: 20px; + font-weight: bold; + font-stretch: normal; + font-style: normal; + letter-spacing: normal; + color: #13294b; +} + +h5 { + font-size: 16px; + font-weight: normal; + font-stretch: normal; + font-style: normal; + line-height: 1.25; + letter-spacing: normal; + color: #404040; +} + +p { + /* Both of the following are required for text-overflow */ + white-space: nowrap; + overflow: hidden; +} + +.small-body-text { + font-size: 14px; + font-weight: normal; + font-stretch: normal; + font-style: normal; + letter-spacing: normal; + margin: 7px auto; + text-align: left; + color: #404040; + text-overflow: ellipsis; +} + +.capability-name, .capability-name:hover { + font-weight: bold; +} + +.talent-name, .talent-name:hover { + font-weight: bold; +} + diff --git a/contributions/catalog/webapps/static/icon-arrows-caret-down-orange.png b/contributions/catalog/webapps/static/icon-arrows-caret-down-orange.png new file mode 100644 index 00000000..012cb2d2 Binary files /dev/null and b/contributions/catalog/webapps/static/icon-arrows-caret-down-orange.png differ diff --git a/contributions/catalog/webapps/static/powered-by-rokwire-no-i-block.png b/contributions/catalog/webapps/static/powered-by-rokwire-no-i-block.png new file mode 100644 index 00000000..15ed3dee Binary files /dev/null and b/contributions/catalog/webapps/static/powered-by-rokwire-no-i-block.png differ diff --git a/contributions/catalog/webapps/static/powered-by-rokwire-no-i-block@2x.png b/contributions/catalog/webapps/static/powered-by-rokwire-no-i-block@2x.png new file mode 100644 index 00000000..7609afd5 Binary files /dev/null and b/contributions/catalog/webapps/static/powered-by-rokwire-no-i-block@2x.png differ diff --git a/contributions/catalog/webapps/static/powered-by-rokwire-no-i-block@3x.png b/contributions/catalog/webapps/static/powered-by-rokwire-no-i-block@3x.png new file mode 100644 index 00000000..d2958cf5 Binary files /dev/null and b/contributions/catalog/webapps/static/powered-by-rokwire-no-i-block@3x.png differ diff --git a/contributions/catalog/webapps/templates/base.html b/contributions/catalog/webapps/templates/base.html index 464b1d71..7bef3039 100644 --- a/contributions/catalog/webapps/templates/base.html +++ b/contributions/catalog/webapps/templates/base.html @@ -5,6 +5,7 @@

Contribution Catalog / Packager

+ diff --git a/contributions/catalog/webapps/templates/contribute/capability_details.html b/contributions/catalog/webapps/templates/contribute/capability_details.html index fc8d0628..fc6dd6f5 100644 --- a/contributions/catalog/webapps/templates/contribute/capability_details.html +++ b/contributions/catalog/webapps/templates/contribute/capability_details.html @@ -3,8 +3,10 @@ + - + + @@ -15,11 +17,6 @@ Capability Details - -
@@ -30,161 +27,177 @@

Capability Details


-
-
-

Capability Name

-
-

{{post.name}}

-
- -
-
-

Capability description

-
-

{{post.description}}

-
- -
-
-

Is code open source?

-
-

{{post.isOpenSource}}

-
- -
-
-

Source code repository URL

-
-

{{post.sourceRepoUrl}}

-
- -
-
-

Api Documentation URL

-
-

{{post.apiDocUrl}}

-
- - {% if post.deploymentDetails%} -
-
-

Deployment status (Internal vs External)

+
+ +
+
+

Capability Name

+
+
+
{{post.name}}
+
-

{{post.deploymentDetails.location}}

-
- {% endif %} - {% if reviewer %} - {% if post.version %}
-
-

Version

+
+

Capability Description

+
+
+
{{post.description}}
-

{{post.version}}

- {% endif %} - {% if post.healthCheckUrl %} +
-
-

Health Check URL

+
+

Is Code Open Source?

+
+
+
{{post.isOpenSource}}
-

{{post.healthCheckUrl}}

- {% endif %} - {% if post.dataDeletionEndpointDetails %} +
-
-

Data Deletion Endpoint Details

+
+

Source Code Repository URL

+
+
+
{{post.sourceRepoUrl}}
-

- - {% if post.dataDeletionEndpointDetails.apiKey %} - - - - - - {% endif %} - {% if post.dataDeletionEndpointDetails.deletionEndpoint %} - - - - - {% endif %} - {% if post.dataDeletionEndpointDetails.description %} - - - - - {% endif %} -
Api Key  {{post.dataDeletionEndpointDetails.apiKey}}    
Deletion Endpoint  {{post.dataDeletionEndpointDetails.deletionEndpoint}}
Description  {{post.dataDeletionEndpointDetails.description}}
-

- {% endif %} - {% if post.deploymentDetails %} +
-
-

Deployment Details

+
+

API Documentation URL

+
+
+
{{post.apiDocUrl}}
-

- - {% if post.deploymentDetails.authMethod %} - - - - - {% endif %} - {% if post.deploymentDetails.databaseDetails %} - - - - - {% endif %} - {% if post.deploymentDetails.environmentVariables %} - - - - - {% endif %} - {% if post.deploymentDetails.location %} - - - - - {% endif %} -
Auth Method  {{post.deploymentDetails.authMethod}}
Database Details  {{post.deploymentDetails.databaseDetails}}
Environment Variables   - {% for envvar in post.deploymentDetails.environmentVariables %} - - {% for key_val in envvar.items() | batch(4) %} - - {% for item in key_val %} - {% if loop.index %2 == 0 %} - - - - {% else %} - - - {% endif %} - {% endfor %} - - {% endfor %} -
{{item[0]}}: {{item[1]}}     {{item[0]}}: {{item[1]}}
- {% endfor %} -
Location  {{post.deploymentDetails.location}}
-

- {% endif %} - {% endif %} - -
+ {% if post.deploymentDetails%} +
+
+

Deployment Location

+
+
+
{{post.deploymentDetails.location}}
+
+
+ {% endif %} + {% if reviewer %} + {% if post.version %} +
+
+

Version

+
+
+
{{post.version}}
+
+
+ {% endif %} + {% if post.healthCheckUrl %} +
+
+

Health Check URL

+
+
+
{{post.healthCheckUrl}}
+
+
+ {% endif %} + {% if post.dataDeletionEndpointDetails %} +
+
+

Data Deletion Endpoint Details

+
+
+ + {% if post.dataDeletionEndpointDetails.apiKey %} + + + + + + {% endif %} + {% if post.dataDeletionEndpointDetails.deletionEndpoint %} + + + + + {% endif %} + {% if post.dataDeletionEndpointDetails.description %} + + + + + {% endif %} +
API Key  {{post.dataDeletionEndpointDetails.apiKey}}    
Deletion Endpoint  {{post.dataDeletionEndpointDetails.deletionEndpoint}}
Description  {{post.dataDeletionEndpointDetails.description}}
+
+
+ {% endif %} + {% if post.deploymentDetails %} +
+
+

Deployment Details

+
+
+ + {% if post.deploymentDetails.authMethod %} + + + + + {% endif %} + {% if post.deploymentDetails.databaseDetails %} + + + + + {% endif %} + {% if post.deploymentDetails.environmentVariables %} + + + + + {% endif %} + {% if post.deploymentDetails.location %} + + + + + {% endif %} +
Auth Method  {{post.deploymentDetails.authMethod}}
Database Details  {{post.deploymentDetails.databaseDetails}}
Environment Variables   + {% for envvar in post.deploymentDetails.environmentVariables %} + + {% for key_val in envvar.items() | batch(4) %} + + {% for item in key_val %} + {% if loop.index %2 == 0 %} + + + + {% else %} + + + {% endif %} + {% endfor %} + + {% endfor %} +
{{item[0]}}: {{item[1]}}     {{item[0]}}: {{item[1]}}
+ {% endfor %} +
Location  {{post.deploymentDetails.location}}
+
+
+ {% endif %} + {% endif %} +
-
+
+{% include 'footer.html' %} {% include 'topnav_javascript.html' %} @@ -75,24 +76,22 @@
-
- - {% for member in teammembers %} - {{ member['name'] }} - {% endfor %} -

Contribution Details

- +
+
+ +
+
{% if is_editable %} {% endif %} @@ -108,7 +107,6 @@

Contribution Details

{% endif %} -

@@ -144,360 +142,362 @@

Contribution Details

{% if is_editable %}
+ placeholder="Give a list of GitHub usernames, separated by comma, to be selected as admins of this contribution" + type="text" value="{{ post.contributionAdmins|join(', ') }}"> {% else %}
+ placeholder="Give a list of GitHub usernames, separated by comma, to be selected as admins of this contribution" + type="text"> {% endif %} -
-
- - - -
- - +
- - - -
+ +
+ +
+ + +
+
+ {# end of contribution-details container div #} -
- -