diff --git a/.github/workflows/lektor-build-deploy.yml b/.github/workflows/lektor-build-deploy.yml index 25c9479e4..ab8385895 100644 --- a/.github/workflows/lektor-build-deploy.yml +++ b/.github/workflows/lektor-build-deploy.yml @@ -4,17 +4,28 @@ jobs: build-and-deploy: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - name: setup python version - uses: actions/setup-python@v3 - with: - python-version: 3.9 - - name: Install dependencies - run: | - pip install pipenv - pipenv sync - pipenv run lektor build -f webpack - - name: Deploy to production - if: github.ref == 'refs/heads/main' - run: | - pipenv run lektor deploy ghpages --username ${{ secrets.LEKTOR_DEPLOY_USERNAME }} --password ${{ secrets.LEKTOR_DEPLOY_PASSWORD }} + + # https://github.com/actions/setup-python + - name: setup python version + uses: actions/setup-python@v5 + with: + python-version: 3.11 + + - name: Install pipenv + run: | + pip install --upgrade pip + pip install pipenv + + # https://github.com/actions/checkout + - uses: actions/checkout@v4 + + - name: Install dependencies + run: pipenv sync + + - name: Build static site and use webpack + run: pipenv run lektor build -f webpack + + - name: Deploy to production + if: github.ref == 'refs/heads/main' + run: | + pipenv run lektor deploy ghpages --username ${{ secrets.LEKTOR_DEPLOY_USERNAME }} --password ${{ secrets.LEKTOR_DEPLOY_PASSWORD }} diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md deleted file mode 100644 index 30dc65364..000000000 --- a/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,13 +0,0 @@ -# Contributor Code of Conduct - -The Creative Commons team is committed to fostering a welcoming community. This -project and all other Creative Commons open source projects are governed by our -[Code of Conduct][code_of_conduct]. Please report unacceptable behavior to -[conduct@creativecommons.org](mailto:conduct@creativecommons.org) per our -[reporting guidelines][reporting_guide]. - -For a history of updates, see the [page history here][updates]. - -[code_of_conduct]: https://opensource.creativecommons.org/community/code-of-conduct/ -[reporting_guide]: https://opensource.creativecommons.org/community/code-of-conduct/enforcement/ -[updates]: https://github.com/creativecommons/creativecommons.github.io-source/commits/main/content/community/code-of-conduct/contents.lr diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index 800641851..000000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,34 +0,0 @@ -# Contributing to CC Open Source - -Thank you for your interest in contributing to CC Open Source! This document is -a set of guidelines to help you contribute to this project. - - -## Code of Conduct - -By participating in this project, you are expected to uphold our [Code of -Conduct][code_of_conduct]. - -[code_of_conduct]: https://opensource.creativecommons.org/community/code-of-conduct/ - - -## Project Documentation - -The `README` in the root of the repository should contain or link to project -documentation. If you cannot find the documentation you're looking for, please -file a GitHub issue with details of what you'd like to see documented. - - -## How to Contribute - -Please follow the processes in our general [Contributing Code][contributing] -guidelines on the Creative Common Open Source website. - -[contributing]: https://opensource.creativecommons.org/contributing-code/ - - -## Questions or Thoughts? - -Talk to us on [one of our community forums][community]. - -[community]: https://opensource.creativecommons.org/community/ diff --git a/Pipfile b/Pipfile index ca3d75d9b..e17e81ee0 100644 --- a/Pipfile +++ b/Pipfile @@ -4,10 +4,10 @@ url = "https://pypi.org/simple" verify_ssl = true [packages] -black = "*" +black = ">=24.3.0" flake8 = "*" isort = "*" -lektor = "*" +lektor = ">=3.3.11" [requires] -python_version = "3.9" +python_version = "3.11" diff --git a/Pipfile.lock b/Pipfile.lock index 999703b9b..c5e455c61 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,11 +1,11 @@ { "_meta": { "hash": { - "sha256": "fda8e9ba4b9feedfd82f6ce930b145f9775f2d03cc06f487cd8c6057e8751e6b" + "sha256": "26979fd14d3d85ad2992aec81b9e7b42d02ec577d749ee251d6e27db047211dc" }, "pipfile-spec": 6, "requires": { - "python_version": "3.9" + "python_version": "3.11" }, "sources": [ { @@ -18,156 +18,162 @@ "default": { "babel": { "hashes": [ - "sha256:04c3e2d28d2b7681644508f836be388ae49e0cfe91465095340395b60d00f210", - "sha256:fbfcae1575ff78e26c7449136f1abbefc3c13ce542eeb13d43d50d8b047216ec" + "sha256:368b5b98b37c06b7daf6696391c3240c938b37767d4584413e8438c5c435fa8b", + "sha256:d1f3554ca26605fe173f3de0c65f750f5a42f924499bf134de6423582298e316" ], - "markers": "python_version >= '3.7'", - "version": "==2.13.0" + "markers": "python_version >= '3.8'", + "version": "==2.16.0" }, "black": { "hashes": [ - "sha256:0e232f24a337fed7a82c1185ae46c56c4a6167fb0fe37411b43e876892c76699", - "sha256:30b78ac9b54cf87bcb9910ee3d499d2bc893afd52495066c49d9ee6b21eee06e", - "sha256:31946ec6f9c54ed7ba431c38bc81d758970dd734b96b8e8c2b17a367d7908171", - "sha256:31b9f87b277a68d0e99d2905edae08807c007973eaa609da5f0c62def6b7c0bd", - "sha256:47c4510f70ec2e8f9135ba490811c071419c115e46f143e4dce2ac45afdcf4c9", - "sha256:481167c60cd3e6b1cb8ef2aac0f76165843a374346aeeaa9d86765fe0dd0318b", - "sha256:6901631b937acbee93c75537e74f69463adaf34379a04eef32425b88aca88a23", - "sha256:76baba9281e5e5b230c9b7f83a96daf67a95e919c2dfc240d9e6295eab7b9204", - "sha256:7fb5fc36bb65160df21498d5a3dd330af8b6401be3f25af60c6ebfe23753f747", - "sha256:960c21555be135c4b37b7018d63d6248bdae8514e5c55b71e994ad37407f45b8", - "sha256:a3c2ddb35f71976a4cfeca558848c2f2f89abc86b06e8dd89b5a65c1e6c0f22a", - "sha256:c870bee76ad5f7a5ea7bd01dc646028d05568d33b0b09b7ecfc8ec0da3f3f39c", - "sha256:d3d9129ce05b0829730323bdcb00f928a448a124af5acf90aa94d9aba6969604", - "sha256:db451a3363b1e765c172c3fd86213a4ce63fb8524c938ebd82919bf2a6e28c6a", - "sha256:e223b731a0e025f8ef427dd79d8cd69c167da807f5710add30cdf131f13dd62e", - "sha256:f20ff03f3fdd2fd4460b4f631663813e57dc277e37fb216463f3b907aa5a9bdd", - "sha256:f74892b4b836e5162aa0452393112a574dac85e13902c57dfbaaf388e4eda37c", - "sha256:f8dc7d50d94063cdfd13c82368afd8588bac4ce360e4224ac399e769d6704e98" + "sha256:14b3502784f09ce2443830e3133dacf2c0110d45191ed470ecb04d0f5f6fcb0f", + "sha256:17374989640fbca88b6a448129cd1745c5eb8d9547b464f281b251dd00155ccd", + "sha256:1c536fcf674217e87b8cc3657b81809d3c085d7bf3ef262ead700da345bfa6ea", + "sha256:1cbacacb19e922a1d75ef2b6ccaefcd6e93a2c05ede32f06a21386a04cedb981", + "sha256:1f93102e0c5bb3907451063e08b9876dbeac810e7da5a8bfb7aeb5a9ef89066b", + "sha256:2cd9c95431d94adc56600710f8813ee27eea544dd118d45896bb734e9d7a0dc7", + "sha256:30d2c30dc5139211dda799758559d1b049f7f14c580c409d6ad925b74a4208a8", + "sha256:394d4ddc64782e51153eadcaaca95144ac4c35e27ef9b0a42e121ae7e57a9175", + "sha256:3bb2b7a1f7b685f85b11fed1ef10f8a9148bceb49853e47a294a3dd963c1dd7d", + "sha256:4007b1393d902b48b36958a216c20c4482f601569d19ed1df294a496eb366392", + "sha256:5a2221696a8224e335c28816a9d331a6c2ae15a2ee34ec857dcf3e45dbfa99ad", + "sha256:63f626344343083322233f175aaf372d326de8436f5928c042639a4afbbf1d3f", + "sha256:649fff99a20bd06c6f727d2a27f401331dc0cc861fb69cde910fe95b01b5928f", + "sha256:680359d932801c76d2e9c9068d05c6b107f2584b2a5b88831c83962eb9984c1b", + "sha256:846ea64c97afe3bc677b761787993be4991810ecc7a4a937816dd6bddedc4875", + "sha256:b5e39e0fae001df40f95bd8cc36b9165c5e2ea88900167bddf258bacef9bbdc3", + "sha256:ccfa1d0cb6200857f1923b602f978386a3a2758a65b52e0950299ea014be6800", + "sha256:d37d422772111794b26757c5b55a3eade028aa3fde43121ab7b673d050949d65", + "sha256:ddacb691cdcdf77b96f549cf9591701d8db36b2f19519373d60d31746068dbf2", + "sha256:e6668650ea4b685440857138e5fe40cde4d652633b1bdffc62933d0db4ed9812", + "sha256:f9da3333530dbcecc1be13e69c250ed8dfa67f43c4005fb537bb426e19200d50", + "sha256:fe4d6476887de70546212c99ac9bd803d90b42fc4767f058a0baa895013fbb3e" ], "index": "pypi", - "markers": "python_version >= '3.8'", - "version": "==23.10.0" + "markers": "python_version >= '3.9'", + "version": "==24.10.0" }, "blinker": { "hashes": [ - "sha256:152090d27c1c5c722ee7e48504b02d76502811ce02e1523553b4cf8c8b3d3a8d", - "sha256:296320d6c28b006eb5e32d4712202dbcdcbf5dc482da298c2f44881c43884aaa" + "sha256:b4ce2265a7abece45e7cc896e98dbebe6cead56bcf805a3d23136d145f5445bf", + "sha256:ba0efaa9080b619ff2f3459d1d500c57bddea4a6b424b60a91141db6fd2f08bc" ], - "markers": "python_version >= '3.7'", - "version": "==1.6.3" + "markers": "python_version >= '3.9'", + "version": "==1.9.0" }, "certifi": { "hashes": [ - "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082", - "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9" + "sha256:1275f7a45be9464efc1173084eaa30f866fe2e47d389406136d332ed4967ec56", + "sha256:b650d30f370c2b724812bee08008be0c4163b163ddaec3f2546c1caf65f191db" ], "markers": "python_version >= '3.6'", - "version": "==2023.7.22" + "version": "==2024.12.14" }, "charset-normalizer": { "hashes": [ - "sha256:02673e456dc5ab13659f85196c534dc596d4ef260e4d86e856c3b2773ce09843", - "sha256:02af06682e3590ab952599fbadac535ede5d60d78848e555aa58d0c0abbde786", - "sha256:03680bb39035fbcffe828eae9c3f8afc0428c91d38e7d61aa992ef7a59fb120e", - "sha256:0570d21da019941634a531444364f2482e8db0b3425fcd5ac0c36565a64142c8", - "sha256:09c77f964f351a7369cc343911e0df63e762e42bac24cd7d18525961c81754f4", - "sha256:0d3d5b7db9ed8a2b11a774db2bbea7ba1884430a205dbd54a32d61d7c2a190fa", - "sha256:1063da2c85b95f2d1a430f1c33b55c9c17ffaf5e612e10aeaad641c55a9e2b9d", - "sha256:12ebea541c44fdc88ccb794a13fe861cc5e35d64ed689513a5c03d05b53b7c82", - "sha256:153e7b6e724761741e0974fc4dcd406d35ba70b92bfe3fedcb497226c93b9da7", - "sha256:15b26ddf78d57f1d143bdf32e820fd8935d36abe8a25eb9ec0b5a71c82eb3895", - "sha256:1872d01ac8c618a8da634e232f24793883d6e456a66593135aeafe3784b0848d", - "sha256:187d18082694a29005ba2944c882344b6748d5be69e3a89bf3cc9d878e548d5a", - "sha256:1b2919306936ac6efb3aed1fbf81039f7087ddadb3160882a57ee2ff74fd2382", - "sha256:232ac332403e37e4a03d209a3f92ed9071f7d3dbda70e2a5e9cff1c4ba9f0678", - "sha256:23e8565ab7ff33218530bc817922fae827420f143479b753104ab801145b1d5b", - "sha256:24817cb02cbef7cd499f7c9a2735286b4782bd47a5b3516a0e84c50eab44b98e", - "sha256:249c6470a2b60935bafd1d1d13cd613f8cd8388d53461c67397ee6a0f5dce741", - "sha256:24a91a981f185721542a0b7c92e9054b7ab4fea0508a795846bc5b0abf8118d4", - "sha256:2502dd2a736c879c0f0d3e2161e74d9907231e25d35794584b1ca5284e43f596", - "sha256:250c9eb0f4600361dd80d46112213dff2286231d92d3e52af1e5a6083d10cad9", - "sha256:278c296c6f96fa686d74eb449ea1697f3c03dc28b75f873b65b5201806346a69", - "sha256:2935ffc78db9645cb2086c2f8f4cfd23d9b73cc0dc80334bc30aac6f03f68f8c", - "sha256:2f4a0033ce9a76e391542c182f0d48d084855b5fcba5010f707c8e8c34663d77", - "sha256:30a85aed0b864ac88309b7d94be09f6046c834ef60762a8833b660139cfbad13", - "sha256:380c4bde80bce25c6e4f77b19386f5ec9db230df9f2f2ac1e5ad7af2caa70459", - "sha256:3ae38d325b512f63f8da31f826e6cb6c367336f95e418137286ba362925c877e", - "sha256:3b447982ad46348c02cb90d230b75ac34e9886273df3a93eec0539308a6296d7", - "sha256:3debd1150027933210c2fc321527c2299118aa929c2f5a0a80ab6953e3bd1908", - "sha256:4162918ef3098851fcd8a628bf9b6a98d10c380725df9e04caf5ca6dd48c847a", - "sha256:468d2a840567b13a590e67dd276c570f8de00ed767ecc611994c301d0f8c014f", - "sha256:4cc152c5dd831641e995764f9f0b6589519f6f5123258ccaca8c6d34572fefa8", - "sha256:542da1178c1c6af8873e143910e2269add130a299c9106eef2594e15dae5e482", - "sha256:557b21a44ceac6c6b9773bc65aa1b4cc3e248a5ad2f5b914b91579a32e22204d", - "sha256:5707a746c6083a3a74b46b3a631d78d129edab06195a92a8ece755aac25a3f3d", - "sha256:588245972aca710b5b68802c8cad9edaa98589b1b42ad2b53accd6910dad3545", - "sha256:5adf257bd58c1b8632046bbe43ee38c04e1038e9d37de9c57a94d6bd6ce5da34", - "sha256:619d1c96099be5823db34fe89e2582b336b5b074a7f47f819d6b3a57ff7bdb86", - "sha256:63563193aec44bce707e0c5ca64ff69fa72ed7cf34ce6e11d5127555756fd2f6", - "sha256:67b8cc9574bb518ec76dc8e705d4c39ae78bb96237cb533edac149352c1f39fe", - "sha256:6a685067d05e46641d5d1623d7c7fdf15a357546cbb2f71b0ebde91b175ffc3e", - "sha256:70f1d09c0d7748b73290b29219e854b3207aea922f839437870d8cc2168e31cc", - "sha256:750b446b2ffce1739e8578576092179160f6d26bd5e23eb1789c4d64d5af7dc7", - "sha256:7966951325782121e67c81299a031f4c115615e68046f79b85856b86ebffc4cd", - "sha256:7b8b8bf1189b3ba9b8de5c8db4d541b406611a71a955bbbd7385bbc45fcb786c", - "sha256:7f5d10bae5d78e4551b7be7a9b29643a95aded9d0f602aa2ba584f0388e7a557", - "sha256:805dfea4ca10411a5296bcc75638017215a93ffb584c9e344731eef0dcfb026a", - "sha256:81bf654678e575403736b85ba3a7867e31c2c30a69bc57fe88e3ace52fb17b89", - "sha256:82eb849f085624f6a607538ee7b83a6d8126df6d2f7d3b319cb837b289123078", - "sha256:85a32721ddde63c9df9ebb0d2045b9691d9750cb139c161c80e500d210f5e26e", - "sha256:86d1f65ac145e2c9ed71d8ffb1905e9bba3a91ae29ba55b4c46ae6fc31d7c0d4", - "sha256:86f63face3a527284f7bb8a9d4f78988e3c06823f7bea2bd6f0e0e9298ca0403", - "sha256:8eaf82f0eccd1505cf39a45a6bd0a8cf1c70dcfc30dba338207a969d91b965c0", - "sha256:93aa7eef6ee71c629b51ef873991d6911b906d7312c6e8e99790c0f33c576f89", - "sha256:96c2b49eb6a72c0e4991d62406e365d87067ca14c1a729a870d22354e6f68115", - "sha256:9cf3126b85822c4e53aa28c7ec9869b924d6fcfb76e77a45c44b83d91afd74f9", - "sha256:9fe359b2e3a7729010060fbca442ca225280c16e923b37db0e955ac2a2b72a05", - "sha256:a0ac5e7015a5920cfce654c06618ec40c33e12801711da6b4258af59a8eff00a", - "sha256:a3f93dab657839dfa61025056606600a11d0b696d79386f974e459a3fbc568ec", - "sha256:a4b71f4d1765639372a3b32d2638197f5cd5221b19531f9245fcc9ee62d38f56", - "sha256:aae32c93e0f64469f74ccc730a7cb21c7610af3a775157e50bbd38f816536b38", - "sha256:aaf7b34c5bc56b38c931a54f7952f1ff0ae77a2e82496583b247f7c969eb1479", - "sha256:abecce40dfebbfa6abf8e324e1860092eeca6f7375c8c4e655a8afb61af58f2c", - "sha256:abf0d9f45ea5fb95051c8bfe43cb40cda383772f7e5023a83cc481ca2604d74e", - "sha256:ac71b2977fb90c35d41c9453116e283fac47bb9096ad917b8819ca8b943abecd", - "sha256:ada214c6fa40f8d800e575de6b91a40d0548139e5dc457d2ebb61470abf50186", - "sha256:b09719a17a2301178fac4470d54b1680b18a5048b481cb8890e1ef820cb80455", - "sha256:b1121de0e9d6e6ca08289583d7491e7fcb18a439305b34a30b20d8215922d43c", - "sha256:b3b2316b25644b23b54a6f6401074cebcecd1244c0b8e80111c9a3f1c8e83d65", - "sha256:b3d9b48ee6e3967b7901c052b670c7dda6deb812c309439adaffdec55c6d7b78", - "sha256:b5bcf60a228acae568e9911f410f9d9e0d43197d030ae5799e20dca8df588287", - "sha256:b8f3307af845803fb0b060ab76cf6dd3a13adc15b6b451f54281d25911eb92df", - "sha256:c2af80fb58f0f24b3f3adcb9148e6203fa67dd3f61c4af146ecad033024dde43", - "sha256:c350354efb159b8767a6244c166f66e67506e06c8924ed74669b2c70bc8735b1", - "sha256:c5a74c359b2d47d26cdbbc7845e9662d6b08a1e915eb015d044729e92e7050b7", - "sha256:c71f16da1ed8949774ef79f4a0260d28b83b3a50c6576f8f4f0288d109777989", - "sha256:d47ecf253780c90ee181d4d871cd655a789da937454045b17b5798da9393901a", - "sha256:d7eff0f27edc5afa9e405f7165f85a6d782d308f3b6b9d96016c010597958e63", - "sha256:d97d85fa63f315a8bdaba2af9a6a686e0eceab77b3089af45133252618e70884", - "sha256:db756e48f9c5c607b5e33dd36b1d5872d0422e960145b08ab0ec7fd420e9d649", - "sha256:dc45229747b67ffc441b3de2f3ae5e62877a282ea828a5bdb67883c4ee4a8810", - "sha256:e0fc42822278451bc13a2e8626cf2218ba570f27856b536e00cfa53099724828", - "sha256:e39c7eb31e3f5b1f88caff88bcff1b7f8334975b46f6ac6e9fc725d829bc35d4", - "sha256:e46cd37076971c1040fc8c41273a8b3e2c624ce4f2be3f5dfcb7a430c1d3acc2", - "sha256:e5c1502d4ace69a179305abb3f0bb6141cbe4714bc9b31d427329a95acfc8bdd", - "sha256:edfe077ab09442d4ef3c52cb1f9dab89bff02f4524afc0acf2d46be17dc479f5", - "sha256:effe5406c9bd748a871dbcaf3ac69167c38d72db8c9baf3ff954c344f31c4cbe", - "sha256:f0d1e3732768fecb052d90d62b220af62ead5748ac51ef61e7b32c266cac9293", - "sha256:f5969baeaea61c97efa706b9b107dcba02784b1601c74ac84f2a532ea079403e", - "sha256:f8888e31e3a85943743f8fc15e71536bda1c81d5aa36d014a3c0c44481d7db6e", - "sha256:fc52b79d83a3fe3a360902d3f5d79073a993597d48114c29485e9431092905d8" - ], - "markers": "python_full_version >= '3.7.0'", - "version": "==3.3.0" + "sha256:0167ddc8ab6508fe81860a57dd472b2ef4060e8d378f0cc555707126830f2537", + "sha256:01732659ba9b5b873fc117534143e4feefecf3b2078b0a6a2e925271bb6f4cfa", + "sha256:01ad647cdd609225c5350561d084b42ddf732f4eeefe6e678765636791e78b9a", + "sha256:04432ad9479fa40ec0f387795ddad4437a2b50417c69fa275e212933519ff294", + "sha256:0907f11d019260cdc3f94fbdb23ff9125f6b5d1039b76003b5b0ac9d6a6c9d5b", + "sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd", + "sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601", + "sha256:09b5e6733cbd160dcc09589227187e242a30a49ca5cefa5a7edd3f9d19ed53fd", + "sha256:0af291f4fe114be0280cdd29d533696a77b5b49cfde5467176ecab32353395c4", + "sha256:0f55e69f030f7163dffe9fd0752b32f070566451afe180f99dbeeb81f511ad8d", + "sha256:1a2bc9f351a75ef49d664206d51f8e5ede9da246602dc2d2726837620ea034b2", + "sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313", + "sha256:234ac59ea147c59ee4da87a0c0f098e9c8d169f4dc2a159ef720f1a61bbe27cd", + "sha256:2369eea1ee4a7610a860d88f268eb39b95cb588acd7235e02fd5a5601773d4fa", + "sha256:237bdbe6159cff53b4f24f397d43c6336c6b0b42affbe857970cefbb620911c8", + "sha256:28bf57629c75e810b6ae989f03c0828d64d6b26a5e205535585f96093e405ed1", + "sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2", + "sha256:2a75d49014d118e4198bcee5ee0a6f25856b29b12dbf7cd012791f8a6cc5c496", + "sha256:2bdfe3ac2e1bbe5b59a1a63721eb3b95fc9b6817ae4a46debbb4e11f6232428d", + "sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b", + "sha256:2fb9bd477fdea8684f78791a6de97a953c51831ee2981f8e4f583ff3b9d9687e", + "sha256:311f30128d7d333eebd7896965bfcfbd0065f1716ec92bd5638d7748eb6f936a", + "sha256:329ce159e82018d646c7ac45b01a430369d526569ec08516081727a20e9e4af4", + "sha256:345b0426edd4e18138d6528aed636de7a9ed169b4aaf9d61a8c19e39d26838ca", + "sha256:363e2f92b0f0174b2f8238240a1a30142e3db7b957a5dd5689b0e75fb717cc78", + "sha256:3a3bd0dcd373514dcec91c411ddb9632c0d7d92aed7093b8c3bbb6d69ca74408", + "sha256:3bed14e9c89dcb10e8f3a29f9ccac4955aebe93c71ae803af79265c9ca5644c5", + "sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3", + "sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f", + "sha256:4532bff1b8421fd0a320463030c7520f56a79c9024a4e88f01c537316019005a", + "sha256:49402233c892a461407c512a19435d1ce275543138294f7ef013f0b63d5d3765", + "sha256:4c0907b1928a36d5a998d72d64d8eaa7244989f7aaaf947500d3a800c83a3fd6", + "sha256:4d86f7aff21ee58f26dcf5ae81a9addbd914115cdebcbb2217e4f0ed8982e146", + "sha256:5777ee0881f9499ed0f71cc82cf873d9a0ca8af166dfa0af8ec4e675b7df48e6", + "sha256:5df196eb874dae23dcfb968c83d4f8fdccb333330fe1fc278ac5ceeb101003a9", + "sha256:619a609aa74ae43d90ed2e89bdd784765de0a25ca761b93e196d938b8fd1dbbd", + "sha256:6e27f48bcd0957c6d4cb9d6fa6b61d192d0b13d5ef563e5f2ae35feafc0d179c", + "sha256:6ff8a4a60c227ad87030d76e99cd1698345d4491638dfa6673027c48b3cd395f", + "sha256:73d94b58ec7fecbc7366247d3b0b10a21681004153238750bb67bd9012414545", + "sha256:7461baadb4dc00fd9e0acbe254e3d7d2112e7f92ced2adc96e54ef6501c5f176", + "sha256:75832c08354f595c760a804588b9357d34ec00ba1c940c15e31e96d902093770", + "sha256:7709f51f5f7c853f0fb938bcd3bc59cdfdc5203635ffd18bf354f6967ea0f824", + "sha256:78baa6d91634dfb69ec52a463534bc0df05dbd546209b79a3880a34487f4b84f", + "sha256:7974a0b5ecd505609e3b19742b60cee7aa2aa2fb3151bc917e6e2646d7667dcf", + "sha256:7a4f97a081603d2050bfaffdefa5b02a9ec823f8348a572e39032caa8404a487", + "sha256:7b1bef6280950ee6c177b326508f86cad7ad4dff12454483b51d8b7d673a2c5d", + "sha256:7d053096f67cd1241601111b698f5cad775f97ab25d81567d3f59219b5f1adbd", + "sha256:804a4d582ba6e5b747c625bf1255e6b1507465494a40a2130978bda7b932c90b", + "sha256:807f52c1f798eef6cf26beb819eeb8819b1622ddfeef9d0977a8502d4db6d534", + "sha256:80ed5e856eb7f30115aaf94e4a08114ccc8813e6ed1b5efa74f9f82e8509858f", + "sha256:8417cb1f36cc0bc7eaba8ccb0e04d55f0ee52df06df3ad55259b9a323555fc8b", + "sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9", + "sha256:89149166622f4db9b4b6a449256291dc87a99ee53151c74cbd82a53c8c2f6ccd", + "sha256:8bfa33f4f2672964266e940dd22a195989ba31669bd84629f05fab3ef4e2d125", + "sha256:8c60ca7339acd497a55b0ea5d506b2a2612afb2826560416f6894e8b5770d4a9", + "sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de", + "sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11", + "sha256:97f68b8d6831127e4787ad15e6757232e14e12060bec17091b85eb1486b91d8d", + "sha256:9b23ca7ef998bc739bf6ffc077c2116917eabcc901f88da1b9856b210ef63f35", + "sha256:9f0b8b1c6d84c8034a44893aba5e767bf9c7a211e313a9605d9c617d7083829f", + "sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda", + "sha256:ab36c8eb7e454e34e60eb55ca5d241a5d18b2c6244f6827a30e451c42410b5f7", + "sha256:b010a7a4fd316c3c484d482922d13044979e78d1861f0e0650423144c616a46a", + "sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971", + "sha256:b7b2d86dd06bfc2ade3312a83a5c364c7ec2e3498f8734282c6c3d4b07b346b8", + "sha256:b97e690a2118911e39b4042088092771b4ae3fc3aa86518f84b8cf6888dbdb41", + "sha256:bc2722592d8998c870fa4e290c2eec2c1569b87fe58618e67d38b4665dfa680d", + "sha256:c0429126cf75e16c4f0ad00ee0eae4242dc652290f940152ca8c75c3a4b6ee8f", + "sha256:c30197aa96e8eed02200a83fba2657b4c3acd0f0aa4bdc9f6c1af8e8962e0757", + "sha256:c4c3e6da02df6fa1410a7680bd3f63d4f710232d3139089536310d027950696a", + "sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886", + "sha256:c96836c97b1238e9c9e3fe90844c947d5afbf4f4c92762679acfe19927d81d77", + "sha256:d7f50a1f8c450f3925cb367d011448c39239bb3eb4117c36a6d354794de4ce76", + "sha256:d973f03c0cb71c5ed99037b870f2be986c3c05e63622c017ea9816881d2dd247", + "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85", + "sha256:d9c3cdf5390dcd29aa8056d13e8e99526cda0305acc038b96b30352aff5ff2bb", + "sha256:dad3e487649f498dd991eeb901125411559b22e8d7ab25d3aeb1af367df5efd7", + "sha256:dccbe65bd2f7f7ec22c4ff99ed56faa1e9f785482b9bbd7c717e26fd723a1d1e", + "sha256:dd78cfcda14a1ef52584dbb008f7ac81c1328c0f58184bf9a84c49c605002da6", + "sha256:e218488cd232553829be0664c2292d3af2eeeb94b32bea483cf79ac6a694e037", + "sha256:e358e64305fe12299a08e08978f51fc21fac060dcfcddd95453eabe5b93ed0e1", + "sha256:ea0d8d539afa5eb2728aa1932a988a9a7af94f18582ffae4bc10b3fbdad0626e", + "sha256:eab677309cdb30d047996b36d34caeda1dc91149e4fdca0b1a039b3f79d9a807", + "sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407", + "sha256:ecddf25bee22fe4fe3737a399d0d177d72bc22be6913acfab364b40bce1ba83c", + "sha256:eea6ee1db730b3483adf394ea72f808b6e18cf3cb6454b4d86e04fa8c4327a12", + "sha256:f08ff5e948271dc7e18a35641d2f11a4cd8dfd5634f55228b691e62b37125eb3", + "sha256:f30bf9fd9be89ecb2360c7d94a711f00c09b976258846efe40db3d05828e8089", + "sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd", + "sha256:fc54db6c8593ef7d4b2a331b58653356cf04f67c960f584edb7c3d8c97e8f39e", + "sha256:fd4ec41f914fa74ad1b8304bbc634b3de73d2a0889bd32076342a573e0779e00", + "sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616" + ], + "markers": "python_version >= '3.7'", + "version": "==3.4.1" }, "click": { "hashes": [ - "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28", - "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de" + "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2", + "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a" ], "markers": "python_version >= '3.7'", - "version": "==8.1.7" + "version": "==8.1.8" }, "exifread": { "hashes": [ @@ -185,12 +191,12 @@ }, "flake8": { "hashes": [ - "sha256:d5b3857f07c030bdb5bf41c7f53799571d75c4491748a3adcd47de929e34cd23", - "sha256:ffdfce58ea94c6580c77888a86506937f9a1a227dfcd15f245d694ae20a6b6e5" + "sha256:049d058491e228e03e67b390f311bbf88fce2dbaa8fa673e7aea87b7198b8d38", + "sha256:597477df7860daa5aa0fdd84bf5208a043ab96b8e96ab708770ae0364dd03213" ], "index": "pypi", "markers": "python_full_version >= '3.8.1'", - "version": "==6.1.0" + "version": "==7.1.1" }, "flask": { "hashes": [ @@ -202,19 +208,11 @@ }, "idna": { "hashes": [ - "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4", - "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2" - ], - "markers": "python_version >= '3.5'", - "version": "==3.4" - }, - "importlib-metadata": { - "hashes": [ - "sha256:3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb", - "sha256:dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743" + "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", + "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3" ], - "markers": "python_version < '3.10'", - "version": "==6.8.0" + "markers": "python_version >= '3.6'", + "version": "==3.10" }, "inifile": { "hashes": [ @@ -224,103 +222,104 @@ }, "isort": { "hashes": [ - "sha256:8bef7dde241278824a6d83f44a544709b065191b95b6e50894bdc722fcba0504", - "sha256:f84c2818376e66cf843d497486ea8fed8700b340f308f076c6fb1229dff318b6" + "sha256:48fdfcb9face5d58a4f6dde2e72a1fb8dcaf8ab26f95ab49fab84c2ddefb0109", + "sha256:8ca5e72a8d85860d5a3fa69b8745237f2939afe12dbf656afbcb47fe72d947a6" ], "index": "pypi", "markers": "python_full_version >= '3.8.0'", - "version": "==5.12.0" + "version": "==5.13.2" }, "itsdangerous": { "hashes": [ - "sha256:2c2349112351b88699d8d4b6b075022c0808887cb7ad10069318a8b0bc88db44", - "sha256:5dbbc68b317e5e42f327f9021763545dc3fc3bfe22e6deb96aaf1fc38874156a" + "sha256:c6242fc49e35958c8b15141343aa660db5fc54d4f13a1db01a3f5891b98700ef", + "sha256:e0050c0b7da1eea53ffaf149c0cfbb5c6e2e2b69c4bef22c81fa6eb73e5f6173" ], - "markers": "python_version >= '3.7'", - "version": "==2.1.2" + "markers": "python_version >= '3.8'", + "version": "==2.2.0" }, "jinja2": { "hashes": [ - "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852", - "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61" + "sha256:8fefff8dc3034e27bb80d67c671eb8a9bc424c0ef4c0826edbff304cceff43bb", + "sha256:aba0f4dc9ed8013c424088f68a5c226f7d6097ed89b246d7749c2ec4175c6adb" ], "markers": "python_version >= '3.7'", - "version": "==3.1.2" + "version": "==3.1.5" }, "lektor": { "hashes": [ - "sha256:7c1645643a3aa0a6c8e8c13534c348299387524bd4872ce45a2aca8778e6b5b2", - "sha256:a0d8fca269565f581d54539f213b261b615bd13426817b245b755a285b9268ad" + "sha256:a856e5f94f77f8c960f6c3f21675338ac32e205bf035582063b17ea137035b03", + "sha256:d5667647bd784ae5216fbc1a32ea0022ed0b559d9d1967744675aa39ece72075" ], "index": "pypi", "markers": "python_version >= '3.6'", - "version": "==3.3.10" + "version": "==3.3.12" }, "markupsafe": { "hashes": [ - "sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e", - "sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e", - "sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431", - "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686", - "sha256:14ff806850827afd6b07a5f32bd917fb7f45b046ba40c57abdb636674a8b559c", - "sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559", - "sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc", - "sha256:1b8dd8c3fd14349433c79fa8abeb573a55fc0fdd769133baac1f5e07abf54aeb", - "sha256:1f67c7038d560d92149c060157d623c542173016c4babc0c1913cca0564b9939", - "sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c", - "sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0", - "sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4", - "sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9", - "sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575", - "sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba", - "sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d", - "sha256:47d4f1c5f80fc62fdd7777d0d40a2e9dda0a05883ab11374334f6c4de38adffd", - "sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3", - "sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00", - "sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155", - "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac", - "sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52", - "sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f", - "sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8", - "sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b", - "sha256:715d3562f79d540f251b99ebd6d8baa547118974341db04f5ad06d5ea3eb8007", - "sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24", - "sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea", - "sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198", - "sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0", - "sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee", - "sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be", - "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2", - "sha256:8f9293864fe09b8149f0cc42ce56e3f0e54de883a9de90cd427f191c346eb2e1", - "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707", - "sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6", - "sha256:9aad3c1755095ce347e26488214ef77e0485a3c34a50c5a5e2471dff60b9dd9c", - "sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58", - "sha256:aa57bd9cf8ae831a362185ee444e15a93ecb2e344c8e52e4d721ea3ab6ef1823", - "sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779", - "sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636", - "sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c", - "sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad", - "sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee", - "sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc", - "sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2", - "sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48", - "sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7", - "sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e", - "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b", - "sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa", - "sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5", - "sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e", - "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb", - "sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9", - "sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57", - "sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc", - "sha256:f698de3fd0c4e6972b92290a45bd9b1536bffe8c6759c62471efaa8acb4c37bc", - "sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2", - "sha256:ffcc3f7c66b5f5b7931a5aa68fc9cecc51e685ef90282f4a82f0f5e9b704ad11" - ], - "markers": "python_version >= '3.7'", - "version": "==2.1.3" + "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4", + "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30", + "sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0", + "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9", + "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396", + "sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13", + "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028", + "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca", + "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557", + "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832", + "sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0", + "sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b", + "sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579", + "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a", + "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c", + "sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff", + "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c", + "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22", + "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094", + "sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb", + "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e", + "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5", + "sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a", + "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d", + "sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a", + "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b", + "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8", + "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225", + "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c", + "sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144", + "sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f", + "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87", + "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d", + "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93", + "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf", + "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158", + "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84", + "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb", + "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48", + "sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171", + "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c", + "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6", + "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd", + "sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d", + "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1", + "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d", + "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca", + "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a", + "sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29", + "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe", + "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798", + "sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c", + "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8", + "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f", + "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f", + "sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a", + "sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178", + "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", + "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79", + "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430", + "sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50" + ], + "markers": "python_version >= '3.9'", + "version": "==3.0.2" }, "mccabe": { "hashes": [ @@ -347,82 +346,82 @@ }, "packaging": { "hashes": [ - "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5", - "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7" + "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", + "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f" ], - "markers": "python_version >= '3.7'", - "version": "==23.2" + "markers": "python_version >= '3.8'", + "version": "==24.2" }, "pathspec": { "hashes": [ - "sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20", - "sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3" + "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08", + "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712" ], - "markers": "python_version >= '3.7'", - "version": "==0.11.2" + "markers": "python_version >= '3.8'", + "version": "==0.12.1" }, "pip": { "hashes": [ - "sha256:bb7d4f69f488432e4e96394612f43ab43dd478d073ef7422604a570f7157561e", - "sha256:bc38bb52bc286514f8f7cb3a1ba5ed100b76aaef29b521d48574329331c5ae7b" + "sha256:3790624780082365f47549d032f3770eeb2b1e8bd1f7b2e02dace1afa361b4ed", + "sha256:ebcb60557f2aefabc2e0f918751cd24ea0d56d8ec5445fe1807f1d2109660b99" ], - "markers": "python_version >= '3.7'", - "version": "==23.3" + "markers": "python_version >= '3.8'", + "version": "==24.3.1" }, "platformdirs": { "hashes": [ - "sha256:cf8ee52a3afdb965072dcc652433e0c7e3e40cf5ea1477cd4b3b1d2eb75495b3", - "sha256:e9d171d00af68be50e9202731309c4e658fd8bc76f55c11c7dd760d023bda68e" + "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907", + "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb" ], - "markers": "python_version >= '3.7'", - "version": "==3.11.0" + "markers": "python_version >= '3.8'", + "version": "==4.3.6" }, "pycodestyle": { "hashes": [ - "sha256:41ba0e7afc9752dfb53ced5489e89f8186be00e599e712660695b7a75ff2663f", - "sha256:44fe31000b2d866f2e41841b18528a505fbd7fef9017b04eff4e2648a0fadc67" + "sha256:46f0fb92069a7c28ab7bb558f05bfc0110dac69a0cd23c61ea0040283a9d78b3", + "sha256:6838eae08bbce4f6accd5d5572075c63626a15ee3e6f842df996bf62f6d73521" ], "markers": "python_version >= '3.8'", - "version": "==2.11.1" + "version": "==2.12.1" }, "pyflakes": { "hashes": [ - "sha256:4132f6d49cb4dae6819e5379898f2b8cce3c5f23994194c24b77d5da2e36f774", - "sha256:a0aae034c444db0071aa077972ba4768d40c830d9539fd45bf4cd3f8f6992efc" + "sha256:1c61603ff154621fb2a9172037d84dca3500def8c8b630657d1701f026f8af3f", + "sha256:84b5be138a2dfbb40689ca07e2152deb896a65c3a3e24c251c5c62489568074a" ], "markers": "python_version >= '3.8'", - "version": "==3.1.0" + "version": "==3.2.0" }, "python-slugify": { "hashes": [ - "sha256:70ca6ea68fe63ecc8fa4fcf00ae651fc8a5d02d93dcd12ae6d4fc7ca46c4d395", - "sha256:ce0d46ddb668b3be82f4ed5e503dbc33dd815d83e2eb6824211310d3fb172a27" + "sha256:276540b79961052b66b7d116620b36518847f52d5fd9e3a70164fc8c50faa6b8", + "sha256:59202371d1d05b54a9e7720c5e038f928f45daaffe41dd10822f3907b937c856" ], "markers": "python_version >= '3.7'", - "version": "==8.0.1" + "version": "==8.0.4" }, "pytz": { "hashes": [ - "sha256:7b4fddbeb94a1eba4b557da24f19fdf9db575192544270a9101d8509f9f43d7b", - "sha256:ce42d816b81b68506614c11e8937d3aa9e41007ceb50bfdcb0749b921bf646c7" + "sha256:2aa355083c50a0f93fa581709deac0c9ad65cca8a9e9beac660adcbd493c798a", + "sha256:31c7c1817eb7fae7ca4b8c7ee50c72f93aa2dd863de768e1ef4245d426aa0725" ], - "version": "==2023.3.post1" + "version": "==2024.2" }, "requests": { "hashes": [ - "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f", - "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1" + "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760", + "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6" ], - "markers": "python_version >= '3.7'", - "version": "==2.31.0" + "markers": "python_version >= '3.8'", + "version": "==2.32.3" }, "setuptools": { "hashes": [ - "sha256:4ac1475276d2f1c48684874089fefcd83bd7162ddaafb81fac866ba0db282a87", - "sha256:b454a35605876da60632df1a60f736524eb73cc47bbc9f3f1ef1b644de74fd2a" + "sha256:84fb203f278ebcf5cd08f97d3fb96d3fbed4b629d500b29ad60d11e00769b183", + "sha256:886ff7b16cd342f1d1defc16fc98c9ce3fde69e087a4e1983d7ab634e5f41f4f" ], - "markers": "python_version >= '3.8'", - "version": "==68.2.2" + "markers": "python_version >= '3.9'", + "version": "==75.7.0" }, "text-unidecode": { "hashes": [ @@ -431,78 +430,57 @@ ], "version": "==1.3" }, - "tomli": { - "hashes": [ - "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc", - "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f" - ], - "markers": "python_version < '3.11'", - "version": "==2.0.1" - }, - "typing-extensions": { - "hashes": [ - "sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0", - "sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef" - ], - "markers": "python_version < '3.11'", - "version": "==4.8.0" - }, "urllib3": { "hashes": [ - "sha256:c97dfde1f7bd43a71c8d2a58e369e9b2bf692d1334ea9f9cae55add7d0dd0f84", - "sha256:fdb6d215c776278489906c2f8916e6e7d4f5a9b602ccbcfdf7f016fc8da0596e" + "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df", + "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d" ], - "markers": "python_version >= '3.7'", - "version": "==2.0.7" + "markers": "python_version >= '3.9'", + "version": "==2.3.0" }, "watchdog": { "hashes": [ - "sha256:0e06ab8858a76e1219e68c7573dfeba9dd1c0219476c5a44d5333b01d7e1743a", - "sha256:13bbbb462ee42ec3c5723e1205be8ced776f05b100e4737518c67c8325cf6100", - "sha256:233b5817932685d39a7896b1090353fc8efc1ef99c9c054e46c8002561252fb8", - "sha256:25f70b4aa53bd743729c7475d7ec41093a580528b100e9a8c5b5efe8899592fc", - "sha256:2b57a1e730af3156d13b7fdddfc23dea6487fceca29fc75c5a868beed29177ae", - "sha256:336adfc6f5cc4e037d52db31194f7581ff744b67382eb6021c868322e32eef41", - "sha256:3aa7f6a12e831ddfe78cdd4f8996af9cf334fd6346531b16cec61c3b3c0d8da0", - "sha256:3ed7c71a9dccfe838c2f0b6314ed0d9b22e77d268c67e015450a29036a81f60f", - "sha256:4c9956d27be0bb08fc5f30d9d0179a855436e655f046d288e2bcc11adfae893c", - "sha256:4d98a320595da7a7c5a18fc48cb633c2e73cda78f93cac2ef42d42bf609a33f9", - "sha256:4f94069eb16657d2c6faada4624c39464f65c05606af50bb7902e036e3219be3", - "sha256:5113334cf8cf0ac8cd45e1f8309a603291b614191c9add34d33075727a967709", - "sha256:51f90f73b4697bac9c9a78394c3acbbd331ccd3655c11be1a15ae6fe289a8c83", - "sha256:5d9f3a10e02d7371cd929b5d8f11e87d4bad890212ed3901f9b4d68767bee759", - "sha256:7ade88d0d778b1b222adebcc0927428f883db07017618a5e684fd03b83342bd9", - "sha256:7c5f84b5194c24dd573fa6472685b2a27cc5a17fe5f7b6fd40345378ca6812e3", - "sha256:7e447d172af52ad204d19982739aa2346245cc5ba6f579d16dac4bfec226d2e7", - "sha256:8ae9cda41fa114e28faf86cb137d751a17ffd0316d1c34ccf2235e8a84365c7f", - "sha256:8f3ceecd20d71067c7fd4c9e832d4e22584318983cabc013dbf3f70ea95de346", - "sha256:9fac43a7466eb73e64a9940ac9ed6369baa39b3bf221ae23493a9ec4d0022674", - "sha256:a70a8dcde91be523c35b2bf96196edc5730edb347e374c7de7cd20c43ed95397", - "sha256:adfdeab2da79ea2f76f87eb42a3ab1966a5313e5a69a0213a3cc06ef692b0e96", - "sha256:ba07e92756c97e3aca0912b5cbc4e5ad802f4557212788e72a72a47ff376950d", - "sha256:c07253088265c363d1ddf4b3cdb808d59a0468ecd017770ed716991620b8f77a", - "sha256:c9d8c8ec7efb887333cf71e328e39cffbf771d8f8f95d308ea4125bf5f90ba64", - "sha256:d00e6be486affb5781468457b21a6cbe848c33ef43f9ea4a73b4882e5f188a44", - "sha256:d429c2430c93b7903914e4db9a966c7f2b068dd2ebdd2fa9b9ce094c7d459f33" - ], - "markers": "python_version >= '3.7'", - "version": "==3.0.0" + "sha256:07df1fdd701c5d4c8e55ef6cf55b8f0120fe1aef7ef39a1c6fc6bc2e606d517a", + "sha256:20ffe5b202af80ab4266dcd3e91aae72bf2da48c0d33bdb15c66658e685e94e2", + "sha256:212ac9b8bf1161dc91bd09c048048a95ca3a4c4f5e5d4a7d1b1a7d5752a7f96f", + "sha256:2cce7cfc2008eb51feb6aab51251fd79b85d9894e98ba847408f662b3395ca3c", + "sha256:490ab2ef84f11129844c23fb14ecf30ef3d8a6abafd3754a6f75ca1e6654136c", + "sha256:6eb11feb5a0d452ee41f824e271ca311a09e250441c262ca2fd7ebcf2461a06c", + "sha256:6f10cb2d5902447c7d0da897e2c6768bca89174d0c6e1e30abec5421af97a5b0", + "sha256:7607498efa04a3542ae3e05e64da8202e58159aa1fa4acddf7678d34a35d4f13", + "sha256:76aae96b00ae814b181bb25b1b98076d5fc84e8a53cd8885a318b42b6d3a5134", + "sha256:7a0e56874cfbc4b9b05c60c8a1926fedf56324bb08cfbc188969777940aef3aa", + "sha256:82dc3e3143c7e38ec49d61af98d6558288c415eac98486a5c581726e0737c00e", + "sha256:9041567ee8953024c83343288ccc458fd0a2d811d6a0fd68c4c22609e3490379", + "sha256:90c8e78f3b94014f7aaae121e6b909674df5b46ec24d6bebc45c44c56729af2a", + "sha256:9513f27a1a582d9808cf21a07dae516f0fab1cf2d7683a742c498b93eedabb11", + "sha256:9ddf7c82fda3ae8e24decda1338ede66e1c99883db93711d8fb941eaa2d8c282", + "sha256:a175f755fc2279e0b7312c0035d52e27211a5bc39719dd529625b1930917345b", + "sha256:a1914259fa9e1454315171103c6a30961236f508b9b623eae470268bbcc6a22f", + "sha256:afd0fe1b2270917c5e23c2a65ce50c2a4abb63daafb0d419fde368e272a76b7c", + "sha256:bc64ab3bdb6a04d69d4023b29422170b74681784ffb9463ed4870cf2f3e66112", + "sha256:bdd4e6f14b8b18c334febb9c4425a878a2ac20efd1e0b231978e7b150f92a948", + "sha256:c7ac31a19f4545dd92fc25d200694098f42c9a8e391bc00bdd362c5736dbf881", + "sha256:c7c15dda13c4eb00d6fb6fc508b3c0ed88b9d5d374056b239c4ad1611125c860", + "sha256:c897ac1b55c5a1461e16dae288d22bb2e412ba9807df8397a635d88f671d36c3", + "sha256:cbafb470cf848d93b5d013e2ecb245d4aa1c8fd0504e863ccefa32445359d680", + "sha256:d1cdb490583ebd691c012b3d6dae011000fe42edb7a82ece80965b42abd61f26", + "sha256:e3df4cbb9a450c6d49318f6d14f4bbc80d763fa587ba46ec86f99f9e6876bb26", + "sha256:e6439e374fc012255b4ec786ae3c4bc838cd7309a540e5fe0952d03687d8804e", + "sha256:e6f0e77c9417e7cd62af82529b10563db3423625c5fce018430b249bf977f9e8", + "sha256:e7631a77ffb1f7d2eefa4445ebbee491c720a5661ddf6df3498ebecae5ed375c", + "sha256:ef810fbf7b781a5a593894e4f439773830bdecb885e6880d957d5b9382a960d2" + ], + "markers": "python_version >= '3.9'", + "version": "==6.0.0" }, "werkzeug": { "hashes": [ - "sha256:2b8c0e447b4b9dbcc85dd97b6eeb4dcbaf6c8b6c3be0bd654e25553e0a2157d8", - "sha256:effc12dba7f3bd72e605ce49807bbe692bd729c3bb122a3b91747a6ae77df528" - ], - "markers": "python_version >= '3.8'", - "version": "==2.3.7" - }, - "zipp": { - "hashes": [ - "sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31", - "sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0" + "sha256:554b257c74bbeb7a0d254160a4f8ffe185243f52a52035060b761ca62d977f03", + "sha256:bba1f19f8ec89d4d607a3bd62f1904bd2e609472d93cd85e9d4e178f472c3748" ], "markers": "python_version >= '3.8'", - "version": "==3.17.0" + "version": "==2.3.8" } }, "develop": {} diff --git a/README.md b/README.md index df913dc89..d30553082 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,13 @@ -# creativecommons.github.io-source +# ccos-website-source Source for `creativecommons.github.io` ## Overview -> **:warning: DO *NOT* MAKE CHANGES TO THE -> [creativecommons/creativecommons.github.io][ccghiorepo] REPO DIRECTLY**. +> **:warning: DON'T MAKE CHANGES TO THE +> [creativecommons/creativecommons.github.io][ccghiorepo] REPOSIOTRY, +> DIRECTLY**. [ccghiorepo]: https://github.com/creativecommons/creativecommons.github.io @@ -20,33 +21,41 @@ via lektor (see [Deployment](#deployment), below). [ccopensource]: https://opensource.creativecommons.org/ -## Code of Conduct +## Code of conduct -[`CODE_OF_CONDUCT.md`](CODE_OF_CONDUCT.md): +[`CODE_OF_CONDUCT.md`][org-coc]: > The Creative Commons team is committed to fostering a welcoming community. > This project and all other Creative Commons open source projects are governed > by our [Code of Conduct][code_of_conduct]. Please report unacceptable > behavior to [conduct@creativecommons.org](mailto:conduct@creativecommons.org) > per our [reporting guidelines][reporting_guide]. -[code_of_conduct]: https://opensource.creativecommons.org/community/code-of-conduct/ "CC Open Source Code of Conduct — Creative Commons on GitHub" -[reporting_guide]: https://opensource.creativecommons.org/community/code-of-conduct/enforcement/ "Codes of Conduct Enforcement — Creative Commons on GitHub" +[org-coc]: https://github.com/creativecommons/.github/blob/main/CODE_OF_CONDUCT.md +[code_of_conduct]: https://opensource.creativecommons.org/community/code-of-conduct/ +[reporting_guide]: https://opensource.creativecommons.org/community/code-of-conduct/enforcement/ ## Contributing -- See [`CONTRIBUTING.md`](CONTRIBUTING.md) for information on how to contribute +See [`CONTRIBUTING.md`][org-contrib]. + +[org-contrib]: https://github.com/creativecommons/.github/blob/main/CONTRIBUTING.md + - See [Contributors to - creativecommons/creativecommons.github.io-source][contributors] for a + creativecommons/ccos-website-source][contributors] for a list of authors and their contributions to this project :blush: -[contributors]: https://github.com/creativecommons/creativecommons.github.io-source/graphs/contributors "Contributors to creativecommons/creativecommons.github.io-source" +[contributors]: https://github.com/creativecommons/ccos-website-source/graphs/contributors "Contributors to creativecommons/ccos-website-source" ## Installation ### Prerequisites +For information on learning and installing the prerequisite technologies for this project, please see [Foundational technologies — Creative Commons Open Source][found-tech]. + +[found-tech]: https://opensource.creativecommons.org/contributing-code/foundational-tech/ + Make sure you have: - [pipenv][pipenvdocs] - [Node.js][nodejswebsite] **v12+** and [npm][npmdocs] installed. @@ -62,7 +71,7 @@ To install these, execute the following commands: 1. [Installing Pipenv][pipenvinstall] 2. [Install Node.js][nodeinstall] (or see the [detailed instructions][nodedetailed]) - 3. Upate packges: + 3. Update packges: ``` sudo apt update ``` @@ -75,7 +84,7 @@ To install these, execute the following commands: [nodejswebsite]: https://nodejs.org/en/ [npmdocs]: https://docs.npmjs.com/ [homebrew]: https://brew.sh/ -[pipenvinstall]: https://pipenv.pypa.io/en/latest/install/#installing-pipenv +[pipenvinstall]: https://pipenv.pypa.io/en/latest/installation.html [nodeinstall]: https://github.com/nodesource/distributions/blob/master/README.md#table-of-contents [nodedetailed]: https://github.com/nodesource/distributions/blob/master/README.md#installation-instructions @@ -105,6 +114,11 @@ else fails, try removing the virtual environment and reinstalling: ``` pipenv install --dev ``` + - If there's no Python 3.11 on your system (or if pipenv can't find it), + you may need to specify the Python location. For example: + ``` + pipenv install --dev --python /opt/homebrew/bin/python3.11 + ``` [pipenverror]: https://github.com/pypa/pipenv/issues/1918 @@ -204,8 +218,6 @@ Here's how the code is structured in the top level of the repository: - [nixjdm/lektor-atom][atom]: Lektor Atom plugin - [lektor/lektor-disqus-comments][disqus]: Adds disqus comments to a Lektor website - - [kmonsoor/lektor-google-analytics][lektorga]: Integration of Google - analytics with Lektor CMS - [bancek/lektor-markdown-excerpt][mdexcerpt]: Adds filter for Markdown body excerpt - [lektor/lektor-markdown-header-anchors][md-header]: Adds support for @@ -220,7 +232,6 @@ Here's how the code is structured in the top level of the repository: [plugins]: https://www.getlektor.com/docs/plugins/ [atom]: https://github.com/nixjdm/lektor-atom [disqus]: https://github.com/lektor/lektor-disqus-comments -[lektorga]: https://github.com/kmonsoor/lektor-google-analytics [mdexcerpt]: https://github.com/bancek/lektor-markdown-excerpt [md-header]: https://github.com/lektor/lektor-markdown-header-anchors [md-highlighter]: https://github.com/lektor/lektor-markdown-highlighter diff --git a/assets/CODE_OF_CONDUCT.md b/assets/CODE_OF_CONDUCT.md deleted file mode 100644 index 30dc65364..000000000 --- a/assets/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,13 +0,0 @@ -# Contributor Code of Conduct - -The Creative Commons team is committed to fostering a welcoming community. This -project and all other Creative Commons open source projects are governed by our -[Code of Conduct][code_of_conduct]. Please report unacceptable behavior to -[conduct@creativecommons.org](mailto:conduct@creativecommons.org) per our -[reporting guidelines][reporting_guide]. - -For a history of updates, see the [page history here][updates]. - -[code_of_conduct]: https://opensource.creativecommons.org/community/code-of-conduct/ -[reporting_guide]: https://opensource.creativecommons.org/community/code-of-conduct/enforcement/ -[updates]: https://github.com/creativecommons/creativecommons.github.io-source/commits/main/content/community/code-of-conduct/contents.lr diff --git a/assets/README.md b/assets/README.md index c1e887dfa..6442dc97f 100644 --- a/assets/README.md +++ b/assets/README.md @@ -1,10 +1,10 @@ -# Creative Commons Open Source Website +# Creative Commons Open Source website -⚠️ DO NOT MODIFY THIS REPOSITORY! +> ⚠️ **DO NOT MODIFY THIS REPOSITORY!** -These are the static files for [Creative Commons Open Source][ccos]. The files -are automatically built via CI from the source files in the -[creativecommons.github.io-source][src] repository. +These are the static files for [Creative Commons Open Source][ccos] website. +The files are automatically built via GitHub Actions from the source files in +the [ccos-website-source][src] repository. [ccos]: https://opensource.creativecommons.org/ -[src]: https://github.com/creativecommons/creativecommons.github.io-source +[src]: https://github.com/creativecommons/ccos-website-source diff --git a/assets/static/vocabulary/css/library-vars.css b/assets/static/vocabulary/css/library-vars.css new file mode 100644 index 000000000..ff5e39b18 --- /dev/null +++ b/assets/static/vocabulary/css/library-vars.css @@ -0,0 +1,297 @@ +/* library vars */ + +/* brand typsetting */ +@font-face { + font-family:"Roboto Condensed"; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url('../fonts/RobotoCondensed-Regular.woff2') format('woff2'), + url('../fonts/RobotoCondensed-Regular.woff') format('woff'), + url('../fonts/RobotoCondensed-Regular.otf') format('opentype'); +} + +@font-face { + font-family:"Roboto Condensed"; + font-style: normal; + font-weight: 700; + font-display: swap; + src: url('../fonts/RobotoCondensed-Bold.woff2') format('woff2'), + url('../fonts/RobotoCondensed-Bold.woff') format('woff'), + url('../fonts/RobotoCondensed-Bold.otf') format('opentype'); +} + +@font-face { + font-family: "Source Sans Pro"; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(../fonts/SourceSansPro-Regular.woff2) format("woff2"), + url(../fonts/SourceSansPro-Regular.woff) format("woff"), + url(../fonts/SourceSansPro-Regular.otf) format("opentype"); + } + +@font-face { + font-family: "Source Sans Pro"; + font-style: normal; + font-weight: 600; + font-display: swap; + src: url(../fonts/SourceSansPro-SemiBold.woff2) format("woff2"), + url(../fonts/SourceSansPro-SemiBold.woff) format("woff"), + url(../fonts/SourceSansPro-SemiBold.otf) format("opentype"); +} + +@font-face { + font-family: "Source Sans Pro"; + font-style: normal; + font-weight: 700; + font-display: swap; + src: url(../fonts/SourceSansPro-Bold.woff2) format("woff2"), + url(../fonts/SourceSansPro-Bold.woff) format("woff"), + url(../fonts/SourceSansPro-Bold.otf) format("opentype"); +} + +@font-face { + font-family: "CC Accidenz Commons"; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url(../fonts/CCAccidenzCommons-medium.otf) format("opentype"); +} + + +:root { + /* brand colors */ + + --vocabulary-brand-color-gold: #FBD43C; + --vocabulary-brand-color-green: #008000; + --vocabulary-brand-color-tomato: #C74200; + --vocabulary-brand-color-turquoise: #05b5da; + + --vocabulary-brand-color-soft-gold: #FEF6D8; + + --vocabulary-brand-color-soft-green: #E0F5E0; + --vocabulary-brand-color-dark-green: #005d00; + + --vocabulary-brand-color-soft-turquoise: #DFF6FC; + + --vocabulary-brand-color-soft-tomato: #FEEDE9; + --vocabulary-brand-color-dark-tomato: #903101; + + --vocabulary-neutral-color-lighter-gray: #F5F5F5; + --vocabulary-neutral-color-dark-gray: #767676; + + /* brand typsetting */ + --vocabulary-brand-typeset-nav-family: "Roboto Condensed"; + --vocabulary-brand-typeset-nav-weight: bold; + --vocabulary-brand-typeset-nav-color: #767676; + + /* whitespace */ + --vocabulary-page-edges-space: 5%; + + + + /* brand svg sprite sheet capabilities */ + + /* note: Be sure you utilize the icons in the way that is most + accessible and semantic. + + This system allows for 5 icon implementation strategies: + + 1. Replace an empty with an icon utterly + + + 2. Replace a readable element with an equivalent meaning icon + Mastodon + + 3. Attach an icon to the :before of an element, leaving content + Mastodon + + 4. Bypass the use of CSS classes, and put icon in content as an + with fragment identifiers. + + + + + 5. Target an element precisely with less extraneous "icon name classes", + using mostly CSS. (This could optionally be abstracted further to remove + the need for the .icon class entirely.) + + Mastodon + + a:before { + --icon-sprite: var(--icon-name); + --icon-sprite- color: white; + --icon-sprite-size: .8em; + + */ + + /* set default icon sprite */ + --icon-sprite: url('../svg/cc/icons/cc-icons.svg#cc-logo'); + --icon-sprite-color: black; + --icon-sprite-size: 1em; + + /* cc sprite names */ + --cc-logo: url('./../svg/cc/icons/cc-icons.svg#cc-logo'); + --cc-heart: url('./../svg/cc/icons/cc-icons.svg#cc-heart'); + --cc-heart-filled: url('./../svg/cc/icons/cc-icons.svg#cc-heart-filled'); + --cc-quote: url('./../svg/cc/icons/cc-icons.svg#cc-quote'); + + /* font awesome sprite names */ + --fa-angle-down: url('./../svg/font-awesome/icons/fa-icons.svg#fa-angle-down'); + --fa-angle-left: url('./../svg/font-awesome/icons/fa-icons.svg#fa-angle-left'); + --fa-angle-right: url('./../svg/font-awesome/icons/fa-icons.svg#fa-angle-right'); + --fa-angle-up: url('./../svg/font-awesome/icons/fa-icons.svg#fa-angle-up'); + --fa-globe: url('./../svg/font-awesome/icons/fa-icons.svg#fa-globe'); + --fa-heart: url('./../svg/font-awesome/icons/fa-icons.svg#fa-heart'); + --fa-info: url('./../svg/font-awesome/icons/fa-icons.svg#fa-info'); + --fa-right-angle: url('./../svg/font-awesome/icons/fa-icons.svg#fa-right-angle'); + --fa-search: url('./../svg/font-awesome/icons/fa-icons.svg#fa-search'); + + --fa-instagram: url('./../svg/font-awesome/icons/fa-icons.svg#fa-instagram'); + --fa-twitter: url('./../svg/font-awesome/icons/fa-icons.svg#fa-twitter'); + --fa-facebook: url('./../svg/font-awesome/icons/fa-icons.svg#fa-facebook'); + --fa-linkedin: url('./../svg/font-awesome/icons/fa-icons.svg#fa-linkedin'); + --fa-mastodon: url('./../svg/font-awesome/icons/fa-icons.svg#fa-mastodon'); + +} + +/* establish svg sprite icon defaults */ +.icon { + display: inline-block; + /* min-width: 30px; + min-height: 30px; */ + height: 1em; + width: 1em; + + font-size: var(--icon-sprite-size); + background-color: var(--icon-sprite-color); + -webkit-mask-repeat: no-repeat; + mask-repeat: no-repeat; + + -webkit-mask-image: var(--icon-sprite); + mask-image: var(--icon-sprite); + + -webkit-mask-size: contain; + mask-size: contain; +} + +/* customize a specific sprite via matching class on +with .icon, an element replaced with an icon using .icon-replace, +or attaching an icon to an element :before using .icon-attach, +leaving room for semantic and accessible implementation choices */ + +.icon.cc-heart, .icon-attach.cc-heart:before { + --icon-sprite: var(--cc-heart); +} + +.icon.cc-heart-filled, .icon-attach.cc-heart-filled:before { + --icon-sprite: var(--cc-heart-filled); +} + +.icon.cc-quote, .icon-attach.cc-quote:before { + --icon-sprite: var(--cc-quote); +} + +.icon.fa-angle-down, .icon-attach.fa-angle-down:before { + --icon-sprite: var(--fa-angle-down); +} + +.icon.fa-angle-left, .icon-attach.fa-angle-left:before { + --icon-sprite: var(--fa-angle-left); +} + +.icon.fa-angle-right, .icon-attach.fa-angle-rignt:before { + --icon-sprite: var(--fa-angle-right); +} + +.icon.fa-angle-up, .icon-attach.fa-angle-up:before { + --icon-sprite: var(--fa-angle-up); +} + +.icon.fa-globe, .icon-attach.fa-globe:before { + --icon-sprite: var(--fa-globe); +} + +.icon.fa-heart, .icon-attach.fa-heart:before { + --icon-sprite: var(--fa-heart); +} + +.icon.fa-info, .icon-attach.fa-info:before { + --icon-sprite: var(--fa-info); +} + +.icon.fa-right-angle, .icon-attach.fa-righ-angle:before { + --icon-sprite: var(--fa-heart); +} + +.icon.fa-search, .icon-attach.fa-search:before { + --icon-sprite: var(--fa-search); +} + +.icon-replace.fa-instagram { + --icon-sprite: var(--fa-instagram); +} + +.icon-replace.fa-twitter { + --icon-sprite: var(--fa-twitter); +} + +.icon-replace.fa-facebook { + --icon-sprite: var(--fa-facebook); +} + +.icon-replace.fa-linkedin { + --icon-sprite: var(--fa-linkedin); +} + +.icon-replace.fa-mastodon { + --icon-sprite: var(--fa-mastodon); +} + + +/* attach an icon to an existing element with a :before */ +.icon-attach:before { + display: inline-block; + content: ''; + /* min-width: 30px; */ + /* min-height: 30px; */ + height: 1em; + width: 1em; + + font-size: var(--icon-sprite-size); + background-color: var(--icon-sprite-color); + -webkit-mask-repeat: no-repeat; + mask-repeat: no-repeat; + -webkit-mask-image: var(--icon-sprite); + mask-image: var(--icon-sprite); + + -webkit-mask-size: contain; + mask-size: contain; + + --icon-sprite: var(--cc-logo); +} + +.icon-replace { + display: inline-block; + content: ''; + text-indent: -1000px; + + /* min-width: 30px; */ + /* min-height: 30px; */ + height: 1em; + width: 1em; + + font-size: var(--icon-sprite-size); + background-color: var(--icon-sprite-color); + -webkit-mask-repeat: no-repeat; + mask-repeat: no-repeat; + -webkit-mask-image: var(--icon-sprite); + mask-image: var(--icon-sprite); + + -webkit-mask-size: contain; + mask-size: contain; + + --icon-sprite: var(--cc-logo); +} + diff --git a/assets/static/vocabulary/css/vendor/normalize.css b/assets/static/vocabulary/css/vendor/normalize.css new file mode 100644 index 000000000..1a9fc1b82 --- /dev/null +++ b/assets/static/vocabulary/css/vendor/normalize.css @@ -0,0 +1,349 @@ +/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */ + +/* Document + ========================================================================== */ + +/** + * 1. Correct the line height in all browsers. + * 2. Prevent adjustments of font size after orientation changes in iOS. + */ + + html { + line-height: 1.15; /* 1 */ + -webkit-text-size-adjust: 100%; /* 2 */ + } + + /* Sections + ========================================================================== */ + + /** + * Remove the margin in all browsers. + */ + + body { + margin: 0; + } + + /** + * Render the `main` element consistently in IE. + */ + + main { + display: block; + } + + /** + * Correct the font size and margin on `h1` elements within `section` and + * `article` contexts in Chrome, Firefox, and Safari. + */ + + h1 { + font-size: 2em; + margin: 0.67em 0; + } + + /* Grouping content + ========================================================================== */ + + /** + * 1. Add the correct box sizing in Firefox. + * 2. Show the overflow in Edge and IE. + */ + + hr { + box-sizing: content-box; /* 1 */ + height: 0; /* 1 */ + overflow: visible; /* 2 */ + } + + /** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + + pre { + font-family: monospace, monospace; /* 1 */ + font-size: 1em; /* 2 */ + } + + /* Text-level semantics + ========================================================================== */ + + /** + * Remove the gray background on active links in IE 10. + */ + + a { + background-color: transparent; + } + + /** + * 1. Remove the bottom border in Chrome 57- + * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. + */ + + abbr[title] { + border-bottom: none; /* 1 */ + text-decoration: underline; /* 2 */ + text-decoration: underline dotted; /* 2 */ + } + + /** + * Add the correct font weight in Chrome, Edge, and Safari. + */ + + b, + strong { + font-weight: bolder; + } + + /** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + + code, + kbd, + samp { + font-family: monospace, monospace; /* 1 */ + font-size: 1em; /* 2 */ + } + + /** + * Add the correct font size in all browsers. + */ + + small { + font-size: 80%; + } + + /** + * Prevent `sub` and `sup` elements from affecting the line height in + * all browsers. + */ + + sub, + sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; + } + + sub { + bottom: -0.25em; + } + + sup { + top: -0.5em; + } + + /* Embedded content + ========================================================================== */ + + /** + * Remove the border on images inside links in IE 10. + */ + + img { + border-style: none; + } + + /* Forms + ========================================================================== */ + + /** + * 1. Change the font styles in all browsers. + * 2. Remove the margin in Firefox and Safari. + */ + + button, + input, + optgroup, + select, + textarea { + font-family: inherit; /* 1 */ + font-size: 100%; /* 1 */ + line-height: 1.15; /* 1 */ + margin: 0; /* 2 */ + } + + /** + * Show the overflow in IE. + * 1. Show the overflow in Edge. + */ + + button, + input { /* 1 */ + overflow: visible; + } + + /** + * Remove the inheritance of text transform in Edge, Firefox, and IE. + * 1. Remove the inheritance of text transform in Firefox. + */ + + button, + select { /* 1 */ + text-transform: none; + } + + /** + * Correct the inability to style clickable types in iOS and Safari. + */ + + button, + [type="button"], + [type="reset"], + [type="submit"] { + -webkit-appearance: button; + } + + /** + * Remove the inner border and padding in Firefox. + */ + + button::-moz-focus-inner, + [type="button"]::-moz-focus-inner, + [type="reset"]::-moz-focus-inner, + [type="submit"]::-moz-focus-inner { + border-style: none; + padding: 0; + } + + /** + * Restore the focus styles unset by the previous rule. + */ + + button:-moz-focusring, + [type="button"]:-moz-focusring, + [type="reset"]:-moz-focusring, + [type="submit"]:-moz-focusring { + outline: 1px dotted ButtonText; + } + + /** + * Correct the padding in Firefox. + */ + + fieldset { + padding: 0.35em 0.75em 0.625em; + } + + /** + * 1. Correct the text wrapping in Edge and IE. + * 2. Correct the color inheritance from `fieldset` elements in IE. + * 3. Remove the padding so developers are not caught out when they zero out + * `fieldset` elements in all browsers. + */ + + legend { + box-sizing: border-box; /* 1 */ + color: inherit; /* 2 */ + display: table; /* 1 */ + max-width: 100%; /* 1 */ + padding: 0; /* 3 */ + white-space: normal; /* 1 */ + } + + /** + * Add the correct vertical alignment in Chrome, Firefox, and Opera. + */ + + progress { + vertical-align: baseline; + } + + /** + * Remove the default vertical scrollbar in IE 10+. + */ + + textarea { + overflow: auto; + } + + /** + * 1. Add the correct box sizing in IE 10. + * 2. Remove the padding in IE 10. + */ + + [type="checkbox"], + [type="radio"] { + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ + } + + /** + * Correct the cursor style of increment and decrement buttons in Chrome. + */ + + [type="number"]::-webkit-inner-spin-button, + [type="number"]::-webkit-outer-spin-button { + height: auto; + } + + /** + * 1. Correct the odd appearance in Chrome and Safari. + * 2. Correct the outline style in Safari. + */ + + [type="search"] { + -webkit-appearance: textfield; /* 1 */ + outline-offset: -2px; /* 2 */ + } + + /** + * Remove the inner padding in Chrome and Safari on macOS. + */ + + [type="search"]::-webkit-search-decoration { + -webkit-appearance: none; + } + + /** + * 1. Correct the inability to style clickable types in iOS and Safari. + * 2. Change font properties to `inherit` in Safari. + */ + + ::-webkit-file-upload-button { + -webkit-appearance: button; /* 1 */ + font: inherit; /* 2 */ + } + + /* Interactive + ========================================================================== */ + + /* + * Add the correct display in Edge, IE 10+, and Firefox. + */ + + details { + display: block; + } + + /* + * Add the correct display in all browsers. + */ + + summary { + display: list-item; + } + + /* Misc + ========================================================================== */ + + /** + * Add the correct display in IE 10+. + */ + + template { + display: none; + } + + /** + * Add the correct display in IE 10. + */ + + [hidden] { + display: none; + } diff --git a/assets/static/vocabulary/css/vocabulary.css b/assets/static/vocabulary/css/vocabulary.css new file mode 100644 index 000000000..678fe3b65 --- /dev/null +++ b/assets/static/vocabulary/css/vocabulary.css @@ -0,0 +1,2060 @@ +/* +Style rules are written with two sections +at current, separated by an empty line. + +1. for layout, positioning, and related. + +2. for visual configuration such +as color, font, background, etc. + +EX: +.selector { + layout style: rule here + + visual style: rule here +} + +EX: +.article { + position: relative; + width: 100%; + + color: blue; + text-decoration: none; +} + +*/ + +@import 'vendor/normalize.css'; +@import 'library-vars.css'; + +/* utilities */ +.skip-to-content { + position: absolute; + top: 0; + left: 0; + margin: -1000px; +} + +.skip-to-content:focus { + margin: 0; +} + +/* typography */ + +body { + display: grid; + grid-template-columns: 5% 3% 6% 6% 15% 30% 15% 6% 6% 3% 5%; + overflow-x: hidden; + + font-weight: 400; + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; +} + +a.more { + padding: .4em .7em; + + background: black; + color: white; + font-family: 'Roboto Condensed'; + font-style: normal; + font-weight: 700; + font-size: 1.2em; + text-transform: none; + text-decoration: none; + text-shadow: none; +} + + +/* ************************* */ + +/* temp */ + +/* body > header {display: none;} */ +/* body > footer {display: none;} */ + +/* components */ + +/* post component - singular */ + +.post header { + display: flex; + flex-wrap: wrap; + flex-direction: column; + align-items: baseline; + width: 100%; +} + +.post .categories { + order: -1; + + font-family: 'Source Sans Pro'; +} + +/* post component - plural */ + +.posts { + text-align: center; +} + +.posts > h2 { + margin-bottom: 2.1em; + + font-family: 'Roboto Condensed'; + /* font-size: 2.1em; */ + font-style: normal; + font-weight: 700; + text-transform: none; + text-align: left; +} + +.posts .post { + display: flex; + flex-wrap: wrap; + grid-template-columns: 1fr 1fr; + grid-template-areas: + 'title title' + 'image teaser'; + gap: 2em; + margin-bottom: 8em; + position: relative; + + text-align: left; +} + +/* .posts .post header { + display: flex; + flex-wrap: wrap; + flex-direction: column; + align-items: baseline; + width: 100%; +} */ + +.posts .post h2, .posts .post h3 { + grid-area: title; + width: 100%; + margin-top: 0.83em; + + font-family: 'Roboto Condensed'; + font-style: normal; + font-weight: 700; + font-size: 2.1em; + text-transform: none; + text-transform: initial; +} + +/* .posts .post .categories { + order: -1; + + font-family: 'Source Sans Pro'; +} */ + +.posts .post .byline { + font-family: 'Source Sans Pro'; +} + +.posts .post .type { + position: absolute; + top: 0; + right: 0; + padding: .5em .7em; + + background: var(--vocabulary-brand-color-soft-turquoise); + border-radius: 4px; + font-family: 'Source Sans Pro'; +} + +.posts .post figure { + display: inline-block; + width: 50%; + grid-area: image; + margin: 0; + padding: 0; + flex: 1; +} + +.posts .post img { + width: 100%; +} + +.posts .post p { + flex: 1; + display: inline-block; + grid-area: teaser; + margin-top: 0; +} + +.posts a.more { + display: inline-block; + margin: 0 auto; + margin-bottom: 4em; +} + +.posts .attribution { + display: inline-block; + margin-top: 1em; + + font-family: 'Source Sans Pro'; +} + +/* contexts - in ascending order of specificity */ + +/* .posts .related variant context */ + +.posts.related { + +} + +/*
level context */ + +main { + + display: grid; + grid-template-columns: subgrid; + width: 100%; + margin: 0; + margin-bottom: 8em; + padding: 0; + grid-column: 1 / 12; +} + +main > * { + grid-column: 5 / span 3; +} + +main > header { + display: flex; + flex-wrap: wrap; + justify-content: center; + margin-bottom: 4em; + padding-top: 2em; + padding-bottom: 1em; + position: relative; + grid-template-columns: subgrid; + grid-column: 5 / span 3; + + text-align: center; + color: #333; /* for testing */ +} + +main > header:before { + width: 100vw; + height: 100%; + position: absolute; + left: -33.333%; + top: 0; + z-index: -1; + content: ""; + + background: #F5F5F5; +} + +main > header h1 { + width: 100%; + margin-top: .39em; + margin-bottom: 0; + grid: 0 / auto; + + font-family: 'Roboto Condensed'; + font-size: 3.56em; + font-style: normal; + font-weight: 700; + /* text-transform: uppercase; */ +} + +main > header h2 { + margin: 0; + margin-top: .2em; +} + +main > header a { + color: var(--vocabulary-brand-color-dark-tomato); + --underline-background-color: var(--vocabulary-neutral-color-lighter-gray); +} + +main > header .categories { + order: -1; + + font-family: 'Source Sans Pro'; + font-size: 1.2em; + font-style: normal; + font-weight: 400; +} + +main > header .byline { + display: block; + width: 100%; + margin-top: 2em; + margin-bottom: 2em; + + font-family: 'Source Sans Pro'; + font-size: 1.2em; + font-style: normal; + font-weight: 400; + font-style: italic; +} + +/* if aside is present, split to two-col */ +main:has( > aside.sidebar) > div { /* was '> *' */ + grid-column: 2 / span 5; +} + +main:has( > aside.sidebar) > article { + grid-column: 2 / span 5; +} + +main:has( > aside.sidebar) > aside.sidebar { + grid-column: 7 / span 4; + grid-row-start: 2; + padding-left: 4.1em; +} + +main > aside.sidebar h2 { + font-family: 'Roboto Condensed'; + font-style: normal; + font-weight: 700; + font-size: 1.5em; +} + +main > aside.sidebar nav { + margin-bottom: 3em; +} + +main > aside.sidebar nav.filter-menu ul li { + margin-bottom: 0; + padding: 1em; +} + +main > aside.sidebar nav.filter-menu ul li.current { + background: var(--vocabulary-brand-color-soft-tomato); + /* padding: 1em; */ + font-weight: bold; +} + +main > aside.sidebar nav.filter-menu ul li.current a { + --underline-background-color: var(--vocabulary-brand-color-soft-tomato); +} + +main > aside.sidebar nav ul { + margin: 0; + padding: 0; + text-indent: none; + + list-style: none; + font-size: 1rem; + font-weight: 700; +} + +main > aside.sidebar nav ul ul { + margin-top: .8em; + margin-left: 1em; +} + +main > aside.sidebar nav ul li { + margin-bottom: 1em; + + font-family: 'Source Sans Pro'; + font-style: normal; + font-weight: 400; + font-size: 1.1em; + line-height: 150%; +} + +main > aside.sidebar nav ul ul li { + margin-bottom: .8em; +} + +main > aside.sidebar nav ul ul { + margin-left: 1em; +} + +main > aside.sidebar nav ul ul li { + margin-bottom: .8em; +} + +main > aside.sidebar p { + font-size: 1em; +} + +main > aside.sidebar .attention { + margin-top: 5em; + padding: 1.5em; + + background: var(--vocabulary-brand-color-soft-turquoise); +} + +main > aside.sidebar .attention a { + --underline-background-color: var(--vocabulary-brand-color-soft-turquoise); +} + +main h2 { + width: 100%; + + font-family: 'Roboto Condensed'; + font-style: normal; + font-weight: 700; + font-size: 2.1em; + text-transform: none; +} + +main h3 { + font-family: 'Roboto Condensed'; + font-style: normal; + font-weight: 700; + font-size: 1.75em; + text-transform: none; +} + +main aside.opening { + display: inline-block; + box-sizing: border-box; + width: 25%; + margin-bottom: 2em; + padding: 2em; + width: 100%; + + background: #FEEDE9; +} + + +main aside.opening a { + color: var(--vocabulary-brand-color-dark-tomato); + --underline-background-color: #FEEDE9; +} + +main aside.opening p { + margin :0; + + font-family: 'Source Sans Pro'; + font-size: 1.2em; + font-style: normal; + font-weight: 400; + line-height: 150%; +} + +main a { + /* better hyperlink underline typesetting inspired by Tufte CSS */ + --underline-color: var(--vocabulary-brand-color-dark-tomato); + --underline-background-color: white; + color: var(--vocabulary-brand-color-dark-tomato); + text-decoration: none; + + /* adapted from Tufte.css -- Copyright (c) 2014 Dave Liepmann -- https://github.com/edwardtufte/tufte-css -- https://github.com/edwardtufte/tufte-css/blob/gh-pages/LICENSE */ + background: -webkit-linear-gradient(var( --underline-color), var( --underline-color)), -webkit-linear-gradient(var( --underline-color), var( --underline-color)), -webkit-linear-gradient(currentColor, currentColor); + background: linear-gradient(var( --underline-color), var( --underline-color)), linear-gradient(var( --underline-color), var( --underline-color)), linear-gradient(currentColor, currentColor); + -webkit-background-size: 0.05em 1px, 0.05em 1px, 1px 1px; + -moz-background-size: 0.05em 1px, 0.05em 1px, 1px 1px; + background-size: 0.05em 1px, 0.05em 1px, 1px 1px; + background-repeat: no-repeat, no-repeat, repeat-x; + text-shadow: 0.03em 0 var(--underline-background-color), -0.03em 0 var(--underline-background-color), 0 0.03em var(--underline-background-color), 0 -0.03em var(--underline-background-color), 0.06em 0 var(--underline-background-color), -0.06em 0 var(--underline-background-color), 0.09em 0 var(--underline-background-color), -0.09em 0 var(--underline-background-color), 0.12em 0 var(--underline-background-color), -0.12em 0 var(--underline-background-color), 0.15em 0 var(--underline-background-color), -0.15em 0 var(--underline-background-color); + background-position: 0% 93%, 100% 93%, 0% 93%; + background-position-y: 90%, 90%, 90%; +} + +main p { + margin-bottom: 2em; + + font-family: 'Source Sans Pro'; + font-size: 1.5em; + font-style: normal; + font-weight: 400; + line-height: 150%; +} + +main ul, main ol { + margin: 0 0 2em 1em; + padding: 0; + + font-family: 'Source Sans Pro'; + font-size: 1.5rem; + font-style: normal; + font-weight: 400; + /* line-height: 150%; */ +} + +main ul ul, main ol ol { + font-size: 1.2rem; +} + +main blockquote { + margin: 0; + margin-bottom: 1.5em; + padding: 0; +} + +/* manually include quote icon to avoid extraneous html classes */ +main blockquote p:before { + --icon-sprite: var(--cc-quote); + + display: block; + content: ''; + height: 1em; + width: 1em; + + font-size: var(--icon-sprite-size); + background-color: var(--icon-sprite-color); + -webkit-mask-repeat: no-repeat; + mask-repeat: no-repeat; + -webkit-mask-image: var(--icon-sprite); + mask-image: var(--icon-sprite); + -webkit-mask-size: contain; + mask-size: contain; +} + +main blockquote p { + font-family: 'Source Sans Pro'; + font-weight: bold; + font-size: 1.9em; + line-height: 105%; +} + +main figure { + margin: 0; + margin-bottom: 3em; + padding: 0; +} + +main > article figure img, main > figure img { + width: 100%; +} + +main figure .attribution { + display: block; + margin-top: 1em; + + font-family: 'Source Sans Pro'; + font-style: normal; + font-weight: 400; + line-height: 150%; +} + +main figure:has(iframe) { + grid-column: 4 / span 5; + float: none; +} + +main aside.closing { + display: inline-block; + box-sizing: border-box; + width: 25%; + margin-bottom: 2em; + padding: 2em; + width: 100%; + + background: var(--vocabulary-brand-color-soft-turquoise); + } + +main aside.closing a { + --underline-background-color: var(--vocabulary-brand-color-soft-turquoise); + color: var(--vocabulary-brand-color-dark-tomato); + } + +main aside.closing p { + margin :0; + + font-family: 'Source Sans Pro'; + font-size: 1.2em; + font-style: normal; + font-weight: 400; + line-height: 150%; + } + +main .pub-date { + display: inline-block; + margin-bottom: 4em; + + font-family: 'Source Sans Pro'; + font-size: 1.5em; + font-style: normal; + font-weight: 400; + line-height: 150%; +} + +main article.tags { + margin-bottom: 8em; +} + +main article.tags ul { + display: flex; + flex-wrap: wrap; + margin: 0; + left: 0; + + list-style: none; +} + +main article.tags ul li { + margin-right: .5em; +} + + +main article.tags ul li:after { + content: ','; + margin-left: .1em; +} + +main article.tags ul li:last-child:after { + content: ''; +} + +main > footer { + grid-column: 3 / span 7; +} + +main article.posts.related { + grid-column: 3 / span 7; + padding: 2em 4em; + box-sizing: border-box; + + background: var(--vocabulary-neutral-color-lighter-gray); +} + +main article.posts.related > h2 { + margin-bottom: 0.83em; +} + +main article.posts.related ul { + display: grid; + grid-template-columns: 1fr 1fr 1fr 1fr; + margin: 0 auto; + margin-top: 0; + gap: 2em; + box-sizing: border-box; + list-style: none; + + font-size: initial; + + +} + +main article.posts.related ul li { + margin-bottom: 3em; +} + +main article.posts.related .post { + margin-bottom: 0; +} + +main article.posts.related .post header { + flex-direction: column; + align-items: baseline; +} + +main article.posts.related .post figure { + display: none; + order: -1; +} + +main article.posts.related .post a { + --underline-background-color: var(--vocabulary-neutral-color-lighter-gray); +} + +main article.posts.related .post h2, main article.posts.related .post h3 { + font-size: 1.4em; +} + +main article.posts.related .post p { + display: none; +} + +main nav.pagination { + margin: 0 auto; +} + +main nav.pagination ol { + display: flex; + flex-wrap: wrap; + justify-content: center; + width: 100%; + margin: 0; + padding: 0; + text-indent: none; + + font-size: 1em; + list-style: none; +} + +main nav.pagination ol li { + margin: 0 .5em; + + line-height: 250%; +} + +main nav.pagination ol li a { + padding: .4em .7em; + + background: #F5F5F5; + --underline-background-color: #F5F5F5; + color: black; + font-family: 'Roboto Condensed'; + font-style: normal; + font-weight: 700; + font-size: 1.2em; + text-transform: none; + text-decoration: none; +} + +main nav.pagination ol li.current a { + background: black; + --underline-background-color: black; + color: white; +} + +main .attribution-list { + grid-column: 3 / span 7; + box-sizing: border-box; + position: relative; + padding: 4em; + + background: var(--vocabulary-neutral-color-lighter-gray); + text-align: left; +} + +main .attribution-list h2 { + margin: 0; +} + +main .attribution-list button.expand-attribution { + position: absolute; + top: 4.5em; + right: 4em; + + cursor: pointer; + border: 1px solid black; + border-radius: 3px; + padding: .5em; + font-family: "Source Sans Pro"; +} + +main .attribution-list button.expand-attribution.selected { + background: black; + color: white; +} + +main .attribution-list ul { + display: none; +} + +main .attribution-list ul.expand { + display: grid; + grid-template-columns: 1fr 1fr 1fr 1fr; + margin: 0; + margin-top: 2em; + padding: 0; + gap: 2em; + + font-size: 1em; + list-style: none; +} + +main .attribution-list article { + margin-bottom: 1em; +} + +main .attribution-list article a { + --underline-background-color: var(--vocabulary-brand-color-grey); +} + +main .attribution-list article figure { + display: flex; + gap: 1em; + margin-top: 1em; +} + +main .attribution-list article img { + object-fit: cover; + width: 4em; + height: 4em; +} + +main .attribution-list article figure .attribution { + margin-top: 0; +} + +/* general page-level context */ + +/* body-level context */ + +/* global header component */ +body > header { + grid-column: 1 / 12; + display: flex; + flex-wrap: wrap; + position: relative; + margin-bottom: 2em; + /* padding: 0 var(--vocabulary-page-edges-space); */ +} + +body > header .masthead { + display: flex; + justify-content: space-between; + flex-wrap: wrap; + align-items: baseline; + position: relative; + + width: 100%; + /* padding-top: 3%; */ + padding-top: 40px; + margin: 0 var(--vocabulary-page-edges-space); +} + +body > header .masthead h1 { + margin: 0; +} + +/* allows the child identity-logo element to have a focus state */ +body > header .identity-logo-wrapper { + height: 50px; + width: 191px; + display: block; + position: absolute; +} + +body > header .masthead .identity-logo { + display: inline-block; + text-indent: -1000px; + vertical-align: bottom; + height: 50px; + width: 191px; + + + /* allows for color manipulation of svg */ + background-color: black; + -webkit-mask-image: url('./../svg/cc/logos/cc/logomark.svg'); + mask-image: url('./../svg/cc/logos/cc/logomark.svg'); + -webkit-mask-repeat: no-repeat; + mask-repeat: no-repeat; + cursor: pointer; + + /* standard pattern for setting logo in lieu of background color manipulation */ + /* background: url('../../svg/cc/logos/cc/logomark.svg') left top no-repeat; */ +} + +body > header .masthead .identity-logo:hover { + background-color: var(--vocabulary-neutral-color-dark-gray); +} + +/* TODO: needs focus outline to be fixed */ +/* .masthead .identity-logo:focus { + position: relative; +} + +.masthead .identity-logo:focus:before { + display: block; + width: 100%; + height: 100%; + position: absolute; + top: 0; + left: 0; + z-index: 1000; + content: ''; + + border: 60px solid purple; + -webkit-mask-image: none; + mask-image: none; +} */ + +/* style product identity typesetting */ +body > header .masthead .identity-logo.product { + width: initial; + position: relative; + text-indent: 42px; + padding-top: 7px; + box-sizing: border-box; + + text-decoration: none; + font-family: "CC Accidenz Commons"; + font-weight: normal; + text-transform: lowercase; + letter-spacing: -1px; + line-height: 1em; + -webkit-mask-image: none; + mask-image: none; + background: none; + color: black; +} + +/* style product identity mini-cc-logo */ +body > header .masthead .identity-logo.product:before { + position: absolute; + width: 40px; + height: 40px; + content: ''; + left: 0; + top: .176em; + + background-color: black; + -webkit-mask-image: url('./../svg/cc/logos/cc/lettermark.svg'); + mask-image: url('./../svg/cc/logos/cc/lettermark.svg'); + -webkit-mask-repeat: no-repeat; + mask-repeat: no-repeat; + cursor: pointer; +} + +/* .masthead .primary-menu { + margin-top: 45px; + vertical-align: bottom; + +} */ + +body > header .masthead .primary-menu ul { + display: flex; + justify-content: space-around; + width: 100%; + margin: 0; + padding: 0; + + list-style: none; +} + +body > header .masthead .primary-menu ul li { + display: flex; + align-items: center; + margin-top: 5px; + margin-left: 20px; +} + +body > header .masthead .primary-menu ul li a { + text-decoration: none; + text-transform: uppercase; + font-family: var(--vocabulary-brand-typeset-nav-family); + font-weight: var(--vocabulary-brand-typeset-nav-weight); + font-size: 1.1em; + letter-spacing: 0.02em; + color: var(--vocabulary-brand-typeset-nav-color); +} + +body > header .masthead .primary-menu ul li a:hover { + color: black; +} + +body > header .masthead .primary-menu ul li a.attention { + display: inline-block; + padding: 0.5em; + + background: var(--vocabulary-brand-color-turquoise); + color: white; + border-radius: 4px; +} + +body > header button.expand-menu { + display: none; +} + +body > header .ancilliary-menu { + position: absolute; + top: 0; + /* right: var(--vocabulary-page-edges-space); */ + right: 0; + + font-family: "Source Sans Pro"; + font-style: normal; + font-weight: 600; + font-size: .8em; + /* font-size: 1em; */ +} + +body > header .ancilliary-menu ul { + display: flex; + margin: 0; + padding: 0; + + list-style: none; +} + +body > header .ancilliary-menu ul li { + margin-left: 10px; +} +body > header .ancilliary-menu ul li a { + /* generalize this */ + display: inline-block; +} + +body > header .ancilliary-menu ul li a, +.ancilliary-menu ul li button { + margin-top: 10px; +} + +body > header .ancilliary-menu ul li button:hover { + cursor: pointer; +} + +body > header .ancilliary-menu button.locale { + display: inline-flex; + align-items: center; + padding: 6px 10px; + + + background: var(--vocabulary-neutral-color-lighter-gray); + border: none; + border-radius: 3px; +} + +body > header .ancilliary-menu button.locale.icon-attach:before { + --icon-sprite: var(--fa-globe); + --icon-sprite-size: .8em; + + margin-right: .8em; + + opacity: .3; +} + +body > header .ancilliary-menu a.donate { + display: inline-flex; + align-items: center; + padding: 6px 10px; + + text-decoration: none; + background: var(--vocabulary-brand-color-soft-tomato); + color: var(--vocabulary-brand-color-dark-tomato); + border-radius: 3px; +} + +.ancilliary-menu a.donate.icon-attach:before { + --icon-sprite: var(--fa-heart); + --icon-sprite-color: var(--vocabulary-brand-color-dark-tomato); + --icon-sprite-size: .8em; + + margin-right: .8em; +} + +body > header .ancilliary-menu a.search { + display: inline-flex; + align-items: center; + padding: 6px 10px; + + font-weight: normal; + text-decoration: none; + background: var(--vocabulary-neutral-color-lighter-gray); + color: #000; + border: none; + border-radius: 3px; +} + +body > header .ancilliary-menu a.search.icon-attach:before { + --icon-sprite: var(--fa-search); + --icon-sprite-size: .8em; + + margin-right: .8em; +} + +body > header .ancilliary-menu button.explore { + margin-top: 0; + padding-top: 16px; + padding-bottom: 6px; + padding-left: 10px; + padding-right: 10px; + + background: black; + color: white; + border: none; + border-bottom-right-radius: 5px; + border-bottom-left-radius: 5px; +} + +body > header .explore-panel { + order: -1; + display: flex; + justify-content: space-between; + width: 100%; + padding: 40px var(--vocabulary-page-edges-space) 60px var(--vocabulary-page-edges-space); + + background: black; + color: white; + display: none; +} + +.explore-panel.expand { + display: inherit; + transition: display 2s ease-in-out; +} + +body > header .explore-panel aside { + margin-right: 20px; +} + +body > header .explore-panel aside .identity-logo { + display: inline-block; + text-indent: -1000px; + vertical-align: bottom; + height: 50px; + width: 191px; + + + /* allows for color manipulation of svg */ + background-color: white; + -webkit-mask-image: url('./../svg/cc/logos/cc/logomark.svg'); + mask-image: url('./../svg/cc/logos/cc/logomark.svg'); + -webkit-mask-repeat: no-repeat; + mask-repeat: no-repeat; + cursor: pointer; + + /* standard pattern for setting logo in lieu of background color manipulation */ + /* background: url('../../svg/cc/logos/cc/logomark.svg') left top no-repeat; */ + +} + +body > header .explore-panel aside h2 { + font-family: 'Roboto Condensed'; + font-style: normal; + font-weight: 700; + +} + +body > header .explore-panel aside p { + font-family: 'Source Sans Pro'; + font-style: normal; + font-weight: 400; +} + +body > header .explore-panel .explore-menu { + width: 100%; + + font-family: 'Source Sans Pro'; + font-style: normal; + font-weight: 400; + +} + +body > header .explore-panel .explore-menu ul { + display: grid; + grid-template-columns: 1fr 1fr 1fr; + gap: 20px; + + margin: 0; + padding: 0; + + list-style: none; + +} + +body > header .explore-panel nav ul li a { + display: block; + + color: var(--vocabulary-brand-color-turquoise); + text-decoration: none; + font-weight: 700; + /* margin-bottom: .8em; */ +} + +body > header .explore-panel nav ul li p { + font-weight: inherit; + line-height: 1.5; +} + +body > article.attention { + grid-column: 1 / span 11; + padding: 1em 5%; + + background: var(--vocabulary-brand-color-soft-green); + font-family: 'Source Sans Pro'; + font-style: normal; + font-weight: 400; + font-size: 1.2em; + line-height: 150%; + text-align: center; + border-bottom: 3px solid white; +} + +/* bottom page banner */ +/* body > article.attention:nth-of-type(2) { + background: var(--vocabulary-brand-color-soft-gold); +} */ + +body > article.attention a { + color: var(--vocabulary-brand-color-dark-green); + --underline-background-color: var(--vocabulary-brand-color-soft-green); +} + +body > article.attention.low-importance a, body > article.attention.medium-importance a, body > article.attention.high-importance a { + display: inline-flex; + align-items: center; + padding: 0.5em .8em; + margin-left: .5em; + + text-transform: uppercase; + font-family: 'Roboto Condensed'; + font-style: normal; + font-weight: 700; + text-decoration: none; + vertical-align: middle; + background: var(--vocabulary-brand-color-turquoise); + color: white; + border-radius: 4px; +} + +body > article.attention.low-importance a:before, body > article.attention.medium-importance a:before, body > article.attention.high-importance a:before { + --icon-sprite: var(--cc-heart-filled); + --icon-sprite-color: white; + --icon-sprite-size: 1em; + + display: inline-block; + content: ''; + height: 1em; + width: 1em; + margin-right: .2em; + + font-size: var(--icon-sprite-size); + background-color: var(--icon-sprite-color); + -webkit-mask-repeat: no-repeat; + mask-repeat: no-repeat; + -webkit-mask-image: var(--icon-sprite); + mask-image: var(--icon-sprite); + -webkit-mask-size: contain; + mask-size: contain; +} + +body > .attention.low-importance { + background: var(--vocabulary-brand-color-soft-green); + border-bottom: 8px solid var(--vocabulary-brand-color-green); +} + +body > .attention.medium-importance { + background: var(--vocabulary-brand-color-soft-gold); + border-bottom: 8px solid var(--vocabulary-brand-color-gold); +} + +body > .attention.high-importance { + background: var(--vocabulary-brand-color-soft-tomato); + border-bottom: 8px solid var(--vocabulary-brand-color-tomato); +} + +/* global footer component */ +body > footer { + grid-column: 1 / 12; + display: grid; + grid-template-columns: 1fr 1fr 1fr 1fr; + grid-template-areas: + "logo nav nav nav" + "contact subscribe subscribe donate" + "contact license license donate"; + gap: 40px; + padding: 40px var(--vocabulary-page-edges-space); + + font-family: 'Source Sans Pro'; + font-style: normal; + font-weight: 400; + color: white; + background: black; +} + +body > footer h2 { + font-family: 'Roboto Condensed'; + font-style: normal; + font-weight: 700; + font-size: 1.25em; +} + +body > footer a { + color: var(--vocabulary-brand-color-turquoise); + text-decoration: none; +} + +body > footer p { + line-height: 1.5; +} + +/* needs to be moved to be broader in general specificity scope */ +body > footer p a { + /* better hyperlink underline typesetting inspired by Tufte CSS */ + --underline-color: var(--vocabulary-brand-color-turquoise); + --underline-background-color: black; + color: var(--vocabulary-brand-color-turquoise); + /* text-decoration: none; */ + + /* adapted from Tufte.css -- Copyright (c) 2014 Dave Liepmann -- https://github.com/edwardtufte/tufte-css -- https://github.com/edwardtufte/tufte-css/blob/gh-pages/LICENSE */ + background: -webkit-linear-gradient(var( --underline-color), var( --underline-color)), -webkit-linear-gradient(var( --underline-color), var( --underline-color)), -webkit-linear-gradient(currentColor, currentColor); + background: linear-gradient(var( --underline-color), var( --underline-color)), linear-gradient(var( --underline-color), var( --underline-color)), linear-gradient(currentColor, currentColor); + -webkit-background-size: 0.05em 1px, 0.05em 1px, 1px 1px; + -moz-background-size: 0.05em 1px, 0.05em 1px, 1px 1px; + background-size: 0.05em 1px, 0.05em 1px, 1px 1px; + background-repeat: no-repeat, no-repeat, repeat-x; + text-shadow: 0.03em 0 var(--underline-background-color), -0.03em 0 var(--underline-background-color), 0 0.03em var(--underline-background-color), 0 -0.03em var(--underline-background-color), 0.06em 0 var(--underline-background-color), -0.06em 0 var(--underline-background-color), 0.09em 0 var(--underline-background-color), -0.09em 0 var(--underline-background-color), 0.12em 0 var(--underline-background-color), -0.12em 0 var(--underline-background-color), 0.15em 0 var(--underline-background-color), -0.15em 0 var(--underline-background-color); + background-position: 0% 93%, 100% 93%, 0% 93%; + /* background-position-y: 87%, 87%, 87%; */ + +} + +body > footer .identity-logo { + grid-area: logo; + display: inline-block; + text-indent: -1000px; + vertical-align: bottom; + height: 50px; + width: 191px; + + + /* allows for color manipulation of svg */ + background-color: white; + -webkit-mask-image: url('./../svg/cc/logos/cc/logomark.svg'); + mask-image: url('./../svg/cc/logos/cc/logomark.svg'); + -webkit-mask-repeat: no-repeat; + mask-repeat: no-repeat; + cursor: pointer; + + /* standard pattern for setting logo in lieu of background color manipulation */ + /* background: url('../../svg/cc/logos/cc/logomark.svg') left top no-repeat; */ +} + +body > footer .identity-logo:hover { + background-color: var(--vocabulary-brand-color-turquoise); +} + +body > footer .footer-menu { + grid-area: nav; + + font-size: 1.3em; + font-weight: 700; +} + +body > footer .footer-menu ul { + display: flex; + justify-content: space-between; + margin: 0; + padding: 0; + + list-style: none; +} + +body > footer .footer-menu ul li a { + text-decoration: none; + color: var(--vocabulary-brand-color-turquoise); + +} + +body > footer .contact { + grid-area: contact; +} + +body > footer .contact .social-menu ul { + display: flex; + margin: 0; + padding: 0; + margin-top: 3em; + + list-style: none; + +} + +body > footer .contact .social-menu ul li { + margin-right: 1.5em; +} + +body > footer .social-menu li a { + --icon-sprite-color: white; + --icon-sprite-size: 1.9em; +} + +body > footer .subscribe { + grid-area: subscribe; +} + +body > footer .subscribe form { + display: flex; + justify-content: space-around; + width: 100%; +} + +body > footer .subscribe form input { + display: inline-flex; + position: relative; + justify-content: flex-start; + align-items: center; + vertical-align: top; + box-sizing: border-box; + + -webkit-appearance: none; + background-color: transparent; + color: rgb(118, 118, 118); + font-family: "Source Sans Pro", sans-serif; + font-size: 1em; + font-weight: 600; + line-height: 1.3; + border: 2px solid rgb(118, 118, 118);; + /* border-radius: 4px; */ + box-shadow: none; + +} + +body > footer .subscribe form input.input { + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; + padding: .5em; + width: 100%; +} + +body > footer .subscribe form input.input:focus { + color: white; +} + +body > footer .subscribe form input.button { + justify-content: center; + padding: 1.1em; + + cursor: pointer; + font-family: "Roboto Condensed", sans-serif; + font-size: 1.125rem; + text-align: center; + text-transform: uppercase; + font-weight: 600; + line-height: 0; + white-space: nowrap; + background-color: rgb(118, 118, 118); + border: none; + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; + color: rgb(255, 255, 255); +} + +body > footer .donate { + grid-area: donate; +} + +body > footer .donate a.donate { + display: inline-flex; + align-items: center; + padding: 1rem 1.5rem; + + text-transform: uppercase; + font-family: 'Roboto Condensed'; + font-size: 1.5em; + line-height: 1em; + font-style: normal; + font-weight: 700; + border: none; + border-radius: 4px; + color: black; + background: var(--vocabulary-brand-color-gold); +} + +body > footer .donate a.donate:hover { + cursor: pointer; + + background-color: rgb(248, 204, 44); +} + +/* set the icon settings */ +body > footer .donate a.donate.icon-attach:before { + /* --icon-sprite: var(--cc-heart-filled); */ + --icon-sprite-color: black; + --icon-sprite-size: 1.2em; + + margin-right: .3em; +} + +body > footer .license { + grid-area: license; +} + +body > footer .license img path { + fill: white; + /* width: 1.2em; */ +} + +body > footer .license svg { + display: inline; + width: 1.9em; + height: 1.9em; + margin-right: .3em; +} + + +/* archive-page context */ +.archive-page main { + + +} + +/* blog-index context */ + +.blog-index main > header { + margin-bottom: 0; +} + +.blog-index main .posts { + grid-column: 2 / span 9; +} + +.blog-index main .posts h2 { + text-align: center; +} + +.blog-index main .posts ul { + display: grid; + grid-template-columns: repeat(12, 1fr); + margin-top: 8em; + /* padding: 0 4em; */ + gap: 2em; + box-sizing: border-box; + width:100%; + margin: 0 auto; + margin-top: 0; + + font-size: 1rem; + list-style: none; +} + +.blog-index main .posts ul li { + grid-column: span 4; + } + + .blog-index main .posts ul li h3 { + font-size: 1.5em; +} + +.blog-index main .posts .post figure { + order: -1; +} + + +/* targets the featured posts section */ +.blog-index main .posts.featured { + grid-column: 1 / span 11; + margin-bottom: 3em; + + background: var(--vocabulary-neutral-color-lighter-gray); +} + +.blog-index main .posts.featured h2 { + visibility: hidden; + height: 0; + margin: 0; + padding: 0; +} + +.blog-index main .posts.featured .post h3 { + font-size: 1.4em; +} + +.blog-index main .posts.featured ul li:nth-child(1) h3 { + font-size: 2.1em; +} + +.blog-index main .posts.featured .post a { + --underline-background-color: var(--vocabulary-neutral-color-lighter-gray); +} + +.blog-index main .posts.featured li:nth-of-type(1) .post a { + --underline-background-color: white; +} + +.blog-index main .posts.featured li:nth-of-type(1) .post figure { + order: initial; +} + +.blog-index main .posts.featured ul { + padding: 0 5%; +} + +.blog-index main .posts.featured ul li { + grid-column: span 3; +} + +.blog-index main .posts.featured ul li:nth-of-type(1) { + grid-column: span 12; + + background: white; +} + +.blog-index main .posts.featured ul li:nth-of-type(1) article.post { + margin-bottom: 1em; + padding: 4em; +} + + +.blog-index main footer { + grid-column: 2 / span 9; +} + +/* search-index context */ + +.search-index main > header { /* generalize? */ + display: block; + padding: 3.7em 0; + /* text-align: left; */ +} + +.search-index .search-form form { + display: flex; + width: 100%; + margin-top: 1em; + margin-bottom: 1em; + + font-family: 'Source Sans Pro'; + font-style: normal; + font-weight: 700; + font-size: 1em; + +} + +.search-index .search-form form input { + flex: 1; + width: 100%; + height: 4em; + padding: .2em 1em; + + outline: none; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; + border: 2px solid black; + +} + +.search-index .search-form form button { + width: 10%; + + cursor: pointer; + background: black; + color: white; + border: none; + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} + +/* team-index context */ + +.team-index main .persons { + grid-column: 2 / 11; + margin-bottom: 5em; +} + +.team-index main .persons h2 { + margin-top: 0; + margin-bottom: 1.5em; + + font-family: 'Roboto Condensed'; + font-style: normal; + font-weight: 700; + font-size: 2.1em; +} + +.team-index main .persons ul { + display: grid; + grid-template-columns: 1fr 1fr 1fr 1fr; + gap: 4em; + margin: 0; + padding: 0; + + list-style: none; +} + +.team-index main .persons .person { + display: flex; + flex-wrap: wrap; + + font-family: 'Source Sans Pro'; +} + +.team-index main .persons .person h3 { + width: 100%; + margin-top: .6em; + margin-bottom: .5em; + + font-style: normal; + font-weight: 700; + font-size: 1em; + /* line-height: 150%; */ +} + +.team-index main .persons .person .title { + margin-bottom: .4em; + + font-style: normal; + font-weight: 600; + font-size: .7em; + line-height: 150%; +} + +.team-index main .persons .person figure { + order: -1; + margin: 0; + padding: 0; + + font-size: .8em; +} + +.team-index main .persons .person img { + width: 100%; + zoom: 10; +} + +.team-index main .persons .person a { + /* better hyperlink underline typesetting inspired by Tufte CSS */ + --underline-color: var(--vocabulary-brand-color-dark-tomato); + --underline-background-color: white; + color: var(--vocabulary-brand-color-dark-tomato); + text-decoration: none; + + /* adapted from Tufte.css -- Copyright (c) 2014 Dave Liepmann -- https://github.com/edwardtufte/tufte-css -- https://github.com/edwardtufte/tufte-css/blob/gh-pages/LICENSE */ + background: -webkit-linear-gradient(var( --underline-color), var( --underline-color)), -webkit-linear-gradient(var( --underline-color), var( --underline-color)), -webkit-linear-gradient(currentColor, currentColor); + background: linear-gradient(var( --underline-color), var( --underline-color)), linear-gradient(var( --underline-color), var( --underline-color)), linear-gradient(currentColor, currentColor); + -webkit-background-size: 0.05em 1px, 0.05em 1px, 1px 1px; + -moz-background-size: 0.05em 1px, 0.05em 1px, 1px 1px; + background-size: 0.05em 1px, 0.05em 1px, 1px 1px; + background-repeat: no-repeat, no-repeat, repeat-x; + text-shadow: 0.03em 0 var(--underline-background-color), -0.03em 0 var(--underline-background-color), 0 0.03em var(--underline-background-color), 0 -0.03em var(--underline-background-color), 0.06em 0 var(--underline-background-color), -0.06em 0 var(--underline-background-color), 0.09em 0 var(--underline-background-color), -0.09em 0 var(--underline-background-color), 0.12em 0 var(--underline-background-color), -0.12em 0 var(--underline-background-color), 0.15em 0 var(--underline-background-color), -0.15em 0 var(--underline-background-color); + background-position: 0% 93%, 100% 93%, 0% 93%; + /* background-position-y: 87%, 87%, 87%; */ +} + +.team-index main .persons .person p { + font-size: .75em; +} + +.team-index main aside.closing { + background: none; +} + +.team-index main aside.closing p { + font-style: italic; +} + +/* person-page context */ + +.person-page main > header { + grid-column: 2 / span 9; + min-height: 410px; + position: relative; + box-sizing: border-box; + display: grid; + grid-template-columns: 3fr 7fr; + /* grid-template-areas: + 'picture info' + 'picture info' + 'picture info'; */ + gap: 0 5em; + padding: 3.7em 0; + + text-align: left; +} + + +.person-page main > header:before { + left: -5.5%; +} + +.person-page main > header h1 { + grid-column-start: 2; + + margin-bottom: .1em; + +} + +.person-page main > header .title { + grid-column-start: 2; + margin-bottom: 1em; + + font-family: 'Source Sans Pro'; + font-style: normal; + font-weight: 700; + font-size: 1.9em; +} + +.person-page main > header .pronouns { + grid-column-start: 2; + margin-bottom: 1em; + font-family: 'Source Sans Pro'; + font-style: normal; + font-weight: 700; + font-size: 1.5em; +} + +.person-page main > header figure { + box-sizing: border-box; + position: absolute; + margin: 0; + padding:0; + + top: 3.4em; + left: 0; + width: 30%; +} + +.person-page main > header figure img { + box-sizing: border-box; + + width: 100%; + + border: 16px solid white; +} + +.person-page main > header .bio { + grid-column-start: 2; + + font-size: .9em; + +} + +.person-page main > header p { + margin-bottom: .3em; +} + +/* program-index context */ + +.program-index main > article.projects { + grid-column: 3 / 10; + margin-bottom: 8em; +} + +.program-index main > article.projects ul { + display: grid; + grid-template-columns: 1fr 1fr 1fr; + gap: 2em; + margin: 0; + padding: 0; + + font-size: 1em; + list-style: none; +} + +.program-index main > article.projects article { + padding: 2em; + + background: var(--vocabulary-brand-color-soft-turquoise); + border-top: 3px solid black; +} + +.program-index main > article.projects article a { + --underline-background-color: var(--vocabulary-brand-color-soft-turquoise); +} + +/* program-page context */ + + +/* responsive contexts */ + +@media (min-width: 1500px) { + body { + width: 1500px; + margin: 0 auto; + } + + body > main { + overflow-x: hidden; + } + +} + +@media (max-width: 1140px) { + .blog-index main footer .attribution-list ul.expand { + grid-template-columns: 1fr 1fr; + } + + .search-index main > header { + grid-column: 3 / 10; + } + + .search-index main > header:before { + left: -9.3%; + } +} + +@media (max-width: 900px) { + + .blog-index main .posts ul { + display: flex; + flex-wrap: wrap; + } +} + +@media (max-width: 705px) { + + body > header .masthead { + padding-top: 60px; + display: block; + } + + body > header button.expand-menu { + position: absolute; + top: 4.5em; + right: 0; + display: inline-block; + padding: .3em .5em; + border: none; + border-radius: 5px; + background: #F5F5F5; + text-transform: uppercase; + font-family: 'Roboto Condensed'; + font-style: normal; + font-weight: 700; + font-size: 1em; + padding: .5rem 1rem; + } + + body > header .primary-menu { + display: none; + + } + + body > header .primary-menu.expand { + display: initial; + } + + body > header .primary-menu.expand ul { + display: block; + width: 100%; + margin: 0; + padding: 0; + margin-top: 1.5em; + } + + body > header .primary-menu.expand ul li { + margin: 0; + padding: 1em 0; + border-top: 1px solid rgba(1,1,1,.1); + } + + main { + width: 80%; + } + + main article.posts.related { + width: 100%; + margin-left: 0; + } + + main article.posts.related { + display: block; + } + + .blog-index main article.posts.featured > ul li:nth-child(1) { + padding: 2em; + } + + .blog-index main .posts { + padding: 0 5%; + } + + .blog-index main footer .attribution-list ul.expand { + display: block; + } + + .search-index .search-form form button { + width: 20%; + } + +} + +@media (max-width: 680px) { + + body > header .explore-panel { + flex-wrap: wrap; + } + + body > footer { + display: block; + } + + body > footer > nav { + margin-top: 1em; + margin-bottom: 3em; + } + + body > footer > nav ul li { + margin-bottom: 1em; + } + + body > footer > div { + margin-bottom: 4em; + } + + main { + display: block; + width: 100%; + } + + main > aside .attention { + margin-bottom: 5em; + } + + main > header:before { + left: 0; + } + + .posts article figure { + width: 100%; + flex: initial; + } + + .team-index main > header { + padding: 0 5%; + } + + .team-index main article.persons { + padding: 0 5%; + } + + .team-index main article.persons ul { + grid-template-columns: 1fr 1fr; + } + + .person-page main > header { + display: flex; + } + + .person-page main > header figure { + width: auto; + margin-bottom: 3em; + position: relative; + + order: -1; + } + + main nav.pagination { + width: 100%; + } + + main nav.pagination ol { + /* width: 100%; */ + flex-wrap: wrap; + } + + main nav.pagination ol li { + line-height: 250%; + } +} + +@media (max-width: 580px) { + body > header .explore-panel .explore-menu ul { + grid-template-columns: 1fr 1fr; + } + + body > footer .footer-menu ul { + display: block; + } +} + +@media (max-width: 425px) { + + .blog-index .attribution-list { + padding: 2em; + } + + .blog-index .attribution-list h2 { + width: 50%; + + hyphens: auto; + word-break: break-word; + } + + } + + @media (max-width:400px) { + + body > header .explore-panel .explore-menu ul { + display: flex; + flex-direction: column; + flex-wrap: wrap; + } + + .team-index main article.persons ul { + display: initial; + } +} + +@media (max-width:340px) { + body > header .ancilliary-menu button:before, body > header .ancilliary-menu a:before { + display: none; + } +} diff --git a/assets/static/vocabulary/favicon/android-chrome-192x192.png b/assets/static/vocabulary/favicon/android-chrome-192x192.png new file mode 100644 index 000000000..354133b8a Binary files /dev/null and b/assets/static/vocabulary/favicon/android-chrome-192x192.png differ diff --git a/assets/static/vocabulary/favicon/android-chrome-512x512.png b/assets/static/vocabulary/favicon/android-chrome-512x512.png new file mode 100644 index 000000000..615ce8592 Binary files /dev/null and b/assets/static/vocabulary/favicon/android-chrome-512x512.png differ diff --git a/assets/static/vocabulary/favicon/apple-touch-icon.png b/assets/static/vocabulary/favicon/apple-touch-icon.png new file mode 100644 index 000000000..c626695a5 Binary files /dev/null and b/assets/static/vocabulary/favicon/apple-touch-icon.png differ diff --git a/assets/static/vocabulary/favicon/favicon.ico b/assets/static/vocabulary/favicon/favicon.ico new file mode 100644 index 000000000..e69de29bb diff --git a/assets/static/vocabulary/favicon/favicon.svg b/assets/static/vocabulary/favicon/favicon.svg new file mode 100644 index 000000000..0880e8500 --- /dev/null +++ b/assets/static/vocabulary/favicon/favicon.svg @@ -0,0 +1,14 @@ + + + + + + + + diff --git a/assets/static/vocabulary/favicon/manifest.webmanifest b/assets/static/vocabulary/favicon/manifest.webmanifest new file mode 100644 index 000000000..f31e7bc30 --- /dev/null +++ b/assets/static/vocabulary/favicon/manifest.webmanifest @@ -0,0 +1,6 @@ +{ + "icons": [ + { "src": "/android-chrome-192x192.png", "type": "image/png", "sizes": "192x192" }, + { "src": "/android-chrome-512x512.png", "type": "image/png", "sizes": "512x512" } + ] +} diff --git a/assets/static/vocabulary/fonts/CCAccidenzCommons-medium.otf b/assets/static/vocabulary/fonts/CCAccidenzCommons-medium.otf new file mode 100644 index 000000000..a4409cab2 Binary files /dev/null and b/assets/static/vocabulary/fonts/CCAccidenzCommons-medium.otf differ diff --git a/assets/static/vocabulary/fonts/JetBrainsMono-Bold.otf b/assets/static/vocabulary/fonts/JetBrainsMono-Bold.otf new file mode 100644 index 000000000..5dc6ec245 Binary files /dev/null and b/assets/static/vocabulary/fonts/JetBrainsMono-Bold.otf differ diff --git a/assets/static/vocabulary/fonts/JetBrainsMono-Bold.woff b/assets/static/vocabulary/fonts/JetBrainsMono-Bold.woff new file mode 100644 index 000000000..c8118a879 Binary files /dev/null and b/assets/static/vocabulary/fonts/JetBrainsMono-Bold.woff differ diff --git a/assets/static/vocabulary/fonts/JetBrainsMono-Bold.woff2 b/assets/static/vocabulary/fonts/JetBrainsMono-Bold.woff2 new file mode 100644 index 000000000..d09807617 Binary files /dev/null and b/assets/static/vocabulary/fonts/JetBrainsMono-Bold.woff2 differ diff --git a/assets/static/vocabulary/fonts/JetBrainsMono-Regular.otf b/assets/static/vocabulary/fonts/JetBrainsMono-Regular.otf new file mode 100644 index 000000000..7db854fd9 Binary files /dev/null and b/assets/static/vocabulary/fonts/JetBrainsMono-Regular.otf differ diff --git a/assets/static/vocabulary/fonts/JetBrainsMono-Regular.woff b/assets/static/vocabulary/fonts/JetBrainsMono-Regular.woff new file mode 100644 index 000000000..dc1d85f57 Binary files /dev/null and b/assets/static/vocabulary/fonts/JetBrainsMono-Regular.woff differ diff --git a/assets/static/vocabulary/fonts/JetBrainsMono-Regular.woff2 b/assets/static/vocabulary/fonts/JetBrainsMono-Regular.woff2 new file mode 100644 index 000000000..fdf95dde6 Binary files /dev/null and b/assets/static/vocabulary/fonts/JetBrainsMono-Regular.woff2 differ diff --git a/assets/static/vocabulary/fonts/RobotoCondensed-Bold.otf b/assets/static/vocabulary/fonts/RobotoCondensed-Bold.otf new file mode 100644 index 000000000..dae22094a Binary files /dev/null and b/assets/static/vocabulary/fonts/RobotoCondensed-Bold.otf differ diff --git a/assets/static/vocabulary/fonts/RobotoCondensed-Bold.woff b/assets/static/vocabulary/fonts/RobotoCondensed-Bold.woff new file mode 100644 index 000000000..44a9bac76 Binary files /dev/null and b/assets/static/vocabulary/fonts/RobotoCondensed-Bold.woff differ diff --git a/assets/static/vocabulary/fonts/RobotoCondensed-Bold.woff2 b/assets/static/vocabulary/fonts/RobotoCondensed-Bold.woff2 new file mode 100644 index 000000000..1a32150b5 Binary files /dev/null and b/assets/static/vocabulary/fonts/RobotoCondensed-Bold.woff2 differ diff --git a/assets/static/vocabulary/fonts/RobotoCondensed-Regular.otf b/assets/static/vocabulary/fonts/RobotoCondensed-Regular.otf new file mode 100644 index 000000000..a7fe671e8 Binary files /dev/null and b/assets/static/vocabulary/fonts/RobotoCondensed-Regular.otf differ diff --git a/assets/static/vocabulary/fonts/RobotoCondensed-Regular.woff b/assets/static/vocabulary/fonts/RobotoCondensed-Regular.woff new file mode 100644 index 000000000..90f54ea5f Binary files /dev/null and b/assets/static/vocabulary/fonts/RobotoCondensed-Regular.woff differ diff --git a/assets/static/vocabulary/fonts/RobotoCondensed-Regular.woff2 b/assets/static/vocabulary/fonts/RobotoCondensed-Regular.woff2 new file mode 100644 index 000000000..bcbfde74a Binary files /dev/null and b/assets/static/vocabulary/fonts/RobotoCondensed-Regular.woff2 differ diff --git a/assets/static/vocabulary/fonts/SourceSansPro-Bold.otf b/assets/static/vocabulary/fonts/SourceSansPro-Bold.otf new file mode 100644 index 000000000..d2484df2f Binary files /dev/null and b/assets/static/vocabulary/fonts/SourceSansPro-Bold.otf differ diff --git a/assets/static/vocabulary/fonts/SourceSansPro-Bold.woff b/assets/static/vocabulary/fonts/SourceSansPro-Bold.woff new file mode 100644 index 000000000..f2a7dd342 Binary files /dev/null and b/assets/static/vocabulary/fonts/SourceSansPro-Bold.woff differ diff --git a/assets/static/vocabulary/fonts/SourceSansPro-Bold.woff2 b/assets/static/vocabulary/fonts/SourceSansPro-Bold.woff2 new file mode 100644 index 000000000..ce34a9fec Binary files /dev/null and b/assets/static/vocabulary/fonts/SourceSansPro-Bold.woff2 differ diff --git a/assets/static/vocabulary/fonts/SourceSansPro-Regular.otf b/assets/static/vocabulary/fonts/SourceSansPro-Regular.otf new file mode 100644 index 000000000..96bdc926f Binary files /dev/null and b/assets/static/vocabulary/fonts/SourceSansPro-Regular.otf differ diff --git a/assets/static/vocabulary/fonts/SourceSansPro-Regular.woff b/assets/static/vocabulary/fonts/SourceSansPro-Regular.woff new file mode 100644 index 000000000..5b6e97be7 Binary files /dev/null and b/assets/static/vocabulary/fonts/SourceSansPro-Regular.woff differ diff --git a/assets/static/vocabulary/fonts/SourceSansPro-Regular.woff2 b/assets/static/vocabulary/fonts/SourceSansPro-Regular.woff2 new file mode 100644 index 000000000..36bdc0e32 Binary files /dev/null and b/assets/static/vocabulary/fonts/SourceSansPro-Regular.woff2 differ diff --git a/assets/static/vocabulary/fonts/SourceSansPro-SemiBold.otf b/assets/static/vocabulary/fonts/SourceSansPro-SemiBold.otf new file mode 100644 index 000000000..f4fed15ce Binary files /dev/null and b/assets/static/vocabulary/fonts/SourceSansPro-SemiBold.otf differ diff --git a/assets/static/vocabulary/fonts/SourceSansPro-SemiBold.woff b/assets/static/vocabulary/fonts/SourceSansPro-SemiBold.woff new file mode 100644 index 000000000..0aba561de Binary files /dev/null and b/assets/static/vocabulary/fonts/SourceSansPro-SemiBold.woff differ diff --git a/assets/static/vocabulary/fonts/SourceSansPro-SemiBold.woff2 b/assets/static/vocabulary/fonts/SourceSansPro-SemiBold.woff2 new file mode 100644 index 000000000..cb0ea772f Binary files /dev/null and b/assets/static/vocabulary/fonts/SourceSansPro-SemiBold.woff2 differ diff --git a/assets/static/vocabulary/fonts/VocabularyIcons.json b/assets/static/vocabulary/fonts/VocabularyIcons.json new file mode 100644 index 000000000..8cc251751 --- /dev/null +++ b/assets/static/vocabulary/fonts/VocabularyIcons.json @@ -0,0 +1 @@ +{"metadata":{"name":"Vocabulary-Icons","lastOpened":0,"created":1601649670882},"iconSets":[{"icons":[{"paths":["M577.324 704h-514.648c-35.636 0-53.482-43.086-28.284-68.284l257.324-257.324c15.62-15.62 40.948-15.62 56.568 0l257.324 257.324c25.2 25.198 7.352 68.284-28.284 68.284z"],"attrs":[{}],"width":640,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["caret-up"],"id":1},{"paths":["M384 254.676v514.648c0 35.636-43.086 53.482-68.284 28.284l-257.324-257.324c-15.62-15.62-15.62-40.948 0-56.568l257.324-257.324c25.198-25.2 68.284-7.352 68.284 28.284z"],"attrs":[{}],"width":384,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["caret-left"],"id":2},{"paths":["M481.942 261.048l388.686 388.686c18.746 18.746 18.746 49.138 0 67.882l-45.334 45.334c-18.714 18.714-49.044 18.75-67.802 0.080l-309.492-308.040-309.49 308.042c-18.758 18.67-49.088 18.634-67.802-0.080l-45.334-45.334c-18.746-18.746-18.746-49.138 0-67.882l388.686-388.686c18.744-18.746 49.136-18.746 67.882-0.002z"],"attrs":[{}],"width":896,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["chevron-up"],"defaultCode":59648,"id":3},{"paths":["M570.952 545.942l-388.688 388.686c-18.746 18.746-49.138 18.746-67.882 0l-45.334-45.334c-18.714-18.714-18.75-49.044-0.080-67.802l308.042-309.492-308.042-309.49c-18.67-18.758-18.634-49.088 0.080-67.802l45.334-45.334c18.746-18.746 49.138-18.746 67.882 0l388.686 388.686c18.746 18.744 18.746 49.136 0.002 67.882z"],"attrs":[{}],"width":640,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["chevron-right"],"defaultCode":59649,"id":4},{"paths":["M414.058 762.952l-388.686-388.688c-18.746-18.746-18.746-49.138 0-67.882l45.334-45.334c18.714-18.714 49.044-18.75 67.802-0.080l309.492 308.042 309.49-308.042c18.758-18.67 49.088-18.634 67.802 0.080l45.334 45.334c18.746 18.746 18.746 49.138 0 67.882l-388.684 388.688c-18.746 18.744-49.138 18.744-67.884 0z"],"attrs":[{}],"width":896,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["chevron-down"],"defaultCode":59650,"id":5},{"paths":["M69.040 478.060l388.7-388.68c18.74-18.74 49.14-18.74 67.88 0l45.34 45.34c18.72 18.72 18.74 49.040 0.080 67.8l-308.060 309.48 308.040 309.5c18.68 18.76 18.64 49.080-0.080 67.8l-45.34 45.34c-18.74 18.74-49.14 18.74-67.88 0l-388.68-388.7c-18.74-18.74-18.74-49.14 0-67.88z"],"attrs":[{}],"width":640,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["chevron-left"],"defaultCode":59651,"id":6},{"paths":["M354 319.4l272 272c18.8 18.8 18.8 49.2 0 67.8l-45.2 45.2c-18.8 18.8-49.2 18.8-67.8 0l-193-192.6-192.8 192.8c-18.8 18.8-49.2 18.8-67.8 0l-45.4-45.2c-18.8-18.8-18.8-49.2 0-67.8l272-272c18.8-19 49.2-19 68-0.2z"],"attrs":[{}],"width":640,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["angle-up"],"defaultCode":59652,"id":7},{"paths":["M448.6 546l-272 272c-18.8 18.8-49.2 18.8-67.8 0l-45.2-45.2c-18.8-18.8-18.8-49.2 0-67.8l192.8-192.8-192.8-192.8c-18.8-18.8-18.8-49.2 0-67.8l45-45.6c18.8-18.8 49.2-18.8 67.8 0l272 272c19 18.8 19 49.2 0.2 68z"],"attrs":[{}],"width":512,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["angle-right"],"defaultCode":59653,"id":8},{"paths":["M286 704.6l-272-272c-18.8-18.8-18.8-49.2 0-67.8l45.2-45.2c18.8-18.8 49.2-18.8 67.8 0l192.8 192.8 192.8-192.8c18.8-18.8 49.2-18.8 67.8 0l45.2 45.2c18.8 18.8 18.8 49.2 0 67.8l-272 272c-18.4 18.8-48.8 18.8-67.6 0z"],"attrs":[{}],"width":640,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["angle-down"],"defaultCode":59654,"id":9},{"paths":["M63.4 478l272-272c18.8-18.8 49.2-18.8 67.8 0l45.2 45.2c18.8 18.8 18.8 49.2 0 67.8l-192.6 193 192.8 192.8c18.8 18.8 18.8 49.2 0 67.8l-45.2 45.4c-18.8 18.8-49.2 18.8-67.8 0l-272-272c-19-18.8-19-49.2-0.2-68z"],"attrs":[{}],"width":512,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["angle-left"],"defaultCode":59655,"id":10},{"paths":["M0 769.324v-514.648c0-35.636 43.086-53.482 68.284-28.284l257.324 257.324c15.62 15.62 15.62 40.948 0 56.568l-257.324 257.324c-25.198 25.2-68.284 7.352-68.284-28.284z"],"attrs":[{}],"width":384,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["caret-right"],"defaultCode":59656,"id":11},{"paths":["M62.6 384h514.6c35.6 0 53.4 43 28.2 68.2l-257.2 257.4c-15.6 15.6-41 15.6-56.6 0l-257.2-257.4c-25.2-25.2-7.4-68.2 28.2-68.2z"],"attrs":[{}],"width":640,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["caret-down"],"defaultCode":59657,"id":12},{"paths":["M1004.599 381.6c7.803-6.202 19.401-0.399 19.401 9.4v408.999c0 52.999-43.001 96-96 96h-832c-53 0-96-43.001-96-96v-408.801c0-9.998 11.4-15.599 19.4-9.4 44.8 34.802 104.2 79.002 308.2 227.202 42.2 30.799 113.399 95.601 184.4 95.201 71.4 0.597 144.002-65.601 184.6-95.201 204.001-148.2 263.199-192.601 307.999-227.4zM512 640c46.401 0.799 113.2-58.399 146.801-82.801 265.4-192.601 285.6-209.398 346.798-257.399 11.602-9 18.401-23 18.401-37.8v-38c0-53-43.001-96-96-96h-832c-53 0-96 43-96 96v38c0 14.8 6.8 28.6 18.4 37.8 61.2 47.8 81.4 64.799 346.799 257.399 33.601 24.402 100.4 83.599 146.801 82.801z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["envelope"],"id":13},{"paths":["M914.285 0h-804.571c-60.595 0-109.714 49.12-109.714 109.714v804.571c0 60.593 49.12 109.715 109.714 109.715h804.571c60.593 0 109.715-49.121 109.715-109.715v-804.571c0-60.595-49.121-109.714-109.715-109.714zM256 877.715c-60.594 0-109.714-49.121-109.714-109.715s49.12-109.715 109.714-109.715c60.594 0 109.715 49.121 109.715 109.715s-49.121 109.715-109.715 109.715zM616.076 877.715h-78.479c-13.742 0-25.262-10.598-26.153-24.306-11.919-182.972-158.269-328.96-340.854-340.852-13.708-0.891-24.304-12.414-24.304-26.153v-78.479c0-14.937 12.499-26.918 27.415-26.115 252.676 13.657 454.851 216.084 468.491 468.49 0.802 14.916-11.179 27.416-26.115 27.416zM851.565 877.715h-78.476c-14.083 0-25.545-11.158-26.119-25.231-12.797-312.078-263.325-562.653-575.453-575.45-14.073-0.579-25.232-12.039-25.232-26.121v-78.478c0-14.752 12.201-26.661 26.942-26.13 383.61 13.771 690.766 322.722 704.467 704.469 0.532 14.739-11.377 26.941-26.129 26.941z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["rss square"],"id":14},{"paths":["M347.796 878.808l-332.8-332.8c-19.994-19.994-19.994-52.412 0-72.408l72.406-72.408c19.994-19.996 52.414-19.996 72.408 0l224.19 224.188 480.19-480.188c19.994-19.994 52.414-19.994 72.408 0l72.406 72.408c19.994 19.994 19.994 52.412 0 72.408l-588.8 588.802c-19.996 19.994-52.414 19.994-72.408-0.002z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["check"],"defaultCode":59659,"id":15},{"paths":["M485.44 512l200.14-200.14c24.56-24.56 24.56-64.38 0-88.96l-44.48-44.48c-24.56-24.56-64.38-24.56-88.96 0l-200.14 200.14-200.14-200.14c-24.56-24.56-64.38-24.56-88.96 0l-44.48 44.48c-24.56 24.56-24.56 64.38 0 88.96l200.14 200.14-200.14 200.14c-24.56 24.56-24.56 64.38 0 88.96l44.48 44.48c24.56 24.56 64.4 24.56 88.96 0l200.14-200.14 200.14 200.14c24.56 24.56 64.4 24.56 88.96 0l44.48-44.48c24.56-24.56 24.56-64.38 0-88.96l-200.14-200.14z"],"attrs":[{}],"width":704,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["times"],"defaultCode":59660,"id":16},{"paths":["M832 416h-288v-288c0-35.34-28.66-64-64-64h-64c-35.34 0-64 28.66-64 64v288h-288c-35.34 0-64 28.66-64 64v64c0 35.34 28.66 64 64 64h288v288c0 35.34 28.66 64 64 64h64c35.34 0 64-28.66 64-64v-288h288c35.34 0 64-28.66 64-64v-64c0-35.34-28.66-64-64-64z"],"attrs":[{}],"width":896,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["plus"],"id":17},{"paths":["M832 416h-768c-35.34 0-64 28.66-64 64v64c0 35.34 28.66 64 64 64h768c35.34 0 64-28.66 64-64v-64c0-35.34-28.66-64-64-64z"],"attrs":[{}],"width":896,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["minus"],"id":18},{"paths":["M512 16c-274 0-496 222-496 496s222 496 496 496 496-222 496-496-222-496-496-496z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["circle"],"defaultCode":59661,"id":19},{"paths":["M512 16c-274 0-496 222-496 496s222 496 496 496 496-222 496-496-222-496-496-496zM512 912c-221 0-400-179-400-400s179-400 400-400 400 179 400 400-179 400-400 400z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["circle"],"defaultCode":59662,"id":20},{"paths":["M673 320c-29-178.6-97.4-304-177-304s-148 125.4-177 304h354zM304 512c0 44.4 2.4 87 6.6 128h370.6c4.2-41 6.6-83.6 6.6-128s-2.4-87-6.6-128h-370.6c-4.2 41-6.6 83.6-6.6 128zM953.4 320c-57.2-135.8-173-240.8-316-283.2 48.8 67.6 82.4 169.4 100 283.2h216zM354.4 36.8c-142.8 42.4-258.8 147.4-315.8 283.2h216c17.4-113.8 51-215.6 99.8-283.2zM974.8 384h-229.4c4.2 42 6.6 85 6.6 128s-2.4 86-6.6 128h229.2c11-41 17.2-83.6 17.2-128s-6.2-87-17-128zM240 512c0-43 2.4-86 6.6-128h-229.4c-10.8 41-17.2 83.6-17.2 128s6.4 87 17.2 128h229.2c-4-42-6.4-85-6.4-128zM319 704c29 178.6 97.4 304 177 304s148-125.4 177-304h-354zM637.6 987.2c142.8-42.4 258.8-147.4 316-283.2h-216c-17.6 113.8-51.2 215.6-100 283.2zM38.6 704c57.2 135.8 173 240.8 316 283.2-48.8-67.6-82.4-169.4-100-283.2h-216z"],"attrs":[{}],"width":992,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["globe"],"defaultCode":59663,"id":21},{"paths":["M512 16c-273.914 0-496 222.166-496 496 0 273.994 222.086 496 496 496s496-222.006 496-496c0-273.834-222.086-496-496-496zM512 236c46.392 0 84 37.608 84 84s-37.608 84-84 84-84-37.608-84-84 37.608-84 84-84zM624 744c0 13.254-10.746 24-24 24h-176c-13.254 0-24-10.746-24-24v-48c0-13.254 10.746-24 24-24h24v-128h-24c-13.254 0-24-10.746-24-24v-48c0-13.254 10.746-24 24-24h128c13.254 0 24 10.746 24 24v200h24c13.254 0 24 10.746 24 24v48z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["info-circle"],"defaultCode":59664,"id":22},{"paths":["M864 640h-64c-17.673 0-32 14.327-32 32v0 224h-640v-640h288c17.673 0 32-14.327 32-32v0-64c0-17.673-14.327-32-32-32v0h-320c-53.019 0-96 42.981-96 96v0 704c0 53.019 42.981 96 96 96v0h704c53.019 0 96-42.981 96-96v0-256c0-17.673-14.327-32-32-32v0zM976 0h-256c-42.74 0-64.1 51.82-34 82l71.46 71.46-487.46 487.28c-8.721 8.692-14.118 20.716-14.118 34s5.396 25.308 14.116 33.999l0.001 0.001 45.34 45.26c8.692 8.721 20.716 14.118 34 14.118s25.308-5.396 33.999-14.116l0.001-0.001 487.22-487.36 71.44 71.36c30 30 82 9 82-34v-256c0-26.51-21.49-48-48-48v0z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["external-link-alt"],"defaultCode":59665,"id":23},{"paths":["M1010 885.4l-199.4-199.4c-9-9-21.2-14-34-14h-32.6c55.2-70.6 88-159.4 88-256 0-229.8-186.2-416-416-416s-416 186.2-416 416 186.2 416 416 416c96.6 0 185.4-32.8 256-88v32.6c0 12.8 5 25 14 34l199.4 199.4c18.8 18.8 49.2 18.8 67.8 0l56.6-56.6c18.8-18.8 18.8-49.2 0.2-68zM416 672c-141.4 0-256-114.4-256-256 0-141.4 114.4-256 256-256 141.4 0 256 114.4 256 256 0 141.4-114.4 256-256 256z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["search"],"defaultCode":59666,"id":24},{"paths":["M82 576h476c42.8 0 64.2 51.8 34 82l-238 238c-18.8 18.8-49.2 18.8-67.8 0l-238.2-238c-30.2-30.2-8.8-82 34-82zM592 366l-238-238c-18.8-18.8-49.2-18.8-67.8 0l-238.2 238c-30.2 30.2-8.8 82 34 82h476c42.8 0 64.2-51.8 34-82z"],"attrs":[{}],"width":640,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["sort"],"defaultCode":59658,"id":25},{"paths":["M975.952 0h-927.896c-42.636 0-64.15 51.732-33.94 81.942l369.884 369.94v412.118c0 15.662 7.642 30.34 20.474 39.324l160 111.96c31.566 22.096 75.526-0.298 75.526-39.324v-524.078l369.894-369.94c30.148-30.15 8.782-81.942-33.942-81.942z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["filter"],"id":26},{"paths":["M992 768h-672v-32c0-17.6-14.4-32-32-32h-64c-17.6 0-32 14.4-32 32v32h-160c-17.6 0-32 14.4-32 32v64c0 17.6 14.4 32 32 32h160v32c0 17.6 14.4 32 32 32h64c17.6 0 32-14.4 32-32v-32h672c17.6 0 32-14.4 32-32v-64c0-17.6-14.4-32-32-32zM992 448h-160v-32c0-17.6-14.4-32-32-32h-64c-17.6 0-32 14.4-32 32v32h-672c-17.6 0-32 14.4-32 32v64c0 17.6 14.4 32 32 32h672v32c0 17.6 14.4 32 32 32h64c17.6 0 32-14.4 32-32v-32h160c17.6 0 32-14.4 32-32v-64c0-17.6-14.4-32-32-32zM992 128h-416v-32c0-17.6-14.4-32-32-32h-64c-17.6 0-32 14.4-32 32v32h-416c-17.6 0-32 14.4-32 32v64c0 17.6 14.4 32 32 32h416v32c0 17.6 14.4 32 32 32h64c17.6 0 32-14.4 32-32v-32h416c17.6 0 32-14.4 32-32v-64c0-17.6-14.4-32-32-32z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["sliders-h"],"defaultCode":59667,"id":27},{"paths":["M32 264h832c17.674 0 32-14.326 32-32v-80c0-17.674-14.326-32-32-32h-832c-17.674 0-32 14.326-32 32v80c0 17.674 14.326 32 32 32zM32 584h832c17.674 0 32-14.326 32-32v-80c0-17.674-14.326-32-32-32h-832c-17.674 0-32 14.326-32 32v80c0 17.674 14.326 32 32 32zM32 904h832c17.674 0 32-14.326 32-32v-80c0-17.674-14.326-32-32-32h-832c-17.674 0-32 14.326-32 32v80c0 17.674 14.326 32 32 32z"],"attrs":[{}],"width":896,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["bars-solid"],"id":28},{"paths":["M699.13 197.566c-107.174 0-195.688-69.566-330.434-69.566-49.91 0-94.618 8.768-136.090 24.026 4.683-11.873 7.398-25.625 7.398-40.011 0-2.502-0.082-4.986-0.244-7.447l0.018 0.335c-3.544-56.872-50.166-102.49-107.102-104.806-63.986-2.604-116.676 48.496-116.676 111.904 0 38.052 18.994 71.65 48 91.89v772.11c0 26.51 21.49 48 48 48h32c26.51 0 48-21.49 48-48v-188.8c56.622-24.128 127.164-44.244 228.87-44.244 107.176 0 195.688 69.566 330.434 69.566 96.338 0 173.334-32.588 245.010-81.716 17.366-11.902 27.686-31.664 27.686-52.716v-486.2c0-46.786-48.538-77.74-90.97-58.032-68.676 31.896-152.908 63.708-233.9 63.708z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["flag"],"id":29},{"paths":["M1008 512c0 273.994-222.086 496-496 496s-496-222.006-496-496c0-273.834 222.086-496 496-496s496 222.166 496 496zM512 612c-50.81 0-92 41.19-92 92s41.19 92 92 92 92-41.19 92-92-41.19-92-92-92zM424.654 281.308l14.836 272c0.694 12.728 11.218 22.692 23.964 22.692h97.092c12.746 0 23.27-9.964 23.964-22.692l14.836-272c0.75-13.748-10.196-25.308-23.964-25.308h-126.766c-13.768 0-24.712 11.56-23.962 25.308z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["exclamation-circle"],"id":30},{"paths":["M1008 512c0 273.994-222.086 496-496 496s-496-222.006-496-496c0-273.834 222.086-496 496-496s496 222.166 496 496zM525.31 180c-108.994 0-178.51 45.914-233.098 127.516-7.072 10.572-4.706 24.83 5.43 32.516l69.398 52.62c10.41 7.894 25.242 6.016 33.33-4.244 35.728-45.316 60.226-71.594 114.606-71.594 40.858 0 91.396 26.296 91.396 65.916 0 29.952-24.726 45.334-65.068 67.952-47.048 26.374-109.304 59.2-109.304 141.318v8c0 13.254 10.746 24 24 24h112c13.254 0 24-10.746 24-24v-2.666c0-56.924 166.372-59.294 166.372-213.334 0-116.004-120.33-204-233.062-204zM512 676c-50.73 0-92 41.27-92 92 0 50.728 41.27 92 92 92s92-41.272 92-92c0-50.73-41.27-92-92-92z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["question-circle"],"id":31},{"paths":["M16 512c0 273.932 222.066 496 496 496s496-222.068 496-496-222.068-496-496-496-496 222.066-496 496zM512 880v-736c203.41 0 368 164.622 368 368 0 203.41-164.622 368-368 368z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["adjust"],"id":32},{"paths":["M672 0h-576c-53.020 0-96 42.98-96 96v928l384-224 384 224v-928c0-53.020-42.98-96-96-96zM672 856.86l-288-168-288 168v-748.86c0-6.627 5.373-12 12-12v0h552c6.628 0 12 5.366 12 11.992v748.868z"],"attrs":[{}],"width":768,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["bookmark"],"id":33},{"paths":["M0 1024v-928c0-53.020 42.98-96 96-96h576c53.020 0 96 42.98 96 96v928l-384-224-384 224z"],"attrs":[{}],"width":768,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["bookmark-solid"],"id":34},{"id":64,"paths":["M990.643 97.571c-117.427-100.071-292.070-82.071-399.857 29.143l-42.214 43.5-42.211-43.5c-107.575-111.214-282.431-129.214-399.859-29.143-134.572 114.857-141.643 321-21.214 445.5l414.644 428.142c26.785 27.644 70.283 27.644 97.072 0l414.643-428.142c120.642-124.5 113.569-330.643-21.003-445.5z"],"attrs":[{}],"width":1097,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["heart"]},{"paths":["M491.66 429.74l-66.44 34.56c-18.86-39.16-50.48-39.86-54.92-39.86-44.26 0-66.44 29.22-66.44 87.68 0 47.14 18.42 87.68 66.44 87.68 28.94 0 49.3-14.18 61.14-42.52l61.1 31c-12.34 23.020-51.38 77.96-130.2 77.96-45.2 0-147.92-20.64-147.92-154.1 0-117.38 86-154.12 145.26-154.12 61.44-0.020 105.4 23.9 131.98 71.72zM777.76 429.74l-65.56 34.56c-19-39.54-51.44-39.86-55.8-39.86-44.28 0-66.44 29.22-66.44 87.68 0 47.1 18.46 87.68 66.44 87.68 28.9 0 49.3-14.18 61.080-42.52l62 31c-4.2 7.5-42.78 77.96-130.18 77.96-45.38 0-147.92-19.74-147.92-154.1 0-117.34 85.94-154.12 145.26-154.12 61.42-0.020 105.16 23.9 131.12 71.72zM495.12 16.1c-285.64 0-495.12 230.12-495.12 496 0 276.98 227.2 496 495.12 496 259.86 0 496.88-201.74 496.88-496 0-275.74-213.24-496-496.88-496zM496.86 917.72c-225.080 0-407.4-186.080-407.4-405.62 0-210.84 170.86-406.54 407.44-406.54 225.060 0 405.64 178.92 405.64 406.52-0.020 243.38-199.36 405.64-405.68 405.64z"],"attrs":[{}],"width":992,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["creative-commons"],"defaultCode":60416,"id":35},{"paths":["M629.8 388.8v202.8h-56.6v241h-154.2v-240.8h-56.6v-203c0-8.8 3.2-16.4 9.2-22.6 6.2-6.2 13.8-9.4 22.6-9.4h203.8c8.2 0 15.6 3.2 22.2 9.4 6.2 6.4 9.6 13.8 9.6 22.6zM426.8 261.4c0-46.6 23-70 69-70s69 23.4 69 70c0 46-23 69-69 69s-69-23-69-69zM495.2 16c283.6 0 496.8 220.2 496.8 496 0 294.2-237 496-496.8 496-268 0-495.2-219-495.2-496 0-265.8 209.4-496 495.2-496zM496.8 105.4c-236.4 0-407.4 195.8-407.4 406.6 0 219.6 182.4 405.6 407.4 405.6 206.4 0 405.6-162.2 405.6-405.6 0.2-227.6-180.4-406.6-405.6-406.6z"],"attrs":[{}],"width":992,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["creative-commons-by"],"defaultCode":60417,"id":36},{"paths":["M495.2 16c279.6 0 496.8 215.8 496.8 496 0 294.4-237 496-496.8 496-269 0-495.2-221.6-495.2-496 0-265.8 209.4-496 495.2-496zM111.6 378.2c-14.8 40.8-22.2 85.4-22.2 133.8 0 221.8 184.2 404.8 407.4 404.8 244.8 0 354.4-203.6 357-208.2l-186.8-83.2c-15.4 74.2-82.4 106-136.4 110.8v76.2h-57.6v-76.4c-55-0.6-105.2-20.4-150.6-59.4l68.2-69c63.4 58.8 172.8 63.6 172.8-4.4 0-12.4-4.4-22.4-13.2-30.2-28.4-12-3.6-0.2-438.6-194.8zM496.8 104.6c-76.8 0-224.8 17.4-341 186l189.6 85c20-62.6 80.8-85.8 127.6-88.6v-76.2h57.6v76.2c45.4 2.4 86.8 17.8 124 46l-64.6 66.4c-85.4-59.8-167-16-140 22.2 106.8 48.2 87.6 39.6 186 83.2l254.2 113.4c8.2-34.8 12.4-70.2 12.4-106.2 0-114-39.6-210-118.6-287.8-78.6-79.8-174.4-119.6-287.2-119.6z"],"attrs":[{}],"width":992,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["creative-commons-nc"],"defaultCode":60418,"id":37},{"paths":["M495.4 16c-288.2 0-495.4 233.6-495.4 496 0 272.6 223.4 496 495.4 496 260.4 0 496.6-201.8 496.6-496 0-278-215.2-496-496.6-496zM496.6 917.4c-224 0-407.2-185-407.2-405.4 0-46.4 7.4-90.4 21.8-132l131.4 58.2h-9.4v59h46.6c0 12.4-0.8 6.4-0.8 39h-45.6v59h54c22.8 134 134.4 202.6 249.2 202.6 53.2 0 101.2-15.8 129.6-31.6l-20-92.2c-17.4 9.2-56.4 21.6-94.6 21.6-56.4 0-116.2-21.8-134.6-100.4h180.6l256.6 113.6c-3 4.2-112.4 208.6-357.6 208.6zM463.2 536.2l-1-0.8 1.8 0.8h-0.8zM617.6 497.2h7.4v-59h-140.6l-57.2-25.2c5-11 10.8-21 17.6-28.6 25.8-31.6 62.2-44.8 102.2-44.8 36.6 0 70.6 10.8 92.2 20l23.2-94.6c-30-13.2-74-24.8-124.6-24.8-78 0-144.4 31.6-191.8 84.6-10.6 12.2-19.6 25.8-27.8 40.2l-163.2-72.2c129.2-193.6 315.4-187.2 341.4-187.2 226 0 406 180.4 406 406.8 0 37.4-4.2 72.6-12.6 105.8l-272.2-121z"],"attrs":[{}],"width":992,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["creative-commons-nc-eu"],"defaultCode":60419,"id":38},{"paths":["M495.4 16c-288.2 0-495.4 233.6-495.4 496 0 272.8 223.6 496 495.4 496 260.4 0 496.6-201.6 496.6-496 0-277.6-215-496-496.6-496zM496.6 917.4c-224 0-407.2-185-407.2-405.4 0-42.2 6-82.4 18-120.6l254 113h-55.8v77.2h116.2l11.4 23.6v37.4h-127.6v77.4h127.6v112h123.4v-112h128.4v-71.4l162 72.2c-3 4.4-114.2 196.6-350.4 196.6zM671.8 642.8h-115.2v-37.4l5.8-11.2 109.4 48.6zM684.8 540v-35.6h-77.2l126-232h-131.6l-86.8 192-46-20.4-79.2-171.4h-131.6l54.6 102-163.8-73c55.6-88.2 165.2-196.2 347.4-196.2 225.6 0 406 180 406 406.8 0 42-5.4 81.2-15.8 118l-202-90.2z"],"attrs":[{}],"width":992,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["creative-commons-nc-jp"],"defaultCode":60420,"id":39},{"paths":["M495.2 16c283.6 0 496.8 220.2 496.8 496 0 294.2-237 496-496.8 496-268 0-495.2-219-495.2-496 0-265.8 209.4-496 495.2-496zM496.8 105.4c-236.4 0-407.4 195.8-407.4 406.6 0 219.6 182.4 405.6 407.4 405.6 206.4 0 405.6-162.2 405.6-405.6 0.2-227.6-180.4-406.6-405.6-406.6zM684.8 394v85h-360.6v-85h360.6zM684.8 553.6v85h-360.6v-85h360.6z"],"attrs":[{}],"width":992,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["creative-commons-nd"],"defaultCode":60421,"id":40},{"paths":["M495.2 16c283.6 0 496.8 220.2 496.8 496 0 294.2-237 496-496.8 496-268 0-495.2-219-495.2-496 0-265.8 209.4-496 495.2-496zM496.8 105.4c-236.4 0-407.4 195.8-407.4 406.6 0 219.6 182.4 405.6 407.4 405.6 206.4 0 405.6-162.2 405.6-405.6 0.2-227.6-180.4-406.6-405.6-406.6zM275.4 442c26-167.8 161-191.4 217.8-191.4 199.6 0 255 165 255 268.4 0 127.2-82 265.8-257.8 265.8-77.8 0-198.2-40-218.8-194h125c3 60.2 39.2 90.4 109 90.4 46.6 0 116-36.4 116-165.6 0-165-98.2-161.2-113.4-161.2-66.2 0-103.4 29.2-111.6 87.6h36.4l-98.4 98.4-98-98.4h38.8z"],"attrs":[{}],"width":992,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["creative-commons-sa"],"defaultCode":60422,"id":41},{"paths":["M495.2 16c283.6 0 496.8 220.2 496.8 496 0 294.2-237 496-496.8 496-268 0-495.2-219-495.2-496 0-265.8 209.4-496 495.2-496zM496.8 105.4c-236.4 0-407.4 195.8-407.4 406.6 0 219.6 182.4 405.6 407.4 405.6 206.4 0 405.6-162.2 405.6-405.6 0.2-227.6-180.4-406.6-405.6-406.6zM820.2 520.8l9.8 4.4v140c-14.4 7.2-126.8 55-134.6 57.6-13-3.6-227.4-93.6-274.6-112.4l-128.4 53.2-126.6-55v-127.6l118.6-49.6c-1.4-1.4-0.8 10-0.8-140.8l134.6-59.4 303.8 125.8v123.2l98.2 40.6zM679.4 683.8v-87.6h-0.8v-3.6l-227.6-93v90.4l227.6 93.8v-0.8l0.8 0.8zM694.4 568.6l79.8-32.8-73.6-31-78 32.8 71.8 31zM799 644.8v-86l-88.6 37.2v86.8l88.6-38z"],"attrs":[{}],"width":992,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["creative-commons-remix"],"defaultCode":60423,"id":42},{"paths":["M495.2 16c283.6 0 496.8 220.2 496.8 496 0 294.2-237 496-496.8 496-268 0-495.2-219-495.2-496 0-265.8 209.4-496 495.2-496zM496.8 105.4c-236.4 0-407.4 195.8-407.4 406.6 0 219.6 182.4 405.6 407.4 405.6 206.4 0 405.6-162.2 405.6-405.6 0.2-227.6-180.4-406.6-405.6-406.6zM710.8 516.6c-9.4 0-18 5.6-21.4 14.4l-8 19-22-185.6c-3.4-27.8-44-26.8-46.2 0.8l-8.6 102.8-10.4-137.6c-2.2-28.6-44.2-28.4-46.4 0l-7 89.8-11.8-188.6c-1.8-29-44.6-28.8-46.4 0l-10.2 167.4-8.6-132.6c-1.8-28.8-44.4-28.8-46.4 0l-10.6 160.4-8.2-114c-2.2-28.6-44-28.6-46.4-0.4l-15.4 179.6-3.6-24.4c-3.4-22.8-34.2-27.2-44-6.6l-26.4 55.4h-87.8v46.4h102.6c8.8 0 16.8-5 20.8-12.8l21.4 146.2c4 27 43.8 26 46.2-1.4l7.6-87.2 11.4 156.6c2.2 28.8 44.6 28.4 46.4-0.2l9.2-140.8 9.6 146.6c1.8 28.8 44.6 28.8 46.4-0.2l9.8-161 9 143.6c1.8 28.6 44.2 29 46.4 0.4l9.2-117.2 9.8 128.8c2.2 28.6 44 28.4 46.2 0.2l13.6-166 5.4 44.6c2.8 23.6 35.4 28.2 44.6 6.2l36-86.8h101v-46.4l-116.8 0.6zM554.8 527h-43.8v43.8c0 8.2-6.6 15-15 15-8.2 0-15-6.6-15-15v-43.8h-43.8c-8.2 0-15-6.6-15-15 0-8.2 6.8-15 15-15h43.8v-43.8c0-8.2 6.8-15 15-15s15 6.6 15 15v43.8h43.8c8.2 0 15 6.6 15 15 0 8.2-6.8 15-15 15z"],"attrs":[{}],"width":992,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["creative-commons-sampling-plus"],"defaultCode":60424,"id":43},{"paths":["M495.2 16c283.6 0 496.8 220.2 496.8 496 0 294.2-237 496-496.8 496-268 0-495.2-219-495.2-496 0-265.8 209.4-496 495.2-496zM496.8 105.4c-236.4 0-407.4 195.8-407.4 406.6 0 219.6 182.4 405.6 407.4 405.6 206.4 0 405.6-162.2 405.6-405.6 0.2-227.6-180.4-406.6-405.6-406.6zM504 211.8c5.6-0.6 23 2 23 23l13.2 214.4 9.8-118.6c0-12 9.4-21.2 21.2-21.2s21.2 9.4 21.2 21.2c0 5-1-11.4 11.4 163l11.6-128.4c0.6-5.8 5.8-18.6 20.4-18.6 7.6 0 19.8 4.6 21.2 17.8l23 193 10.6-25.6c3.6-8.8 10.4-13.2 20.4-13.2h116v42.6h-101.8l-36.4 88.6c-7.8 19.8-39 18.2-41.6-6.2l-8-63.8-15 185.2c-0.6 6-6 18.6-20.4 18.6-6 0-19.6-4.2-21.2-18.6 0-3.8 1.2 11.6-12.4-155.8l-10.6 144.4c-2.2 9.6-9.6 18.6-21.2 18.6-5.8 0-19.6-4-21.2-18.6 0-3.8 1 13.4-11.6-175.4l-11.6 189.6c0 12.6-7.2 24.8-21.2 24.8-10.4 0-21.2-8.2-21.2-24l-11.6-175.4c-11.6 185-10.6 168-10.6 171.8-2.2 9.6-9.6 18.6-21.2 18.6-6 0-19.6-4.2-21.2-18.6 0-1.4-0.8-2.2-0.8-5.2l-12.4-177.2-9.8 113.4c-1.4 13-13.4 18.6-21.2 18.6-11.6 0-19.2-8.2-21.2-17.8l-22.2-152.8c-4 8-7 16.8-22.2 16.8h-102.8v-42.6h89.6l27.4-55.8c8.8-19.8 36.4-14.4 39.8 5.4l6.2 40.8 16.8-195.8c0-12 9.6-21.2 21.2-21.2 1 0 21.2-0.4 21.2 24.8l9.8 138.2 13.2-185.2c0-20.2 19-21.2 20.4-21.2 1.2 0 21.2 1.4 21.2 21.2l10.6 161.2 12.4-195.8c0.2-2.2-1.2-20.6 19.8-23z"],"attrs":[{}],"width":992,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["creative-commons-sampling"],"defaultCode":60425,"id":44},{"paths":["M495.2 16c283.6 0 496.8 220.2 496.8 496 0 294.2-237 496-496.8 496-268 0-495.2-219-495.2-496 0-265.8 209.4-496 495.2-496zM496.8 105.4c-236.4 0-407.4 195.8-407.4 406.6 0 219.6 182.4 405.6 407.4 405.6 206.4 0 405.6-162.2 405.6-405.6 0.2-227.6-180.4-406.6-405.6-406.6zM698.8 370.2c15.6 0 27.4 12.2 27.4 27.4v365c0 15.4-12.2 27.4-27.4 27.4h-270.2c-15.4 0-27.4-12-27.4-27.4v-108h-108c-15.6 0-27.4-12-27.4-27.4v-365c0-16.4 13.2-25.4 24.8-27.4h272.8c15.4 0 27.4 12 27.4 27.4v108h108zM319.8 600.6h81.4v-202.8c0-14.8 11.6-25.2 24-27.4h111.6v-80.6h-217v310.8zM672.2 424.4h-217v310.8h217v-310.8z"],"attrs":[{}],"width":992,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["creative-commons-share"],"defaultCode":60426,"id":45},{"paths":["M495.2 16c283.6 0 496.8 220.2 496.8 496 0 294.2-237 496-496.8 496-268 0-495.2-219-495.2-496 0-265.8 209.4-496 495.2-496zM496.8 105.4c-236.4 0-407.4 195.8-407.4 406.6 0 219.6 182.4 405.6 407.4 405.6 206.4 0 405.6-162.2 405.6-405.6 0.2-227.6-180.4-406.6-405.6-406.6zM496 226.4c-163.8 0-205 154.6-205 285.6s41.2 285.6 205 285.6 205-154.6 205-285.6c0-131-41.2-285.6-205-285.6zM496 334.2c6.6 0 12.8 1 18.4 2.4 11.8 10.2 17.6 24.2 6.2 43.8l-109 200.4c-3.4-25.4-3.8-50.2-3.8-68.8 0-57.6 4-177.8 88.2-177.8zM577.6 426.6c5.8 30.8 6.6 62.8 6.6 85.4 0 57.8-4 177.8-88.2 177.8-27 0-65.2-15.4-40.2-52.8l121.8-210.4z"],"attrs":[{}],"width":992,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["creative-commons-zero"],"defaultCode":60427,"id":46},{"paths":["M496 16c-274 0-496 222.2-496 496 0 274 222 496 496 496s496-222 496-496c0-273.8-222-496-496-496zM496 915c-278.4 0-471.6-276-380.4-535.8l157.6 70.2c-4.2 21-6.6 43-6.6 65.8 0 198 147.8 253.8 240.8 253.8 45.8 0 107-13.4 158.8-59l-72.2-87.8c-11 12.6-35.2 33.4-72.6 33.4-75.6 0-107.4-79.8-107.8-143.8 460.8 205.2 433 193 435.8 193.6-68.6 124.8-201.2 209.6-353.4 209.6zM884.4 615l-448-200c37.6-68 109.8-61.4 149.4-22l80.8-83.2c-54.2-46.6-116-55-156.2-55-94.8 0-161.8 41-201.4 103.2l-149.8-66.8c72.2-109.8 196.2-182.4 337-182.4 222.2 0 403 180.8 403 403 0 36-4.8 70.8-13.6 104-0.6-0.2-0.8-0.4-1.2-0.8z"],"attrs":[{}],"width":992,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["creative-commons-pd"],"defaultCode":60428,"id":47},{"paths":["M495.2 16c-285.8 0-495.2 230.2-495.2 496 0 277 227.2 496 495.2 496 259.8 0 496.8-201.8 496.8-496 0-275.8-213.2-496-496.8-496zM496.8 917.6c-225 0-407.4-186-407.4-405.6 0-210.8 171-406.6 407.4-406.6 225.2 0 405.8 179 405.6 406.6 0 243.4-199.2 405.6-405.6 405.6zM633.4 372h-106.4v274.4h106.4c42.8 0 140-10.2 140-137.2 0-126.8-97.2-137.2-140-137.2zM635 589h-39.8v-159.4l38.8-0.2c7.6 0 70-4.2 70 79.8 0 49.2-21 79.8-69 79.8zM407.4 372h-136.4v274.6h69.2v-88.6h54c108.2 0 114.2-75 114.2-93 0-62-33.6-93-101-93zM397.6 506.6h-58.4v-83.2h56.6c61.8 0 57.6 83.2 1.8 83.2z"],"attrs":[{}],"width":992,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["creative-commons-pd-alt"],"defaultCode":60429,"id":48},{"paths":["M570.286 196.883c72.368-78.239 156.894-113.802 254.764-99.577 101.016 14.225 187.023 85.351 217.6 183.505 23.529 75.394 13.762 159.323-17.746 234.716-49.004 119.492-193.814 288.772-456.014 406.842-262.2-118.069-407.010-287.35-456.014-406.842-31.508-75.394-41.275-159.323-17.746-234.716 30.577-98.154 116.584-169.28 217.6-183.505 97.873-14.225 182.402 21.338 254.771 99.577 0.142 0 1.388 1.423 1.388 1.423 0.001 0 1.274-1.423 1.397-1.423zM568.889 85.926c-158.065-124.044-405.805-91.753-519.725 95.309-37.824 61.168-52.031 133.717-48.692 204.843 5.791 123.759 59.296 231.871 137.886 325.758 105.825 126.605 258.817 224.759 427.185 298.73 0.228 0 2.179 1.423 3.346 1.423 1.024 0 2.816-1.423 3.367-1.423 167.502-73.971 321.345-172.125 427.164-298.73 78.596-93.886 132.095-201.998 137.886-325.758 3.339-71.126-10.867-143.675-48.693-204.843-113.92-187.062-361.659-219.353-519.725-95.309z","M564.848 543.192l-71.959-35.563c-25.012 36.986-43.21 61.168-95.775 46.943-41.261-11.38-53.474-56.901-55.042-93.887-2.142-52.633 15.973-112.379 77.86-109.534 39.546 2.845 56.396 25.605 65.401 46.943l78.569-39.831c-38.701-73.971-129.396-99.577-206.275-78.239-81.805 21.338-123.239 96.732-121.786 177.815 1.485 82.506 41.307 155.055 126.85 173.548 41.71 8.535 87.125 7.113 125.749-12.803 29.891-14.225 63.1-44.098 76.407-75.394zM904.057 543.192l-71.959-35.563c-25.012 36.986-43.21 61.168-95.775 46.943-41.261-11.38-53.474-56.901-55.042-93.887-2.142-52.633 15.973-112.379 77.861-109.534 39.546 2.845 56.395 25.605 65.4 46.943l78.569-39.831c-38.701-73.971-129.396-99.577-206.274-78.239-81.805 21.338-123.239 96.732-121.787 177.815 1.485 82.506 41.308 155.055 126.851 173.548 41.709 8.535 87.125 7.113 125.749-12.803 29.891-14.225 63.101-44.098 76.407-75.394z"],"attrs":[{},{}],"width":1138,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["letterheart"],"id":49},{"paths":["M511.996 137.198c-137.812-109.395-353.809-80.85-453.132 83.562-32.978 54.59-45.364 118.058-42.453 181.070 5.049 109.298 51.698 204.838 120.219 287.286 92.264 111.018 225.654 198.258 372.448 263.36l0.276 0.122c0.566 0.25 1.824 0.804 2.642 1.172 0.892-0.38 2.456-1.092 2.936-1.306 146.038-65.102 280.17-152.35 372.43-263.348 68.524-82.444 115.17-177.988 120.218-287.286 2.912-63.014-9.474-126.482-42.454-181.070-99.322-164.413-315.318-192.957-453.13-83.562zM445.258 487.050l62.74 31.454c-11.602 27.504-40.556 53.012-66.618 66.228-33.674 17.076-73.27 18.946-109.636 10.904-74.582-16.492-109.302-79.682-110.596-152.834-1.268-71.564 34.858-137.922 106.18-157.228 67.028-18.144 146.102 3.998 179.844 69.104l-68.502 35.516c-7.85-18.488-22.54-39.054-57.020-40.856-53.958-2.822-69.752 49.948-67.884 95.638 1.368 33.45 12.016 73.328 47.99 83.298 45.83 12.7 61.696-9.064 83.502-41.224zM741.004 487.050l62.738 31.454c-11.6 27.504-40.554 53.012-66.616 66.228-33.674 17.076-73.272 18.946-109.636 10.904-74.582-16.492-109.302-79.682-110.598-152.834-1.266-71.564 34.86-137.922 106.182-157.228 67.028-18.144 146.102 3.998 179.844 69.104l-68.502 35.516c-7.85-18.488-22.542-39.054-57.020-40.856-53.958-2.822-69.752 49.948-67.884 95.638 1.368 33.45 12.016 73.328 47.99 83.298 45.83 12.7 61.696-9.064 83.502-41.224z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["cc-heart-filled"],"id":50},{"paths":["M512 1008c273.934 0 496-222.066 496-496s-222.066-496-496-496c-273.933 0-496 222.067-496 496s222.067 496 496 496zM389.319 216.191c31.747-1.449 41.882-1.791 122.717-1.791 80.831 0 90.966 0.343 122.714 1.791 31.681 1.445 53.317 6.477 72.247 13.835 19.572 7.605 36.172 17.782 52.718 34.329s26.724 33.146 34.33 52.718c7.357 18.932 12.39 40.569 13.835 72.246 1.448 31.747 1.789 41.882 1.789 122.717 0 80.831-0.341 90.966-1.789 122.714-1.445 31.681-6.478 53.317-13.835 72.247-7.605 19.572-17.783 36.172-34.33 52.718s-33.146 26.724-52.718 34.33c-18.931 7.357-40.566 12.39-72.247 13.835-31.747 1.448-41.882 1.789-122.714 1.789-80.835 0-90.97-0.341-122.717-1.789-31.678-1.445-53.315-6.478-72.246-13.835-19.572-7.605-36.171-17.783-52.718-34.33s-26.723-33.146-34.329-52.718c-7.358-18.931-12.39-40.566-13.835-72.247-1.449-31.747-1.791-41.882-1.791-122.714 0-80.835 0.343-90.97 1.791-122.717 1.445-31.678 6.477-53.315 13.835-72.246 7.605-19.572 17.782-36.171 34.329-52.718s33.146-26.723 52.718-34.329c18.932-7.358 40.569-12.39 72.246-13.835zM632.306 269.764c-31.387-1.432-40.798-1.736-120.27-1.736s-88.887 0.304-120.27 1.736c-29.019 1.323-44.779 6.172-55.268 10.248-13.893 5.399-23.808 11.849-34.222 22.265-10.416 10.415-16.866 20.329-22.265 34.222-4.076 10.489-8.925 26.248-10.248 55.268-1.432 31.384-1.736 40.798-1.736 120.27s0.304 88.887 1.736 120.27c1.323 29.019 6.172 44.779 10.248 55.264 5.399 13.895 11.85 23.808 22.265 34.224s20.329 16.864 34.222 22.264c10.489 4.077 26.248 8.925 55.268 10.247 31.38 1.432 40.791 1.736 120.27 1.736 79.476 0 88.89-0.304 120.27-1.736 29.019-1.323 44.779-6.17 55.264-10.247 13.895-5.4 23.808-11.848 34.224-22.264s16.864-20.329 22.264-34.224c4.077-10.485 8.925-26.245 10.247-55.264 1.432-31.384 1.736-40.798 1.736-120.27s-0.304-88.887-1.736-120.27c-1.323-29.019-6.17-44.779-10.247-55.268-5.4-13.893-11.848-23.808-22.264-34.222-10.416-10.416-20.329-16.866-34.224-22.265-10.485-4.076-26.245-8.925-55.264-10.248zM412.846 512.036c0 54.795 44.418 99.213 99.213 99.213 54.791 0 99.21-44.418 99.21-99.213 0-54.791-44.418-99.21-99.21-99.21-54.795 0-99.213 44.418-99.213 99.21zM359.219 512.036c0-84.409 68.428-152.837 152.841-152.837 84.409 0 152.837 68.428 152.837 152.837 0 84.413-68.428 152.841-152.837 152.841-84.413 0-152.841-68.428-152.841-152.841zM706.63 353.144c0 19.721-15.984 35.705-35.705 35.705-19.718 0-35.702-15.984-35.702-35.705 0-19.719 15.984-35.705 35.702-35.705 19.721 0 35.705 15.986 35.705 35.705z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["instagram"],"defaultCode":60672,"id":51},{"paths":["M512 1008c273.934 0 496-222.066 496-496s-222.066-496-496-496c-273.933 0-496 222.067-496 496s222.067 496 496 496zM758.76 402.133c0 167.896-127.968 361.832-361.832 361.832-71.673 0-138.633-21.080-194.681-56.792 9.92 1.24 20.088 1.736 30.256 1.736 59.52 0 114.329-20.336 157.977-54.56-55.553-0.992-102.673-37.696-118.793-88.288 7.688 1.488 15.624 2.232 23.808 2.232 11.656 0 22.816-1.488 33.48-4.464-58.032-11.656-101.928-63.24-101.928-124.744v-1.736c17.112 9.424 36.704 15.128 57.536 15.872-33.976-22.816-56.544-61.752-56.544-105.896 0-23.313 6.2-45.137 17.112-63.985 62.744 76.881 156.489 127.721 262.137 132.929-1.984-9.424-3.224-19.096-3.224-29.016 0-70.185 57.040-127.225 127.224-127.225 36.456 0 69.44 15.376 92.752 40.176 29.016-5.704 56.296-16.12 80.848-30.752-9.672 29.76-29.76 54.808-56.048 70.432 25.792-3.224 50.344-9.92 73.16-20.088-17.112 25.544-38.688 48.113-63.488 65.969 0.248 5.456 0.248 10.912 0.248 16.368z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["twitter"],"defaultCode":60673,"id":52},{"paths":["M832 64h-768.2c-35.2 0-63.8 29-63.8 64.6v766.8c0 35.6 28.6 64.6 63.8 64.6h768.2c35.2 0 64-29 64-64.6v-766.8c0-35.6-28.8-64.6-64-64.6zM270.8 832h-132.8v-427.6h133v427.6zM204.4 346c-42.6 0-77-34.6-77-77s34.4-77 77-77c42.4 0 77 34.6 77 77 0 42.6-34.4 77-77 77zM768.6 832h-132.8v-208c0-49.6-1-113.4-69-113.4-69.2 0-79.8 54-79.8 109.8v211.6h-132.8v-427.6h127.4v58.4h1.8c17.8-33.6 61.2-69 125.8-69 134.4 0 159.4 88.6 159.4 203.8v234.4z"],"attrs":[{}],"width":896,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["linkedin"],"defaultCode":60674,"id":53},{"paths":["M1008 512c0-274-222-496-496-496s-496 222-496 496c0 247.56 181.38 452.76 418.5 490v-346.62h-126v-143.38h126v-109.28c0-124.3 74-192.96 187.34-192.96 54.28 0 111.040 9.68 111.040 9.68v122h-62.56c-61.6 0-80.82 38.24-80.82 77.46v93.1h137.56l-22 143.38h-115.56v346.62c237.12-37.24 418.5-242.44 418.5-490z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["facebook"],"defaultCode":60675,"id":54},{"paths":["M992 512c0 274-222 496-496 496-51.2 0-100.4-7.8-146.8-22.2 20.2-33 50.4-87 61.6-130 6-23.2 30.8-118 30.8-118 16.2 30.8 63.4 57 113.6 57 149.6 0 257.4-137.6 257.4-308.6 0-163.8-133.8-286.4-305.8-286.4-214 0-327.8 143.6-327.8 300.2 0 72.8 38.8 163.4 100.6 192.2 9.4 4.4 14.4 2.4 16.6-6.6 1.6-6.8 10-40.6 13.8-56.2 1.2-5 0.6-9.4-3.4-14.2-20.2-25-36.6-70.6-36.6-113.2 0-109.4 82.8-215.2 224-215.2 121.8 0 207.2 83 207.2 201.8 0 134.2-67.8 227.2-156 227.2-48.6 0-85.2-40.2-73.4-89.6 14-59 41-122.6 41-165.2 0-38-20.4-69.8-62.8-69.8-49.8 0-89.8 51.4-89.8 120.4 0 44 14.8 73.6 14.8 73.6s-49 207.6-58 246.4c-10 42.8-6 103.2-1.8 142.4-184.4-72.2-315.2-251.8-315.2-462 0-274 222-496 496-496s496 222 496 496z"],"attrs":[{}],"width":992,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["pinterest"],"defaultCode":60676,"id":55},{"paths":["M512 16c273.934 0 496 222.066 496 496s-222.066 496-496 496c-273.934 0-496-222.066-496-496s222.066-496 496-496zM599.244 703.722h-69.472v69.472c0 38.238 31.236 69.474 69.472 69.474 38.238 0 69.472-31.236 69.472-69.474 0-38.236-31.234-69.472-69.472-69.472zM424.756 529.772c-38.238 0-69.474 31.236-69.474 69.472v0 173.95c0 38.238 31.236 69.472 69.474 69.472 38.236 0 69.472-31.234 69.472-69.472v0-173.95c0-38.236-31.236-69.472-69.472-69.472zM320.278 529.772h-69.472c-38.238 0-69.473 31.236-69.473 69.472s31.235 69.472 69.473 69.472c38.236 0 69.472-31.236 69.472-69.472v0-69.472zM773.194 529.772h-173.95c-38.236 0-69.472 31.236-69.472 69.472s31.236 69.472 69.472 69.472v0h173.95c38.236 0 69.472-31.236 69.472-69.472s-31.236-69.472-69.472-69.472v0zM599.244 181.333c-38.236 0-69.472 31.235-69.472 69.473v0 173.95c0 38.236 31.236 69.472 69.472 69.472s69.472-31.236 69.472-69.472v0-173.95c0-38.238-31.236-69.473-69.472-69.473zM424.756 355.284h-173.95c-38.238 0-69.473 31.236-69.473 69.472s31.235 69.472 69.473 69.472v0h173.95c38.236 0 69.472-31.236 69.472-69.472s-31.236-69.472-69.472-69.472v0zM773.194 355.284c-38.236 0-69.472 31.234-69.472 69.472v69.472h69.472c38.238 0 69.472-31.236 69.472-69.472 0-38.238-31.234-69.472-69.472-69.472zM424.756 181.334c-38.238 0-69.474 31.236-69.474 69.472s31.236 69.472 69.474 69.472h69.472v-69.472c0-38.236-31.236-69.472-69.472-69.472z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["slack"],"id":56},{"paths":["M399.483 614.195c-28.488 0-51.405-22.917-51.405-50.79 0-28.488 22.917-51.405 51.405-51.405 28.078 0 50.787 22.917 50.787 51.405 0 28.078-22.914 50.79-50.787 50.79zM1024 512c0 282.839-229.161 512-512 512s-512-229.161-512-512c0-282.839 229.161-512 512-512s512 229.161 512 512zM750.865 426.943c-19.408 0-36.543 8.052-49.135 20.644-46.247-32-108.595-52.644-177.756-54.917l35.922-161.65 114.374 25.806c0 28.077 22.917 50.787 50.787 50.787 28.491 0 51.408-23.329 51.408-51.407s-22.917-51.407-51.408-51.407c-20.026 0-37.161 11.974-45.626 28.49l-126.348-28.077c-6.192-1.652-12.592 2.89-14.244 9.084l-39.434 178.373c-68.54 2.891-130.27 23.33-176.514 55.33-12.594-13.213-30.349-21.057-49.755-21.057-72.052 0-95.587 96.826-29.729 129.652-2.271 10.322-3.51 21.057-3.51 32 0 108.592 122.22 196.54 272.516 196.54 150.917 0 273.135-87.948 273.135-196.54 0-10.943-1.239-22.299-3.922-32.621 64.618-33.031 40.878-129.031-30.761-129.031zM608.618 666.839c-37.574 37.574-157.109 36.956-193.236 0-4.543-4.543-12.595-4.543-17.138 0-5.161 5.161-5.161 13.213 0 17.756 47.073 47.070 180.234 47.070 227.512 0 5.161-4.543 5.161-12.595 0-17.756-4.543-4.543-12.595-4.543-17.138 0zM624.517 512c-28.078 0-50.787 22.917-50.787 51.405 0 28.078 22.914 50.79 50.787 50.79 28.488 0 51.405-22.917 51.405-50.79 0-28.488-22.709-51.405-51.405-51.405z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["reddit"],"id":57},{"paths":["M342.504 824.525c0 4.233-4.749 7.622-10.736 7.622-6.813 0.635-11.561-2.755-11.561-7.622 0-4.236 4.748-7.625 10.735-7.625 6.194-0.635 11.562 2.755 11.562 7.625zM278.297 814.995c-1.445 4.236 2.684 9.103 8.877 10.377 5.367 2.116 11.561 0 12.8-4.236s-2.684-9.103-8.877-11.011c-5.368-1.481-11.355 0.635-12.8 4.871zM369.548 811.394c-5.987 1.485-10.117 5.506-9.496 10.377 0.618 4.236 5.987 6.987 12.179 5.506 5.987-1.481 10.117-5.506 9.499-9.742-0.621-4.021-6.195-6.775-12.182-6.141zM505.395 0c-286.35 0-505.395 222.964-505.395 516.649 0 234.824 144.103 435.767 349.935 506.487 26.426 4.871 35.717-11.858 35.717-25.62 0-13.128-0.621-85.542-0.621-130.010 0 0-144.515 31.761-174.863-63.099 0 0-23.536-61.617-57.393-77.496 0 0-47.277-33.242 3.303-32.608 0 0 51.407 4.233 79.69 54.63 45.213 81.732 120.98 58.228 150.502 44.254 4.748-33.881 18.169-57.385 33.034-71.359-115.407-13.128-231.846-30.28-231.846-233.974 0-58.228 15.69-87.45 48.722-124.716-5.367-13.763-22.916-70.51 5.368-143.773 43.149-13.763 142.452 57.17 142.452 57.17 41.291-11.858 85.678-17.998 129.652-17.998s88.361 6.14 129.652 17.998c0 0 99.301-71.145 142.452-57.17 28.283 73.474 10.735 130.010 5.366 143.773 33.034 37.478 53.265 66.7 53.265 124.716 0 204.329-121.6 220.634-237.005 233.974 18.992 16.729 35.096 48.49 35.096 98.249 0 71.356-0.621 159.652-0.621 177.015 0 13.763 9.499 30.491 35.717 25.62 206.452-70.298 346.426-271.241 346.426-506.064 0-293.685-232.257-516.649-518.605-516.649zM200.671 730.3c-2.684 2.116-2.064 6.987 1.445 11.008 3.303 3.389 8.052 4.871 10.736 2.12 2.684-2.12 2.064-6.991-1.445-11.011-3.303-3.389-8.052-4.871-10.736-2.116zM178.374 713.148c-1.445 2.751 0.619 6.141 4.748 8.257 3.303 2.116 7.432 1.481 8.877-1.481 1.445-2.755-0.62-6.141-4.748-8.257-4.129-1.273-7.432-0.638-8.877 1.481zM245.264 788.528c-3.303 2.751-2.064 9.103 2.684 13.128 4.749 4.871 10.736 5.506 13.42 2.116 2.684-2.751 1.445-9.103-2.684-13.128-4.542-4.871-10.736-5.506-13.42-2.116zM221.729 757.402c-3.303 2.116-3.303 7.622 0 12.493s8.877 6.987 11.561 4.871c3.303-2.755 3.303-8.26 0-13.128-2.89-4.871-8.258-6.991-11.561-4.236z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["github"],"id":58},{"paths":["M870.629 148.8c-95.771-96-223.314-148.8-358.857-148.8-279.771 0-507.428 227.657-507.428 507.43 0 89.371 23.314 176.684 67.657 253.713l-72 262.857 269.029-70.629c74.056 40.458 157.484 61.713 242.514 61.713h0.229c279.542 0 512.229-227.656 512.229-507.426 0-135.543-57.6-262.858-153.371-358.858zM511.771 929.601c-75.885 0-150.173-20.343-214.857-58.743l-15.314-9.144-159.543 41.83 42.514-155.658-10.057-15.998c-42.286-67.202-64.457-144.688-64.457-224.457 0-232.458 189.257-421.715 421.943-421.715 112.684 0 218.515 43.886 298.056 123.657 79.544 79.771 128.457 185.599 128.229 298.287 0 232.684-194.055 421.943-426.513 421.943zM743.086 613.714c-12.571-6.4-74.97-37.028-86.63-41.141-11.657-4.345-20.111-6.4-28.57 6.4s-32.686 41.141-40.23 49.828c-7.315 8.455-14.858 9.598-27.43 3.198-74.513-37.257-123.426-66.512-172.571-150.856-13.029-22.402 13.029-20.801 37.26-69.257 4.113-8.458 2.055-15.773-1.143-22.173-3.202-6.4-28.573-68.799-39.086-94.171-10.284-24.686-20.801-21.257-28.573-21.714-7.311-0.457-15.77-0.457-24.227-0.457s-22.171 3.2-33.829 15.771c-11.657 12.8-44.343 43.429-44.343 105.828 0 62.403 45.485 122.743 51.657 131.202 6.4 8.455 89.37 136.455 216.684 191.543 80.459 34.741 112.002 37.714 152.231 31.771 24.457-3.659 74.97-30.628 85.484-60.344 10.516-29.713 10.516-55.084 7.315-60.341-2.97-5.714-11.428-8.916-23.999-15.087z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["WhatsApp"],"id":59},{"paths":["M914.285 0h-804.571c-60.572 0-109.714 49.143-109.714 109.714v804.571c0 60.573 49.143 109.715 109.714 109.715h804.571c60.573 0 109.715-49.142 109.715-109.715v-804.571c0-60.572-49.142-109.714-109.715-109.714zM726.173 832.457c-19.429 20.801-71.315 45.257-139.203 45.257-172.571 0-210.057-126.857-210.057-200.916v-205.715h-67.885c-7.771 0-14.171-6.4-14.171-14.169v-97.143c0-10.288 6.4-19.429 16.229-22.858 88.687-31.314 116.342-108.571 120.459-167.314 1.14-15.771 9.37-23.314 22.856-23.314h101.257c7.772 0 14.172 6.4 14.172 14.171v164.571h118.627c7.772 0 14.172 6.4 14.172 14.171v116.801c0 7.772-6.4 14.172-14.172 14.172h-119.084v190.399c0 48.913 33.83 76.571 97.143 51.2 6.857-2.744 12.8-4.57 18.285-3.202 5.028 1.143 8.23 4.803 10.513 11.203l31.543 91.884c2.287 7.315 4.574 15.316-0.683 20.801z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["tumblr"],"id":60},{"paths":["M548.571 32c-303 0-548.571 199.5-548.571 445.714 0 106.288 45.857 203.571 122.143 280.071-26.786 107.999-116.357 204.215-117.428 205.286-4.714 4.93-6 12.215-3.214 18.644 2.786 6.426 8.786 10.284 15.643 10.284 142.072 0 248.572-68.144 301.286-110.142 70.070 26.357 147.857 41.571 230.143 41.571 303.002 0 548.571-199.501 548.571-445.714s-245.57-445.714-548.571-445.714zM274.714 614.857h-26.143c-9.429 0-17.143-7.713-17.143-17.141v-34.289c0-9.428 7.714-17.141 17.143-17.141h26.357c12.857 0 22.286-7.501 22.286-14.142 0-2.787-1.714-5.786-4.5-8.144l-46.929-40.283c-18.214-15.429-28.5-37.5-28.5-60.215 0-45.645 40.714-82.715 90.857-82.715h26.143c9.429 0 17.143 7.714 17.143 17.143v34.285c0 9.428-7.714 17.145-17.143 17.145h-26.357c-12.857 0-22.286 7.497-22.286 14.142 0 2.783 1.714 5.786 4.5 8.141l46.929 40.287c18.214 15.429 28.5 37.5 28.5 60.215 0.216 45.641-40.714 82.714-90.857 82.714zM685.714 597.716c0 9.428-7.713 17.141-17.145 17.141h-34.282c-9.432 0-17.145-7.713-17.145-17.141v-146.143l-53.142 119.57c-6.213 12.643-24.43 12.643-30.643 0l-53.358-119.57v146.143c0 9.428-7.713 17.141-17.145 17.141h-34.282c-9.432 0-17.145-7.713-17.145-17.141v-222.859c0-18.857 15.429-34.286 34.286-34.286h34.286c13.071 0 24.858 7.286 30.643 18.857l37.928 75.856 37.928-75.856c5.786-11.571 17.785-18.857 30.643-18.857h34.286c18.856 0 34.286 15.429 34.286 34.286v222.859zM789.215 614.857h-26.357c-9.428 0-17.145-7.713-17.145-17.141v-34.289c0-9.428 7.717-17.141 17.145-17.141h26.357c12.855 0 22.287-7.501 22.287-14.142 0-2.787-1.715-5.786-4.502-8.144l-46.928-40.283c-18.213-15.429-28.5-37.5-28.5-60.215 0-45.645 40.715-82.715 90.858-82.715h26.141c9.428 0 17.145 7.714 17.145 17.143v34.285c0 9.428-7.717 17.145-17.145 17.145h-26.357c-12.855 0-22.287 7.497-22.287 14.142 0 2.783 1.715 5.786 4.502 8.141l46.928 40.287c18.213 15.429 28.5 37.5 28.5 60.215 0.216 45.641-40.499 82.714-90.642 82.714z"],"attrs":[{}],"width":1097,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["sms"],"id":61},{"paths":["M513.137 0c-289.095 0-513.137 211.283-513.137 496.66 0 149.265 61.337 278.255 161.177 367.36 17.239 15.503 13.687 24.484 16.619 120.218 0.231 6.704 2.099 13.251 5.441 19.070 3.342 5.816 8.057 10.728 13.734 14.305s12.142 5.714 18.832 6.219c6.691 0.502 13.403-0.638 19.552-3.321 109.235-48.104 110.638-51.903 129.155-46.865 316.471 87.101 659.49-115.429 659.49-476.986 0-285.378-221.751-496.66-510.863-496.66zM821.245 382.205l-150.709 238.595c-5.693 8.97-13.175 16.671-21.982 22.617s-18.743 10.008-29.194 11.933c-10.448 1.922-21.183 1.669-31.529-0.748s-20.081-6.946-28.593-13.302l-119.907-89.743c-5.362-4.021-11.882-6.195-18.582-6.195s-13.22 2.174-18.579 6.195l-161.797 122.713c-21.595 16.374-49.879-9.496-35.324-32.352l150.71-238.595c5.69-8.974 13.172-16.674 21.975-22.624 8.806-5.946 18.746-10.008 29.198-11.933 10.448-1.925 21.183-1.669 31.529 0.748 10.346 2.42 20.084 6.95 28.597 13.309l119.866 89.726c5.359 4.017 11.878 6.192 18.579 6.192s13.22-2.174 18.582-6.192l161.877-122.593c21.555-16.474 49.838 9.373 35.284 32.249z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["messenger"],"id":62},{"paths":["M0 64v896h896v-896h-896zM744.4 276.2l-48 46c-4.2 3.2-6.2 8.4-5.4 13.4v338.6c-0.8 5.2 1.2 10.4 5.4 13.4l47 46v10.2h-236v-9.8l48.6-47.2c4.8-4.8 4.8-6.2 4.8-13.4v-273.8l-135.2 343.2h-18.2l-157.4-343.2v230c-1.4 9.6 2 19.4 8.8 26.4l63.2 76.6v10.2h-179.6v-10.2l63.2-76.6c6.8-7 9.8-16.8 8.2-26.4v-266c0.8-7.4-2-14.6-7.6-19.6l-56.2-67.8v-10.2h174.6l134.8 296 118.6-295.8h166.4v10z"],"attrs":[{}],"width":896,"isMulticolor":false,"isMulticolor2":false,"grid":0,"tags":["medium"],"id":63}],"height":1024,"metadata":{"name":"Vocabulary-Icons","url":"https:\/\/creativecommons.org","designer":"Creative Commons","designerURL":"https:\/\/opensource.creativecommons.org","license":"MIT","licenseURL":"https:\/\/opensource.org\/licenses\/MIT"},"preferences":{"showGlyphs":true,"showQuickUse":true,"showQuickUse2":true,"showSVGs":true,"fontPref":{"prefix":"cc-","metadata":{"fontFamily":"VocabularyIcons","majorVersion":1,"minorVersion":0,"fontURL":"https:\/\/creativecommons.org","description":"Icon font for Vocabulary","copyright":"","designer":"Creative Commons","designerURL":"https:\/\/opensource.creativecommons.org","license":"MIT","licenseURL":"https:\/\/opensource.org\/licenses\/MIT"},"metrics":{"emSize":1024,"baseline":6.25,"whitespace":50},"embed":false,"resetPoint":59648,"includeMetadata":true,"cssVars":true,"cssVarsFormat":"scss","showSelector":true,"showMetrics":true,"showMetadata":true,"showVersion":true,"noie8":true,"ie7":false,"selector":"class","classSelector":".icon"},"imagePref":{"prefix":"icon-","png":true,"useClassSelector":true,"color":0,"bgColor":16777215,"classSelector":".icon"},"historySize":50,"showCodes":true,"gridSize":16,"showLiga":true},"selection":[{"order":614,"id":11,"name":"caret-up","prevSize":32,"code":59658,"ligatures":"caretup","tempChar":"\ue900"},{"order":613,"id":10,"name":"caret-left","prevSize":32,"code":59659,"ligatures":"caretleft","tempChar":"\ue901"},{"order":612,"id":0,"name":"chevron-up","prevSize":32,"ligatures":"chevronup","code":59648,"tempChar":"\ue902"},{"order":611,"id":1,"name":"chevron-right","prevSize":32,"ligatures":"chevronright","code":59649,"tempChar":"\ue903"},{"order":610,"id":2,"name":"chevron-down","prevSize":32,"ligatures":"chevrondown","code":59650,"tempChar":"\ue904"},{"order":609,"id":3,"name":"chevron-left","prevSize":32,"ligatures":"chevronleft","code":59651,"tempChar":"\ue905"},{"order":608,"id":4,"name":"angle-up","prevSize":32,"ligatures":"angleup","code":59652,"tempChar":"\ue906"},{"order":607,"id":5,"name":"angle-right","prevSize":32,"ligatures":"angleright","code":59653,"tempChar":"\ue907"},{"order":606,"id":6,"name":"angle-down","prevSize":32,"ligatures":"angledown","code":59654,"tempChar":"\ue908"},{"order":605,"id":7,"name":"angle-left","prevSize":32,"ligatures":"angleleft","code":59655,"tempChar":"\ue909"},{"order":604,"id":8,"name":"caret-right","prevSize":32,"ligatures":"caretright","code":59656,"tempChar":"\ue90a"},{"order":603,"id":9,"name":"caret-down","prevSize":32,"ligatures":"caretdown","code":59657,"tempChar":"\ue90b"},{"order":618,"id":21,"name":"envelope","prevSize":32,"code":59923,"ligatures":"envelope","tempChar":"\ue90c"},{"order":602,"id":20,"name":"rss-square","prevSize":32,"code":59924,"ligatures":"rss-square","tempChar":"\ue90d"},{"order":601,"id":0,"name":"tick","prevSize":32,"ligatures":"tick","code":59904,"tempChar":"\ue90e"},{"order":600,"id":1,"name":"cross","prevSize":32,"ligatures":"cross","code":59905,"tempChar":"\ue90f"},{"order":599,"id":13,"name":"plus","prevSize":32,"code":59917,"ligatures":"plus","tempChar":"\ue910"},{"order":598,"id":14,"name":"minus","prevSize":32,"code":59918,"ligatures":"minus","tempChar":"\ue911"},{"order":597,"id":2,"name":"circle-filled","prevSize":32,"ligatures":"circlefilled","code":59906,"tempChar":"\ue912"},{"order":596,"id":3,"name":"circle-outline","prevSize":32,"ligatures":"circleoutline","code":59907,"tempChar":"\ue913"},{"order":595,"id":4,"name":"globe","prevSize":32,"ligatures":"globe","code":59908,"tempChar":"\ue914"},{"order":594,"id":5,"name":"info","prevSize":32,"ligatures":"info","code":59909,"tempChar":"\ue915"},{"order":593,"id":6,"name":"external-link","prevSize":32,"ligatures":"externallink","code":59910,"tempChar":"\ue916"},{"order":592,"id":7,"name":"search","prevSize":32,"ligatures":"search","code":59911,"tempChar":"\ue917"},{"order":591,"id":10,"name":"sort","prevSize":32,"ligatures":"sort","code":59912,"tempChar":"\ue918"},{"order":617,"id":8,"name":"filter","prevSize":32,"code":59913,"ligatures":"filter","tempChar":"\ue919"},{"order":590,"id":9,"name":"sliders","prevSize":32,"ligatures":"sliders","code":59914,"tempChar":"\ue91a"},{"order":589,"id":19,"name":"bars","prevSize":32,"code":59660,"ligatures":"bars","tempChar":"\ue91b"},{"order":588,"id":11,"name":"flag","prevSize":32,"code":59915,"ligatures":"flag","tempChar":"\ue91c"},{"order":587,"id":18,"name":"exclamation-circle","prevSize":32,"code":59922,"ligatures":"exclamationcircle","tempChar":"\ue91d"},{"order":586,"id":12,"name":"question-circle","prevSize":32,"code":59916,"ligatures":"questioncircle","tempChar":"\ue91e"},{"order":585,"id":15,"name":"adjust","prevSize":32,"code":59919,"ligatures":"adjust","tempChar":"\ue91f"},{"order":584,"id":17,"name":"bookmark-regular","prevSize":32,"code":59920,"ligatures":"bookmarkregular","tempChar":"\ue920"},{"order":583,"id":16,"name":"bookmark-solid","prevSize":32,"code":59921,"ligatures":"bookmarksolid","tempChar":"\ue921"},{"order":619,"id":80,"name":"heart","prevSize":32,"code":128156,"tempChar":"\ue922","ligatures":"heart"},{"order":581,"id":65,"name":"logo","prevSize":32,"ligatures":"cc, cclogo","code":127341,"tempChar":"\ue923"},{"order":580,"id":66,"name":"by","prevSize":32,"ligatures":"ccby","code":127343,"tempChar":"\ue924"},{"order":579,"id":67,"name":"nc","prevSize":32,"ligatures":"ccnc","code":127247,"tempChar":"\ue925"},{"order":616,"id":68,"name":"nc-eu","prevSize":32,"ligatures":"ccnceu","code":60419,"tempChar":"\ue926"},{"order":578,"id":69,"name":"nc-jp","prevSize":32,"ligatures":"ccncjp","code":60420,"tempChar":"\ue927"},{"order":577,"id":70,"name":"nd","prevSize":32,"ligatures":"ccnd","code":8860,"tempChar":"\ue928"},{"order":576,"id":71,"name":"sa","prevSize":32,"ligatures":"ccsa","code":127246,"tempChar":"\ue929"},{"order":575,"id":72,"name":"remix","prevSize":32,"ligatures":"ccremix","code":60423,"tempChar":"\ue92a"},{"order":574,"id":73,"name":"sampling-plus","prevSize":32,"ligatures":"ccsamplingplus","code":60424,"tempChar":"\ue92b"},{"order":573,"id":74,"name":"sampling","prevSize":32,"ligatures":"ccsampling","code":60425,"tempChar":"\ue92c"},{"order":572,"id":75,"name":"share","prevSize":32,"ligatures":"ccshare","code":60426,"tempChar":"\ue92d"},{"order":571,"id":76,"name":"zero","prevSize":32,"ligatures":"cczero","code":127245,"tempChar":"\ue92e"},{"order":570,"id":77,"name":"pd","prevSize":32,"ligatures":"publicdomain, pd","code":127342,"tempChar":"\ue92f"},{"order":569,"id":78,"name":"pd-alt","prevSize":32,"ligatures":"publicdomainalt, pdalt","code":60429,"tempChar":"\ue930"},{"order":568,"id":43,"name":"letterheart","prevSize":32,"code":60430,"ligatures":"ccletterheart","tempChar":"\ue931"},{"order":567,"id":79,"name":"letterheart-filled","prevSize":32,"code":60431,"ligatures":"ccletterheartfilled","tempChar":"\ue932"},{"order":615,"id":0,"name":"instagram","prevSize":32,"ligatures":"instagram","code":60672,"tempChar":"\ue933"},{"order":566,"id":1,"name":"twitter","prevSize":32,"ligatures":"twitter","code":60673,"tempChar":"\ue934"},{"order":565,"id":2,"name":"linkedin","prevSize":32,"ligatures":"linkedin","code":60674,"tempChar":"\ue935"},{"order":564,"id":3,"name":"facebook","prevSize":32,"ligatures":"facebook","code":60675,"tempChar":"\ue936"},{"order":563,"id":4,"name":"pinterest","prevSize":32,"ligatures":"pinterest","code":60676,"tempChar":"\ue937"},{"order":562,"id":5,"name":"slack","prevSize":32,"code":60677,"ligatures":"slack","tempChar":"\ue938"},{"order":561,"id":6,"name":"reddit","prevSize":32,"code":60678,"ligatures":"reddit","tempChar":"\ue939"},{"order":560,"id":7,"name":"github","prevSize":32,"code":60679,"ligatures":"github","tempChar":"\ue93a"},{"order":559,"id":8,"name":"WhatsApp","prevSize":32,"code":60680,"ligatures":"WhatsApp","tempChar":"\ue93b"},{"order":558,"id":9,"name":"tumblr","prevSize":32,"code":60681,"ligatures":"tumblr","tempChar":"\ue93c"},{"order":557,"id":10,"name":"sms","prevSize":32,"code":60688,"ligatures":"sms","tempChar":"\ue93d"},{"order":556,"id":11,"name":"messenger","prevSize":32,"code":60689,"ligatures":"messenger","tempChar":"\ue93e"},{"order":555,"id":12,"name":"medium","prevSize":32,"code":60690,"ligatures":"medium","tempChar":"\ue93f"}],"prevSize":32,"id":1}],"preferences":{"showGlyphs":true,"showQuickUse":true,"showQuickUse2":true,"showSVGs":true,"fontPref":{"prefix":"cc-","metadata":{"fontFamily":"VocabularyIcons","majorVersion":1,"minorVersion":0,"fontURL":"https:\/\/creativecommons.org","description":"Icon font for Vocabulary","copyright":"","designer":"Creative Commons","designerURL":"https:\/\/opensource.creativecommons.org","license":"MIT","licenseURL":"https:\/\/opensource.org\/licenses\/MIT"},"metrics":{"emSize":1024,"baseline":6.25,"whitespace":50},"embed":false,"resetPoint":59648,"includeMetadata":true,"cssVars":true,"cssVarsFormat":"scss","showSelector":true,"showMetrics":true,"showMetadata":true,"showVersion":true,"noie8":true,"ie7":false,"selector":"class","classSelector":".icon"},"imagePref":{"prefix":"icon-","png":true,"useClassSelector":true,"color":0,"bgColor":16777215,"classSelector":".icon"},"historySize":50,"showCodes":true,"gridSize":16,"showLiga":true},"uid":-1,"time":1601650624290} diff --git a/assets/static/vocabulary/fonts/VocabularyIcons.ttf b/assets/static/vocabulary/fonts/VocabularyIcons.ttf new file mode 100644 index 000000000..db22133f4 Binary files /dev/null and b/assets/static/vocabulary/fonts/VocabularyIcons.ttf differ diff --git a/assets/static/vocabulary/fonts/VocabularyIcons.woff b/assets/static/vocabulary/fonts/VocabularyIcons.woff new file mode 100644 index 000000000..62d59c021 Binary files /dev/null and b/assets/static/vocabulary/fonts/VocabularyIcons.woff differ diff --git a/assets/static/vocabulary/js/vocabulary.js b/assets/static/vocabulary/js/vocabulary.js new file mode 100644 index 000000000..fe2885e40 --- /dev/null +++ b/assets/static/vocabulary/js/vocabulary.js @@ -0,0 +1,32 @@ +const exploreButton = document.querySelector('button.explore'); +const explorePanel = document.querySelector('.explore-panel'); + +// explorePanel.classList.add('hide'); + +exploreButton.addEventListener('click', (event) => { + explorePanel.classList.toggle('expand'); + // explorePanel.classList.toggle('hide'); +}); + + +const menuButton = document.querySelector('button.expand-menu'); +const menuPanel = document.querySelector('.primary-menu'); + +menuButton.addEventListener('click', (event) => { + menuPanel.classList.toggle('expand'); + // explorePanel.classList.toggle('hide'); +}); + + +const attributionButton = document.querySelector('button.expand-attribution'); +const attributionPanel = document.querySelector('.attribution-panel'); + +if (attributionButton !== null && attributionPanel !== null ) { + + attributionButton.addEventListener('click', (event) => { + attributionButton.classList.toggle('selected'); + attributionPanel.classList.toggle('expand'); + // explorePanel.classList.toggle('hide'); + }); + +} diff --git a/assets/static/vocabulary/svg/cc/icons/cc-by.svg b/assets/static/vocabulary/svg/cc/icons/cc-by.svg new file mode 100644 index 000000000..9a0b21801 --- /dev/null +++ b/assets/static/vocabulary/svg/cc/icons/cc-by.svg @@ -0,0 +1 @@ + diff --git a/assets/static/vocabulary/svg/cc/icons/cc-heart-filled.svg b/assets/static/vocabulary/svg/cc/icons/cc-heart-filled.svg new file mode 100644 index 000000000..80cd7c8c5 --- /dev/null +++ b/assets/static/vocabulary/svg/cc/icons/cc-heart-filled.svg @@ -0,0 +1 @@ + diff --git a/assets/static/vocabulary/svg/cc/icons/cc-heart.svg b/assets/static/vocabulary/svg/cc/icons/cc-heart.svg new file mode 100644 index 000000000..d43e65f2e --- /dev/null +++ b/assets/static/vocabulary/svg/cc/icons/cc-heart.svg @@ -0,0 +1 @@ + diff --git a/assets/static/vocabulary/svg/cc/icons/cc-icons.svg b/assets/static/vocabulary/svg/cc/icons/cc-icons.svg new file mode 100644 index 000000000..fb77898d8 --- /dev/null +++ b/assets/static/vocabulary/svg/cc/icons/cc-icons.svg @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/static/vocabulary/svg/cc/icons/cc-logo.svg b/assets/static/vocabulary/svg/cc/icons/cc-logo.svg new file mode 100644 index 000000000..8b464cf86 --- /dev/null +++ b/assets/static/vocabulary/svg/cc/icons/cc-logo.svg @@ -0,0 +1 @@ + diff --git a/assets/static/vocabulary/svg/cc/icons/cc-nc-eu.svg b/assets/static/vocabulary/svg/cc/icons/cc-nc-eu.svg new file mode 100644 index 000000000..42e4c7110 --- /dev/null +++ b/assets/static/vocabulary/svg/cc/icons/cc-nc-eu.svg @@ -0,0 +1 @@ + diff --git a/assets/static/vocabulary/svg/cc/icons/cc-nc-jp.svg b/assets/static/vocabulary/svg/cc/icons/cc-nc-jp.svg new file mode 100644 index 000000000..73ba20c01 --- /dev/null +++ b/assets/static/vocabulary/svg/cc/icons/cc-nc-jp.svg @@ -0,0 +1 @@ + diff --git a/assets/static/vocabulary/svg/cc/icons/cc-nc.svg b/assets/static/vocabulary/svg/cc/icons/cc-nc.svg new file mode 100644 index 000000000..cac5b004a --- /dev/null +++ b/assets/static/vocabulary/svg/cc/icons/cc-nc.svg @@ -0,0 +1 @@ + diff --git a/assets/static/vocabulary/svg/cc/icons/cc-nd.svg b/assets/static/vocabulary/svg/cc/icons/cc-nd.svg new file mode 100644 index 000000000..d6bff7f33 --- /dev/null +++ b/assets/static/vocabulary/svg/cc/icons/cc-nd.svg @@ -0,0 +1 @@ + diff --git a/assets/static/vocabulary/svg/cc/icons/cc-pd.svg b/assets/static/vocabulary/svg/cc/icons/cc-pd.svg new file mode 100644 index 000000000..69f9aa81d --- /dev/null +++ b/assets/static/vocabulary/svg/cc/icons/cc-pd.svg @@ -0,0 +1 @@ + diff --git a/assets/static/vocabulary/svg/cc/icons/cc-pdm.svg b/assets/static/vocabulary/svg/cc/icons/cc-pdm.svg new file mode 100644 index 000000000..3ba019dec --- /dev/null +++ b/assets/static/vocabulary/svg/cc/icons/cc-pdm.svg @@ -0,0 +1 @@ + diff --git a/assets/static/vocabulary/svg/cc/icons/cc-remix.svg b/assets/static/vocabulary/svg/cc/icons/cc-remix.svg new file mode 100644 index 000000000..a2e351180 --- /dev/null +++ b/assets/static/vocabulary/svg/cc/icons/cc-remix.svg @@ -0,0 +1 @@ + diff --git a/assets/static/vocabulary/svg/cc/icons/cc-sa.svg b/assets/static/vocabulary/svg/cc/icons/cc-sa.svg new file mode 100644 index 000000000..dec58210c --- /dev/null +++ b/assets/static/vocabulary/svg/cc/icons/cc-sa.svg @@ -0,0 +1 @@ + diff --git a/assets/static/vocabulary/svg/cc/icons/cc-sampling-plus.svg b/assets/static/vocabulary/svg/cc/icons/cc-sampling-plus.svg new file mode 100644 index 000000000..ef29be7e8 --- /dev/null +++ b/assets/static/vocabulary/svg/cc/icons/cc-sampling-plus.svg @@ -0,0 +1 @@ + diff --git a/assets/static/vocabulary/svg/cc/icons/cc-sampling.svg b/assets/static/vocabulary/svg/cc/icons/cc-sampling.svg new file mode 100644 index 000000000..2c475a68c --- /dev/null +++ b/assets/static/vocabulary/svg/cc/icons/cc-sampling.svg @@ -0,0 +1 @@ + diff --git a/assets/static/vocabulary/svg/cc/icons/cc-share.svg b/assets/static/vocabulary/svg/cc/icons/cc-share.svg new file mode 100644 index 000000000..172058c89 --- /dev/null +++ b/assets/static/vocabulary/svg/cc/icons/cc-share.svg @@ -0,0 +1 @@ + diff --git a/assets/static/vocabulary/svg/cc/icons/cc-zero.svg b/assets/static/vocabulary/svg/cc/icons/cc-zero.svg new file mode 100644 index 000000000..adb10ce39 --- /dev/null +++ b/assets/static/vocabulary/svg/cc/icons/cc-zero.svg @@ -0,0 +1 @@ + diff --git a/assets/static/vocabulary/svg/cc/license_badges/big/by.svg b/assets/static/vocabulary/svg/cc/license_badges/big/by.svg new file mode 100644 index 000000000..866e95bb5 --- /dev/null +++ b/assets/static/vocabulary/svg/cc/license_badges/big/by.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/static/vocabulary/svg/cc/license_badges/big/by_nc.eu.svg b/assets/static/vocabulary/svg/cc/license_badges/big/by_nc.eu.svg new file mode 100644 index 000000000..091c799ea --- /dev/null +++ b/assets/static/vocabulary/svg/cc/license_badges/big/by_nc.eu.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/static/vocabulary/svg/cc/license_badges/big/by_nc.svg b/assets/static/vocabulary/svg/cc/license_badges/big/by_nc.svg new file mode 100644 index 000000000..e13f6772b --- /dev/null +++ b/assets/static/vocabulary/svg/cc/license_badges/big/by_nc.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/static/vocabulary/svg/cc/license_badges/big/by_nc_nd.eu.svg b/assets/static/vocabulary/svg/cc/license_badges/big/by_nc_nd.eu.svg new file mode 100644 index 000000000..adaec3e04 --- /dev/null +++ b/assets/static/vocabulary/svg/cc/license_badges/big/by_nc_nd.eu.svg @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/static/vocabulary/svg/cc/license_badges/big/by_nc_nd.svg b/assets/static/vocabulary/svg/cc/license_badges/big/by_nc_nd.svg new file mode 100644 index 000000000..8fff4e173 --- /dev/null +++ b/assets/static/vocabulary/svg/cc/license_badges/big/by_nc_nd.svg @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/static/vocabulary/svg/cc/license_badges/big/by_nc_sa.eu.svg b/assets/static/vocabulary/svg/cc/license_badges/big/by_nc_sa.eu.svg new file mode 100644 index 000000000..37fee368c --- /dev/null +++ b/assets/static/vocabulary/svg/cc/license_badges/big/by_nc_sa.eu.svg @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/static/vocabulary/svg/cc/license_badges/big/by_nc_sa.svg b/assets/static/vocabulary/svg/cc/license_badges/big/by_nc_sa.svg new file mode 100644 index 000000000..8ed3811c3 --- /dev/null +++ b/assets/static/vocabulary/svg/cc/license_badges/big/by_nc_sa.svg @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/static/vocabulary/svg/cc/license_badges/big/by_nd.svg b/assets/static/vocabulary/svg/cc/license_badges/big/by_nd.svg new file mode 100644 index 000000000..82ea80b58 --- /dev/null +++ b/assets/static/vocabulary/svg/cc/license_badges/big/by_nd.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/static/vocabulary/svg/cc/license_badges/big/by_sa.svg b/assets/static/vocabulary/svg/cc/license_badges/big/by_sa.svg new file mode 100644 index 000000000..cd9c3a080 --- /dev/null +++ b/assets/static/vocabulary/svg/cc/license_badges/big/by_sa.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/static/vocabulary/svg/cc/license_badges/big/cc_zero.svg b/assets/static/vocabulary/svg/cc/license_badges/big/cc_zero.svg new file mode 100644 index 000000000..1a4832834 --- /dev/null +++ b/assets/static/vocabulary/svg/cc/license_badges/big/cc_zero.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/static/vocabulary/svg/cc/license_badges/big/publicdomain.svg b/assets/static/vocabulary/svg/cc/license_badges/big/publicdomain.svg new file mode 100644 index 000000000..cc6a72e65 --- /dev/null +++ b/assets/static/vocabulary/svg/cc/license_badges/big/publicdomain.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/assets/static/vocabulary/svg/cc/license_badges/small/by.svg b/assets/static/vocabulary/svg/cc/license_badges/small/by.svg new file mode 100644 index 000000000..003097ca4 --- /dev/null +++ b/assets/static/vocabulary/svg/cc/license_badges/small/by.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/assets/static/vocabulary/svg/cc/license_badges/small/by_nc.svg b/assets/static/vocabulary/svg/cc/license_badges/small/by_nc.svg new file mode 100644 index 000000000..ae44f09f6 --- /dev/null +++ b/assets/static/vocabulary/svg/cc/license_badges/small/by_nc.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/assets/static/vocabulary/svg/cc/license_badges/small/by_nc_nd.svg b/assets/static/vocabulary/svg/cc/license_badges/small/by_nc_nd.svg new file mode 100644 index 000000000..0876e5078 --- /dev/null +++ b/assets/static/vocabulary/svg/cc/license_badges/small/by_nc_nd.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/assets/static/vocabulary/svg/cc/license_badges/small/by_nc_sa.svg b/assets/static/vocabulary/svg/cc/license_badges/small/by_nc_sa.svg new file mode 100644 index 000000000..fbce516e9 --- /dev/null +++ b/assets/static/vocabulary/svg/cc/license_badges/small/by_nc_sa.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/assets/static/vocabulary/svg/cc/license_badges/small/by_nd.svg b/assets/static/vocabulary/svg/cc/license_badges/small/by_nd.svg new file mode 100644 index 000000000..d9240e373 --- /dev/null +++ b/assets/static/vocabulary/svg/cc/license_badges/small/by_nd.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/assets/static/vocabulary/svg/cc/license_badges/small/by_sa.svg b/assets/static/vocabulary/svg/cc/license_badges/small/by_sa.svg new file mode 100644 index 000000000..781173588 --- /dev/null +++ b/assets/static/vocabulary/svg/cc/license_badges/small/by_sa.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/assets/static/vocabulary/svg/cc/license_badges/small/cc_zero.svg b/assets/static/vocabulary/svg/cc/license_badges/small/cc_zero.svg new file mode 100644 index 000000000..6747b02df --- /dev/null +++ b/assets/static/vocabulary/svg/cc/license_badges/small/cc_zero.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/assets/static/vocabulary/svg/cc/license_badges/small/publicdomain.svg b/assets/static/vocabulary/svg/cc/license_badges/small/publicdomain.svg new file mode 100644 index 000000000..77b0cf878 --- /dev/null +++ b/assets/static/vocabulary/svg/cc/license_badges/small/publicdomain.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/assets/static/vocabulary/svg/cc/logos/cc/letterheart.svg b/assets/static/vocabulary/svg/cc/logos/cc/letterheart.svg new file mode 100644 index 000000000..024c8bf14 --- /dev/null +++ b/assets/static/vocabulary/svg/cc/logos/cc/letterheart.svg @@ -0,0 +1,15 @@ + + + + + + diff --git a/assets/static/vocabulary/svg/cc/logos/cc/lettermark.svg b/assets/static/vocabulary/svg/cc/logos/cc/lettermark.svg new file mode 100644 index 000000000..063316e55 --- /dev/null +++ b/assets/static/vocabulary/svg/cc/logos/cc/lettermark.svg @@ -0,0 +1,10 @@ + + + + + diff --git a/assets/static/vocabulary/svg/cc/logos/cc/logomark.svg b/assets/static/vocabulary/svg/cc/logos/cc/logomark.svg new file mode 100644 index 000000000..b3ef76d40 --- /dev/null +++ b/assets/static/vocabulary/svg/cc/logos/cc/logomark.svg @@ -0,0 +1,10 @@ + + + + + diff --git a/assets/static/vocabulary/svg/cc/logos/products/certificate.svg b/assets/static/vocabulary/svg/cc/logos/products/certificate.svg new file mode 100644 index 000000000..2f7c6d5eb --- /dev/null +++ b/assets/static/vocabulary/svg/cc/logos/products/certificate.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/assets/static/vocabulary/svg/cc/logos/products/certificates.svg b/assets/static/vocabulary/svg/cc/logos/products/certificates.svg new file mode 100644 index 000000000..a9a330b45 --- /dev/null +++ b/assets/static/vocabulary/svg/cc/logos/products/certificates.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/assets/static/vocabulary/svg/cc/logos/products/chooser.svg b/assets/static/vocabulary/svg/cc/logos/products/chooser.svg new file mode 100644 index 000000000..487f2d4a5 --- /dev/null +++ b/assets/static/vocabulary/svg/cc/logos/products/chooser.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/assets/static/vocabulary/svg/cc/logos/products/global_network.svg b/assets/static/vocabulary/svg/cc/logos/products/global_network.svg new file mode 100644 index 000000000..a13412f83 --- /dev/null +++ b/assets/static/vocabulary/svg/cc/logos/products/global_network.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/static/vocabulary/svg/cc/logos/products/global_summit.svg b/assets/static/vocabulary/svg/cc/logos/products/global_summit.svg new file mode 100644 index 000000000..69928253f --- /dev/null +++ b/assets/static/vocabulary/svg/cc/logos/products/global_summit.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/static/vocabulary/svg/cc/logos/products/legal_database.svg b/assets/static/vocabulary/svg/cc/logos/products/legal_database.svg new file mode 100644 index 000000000..8954b1f5d --- /dev/null +++ b/assets/static/vocabulary/svg/cc/logos/products/legal_database.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/static/vocabulary/svg/cc/logos/products/open_source.svg b/assets/static/vocabulary/svg/cc/logos/products/open_source.svg new file mode 100644 index 000000000..bed8412a8 --- /dev/null +++ b/assets/static/vocabulary/svg/cc/logos/products/open_source.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/assets/static/vocabulary/svg/cc/logos/products/search.svg b/assets/static/vocabulary/svg/cc/logos/products/search.svg new file mode 100644 index 000000000..ac101168c --- /dev/null +++ b/assets/static/vocabulary/svg/cc/logos/products/search.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/assets/static/vocabulary/svg/cc/logos/products/state_of_the_commons.svg b/assets/static/vocabulary/svg/cc/logos/products/state_of_the_commons.svg new file mode 100644 index 000000000..2f61a39be --- /dev/null +++ b/assets/static/vocabulary/svg/cc/logos/products/state_of_the_commons.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/static/vocabulary/svg/cc/logos/products/vocabulary.svg b/assets/static/vocabulary/svg/cc/logos/products/vocabulary.svg new file mode 100644 index 000000000..782d62962 --- /dev/null +++ b/assets/static/vocabulary/svg/cc/logos/products/vocabulary.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/assets/static/vocabulary/svg/cc/logos/products/vocabulary_inverted.svg b/assets/static/vocabulary/svg/cc/logos/products/vocabulary_inverted.svg new file mode 100644 index 000000000..38530c533 --- /dev/null +++ b/assets/static/vocabulary/svg/cc/logos/products/vocabulary_inverted.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/assets/static/vocabulary/svg/font-awesome/icons/fa-icons.svg b/assets/static/vocabulary/svg/font-awesome/icons/fa-icons.svg new file mode 100644 index 000000000..62f43c30f --- /dev/null +++ b/assets/static/vocabulary/svg/font-awesome/icons/fa-icons.svg @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/content/blog/authors/Murdock9803/contents.lr b/content/blog/authors/Murdock9803/contents.lr new file mode 100644 index 000000000..b0672ca59 --- /dev/null +++ b/content/blog/authors/Murdock9803/contents.lr @@ -0,0 +1,11 @@ +username: Murdock9803 +--- +name: Ayush Sahu +--- +md5_hashed_email: b84f9c55f00255c97f11b65641a3eb11 +--- +about: +Ayush Sahu is a developer from India, who started his professional career with Creative Commons in 2024, as a [Google Summer Of Code 2024](https://summerofcode.withgoogle.com/programs/2024) contributor. +He considers Frontend Development as his passion and is interested in learning about Blockchain Development. Apart from this, He pursues Boxing as a sport in his university team and loves to read about Cinema. + +He is `@Murdock9803` on slack and [Murdock9803](https://github.com/Murdock9803) on GitHub. diff --git a/content/blog/authors/NaishaSinha/contents.lr b/content/blog/authors/NaishaSinha/contents.lr new file mode 100644 index 000000000..40db8742b --- /dev/null +++ b/content/blog/authors/NaishaSinha/contents.lr @@ -0,0 +1,14 @@ +username: NaishaSinha +--- +name: Naisha Sinha +--- +md5_hashed_email: c6f768d61d96f508d9523bf28664cb64 +--- +about: + +Naisha worked on [Automating Quantifying the Commons][repository] as a developer for [Google +Summer of Code (GSoC) 2024](/programs/history/).
+GitHub: [`@naishasinha`][github] + +[repository]: https://github.com/creativecommons/quantifying +[github]: https://github.com/naishasinha diff --git a/content/blog/authors/Queen/contents.lr b/content/blog/authors/Queen/contents.lr new file mode 100644 index 000000000..e4e192797 --- /dev/null +++ b/content/blog/authors/Queen/contents.lr @@ -0,0 +1,11 @@ +username: Queen +--- +name: Queen Fawale +--- +md5_hashed_email: 86cfa08b8d93b4f90882a8c19d2f23f3 +--- +about: +Queen is a front-end engineer and currently an outreachy intern with Creative Commons. You can find me `@Queen` on [CC +Slack](/community/) and [Queen-codes][github] on GitHub. + +[github]:https://github.com/Queen-codes diff --git a/content/blog/authors/TimidRobot/contents.lr b/content/blog/authors/TimidRobot/contents.lr index f01458466..b2eae774f 100644 --- a/content/blog/authors/TimidRobot/contents.lr +++ b/content/blog/authors/TimidRobot/contents.lr @@ -5,9 +5,9 @@ name: Timid Robot Zehta md5_hashed_email: 5324367e4af9d821ff3b388c04c42e7e --- about: -Timid Robot Zehta (please call them "Timid Robot") is the Core Systems Manager -at [Creative Commons][creativecommons]. They are `@Timid Robot` on [CC +Timid Robot Zehta (please call them "Timid Robot") is the [Director of +Technology][ccperson] at Creative Commons. They are `@Timid Robot` on [CC Slack](/community/) and [TimidRobot][github] on GitHub. -[creativecommons]: https://creativecommons.org/author/timidcreativecommons-org/ +[ccperson]: https://creativecommons.org/person/timidcreativecommons-org/ [github]: https://github.com/TimidRobot diff --git a/content/blog/authors/ahmadbilaldev/contents.lr b/content/blog/authors/ahmadbilaldev/contents.lr index e37eccadf..cf78e2cb7 100644 --- a/content/blog/authors/ahmadbilaldev/contents.lr +++ b/content/blog/authors/ahmadbilaldev/contents.lr @@ -13,5 +13,5 @@ meetups, conferences and meeting new people. Cats are his weakness, and he is a sucker for well-engineered cars. Ahmad worked on [the CC WordPress -plugin](https://github.com/creativecommons/wp-plugin-creativecommons) as part +plugin](https://github.com/cc-archive/wp-plugin-creativecommons) as part of [Google Summer of Code (GSoC) 2019](/programs/history/). diff --git a/content/blog/authors/amandayclee/contents.lr b/content/blog/authors/amandayclee/contents.lr new file mode 100644 index 000000000..638846bef --- /dev/null +++ b/content/blog/authors/amandayclee/contents.lr @@ -0,0 +1,13 @@ +username: amandaycelee +--- +name: Amanda Lee +--- +md5_hashed_email: e259595bca0de9b89681541579f1e558 +--- +about: + +Amanda worked on [Create Local Ansible Dev Environment Using Docker][repository] as a developer for [Google +Summer of Code (GSoC) 2024](/programs/history/). She is `@amandayclee` on CC Slack and [amandayclee][amandayclee] on Github. + +[repository]: https://github.com/creativecommons/ansible-dev +[amandayclee]: https://github.com/amandayclee diff --git a/content/blog/authors/annatuma/contents.lr b/content/blog/authors/annatuma/contents.lr index d9b3ede7c..2735280e4 100644 --- a/content/blog/authors/annatuma/contents.lr +++ b/content/blog/authors/annatuma/contents.lr @@ -5,6 +5,7 @@ name: Anna Tumadóttir md5_hashed_email: c6b98be141f57ce877a7ae10595b0ae0 --- about: -Anna is the [Chief Operating Officer -(COO)](https://creativecommons.org/author/annacreativecommons-org/) at Creative -Commons. She's `@Anna` on the [CC Slack](/community/). +Anna is the [Interm CEO/Chief Operating Officer (COO)][ccperson] at Creative +Commons. She's `@Anna` on the [CC Slack](/community/). + +[ccperson]: https://creativecommons.org/person/annacreativecommons-org/ diff --git a/content/blog/authors/nimishbongale/contents.lr b/content/blog/authors/nimishbongale/contents.lr index 7b7edc01f..f5cfa5ec1 100644 --- a/content/blog/authors/nimishbongale/contents.lr +++ b/content/blog/authors/nimishbongale/contents.lr @@ -9,5 +9,5 @@ about: [Nimish Bongale](https://nimishbongale.github.io/) is a Technical Writing Intern at Creative Commons. He goes by `@nimishnb` on the CC Community Slack workspace. Nimish developed the website and documentation for [CC -Vocabulary](https://github.com/creativecommons/vocabulary/) as part of [Google +Vocabulary Legacy](https://github.com/cc-archive/vocabulary-legacy/) as part of [Google Season of Docs (GSoD) 2020](/programs/history/). diff --git a/content/blog/authors/obulat/contents.lr b/content/blog/authors/obulat/contents.lr index 0dd31c11c..68f34fb73 100644 --- a/content/blog/authors/obulat/contents.lr +++ b/content/blog/authors/obulat/contents.lr @@ -5,12 +5,12 @@ name: Olga Bulat md5_hashed_email: acd34b5434369aeaf31de8ea94368bf0 --- about: -[Olga](https://creativecommons.org/author/obulat/) is a developer based in -Istanbul, Turkey. She loves programming in Python and Javascript. Her main -areas of interest are web development, Natural Language Processing, languages, -geography and education. Apart from that, she is busy raising her (soon to be) -three kids. +Olga is a developer based in Istanbul, Turkey. She loves programming in Python +and Javascript. Her main areas of interest are web development, Natural +Language Processing, languages, geography and education. Apart from that, she +is busy raising her (soon to be) three kids. -Olga is worked on improving the [CC License -Chooser](https://github.com/creativecommons/cc-chooser) as part of [Outreachy -December 2019 - March 2020](/programs/history/). +Olga worked on improving the [ Chooser][chooser] as part of [Outreachy December +2019 - March 2020](/programs/history/). + +[chooser]: https://github.com/creativecommons/chooser diff --git a/content/blog/authors/precious/contents.lr b/content/blog/authors/precious/contents.lr index f67677d13..dfec32a69 100644 --- a/content/blog/authors/precious/contents.lr +++ b/content/blog/authors/precious/contents.lr @@ -5,8 +5,8 @@ name: Precious Oritsedere md5_hashed_email: 799674ebf72ebba137da36402f2bab93 --- about: -I am a front-end engineer. I build exceptional and problem-solving web applications. I am -`@Precious oritsedere` on [CC Slack](/community/) and [PreciousOritsedere][github] on GitHub. +I am a front-end engineer. I build exceptional and problem-solving web +applications. I am `@Precious oritsedere` on [CC Slack](/community/) and +[PreciousOritsedere][github] on GitHub. -[creativecommons]: https://creativecommons.org/author/saracreativecommons-org/ [github]:https://github.com/PreciousOritsedere diff --git a/content/blog/authors/sara/contents.lr b/content/blog/authors/sara/contents.lr index a304448e8..97edb862f 100644 --- a/content/blog/authors/sara/contents.lr +++ b/content/blog/authors/sara/contents.lr @@ -5,8 +5,8 @@ name: Sara Lovell md5_hashed_email: 898c4d3ca8cabbee04ffe00bde6df9ab --- about: -Sara is the Full-Stack Engineer at [Creative Commons][creativecommons]. She is +Sara is the [Full-Stack Engineer][ccperson] at Creative Commons]. She is `@sara` on [CC Slack](/community/) and [possumbilities][github] on GitHub. -[creativecommons]: https://creativecommons.org/author/saracreativecommons-org/ +[ccperson]: https://creativecommons.org/person/saracreativecommons-org/ [github]: https://github.com/possumbilities diff --git a/content/blog/authors/shafiya/contents.lr b/content/blog/authors/shafiya/contents.lr index 600dd22d0..74d67baf3 100644 --- a/content/blog/authors/shafiya/contents.lr +++ b/content/blog/authors/shafiya/contents.lr @@ -5,8 +5,8 @@ name: Shafiya Heena md5_hashed_email: f49628fb50324d628379b469c7f008c6 --- about: -Shafiya is the Systems Engineer at [Creative Commons][creativecommons]. She is +Shafiya is the [Systems Engineer][ccperson] at Creative Commons. She is `@shafiya` on [CC Slack](/community/) and [Shafiya-Heena][github] on GitHub. -[creativecommons]: https://creativecommons.org/author/shafiyacreativecommons-org/ +[ccperson]: https://creativecommons.org/person/shafiyacreativecommons-org/ [github]: https://github.com/Shafiya-Heena diff --git a/content/blog/categories/big-data/contents.lr b/content/blog/categories/big-data/contents.lr new file mode 100644 index 000000000..06b1c24f5 --- /dev/null +++ b/content/blog/categories/big-data/contents.lr @@ -0,0 +1 @@ +name: big-data \ No newline at end of file diff --git a/content/blog/categories/cc-software/contents.lr b/content/blog/categories/cc-software/contents.lr new file mode 100644 index 000000000..2c6ede234 --- /dev/null +++ b/content/blog/categories/cc-software/contents.lr @@ -0,0 +1 @@ +name: cc-software \ No newline at end of file diff --git a/content/blog/categories/gsoc-2024/contents.lr b/content/blog/categories/gsoc-2024/contents.lr new file mode 100644 index 000000000..1fef8e85e --- /dev/null +++ b/content/blog/categories/gsoc-2024/contents.lr @@ -0,0 +1 @@ +name: gsoc-2024 \ No newline at end of file diff --git a/content/blog/categories/outreachy-2022/contents.lr b/content/blog/categories/outreachy-2022/contents.lr new file mode 100644 index 000000000..050c74ccc --- /dev/null +++ b/content/blog/categories/outreachy-2022/contents.lr @@ -0,0 +1 @@ +name: outreachy-2022 diff --git a/content/blog/categories/outreachy-2024/contents.lr b/content/blog/categories/outreachy-2024/contents.lr new file mode 100644 index 000000000..291ae46ed --- /dev/null +++ b/content/blog/categories/outreachy-2024/contents.lr @@ -0,0 +1 @@ +name: outreachy-2024 diff --git a/content/blog/entries/2020-03-05-involucrate-gsoc-outreachy-es/contents.lr b/content/blog/entries/2020-03-05-involucrate-gsoc-outreachy-es/contents.lr index 945ff9d1c..af4f325b8 100644 --- a/content/blog/entries/2020-03-05-involucrate-gsoc-outreachy-es/contents.lr +++ b/content/blog/entries/2020-03-05-involucrate-gsoc-outreachy-es/contents.lr @@ -27,7 +27,7 @@ Las pasantías consisten en el desarrollo de un proyecto el cual debe ser llevad En las versiones pasadas de estos programas tuvimos excelentes resultados llevados a cabo por excelentes personas que pusieron toda su dedicación para concretar estos proyectos: ## GSoC 2019 -- [Wordpress Plugin](https://github.com/creativecommons/wp-plugin-creativecommons) por Ahmad Bilal +- [Wordpress Plugin](https://github.com/cc-archive/wp-plugin-creativecommons) por Ahmad Bilal - [CC Search Browser extension](https://github.com/creativecommons/ccsearch-browser-extension) por Mayank Nader - [CC Vocabulary](https://github.com/creativecommons/vue-vocabulary) por Dhruv Bhanushali - [Revamping the CC Chooser](https://github.com/creativecommons/cc-chooser) por Ari Madian diff --git a/content/blog/entries/2020-12-07-upcoming-changes-to-community/contents.lr b/content/blog/entries/2020-12-07-upcoming-changes-to-community/contents.lr index 5012ae82b..06cb7c773 100644 --- a/content/blog/entries/2020-12-07-upcoming-changes-to-community/contents.lr +++ b/content/blog/entries/2020-12-07-upcoming-changes-to-community/contents.lr @@ -51,7 +51,7 @@ With a smaller engineering team, we will need to support fewer projects. Please We will continue to actively develop the following projects: - [CC Search Browser Extension](https://github.com/creativecommons/ccsearch-browser-extension) (maintainer: Mayank Nader) -- [CC Open Source website](https://github.com/creativecommons/creativecommons.github.io-source) (maintainers: Zack Krida & Timid Robot Zehta) +- [CC Open Source website](https://github.com/creativecommons/ccos-website-source) (maintainers: Zack Krida & Timid Robot Zehta) - [CC WordPress base](https://github.com/creativecommons/creativecommons-base) & child themes (new maintainer: Zack Krida) - [CC Legal Database](https://github.com/creativecommons/legaldb) (maintainer: Timid Robot Zehta) - [CC Chooser](https://github.com/creativecommons/chooser) (maintainer: Zack Krida) @@ -59,7 +59,7 @@ We will continue to actively develop the following projects: - [License Buttons](https://github.com/creativecommons/licensebuttons/) (maintainer: Timid Robot Zehta) - [Platform Toolkit](https://github.com/creativecommons/mp/) (maintainer: Timid Robot Zehta) - [Vocabulary](https://github.com/creativecommons/vocabulary) (maintainers: Zack Krida & Dhruv Bhanushali) -- [WordPress Plugin](https://github.com/creativecommons/wp-plugin-creativecommons) (new maintainer: Zack Krida) +- [WordPress Plugin](https://github.com/cc-archive/wp-plugin-creativecommons) (new maintainer: Zack Krida) **Maintenance Mode** diff --git a/content/blog/entries/2022-11-11-calver-to-semver/contents.lr b/content/blog/entries/2022-11-11-calver-to-semver/contents.lr index 81b28238b..bb3c88296 100644 --- a/content/blog/entries/2022-11-11-calver-to-semver/contents.lr +++ b/content/blog/entries/2022-11-11-calver-to-semver/contents.lr @@ -66,7 +66,7 @@ example, NPM currently strips leading zeros which breaks CDN integration ([CalVer and CDN compatibility · Issue #588 · creativecommons/vocabulary][issue588]). -[issue588]: https://github.com/creativecommons/vocabulary/issues/588. +[issue588]: https://github.com/cc-archive/vocabulary-legacy/issues/588. ## Using SemVer diff --git a/content/blog/entries/2023-01-04-how-i-landed-my-first-internship/contents.lr b/content/blog/entries/2023-01-04-how-i-landed-my-first-internship/contents.lr index 6bec5b4e2..a6ab12682 100644 --- a/content/blog/entries/2023-01-04-how-i-landed-my-first-internship/contents.lr +++ b/content/blog/entries/2023-01-04-how-i-landed-my-first-internship/contents.lr @@ -4,6 +4,8 @@ categories: open-source collaboration community +outreachy-2022 +outreachy --- author: precious diff --git a/content/blog/entries/2023-02-01-outreachy-mid-point/contents.lr b/content/blog/entries/2023-02-01-outreachy-mid-point/contents.lr index 204af72c9..84fd9d313 100644 --- a/content/blog/entries/2023-02-01-outreachy-mid-point/contents.lr +++ b/content/blog/entries/2023-02-01-outreachy-mid-point/contents.lr @@ -4,6 +4,8 @@ categories: open-source collaboration community +outreachy-2022 +outreachy --- author: precious diff --git a/content/blog/entries/2023-08-25-machine-layer/contents.lr b/content/blog/entries/2023-08-25-machine-layer/contents.lr index 9628d9588..e2b42d59e 100644 --- a/content/blog/entries/2023-08-25-machine-layer/contents.lr +++ b/content/blog/entries/2023-08-25-machine-layer/contents.lr @@ -5,6 +5,7 @@ open-source collaboration cc-legal-tools gsoc-2023 +gsoc --- author: saurabh --- @@ -12,14 +13,13 @@ pub_date: 2023-08-28 --- body: -![GSoC 2023 and CC](gsoc2023cc.png) - Greetings, readers!🌟 I'm excited to share that as part of Google Summer of Code (GSoC) 2023, I had the incredible opportunity to contribute to the exciting project "CC Legal Tools: Machine-Readable Layer." This journey has been a remarkable blend of learning, coding, and collaboration, and I'm thrilled to share the highlights of this journey with you all. +![GSoC 2023 and CC](gsoc2023cc.png) ## Project Overview diff --git a/content/blog/entries/2024-05-28-creativecommons-org/contents.lr b/content/blog/entries/2024-05-28-creativecommons-org/contents.lr new file mode 100644 index 000000000..278e7e390 --- /dev/null +++ b/content/blog/entries/2024-05-28-creativecommons-org/contents.lr @@ -0,0 +1,196 @@ +title: New CreativeCommons.org launched 2023 September +--- +categories: +cc-legal-tools +cc-vocabulary +open-source +website +wordpress +--- +author: +sara +shafiya +TimidRobot +--- +pub_date: 2024-05-28 +--- +body: + +Creative Commons (CC) launched a new +[CreativeCommons.org](https://creativecommons.org/) website on 2023 September +27th. This relaunch included not just the website, but the entire technology +stack (platform, server, and website components). + + +## Improved platform + +The new website is hosted on AWS. This allowed us to design a more secure +network architecture between services and deploy/manage the services using +infrastructure as code. + + +## Improved services + +The services running the website were simplified and updated. The number of +distinct servers was reduced from six down to two. Previously, loading the +homepage required five services (HAProxy, Varnish, Apache2, PHP+FPM, and +MariaDB). The complexity of the old services made troubleshooting more +difficult. They were designed before Cloudflare began supporting us through +[Project Galileo](https://www.cloudflare.com/galileo/). The new website +requires only two services (Apache2 and MariaDB). + + +## Improved website components + + +### Vocabulary + +The website consists of a variety of components that use the Vocabulary design +system ([creativecommons/vocabulary][vocabulary]) to present a unified user +experience. This relaunch was the first implementation of the new Vocabulary. +It has returned to web core principals favoring semantic HTML and appropriately +scoped CSS styling. It keeps the style layer responsibilities firmly within the +CSS, rather than utilizing a framework like Bootstrap to add a myriad of +style-based classes to the HTML layer. Furthermore, JavaScript use has been +kept incredibly minimal, offering routes of behavior that can’t already be +accomplished via HTML and/or CSS, letting HTML and CSS do what they do best. +This simplicity improves performance and also lowers barriers for community +contributions. + +Accessibility was a priority, making the code more semantic already helps, but +we went further in ensuring that all the affordances you get from HTML aren’t +blocked or altered via opinionated (and often non-standard) frameworks. The +site performs better generally, and is much kinder to slower connection speeds. + +The new implementation of Vocabulary includes a new Information Architecture +and more stable UX approach for better visitor experiences. CC licensed media +is one of our strengths and as such it was important to allow proper +attribution to be baked into every instance of media rendering within the +design. This means that while the image or video may be important to the flow +of content, its attribution also gets a level of appropriate importance as +well, highlighting ways in which others might handle attribution and following +through on our own mission in the pursuit of better sharing at large. + +[vocabulary]: https://github.com/creativecommons/vocabulary + + +### WordPress + +The project utilizes a custom WordPress theme +([creativecommons/vocabulary-theme][vocabulary-theme]) that implements the new +Vocabulary design system. + +The theme utilizes the WordPress Classic Editor because of its long-term +stability and more stable UX. Gutenberg still does not adhere to adequate +Accessibility approaches, nor does it have a sense of stable +feature-completeness. This creates an unreliable landscape to build upon. +Gutenberg also requires one to build Block composition through React.js to +accomplish tasks that are far easier and more approachable with the standard +PHP templates that the Classic Editor is compatible with. This dramatically +improves the ability for a new contributor to help, and speeds up the +development process. + +To allow a degree of more varied page composition, Advanced Custom Fields was +utilized to more easily add, update, and version control custom fields across +pages and page templates. This strikes a balance between more complex page +composition, but within a more controllable set of circumstances. + +Plugins in general were cut dramatically. The legacy site contained 20 active +plugins, while this project relies on less than half, at 9, with hopeful +pathways to eventually cut that number even further. + +The site utilizes several custom content types and better taxonomies to split +up the UX flow of varied kinds of content creation, allowing for smoother +multi-author attribution, site-wide notices for fundraising and event +announcements, and better blog post organization and way-finding overall. + +[vocabulary-theme]: https://github.com/creativecommons/vocabulary-theme + + +### CC Legal Tools + +With the deployment of our new website, we also replaced the legacy ccEngine +with the new CC Legal Tools. The current legal tool landscape is refreshingly +simple with only seven tools (CC BY 4.0, CC BY-NC 4.0, CC BY-NC-ND 4.0, CC +BY-NC-SA 4.0, CC BY-ND 4.0, CC BY-SA 4.0, CC0 1.0). However since previous +versions of the licenses were adapted to specific jurisdictions (ported) and we +collaborate with the community to support many translations, the new CC Legal +Tools app manages over 30,000 documents! + +The project to rewrite the CC Legal Tools and replace the legacy ccEngine began +in 2020 with a request for proposals ([RFP: License Infrastructure - Google +Docs][rfp]). The [Caktus Group](https://www.caktusgroup.com/) began the new CC +Legal Tools using the Django Python web framework. The work was continued by +Timid Robot. Saurabh helped with RDF/XML generation ([CC Legal Tools: +Machine-Readable Layer — Creative Commons Open +Source](/blog/entries/2023-08-25-machine-layer/)). + +The new CC Legal Tools consist of two repositories: + +1. [creativecommons/cc-legal-tools-app][cc-legal-tools-app]: *Static site + generator using Django* +2. [creativecommons/cc-legal-tools-data][cc-legal-tools-data]: *Inputs and + outputs of the application* + +The legacy ccEngine consists of around 15,960 lines of Python 2. It was +developed and extended organically over time, resulting in a less coherent +codebase. The new CC Legal Tools has the benefit of hindsight and was +architected as a single application to meet all of current requirements of CC. +It consists of around 17,400 lines of Python 3 (including around 4,000 lines of +tests). Benefits of the new CC Legal Tools include: + +- Currently supported software (Python 3, Django 4.2, etc.) +- Simplified data model +- Improved translation handling +- Improved RDF/XML generation/management + +In particular, the fact that the new CC Legal Tools generate static assets is +noteworthy. Static assets can be hosted performantly with a very simple service +setup. + +[rfp]: https://docs.google.com/document/d/1mlgmjDorTEwgIRRrvILK3v0pTJbGx8fB5SE1yplrz3Y/edit +[cc-legal-tools-app]: https://github.com/creativecommons/cc-legal-tools-app +[cc-legal-tools-data]: https://github.com/creativecommons/cc-legal-tools-data + + +### Chooser + +The new chooser beta ([creativecommons/chooser][chooser]) was promoted to +production with the new header and footer from the Vocabulary design system for +a more uniform user experience. + +[chooser]: https://github.com/creativecommons/chooser + + +### FAQ & Platform Toolkit + +The FAQ ([creativecommons/faq](https://github.com/creativecommons/faq)) and +Platform Toolkit ([creativecommons/mp](https://github.com/creativecommons/mp)) +were updated to use the new header and footer from the Vocabulary design system +for a more uniform user experience. + + +## Improved development + +Utilizing infrastructure as code, we now have a much more robust staging +environment. This allows us to preview larger changes so that they can be +deployed to production with minimum risk. We also improved our local +development environment and content synchronization tooling +([creativecommons/index-dev-env][index-dev-env]). This means that not only did +we fix many old bugs, but when new bugs are identified, we can fix them more +rapidly! + +[index-dev-env]: https://github.com/creativecommons/index-dev-env + + +## Thank you + +Thank you to the people who directly contributed to the success of the new +website! + +- Nate, former Director of Communications & Community +- Sara, Full Stack Engineer +- Shafiya, Systems Engineer +- Timid Robot, Director of Technology +- *as well as many other previous staff, community contributors, and other + [supporters](/community/supporters/)!* diff --git a/content/blog/entries/2024-07-10-automating-quantifying/Automating - GSoC Logo.png b/content/blog/entries/2024-07-10-automating-quantifying/Automating - GSoC Logo.png new file mode 100644 index 000000000..ee091e064 Binary files /dev/null and b/content/blog/entries/2024-07-10-automating-quantifying/Automating - GSoC Logo.png differ diff --git a/content/blog/entries/2024-07-10-automating-quantifying/DFD.png b/content/blog/entries/2024-07-10-automating-quantifying/DFD.png new file mode 100644 index 000000000..065e2eefd Binary files /dev/null and b/content/blog/entries/2024-07-10-automating-quantifying/DFD.png differ diff --git a/content/blog/entries/2024-07-10-automating-quantifying/contents.lr b/content/blog/entries/2024-07-10-automating-quantifying/contents.lr new file mode 100644 index 000000000..d86ccf9da --- /dev/null +++ b/content/blog/entries/2024-07-10-automating-quantifying/contents.lr @@ -0,0 +1,189 @@ +title: Automating Quantifying the Commons: Part 1 +--- +categories: +gsoc-2024 +gsoc +big-data +quantifying-the-commons +cc-software +open-source +community +--- +author: NaishaSinha +--- +pub_date: 2024-07-10 +--- +body: + +![GSoC 2024](Automating - GSoC Logo.png) + +## Introduction +*** + +Quantifying the Commons, an initiative emerging from the UC Berkeley Data Science Discovery Program, +aims to quantify the frequency of open domain and CC license usage for future accessibility and analysis purposes +(Refer to the initial CC article for Quantifying **[here!][quantifying]**). +To date, the scope of the previous project advancements has not included automation or combined reporting, +which is necessary to minimize the potential for human error and allow for more timely updates, +especially for a system that engages with substantial streams of data.
+ +As a selected developer for Google Summer of Code 2024, +my goal this summer is to develop automation software for data gathering, flow, and report generation, +ensuring that reports are never more than 3 months out-of-date. This blog post serves as a technical journal +for my endeavor till the midterm evaluation period. **[Automating Quantifying the Commons: Part 2][part2]** will be posted after successful completion of the +entire summer program. + +## Pre-Program Knowledge and Associated Challenges +*** + +As an undergraduate CS student, I had not yet had any experience working with codebases +as intricate as this one; the most complex software I had worked on prior to this undertaking +was most probably a medium-complexity full-stack application. In my pre-GSoC contributions to Quantifying, I did successfully +implement logging across all the Python files (**[PR #97][logging]**), but admittedly, I was not familiar with a lot of the other modules that +were being used in these files. As a result, this caused minor inconveniences to my development process from the very beginning. +For example, not being experienced with operating system (OS) modules had me confused as to how I was supposed to +join new directories. In addition, I had never worked with such large streams of data before, so it was initially a +challenge to map out pseudocode for handling big data effectively. The next section elaborates on my development process and how I resolved these setbacks. + +## Development Process (Midterm) +*** + +### I. Data Flow Diagram Construction +Before starting the code implementation, I decided to develop a **Data Flow Diagram (DFD)**, which provides a visual +representation of how data flows through a software system. While researching effective DFDs for inspiration, I came across +a **[technical whitepaper by Amazon Web Services (AWS)][AWS-whitepaper]** on Distributed Data Management, and I found it very helpful in drafting +my own DFD. As I was still relatively new to the codebase, it helped me simplify +the current system into manageable components and better understand how to implement the rest of the project. + +![DFD](DFD.png) +This was the initial layout for the data directory flow; however, the more I delved into the development process, +the more the steps changed. I will present the final directory flow in Part 2 at the end of the program. + +### II. Identifying the First Data Source to Target +The main approach for implementing this project was to target one specific data source and complete its data extraction, analysis, +and report generation process before adding more data sources to the codebase. There were two possible strategies to consider: +(1) work on the easier data sources first, or (2) begin with the highest complexity data source and then add the easier +ones later. Both approaches have notable pros and cons; however, I decided to adopt the second strategy of +starting with the most complex data source first. Although this would take slightly longer to implement, it would simplify the process +later on. As a result, I began implementing the software for the **Google Custom Search** +data source, which has the largest number of data retrieval potential among all the other sources. + +### III. Directory Setup + Code Implementation +Based on the DFD, **[Timid Robot][timid-robot]** (my mentor) and I identified the directory process to be as such: within our `scripts` directory, we would have +separate sub-directories to reflect the phases of data flow, `1-fetch`, `2-process`, `3-report`. The code would then be +set up to interact between systems in chronological order. Additionally, a shared directory was implemented to optimize similar functions and paths.
+ +**`1-fetch`** + +As I mentioned in the previous sections, starting to code the initial file was a challenge, as I had to learn how to use +new technologies and libraries on-the-go. As a matter of fact, my struggles began when I couldn't even import the +shared module correctly. However, slowly but surely, I found that consistent research of available documentation as well +as constant insights from Timid Robot made it so that I finally understood everything that I was working with. There were +a few specific things that helped me especially, and I would like to share them here in case it helps any software +developer reading this post: + +1. **Reading Technical Whitepapers:** As I mentioned earlier, I studied a technical whitepaper by AWS to help me design my DFD. +From this, I realized that consulting relevant whitepapers by industry giants to see how they approach similar tasks +helped me a lot in understanding best practices to implementing the system. Here is another resource by Meta that I referenced, +called **[Composable Data Management at Meta][meta-whitepaper]** (I mainly used the _Building on Similarities_ section +to study the logical components of data systems). + +2. **Referencing the Most Recent Quantifying Codebase:** The pre-automation code that was already implemented by previous developers +for _Quantifying the Commons_ +was the closest thing to my own project that I could reference. Although not all of the code was relevant to the Automating project, +there were many aspects of the codebase I found very helpful to take inspiration from, especially when online research led to a +dead end. + +3. **Writing Documentation for the Code:** As a part of this project, I assigned myself the task of developing documentation for +the Automating Quantifying the Commons project (**[can be accessed here!][documentation]**). Heavily inspired by the "rubber duck debugging" +method, where explaining the code or problem step-by-step to someone or something will make the solution present itself, I decided to create documentation +for future developers to reference, in which I break down the code step-by-step to explain each module or function. I found that in +doing this, I was able to better understand my own code better. + +As for the license data retrieval process using the Google Custom Search API Key, +I did have a little hesitation running everything for the first time. +Since I had never worked with confidential information or such large data inputs before, +I was scared of messing something up. Sure enough, the first time I ran everything with the language and country parameters, +it did cause a crash, since the API query-per-day limit was crossed with one script run. As I continued to update +the script, I learned a very useful trick when it comes to handling big data: +to avoid hitting the query limit while testing, you can replace the actual API calls +with logging statements to show the parameters being used. This helps you +understand the outputs without actually consuming API quota, and it can help you identify bugs more easily.
+ +A notable aspect of this software is the directory organization. Throughout the process, I designed it so that the datasets are automatically stored within their +respective quarter's directories rather than being stored altogether. This ensures efficient organization in order for users to easily access in the future, +especially when the number of datasets multiplies. + +Upon successful completion of basic data retrieval and state management in Phase 1, +I felt much more confident about the trajectory of this project, and implementing +future steps and fixing new bugs became progressively easier. + +**`2-process`** + +The long-term goal of the Quantifying project is to have comprehensive datasets for each quarter, encompassing +license data that scales up to millions and even billions. For the `2-process` phase specifically, the aim is +to analyze and compare data between quarters to be able to display in the reports. However, given our Google Custom Search +API constraints as well as the time period we're working with for the GSoC period (most of this period is mainly +2024Q3), it is not possible to have a fully completed Phase 2. However, in order to deploy as complete of an automation software as possible, +I have set up a basic psuedocode that can be implemented +and built upon by future development efforts as more data is collected in the upcoming quarters/years. + +**`3-report`** + +As mentioned earlier, the Google Custom Search API constraints made it difficult to create a comprehensive and detailed dataset, so I plan to +initiate the development of a more fletched-out Google Custom Search post-GSoC, when more data can be accumulated (discussed further in the next section). +As of now, there are three main completed report visualization schemes: **(1)** Reports by Country, **(2)** Reports by License Type, +and **(3)** Reports by Language. Although the visualizations are basic in design, I made sure to incorporate accessibility into the +visualizations for a better user experience. This included adding elements like labels on top of the bars with specific number counts for better +readability and understanding of the reports. In addition, I included three key features in the reports codebase to cater to various possible +needs of the report users. + +1. **Key Feature #1:** I implemented command line arguments in which users can choose any quarter to visualize, as I believe this would be useful +for anyone in need of individual reports from previous quarters, not just reports from this quarter. +2. **Key Feature #2:** Successfully stores reports into the data reports directory specific to each quarter for optimal organization (similar to the +dataset organization in Phase 1). In this way, +reports from one quarter will not be mixed up with reports from another quarter, making it easier for users to navigate and use. +3. **Key Feature #3:** The program automatically generates and/or updates an individual `README` file for each quarter's reports. This `README` organizes +all generated report images within that quarter into one page, alongside basic report descriptions. + +## Mid-Program Conclusions and Upcoming Tasks +*** + +Overall, my understanding and skillset for this project increased ten-fold after completing all the phases for Google Custom Search. +Going into the second half of the Google Summer of Code program, I expect that I will complete the future data sources at a more efficient and faster rate, +given the license data sizes and my heightened expertise. In fact, as of now (the midterm evaluation point), I have completed +a relatively detailed Phase 1 for Flickr, which only involves 10 licenses. My biggest takeaway from the first half of the coding period is that rather than developing +a basic querying process and adding on later, it's easier to start off with a complex and detailed version before moving on to Phases 2 and 3. Additionally, using +the `shared` module within the scripts can be very beneficial to simplify the coding process. + +In the second half of the GSoC program, I plan to keep both of these takeaways in mind when developing scripts for the rest of the data sources. On a formal level, +the final goal for the end of GSoC 2024 is to have a working codebase for Phases 1, 2, and 3 of all data sources, +including a completed automation setup for these scripts. Due to the effectiveness of the current directory organization and report generation features, +I will be standardizing them across all data sources. + +Finally, after the software is complete to the extent that is possible during the GSoC period, +I plan to raise issues in the repository respective to all the next steps that +could be taken post-GSoC by open-source developers for a more comprehensive software system. + +So far, my journey at Creative Commons has significantly enhanced my skillset as a software developer, and I have never felt more motivated to take on more challenging tasks. +I'm looking forward to more levels of growth and accomplishments in the second half of the program. +I'll be back with Part 2 at the end of the summer with an updated, completed project! + +## Additional Readings +*** + +- [Automating Quantifying the Commons: Part 2][part2] | Author: Naisha Sinha | Aug. 2024 +- [Data Science Discovery: Quantifying the Commons][quantifying] | Author: Dun-Ming Huang (Brandon Huang) | Dec. 2022 + +[quantifying]: https://opensource.creativecommons.org/blog/entries/2022-12-07-berkeley-quantifying/ +[part2]: https://opensource.creativecommons.org/blog/entries/2024-08-22-automating-quantifying/ +[logging]: https://github.com/creativecommons/quantifying/pull/97 +[AWS-whitepaper]: https://docs.aws.amazon.com/whitepapers/latest/microservices-on-aws/distributed-data-management.html +[meta-whitepaper]: https://engineering.fb.com/2024/05/22/data-infrastructure/composable-data-management-at-meta/ +[timid-robot]: https://opensource.creativecommons.org/blog/authors/TimidRobot/ +[documentation]: https://unmarred-gym-686.notion.site/Automating-Quantifying-the-Commons-Documentation-441056ae02364d8a9a51d5e820401db5?pvs=4 + + + + + diff --git a/content/blog/entries/2024-07-19-create-local-ansible-dev-env/contents.lr b/content/blog/entries/2024-07-19-create-local-ansible-dev-env/contents.lr new file mode 100644 index 000000000..265cd999f --- /dev/null +++ b/content/blog/entries/2024-07-19-create-local-ansible-dev-env/contents.lr @@ -0,0 +1,64 @@ +title: Local Environment Creation using Ansible and Docker: Part 1 +--- +categories: +gsoc-2024 +gsoc +open-source +community +--- +author: amandayclee +--- +series: gsoc-2024-ansible-local-dev +--- +pub_date: 2024-07-18 +--- +body: + +This project explores how Creative Commons +(CC) uses Ansible, an automated system administration tool, to build a local development environment. It is part of Google Summer of Code (GSoC) 2024. + +
+ GSoC 2024 +
+ +# Project Objective +## Project Background + +[This project][project] aims to establish a local development environment that closely mirrors our production setup at CC. Currently, CC uses Salt Stack for configuration management. However, the team is evaluating other tools for various reasons. In this project, we explored Ansible, renowned for its simplicity and robust automation capabilities. We combined Ansible with Docker containers to streamline and secure development processes, creating lightweight, isolated environments for running applications. + +## Challenges and Learning Opportunities + +Before this project, I didn't have exposure to professional DevOps practices, so this project has been a significant learning experience for me. It focuses on the deployment phase of the DevOps lifecycle, particularly provisioning (setting up servers) and configuration management (managing software and settings). During our early stage exploration, we performed manual provisioning and concentrated on utilizing Ansible for configuration management. Our primary goal is to containerize existing applications, packaging them with their dependencies into Docker containers. Ansible itself operates within a container and manages other containers via SSH. + +![Server Structure](server-structure.png) +*This architecture diagram is designed by my mentor and project lead [Shafiya][Shafiya].* + +### Week-by-Week Progress + +I began by following the [Docker][Docker] and [Ansible][Ansible] setup guides from the official documentation to successfully deploy an initial `ansible` container in [Creating Initial Structure for Ansible][PR#9]. This step was crucial for gaining a foundational understanding of Ansible's basic functionality and setup within a containerized environment. + +In the second week, I separated the existing [`index-dev`][index-dev] repository, which is the local development environment for current CreativeCommons.org, into individual containers for the `web` server and `database` server in [Setting Up Ansible Environment and Hosts][PR#11]. At the same time, I started investigating the setup of a [Bastion server][Bastion] and its integration into our system, aiming to enforce a security-focused approach for controlling access to a private network. + +In the third week, I established SSH access between the local machine and `web`, `database`, and `ansible` servers with my mentor Shafiya's guidance in [Setting Up SSH For `web` and `database` and Integrate with `ansible`][PR#12]. This step was crucial for enabling secure, automated management of the containers from the Ansible container. One important lesson I learned from Shafiya is to build things from scratch, making frequent commits that document your thought process, rather than trying to put everything together at once and complicating matters. + + +In the fourth week, I started writing Ansible playbooks and moved several configurations originally located in the `web` Dockerfile to the playbook. Combining Dockerfiles and Ansible playbooks is a common best practice: **Dockerfiles are responsible for building the base image, including the OS and basic tools, while Ansible playbooks handle the application and service configurations.** However, this part took longer than expected, so we had to extend the work for one more week. Looking back, it was likely because I had no previous experience in developing using LAMP (Linux, Apache, MySQL, PHP) stack, and didn't know how to properly configure each component, which prevented me from successfully launching the services. As a result, I had to review the `index-dev` repo and what Shafiya and I did in the previous week, and finally got the service to start up correctly in [Creating A Playbook to Configure Wordpress Over Apache2][PR#13]. + +### Communication and Collaboration in Open Source +The CC team, including mentor Shafiya and team members [Timid Robot][Timid Robot] and [Sara][Sara], provided valuable insights into system design and broader architectural considerations. Weekly sync meetings and the flexibility to schedule 1:1 sessions facilitated smooth progress. The team provided clear documentation and actively engaged in public Slack channels, making it easy for any contributor to get involved and stay informed. + +## Conclusion and Next Steps +Moving forward, the focus will be on refining the Ansible playbooks, addressing any bugs or issues, and working on security and scalability concerns. The goal is to deliver a robust and efficient local development environment that closely mirrors the production setup. I'll continue contributing to the community and providing detailed documentation to support future developers in this project. + +[Ansible]: https://docs.ansible.com/ansible/latest/getting_started/index.html +[Docker]: https://docs.docker.com/guides/getting-started/ +[index-dev]: https://github.com/creativecommons/index-dev-env +[Bastion]: https://ovh.github.io/the-bastion/index.html +[Shafiya]: https://opensource.creativecommons.org/blog/authors/shafiya/ +[Timid Robot]: https://opensource.creativecommons.org/blog/authors/TimidRobot/ +[Sara]: https://opensource.creativecommons.org/blog/authors/sara/ +[project]: https://github.com/creativecommons/ansible-dev +[PR#9]: https://github.com/creativecommons/ansible-dev/pull/9 +[PR#11]: https://github.com/creativecommons/ansible-dev/pull/11 +[PR#12]: https://github.com/creativecommons/ansible-dev/pull/12 +[PR#13]: https://github.com/creativecommons/ansible-dev/pull/13 \ No newline at end of file diff --git a/content/blog/entries/2024-07-19-create-local-ansible-dev-env/gsoc-banner.png b/content/blog/entries/2024-07-19-create-local-ansible-dev-env/gsoc-banner.png new file mode 100644 index 000000000..5fe618455 Binary files /dev/null and b/content/blog/entries/2024-07-19-create-local-ansible-dev-env/gsoc-banner.png differ diff --git a/content/blog/entries/2024-07-19-create-local-ansible-dev-env/server-structure.png b/content/blog/entries/2024-07-19-create-local-ansible-dev-env/server-structure.png new file mode 100644 index 000000000..f12fedcb5 Binary files /dev/null and b/content/blog/entries/2024-07-19-create-local-ansible-dev-env/server-structure.png differ diff --git a/content/blog/entries/2024-08-22-automating-quantifying/Automating - GSoC Logo.png b/content/blog/entries/2024-08-22-automating-quantifying/Automating - GSoC Logo.png new file mode 100644 index 000000000..ee091e064 Binary files /dev/null and b/content/blog/entries/2024-08-22-automating-quantifying/Automating - GSoC Logo.png differ diff --git a/content/blog/entries/2024-08-22-automating-quantifying/Final DFD.png b/content/blog/entries/2024-08-22-automating-quantifying/Final DFD.png new file mode 100644 index 000000000..826c34ecd Binary files /dev/null and b/content/blog/entries/2024-08-22-automating-quantifying/Final DFD.png differ diff --git a/content/blog/entries/2024-08-22-automating-quantifying/contents.lr b/content/blog/entries/2024-08-22-automating-quantifying/contents.lr new file mode 100644 index 000000000..5f7c2ea08 --- /dev/null +++ b/content/blog/entries/2024-08-22-automating-quantifying/contents.lr @@ -0,0 +1,139 @@ +title: Automating Quantifying the Commons: Part 2 +--- +categories: +gsoc-2024 +gsoc +big-data +quantifying-the-commons +cc-software +open-source +community +--- +author: NaishaSinha +--- +pub_date: 2024-08-22 +--- +body: + +![GSoC 2024](Automating - GSoC Logo.png) + +## Introduction: Midterm Recap +*** + +This post serves as a technical journal for the development process of the +concluding stretch of Automating Quantifying the Commons, a project initiative +for the 2024 Google Summer of Code program. Please visit **[Part 1][part1]** for more context +if you haven't already done so. + +At the point of the midterm evaluation, I successfully completed Phases 1, 2, and 3 +(`fetch`, `process`, and `report`) of the Google Custom Search (GCS) data source, with a working report `README` generation +for each quarter. My documented goal for the second half of the period was to complete a baseline automation +software for these processes across all data sources. + + +## Development Process +*** + +### I. Midpoint Reassessment + +If you read my previous post, you might have seen that my next steps involved completing the phases for the remaining data sources. +However, I soon realized that the GCS phases, along with the base analysis and visualization code from the Data Discovery Program, +already serve as a standard reference for these tasks. Given that the primary goal of this project is to develop automation software +for these phases, my mentor suggested shifting the focus of the final time period towards programming the Git functions for automation. +This approach, which will require more time and effort, will ensure that anyone working on the remaining data sources can easily integrate +them using the existing code as a reference. + +### II. GitHub Actions Development +We defined GitHub Actions to host our CI/CD workflows, and since I had never used YAML before, +I needed to learn and familiarize myself with this new technology. Learning YAML presented challenges, +particularly in developing the Git automation. My mentor emphasized focusing on the Git programming due to these challenges. +For example, I encountered errors during workflow runs without clear ways to debug them. + +In my previous post, I shared three strategies that helped me familiarize myself with new technology during the first half of the summer. Here, I’m sharing two additional strategies that were particularly useful for GitHub Actions programming: + +1. **GitHub Actions Extension for Visual Studio Code:** As I was using VSCode for development, I initially struggled to debug issues during workflow runs. Discovering the GitHub Actions Extension for VSCode was a game-changer. This extension highlights issues in the workflow, making it much easier to diagnose and fix problems. I highly recommend searching extensions for any development task, as having relevant tools can make programming much easier. + +2. **Creating Mini-Tasks for Experimentation:** I set up my own GitHub repository with minimal, functional code to experiment with GitHub Actions in a low-risk environment. This approach facilitated easier debugging and comparison, helping me understand why certain things weren’t working. Although I gained more repository privileges after being accepted for GSoC, I still didn’t have the same access level as my mentor. By using a separate repository, I gained a better understanding of GitHub Actions and was able to interpret error logs more effectively. For instance, I realized that the automation wasn’t working initially due to outdated repository secrets, which I discovered without access to the secrets. + +After successfully compiling the initial steps, I focused on refining the scripts for optimal performance. I moved the commit functions into a shared module, which reduced the risk of crashes by allowing functions to be called within individual scripts rather than directly in the YAML workflow. Once the workflows ran successfully, I implemented Cron functions to schedule them quarterly. + +### III. Engineering a Custom Error Handling and Exception System +A key innovation in this project was the creation of a custom `QuantifyingException` class tailored specifically for the unique needs of the data pipeline. +Unlike generic exceptions, this specialized exception class was designed to capture and handle errors that are particular to the Quantifying process, such as data inconsistencies, +API rate limits, and file handling errors. By centralizing these exceptions within QuantifyingException, I ensured that all three phases could consistently manage errors in a coherent and structured manner. +While testing this system across all phases, I made sure to purposely include "edge-case" errors upon commits to guarantee that the system could handle all these errors. + +Upon completion of a robust error and exception handling system, I completed all phase outlines of the remainder of the data sources. For fetching data from these sources, I have developed +codebases combining the GCS fetch system and the original Data Discovery API fetching for a complete fetching system. However, it should be noted that I have not actually fetched data from these +APIs using the new codebase, as Timid Robot will undertake an initiative to add GitHub bots for the API keys after the GSoC period — this is due to best practice purposes, as it is fundamental +to create dedicated accounts for clear API usage and automated git commits. Therefore, these fetch files may need to be slightly tweaked after that, which will be discussed in **Next Steps**. +However, I have made sure to utilize fake data to ensure that the third phase successfully generates reports within the respective README file for ALL data sources. + +### IV. Finalized Flow of System + Data +In Part 1, I had shared the initial data flow diagram (DFD) for arranging the codebase. By the end of the program, however, the DFD and the overall system had solidified into something different. +Below is the final diagram for data flow, which establish an official framework for future endeavors. + +![DFD](Final DFD.png) + +## Final Conclusions +*** + +### I. All Deliverables Completed Over the Course of the Program + +Although this 12-week period allowed significant expansion of the Quantifying codebase, there were still time and resource constraints that we had to consider; primarily, the lack +of data we could collect using the given APIs over this time period. However, as mentioned earlier, given strategic implementations, I was able to still complete the summer goal of developing a baseline +automation software for data gathering, flow, and report generation, ensuring script runs on a quarterly basis. The **Next Steps** section will elaborate on how this software will be solidified over +the upcoming quarters and years. + +130+ commits, 7,615+ net code additions, and 360+ hours of work later, I present ten pivotal deliverables that I have completed over the summer period: + +| Deliverable | Description| +| ------------- | ------------- | +| Phase 1: Fetch Data | Building on previous efforts in the Quantifying initiative, this phase efficiently fetches raw data from various data sources using APIs. The retrieved data is then stored in a structured CSV format, preparing it for processing and analysis. | +| Phase 2: Process Data (Outline) | This phase focuses on analyzing the fetched data between quarters. Since only `2024Q3` data (07/01/2024 - 09/30/2024) could comprehensively be generated during the summer period, a psuedocode outline of analysis was developed. Although this phase will be further solidified as more quarters and years pass by, a base error system was tested and implemented during the GSoC period to ensure thoroughness for this phase. | +| Phase 3: Generate Reports | The final phase successfuly creates visualizations and reports based on the generated datasets. These reports are designed to present key findings and trends in a clear, concise manner, and have been designed to automatically be integrated into a quarterly README file to provide a comprehensive overview of license data across data sources. | +| Shared Module | Created a singular, shared module to organize and streamline the codebase, allowing different directories, paths, and components to be imported through that module across different files.| +| Directory Sequence (OS) | Using Operating System (OS) Modules, the codebase effectively facilitates the interaction between all three phases, ensuring smooth communication of 10 different data sources with their respective data storages.| +| Automation using GitHub Actions CI/CD | All three phases of the project — data fetching, processing, and reporting — have been automated using YAML scripts in GitHub Actions. This CI/CD pipeline ensures that every update to the codebase triggers the entire workflow, from data retrieval to the generation of final reports, maintaining consistency and reliability across the process. Cron functions are used to ensure that these scripts are run every quarter in a timely manner. | +| Custom Error & Exception Handling System | Implemented a custom exception system that centralizes the error-handling logic, keeping the codebases more specific, maintainable, and consistent overall. This system has been thoroughly tested and verified across all three phases. | +| Project Directory Tree | Added a structured layout of the project (hierarchical representation of directories and files with descriptive comments), which provides developers with a clear understanding of the project's organization and help them navigate through different components easily. | +| Data Flow + System Design | Finalized an overall data flow and system design diagram to establish an official framework for the codebase.| +| Comprehensive Documentation | This document was developed to serve as a reference guide for any contributors having questions or needing detailed clarification on specific topics within the Quantifying codebase — each section has its own page with expanded information. It also includes external references and documentation regarding the languages and tools used for this project. | + + +### II. Acknowledgements, Impact, Next Steps +This project would not have been possible without the constant guidance and insights of my mentors: **[Timid Robot Zehta][timid-robot]** (lead), **[Shafiya Heena][shafiya]** (supporting), and **[Sara Lovell][sara]** (supporting). +I appreciate how they created a safe space for working since the very beginning. I've never felt hesitant to ask questions +and have never felt out-of-place working in the organization, despite my introductory-level skillset at the start. In fact, this allowed +me to feel open to ask questions and be able to undertake side-projects that facilitated my growth. I truly believe that being able to work in an environment like this +has played a large role in my ability to perform well, and this was the sole reason for the overall fast progress and depth of my deliverables. + +As for overall impact, it is very evident that Creative Commons is integral to facilitating the sharing and utilization of creative works worldwide. With over 2.5 billion +licenses globally, Creative Commons and its open-source inititives hold heavy impact, promising to empower researchers, policymakers, and stakeholders with up-to-date insights into the global +usage patterns of open doman and CC-licensed content. Therefore, I'm looking forward to witnessing the direct influence this project holds in paving the way for future advancements +in leveraging open content licenses globally. I am extremely grateful and honored to be able to play such a major role in contributing to this organization, and am excited to see +future contributions I facilitate alongside other CC open-source developers. + +As for next steps, I am opening several post-GSoC issues in the Quantifying repository that can be worked on by any open-source contributor. +These issues cover some of the necessary adjustments that need to be made once we cross certain time periods and codebase additions. +If you're interested in getting involved, please visit the **[Issues][issues]** page linked for your convenience. +Your contributions will be invaluable as we continue to enhance and expand this project, +and I’m eager to see the innovative solutions and improvements that will unfold these upcoming years! + +## Additional Readings +*** + +- [Automating Quantifying the Commons: Part 1][part1] | Author: Naisha Sinha | Jul. 2024 +- [Data Science Discovery: Quantifying the Commons][quantifying] | Author: Dun-Ming Huang (Brandon Huang) | Dec. 2022 + +[quantifying]: https://opensource.creativecommons.org/blog/entries/2022-12-07-berkeley-quantifying/ +[timid-robot]: https://opensource.creativecommons.org/blog/authors/TimidRobot/ +[shafiya]: https://opensource.creativecommons.org/blog/authors/shafiya/ +[sara]: https://opensource.creativecommons.org/blog/authors/sara/ +[part1]: https://opensource.creativecommons.org/blog/entries/2024-07-10-automating-quantifying/ +[issues]: https://github.com/creativecommons/quantifying/issues + + + + + diff --git a/content/blog/entries/2024-08-23-create-local-ansible-dev-env/contents.lr b/content/blog/entries/2024-08-23-create-local-ansible-dev-env/contents.lr new file mode 100644 index 000000000..b8e80f602 --- /dev/null +++ b/content/blog/entries/2024-08-23-create-local-ansible-dev-env/contents.lr @@ -0,0 +1,52 @@ +title: Local Environment Creation using Ansible and Docker: Part 2 +--- +categories: +gsoc-2024 +gsoc +open-source +community +--- +author: amandayclee +--- +series: gsoc-2024-ansible-local-dev +--- +pub_date: 2024-08-23 +--- +body: + +
+ GSoC 2024 +
+ +# Midterm Recap +I successfully created customized Dockerfiles and a docker-compose.yml for `web`, `database`, and `ansible` for the past 6 weeks. However, to better replicate our production environment, which uses an AWS RDS instance, we decided to remove the customized Dockerfile for database, as SSH access is not required for the database host in this setup. + +### Week-by-Week Progress +Following our initial architecture design, I began working on building a bastion server. One of the key lessons I learned during this process was the value of simplicity. For instance, I had to assess the trade-offs between creating a custom Dockerfile and using a prebuilt image maintained by the community. In the world of DevOps, some terms are often loosely defined. For example, during my research on bastion servers, I encountered various use cases such as integrating MFA, logging, and other security features. However, these were beyond the scope of our current project. + +For this project, we are building a bastion server primarily to serve as a secure gateway for managing access to internal servers. This specific requirement dictated a more straightforward implementation. In this context, I also came across the concept of "YAGNI" (You Aren’t Gonna Need It), which reminds us to avoid adding unnecessary features until they are actually required. Along the way, while working with Creative Commons (CC), I learned an important lesson: **with so many tools, software, and technologies available, it’s crucial to focus on implementing configurations and solutions that are tailored specifically to our environment and requirements.** + +Before setting up the bastion server, it's also very important to understand the different SSH configuration options and choose the one that best meets our security and convenience needs. For instance, passwordless SSH enhances security and convenience by enabling SSH key-based authentication, but it requires public key configuration on each server, which can be cumbersome in larger environments. SSH Agent, on the other hand, improves the security and management of private keys by keeping them in memory across multiple connections. However, it requires running the SSH Agent locally and loading keys, adding some complexity to the setup. We ultimately decided to use ProxyJump because it offers centralized control and simplifies multi-hop connections through a bastion server, which provides strong security and convenience. While ProxyJump requires moderate configuration of both the bastion and target servers, it excels in supporting multi-hop connections and ensuring secure access to internal servers. + +We finalized these details in the [Bastion Container Creation][PR#14]. + +The next step was to explore the best approach for integrating Ansible with Docker to closely mirror a production environment. We maintained our manual provisioning approach and focused on three key integration strategies. + +1. Option 1 involves having Ansible manage containers directly through the Docker network, where all services (`bastion`, `ansible`, `web`, `db`) operate within the same network. Ansible handles the management of the web and db containers using their container names or IPs, with the bastion server acting as a jump host only when necessary. This approach treats each container as an independent host, with Ansible responsible for installing and configuring the necessary software. +2. Option 2 leverages the `community.docker.docker_container_exec` module to execute commands within Docker containers via Ansible playbooks. This method allows for application installation and configuration tasks to be performed directly inside the containers. +3. Option 3 involves running only the bastion and Ansible services in Docker, while using Ansible to provision the web and db services. Ansible connects to these containers through the bastion server, allowing it to manage and configure the web and db as external resources. + +When comparing these options, Option 1 manages applications within containers at the application layer, offering fine-grained control and simplifying setup in a unified environment. Option 2 operates at the Docker layer, providing greater flexibility and portability, ideal for quick deployments. Option 3 provides the best isolation between services, closely simulating a production environment with enhanced security, but it requires a more complex setup. + +After careful consideration, we decided to proceed with Option 1, which shifts most configuration tasks from the Dockerfile to Ansible playbooks. As I write this post, I am in the process of implementing these playbooks to configure the containers. You can follow the ongoing development in this [repository][Repo]. + +# Acknowledgments +This experience has provided me with practical skills in implementing real-world DevOps projects. I truly enjoy learning all this knowledge outside of my daily job and dedicating my personal time to something meaningful, which is often not covered in school. If this project succeeds as a proof of concept, I can gather more feedback from users, specifically open-source developers, to enhance this setup. I mentioned this in my previous blog post, but I can’t emphasize enough how grateful I am to [Shafiya][Shafiya], [Timid Robot][Timid Robot], and [Sara][Sara] for their guidance, and to Google Summer of Code for giving me the opportunity to contribute to open source. As a content creator who both produces and enjoys various open content online, I am incredibly excited and honored to contribute my technical expertise to CC. +Thanks to CC’ impact on society, I am committed to continually advancing my technical skills and supporting this organization in the long term. I look forward to continuing my involvement in the open-source community! + + +[PR#14]: https://github.com/creativecommons/ansible-dev/pull/14 +[Repo]: https://github.com/creativecommons/ansible-dev/ +[Shafiya]: https://opensource.creativecommons.org/blog/authors/shafiya/ +[Timid Robot]: https://opensource.creativecommons.org/blog/authors/TimidRobot/ +[Sara]: https://opensource.creativecommons.org/blog/authors/sara/ diff --git a/content/blog/entries/2024-08-23-create-local-ansible-dev-env/gsoc-banner.png b/content/blog/entries/2024-08-23-create-local-ansible-dev-env/gsoc-banner.png new file mode 100644 index 000000000..5fe618455 Binary files /dev/null and b/content/blog/entries/2024-08-23-create-local-ansible-dev-env/gsoc-banner.png differ diff --git a/content/blog/entries/2024-08-23-create-local-ansible-dev-env/server-structure.png b/content/blog/entries/2024-08-23-create-local-ansible-dev-env/server-structure.png new file mode 100644 index 000000000..f12fedcb5 Binary files /dev/null and b/content/blog/entries/2024-08-23-create-local-ansible-dev-env/server-structure.png differ diff --git a/content/blog/entries/2025-01-15-skipping-gsoc-2025/contents.lr b/content/blog/entries/2025-01-15-skipping-gsoc-2025/contents.lr new file mode 100644 index 000000000..f4ff5471f --- /dev/null +++ b/content/blog/entries/2025-01-15-skipping-gsoc-2025/contents.lr @@ -0,0 +1,58 @@ +title: Skipping Google Summer of Code (GSoC) 2025 +--- +categories: +gsoc +open-source +community +--- +author: TimidRobot +--- +pub_date: 2025-01-15 +--- +body: + +The Creative Commons (CC) technology team regrets to announce **we will not be +participating in Google Summer of Code (GSoC) 2025**. While the program remains +excellent, we do not have the resources to participate this year and meet our +core responsibilities. + +We are grateful to Google for the program and have found incredible value in +participating in past years. We look forward to participating in future years. +We are thankful for the work and time of contributors. This is not an exciting +announcement, but we will be better equipped to engage with work programs in +the future. + + +## Preparing to re-engage + +In addition to revamping our CC Open Source website during the first quarter of +this year, we will also be refreshing our structured community involvement, and +improving our project lead resources. + +Our CC Open Source website is in the process of being updated to be less +technologically complex and to leverage the current Vocabulary design system +([creativecommons/vocabulary][vocabulary]). + +Our structured community involvement has languished since the technology team +was downsized due to the COVID pandemic (202-12-07 [Upcoming Changes to the CC +Open Source Community — Creative Commons Open Source][changes]). We will be +simplifying community involvement so that we can be more responsive with +increased visibility. + +The most resource intensive period of a work program is the application phase. +During this time there is a deluge of activity that has often exceeded our +capacity. Developing our project lead resources will allow us to better set +expectations, ease communications, and better point applicants on productive +trajectories. + +[vocabulary]: http://github.com/creativecommons/vocabulary +[changes]: https://opensource.creativecommons.org/blog/entries/2020-12-07-upcoming-changes-to-community/ + + +## Past participation + +For information on the excellent work completed during past participations, +please see: [Open Source Work Programs: History — Creative Commons Open +Source][history]. + +[history]: https://opensource.creativecommons.org/programs/history/ diff --git a/content/blog/entries/2025-03-06-AWS-RDS-blog-post/contents.lr b/content/blog/entries/2025-03-06-AWS-RDS-blog-post/contents.lr new file mode 100644 index 000000000..49d20d664 --- /dev/null +++ b/content/blog/entries/2025-03-06-AWS-RDS-blog-post/contents.lr @@ -0,0 +1,116 @@ +title: Migrating from MariaDB 10.4 to 10.11 on AWS RDS + +--- +categories: +open-source +collaboration +--- +author: shafiya +--- +pub_date: 2025-03-24 +--- +body: +As part of AWS’s request to migrate the RDS DB engine from MariaDB 10.4 to 10.11, this blog post provides a detailed, step-by-step guide to ensure a smooth transition. We’ll cover the pre-migration steps, the actual upgrade process, and post-migration verification to minimize downtime and potential issues. + +Let’s dive in! + +## Pre-Migration Steps +Before performing the upgrade, it’s essential to ensure a structured migration plan, especially if your environment has customized database parameters. Follow these preliminary steps: +- Create a DB Parameter Group – Customizes database-specific settings for the new engine version. +- Create an Option Group – Manages additional features like replication and logging. +- Backup and Test – Take a snapshot of the existing database to prevent data loss. + +### Create a DB Parameter Group +RDS DB Parameter Groups allow you to configure database-specific parameters, such as memory, cache, and other DB settings. You need to create a custom DB Parameter Group for MariaDB 10.11 because different versions require different settings. + +**How to Create a DB Parameter Group** +- Login to AWS Management Console + - Go to the RDS service in the AWS Management Console. +- Navigate to Parameter Groups + - In the left navigation pane, under Databases, select Parameter Groups. +- Create a New Parameter Group + - Click on Create parameter group. + - Parameter group family: Choose mariadb10.11 from the dropdown. + - Group name: Provide a meaningful name like webserver-stage-rds parameters-mariadb-10-11. + - Description: Optionally add a description such as "Custom Parameter Group for MariaDB 10.11." + - Click Create. +- Modify the Parameters + - Once the parameter group is created, click on it to edit. + - Modify the parameters as per your application’s requirements, e.g., change innodb_buffer_pool_size,time_zone, etc., to optimize for the new version. + - Click Save changes once done. + +### Create an Option Group + +Option Groups are a collection of database options (such as replication, backups, and logging) that you can apply to RDS instances. To migrate from 10.4 to 10.11, you need to create and associate an Option Group with the new engine version. + +**How to Create an Option Group** +- Go to Option Groups in RDS + - In the AWS Management Console, go to RDS and then Option Groups under the Databases section. +- Create an Option Group + - Click Create group. + - Option group name: Provide a name like default:mariadb-10-11. + - Engine version: Select MariaDB 10.11. + - Click Create. +- Add Options to the Group + - Select the new Option Group you just created. + - Click Add option to save the selected options. + + +## Perform the MariaDB Version Upgrade + + Once you’ve created the required DB Parameter Group and Option Group, you’re ready to perform the migration from MariaDB 10.4 to 10.11. + +### How to Perform the Migration +- Backup Your Database + - It’s important to create a snapshot of your current DB instance before starting the upgrade process. This ensures that you can roll back in case of any issues. + - Go to your RDS instance and click on Actions → Take Snapshot. +- Modify the DB Instance to Use the New Version + - Navigate to Databases in the AWS RDS dashboard. + - Select the DB instance you want to upgrade. + - Click Modify at the top right. + - Under DB Engine Version, choose 10.11 from the drop-down. + - Under DB Parameter Group, select the custom parameter group created for 10.11. + - Under Option Group, select the newly created Option Group for MariaDB 10.11. + - Click Continue. +- Apply Changes + - Choose whether you want the changes to apply immediately or during the next maintenance window. For minimal downtime, apply during the maintenance window. + - Review the changes and click Modify DB Instance. +- Reboot the Instance (if necessary) + - Once the modification is complete, your DB instance might need to be rebooted for the changes to take effect. Confirm and reboot if prompted. + +### Verify the Migration +After the upgrade is complete, it’s time to verify the migration. +- Check DB Engine Version +- Check Application Performance + - Test your application to ensure that it works properly with the new MariaDB version. +- Review Logs + - Check the RDS logs to verify that no errors have occurred during the upgrade process. + + +## Post-Migration Clean-Up +- Delete Old Parameter and Option Groups (if not required) + - Once the migration is successful and tested, you can clean up unused Parameter and Option Groups to avoid unnecessary overhead. +- Monitor and Scale + - Monitor the instance for any potential issues and scale the resources (e.g., CPU, memory) if required based on the performance of MariaDB 10.11. + + +## Conclusion +Migrating from MariaDB 10.4 to 10.11 on AWS RDS is a straightforward process, but it requires careful planning, especially around DB Parameter Groups and Option Groups. +By following the steps outlined in this blog post, you can ensure a smooth transition to the latest MariaDB version, improving the performance, security, and scalability of your application. +Remember to always perform proper backups, test the migration in a staging environment, and monitor post-migration performance to ensure everything is functioning as expected. + + +## Best Practices +- ✔ Always test the migration in a staging environment before applying changes in production. +- ✔ Monitor RDS logs and application performance after the upgrade. +- ✔ Ensure proper backups before initiating any engine version changes. + +By implementing these best practices, you can enhance performance, security, and scalability while ensuring a successful migration. + +🚀 Happy migrating! + + +## References +- [AWS RDS Documentation - MariaDB Engine Versions](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.DBEngineVersion.html) +- [AWS RDS Parameter Groups](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.DBParameterGroups.html) +- [AWS RDS Option Groups](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.OptionGroups.html) diff --git a/content/blog/entries/building-the-cc-global-components-library/contents.lr b/content/blog/entries/building-the-cc-global-components-library/contents.lr index 734b1ad4e..f596407e5 100644 --- a/content/blog/entries/building-the-cc-global-components-library/contents.lr +++ b/content/blog/entries/building-the-cc-global-components-library/contents.lr @@ -122,5 +122,5 @@ The CC Global Components with all 3 components used renders as: ![CC global components](cc_global_components.gif) You can find the CC Global Components project at: -- GitHub: [CC Global Components](https://github.com/creativecommons/cc-global-components) +- GitHub: [CC Global Components](https://github.com/cc-archive/cc-global-components) - NPM: [cc-global-components](https://www.npmjs.com/package/@creativecommons/cc-global-components) diff --git a/content/blog/entries/cc-platform-toolkit-revamp-4/contents.lr b/content/blog/entries/cc-platform-toolkit-revamp-4/contents.lr index 29f7db173..27c2006a7 100644 --- a/content/blog/entries/cc-platform-toolkit-revamp-4/contents.lr +++ b/content/blog/entries/cc-platform-toolkit-revamp-4/contents.lr @@ -15,7 +15,7 @@ pub_date: 2020-03-04 body: Phew, how is it possible that we're already in March? Between my last check-in and today, there was a lot of work and effort into revamping the [Platform Toolkit](https://creativecommons.org/platform/toolkit/). -There were two rounds of user interviews: the first one was done looking only at the wireframe, focusing exclusively on usability and content. This provided a lot of important feedback to adjust the structure and move forward with the UI. I tried my best to apply the design standards already mapped out by the [Vocabulary](https://github.com/creativecommons/vocabulary/) project, so that in the future this wouldn't stand out from other CC materials. +There were two rounds of user interviews: the first one was done looking only at the wireframe, focusing exclusively on usability and content. This provided a lot of important feedback to adjust the structure and move forward with the UI. I tried my best to apply the design standards already mapped out by the [Vocabulary Legacy](https://github.com/cc-archive/vocabulary-legacy/) project, so that in the future this wouldn't stand out from other CC materials. The second round of user interviews was done with a UI prototype, and was meant to take away some of my doubts regarding a few choices in this project. For instance, would it be best for the user to have the information in a single page, or would that be too much, and best to split in separate pages? There were pros and cons to both scenarios, but in the end we decided to stick with the single-page format because of a particular behavior: one of the ways users search for content is to ctrl+F and look for keywords. That would be drastically less effective with multiple pages. diff --git a/content/blog/entries/cc-vocabulary-docs-updates-3/contents.lr b/content/blog/entries/cc-vocabulary-docs-updates-3/contents.lr index 60531922b..e8702067c 100644 --- a/content/blog/entries/cc-vocabulary-docs-updates-3/contents.lr +++ b/content/blog/entries/cc-vocabulary-docs-updates-3/contents.lr @@ -26,7 +26,7 @@ Excited to know more about this week's vocabulary site updates? Read on to find Merged? Yes. **Merged**. Here's my story! -- After getting a thumbs up from the UX Designer, I put up my [GSoD Website PR](https://github.com/creativecommons/vocabulary/pull/747) for review. +- After getting a thumbs up from the UX Designer, I put up my [GSoD Website PR](https://github.com/cc-archive/vocabulary-legacy/pull/747) for review. - I was confident there would be changes, and I let them roll in. It's important to note here that what seems perfect to you may not be so to others, and only experience teaches you the right from the wrong. - There were a few of them, mainly dealing with spacing, textual content and colors. I resolved them as soon as I could. - [zackkrida](/blog/authors/zackkrida/) has been kind enough to point and enumerate all of them for me! @@ -53,9 +53,9 @@ Merged? Yes. **Merged**. Here's my story! Being a part of an open source organisation also means that I must try to bring in contributions from existing & first time contributors. Here's a peek into my efforts for the same: -- The [dark mode PR](https://github.com/creativecommons/vocabulary/pull/806) started off as a hacktoberfest contribution, and it is now complete! +- The [dark mode PR](https://github.com/cc-archive/vocabulary-legacy/pull/806) started off as a hacktoberfest contribution, and it is now complete! - Created a `/shared` package to house common files between packages (such as the dark & light theme after referring to the [React](https://reactjs.org/) documentation. -- The automated npm [README.md customisation](https://github.com/creativecommons/vocabulary/pull/746) is now up and running. (really had a blast solving that issue!) +- The automated npm [README.md customisation](https://github.com/cc-archive/vocabulary-legacy/pull/746) is now up and running. (really had a blast solving that issue!) - If the snapshot testing stands approved, we'll have it running on chromatic! - Raised issues to add multiple badges to the root README.md file; namely `maintained with Lerna` & custom badges for package sizes from [packagephobia](https://packagephobia.com/). diff --git a/content/blog/entries/cc-vocabulary-docs-updates-closing/contents.lr b/content/blog/entries/cc-vocabulary-docs-updates-closing/contents.lr index a1fe76aa5..670b53a6b 100644 --- a/content/blog/entries/cc-vocabulary-docs-updates-closing/contents.lr +++ b/content/blog/entries/cc-vocabulary-docs-updates-closing/contents.lr @@ -210,80 +210,80 @@ Here's the link to the [documentation site](https://cc-vocabulary.netlify.app). @creativecommons/vocabulary Developed the CC Vocabulary Landing Page -https://github.com/creativecommons/vocabulary/pull/747
https://cc-vocab-draft.web.app +https://github.com/cc-archive/vocabulary-legacy/pull/747
https://cc-vocab-draft.web.app Implemented dark mode for our storybooks -https://github.com/creativecommons/vocabulary/pull/806
https://cc-vocabulary.netlify.app +https://github.com/cc-archive/vocabulary-legacy/pull/806
https://cc-vocabulary.netlify.app Carried out a monorepo wide documentation revamp -https://github.com/creativecommons/vocabulary/pull/813 +https://github.com/cc-archive/vocabulary-legacy/pull/813 Wrote the Monorepo Documentation Story -https://github.com/creativecommons/vocabulary/pull/785
https://cc-vocabulary.netlify.app/?path=/docs/vocabulary-structure--page#why-is-vocabulary-a-monorepo +https://github.com/cc-archive/vocabulary-legacy/pull/785
https://cc-vocabulary.netlify.app/?path=/docs/vocabulary-structure--page#why-is-vocabulary-a-monorepo Wrote the Grid Documentation Story -https://github.com/creativecommons/vocabulary/pull/802
https://cc-vocabulary.netlify.app/?path=/docs/layouts-grid--fullhd#grid-system +https://github.com/cc-archive/vocabulary-legacy/pull/802
https://cc-vocabulary.netlify.app/?path=/docs/layouts-grid--fullhd#grid-system Wrote the "Getting Started" Usage Guide -https://github.com/creativecommons/vocabulary/pull/774
https://cc-vocabulary.netlify.app/?path=/story/vocabulary-getting-started--page#getting-started +https://github.com/cc-archive/vocabulary-legacy/pull/774
https://cc-vocabulary.netlify.app/?path=/story/vocabulary-getting-started--page#getting-started Added a CHANGELOG.md to adhere to OSS conventions -https://github.com/creativecommons/vocabulary/pull/671
https://github.com/creativecommons/vocabulary/blob/main/CHANGELOG.md +https://github.com/cc-archive/vocabulary-legacy/pull/671
https://github.com/cc-archive/vocabulary-legacy/blob/main/CHANGELOG.md Unified README.md and updated monorepo build process -https://github.com/creativecommons/vocabulary/pull/649
https://www.npmjs.com/package/@creativecommons/vocabulary
https://www.npmjs.com/package/@creativecommons/fonts
https://www.npmjs.com/package/@creativecommons/vue-vocabulary +https://github.com/cc-archive/vocabulary-legacy/pull/649
https://www.npmjs.com/package/@creativecommons/vocabulary
https://www.npmjs.com/package/@creativecommons/fonts
https://www.npmjs.com/package/@creativecommons/vue-vocabulary Configured GitHub native dependabot -https://github.com/creativecommons/vocabulary/pull/452 +https://github.com/cc-archive/vocabulary-legacy/pull/452 Added phone screen backgrounds -https://github.com/creativecommons/vocabulary/pull/445 +https://github.com/cc-archive/vocabulary-legacy/pull/445 Introduce Snapshot Testing to Vocabulary using Chromatic -https://github.com/creativecommons/vocabulary/issues/735 +https://github.com/cc-archive/vocabulary-legacy/issues/735 Add a maintained with Lerna badge -https://github.com/creativecommons/vocabulary/issues/807
https://github.com/creativecommons/vocabulary/blob/main/README.md +https://github.com/cc-archive/vocabulary-legacy/issues/807
https://github.com/cc-archive/vocabulary-legacy/blob/main/README.md Add new install size badges for our packages -https://github.com/creativecommons/vocabulary/issues/776
https://github.com/creativecommons/vocabulary/blob/main/README.md +https://github.com/cc-archive/vocabulary-legacy/issues/776
https://github.com/cc-archive/vocabulary-legacy/blob/main/README.md Customise individual README's for our packages -https://github.com/creativecommons/vocabulary/issues/736 +https://github.com/cc-archive/vocabulary-legacy/issues/736 -@creativecommons/creativecommons.github.io-source +@creativecommons/ccos-website-source Introductory First Blog Post -https://github.com/creativecommons/creativecommons.github.io-source/pull/530
/blog/entries/cc-vocabulary-docs-intro/ +https://github.com/creativecommons/ccos-website-source/pull/530
/blog/entries/cc-vocabulary-docs-intro/ Vocabulary Site Update v1 -https://github.com/creativecommons/creativecommons.github.io-source/pull/549
/blog/entries/cc-vocabulary-docs-updates-1/ +https://github.com/creativecommons/ccos-website-source/pull/549
/blog/entries/cc-vocabulary-docs-updates-1/ Vocabulary Mid Internship Update v2 -https://github.com/creativecommons/creativecommons.github.io-source/pull/555
/blog/entries/cc-vocabulary-docs-updates-2/ +https://github.com/creativecommons/ccos-website-source/pull/555
/blog/entries/cc-vocabulary-docs-updates-2/ Vocabulary Site Update v3 -https://github.com/creativecommons/creativecommons.github.io-source/pull/561
/blog/entries/cc-vocabulary-docs-updates-3/ +https://github.com/creativecommons/ccos-website-source/pull/561
/blog/entries/cc-vocabulary-docs-updates-3/ Vocabulary Site Final Update -https://github.com/creativecommons/creativecommons.github.io-source/pull/564
/blog/entries/cc-vocabulary-docs-updates-closing/ +https://github.com/creativecommons/ccos-website-source/pull/564
/blog/entries/cc-vocabulary-docs-updates-closing/ @cc-archive/cccatalog-api diff --git a/content/blog/entries/cc-vocabulary-week9-13/contents.lr b/content/blog/entries/cc-vocabulary-week9-13/contents.lr index 327dfdae8..46b9fa82f 100644 --- a/content/blog/entries/cc-vocabulary-week9-13/contents.lr +++ b/content/blog/entries/cc-vocabulary-week9-13/contents.lr @@ -18,7 +18,7 @@ body: This will be my last blog as an Outreachy intern. My watch as an intern has come to an end. I am glad I chose the Creative Commons community or rather am glad Creative Commons chose me (am not the chosen one). I have gained a lot of valuable knowledge, skills and I am more confident in my abilities. ##Summary of My Internship with Vocabulary -I have been more involved with the Vocabulary project during my internship and am happy with the work that has been done so far. I made 24 pull requests with 17 merged. My last contribution was adding a [header component](https://github.com/creativecommons/vocabulary/pull/145) to the revamped Vocabulary. Here is a summary of my time with Vocabulary. +I have been more involved with the Vocabulary project during my internship and am happy with the work that has been done so far. I made 24 pull requests with 17 merged. My last contribution was adding a [header component](https://github.com/cc-archive/vocabulary-legacy/pull/145) to the revamped Vocabulary. Here is a summary of my time with Vocabulary. ###When I started my Internship, Vocabulary comprised of: - UI components built with Vue diff --git a/content/blog/entries/cc-wp-plugin-final-phase/contents.lr b/content/blog/entries/cc-wp-plugin-final-phase/contents.lr index 7c4aa533b..0b2b6508e 100644 --- a/content/blog/entries/cc-wp-plugin-final-phase/contents.lr +++ b/content/blog/entries/cc-wp-plugin-final-phase/contents.lr @@ -78,6 +78,6 @@ option, which is much better than previous footer implementation. - Integrate WPGulp workflow and improve i18n. - Improve documentation with a visual walk-around of every feature. -Thank you for reading. For more, see the [GitHub repository](https://github.com/creativecommons/wp-plugin-creativecommons). +Thank you for reading. For more, see the [GitHub repository](https://github.com/cc-archive/wp-plugin-creativecommons). If you have any feedback or suggestions, let us know in the discussion on `#cc-dev-wordpress` Slack channel. Looking forward! diff --git a/content/blog/entries/cc-wp-plugin-second-phase/contents.lr b/content/blog/entries/cc-wp-plugin-second-phase/contents.lr index 529bcc282..07139529e 100644 --- a/content/blog/entries/cc-wp-plugin-second-phase/contents.lr +++ b/content/blog/entries/cc-wp-plugin-second-phase/contents.lr @@ -23,7 +23,7 @@ For the context, I am working with my mentor [Timid Robot](https://creativecommo ### Release of v2019.7.1 -We have released the latest stable version of the plugin. `v2019.7.1` is out and tagged in the [wp-plugin-creativecommons repository](https://github.com/creativecommons/wp-plugin-creativecommons/releases). Given that a stable release is available, we have submitted it to [WordPress.org plugin directory](https://en-nz.wordpress.org/plugins/). As soon as their team approves it, the plugin will be available to install for all WordPress users, which is substantial. +We have released the latest stable version of the plugin. `v2019.7.1` is out and tagged in the [wp-plugin-creativecommons repository](https://github.com/cc-archive/wp-plugin-creativecommons/releases). Given that a stable release is available, we have submitted it to [WordPress.org plugin directory](https://en-nz.wordpress.org/plugins/). As soon as their team approves it, the plugin will be available to install for all WordPress users, which is substantial. ### What's next @@ -34,6 +34,6 @@ Although the current implentation does the job, but we want it to use new [CC Li - Changes in design and features. - Improve the documentation. -For more, see the [GitHub repository](https://github.com/creativecommons/wp-plugin-creativecommons). +For more, see the [GitHub repository](https://github.com/cc-archive/wp-plugin-creativecommons). If you have any feedback or suggestions, let us know in the discussion on `#cc-dev-wordpress` Slack channel. Looking forward! \ No newline at end of file diff --git a/content/blog/entries/contents.lr b/content/blog/entries/contents.lr index 7af89da91..c820bd531 100644 --- a/content/blog/entries/contents.lr +++ b/content/blog/entries/contents.lr @@ -3,4 +3,4 @@ _model: blog title: CC Open Source Blog --- description: -Welcome to CC's new technical blog! The CC technical team writes about what we're working on, updates about CC's software projects, engineering related programs and events that CC is participating in, and more. We also feature posts from community members working on CC-related projects. You can subscribe to our [RSS feed ](/blog/feed.xml). +Welcome to Creative Commons (CC) open source and technical blog! The CC Technical team writes about what we're working on, updates about CC's software projects, engineering related programs and events that CC is participating in, and more. We also feature posts from community members working on CC-related projects. You can subscribe to our [RSS feed ](/blog/feed.xml). diff --git a/content/blog/entries/continuing-open-collaboration-gsoc-2024-with-creative-commons/GSoC+CC-banner.png b/content/blog/entries/continuing-open-collaboration-gsoc-2024-with-creative-commons/GSoC+CC-banner.png new file mode 100644 index 000000000..f80f877a6 Binary files /dev/null and b/content/blog/entries/continuing-open-collaboration-gsoc-2024-with-creative-commons/GSoC+CC-banner.png differ diff --git a/content/blog/entries/continuing-open-collaboration-gsoc-2024-with-creative-commons/contents.lr b/content/blog/entries/continuing-open-collaboration-gsoc-2024-with-creative-commons/contents.lr new file mode 100644 index 000000000..e5e6eb939 --- /dev/null +++ b/content/blog/entries/continuing-open-collaboration-gsoc-2024-with-creative-commons/contents.lr @@ -0,0 +1,106 @@ +title: Continuing Open Collaboration: GSoC 2024 With Creative Commons +--- +categories: +open-source +collaboration +gsoc +gsoc-2024 +website +--- +author: Murdock9803 +--- +series: gsoc-2024-cc-resource-archive +--- +pub_date: 2024-08-22 +--- +body: + +As I reach the final phase of my work on the Creative Commons Resource Archive under this program, I’ve been thinking about how far we’ve come since the beginning. We started with the idea of modernizing the [resource archive website](https://resources.creativecommons.org/), and we have built features that make it safer and more accessible. This journey has had its challenges, but it’s also been very rewarding. +In the first post, we discussed the early steps that set up this project. Now, as we are in the final weeks, I’m excited to share the progress we’ve made to turn the Resource Archive into a valuable tool for the community. + +![GSoC and CC banner](GSoC+CC-banner.png) + +Join me as I take you through this complete journey of covering new features, the hurdles we’ve overcome and the final product that I hope will continue to grow and serve the open knowledge community. + +## Transitioning From Midterm + +After completing the Midterm milestone, the focus was to utilize the learnings and experience I got across the past weeks to complete the tasks mentioned in the timeline in the least time possible. My mentor suggested not to hurry up things too much, but just to work at a comfortable higher pace. This way, we can have some room for the implementation of stretch goals for the project. The midterm review provided valuable feedback, which helped guide the next steps. With a solid foundation in place, it was time to tackle the more complex challenges and polish the user experience. From enhancing the search functionality, filtering experience to improving the accessibility, the post midterm work aimed to ensure the resource archive becomes a great tool to serve the community. + +## Completing The Timeline Tasks - Weeks 7, 8 and 9 + +These three weeks were planned with the aim of completing the timeline tasks to focus on further goals of the projects. The `UI-related` tasks included Submission page, A guide for the newcomers to submit resources, and working on the filters. + +### Submission Page UI Changes + +The `submission.html` page is responsible for the area where contributors come to contribute to the resource archive with their resources about Creative Commons or Open sharing of knowledge in general. +With the help of the [PR#315](https://github.com/creativecommons/cc-resource-archive/pull/315), The following tasks were performed : +- adds a new context to the element, named `submit-page`. +- refactors the whole html code for `submission.html` with semantic code. +- makes the page responsive, by adding `media queries` wherever needed. +- adds a step by step written guide including images, for submission of resource for new github users. +- ensures the page meets current CC aesthetics. +- adds documentation for better understanding and maintainability. +- formats the files with `prettier code formatter`. + +### Submission guide For Newcomers + +For people not familiar with GitHub or Opening `Pull Requests` on GitHub, a comprehensive guide was added with step by step process to submit a resource to the resource archive. The guide included instructions to fork, clone the repository and also Open the PR by committing to the repository. This was accompanied with well-labeled images for better understandability. This work was achieved with the help of [PR#315](https://github.com/creativecommons/cc-resource-archive/pull/315). This was the final addition to the `submission.html` page and the whole tasks related to this page were completed by this. + +### Filters Placement and Functioning + +The resource archive utilizes filters to select similar resources. These filters are grouped in the form of three categories, `TOPIC`, `MEDIUM` and `LANGUAGE`. Each category has some filter options to choose from. In the previous iteration of the resource archive site, the category filters were placed in the middle of the page, and they also did not have any icon for the indication of a selected filter. +The [PR#316](https://github.com/creativecommons/cc-resource-archive/pull/316) makes the filters responsiveness, and more easy to access by performing the following tasks: +- adds semantic html to `index.html` and `all.html` +- removes the filters from `index.html`. +- removes inline styles from html pages. +- adds a new context to `listing.html`. +- works on the `see-all-resources` link. +- adds checkbox in place of `[x]` in category filters. +- makes the filters as a sidebar. +- makes the whole category filters responsive. +- Re-works on the `media-query` breakpoints. +- formats the code with `prettier code formatter`. +- adds documentation for the `index.html`, `all.html` and `style.css` files. + +## Stretch Goals And Ideation - Weeks 10, 11 and 12 + +After the completion of the tasks assigned in the timeline, we shifted the focus to the Stretch goals suggested in my proposal, and also by my mentor ([Sara](https://github.com/possumbilities)). There were 3 major goals that were considered for a discussion. These were, Implementation of Search Functionality through [Lunr.js](https://lunrjs.com/docs/index.html), Improving accessibility through the inclusion of [ARIA](https://www.w3.org/WAI/standards-guidelines/aria/) attributes to the elements in the website, and The use of [GitHub API](https://docs.github.com/en/rest?apiVersion=2022-11-28) to automate the process of submission of resources to the site. Out of these three, the goals that were to be implemented were `ARIA` accessibility and `LUNR.js` search functionality. This was decided keeping in mind the scope of the project and the desired limit of complexity we wanted the site to have at this point. + +### Aria Accessibility and Search Functionsality - LUNR.js + +My mentor suggested that I read about `WAI-ARIA` accessibility to gain insights about the process and better select the number of attributes and features we need to implement. I studied about this thoroughly and also watched some videos on the topic. I realized about the importance of having these features in our site and how greatly they impact the accessibility for different users. +Apart from this, we wanted to implement a search feature for the resources with the help of a lightweight searching library like `LUNR.js`. I started to read about the library and its execution process from various sources, majorly from the [LUNR Documentation](https://lunrjs.com/docs/index.html) present in their site. After reading it and a bit of panning, I started to code for this feature. The goal was to keep the UI similar to the CC Search feature present in the header of many Creative Commons sites. + +## Issues Solved From Midterm To End + +The issues relevant to the project which have been solved in the period between midterm and final week are listed below: +- [#52](https://github.com/creativecommons/cc-resource-archive/issues/52) - use checkbox for `resourcenavtopicknown` +- [#61](https://github.com/creativecommons/cc-resource-archive/issues/61) - change UI of the homepage +- [#72](https://github.com/creativecommons/cc-resource-archive/issues/72) - UI refinement of the website +- [#119](https://github.com/creativecommons/cc-resource-archive/issues/119) - adding icon on filter text +- [#274](https://github.com/creativecommons/cc-resource-archive/issues/274) - Improve the UI of submission page with `vocabulary` +- [#306](https://github.com/creativecommons/cc-resource-archive/issues/306) - Language List Columns Collapsing on Website +- [#310](https://github.com/creativecommons/cc-resource-archive/issues/310) - Add a step by step guide for submitting resources +- [#311](https://github.com/creativecommons/cc-resource-archive/issues/311) - html markup contains inline styles +- [#313](https://github.com/creativecommons/cc-resource-archive/issues/313) - improve mobile view layout for filter columns +- [#314](https://github.com/creativecommons/cc-resource-archive/issues/314) - remove extra white space between main content and footer +- [#318](https://github.com/creativecommons/cc-resource-archive/issues/318) - Links in submit page open on same page and spelling mistake-comapre + +## Future Plans And Execution + +The future plans include the execution of the Stretch Goals we discussed in the later weeks of the project. Firstly, I will be working on the `LUNR.js` search functionality and will be trying to complete this in the 13th week, and also the contributions on the `ARIA` accessibility are welcome on GitHub. Also, apart from these fixed goals, I aim to remain engaged with the community for the years ahead. I have planned to keep contributing to the organization - [Creative Commons](https://github.com/creativecommons), and especially the repository - [CC-Resource-Archive](https://github.com/creativecommons/cc-resource-archive) for as long as I can. I will be contributing in the form of issues, pull requests and also code reviews. This is the first organization I got to connect professionally with, and I aim to continue to be a part of this mission of Sharing of Open Knowledge. + +## Personal Growth And Thoughts On Completion + +As I mentioned in my previous blog post, Being a part of Google Summer of Code was a very big deal for me. With an organization like Creative Commons, this could not have been better. I did not only know about the organization before all this GSoC 2024 preparation, but also resonated with the idea and mission behind it, and was grateful for the learning opportunities it creates for people across the world. Being at the final week of this program makes me emotional as I had a really good time with the mentors and the project. In the weekly meetings we conducted, the amount of motivation I got every single time talking with my mentor was unmatched. I was a complete newbie in terms of professional work experience, and this is the way everything should have been. I am a better individual at this point, and far more experienced. I think I will be able to guide my juniors in a better way from now onwards. +This program also instilled in me a newfound confidence that is needed to take on tough tasks. I believe the program is less about coding skills and more about the self-improvement journey one has with their mentors and fellow contributors. One more thing which caught my interest is reviewing the Pull Requests of other contributors. My mentor suggested that I try reviewing pull requests of new contributors for experience. “This is a great learning opportunity for you” as they said it. Exactly as I was told, this was indeed a great and enjoyable opportunity. + +## Conclusion + +### Gratitude And Acknowledgements + +[Sara Lovell](https://github.com/possumbilities), [Timid Robot Zehta](https://github.com/TimidRobot) and [Shafiya Heena](https://github.com/Shafiya-Heena) were the best mentors I could have asked for this project program. My primary mentor, Sara, always encouraged me to be on track whenever I lagged behind in work. Considering this was a straightforward project, I did not predict the learning opportunities to be this much in number. I will always be grateful for these 12 weeks of support, learning and growth. Thank you ! + +### For Future Contributors + +All the contributors that are hoping to contribute to this repository, or this organization, I welcome you with all my heart. If you are targeting to get selected in an Open Source mentorship program, that is a great idea. But do not just contribute to Open Source for the sake of resume building and stipend. I agree they are very good benefits, but Open Source is simply much more than this. Once you contribute to Open Source, you will fall in love with the support you get from this community, just like I did. You can find me on [GitHub](https://github.com/) and on the [CC-Resource-Archive](https://github.com/creativecommons/cc-resource-archive) repository mainly. Let’s have the conversation there! diff --git a/content/blog/entries/empowering-open-knowledge-gsoc-2024-with-creative-commons/GSoC+CC-banner.png b/content/blog/entries/empowering-open-knowledge-gsoc-2024-with-creative-commons/GSoC+CC-banner.png new file mode 100644 index 000000000..f80f877a6 Binary files /dev/null and b/content/blog/entries/empowering-open-knowledge-gsoc-2024-with-creative-commons/GSoC+CC-banner.png differ diff --git a/content/blog/entries/empowering-open-knowledge-gsoc-2024-with-creative-commons/contents.lr b/content/blog/entries/empowering-open-knowledge-gsoc-2024-with-creative-commons/contents.lr new file mode 100644 index 000000000..5e3cf6ac5 --- /dev/null +++ b/content/blog/entries/empowering-open-knowledge-gsoc-2024-with-creative-commons/contents.lr @@ -0,0 +1,144 @@ +title: Empowering Open Knowledge: GSoC 2024 With Creative Commons +--- +categories: +open-source +collaboration +gsoc +gsoc-2024 +website +--- +author: Murdock9803 +--- +series: gsoc-2024-cc-resource-archive +--- +pub_date: 2024-07-10 +--- +body: + +Hello everyone! My name is Ayush Sahu, and I am thrilled to announce that I have joined Creative Commons this summer through the [Google Summer of Code (2024)](https://summerofcode.withgoogle.com/) program. As a passionate advocate for open knowledge and a firm believer in the power of collaborative innovation, I am grateful to contribute to an organization that has been championing the free exchange of information and creativity for years. + +![GSoC and CC banner](GSoC+CC-banner.png) + +I was inspired to collaborate with Creative Commons because of the profound impact it had on me personally. As a child creating videos for my YouTube channel, I was immensely grateful for the resources provided by Creative Commons. Their promotion of free and open knowledge enabled me to access high-quality content without the constraints of traditional licensing, fostering my creativity and passion for sharing information. This experience instilled in me a deep appreciation for the organization and its mission. + +## The Project I Am Working On + +The project - **Modernize CC Resource Archive** focuses on implementing a comprehensive visual overhaul to the [Resource Archive](https://resources.creativecommons.org/) to align with current Creative Commons aesthetics and functionality standards. Utilizing the [Internal Design System (Vocabulary)](https://github.com/creativecommons/vocabulary), the project aims to upgrade the visual design, implement semantic, accessible, and standards-compliant `HTML`, `CSS`, and `JavaScript`, and improve user experience (UX) for resource submission while ensuring site stability on `GitHub Pages`. Through these efforts and solid documentation, the revamped Resources Archive will meet modern standards, enhance usability, and facilitate maintainability for both users and developers. + +## Community Bonding Period + +The community bonding period has been an incredibly enriching experience. During this time, I had the opportunity to meet my mentors, familiarize myself with the project, and engage with the vibrant community behind Creative Commons. I participated in meetings and discussions, which have deepened my understanding of the organization's values as well as the codebase. The warm welcome and the wealth of knowledge shared by the community have been truly inspiring. + +## Environment, Code & Ideation - Weeks 1, 2 & 3 + +These were the initial weeks of the project which went into testing the development environment, planning upcoming UI changes and getting acquainted with the working process. Firstly, my project mentor [Sara](https://opensource.creativecommons.org/blog/authors/sara/) guided me through my first contribution in the coding period. I was granted member status at the Creative Commons Organization on GitHub, which was both new and exciting for me. + +The key achievements were: + +- [PR#266](https://github.com/creativecommons/cc-resource-archive/pull/266) - Updated the `docker-compose.yml` file to the current spec. With the help of my mentor, I opened this first pull request in the coding period. The file was out of specification, as the `version` element at the top of `docker-compose.yml` file was just informative. +- [Testing Docker Configurations](https://github.com/creativecommons/cc-resource-archive/pull/279): With immense help from mentors Sara and Timid Robot, I got the Docker environment ready for development. +- Learned more about [Jekyll](https://jekyllrb.com/docs/) and read the [Vocabulary](https://github.com/creativecommons/vocabulary) code. Got familiar with classes in vocabulary.css and the custom CSS variables in library-vars.css. +- Accessibility Improvements: Learned about keyboard navigability and optimizing the website for better accessibility using semantic HTML and appropriate CSS properties. +- Issue Listing: Identified and listed relevant issues related to semantic code and UI changes. Also added some issues as a to-do list, as suggested by my mentor. +- Reviewed the present structure of the files, and worked on ideas to improve the structure for better understandability and grouping of similar files. + +At the end of these initial weeks, I realized that I have spent enough time on understanding the code and planning on things. But as my mentor suggested, things will get smoother once we start working on them practically. So I decided to increase the pace of work in the upcoming weeks to get the planned tasks executed. + +## Execution, Updation & Refactor - Weeks 4, 5 & 6 + +As the midterm evaluation approached, we held weekly review meetings to plan changes and contributions. The pace picked up in weeks 5 and 6, resulting in several presentable pull requests dedicated to UI changes and code refactoring. Notable tasks executed include: + +### Improving File Structure + +With discussion with my mentor, I improved the file structure in the codebase for better understandability and maintainability. After updating the structure, the paths to all the files that were changed were modified. This was achieved by a group of Pull Requests that were created catering to the issue. The pull requests were: + +- [PR#280](https://github.com/creativecommons/cc-resource-archive/pull/280) - Adds `footer.html` to the `_includes` directory. +- [PR#281](https://github.com/creativecommons/cc-resource-archive/pull/281) - Includes `footer.html` to all the pages of the site. +- [PR#282](https://github.com/creativecommons/cc-resource-archive/pull/282) - Shifted `an-explanation-of-creative-commons` to `_resources`. +- [PR#289](https://github.com/creativecommons/cc-resource-archive/pull/289) - Improves the file structure in the codebase. +- [PR#292](https://github.com/creativecommons/cc-resource-archive/pull/292) - Updates the paths to downloadable resources and PDFs. +- [PR#296](https://github.com/creativecommons/cc-resource-archive/pull/296) - Updated the `resource-template` with new paths for images. + +### Listing Page UI Changes + +The `listing.html` page is responsible for the display of resource cards on the `index.html` and `all.html` pages. The resource cards had an outdated visual setup and needed to be aligned with the Internal Design System of Creative Commons known as Vocabulary. +Through the [PR#298](https://github.com/creativecommons/cc-resource-archive/pull/298), I performed the following tasks: + +- Refactored the html structure of the resource card to `IMAGE - TITLE - BLURB`. +- Utilizing vocabulary, enhanced the style for `thumbnail list` in `listing.html`. Worked on the grid structure in `style.css`. +- Likewise, worked on enhancing style for the `thumbnail box`, `thumbnail title`, `thumbnail image` and `thumbnail blurb`. +- Worked on Fonts, colors, background colors, etc. according to `vocabulary`. +- Assigned properties like `--underline-background-color` from vocabulary into style.css. +- Formatted the `style.css` and `listing.html` files with `prettier`. +- Fixed the responsiveness of the resource cards. +- Added Documentation in `style.css` for understandability. + +And through the [PR#302](https://github.com/creativecommons/cc-resource-archive/pull/302), the following tasks were completed: +- Added a heading to the page. +- Added clear documentation about various sections in the file. +- Formatted the code with `prettier` code formatter. + +All these changes gave the website a new look, aligning more closely with the standard Creative Commons design schemes. + +### Listing Page (All) Javascript Changes + +The javascript code in listing.html file resided in the `` section of the page. The code was outdated and was lacking the ES6 Javascript concepts. For example, there were uses of `var` keyword, `document.write()` method, etc.. The code was responsible for a number of tasks related to the display of resources. It extracted the user-selected categories from the URL and then returned them as variables. Also, the javascript code was responsible for displaying the resources which contained the selected categories. +Through the [PR#300](https://github.com/creativecommons/cc-resource-archive/pull/300), the following tasks were completed: + +- Updated the functions and code to follow ES6 javascript concepts. +- Replaced the `document.write()` method with `Document Object Manipulation`. The `document.write()` is old and not preferable. +- Utilized the javascript `DOM` for all the tasks related to filtering of resources in `listing.js`. +- Assigned checks to the categories selected by the user (which are extracted through the URL), sanitizing the input and preventing any attacks on the website. +- Added proper documentation for all the functions and sections of code for better understandability. + +### Resource Page UI Changes + +The resource page is a `layout` to show various resources that are submitted in the resource archive. This layout page accepts values from the `front matter` of various resources. This page was overall enhanced in terms of alignment to Creative Commons’ Design System. +The [PR#304](https://github.com/creativecommons/cc-resource-archive/pull/304) performs the following tasks: + +- Refactors the whole code for `resource.html` page by implementing semantic HTML. +- Improves the styling of the page in `styles.css`, by utilizing vocabulary. +- Makes the page responsive. +- The inspiration is drawn from the [Vocabulary Blog Post Page](https://vocabulary-docs.netlify.app/specimen/contexts/blog-post.html). + +These three weeks saw the most significant work being merged, resulting in a refreshed interface. Despite a slow start, consistent effort and mentor support helped me catch up by the midterm evaluation, making these weeks a great learning experience. + +## Issues Solved Till Now + +The issues relevant to the project which have been solved until now are listed below: + +- [#17](https://github.com/creativecommons/cc-resource-archive/issues/17) - upgrade JS code in listings.html +- [#176](https://github.com/creativecommons/cc-resource-archive/issues/176) - make thumbnails responsive +- [#242](https://github.com/creativecommons/cc-resource-archive/issues/242) - add footer in submission and resource pages +- [#265](https://github.com/creativecommons/cc-resource-archive/issues/265) - The docker-compose.yml file currently out of spec +- [#267](https://github.com/creativecommons/cc-resource-archive/issues/267) - Improve documentation for Dockerfiles +- [#269](https://github.com/creativecommons/cc-resource-archive/issues/269) - relocate footer code to separate file ‘footer.html’ for reuse +- [#273](https://github.com/creativecommons/cc-resource-archive/issues/273) - Resource file in the wrong location +- [#276](https://github.com/creativecommons/cc-resource-archive/issues/276) - Inconsistent docker behavior - Parsing Gemfile +- [#283](https://github.com/creativecommons/cc-resource-archive/issues/283) - Unnecessary google analytics function in listing.html +- [#285](https://github.com/creativecommons/cc-resource-archive/issues/285) - Unnecessary google analytics function in resource and submission.html +- [#287](https://github.com/creativecommons/cc-resource-archive/issues/287) - The file structure in the codebase can be improved. (re-structuring) +- [#288](https://github.com/creativecommons/cc-resource-archive/issues/288) - The style.css file is not properly organized and lacks documentation +- [#290](https://github.com/creativecommons/cc-resource-archive/issues/290) - The download [pdf] file links at bottom of resources aren't working +- [#293](https://github.com/creativecommons/cc-resource-archive/issues/293) - The resourcetemplate.md needs to be updated. +- [#297](https://github.com/creativecommons/cc-resource-archive/issues/297) - Change the design of resource cards on homepage using vocabulary +- [#165](https://github.com/creativecommons/cc-resource-archive/issues/165) - section heading for resource cards +- [#301](https://github.com/creativecommons/cc-resource-archive/issues/301) - Add proper documentation to listing.html, refactor for structure +- [#101](https://github.com/creativecommons/cc-resource-archive/issues/101) - Organize code with proper indentation +- [#41](https://github.com/creativecommons/cc-resource-archive/issues/41) - UI/UX for resource page +- [#272](https://github.com/creativecommons/cc-resource-archive/issues/272) - unwanted underline in the resource page + +## My Experience - From Getting Selected To Midterm + +Getting selected to Google Summer of Code was honestly a very big deal for me. When I joined my university for my undergraduate degree, our seniors introduced us to two guys who got selected in GSoC that year. They were given immense importance and respect by our seniors and also my batchmates. From that instance I got to know that being a GSoC Contributor is a very prestigious thing for someone hoping to start their career. Having zero background knowledge in programming, I thought it’s not something that I should aim for, and leave it to the guys who already are pro at coding. But the dream of being a GSoC contributor just stuck somewhere in my head. +Fast forward to my third year at the university, I became good with frontend development as it was something that naturally excited me. After working hard for some months, I was finally selected for the GSoC 2024 program with Creative Commons. + +Now after being selected to GSoC, I was very happy and satisfied as it was a dream come true. As a result of this, I could not do the amount of work that I should have, in the initial weeks of the program. I had weekly review meetings with the org mentors, who constantly supported and encouraged me to catch up to the planned timeline of tasks. As a result of their motivation and some extra efforts, I was able to finish the tasks that needed to be done till the midterm evaluation. At this point I feel really good that we are successful in completing the tasks till the midterm evaluation. The best thing about this is that it was always **a combined effort**. I am planning to execute more tasks in the other half of the period, than we have till now. I’ll be faster as I have become really comfortable working with my mentors in these six weeks. + +## Gratitude and Acknowledgements + +I would like to express my heartfelt gratitude to my mentors and the entire Creative Commons community for giving me this incredible opportunity. Your support and guidance have been invaluable. Special thanks to my mentor [Sara Lovell (Possumbilities)](https://opensource.creativecommons.org/blog/authors/sara/) for the constant support that I received from you all the time. I am really grateful for not only the technical help, but also the motivation, support and encouragement I got from your side. Also [Timid Robot](https://opensource.creativecommons.org/blog/authors/TimidRobot/) and [Shafiya Heena](https://opensource.creativecommons.org/blog/authors/shafiya/) were always present there whenever I needed them. Be it the weekly review meetings, or my confusion related to the development environment, I never felt I’m alone in this . I am excited to work further under your guidance and contribute to the shared vision of Creative Commons. + +## Join The Discussion + +There are numerous ways you can join the discussion and contribute to the project. Whether it’s by providing feedback, contributing to the codebase or simply spreading the word about open knowledge, your participation is highly encouraged. You can check out our github repository [here](https://github.com/creativecommons/cc-resource-archive), to find the codebase and join the discussion over there. diff --git a/content/blog/entries/meet-gsoc-2019-students/ari.jpg b/content/blog/entries/meet-gsoc-2019-students/ari.jpg deleted file mode 100644 index e0efaad4b..000000000 Binary files a/content/blog/entries/meet-gsoc-2019-students/ari.jpg and /dev/null differ diff --git a/content/blog/entries/meet-gsoc-2019-students/contents.lr b/content/blog/entries/meet-gsoc-2019-students/contents.lr index 0ba3274e0..959244823 100644 --- a/content/blog/entries/meet-gsoc-2019-students/contents.lr +++ b/content/blog/entries/meet-gsoc-2019-students/contents.lr @@ -116,10 +116,6 @@ summer. Here they are!

You can follow the progress of this project through the GitHub repo or on the #gsoc-license-chooser channel on our Slack community.

-
-

Ari Madian
- Ari Madian, credit: Ellen Madian, CC0 -

diff --git a/content/blog/entries/my-outreachy-internship-with-creative-commons/contents.lr b/content/blog/entries/my-outreachy-internship-with-creative-commons/contents.lr new file mode 100644 index 000000000..f89fdbc78 --- /dev/null +++ b/content/blog/entries/my-outreachy-internship-with-creative-commons/contents.lr @@ -0,0 +1,56 @@ +title: My Outreachy Internship With Creative Commons +--- +categories: +outreachy +outreachy-2024 +open-source +community +--- +author: Queen +--- +series: outreachy-dec-2024-consolidating-and-implementing-vocabulary +--- +pub_date: 2024-12-10 +--- +body: + +## Introduction +Hi, everyone! My name is Queen, and I’m a fresh pharmacy graduate with a passion for tech. My journey into coding started four years ago when I wrote my first HTML code and thought, "Yes, I’m FAANG-ready!" Spoiler: I wasn’t — but that didn’t stop me from dreaming big. Balancing pharmacy school and learning to code often felt like I was biting off more than I could chew, but I’m proud that I never gave up on my dream of becoming a front-end developer. + +## My Core Values +When I think about my core values, three words come to mind: **Growth**, **Curiosity**, and **Knowledge**. + +- **Growth**: I strive to improve in every aspect of life—mentally, physically, intellectually, and even spiritually. Every setback is just a stepping stone for me. +- **Curiosity**: This one’s a work in progress, but I’m learning to ask questions and embrace not knowing. I love understanding *why* things work the way they do. +- **Knowledge**: I read a lot because I genuinely enjoy learning new things. For me, knowledge is the key to confidence and growth. + +## My Journey to Outreachy +Outreachy is a three-month paid open-source internship program for underrepresented people in tech. I first heard about it last year—just two days before the application deadline. I didn’t make it past the initial application stage that time. + +When the December 2024 cohort initial application opened, it was the perfect timing for me. By then, I had finished my pharmacy degree and was ready to gain professional experience in front-end development and most especially, in open source. This time, I was determined to get it right. + +I applied on the same day the application opened, I had already kept answers for the essay questions in my notes app. While waiting for the results, I brushed up on my skills and read articles from past interns to prepare for the contribution period. + +When I received the email saying my initial application had been approved, I felt a rush of excitement. To move forward and be able to make a final application, I needed to make at least one contribution to a project. I narrowed my choices to two based on the skills required, but Creative Commons stood out to me. Their mission and the project description piqued my interest more. + +## The Contribution Period +The contribution period was competitive—and intimidating. Seeing the amazing work other applicants were doing made me doubt myself. But I loved the project and found the community so welcoming that I couldn’t give up. + +The mentors were incredibly supportive, giving feedback that helped me improve with each contribution. When it was time to draft my final application and proposal, I worked with my mentor, sharing my plans and got her input which helped me in creating my project timeline. + +Even before I knew if I’d be selected, I felt fulfilled. Contributing to Creative Commons was a rewarding experience, and I knew I wanted to continue contributing to the community, intern or not. + +## My Internship Project +### **Consolidating and Implementing the Vocabulary Design System** +During my internship, I’ll be working on consolidating and implementing the Vocabulary design system across Creative Commons' ancillary websites. + +Vocabulary is a design system that ensures a consistent user interface (UI) and user experience (UX) across all Creative Commons websites. However, its implementation has been inconsistent, with variations in features and versions across different sites. My role is to identify these inconsistencies and work on a unified implementation that also focuses on accessibilty. I'd also be implementing features that might be a good addition to the design system. + +I’m excited about this project because it aligns with my passion for front-end development and allows me to contribute meaningfully to a global community. I also get to improve my skills and gain new ones. + +## Conclusion +This internship is more than just a milestone for me—it’s a testament to perseverance and growth. I’m thrilled to embark on this journey with Creative Commons, and I can’t wait to see where it leads. + +If you’re considering applying for Outreachy, my advice is simple: believe in yourself, stay curious, and never stop learning. Your journey might just surprise you. + +Thank you for reading! diff --git a/content/blog/entries/outreachy-midpoint-progess-with-creative-commons/contents.lr b/content/blog/entries/outreachy-midpoint-progess-with-creative-commons/contents.lr new file mode 100644 index 000000000..ef103e790 --- /dev/null +++ b/content/blog/entries/outreachy-midpoint-progess-with-creative-commons/contents.lr @@ -0,0 +1,73 @@ +title: Outreachy Midpoint Progress With Creative Commons +--- +categories: +outreachy +outreachy-2024 +open-source +community +--- +author: Queen +--- +series: outreachy-dec-2024-consolidating-and-implementing-vocabulary +--- +pub_date: 2025-01-19 +--- +body: +# Outreachy Midpoint Blog Post + +Hi there! My name is Queen, and I’m an Outreachy intern at Creative Commons. My project involves consolidating and implementing the Vocabulary design system across Creative Commons ancillary websites. In this post, I’ll share my progress and key takeaways from the first half of my internship. + +## Project Overview + +The goal of my project is to implement the Vocabulary design system across several Creative Commons ancillary websites like the [CC Open Source](https://opensource.creativecommons.org/), [CC Legal Database](https://legaldb.creativecommons.org/en/), [CC Search Portal](https://search.creativecommons.org/), and [CC Resource Archive](https://resources.creativecommons.org/). +## Progress So Far + +### Phase One: Refactoring Markup to Align with Vocabulary + +In the first phase, I focused on refactoring the markup to align with Vocabulary’s components and context. Here are the pull requests (PRs) merged during this phase: + +- [PR 118](https://github.com/creativecommons/ccos-website-source/pull/118): Refactored the recent blog post section on the homepage. +- [PR 856](https://github.com/creativecommons/ccos-website-source/pull/856): Refactored the homepage markup to align with Vocabulary components. +- [PR 862](https://github.com/creativecommons/ccos-website-source/pull/862): Updated `page-with-toc.html`, which serves as a template for many pages. +- [PR 863](https://github.com/creativecommons/ccos-website-source/pull/863): Initially, I planned to refactor the markup to Vocabulary’s context, but after feedback from my mentor, I instead removed legacy class names while retaining the table structure. +- [PR 865](https://github.com/creativecommons/ccos-website-source/pull/865): Refactored the blog’s author page to match Vocabulary’s “person” context. +- [PR 866](https://github.com/creativecommons/ccos-website-source/pull/866): Updated the blog structure to follow Vocabulary markup. +- [PR 867](https://github.com/creativecommons/ccos-website-source/pull/867): Refactored the Project List page, leaving the table markup intact but removing old styles. +- [PR 868](https://github.com/creativecommons/ccos-website-source/pull/868): Refactored the Issue Finder tool, replacing Vue.js with plain JavaScript. Although removing Webpack will happen later, this PR set the stage for future improvements. +- [PR 870](https://github.com/creativecommons/ccos-website-source/pull/870): Aligned the Authors page with Vocabulary’s team styling. +- [PR 871](https://github.com/creativecommons/ccos-website-source/pull/871): Refactored the Project Ideas page, incorporating Vocabulary’s project markup and removing legacy styles. +- [PR 873](https://github.com/creativecommons/ccos-website-source/pull/873): Dynamically updated the body tag’s class in `layout.html` and added a body-class field to the `blog.ini` model file for consistent styling. +- [PR 880](https://github.com/creativecommons/ccos-website-source/pull/880): Refactored `page-with-title.html` (used by CC Tech Archives) to align with Vocabulary. +- [PR 886](https://github.com/creativecommons/ccos-website-source/pull/886): Updated the header component markup and removed old class names. + +### Phase 2: Adding Local Styles + +After refactoring the markup, I moved on to styling sections that Vocabulary doesn’t cover. Here are some of the merged PRs so far; + +- [PR 888](https://github.com/creativecommons/ccos-website-source/pull/888): Added local styles based on Creative Commons’ main website for the homepage and other sections, such as “Get Involved” and “Featured Projects.” +- [PR 891](https://github.com/creativecommons/ccos-website-source/pull/891): Created a new `issue-finder.css` file to restyle the Issue Finder page while removing legacy styles but maintaining legacy design. +- [PR 898](https://github.com/creativecommons/ccos-website-source/pull/898): Integrated Datatables and jQuery by adding them to a vendor folder. Styled the table and code blocks using existing website styles. +- [PR 990](https://github.com/creativecommons/ccos-website-source/pull/990): Styled the CC Search archive table using Datatables. + +## Current Status + +I’m a little behind schedule—I had planned to start work on the Legal Database website by now. However, I’m wrapping up the CC Open Source website this week and will move on to the next phase soon. + +## Lessons Learned + +This internship has been an incredible learning journey. Here are some key takeaways: + +### Technical Skills: +- I’ve become comfortable working with [Lektor](https://getlektor.com/), a static site generator that was entirely new to me. +- Implementing the Vocabulary design system has improved my problem-solving skills, especially when dealing with legacy code and adapting the system to fit unique website needs. +- To localize the table component, I had to read the [DataTables documentation](https://datatables.net/), which helped my ability to learn on the go. + +### Collaboration: +Working with mentors has taught me the value of clear communication, especially when addressing blockers or seeking feedback. + +### Project Management: +Breaking tasks into smaller chunks, prioritizing effectively, and maintaining consistent progress have been critical in managing this project. + +This experience has significantly boosted my confidence as a front-end developer, particularly in creating user-friendly and accessible interfaces. + +That’s it for now! Thank you for reading about my progress. I’m excited to see how the second half of this journey unfolds! diff --git a/content/blog/entries/reflecting-on-my-outreachy-journey-with-creative-commons/contents.lr b/content/blog/entries/reflecting-on-my-outreachy-journey-with-creative-commons/contents.lr new file mode 100644 index 000000000..64fcd4600 --- /dev/null +++ b/content/blog/entries/reflecting-on-my-outreachy-journey-with-creative-commons/contents.lr @@ -0,0 +1,91 @@ +title: Reflecting On My Outreachy Journey With Creative Commons +--- +categories: +outreachy +outreachy-2024 +open-source +community +--- +author: Queen +--- +series: outreachy-dec-2024-consolidating-and-implementing-vocabulary +--- +pub_date: 2025-02-27 +--- +body: + +It feels like just yesterday I was writing my first blog post, trying to wrap my head around all the things I’d be doing during this internship. And now, here I am, writing my final post—time really does fly when you’re deep in code, refactoring, and figuring things out. + +When I started, I was both excited and nervous. I knew I’d be working on implementing and consolidating the Vocabulary design system across different Creative Commons ancillary websites, but I didn’t fully grasp just how much I’d learn along the way. The idea of making a meaningful contribution to such an impactful organization was thrilling, yet there was that little voice in my head wondering: *Can I really do this?* + +Spoiler alert: Yes, I could—and I did! + +## From Day One to Now: The Journey + +My first few weeks were all about getting familiar with the codebase, understanding how Vocabulary worked, and figuring out how the different websites used it. I remember spending quite a bit of time just reading through the Vocabulary documentation, going through all of the websites to identify discrepancies, and trying to piece things together. + +Looking back, it’s funny how something that once felt so complex now feels like second nature. + +## Refactoring the Issue Finder: Removing Vue for a Simpler Setup + +One of my major tasks was refactoring the issue finder tool on the Creative Commons Open Source website. This tool was built using Vue.js, but the goal was to remove Vue and refactor the JavaScript to align with the vocabulary approach - using HTML and CSS as much as possible with minimal and plain JavaScript. + +At first, this felt like a huge task, especially since I hadn’t used Vue before. The Vue-based setup handled filtering, UI interactions, and data fetching. Without a framework, I had to ensure that the core functionality remained intact while simplifying the code. + +I started by carefully analyzing how Vue was being used in the project. Then, I broke down the refactor into smaller steps: + +- Removing Vue dependencies and setting up a plan to replace its functionality with vanilla JavaScript. +- Refactoring the JavaScript—rewriting event listeners, handling state manually, and simplifying functions where possible. +- Ensuring everything still worked-since Vue had handled reactivity, I had to make sure UI changes (like filtering issues) were updated correctly without unnecessary complexity. +- Testing and fine-tuning—checking for edge cases and making sure the refactored version behaved just like the Vue version (but with cleaner, more maintainable code). + +## Working with DataTables: A Whole New Learning Curve + +One of the most interesting things I learned during my internship was working with datatables Before this project, I had never even heard of DataTables. I spent time reading through the documentation, testing out different configurations, and experimenting with how it handled datasets. + +Initially, I added DataTables to the project using a **content delivery network (CDN)**, which was the quickest way to integrate it. However, after a suggestion from my mentor, we decided it would be better to download the source code and add it as a vendor folder in the project. + +After setting it up, I worked on overriding some default styles to make sure datatables aligned with Vocabulary’s design system. I had to carefully adjust CSS properties, inspect the DOM structure, and test different solutions to make sure everything looked cohesive. + +This entire process taught me an important lesson: + +> **Documentation is your best friend.** When dealing with a new tool, reading the official documentation can save so much time. + +## From Midterm to Now: Wrapping Up and Final Contributions + +After the midterm blog, my focus shifted towards finishing up the restyling process and addressing minor bugs across the Creative Commons Open Source website. These were smaller but important refinements—ensuring consistency, fixing UI inconsistencies, and making sure everything aligned with the Vocabulary design system. + +### Improving the Search Portal + +One of the websites I worked on was the **Search Portal**. This involved: + +- Defining the CC abbreviation in the header section to improve clarity and accessibility. +- Restyling the search input to align visually with the provided context in Vocabulary, making it feel more integrated with the overall design. +- Making downstream changes to ensure everything was up to date with Vocabulary’s latest standards. + +The goal was to keep the existing functionality and improve on the design, making sure the search input visually aligned with the design system. + +### CC Legal Database(LegalDB): Planning for Future Work + +Although LegalDB was initially part of the project scope, time constraints didn’t allow for implementation. Instead, I'm focusing on laying the groundwork for future contributions by: + +- Identifying necessary changes and documenting them thoroughly. +- Creating all the relevant issues and linking them to the larger tracking issue on Vocabulary, ensuring that future contributors have a clear roadmap to follow. + +This is so that even though I couldn’t complete the work myself, the transition for the next person picking it up would be smooth and well-documented. + +## What’s Next? + +This internship has solidified my love for front-end development, especially when it comes to building interfaces that are both beautiful and functional. My next goal? To dive deeper into **animations, interactivity, and making the web more immersive** (looking at you, **GSAP and Three.js**!). + +I also want to keep contributing to **open source** and continue growing as a developer. This isn’t the end—it’s just the beginning of the next chapter. + +## A Heartfelt Goodbye (For Now!) + +To my mentors, and everyone who supported me during this internship— thank you! Your guidance, patience, and encouragement made this experience truly special. + +To future Outreachy interns: If you ever feel overwhelmed, know that it’s part of the journey. Keep asking questions, keep pushing through challenges, and most importantly—**enjoy the process**. You’ll come out on the other side with skills, confidence, and a whole new appreciation for open source. + +And with that, it’s time to say goodbye to this chapter. + +Until then, **happy coding!** 🚀 diff --git a/content/blog/entries/the-specifics-revamping-CCOS/contents.lr b/content/blog/entries/the-specifics-revamping-CCOS/contents.lr index 6a88f156d..a4819dd76 100644 --- a/content/blog/entries/the-specifics-revamping-CCOS/contents.lr +++ b/content/blog/entries/the-specifics-revamping-CCOS/contents.lr @@ -171,7 +171,7 @@ This is code for the Hero section of the home page. ### Improvements in the Lektor project - -I tried to write the perfect code that is cleaner and readable. I would try to demonstrate my effort using the home page code where I used [Lektor Flowblocks](https://www.getlektor.com/docs/models/flow/). The new homepage design have four sections where each section communicated something and I realized they were all independent and building the whole page through one single template would become a bit messy and hard to handle. So I did some research and found a way where I could build sub-templates and use them all to develop a single page and Lektor’s flowblocks allowed me to do so. Here is one of the flowblock and if you want to check out the whole working you can go to — [CCOS Repository](https://github.com/creativecommons/creativecommons.github.io-source). +I tried to write the perfect code that is cleaner and readable. I would try to demonstrate my effort using the home page code where I used [Lektor Flowblocks](https://www.getlektor.com/docs/models/flow/). The new homepage design have four sections where each section communicated something and I realized they were all independent and building the whole page through one single template would become a bit messy and hard to handle. So I did some research and found a way where I could build sub-templates and use them all to develop a single page and Lektor’s flowblocks allowed me to do so. Here is one of the flowblock and if you want to check out the whole working you can go to — [CCOS Repository](https://github.com/creativecommons/ccos-website-source). #### Recent Blog Post block - diff --git a/content/blog/series/gsoc-2024-ansible-local-dev/contents.lr b/content/blog/series/gsoc-2024-ansible-local-dev/contents.lr new file mode 100644 index 000000000..a730f9889 --- /dev/null +++ b/content/blog/series/gsoc-2024-ansible-local-dev/contents.lr @@ -0,0 +1 @@ +name: GSoC 2024: Ansible Local Dev diff --git a/content/blog/series/gsoc-2024-cc-resource-archive/contents.lr b/content/blog/series/gsoc-2024-cc-resource-archive/contents.lr new file mode 100644 index 000000000..592830737 --- /dev/null +++ b/content/blog/series/gsoc-2024-cc-resource-archive/contents.lr @@ -0,0 +1 @@ +name: GSoC 2024: CC Resource Archive diff --git a/content/blog/series/outreachy-dec-2024-consolidating-and-implementing-vocabulary/contents.lr b/content/blog/series/outreachy-dec-2024-consolidating-and-implementing-vocabulary/contents.lr new file mode 100644 index 000000000..4c89004f8 --- /dev/null +++ b/content/blog/series/outreachy-dec-2024-consolidating-and-implementing-vocabulary/contents.lr @@ -0,0 +1 @@ +name: Outreachy Dec 2024: Consolidating and Implementing Vocabulary diff --git a/content/community/code-of-conduct/contents.lr b/content/community/code-of-conduct/contents.lr index ad45095ae..a390a61f8 100644 --- a/content/community/code-of-conduct/contents.lr +++ b/content/community/code-of-conduct/contents.lr @@ -4,7 +4,7 @@ _template: page-with-toc.html --- title: CC Open Source Code of Conduct --- -description: The following Code of Conduct applies to all digital spaces managed by the Creative Commons technology team, including GitHub, mailing lists, and any other spaces which the development community uses for communication. Our Slack code of conduct is separate and can be found here. +description: The following Code of Conduct applies to all digital spaces managed by the Creative Commons (CC) Technology team, including GitHub, mailing lists, and any other spaces which the development community uses for communication. Our Slack code of conduct is separate and can be found here. --- body: @@ -82,9 +82,9 @@ Enforcement](/community/code-of-conduct/enforcement/). - 2022-05-11 - For a detailed list of changes, see [History for content/community/code-of-conduct/contents.lr - - creativecommons/creativecommons.github.io-source][commits]. + creativecommons/ccos-website-source][commits]. -[commits]: https://github.com/creativecommons/creativecommons.github.io-source/commits/main/content/community/code-of-conduct/contents.lr +[commits]: https://github.com/creativecommons/ccos-website-source/commits/main/content/community/code-of-conduct/contents.lr ## Attribution diff --git a/content/community/code-of-conduct/enforcement/contents.lr b/content/community/code-of-conduct/enforcement/contents.lr index 159b103a3..8b3066d80 100644 --- a/content/community/code-of-conduct/enforcement/contents.lr +++ b/content/community/code-of-conduct/enforcement/contents.lr @@ -9,7 +9,7 @@ body: ## Codes of Conduct This document provides incident reporting guidelines and an enforcement manual -for the following codes of conduct used by Creative Commons: +for the following codes of conduct used by Creative Commons (CC): - [Terms of Use - Creative Commons][terms-of-use] - [CC Open Source Code of Conduct][foss-conduct] @@ -205,9 +205,9 @@ comply with the current policy. ### Last Revised - 2021-05-11 -- For a detailed list of changes, see [History for content/community/code-of-conduct/enforcement/contents.lr - creativecommons/creativecommons.github.io-source][commits]. +- For a detailed list of changes, see [History for content/community/code-of-conduct/enforcement/contents.lr - creativecommons/ccos-website-source][commits]. -[commits]: https://github.com/creativecommons/creativecommons.github.io-source/commits/main/content/community/code-of-conduct/enforcement/contents.lr +[commits]: https://github.com/creativecommons/ccos-website-source/commits/main/content/community/code-of-conduct/enforcement/contents.lr ## Attribution diff --git a/content/community/community-team/project-roles/contents.lr b/content/community/community-team/project-roles/contents.lr index 0055ea624..cac720626 100644 --- a/content/community/community-team/project-roles/contents.lr +++ b/content/community/community-team/project-roles/contents.lr @@ -4,7 +4,7 @@ _template: page-with-toc.html --- title: Community Team: Project Roles --- -description: This page serves as a guide for project-based roles on CC's Community Team. +description: This page serves as a guide for project-based roles on Creative Commons' Community Team. --- body: @@ -20,7 +20,8 @@ Team][communityteam] page. **Who should apply:** -If you’ve contributed to a CC project, you should apply for this role. +If you’ve contributed to a Creative Commons (CC) project, you should apply for +this role. **What does this role give you?** diff --git a/content/community/contents.lr b/content/community/contents.lr index ac5ce2cd6..cca202227 100644 --- a/content/community/contents.lr +++ b/content/community/contents.lr @@ -4,11 +4,10 @@ _template: page-with-toc.html --- title: Join the CC Developer Community --- -description: Join our Slack or mailing list communities to meet other -developers interested in Creative Commons, get feedback on your projects, and -talk with CC's full-time engineering staff. You can also keep up with us on the -CC Open Source Blog or via Twitter. +description: Join our Slack to meet other developers interested in Creative +Commons (CC), get feedback on your projects, and talk with CC's full-time +Technology team members. You can also keep up with us on the CC +Open Source Blog. --- body: @@ -54,9 +53,9 @@ The channels most relevant to CC's developer community are: | `#cc-dev-platform-toolkit` | [mp][mp] project (CC Platform Toolkit) | | `#cc-dev-searchportal` | [search][search] project | | `#cc-dev-vocabulary` | [cc-vocabulary][cc-vocabulary] project | -| `#cc-dev-wordpress` | [wp-plugin-creativecommons][wp-plugin-creativecommons] project (creativecommons WordPress plugin) | | `#cc-dev-workprograms` | **GSoC, GSoD, Outreachy, and other [work programs][workprograms] or internships** | | `#cc-developers` | **general technical issues, new tech blog posts, etc.** | +| `#cc-translation` | Coordinating translation efforts | | `#cc-usability` | general usability issues, seeking feedback on new releases of CC products from the community, etc. | [legaldb]: https://github.com/creativecommons/legaldb @@ -66,7 +65,6 @@ The channels most relevant to CC's developer community are: [mp]: https://github.com/creativecommons/mp [cc-vocabulary]: https://github.com/creativecommons/cc-vocabulary [search]: https://github.com/creativecommons/search -[wp-plugin-creativecommons]: https://github.com/creativecommons/wp-plugin-creativecommons [workprograms]: /programs/ diff --git a/content/community/write-a-blog-post/contents.lr b/content/community/write-a-blog-post/contents.lr index e33aefe14..633a2b189 100644 --- a/content/community/write-a-blog-post/contents.lr +++ b/content/community/write-a-blog-post/contents.lr @@ -4,7 +4,7 @@ _template: page-with-toc.html --- title: Write a Blog Post --- -description: We invite members of the Creative Commons community to write guest posts on our technical blog. +description: We invite members of the Creative Commons (CC) community to write guest posts on our technical blog. --- body: @@ -29,18 +29,18 @@ If you're writing about a project you're working on, here are a few ways you cou - Announce your project and ask for contributions (example: [CC Vocabulary announcement](https://creativecommons.github.io/blog/entries/cc-vocabulary-new-design-system/)) - Write an overview of how your project works without as much narrative (example: [this post about the CC Catalog](https://creativecommons.github.io/blog/entries/cc-catalog-leverage-open-data-1/)) -

If you have more tips, submit an edit to this page.

+

If you have more tips, submit an edit to this page.

## How to post Once you have written your post, you can either send it to us (Markdown is easiest for us, but we're happy to work with other formats) or directly create a pull request for your post as detailed below. -[Pull requests](/contributing-code/pr-guidelines/) should be submitted to the **[creativecommons.github.io-source](https://github.com/creativecommons/creativecommons.github.io-source) repository**. The CC Open Source site is built using the static site generator [Lektor](https://www.getlektor.com/) and your blog post must follow the specific format documented below to appear correctly on the site. For example, please see [this commit adding a post](https://github.com/creativecommons/creativecommons.github.io-source/commit/eac3fbc23b7cadb58fe49d3af3286e4c8bf20d2f). +[Pull requests](/contributing-code/pr-guidelines/) should be submitted to the **[ccos-website-source](https://github.com/creativecommons/ccos-website-source) repository**. The CC Open Source site is built using the static site generator [Lektor](https://www.getlektor.com/) and your blog post must follow the specific format documented below to appear correctly on the site. For example, please see [this commit adding a post](https://github.com/creativecommons/ccos-website-source/commit/eac3fbc23b7cadb58fe49d3af3286e4c8bf20d2f). -1. Each blog entry lives in its own subdirectory of the [content/blog/entries](https://github.com/creativecommons/creativecommons.github.io-source/tree/main/content/blog/entries) folder. Create a new subdirectory with a [slugified](https://blog.tersmitten.nl/slugify/) version of your blog post title. +1. Each blog entry lives in its own subdirectory of the [content/blog/entries](https://github.com/creativecommons/ccos-website-source/tree/main/content/blog/entries) folder. Create a new subdirectory with a [slugified](https://blog.tersmitten.nl/slugify/) version of your blog post title. 1. Create a file named `contents.lr` in the subdirectory you just created. This is the file that will contain your blog post content. 1. If your post uses images or other files, put them in the same subdirectory as the `contents.lr` file. -1. Fill in `contents.lr` in the following format ([see example post](https://raw.githubusercontent.com/creativecommons/creativecommons.github.io-source/main/content/blog/entries/open-development-with-saltstack/contents.lr)): +1. Fill in `contents.lr` in the following format ([see example post](https://raw.githubusercontent.com/creativecommons/ccos-website-source/main/content/blog/entries/open-development-with-saltstack/contents.lr)):
   
   title: Replace this text with the title of your blog post
@@ -54,6 +54,8 @@ Once you have written your post, you can either send it to us (Markdown is easie
   ---
   pub_date: Replace this text with the publication date in YYYY-MM-DD format.
   ---
+  excerpt: Replace this text with a summary of your blog post. This is an optional field. If left blank, the first 100 characters of your blog post will be used.
+  ---
   body:
   Replace this text with your post's content (minus the title). This field accepts Markdown for formatting.
   If you're including images, you can use the Markdown image syntax i.e. ![image-title](image-file-name.jpg).
@@ -62,17 +64,17 @@ Once you have written your post, you can either send it to us (Markdown is easie
   
*Read more about [Markdown formatting here](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet).* -1. Create category pages for any new categories that you've assigned to your post. Each category has its own subdirectory in the [content/blog/categories](https://github.com/creativecommons/creativecommons.github.io-source/tree/main/content/blog/categories) directory. +1. Create category pages for any new categories that you've assigned to your post. Each category has its own subdirectory in the [content/blog/categories](https://github.com/creativecommons/ccos-website-source/tree/main/content/blog/categories) directory. * Create a folder that uses the **the exact category name** as the blog post with its own `contents.lr` file within. - * The new `contents.lr` file within should follow the same format as the other categories. Here's an [example category content file](https://raw.githubusercontent.com/creativecommons/creativecommons.github.io-source/main/content/blog/categories/gsoc-2019/contents.lr). -1. Similarly, if this is your first post, you'll need to create a file with author information. Each author has a subdirectory in the [content/blog/authors](https://github.com/creativecommons/creativecommons.github.io-source/tree/main/content/blog/authors) directory. + * The new `contents.lr` file within should follow the same format as the other categories. Here's an [example category content file](https://raw.githubusercontent.com/creativecommons/ccos-website-source/main/content/blog/categories/gsoc-2019/contents.lr). +1. Similarly, if this is your first post, you'll need to create a file with author information. Each author has a subdirectory in the [content/blog/authors](https://github.com/creativecommons/ccos-website-source/tree/main/content/blog/authors) directory. * Your author folder must have **the exact username** as the author field of the blog post and have a `contents.lr` file within. * The `username` field in the `contents.lr` file should also use the same exact username. - * The author's `contents.lr` file within should follow the same format as the other authors. Here's an [example author content file](https://raw.githubusercontent.com/creativecommons/creativecommons.github.io-source/main/content/blog/authors/TimidRobot/contents.lr). -1. If your blog is part of a connected series, you'll need to make a file with series information. Each series has a subdirectory in the [content/blog/series](https://github.com/creativecommons/creativecommons.github.io-source/tree/main/content/blog/series) directory. + * The author's `contents.lr` file within should follow the same format as the other authors. Here's an [example author content file](https://raw.githubusercontent.com/creativecommons/ccos-website-source/main/content/blog/authors/TimidRobot/contents.lr). +1. If your blog is part of a connected series, you'll need to make a file with series information. Each series has a subdirectory in the [content/blog/series](https://github.com/creativecommons/ccos-website-source/tree/main/content/blog/series) directory. * Create a folder that uses the **the exact series name** as the blog post with its own `contents.lr` file within. - * The new `contents.lr` file within should follow the same format as the other series. Here's an [example series content file](https://raw.githubusercontent.com/creativecommons/creativecommons.github.io-source/main/content/blog/series/gsoc-2019-vocabulary/contents.lr). -1. Build the `creativecommons.github.io-source` project locally (instructions are in the `README` in the repository) and ensure your blog post shows up correctly locally. If you have not created the appropriate category or author files, you will see a build error in this step. + * The new `contents.lr` file within should follow the same format as the other series. Here's an [example series content file](https://raw.githubusercontent.com/creativecommons/ccos-website-source/main/content/blog/series/gsoc-2019-vocabulary/contents.lr). +1. Build the `ccos-website-source` project locally (instructions are in the `README` in the repository) and ensure your blog post shows up correctly locally. If you have not created the appropriate category or author files, you will see a build error in this step. 1. Push your code and make a pull request. 1. Wait for a member of CC's fulltime staff to merge the post into the `main` branch. diff --git a/content/contents.lr b/content/contents.lr index 0f0dc2088..c4b8f8cfc 100644 --- a/content/contents.lr +++ b/content/contents.lr @@ -7,17 +7,24 @@ block_content: #### hero #### title: -We have been building free software at Creative Commons for over a decade. ----- -description: - -We work on code and products that support digital creativity and sharing, from usability of our legal tools to enabling discovery of CC-licensed content. +We have been building free software at Creative Commons (CC) for over a decade. ---- links: +

We work on code and products that support digital creativity and sharing, from usability of our legal tools to enabling discovery of CC-licensed content.

+ + +

This site is for developers looking to contribute, but anyone can use CC tools to share their works.

#### get-involved #### diff --git a/content/contributing-code/contents.lr b/content/contributing-code/contents.lr index 83683dbcd..0f180de45 100644 --- a/content/contributing-code/contents.lr +++ b/content/contributing-code/contents.lr @@ -32,6 +32,13 @@ are some of the ones that are most relevant to finding a good issue to work on: - You do not need our permission to work on one of these issues. - You may work on an issue labeled good first issue even if it's not your first issue. + - Please don't ask for issue assignment or claim issues. Do the work and + submit a pull request (PR). + - Even if multiple people submit PRs for the same issue, multiple ideas and + implementations strengthen the final product. + - For work program applicants, each can all list their own PRs on their + application. It is the quality of work that is important, not whether it + is merged. - **Issues not available for community contribution:** - The following tags mark issues that are _not_ open for community contribution: @@ -81,12 +88,10 @@ on. Once you've found an issue you'd like to work on, please follow these steps to make your contribution: -1. Comment on it and say you're working on that issue. This is to avoid - conflicts with others also working on the issue. If you've followed the - guidelines above, you don't need to ask permission to start work on an - issue. -2. Write your code and submit your pull request. Be sure to read and follow our - **[pull request guidelines](/contributing-code/pr-guidelines/)!** +1. If you have followed the guidelines above, you don't need to ask permission + to start work on an issue. +2. Write your code and submit your pull request (PR). Be sure to read and + follow our **[pull request guidelines](/contributing-code/pr-guidelines/)!** 3. Wait for code review and address any issues raised as soon as you can. **A note on collaboration:** We encourage people to collaborate as much as @@ -123,3 +128,5 @@ When in doubt, ask a question on [one of our community forums](/community/). Recurring donations to Creative Commons Open Source can be made via [Sponsor @creativecommons on GitHub Sponsors](https://github.com/sponsors/creativecommons). + +Thank you to our [Supporters](/supporters/)! diff --git a/content/contributing-code/documentation-guidelines/contents.lr b/content/contributing-code/documentation-guidelines/contents.lr new file mode 100644 index 000000000..f5efc80a6 --- /dev/null +++ b/content/contributing-code/documentation-guidelines/contents.lr @@ -0,0 +1,43 @@ +_model: page +--- +_template: page-with-toc.html +--- +title: Documentation Guidelines +--- +description: This Documentation Guidelines (style guide) ensures all the files in all repositories and any other documentation are properly documented. +--- +body: + +# Documentation guidelines + +The purpose of this guideline is to provide a step-by-step framework for writing and maintaining high-quality documentation for Creative Commons (CC) projects. This guide covers essential sections such as project style guide Preference, Style modification, terminologies, markdown usage. Following these guidelines ensures consistency, clarity, and ease of use for all contributors and users. + +## Style guide reference + +For general writing style and guidelines, refer to the following upstream style guides: + +- [Google Developer Style Guide (Preferred)](https://developers.google.com/style/) +- [Microsoft Writing Style Guide](https://learn.microsoft.com/en-us/style-guide/welcome/) + +## Style preferences modifications + +While adhering to the upstream style guides, observe the following modifications: +- All acronyms must be defined on first use +- Use active voice wherever possible to improve clarity and engagement. +- Keep sentences concise and to the point, avoiding jargon unless necessary. + + +## Terminology + +Establishing a clear "Terminology" section for Creative Commons (CC)-specific usage is crucial. Below are some proprietary terms and their usage: + +- **Creative Commons (CC)**: A non-profit organization enabling sharing and reuse of creative works. +- **Licenses**: Legal tools that allow creators to specify how their works can be used. +- **Attribution**: Giving credit to the creator of a work, required by most CC licenses. + + +## Markdown usage +This section provides guidelines for using Markdown in documentation: +- For comprehensive documentation on GitHub-flavored Markdown, refer to the [GitHub Markdown Guide](https://docs.github.com/en/github/writing-on-github/basic-writing-and-formatting-syntax). +- For additional information on the specific Markdown implementation used in Lektor, visit the [Lektor Markdown Documentation](https://www.getlektor.com/docs/content/#markdown). +- Note: Use code block markup for instructions on installation, deployment, and development, especially to write code commands. diff --git a/content/contributing-code/foundational-tech/contents.lr b/content/contributing-code/foundational-tech/contents.lr new file mode 100644 index 000000000..eb6d2e20d --- /dev/null +++ b/content/contributing-code/foundational-tech/contents.lr @@ -0,0 +1,221 @@ +_model: page +--- +_template: page-with-toc.html +--- +title: Foundational technologies +--- +description: Most or many of Creative Commons' projects require a working +knowledge of these foundational technologies. +--- +body: + + +## Step zero + +Welcome to Creative Commons (CC) software development! We are glad you are +here! ❤️ + +Before engaging with our projects, please ensure you have a working knowledge +of the following technologies: +1. Slack +2. Command line interface (CLI) +3. Code editor +4. GitHub and git +5. Docker + + +## Slack + +Slack is currently our primary channel for chat and lower latency communication. + +For more information, see [Join the CC Developer Community](/community/). + + +## Command line interface (CLI) + +Often shortened to just "command line" or referred to as the "console" or +"terminal", the command line interface (CLI) is where quite a bit of software +development work happens. + + +### Getting started with the CLI + +- [Terminal Tutor – learn the Command Line interactively][terminal-tutor] + +[terminal-tutor]: https://www.terminaltutor.com/ + + +## Code editor + +A code editor or integrated development environment (IDE) provides strong +support for software development. Which one you use is up to personal +preference. The two editors used by the Technology team are currently Visual +Studio Code (recommended) and Vim. + + +### Visual Studio Code + +- [Visual Studio Code - Code Editing. Redefined][vscode] +- Highlighted features: + - [Emmet in Visual Studio Code][emmet] +- Recommended plugins: + - [Docker - Visual Studio Marketplace][vscode-docker] *makes it easy to + build, manage, and deploy containerized applications from Visual Studio + Code. It also provides one-click debugging of Node.js, Python, and .NET + inside a container.* + - [Prettier - Code formatter - Visual Studio Marketplace][prettier]: *is an + opinionated code formatter.* + - Prettier is especially helpful for Web develoment (HTML, JavaScript, + etc.) + - [Rewrap - Visual Studio Marketplace][rewrap] + - Some of our repositories hard wrap code and text at 80 characters + +[vscode]: https://code.visualstudio.com/ +[emmet]: https://code.visualstudio.com/docs/editor/emmet +[vscode-docker]: https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-docker +[prettier]: https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode +[rewrap]: https://marketplace.visualstudio.com/items?itemName=stkb.rewrap + + +### Vim + +- [welcome home : vim online](https://www.vim.org/) +- Recommended plugins (install Vundle first): + - [godlygeek/tabular][tabular]: *Vim script for text filtering and alignment* + - (required by vim-markdown) + - [preservim/vim-markdown][vim-md]: *Markdown Vim Mode* + - [VundleVim/Vundle.vim][vundle]: *Vundle, the plug-in manager for Vim* + +[tabular]: https://github.com/godlygeek/tabular +[vim-md]: https://github.com/preservim/vim-markdown +[vundle]: https://github.com/VundleVim/Vundle.vim + + +## GitHub and git + +All of our projects require a working knowledge of GitHub. It is our primary +repository for code and we utilize many of the sites features for managing +code and higher latency communication. + +[Git - Wikipedia](https://en.wikipedia.org/wiki/Git): +> Git (/ɡɪt/) is a distributed version control system that tracks +> versions of files. It is often used to control source code by programmers who +> are developing software collaboratively. + + +### Installing GitHub + +As a web service, GitHub doesn't require any installation. However, once you +become more familiar with it, you may benefit from installing the GitHub +command line utility: +- [GitHub CLI | Take GitHub to the command line](https://cli.github.com/) + + +### Installing git + +- **Linux:** Git is optimally installed using your distribution's package + manager. See [Git- Download for Linux and Unix][linux-git] for a wide range + of popular distros. +- **macOS:** Mac users can install Git using these instructions: [Git - + Installing Git - Installing on macOS][macos-git] +- **Windows:** + - You must use Windows 10 or 11 with Windows Subsystem for Linux (WSL2). For + installation instructions: see [Install WSL | Microsoft Learn][wsl2]. + - Git should be installed within WSL2, using the appropriate Linux + installation method. For WSL2 Ubuntu, the command is: + ```shell + sudo apt-get install git + ``` + +[linux-git]: https://git-scm.com/download/linux +[macos-git]: https://git-scm.com/book/en/v2/Getting-Started-Installing-Git#_installing_on_macos +[wsl2]: https://docs.microsoft.com/en-us/windows/wsl/install + + +### Getting started with GitHub and Git + +Thankfully GitHub's documentation is relatively robust. Please see: +- [Get started with GitHub documentation - GitHub Docs][github-start] + - [GitHub flow - GitHub Docs][github-flow] +- [GitHub Training Manual][github-training] +- [Fork a repository - GitHub Docs][github-fork] + - [Creating a pull request from a fork - GitHub Docs][github-forkpr] + +[github-start]: https://docs.github.com/en/get-started +[github-flow]: https://docs.github.com/en/get-started/using-github/github-flow +[github-training]: https://githubtraining.github.io/training-manual/#/ +[github-fork]: https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/fork-a-repo +[github-forkpr]: https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request-from-a-fork + + +### CC specifics for GitHub + +For some specifics on how we use GitHub, please see the following information +on this site: +- [Pull Request Guidelines — Creative Commons Open Source][ccos-prs] +- [GitHub Repo Guidelines — Creative Commons Open Source][ccos-repos] +- [Repository Labels — Creative Commons Open Source][ccos-labels] + +[ccos-prs]: /contributing-code/pr-guidelines/ +[ccos-repos]: /contributing-code/github-repo-guidelines/ +[ccos-labels]: /contributing-code/repo-labels/ + + +## Docker + +[Docker (software) - Wikipedia][wikipedia-docker]: +> Docker is a set of platform as a service (PaaS) products that use OS-level +> virtualization to deliver software in packages called containers. [...] +> +> Docker is a tool that is used to automate the deployment of applications in +> lightweight containers so that applications can work efficiently in different +> environments in isolation. + +[wikipedia-docker]: https://en.wikipedia.org/wiki/Docker_(software) + + +### Installing Docker + +- **Linux:** Both Docker Desktop and Docker Engine are separately supported on + Linux. Both include the required Compose command plugin, but Docker Engine is + typically much easier to install: + - _Recommended:_ See [Install Docker Engine | Docker + Docs][linux-docker-engine] for links to installation instructions for + Docker Engine and Compose for various Linux distributions. + - See [Install Docker Desktop on Linux | Docker Docs][linux-docker-desktop] + for links to instructions for the graphical desktop app that includes the + commandline interface and Compose +- **macOS:** Docker Desktop can be installed using these instructions: [Install + Docker Desktop on Mac | Docker Docs][macos-docker]. +- **Windows:** Docker Desktop should be installed on Windows itself and + integrated with Windows Subsystem for Linux (WSL2) as explained in [Docker + Desktop WSL 2 backend on Windows | Docker Docs][windows-docker]. Unlike Git, + you should not install Docker within your WSL2 environment. For installation + instructions: see [Install WSL | Microsoft Learn][wsl2]. + +[linux-docker-engine]: https://docs.docker.com/engine/install +[linux-docker-desktop]: https://docs.docker.com/desktop/install/linux-install +[macos-docker]: https://docs.docker.com/desktop/install/mac-install +[windows-docker]: https://docs.docker.com/desktop/windows/wsl +[wsl2]: https://docs.microsoft.com/en-us/windows/wsl/install + + +### Getting started with Docker + +- [A Docker Tutorial for Beginners][docker-tutorial] + +[docker-tutorial]: https://docker-curriculum.com/ + + +### Docker compose + +Our projects use [Docker Compose | Docker Docs][docker-compose]. + +[docker-compose]: https://docs.docker.com/compose/ + + +## Next steps + +We have added a lot of documentation (ex. language guides) and tooling (issue +finder) to this site that cover frequently asked questions and confusions. +Please explore this site and reach out on Slack for additional assistance. diff --git a/content/contributing-code/github-repo-guidelines/contents.lr b/content/contributing-code/github-repo-guidelines/contents.lr index 78b5c3f1a..ad53b6a52 100644 --- a/content/contributing-code/github-repo-guidelines/contents.lr +++ b/content/contributing-code/github-repo-guidelines/contents.lr @@ -13,7 +13,40 @@ associated with the repository. body: -## Required Items +## Organizational defaults + +The following organizational defaults are automatically applied to all +repositories (per [Creating a default community health file - GitHub +Docs][health-files]). Most repositories _shouldn't_ have their own copies of +these files: +- [`.github/PULL_REQUEST_TEMPLATE.md`][pr-template]: Pull request template + - All pull request templates _must_ include the full text of the [DCO][dco]. +- [`.github/ISSUE_TEMPLATE/bug_report.md`][issue-template-bug]: Bug report + issue template +- [`.github/ISSUE_TEMPLATE/feature_request.md`][issue-template-feature]: + Feature request issue template +- [`CODE_OF_CONDUCT.md`][conduct]: Code of Conduct + - [Adding a code of conduct to your project - GitHub Help][help-conduct] +- [`CONTRIBUTING.md`][contributing]: contributor guidelines + - [Setting guidelines for repository contributors - GitHub + Help][setting-guidelines] +- [`FUNDING.yml`][funding]: Displays a sponsor button +- [`SUPPORT.md`][support]: Documentation on how to get help + +[health-files]: https://docs.github.com/en/communities/setting-up-your-project-for-healthy-contributions/creating-a-default-community-health-file +[pr-template]: https://github.com/creativecommons/.github/blob/main/.github/PULL_REQUEST_TEMPLATE.md +[dco]: https://developercertificate.org/ +[issue-template-bug]: https://github.com/creativecommons/.github/blob/main/.github/ISSUE_TEMPLATE/bug_report.md +[issue-template-feature]: https://github.com/creativecommons/.github/blob/main/.github/ISSUE_TEMPLATE/feature_request.md +[conduct]: https://github.com/creativecommons/.github/blob/main/CODE_OF_CONDUCT.md +[help-conduct]: https://help.github.com/en/articles/adding-a-code-of-conduct-to-your-project +[contributing]: https://github.com/creativecommons/.github/blob/main/CONTRIBUTING.md +[setting-guidelines]: https://help.github.com/en/articles/setting-guidelines-for-repository-contributors +[funding]: https://github.com/creativecommons/.github/blob/main/FUNDING.yml +[support]: https://github.com/creativecommons/.github/blob/main/SUPPORT.md + + +## Required items All GitHub repositories should have the following items to be considered fully ready for external contributors. @@ -24,79 +57,74 @@ ready for external contributors. - `/.github/CODEOWNERS`: Defined code owners - [About code owners - GitHub Help][about-owners] - `/.cc-metadata.yml`: The standard [CC metadata YAML file](#cc-metadata-file). -- `/CODE_OF_CONDUCT.md`: Code of Conduct - - Feel free to use our standard [`CODE_OF_CONDUCT.md`][conduct] file from - [creativecommons/.github][dot-github] - - [Adding a code of conduct to your project - GitHub Help][help-condcut] - `/LICENSE`: license file. -- `/CONTRIBUTING.md`: contributor guidelines - - Can be project-specific or our standard [`CONTRIBUTING.md`][contributing] - file from [creativecommons/.github][dot-github] - - [Setting guidelines for repository contributors - GitHub - Help][setting-guidelines] -- `/README.md`: read me information file - - Must documents how to install and build the project locally and documents a +- `/README.md`: repository information file + - begin with an H1 heading identical to repository name followed by a + repository description + - Must document how to install and build the project locally and documents a high level overview of the project and code structure. It should also link to any other available documentation. -- **All pull request templates must include the full text of the [DCO][dco].** + - Must document the Code of Conduct. For example, see the [Code of + Conduct][section-coc] `README.md` section in + `creativecommons/index-dev-env`. + - Must document Contributing. For example, see the + [Contributing][section-contrib] `README.md` section in + `creativecommons/index-dev-env`. [about-owners]: https://help.github.com/en/articles/about-code-owners -[conduct]: https://github.com/creativecommons/vocabulary/blob/main/CODE_OF_CONDUCT.md -[dot-github]: https://github.com/creativecommons/.github -[help-condcut]: https://help.github.com/en/articles/adding-a-code-of-conduct-to-your-project -[contributing]: https://github.com/creativecommons/vocabulary/blob/main/CONTRIBUTING.md -[setting-guidelines]: https://help.github.com/en/articles/setting-guidelines-for-repository-contributors -[dco]: https://developercertificate.org/ - +[section-coc]: https://github.com/creativecommons/index-dev-env/blob/main/README.md#code-of-conduct +[section-contrib]: https://github.com/creativecommons/index-dev-env/blob/main/README.md#contributing -### Additional Items -- CI and code style linters that run automatically whenever new code is pushed - (if applicable to the project). -- At least a couple of automated tests (if applicable to the project). +## Additional items +As applicable or appropriate, each repository should include: +- GitHub Actions for formatting, linting, styling, etc. +- GitHub Actions for unit tests -## Optional items -- [Issue templates][issue-templates]. GitHub pulls the default templates from - our [`.github` repository][dot-github] automatically, but if you want/need to - customize them, create them in your repository. -- A [pull request template][pr-template]. GitHub pulls the default template - from our [`.github` repository][dot-github] automatically, but if you - want/need to customize it, create it in your repository. -- [Support resources][support-resources]. GitHub pulls the default `SUPPORT.md` - file from our [`.github` repository][dot-github] automatically, but if you - want/need to customize it, create it in your repository. +## Repository configuration -[issue-templates]: https://help.github.com/en/articles/creating-issue-templates-for-your-repository -[dot-github]: https://github.com/creativecommons/.github -[pr-template]: https://help.github.com/en/articles/creating-a-pull-request-template-for-your-repository -[support-resources]: https://help.github.com/en/articles/adding-support-resources-to-your-project +- Main page: About ⚙️ (Edit repository details) + - Description should match `README.md` + - Add appropriate Topics + - Disable/Uncheck any of the "Include in home page" that are not relevant to + the repository (ex. if no packages are provided, uncheck Packages). +- Settings: General + - Features + - Disable/Uncheck Wikis unless you are going to use that feature + - Disable/Uncheck Discussions unless you are going to use that feature + - Disable/Uncheck Projects unless you are going to use that feature + - Pull Requests + - Enable/check Automatically delete head branches +- Settings: Collaborators and teams + - Ensure, at a minimum that the team in `/.github/CODEOWNERS` has write + permissions -## Standard Labels +## Standard labels All repositories must contain a set of standard labels, [documented here](/contributing-code/repo-labels/), which comprise of common labels in addition to repository-specific skill labels. You don't have to set these up manually. The labels are [automatically -managed](https://github.com/creativecommons/ccos-scripts) on all CC -repositories, and so, must not be renamed. +managed](https://github.com/creativecommons/ccos-scripts) on all Creative +Commons (CC) repositories, and so, must not be renamed. Repositories may contain additional custom labels as well which will remain unaffected by the sync. It is recommended that custom labels be explained in the contribution guidelines for that project. -## Branch Protections +## Branch protections -Branch protections are automatically set up by CC staff via +Branch protections are automatically set up by CC team members via [creativecommons/ccos-scripts](https://github.com/creativecommons/ccos-scripts). By default, pushing directly to the *default branch* (ex. `main`) is disabled and all pull requests require review by at least one person before merge. -## CC Metadata file +## CC metadata file Each repo should have a `.cc-metadata.yml` file in the root directory with the following structure: @@ -106,8 +134,8 @@ following structure: engineering_project: true # Name of the repository/project in English english_name: CC Catalog API -# All technologies used -technologies: Python, Django, Django REST Framework, Elasticsearch +# All technologies used, sorted +technologies: Django, Django REST Framework, Elasticsearch, Python # Whether this repository should be featured on the CC Open Source site's "Projects" page featured: false # Slack channel name (optional key) diff --git a/content/contributing-code/issue-finder/contents.lr b/content/contributing-code/issue-finder/contents.lr index 3082200f2..2f722179c 100644 --- a/content/contributing-code/issue-finder/contents.lr +++ b/content/contributing-code/issue-finder/contents.lr @@ -4,10 +4,10 @@ _template: issue_finder.html --- title: Issue Finder --- -description: Welcome to the CC developer community! We're absolutely delighted -to have you here. If you want to contribute but are unsure where to start, you -can use this issue finder to find an issue that matches your skills and -experience level. +description: Welcome to the Creative Commons (CC) developer community! We're +absolutely delighted to have you here. If you want to contribute but are unsure +where to start, you can use this issue finder to find an issue that matches +your skills and experience level. --- body: diff --git a/content/contributing-code/pr-guidelines/contents.lr b/content/contributing-code/pr-guidelines/contents.lr index a458bec52..a89a61aba 100644 --- a/content/contributing-code/pr-guidelines/contents.lr +++ b/content/contributing-code/pr-guidelines/contents.lr @@ -4,7 +4,12 @@ _template: page-with-toc.html --- title: Pull Request Guidelines --- -description: We ask that contributors to CC projects submit a pull request with your changes. If you're not familiar with pull requests, please read [this GitHub documentation](https://help.github.com/en/articles/about-pull-requests). Here are our expectations for pull requests; following them will expedite the process of merging your code in. +description: We ask that contributors to Creative Commons (CC) projects submit +a pull request with your changes. If you're not familiar with pull requests, +please read [this GitHub documentation][github-pr]. Here are our expectations +for pull requests; following them will expedite the process of merging your +code in. +[github-pr]: https://help.github.com/en/articles/about-pull-requests --- body: diff --git a/content/contributing-code/repo-labels/contents.lr b/content/contributing-code/repo-labels/contents.lr index de0494d1c..53d6e355e 100644 --- a/content/contributing-code/repo-labels/contents.lr +++ b/content/contributing-code/repo-labels/contents.lr @@ -4,13 +4,16 @@ _template: page-with-toc.html --- title: Repository Labels --- -description: To facilitate the community in finding ways to contribute that match their experiences and skillsets, we have developed a comprehensive system for labelling issues and PRs. This is an introduction to this standard labelling scheme. +description: To facilitate the community in finding ways to contribute that +match their experiences and skillsets, we have developed a comprehensive system +for labelling issues and PRs. This is an introduction to this standard +labelling scheme. --- body: -Labels consist of three fields, viz. name, description and color. Label names -should have a consistent format to aid both filtering within the github UI as -well as scanning visually through the list. The following format is the most +Labels consist of three fields, viz. name, description and color. Label names +should have a consistent format to aid both filtering within the github UI as +well as scanning visually through the list. The following format is the most suited to this task (where `⎵` denotes a single space): ``` @@ -31,6 +34,7 @@ An issue has many different attributes: - Talk - Friendliness + ### *Priority
@@ -59,8 +63,8 @@ An issue has many different attributes:
-The priority of an issue is based on its impact, derived from a combination of -urgency and importance. This determines the importance of the issue when sprint +The priority of an issue is based on its impact, derived from a combination of +urgency and importance. This determines the importance of the issue when sprint planning or deciding which issues to tackle next. - @@ -80,6 +84,7 @@ planning or deciding which issues to tackle next. - **Description:** Low priority and doesn't need to be rushed + ### *Status
@@ -112,32 +117,24 @@ The status of the issue determines whether it is ready for work or not. Issues may not be ready to be worked on for a number of reasons and the maintainers must keep updating the labels as the situation evolves. -An issue, at the time of closing can have either the +An issue, at the time of closing can have either the 🏁 status: ready for dev -or the +or the ⛔️ status: discarded label based on whether it was closed with or without resolution, respectively. -- - 🏁 status: ready for dev +- + 🚦 status: awaiting triage - - **Description:** Ready for work + - **Description:** Has not been triaged & therefore, not ready for work - 🚧 status: blocked - **Description:** Blocked & therefore, not ready for work -- - 🧹 status: ticket work required - - - **Description:** Needs more details before it can be worked on -- - 🏷 status: label work required - - - **Description:** Needs proper labelling before it can be worked on - ⛔️ status: discarded @@ -146,10 +143,19 @@ label based on whether it was closed with or without resolution, respectively. 🙅 status: discontinued - **Description:** Not suitable for work as repo is in maintenance -- - 🚦 status: awaiting triage +- + 🏷 status: label work required - - **Description:** Has not been triaged & therefore, not ready for work + - **Description:** Needs proper labelling before it can be worked on +- + 🏁 status: ready for dev + + - **Description:** Ready for work +- + 🧹 status: ticket work required + + - **Description:** Needs more details before it can be worked on + ### *Goal @@ -158,10 +164,11 @@ represents the impact of the issue on the scope of the software. - ⭐ goal: addition - **Description:** Addition of new feature -- ✨ goal: improvement - - **Description:** Improvement to an existing feature - 🛠 goal: fix - **Description:** Bug fix +- ✨ goal: improvement + - **Description:** Improvement to an existing feature + ### *Aspect @@ -169,43 +176,48 @@ The aspect of an issue is the side of the project that the issue deals with. A single codebase can have multiple aspects to it and knowing which ones will be touched helps contributors find relevant issues. -- 📄 aspect: text - - **Description:** Concerns the textual material in the repository - 💻 aspect: code - **Description:** Concerns the software code in the repository -- 🕹 aspect: interface - - **Description:** Concerns end-users' experience with the software +- 📖 aspect: docs + - **Description:** Concerns the documentation in the repository - 🤖 aspect: dx - **Description:** Concerns developers' experience with the codebase +- 🕹 aspect: interface + - **Description:** Concerns end-users' experience with the software +- 📄 aspect: text + - **Description:** Concerns the textual material in the repository + ### Skill -The technical skills a person is required to possess to work on the issue. +The technical skills a person is required to possess to work on the issue. Skills are a special type of label that vary by repository. Issues may not have a skill tag if no special skills are required. - 💪 skill: <skill name> - **Description:** Requires proficiency in '<skill name>' + ### Talk Issues with interaction labels do not entail any work to be done on the -repository. They are for Q&A, RFCs and any other form of discussions. While both -of these may appear to be too similar, triage permissions are granted to +repository. They are for Q&A, RFCs and any other form of discussions. While +both of these may appear to be too similar, triage permissions are granted to collaborators who might not have the answers to questions but by labelling them as such, they might draw a faster response from an experienced contributor who -does. _In the future this category might be rendered redundant by GitHub +does. _In the future this category might be rendered redundant by GitHub Discussions and will be removed._ -- ❓ talk: question - - **Description:** Can be resolved with an answer - 💬 talk: discussion - **Description:** Open for discussions and feedback +- ❓ talk: question + - **Description:** Can be resolved with an answer + ### Friendliness -The level of friendliness a particular issue is the valency of the issue -towards contributions from the community. Some issues provide a great +The level of friendliness a particular issue is the valency of the issue +towards contributions from the community. Some issues provide a great introduction while others require a little more familiarity with the codebase. _These issues do not have the category prefix as two of them are special labels recognized by GitHub. The special ones don't have emojis either._ @@ -215,7 +227,8 @@ recognized by GitHub. The special ones don't have emojis either._ - help wanted - **Description:** Open to participation from the community - 🔒 staff only - - **Description:** Restricted to CC staff members + - **Description:** Restricted to Creative Commons (CC) team members + ### Miscellaneous @@ -223,22 +236,19 @@ recognized by GitHub. The special ones don't have emojis either._ 🤯 ノಠ益ಠノ彡┻━┻ - **Description:** Aaargh! -- - Hacktoberfest - - - **Description:** Good issues for Hacktoberfest participants - invalid - **Description:** Inappropriate or invalid (ex. Hacktoberfest spam) + ## Usage rules In the above categories, some are marked with an `*` sign. Those are mandatory categories and every issue is required to have at least one label from those categories. -Only issues labelled with +Only issues labelled with 🚦 status: awaiting triage @@ -246,4 +256,4 @@ are allowed to not have all mandatory labels (seeing as they have not been triaged yet). Categories not marked with an `*` are optional and it is upto the discretion of -the maintainers to have apply labels from those categories to issues. \ No newline at end of file +the maintainers to have apply labels from those categories to issues. diff --git a/content/contributing-code/translation-guide/contents.lr b/content/contributing-code/translation-guide/contents.lr index 99e6c70ab..058185671 100644 --- a/content/contributing-code/translation-guide/contents.lr +++ b/content/contributing-code/translation-guide/contents.lr @@ -4,14 +4,17 @@ _template: page-with-toc.html --- title: Translation Guide --- -description: Our translation files are hosted and managed on [Transifex](https://www.transifex.com). It's very easy to sign up for an account and start translation CC services into another language. +description: Our translation files are hosted and managed on +[Transifex](https://www.transifex.com). It is very easy to sign up for an +account and start translation Creative Commons (CC) services into another +language. --- body: -CC applications such as CC Search and the CC License Chooser are used by -millions of users worldwide. Translating these services into the languages our -users speak and read is integral to making these services accessible to our -diverse user base. +CC applications such as CC Search and the CC Chooser are used by millions of +users worldwide. Translating these services into the languages our users speak +and read is integral to making these services accessible to our diverse user +base. We use Transifex to manage our translation files. It provides an intuitive UI and many useful tools. Let's see how you can join us there and get started. @@ -19,16 +22,17 @@ and many useful tools. Let's see how you can join us there and get started. TL;DR: We have a [video version](https://www.youtube.com/watch?v=Rta2AlPww8M) of this tutorial if you prefer that as the medium of instruction. + ## For translators -* **Sign up on Transifex** - * Visit the Transifex [sign up page](https://www.transifex.com/signup/) and +- **Sign up on Transifex** + - Visit the Transifex [sign up page](https://www.transifex.com/signup/) and fill out the form to create an account. - * You can create a new account using your email address, a username and a + - You can create a new account using your email address, a username and a password. - * Alternatively you can link an existing account from GitHub, Google or + - Alternatively you can link an existing account from GitHub, Google or LinkedIn to avoid having to remember another password. - * During the sign up process, you will be asked for the languages you speak. + - During the sign up process, you will be asked for the languages you speak. Remember to fill it as comprehensively as possible.

@@ -38,12 +42,12 @@ of this tutorial if you prefer that as the medium of instruction. src="./transifex_signup.png">

-* **Verify your email** +- **Verify your email** You will receive an email from Transifex on the email address you signed up. Clicking the link in the email will verify that you used an authentic email to sign up and enable all the features on your account. -* **Visit the CC Organisation page** +- **Visit the CC Organisation page** The [organisation page](https://www.transifex.com/creativecommons/public/) contains links to all CC projects currently in translation. @@ -54,7 +58,7 @@ of this tutorial if you prefer that as the medium of instruction. src="./transifex_org_page.png">

-* **Choose a project** +- **Choose a project** Choose any project from the list that you would like to translate. Click on the project name to go to the project page. @@ -65,18 +69,21 @@ of this tutorial if you prefer that as the medium of instruction. src="./transifex_summit.png">

-* **Join the team** - * You can see a list of languages that each project has been translated into. +- **Join the team** + - You can see a list of languages that each project has been translated into. Not all languages are visible. Click on the 'Display all languages' button to see them all. - * If your language isn't present in the list, you can request for it by + - If your language isn't present in the list, you can request for it by clicking the 'Request language' button. You will have to go to the previous step and find a different project till your language request is approved. - * If your language is present, click on the 'Join team' button to join the + - If your language is present, click on the 'Join team' button to join the team that's translating this project. - * In the modal choose your language and click the 'Join' button. You'll - receive a notification that a request has been submitted. Wait for an - administrator to add you to the team. + - In the modal choose your language and click the 'Join' button. You'll + receive a notification that a request has been submitted. + - Notify the `cc-translation` channel on Slack + - See [Join the CC Developer Community — Creative Commons Open + Source](/community/) for instructions on joining Slack + - Wait for an administrator to add you to the team.

-* **Getting around** - * You'll receive an email when your request has been accepted. - * When you log back in to Transifex, you'll see some changes in the UI. - * You'll have Creative Commons mentioned in the organisation dropdown. - * You'll see CC projects in the left sidebar. - * Click on the project of your choice from the sidebar. +- **Getting around** + - You'll receive an email when your request has been accepted. + - When you log back in to Transifex, you'll see some changes in the UI. + - You'll have Creative Commons mentioned in the organisation dropdown. + - You'll see CC projects in the left sidebar. + - Click on the project of your choice from the sidebar.

-* **Translate the strings** - * Find your language from the list of languages. Hovering over the name will +- **Translate the strings** + - Find your language from the list of languages. Hovering over the name will reveal a 'View resource' button. - * Click on the 'View resource' button. That should take you to the page of + - Click on the 'View resource' button. That should take you to the page of that particular language. It contains the resources that you need to translate. - * Clicking on the resource opens a modal describing the words and strings that + - Clicking on the resource opens a modal describing the words and strings that remain to be translated. Here onwards you have three paths for translating the site. - Transifex editor UI, by clicking the 'Translate' button @@ -119,18 +126,20 @@ of this tutorial if you prefer that as the medium of instruction. src="./transifex_resource_modal.png">

-* * **Method 1: Translating using the Transifex editor UI** - * To do this, click on the 'Translate' button from the resource modal. You - will be taken to a list of all the strings from the website. - * Switch the language to your target language using the menu bar on the - upper side of the screen. - * Click on any string, enter the translation in the lower box and click - the 'Save Translation' button to commit the change. - * Some text has HTML tags in it. In those cases you can click on the tags in - the source text to copy them over in the translated text. You can also - drag to move them around as needed. - * Keep [these instructions](https://wiki.creativecommons.org/wiki/Translating_CC_Deeds#General_Notes_About_Translating) - in mind. +- **Method 1: Translating using the Transifex editor UI** + - To do this, click on the 'Translate' button from the resource modal. You + will be taken to a list of all the strings from the website. + - Switch the language to your target language using the menu bar on the upper + side of the screen. + - Click on any string, enter the translation in the lower box and click the + 'Save Translation' button to commit the change. + - Some text has HTML tags in it. In those cases you can click on the tags in + the source text to copy them over in the translated text. You can also drag + to move them around as needed. + - Keep these instructions in mind: [General Notes About Translating - + Translating CC Deeds - CC Public Wiki][wiki-translate-notes] + +[wiki-translate-notes]: https://wiki.creativecommons.org/wiki/Translating_CC_Deeds#General_Notes_About_Translating

-* * **Method 2: Translating using the Transifex live UI** - * To do this, click on the 'Live' button from the resource modal. You will - be taken to the website rendered in the Transifex page and you can edit - the text directly. - * Switch the language to your target language using the sidebar on the right - side of the screen. - * All the text is green boxes can be translated. Click on the pencil icon - that appears when you move your mouse over the green boxes. - * Enter your translated string in the lower box and press the 'Save' button - to confirm the translation. +- **Method 2: Translating using the Transifex live UI** + - To do this, click on the 'Live' button from the resource modal. You will be + taken to the website rendered in the Transifex page and you can edit the + text directly. + - Switch the language to your target language using the sidebar on the right + side of the screen. + - All the text is green boxes can be translated. Click on the pencil icon + that appears when you move your mouse over the green boxes. + - Enter your translated string in the lower box and press the 'Save' button + to confirm the translation.

-* * **Method 3: Translating strings locally** - * To do this, you can download the JSON file that maps English strings to - their counterparts in your language by clicking the 'Download file to - translate' button. - * For the untranslated strings, both key and value will be the same. - ```json - { "Hello, World!": "Hello, World!" } - ``` - * Change the JSON values to the translated text. - ```json - { "Hello World": "नमस्ते, दुनिया!" } - ``` - * Upload the translated JSON file using the 'Upload file' button. +- **Method 3: Translating strings locally** + - To do this, you can download the JSON file that maps English strings to + their counterparts in your language by clicking the 'Download file to + translate' button. + - For the untranslated strings, both key and value will be the same. + ```json + { "Hello, World!": "Hello, World!" } + ``` + - Change the JSON values to the translated text. + ```json + { "Hello World": "नमस्ते, दुनिया!" } + ``` + - Upload the translated JSON file using the 'Upload file' button. Your translations will go live as soon as they are approved by the admins. + ## For admins -* **Approve team join requests** - * Click on the person's name to see their profile. That could help in +- **Approve team join requests** + - Click on the person's name to see their profile. That could help in determining the credibility of the candidate. - * Click the 'Accept' button if you want to add the collaborator to the team. + - Click the 'Accept' button if you want to add the collaborator to the team. You'll receive a notification confirming the acceptance of the translator.

@@ -188,12 +198,12 @@ Your translations will go live as soon as they are approved by the admins. src="./transifex_join_request.png">

-* **Review translations** - * Navigate to the resource as described for translators in the 'Translate the +- **Review translations** + - Navigate to the resource as described for translators in the 'Translate the strings' section. - * In the resource modal that appears, click on the 'View strings online' + - In the resource modal that appears, click on the 'View strings online' button. You will be taken to the strings page. - * Click on the 'Unreviewed' tab. Approve or decline the translation as + - Click on the 'Unreviewed' tab. Approve or decline the translation as applicable.

@@ -201,4 +211,11 @@ Your translations will go live as soon as they are approved by the admins. style="max-height: 503px; border: 1px solid #ccc;" alt="Screenshot of the Transifex 'Unreviewed translations' page" src="./transifex_review_translation.png"> -

\ No newline at end of file +

+ + +## Additional resources + +- [Translate - CC Public Wiki][wiki-translate] + +[wiki-translate]: https://wiki.creativecommons.org/wiki/Translate diff --git a/content/contributing-code/usability/contents.lr b/content/contributing-code/usability/contents.lr index fb84ea841..47503299c 100644 --- a/content/contributing-code/usability/contents.lr +++ b/content/contributing-code/usability/contents.lr @@ -6,7 +6,7 @@ title: Usability --- body: -At CC, our goal is to make our products as easy and delightful to use as possible. To that end, we are constantly talking to our users. Sometimes our sessions involve understanding current experiences and identifying pain points, other times we’re determining upcoming feature prioritization. If we plan to roll out a new product, or design a new interface or feature for an existing product, we do research! We appreciate our users volunteering their time to help us with this research by participating in test sessions. +At Creative Commons (CC), our goal is to make our products as easy and delightful to use as possible. To that end, we are constantly talking to our users. Sometimes our sessions involve understanding current experiences and identifying pain points, other times we’re determining upcoming feature prioritization. If we plan to roll out a new product, or design a new interface or feature for an existing product, we do research! We appreciate our users volunteering their time to help us with this research by participating in test sessions. ## Participate in a Session When we’re rolling out a specific feature, we do **usability tests** to test the proposed experience. diff --git a/content/multiple-authors.jpg b/content/multiple-authors.jpg new file mode 100644 index 000000000..775b5e6f3 Binary files /dev/null and b/content/multiple-authors.jpg differ diff --git a/content/programs/applicant-guide/contents.lr b/content/programs/applicant-guide/contents.lr index 807366c9d..41d2d1b64 100644 --- a/content/programs/applicant-guide/contents.lr +++ b/content/programs/applicant-guide/contents.lr @@ -5,10 +5,11 @@ _template: page-with-toc.html title: Open Source Work Programs: Applicant Guide --- description: -CC participates in open source work programs such as Google Summer of Code -(GSoC) and Outreachy. Both CC staff and community members are welcome to lead -projects. Details about specific programs and rounds are listed in the -[Overview page](/programs); this page serves as a general guide to applicants. +Creative Commons (CC) participates in open source work programs such as Google +Summer of Code (GSoC) and Outreachy. Both CC team members and community members +are welcome to lead projects. Details about specific programs and rounds are +listed in the [Overview page](/programs); this page serves as a general guide +to applicants. --- body: diff --git a/content/programs/contents.lr b/content/programs/contents.lr index 695a9c4ce..cf0b71858 100644 --- a/content/programs/contents.lr +++ b/content/programs/contents.lr @@ -22,27 +22,21 @@ CC isn't currently participating in Google Season of Docs (GSoD). ### Google Summer of Code -CC is participating in Google Summer of Code (GSoC) 2023. +CC is [Skipping Google Summer of Code (GSoC) 2025][skipping2025]. We hope to +apply again to participate in 2026. - [Program website](https://summerofcode.withgoogle.com/) -- [CC's GSoC 2023 page][gsoc2023cc] -[gsoc2023cc]: https://summerofcode.withgoogle.com/programs/2023/organizations/creative-commons +[skipping2025]: /blog/entries/2025-01-15-skipping-gsoc-2025/ ### Outreachy -CC is participating in the [Outreachy December 2022 to March 2023 -Internships][dec2022]. - -CC isn't participating in the May 2023 internships. - -CC will participate in the December 2023 internships. +CC is participating in the December 2024 cohort. We are planning on also participating in the December 2025 cohort. - [Program website](https://www.outreachy.org/) - [CC's Outreachy page][outreachycc] -[dec2022]: https://www.outreachy.org/apply/project-selection/#creative-commons [outreachycc]: https://www.outreachy.org/communities/cfp/creative-commons/ @@ -68,16 +62,21 @@ CC will participate in the December 2023 internships. | Name | Pronouns | Slack Username | Time Zone | | ---- | -------- | -------------- | --------- | -| [Sara][authorsara] | she/her | `@sara` | Central (CDT UTC-06:00 / CST UTC-05:00) | -| [Timid Robot][authortimidrobot] | they/them | `@Timid Robot` | Pacific (PDT UTC-08:00 / PST UTC-07:00) | +| [Sara][authorsara] | she/her | `@sara` | Central (CDT UTC-05:00 / CST UTC-06:00) | +| [Shafiya][authorshafiya] | she/her | `@Shafiya Heena` | Eastern (EDT UTC-04:00 / EST UTC-05:00) | +| [Timid Robot][authortimidrobot] | they/them | `@Timid Robot` | Pacific (PDT UTC-07:00 / PST UTC-08:00) | [authorsara]: /blog/authors/sara/ +[authorshafiya]: /blog/authors/shafiya/ [authortimidrobot]: /blog/authors/TimidRobot/ + ## Other Opportunities -Apart from the mentioned Creative Commons collaborations, there are numerous additional ways to enhance your knowledge and make meaningful contributions to open source communities: +Apart from the mentioned Creative Commons collaborations, there are numerous +additional ways to enhance your knowledge and make meaningful contributions to +open source communities: - [tapaswenipathak/Open-Source-Programs][otherprogs]: A list of open source programs. -[otherprogs]: https://github.com/tapaswenipathak/Open-Source-Programs \ No newline at end of file +[otherprogs]: https://github.com/tapaswenipathak/Open-Source-Programs diff --git a/content/programs/contrib-guide/contents.lr b/content/programs/contrib-guide/contents.lr index 6a9f7e244..02f9af04c 100644 --- a/content/programs/contrib-guide/contents.lr +++ b/content/programs/contrib-guide/contents.lr @@ -5,10 +5,11 @@ _template: page-with-toc.html title: Open Source Work Programs: Contributor Guide --- description: -CC participates in open source work programs such as GSoC and Outreachy. Both -CC staff and community members are welcome to lead projects. Details about -specific programs and rounds are listed in the [Overview page](/programs); this -page serves as a general guide for accepted contributors. +Creative Commons (CC) participates in open source work programs such as Google +Summer of Code (GSoC) and Outreachy. Both CC team members and community members +are welcome to lead projects. Details about specific programs and rounds are +listed in the [Overview page](/programs); this page serves as a general guide +for accepted contributors. --- body: diff --git a/content/programs/history/contents.lr b/content/programs/history/contents.lr index a2a285b88..ebbee9672 100644 --- a/content/programs/history/contents.lr +++ b/content/programs/history/contents.lr @@ -22,39 +22,20 @@ first time in 2020. ## Google Summer of Code -CC has participated in Google Summer of Code (GSoC) nine times since 2006: +CC has participated in Google Summer of Code (GSoC) ten times since 2006: - *[All GSoC Open Source Blog posts](/blog/categories/gsoc/)* +- [Google Summer of Code 2024](https://summerofcode.withgoogle.com/archive/2024/organizations/creative-commons) + - [Open Source Blog Posts](/blog/categories/gsoc-2024/) +- [Google Summer of Code + 2023](https://summerofcode.withgoogle.com/archive/2023/organizations/creative-commons) + - [Open Source Blog posts](/blog/categories/gsoc-2023/) - [Google Summer of Code 2020](https://summerofcode.withgoogle.com/archive/2020/organizations/5450793232105472/) - [Open Source Blog posts](/blog/categories/gsoc-2020/) - - [Welcome Our Interns from Google Summer of Code and - Outreachy!](https://creativecommons.org/2020/05/11/welcome-interns-google-summer-of-code-and-outreachy/) - - [The Improved CC - Search](https://creativecommons.org/2020/12/15/the-improved-cc-search/) - - [Important Updates to the Creative Commons - Catalog](https://creativecommons.org/2020/11/02/updates-to-the-creative-commons-catalog/) - - [New Improvements in the CC Search Browser - Extension](https://creativecommons.org/2020/12/07/new-improvements-in-the-cc-search-browser-extension/) - - [The Linked Commons 2.0: What’s - New?](https://creativecommons.org/2020/11/04/the-linked-commons-2-0-whats-new/) - [Google Summer of Code 2019](https://summerofcode.withgoogle.com/archive/2019/organizations/5500455663173632/) - [Open Source Blog posts](/blog/categories/gsoc-2019/) - - [CC + Google Summer of Code - 2019](https://creativecommons.org/2019/03/04/cc-google-summer-of-code-2019/) - - [Meet CC’s 2019 Google Summer of Code - students](https://creativecommons.org/2019/05/30/meet-ccs-2019-google-summer-of-code-students/) - - [Introducing the Updated Creative Commons WordPress - Plugin](https://creativecommons.org/2019/11/22/updated-cc-wordpress-plugin/) - - [Introducing CC Vocabulary, Our New Web Design - System](https://creativecommons.org/2019/12/13/cc-vocabulary-web-design-system/) - - [Introducing the CC Search Browser - Extension](https://creativecommons.org/2020/01/06/cc-search-browser-extension/) - - [Introducing the Linked - Commons](https://creativecommons.org/2020/01/23/introducing-the-linked-commons/) - - [Here’s a Sneak Peek at the Updated Creative Commons - Chooser](https://creativecommons.org/2020/01/27/the-new-cc-license-chooser/) - [Google Summer of Code 2013](https://www.google-melange.com/archive/gsoc/2013/orgs/cc) - [Google Summer of Code @@ -73,23 +54,18 @@ CC has participated in Google Summer of Code (GSoC) nine times since 2006: ## Outreachy -CC participated in Outreachy three times since 2019: +CC participated in Outreachy four times since 2019: - *[All Outreachy Open Source Blog posts](/blog/categories/outreachy/)* -- [Outreachy December 2021 - March +- [Outreachy **December 2022** - March + 2023](https://www.outreachy.org/outreachy-december-2022-internship-round/) + - [Open Source Blog posts](/blog/categories/outreachy-2022/) +- [Outreachy **December 2021** - March 2022](https://www.outreachy.org/outreachy-december-2021-internship-round/) - [Open Source Blog posts](/blog/categories/outreachy-2021/) -- [Outreachy May 2020 - August +- [Outreachy **May 2020** - August 2020](https://www.outreachy.org/outreachy-may-2020-internship-round/) - [Open Source Blog posts](/blog/categories/outreachy-2020/) - - [Welcome Our Interns from Google Summer of Code and - Outreachy!](https://creativecommons.org/2020/05/11/welcome-interns-google-summer-of-code-and-outreachy/) - - [Say Hello to Our New CC Open Source - Website!](https://creativecommons.org/2020/11/02/cc-open-source-website/) - - [Explore the New CC Legal Database - Site!](https://creativecommons.org/2020/12/03/explore-the-new-cc-legal-database-site/) -- [Outreachy December 2019 - March +- [Outreachy **December 2019** - March 2020](https://www.outreachy.org/december-2019-to-march-2020-internship-round/) - [Open Source Blog posts](/blog/categories/outreachy-2019-20/) - - [Meet Our 2020 Interns From - Outreachy](https://creativecommons.org/2019/12/10/2020-outreachy-interns/) diff --git a/content/programs/lead-guide/contents.lr b/content/programs/lead-guide/contents.lr index 6554f7362..8677111f3 100644 --- a/content/programs/lead-guide/contents.lr +++ b/content/programs/lead-guide/contents.lr @@ -5,10 +5,11 @@ _template: page-with-toc.html title: Open Source Work Programs: Project Lead Guide --- description: -CC participates in open source work programs such as GSoC and Outreachy. Both -CC staff and community members are welcome to lead projects. Details about -specific programs and rounds are listed in the [Overview page](/programs); this -page serves as a general project lead guide. +Creative Commons (CC) participates in open source work programs such as Google +Summer of Code (GSoC) and Outreachy. Both CC team members and community members +are welcome to lead projects. Details about specific programs and rounds are +listed in the [Overview page](/programs); this page serves as a general project +lead guide. --- body: diff --git a/content/programs/project-ideas-collection/automating-quantifying-the-commons/contents.lr b/content/programs/project-ideas-collection/automating-quantifying-the-commons/contents.lr deleted file mode 100644 index 0ab012c28..000000000 --- a/content/programs/project-ideas-collection/automating-quantifying-the-commons/contents.lr +++ /dev/null @@ -1,46 +0,0 @@ -_model: project-idea ---- -_hidden: yes ---- -title: Automating Quantifying the Commons ---- -problem: -The Quantifying the Commons project has seen excellent additions led by student -developers. However, the scope of previous projects did not include automation -or combined reporting. ---- -expected_outcome: -Add automation of data gathering and report generation so that our reports -quantifying the commons are never more than 3 months out of date. ---- -contributor_tasks: -The contributor will need to architect a data flow, formalize data formats, -automate data gathering, and automate reporting. Challenges include quota -limits that may require multi-day/multi-step data gathering, deciding on plain -text vs binary data formats, and secret management. Knowledge of numpy and -matplotlib python libraries will be very helpful. ---- -application_tips: -- Engage with the repository (issues, pull requests) -- Be helpful and welcoming (e.g. answer other contributors’ questions on Slack) -- [Applicant Guide](/programs/applicant-guide/) ---- -resources: -- [creativecommons/quantifying](https://github.com/creativecommons/quantifying): - Quantifying the Commons -- [[Feature\] Automate Data Gathering and Analysis/Rendering · Issue - #22](https://github.com/creativecommons/quantifying/issues/22) ---- -skills_recommended: -- Git -- GitHub Actions -- Python ---- -lead: -- Timid Robot ---- -difficulty: Medium ---- -size: Large (~350 hours) ---- -filter_value: difficulty-medium skill-git skill-github-actions skill-python diff --git a/content/programs/project-ideas-collection/cc-legal-tools-machine-layer/contents.lr b/content/programs/project-ideas-collection/cc-legal-tools-machine-layer/contents.lr deleted file mode 100644 index 42bf0346d..000000000 --- a/content/programs/project-ideas-collection/cc-legal-tools-machine-layer/contents.lr +++ /dev/null @@ -1,74 +0,0 @@ -_model: project-idea ---- -_hidden: yes ---- -title: CC Legal Tools: Machine Readable Layer ---- -problem: -The CC Legal tools consist of three parts, the legal code, the deed (simple -language description), and the machine readable. The machine readable layer has -received the least recent development. It is out of date and there are -unresolved issues. ---- -expected_outcome: -Extend the CC Legal Tools App to generate deterministic RDF XML files for all -of the legal tools. - -Stretch goal: Extend the CC Legal Tools App to generate deterministic plain -text versions of the 4.0 licenses and the CC0 public domain dedication. ---- -contributor_tasks: -The contributor will need to extend the CC Legal Tools App to generate RDF XML -files. The generated RDF XML files must be deterministic and well organized and -based on current RDF specifications. Application updates must include test -coverage. - -Stretch goal: Extend the CC Legal Tools App to generate plain text versions. -The generated plain text versions must be deterministic and match the -formatting of the manual versions (except where improvements are desired). -Application updates must include test coverage. Additional stretch goals -include adding markdown format generation and interfacing/collaborating with -SPDX. ---- -application_tips: -- Engage with the CC Legal Tools repositories (issues, pull requests) -- Be helpful and welcoming (e.g. answer other contributors’ questions on Slack) -- [Applicant Guide](/programs/applicant-guide/) ---- -resources: -- [creativecommons/cc-legal-tools-app](https://github.com/creativecommons/cc-legal-tools-app/): - License and public domain dedication management application for Creative - Commons -- [creativecommons/cc-legal-tools-data](https://github.com/creativecommons/cc-legal-tools-data): - License and public domain dedication data for Creative Commons -- **ccREL (RDF/XML)** -- [Describing Copyright in RDF - Creative Commons Rights Expression - Language](https://creativecommons.org/ns/) -- [CC REL - Creative Commons](https://wiki.creativecommons.org/wiki/CC_REL) (CC - Public Wiki) -- [creativecommons/ccrel](https://github.com/creativecommons/ccrel) -- [ccREL: The Creative Commons Rights Expression - Language](https://opensource.creativecommons.org/ccrel/) -- [creativecommons/ccrel-guide](https://github.com/creativecommons/ccrel-guide) -- [CC REL by Example](https://opensource.creativecommons.org/ccrel-guide/) -- **Plain text format** -- [Plaintext versions of Creative Commons 4.0 licenses - Creative - Commons](https://creativecommons.org/2014/01/07/plaintext-versions-of-creative-commons-4-0-licenses/) -- [Plaintext versions of Creative Commons licenses and CC0 - Creative - Commons](https://creativecommons.org/2011/04/15/plaintext-versions-of-creative-commons-licenses-and-cc0/) ---- -skills_recommended: -- Django -- Git -- Python -- RDF -- XML ---- -lead: -- Timid Robot ---- -difficulty: High ---- -size: Large (~350 hours) ---- -filter_value: difficulty-high skill-django skill-git skill-python skill-rdf skill-xml diff --git a/content/programs/project-ideas-collection/conslidate-implement-vocabulary-design-system-across-websites/contents.lr b/content/programs/project-ideas-collection/conslidate-implement-vocabulary-design-system-across-websites/contents.lr new file mode 100644 index 000000000..53a6cf93d --- /dev/null +++ b/content/programs/project-ideas-collection/conslidate-implement-vocabulary-design-system-across-websites/contents.lr @@ -0,0 +1,70 @@ +_model: project-idea +--- +_hidden: yes +--- +title: Consolidate and implement Vocabulary design system across ancillary +websites +--- +problem: +The new design system, Vocabulary, has been implemented to varying degrees +across several Creative Commons web entities, versioning and features do not +have full parity and each implementation merits a further investigation, +course correction, expansion, and cleanup. +--- +expected_outcome: +Ancillary CC websites implement the current versions and features of the latest +Vocabulary codebase in a consistent and stable manner. Necessary new features +are identified, built, and implemented upstream into Vocabulary itself where +relevant, localized features are implemented into the codebase of each project +where necessary. +--- +contributor_tasks: +Identify and catalog features present on current sites, but missing within +Vocabulary. Document migration paths between conflicting or missing UX patterns. +Rewrite and/or refactor the codebase of each ancillary site, maintaining its +original function, while implementing the Vocabulary design system; migrating +implementations from NPM dependency chains to more simplistic static code, where +needed; building out new features as necessary locally or within the Vocabulary +codebase itself. Using simple, standards-compliant, and accessible HTML, CSS, +and minimal JavaScript. +--- +application_tips: +- Engage with the ancillary sites and Vocabulary repositories (issues, pull requests) +- Be helpful and welcoming (e.g. answer other contributors’ questions on Slack) +- [Applicant Guide](/programs/applicant-guide/) +--- +resources: +- [Vocabulary Docs](https://vocabulary-docs.netlify.app/) +- [Vocabulary Repository](https://github.com/creativecommons/vocabulary) +- [search.creativecommons.org](http://search.creativecommons.org) +- [Search Portal Repository](https://github.com/creativecommons/search) +- [resources.creativecommons.org](http://resources.creativecommons.org) +- [Resources Archive Repository](https://github.com/creativecommons/cc-resource-archive) +- [opensource.creativecommons.org](http://opensource.creativecommons.org) +- [Open Source Repository](https://github.com/creativecommons/ccos-website-source) +- [legaldb.creativecommons.org](http://legaldb.creativecommons.org) +- [LegalDB Repository](https://github.com/creativecommons/legaldb) +- [MDN Web Docs: Semantics](https://developer.mozilla.org/en-US/docs/Glossary/Semantics) +- [MDN Web Docs: HTML](https://developer.mozilla.org/en-US/docs/Web/HTML) +- [MDN Web Docs: JavaScript](https://developer.mozilla.org/en-US/docs/Web/JavaScript) +- [Django Docs](https://docs.djangoproject.com/en/5.1/) +- [Lektor Docs](https://www.getlektor.com/docs/) + +--- +skills_recommended: +- CSS +- Django +- Git +- HTML +- JavaScript +- Lektor + +--- +lead: +- Sara +--- +difficulty: Medium +--- +size: Large (~350 hours) +--- +filter_value: difficulty-medium skill-django skill-git skill-javascript skill-html skill-css skill-lektor diff --git a/content/programs/project-ideas-collection/modernize-cc-resource-archive/contents.lr b/content/programs/project-ideas-collection/modernize-cc-resource-archive/contents.lr deleted file mode 100644 index 6c54c45ba..000000000 --- a/content/programs/project-ideas-collection/modernize-cc-resource-archive/contents.lr +++ /dev/null @@ -1,50 +0,0 @@ -_model: project-idea ---- -_hidden: yes ---- -title: Modernize CC Resource Archive ---- -problem: -The Resources Archive has an outdated visual setup, and needs functionality -fixes and improvements. ---- -expected_outcome: -Upgrade the look & feel to match current CC aesthetics, using the internal -Design System (Vocabulary). Codebase is running current and standards compliant -technology implementations. Entire site builds as static files on GH pages. -Generate clear documentation of codebase and functionality. ---- -contributor_tasks: -Contributor will refactor codebase to fix resource submission, use current -semantic, accessible, and standards compliant HTML, CSS, and JavaScript to -match the current visual aesthetic of Creative Commons sites. Improve the -overall UX for finding, submitting, and accessing resources. Ensure the site -functions as a static and stable Jekyll site hosted on GH Pages as static -files. Final implementation will have clear documentation drafted within the -codebase for future maintainability. ---- -application_tips: -- Engage with the repository (issues, pull requests) -- Be helpful and welcoming (e.g. answer other contributors’ questions on Slack) -- [Applicant Guide](/programs/applicant-guide/) ---- -resources: -- [creativecommons/cc-resource-archive](https://github.com/creativecommons/cc-resource-archive): CC Resource Archive -- [Jekyll](https://jekyllrb.com/) -- [GH Pages](https://pages.github.com/) ---- -skills_recommended: -- Git -- JavaScript -- Jekyll -- HTML (Semantic & Accessible) -- CSS (Structured & Accessible) ---- -lead: -- Sara ---- -difficulty: Medium ---- -size: Large (~350 hours) ---- -filter_value: difficulty-medium skill-git skill-javascript skill-jekyll skill-html skill-css diff --git a/content/programs/project-ideas-collection/upgrade-and-refactor-cc-chooser/contents.lr b/content/programs/project-ideas-collection/upgrade-and-refactor-cc-chooser/contents.lr deleted file mode 100644 index c37c27002..000000000 --- a/content/programs/project-ideas-collection/upgrade-and-refactor-cc-chooser/contents.lr +++ /dev/null @@ -1,58 +0,0 @@ -_model: project-idea ---- -_hidden: yes ---- -title: Upgrade and Refactor CC Chooser ---- -problem: -The Chooser has a stable initial UX, but due to bitrot its codebase is -approaching non-support. ---- -expected_outcome: -Upgrade the codebase to current Vue.js versions and ancillary technologies -(Vite, Pinia), created more clarity and longevity in the codebase. Generate -clear documentation of codebase and functionality. ---- -contributor_tasks: -The contributor will need to upgrade the codebase from Vue.js v2.x to Vue.js -v3.x, from Vue CLI to Vite, and from Vuex to Pinia. Incorporate new UX changes -using semantic, standards compliant, and accessible JavaScript, HTML, and CSS. -Reduce the number of dependencies, and establish a stable automated process to -build out an embeddable Web Component compatible implementation. Knowledge of -the upgrade path from Vue 2.x implementations to Vue 3.x will be helpful, as -will knowledge of Web Components. Final implementation will have clear -documentation drafted within the codebase for future maintainability. ---- -application_tips: -- Engage with the repository (issues, pull requests) -- Be helpful and welcoming (e.g. answer other contributors’ questions on Slack) -- [Applicant Guide](/programs/applicant-guide/) ---- -resources: -- [creativecommons/chooser](https://github.com/creativecommons/chooser): Chooser -- [Vue.js](https://vuejs.org/) -- [Vue v3 Migration Guide](https://v3-migration.vuejs.org/) -- [Vue CLI](https://cli.vuejs.org/) -- [Vuex](https://vuex.vuejs.org/) -- [Vite.js](https://vitejs.dev/) -- [Pinia](https://pinia.vuejs.org/) -- [Web Components](https://developer.mozilla.org/en-US/docs/Web/Web_Components) ---- -skills_recommended: -- Git -- JavaScript -- Vite -- Vue.js (v2 & v3) -- Pinia -- HTML (Semantic & Accessible) -- CSS (Structured & Accessible) -- Web Components ---- -lead: -- Sara ---- -difficulty: High ---- -size: Large (~350 hours) ---- -filter_value: difficulty-high skill-git skill-javascript skill-vue skill-html skill-css diff --git a/databags/community_team_members.json b/databags/community_team_members.json index 665937e05..0b01e90bd 100644 --- a/databags/community_team_members.json +++ b/databags/community_team_members.json @@ -124,32 +124,6 @@ "name": "Vocabulary", "repos": "vocabulary" }, - { - "members": [ - { - "github": "hugosolar", - "name": "Hugo Solar", - "role": "Project Maintainer" - }, - { - "github": "kgodey", - "name": "Kriti Godey", - "role": "Project Maintainer" - }, - { - "github": "ahmadbilaldev", - "name": "Ahmad Bilal", - "role": "Project Core Committer" - }, - { - "github": "Cronus1007", - "name": "Ritish Thareja", - "role": "Project Core Committer" - } - ], - "name": "WordPress Plugin", - "repos": "wp-plugin-creativecommons" - }, { "members": [ { @@ -225,7 +199,7 @@ } ], "name": "CC Open Source", - "repos": "creativecommons.github.io-source" + "repos": "ccos-website-source" }, { "members": [ @@ -239,6 +213,11 @@ "name": "Kriti Godey", "role": "Project Maintainer" }, + { + "github": "zackkrida", + "name": "Zack Krida", + "role": "Project Maintainer" + }, { "github": "JackieBinya", "name": "Jacqueline Binya", @@ -291,22 +270,6 @@ "name": "License Buttons", "repos": "licensebuttons" }, - { - "members": [ - { - "github": "bhumijgupta", - "name": "Bhumij Gupta", - "role": "Project Maintainer" - }, - { - "github": "kgodey", - "name": "Kriti Godey", - "role": "Project Maintainer" - } - ], - "name": "Link Checker", - "repos": "cc-link-checker" - }, { "members": [ { diff --git a/databags/repos.json b/databags/repos.json index 10a1e8955..cc9d21bad 100644 --- a/databags/repos.json +++ b/databags/repos.json @@ -75,30 +75,6 @@ "url": "https://github.com/creativecommons/cc-assets", "website": "" }, - { - "created": "2021-11-26T11:23:54+00:00", - "description": "Vue.js components for consistent navigation and branding across Creative Commons web properties", - "engineering_project": true, - "english_name": "CC Global Components", - "featured": false, - "id": 432153424, - "language": "Vue", - "license": { - "name": "MIT License", - "url": "https://github.com/creativecommons/cc-global-components/blob/main/LICENSE" - }, - "name": "cc-global-components", - "slack": "", - "technologies": [ - "HTML", - "CSS", - "JS", - "Bulma", - "Vue" - ], - "url": "https://github.com/creativecommons/cc-global-components", - "website": null - }, { "created": "2020-06-03T18:51:38+00:00", "description": "Legal tool (licenses, public domain dedication, etc.) management application for Creative Commons", @@ -118,7 +94,7 @@ "Python" ], "url": "https://github.com/creativecommons/cc-legal-tools-app", - "website": "" + "website": "https://creativecommons.org/licenses/" }, { "created": "2020-09-08T19:18:51+00:00", @@ -163,26 +139,6 @@ "url": "https://github.com/creativecommons/cc-license-chooser", "website": "" }, - { - "created": "2019-06-12T18:15:54+00:00", - "description": "Automated link checker for legalcode and license URLs", - "engineering_project": true, - "english_name": "Creative Commons Link Checker", - "featured": false, - "id": 191622826, - "language": "Python", - "license": { - "name": "MIT License", - "url": "https://github.com/creativecommons/cc-link-checker/blob/main/LICENSE" - }, - "name": "cc-link-checker", - "slack": "cc-dev-linkchecker", - "technologies": [ - "Python" - ], - "url": "https://github.com/creativecommons/cc-link-checker", - "website": "" - }, { "created": "2014-01-08T18:49:45+00:00", "description": "Collection of resources on Creative Commons (CC) tools and other open topics", @@ -199,38 +155,6 @@ "url": "https://github.com/creativecommons/cc-resource-archive", "website": "https://resources.creativecommons.org/" }, - { - "created": "2015-07-15T18:24:37+00:00", - "description": "WordPress theme used on creativecommons.org", - "engineering_project": true, - "featured": false, - "id": 39153629, - "language": "Hack", - "license": { - "name": "GNU General Public License v2.0", - "url": "https://github.com/creativecommons/cc-wp-theme/blob/main/LICENSE" - }, - "name": "cc-wp-theme", - "slack": "", - "url": "https://github.com/creativecommons/cc-wp-theme", - "website": "" - }, - { - "created": "2013-12-02T21:01:41+00:00", - "description": "Legacy API to integrate the Creative Commons licensing engine into third party applications", - "engineering_project": true, - "featured": false, - "id": 14874742, - "language": "Python", - "license": { - "name": "MIT License", - "url": "https://github.com/creativecommons/cc.api/blob/main/LICENSE" - }, - "name": "cc.api", - "slack": "", - "url": "https://github.com/creativecommons/cc.api", - "website": "https://api.creativecommons.org/docs/" - }, { "created": "2014-10-06T22:07:52+00:00", "description": "RubyCAS customizations for CCID (Creative Commons ID)", @@ -283,6 +207,22 @@ "url": "https://github.com/creativecommons/ccos-scripts", "website": "" }, + { + "created": "2019-01-27T02:29:18+00:00", + "description": "Source files for CC Open Source website", + "engineering_project": true, + "featured": false, + "id": 167761414, + "language": "HTML", + "license": { + "name": "MIT License", + "url": "https://github.com/creativecommons/ccos-website-source/blob/main/LICENSE" + }, + "name": "ccos-website-source", + "slack": "", + "url": "https://github.com/creativecommons/ccos-website-source", + "website": "https://opensource.creativecommons.org/" + }, { "created": "2013-10-24T00:12:36+00:00", "description": "A guide to using the Creative Commons Rights Expression Language (CC REL)", @@ -361,6 +301,20 @@ "url": "https://github.com/creativecommons/commoners", "website": "https://network.creativecommons.org/" }, + { + "created": "2024-06-14T18:39:49+00:00", + "description": "This plugin allows you to add a button to your WordPress site's posts which will display terms and licensing for Creative Commons reposting, as well as the title and content of the post for easy sharing. This is useful for sites that want to easily and clearly share their content with others.", + "id": 815277416, + "language": "PHP", + "license": { + "name": "GNU General Public License v3.0", + "url": "https://github.com/creativecommons/Creative-Commons-Post-Republisher/blob/main/LICENSE" + }, + "name": "Creative-Commons-Post-Republisher", + "slack": "", + "url": "https://github.com/creativecommons/Creative-Commons-Post-Republisher", + "website": "" + }, { "created": "2019-12-06T19:44:21+00:00", "description": "Base WordPress theme for Creative Commons websites.", @@ -405,22 +359,6 @@ "url": "https://github.com/creativecommons/creativecommons-certificate", "website": "" }, - { - "created": "2019-01-27T02:29:18+00:00", - "description": "Source files for CC Open Source website", - "engineering_project": true, - "featured": false, - "id": 167761414, - "language": "HTML", - "license": { - "name": "MIT License", - "url": "https://github.com/creativecommons/creativecommons.github.io-source/blob/main/LICENSE" - }, - "name": "creativecommons.github.io-source", - "slack": "", - "url": "https://github.com/creativecommons/creativecommons.github.io-source", - "website": "https://opensource.creativecommons.org/" - }, { "created": "2013-10-31T00:19:22+00:00", "description": "Legacy legal code translations and general support issues", @@ -535,7 +473,7 @@ "english_name": "CC Legal Database", "featured": false, "id": 133715391, - "language": "HTML", + "language": "Python", "license": { "name": "MIT License", "url": "https://github.com/creativecommons/legaldb/blob/main/LICENSE" @@ -548,7 +486,7 @@ "PostgreSQL" ], "url": "https://github.com/creativecommons/legaldb", - "website": "https://legaldb.creativecommons.org/" + "website": "https://LegalDB.CreativeCommons.org/" }, { "created": "2013-10-28T02:42:48+00:00", @@ -639,35 +577,9 @@ "url": "https://github.com/creativecommons/open4us.org", "website": "http://open4us.org/" }, - { - "created": "2021-07-06T17:25:01+00:00", - "description": "Project to manage technical implementation of creativecommons.org (primary website)", - "engineering_project": true, - "english_name": "CreativeCommons.org website development project", - "featured": false, - "id": 383548251, - "language": "Shell", - "license": { - "name": "MIT License", - "url": "https://github.com/creativecommons/project_creativecommons.org/blob/main/LICENSE" - }, - "name": "project_creativecommons.org", - "slack": "cc-dev-wordpress", - "technologies": [ - "PHP", - "WordPress", - "JavaScript", - "React", - "Django", - "Docker", - "Docker Compose" - ], - "url": "https://github.com/creativecommons/project_creativecommons.org", - "website": "https://creativecommons.org/" - }, { "created": "2022-09-07T17:02:39+00:00", - "description": "Quantifying the Commons", + "description": "quantify the size and diversity of the commons--the collection of works that are openly licensed or in the public domain", "engineering_project": true, "english_name": "Quantifying the Commons", "featured": true, @@ -701,22 +613,6 @@ "url": "https://github.com/creativecommons/reversionary-rights", "website": "https://rights-back-beta.creativecommons.org/" }, - { - "created": "2015-07-23T21:30:47+00:00", - "description": "Rails plugin for the RubyCAS-Client", - "engineering_project": true, - "featured": false, - "id": 39594110, - "language": "Ruby", - "license": { - "name": "MIT License", - "url": "https://github.com/creativecommons/rubycas-client-rails/blob/master/MIT-LICENSE" - }, - "name": "rubycas-client-rails", - "slack": "", - "url": "https://github.com/creativecommons/rubycas-client-rails", - "website": "" - }, { "created": "2016-07-29T23:14:42+00:00", "description": "The scholars addenda system.", @@ -740,7 +636,7 @@ "english_name": "CC Search Portal", "featured": false, "id": 13818557, - "language": "HTML", + "language": "CSS", "license": { "name": "MIT License", "url": "https://github.com/creativecommons/search/blob/main/LICENSE" @@ -877,99 +773,26 @@ "website": "https://thepowerofopen.org/" }, { - "created": "2019-11-25T17:29:13+00:00", - "description": "A cohesive design system & Vue component library to unify the web-facing Creative Commons", + "created": "2024-04-24T19:10:38+00:00", + "description": "A cohesive system of design for Creative Commons", "engineering_project": true, - "english_name": "CC Vocabulary", + "english_name": "Vocabulary Design System", "featured": false, - "id": 224004769, - "language": "SCSS", + "id": 791465373, + "language": "HTML", "license": { - "name": "MIT License", - "url": "https://github.com/creativecommons/vocabulary/blob/main/LICENSE" + "name": "Creative Commons Zero v1.0 Universal", + "url": "https://github.com/creativecommons/vocabulary/blob/main/COPYING" }, "name": "vocabulary", - "slack": "cc-dev-vocabulary", + "slack": "", "technologies": [ - "Sass", - "JavaScript", - "Webpack", - "Storybook", - "Bulma", - "Fonts" + "HTML", + "CSS", + "Javascript" ], "url": "https://github.com/creativecommons/vocabulary", - "website": "https://cc-vocabulary.netlify.app" - }, - { - "created": "2022-01-10T10:29:18+00:00", - "description": "A collection of Vue components used in the web facing Creative Commons.", - "engineering_project": true, - "english_name": "CC Vocabulary components", - "featured": false, - "id": 446377158, - "language": "Vue", - "license": { - "name": "MIT License", - "url": "https://github.com/creativecommons/vocabulary-components/blob/main/LICENSE" - }, - "name": "vocabulary-components", - "slack": "cc-dev-vocabulary", - "technologies": [ - "Sass", - "JavaScript", - "Webpack", - "Vue.js" - ], - "url": "https://github.com/creativecommons/vocabulary-components", - "website": "" - }, - { - "created": "2022-01-10T11:07:04+00:00", - "description": "Typefaces that lend personality to the web facing Creative Commons", - "engineering_project": true, - "english_name": "CC Vocabulary fonts", - "featured": false, - "id": 446389251, - "language": "JavaScript", - "license": { - "name": "MIT License", - "url": "https://github.com/creativecommons/vocabulary-fonts/blob/main/LICENSE" - }, - "name": "vocabulary-fonts", - "slack": "cc-dev-vocabulary", - "technologies": [ - "Sass", - "JavaScript", - "Webpack", - "Storybook" - ], - "url": "https://github.com/creativecommons/vocabulary-fonts", - "website": "" - }, - { - "created": "2022-01-10T11:06:45+00:00", - "description": "A cohesive design system to unite the web facing Creative Commons", - "engineering_project": true, - "english_name": "CC Vocabulary styles", - "featured": false, - "id": 446389149, - "language": "SCSS", - "license": { - "name": "MIT License", - "url": "https://github.com/creativecommons/vocabulary-styles/blob/main/LICENSE" - }, - "name": "vocabulary-styles", - "slack": "cc-dev-vocabulary", - "technologies": [ - "Sass", - "JavaScript", - "Webpack", - "Storybook", - "Bulma" - ], - "url": "https://github.com/creativecommons/vocabulary-styles", - "website": "" + "website": "https://vocabulary-docs.netlify.app" }, { "created": "2023-04-21T19:58:28+00:00", @@ -1017,29 +840,6 @@ "url": "https://github.com/creativecommons/wp-plugin-cc-global-network", "website": "" }, - { - "created": "2014-07-28T15:18:18+00:00", - "description": "Official Creative Commons plugin for licensing your content. With Creative Commons licenses, keep your copyright AND share your creativity.", - "engineering_project": true, - "english_name": "CC WordPress Plugin", - "featured": true, - "id": 22347352, - "language": "PHP", - "license": { - "name": "GNU General Public License v2.0", - "url": "https://github.com/creativecommons/wp-plugin-creativecommons/blob/main/license.txt" - }, - "name": "wp-plugin-creativecommons", - "slack": "cc-dev-wordpress", - "technologies": [ - "PHP", - "CSS", - "JS", - "WordPress" - ], - "url": "https://github.com/creativecommons/wp-plugin-creativecommons", - "website": "https://wordpress.org/plugins/creative-commons/" - }, { "created": "2020-09-17T19:19:54+00:00", "description": "This WordPress plugin provides custom functionality for the creativecommons.org website.", diff --git a/models/blog-post.ini b/models/blog-post.ini index a5e8cefb4..8376c1ced 100644 --- a/models/blog-post.ini +++ b/models/blog-post.ini @@ -29,3 +29,8 @@ type = strings [fields.body] label = Body type = markdown + +[fields.excerpt] +label = Excerpt +type = markdown +width = 1/2 diff --git a/themes/vocabulary_theme/templates/blocks/featured-projects.html b/themes/vocabulary_theme/templates/blocks/featured-projects.html index 02f61c172..abc317c93 100644 --- a/themes/vocabulary_theme/templates/blocks/featured-projects.html +++ b/themes/vocabulary_theme/templates/blocks/featured-projects.html @@ -15,7 +15,7 @@

{{ repo.english_name }}

- + Visit site diff --git a/themes/vocabulary_theme/templates/blocks/hero.html b/themes/vocabulary_theme/templates/blocks/hero.html index 995b0af81..31358db02 100644 --- a/themes/vocabulary_theme/templates/blocks/hero.html +++ b/themes/vocabulary_theme/templates/blocks/hero.html @@ -7,9 +7,6 @@

-

- {{ this.description }} -

{{ this.links }}
diff --git a/themes/vocabulary_theme/templates/community_team_list.html b/themes/vocabulary_theme/templates/community_team_list.html index 90743504b..b1d263c7a 100644 --- a/themes/vocabulary_theme/templates/community_team_list.html +++ b/themes/vocabulary_theme/templates/community_team_list.html @@ -7,7 +7,7 @@

{{ this.title }}

-

This is a list of all CC Community Team members, and their roles and privileges. For more information about CC Community Team, please see the Community Team Page.

+

This is a list of all Creative Commons (CC) Community Team members, and their roles and privileges. For more information about CC Community Team, please see the Community Team Page.

diff --git a/themes/vocabulary_theme/templates/layout.html b/themes/vocabulary_theme/templates/layout.html index ed39c9f0b..e750077f6 100644 --- a/themes/vocabulary_theme/templates/layout.html +++ b/themes/vocabulary_theme/templates/layout.html @@ -1,4 +1,5 @@ + @@ -27,7 +28,6 @@ {% endif %} -
diff --git a/themes/vocabulary_theme/templates/page-with-toc.html b/themes/vocabulary_theme/templates/page-with-toc.html index de66e351d..b9145d674 100644 --- a/themes/vocabulary_theme/templates/page-with-toc.html +++ b/themes/vocabulary_theme/templates/page-with-toc.html @@ -30,9 +30,11 @@

{{ this.title }}

{% if (href == '/contributing-code') %}
    {% for href, title in [ + ['/contributing-code/foundational-tech', 'Foundational technologies'], ['/contributing-code/pr-guidelines', 'Pull Request Guidelines'], ['/contributing-code/github-repo-guidelines', 'GitHub Repo Guidelines'], ['/contributing-code/repo-labels', 'Repository Labels'], + ['/contributing-code/documentation-guidelines', 'Documentation Guidelines'], ['/contributing-code/javascript-guidelines', 'JavaScript Guidelines'], ['/contributing-code/python-guidelines', 'Python Guidelines'], ['/contributing-code/translation-guide', 'Translation Guide'], diff --git a/themes/vocabulary_theme/templates/project-ideas.html b/themes/vocabulary_theme/templates/project-ideas.html index 950f9577f..6eb0be72c 100644 --- a/themes/vocabulary_theme/templates/project-ideas.html +++ b/themes/vocabulary_theme/templates/project-ideas.html @@ -7,7 +7,7 @@

    Open Source Work Programs: Project Ideas

    -

    This is the project idea list for the current round of open source collaborations at Creative Commons.

    +

    This is the project idea list for the current round of open source collaborations at Creative Commons (CC).

    {% set ideas = site.query('/programs/project-ideas-collection').include_undiscoverable(true) %}
    + -