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 7e7c08af9..ee9134eca 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,152 +18,167 @@ "default": { "babel": { "hashes": [ - "sha256:6919867db036398ba21eb5c7a0f6b28ab8cbc3ae7a73a44ebe34ae74a4e7d363", - "sha256:efb1a25b7118e67ce3a259bed20545c29cb68be8ad2c784c83689981b7a57287" + "sha256:368b5b98b37c06b7daf6696391c3240c938b37767d4584413e8438c5c435fa8b", + "sha256:d1f3554ca26605fe173f3de0c65f750f5a42f924499bf134de6423582298e316" ], - "markers": "python_version >= '3.7'", - "version": "==2.14.0" + "markers": "python_version >= '3.8'", + "version": "==2.16.0" }, "black": { "hashes": [ - "sha256:0269dfdea12442022e88043d2910429bed717b2d04523867a85dacce535916b8", - "sha256:07204d078e25327aad9ed2c64790d681238686bce254c910de640c7cc4fc3aa6", - "sha256:08b34e85170d368c37ca7bf81cf67ac863c9d1963b2c1780c39102187ec8dd62", - "sha256:1a95915c98d6e32ca43809d46d932e2abc5f1f7d582ffbe65a5b4d1588af7445", - "sha256:2588021038bd5ada078de606f2a804cadd0a3cc6a79cb3e9bb3a8bf581325a4c", - "sha256:2fa6a0e965779c8f2afb286f9ef798df770ba2b6cee063c650b96adec22c056a", - "sha256:34afe9da5056aa123b8bfda1664bfe6fb4e9c6f311d8e4a6eb089da9a9173bf9", - "sha256:3897ae5a21ca132efa219c029cce5e6bfc9c3d34ed7e892113d199c0b1b444a2", - "sha256:40657e1b78212d582a0edecafef133cf1dd02e6677f539b669db4746150d38f6", - "sha256:48b5760dcbfe5cf97fd4fba23946681f3a81514c6ab8a45b50da67ac8fbc6c7b", - "sha256:5242ecd9e990aeb995b6d03dc3b2d112d4a78f2083e5a8e86d566340ae80fec4", - "sha256:5cdc2e2195212208fbcae579b931407c1fa9997584f0a415421748aeafff1168", - "sha256:5d7b06ea8816cbd4becfe5f70accae953c53c0e53aa98730ceccb0395520ee5d", - "sha256:7258c27115c1e3b5de9ac6c4f9957e3ee2c02c0b39222a24dc7aa03ba0e986f5", - "sha256:854c06fb86fd854140f37fb24dbf10621f5dab9e3b0c29a690ba595e3d543024", - "sha256:a21725862d0e855ae05da1dd25e3825ed712eaaccef6b03017fe0853a01aa45e", - "sha256:a83fe522d9698d8f9a101b860b1ee154c1d25f8a82ceb807d319f085b2627c5b", - "sha256:b3d64db762eae4a5ce04b6e3dd745dcca0fb9560eb931a5be97472e38652a161", - "sha256:e298d588744efda02379521a19639ebcd314fba7a49be22136204d7ed1782717", - "sha256:e2c8dfa14677f90d976f68e0c923947ae68fa3961d61ee30976c388adc0b02c8", - "sha256:ecba2a15dfb2d97105be74bbfe5128bc5e9fa8477d8c46766505c1dda5883aac", - "sha256:fc1ec9aa6f4d98d022101e015261c056ddebe3da6a8ccfc2c792cbe0349d48b7" + "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": "==24.1.1" + "markers": "python_version >= '3.9'", + "version": "==24.10.0" }, "blinker": { "hashes": [ - "sha256:c3f865d4d54db7abc53758a01601cf343fe55b84c1de4e3fa910e420b438d5b9", - "sha256:e6820ff6fa4e4d1d8e2747c2283749c3f547e4fee112b98555cdcdae32996182" + "sha256:1779309f71bf239144b9399d06ae925637cf6634cf6bd131104184531bf67c01", + "sha256:8f77b09d3bf7c795e969e9486f39c2c5e9c39d4ee07424be2bc594ece9642d83" ], "markers": "python_version >= '3.8'", - "version": "==1.7.0" + "version": "==1.8.2" }, "certifi": { "hashes": [ - "sha256:9b469f3a900bf28dc19b8cfbf8019bf47f7fdd1a65a1d4ffb98fc14166beb4d1", - "sha256:e036ab49d5b79556f99cfc2d9320b34cfbe5be05c5871b51de9329f0603b0474" + "sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8", + "sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9" ], "markers": "python_version >= '3.6'", - "version": "==2023.11.17" + "version": "==2024.8.30" }, "charset-normalizer": { "hashes": [ - "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027", - "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087", - "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786", - "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8", - "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09", - "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185", - "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574", - "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e", - "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519", - "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898", - "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269", - "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3", - "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f", - "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6", - "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8", - "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a", - "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73", - "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc", - "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714", - "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2", - "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc", - "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce", - "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d", - "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e", - "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6", - "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269", - "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96", - "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d", - "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a", - "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4", - "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77", - "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d", - "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0", - "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed", - "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068", - "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac", - "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25", - "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8", - "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab", - "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26", - "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2", - "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db", - "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f", - "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5", - "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99", - "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c", - "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d", - "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811", - "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa", - "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a", - "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03", - "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b", - "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04", - "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c", - "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001", - "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458", - "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389", - "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99", - "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985", - "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537", - "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238", - "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f", - "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d", - "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796", - "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a", - "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143", - "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8", - "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c", - "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5", - "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5", - "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711", - "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4", - "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6", - "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c", - "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7", - "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4", - "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b", - "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae", - "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12", - "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c", - "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae", - "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8", - "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887", - "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b", - "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4", - "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f", - "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5", - "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33", - "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519", - "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561" + "sha256:0099d79bdfcf5c1f0c2c72f91516702ebf8b0b8ddd8905f97a8aecf49712c621", + "sha256:0713f3adb9d03d49d365b70b84775d0a0d18e4ab08d12bc46baa6132ba78aaf6", + "sha256:07afec21bbbbf8a5cc3651aa96b980afe2526e7f048fdfb7f1014d84acc8b6d8", + "sha256:0b309d1747110feb25d7ed6b01afdec269c647d382c857ef4663bbe6ad95a912", + "sha256:0d99dd8ff461990f12d6e42c7347fd9ab2532fb70e9621ba520f9e8637161d7c", + "sha256:0de7b687289d3c1b3e8660d0741874abe7888100efe14bd0f9fd7141bcbda92b", + "sha256:1110e22af8ca26b90bd6364fe4c763329b0ebf1ee213ba32b68c73de5752323d", + "sha256:130272c698667a982a5d0e626851ceff662565379baf0ff2cc58067b81d4f11d", + "sha256:136815f06a3ae311fae551c3df1f998a1ebd01ddd424aa5603a4336997629e95", + "sha256:14215b71a762336254351b00ec720a8e85cada43b987da5a042e4ce3e82bd68e", + "sha256:1db4e7fefefd0f548d73e2e2e041f9df5c59e178b4c72fbac4cc6f535cfb1565", + "sha256:1ffd9493de4c922f2a38c2bf62b831dcec90ac673ed1ca182fe11b4d8e9f2a64", + "sha256:2006769bd1640bdf4d5641c69a3d63b71b81445473cac5ded39740a226fa88ab", + "sha256:20587d20f557fe189b7947d8e7ec5afa110ccf72a3128d61a2a387c3313f46be", + "sha256:223217c3d4f82c3ac5e29032b3f1c2eb0fb591b72161f86d93f5719079dae93e", + "sha256:27623ba66c183eca01bf9ff833875b459cad267aeeb044477fedac35e19ba907", + "sha256:285e96d9d53422efc0d7a17c60e59f37fbf3dfa942073f666db4ac71e8d726d0", + "sha256:2de62e8801ddfff069cd5c504ce3bc9672b23266597d4e4f50eda28846c322f2", + "sha256:2f6c34da58ea9c1a9515621f4d9ac379871a8f21168ba1b5e09d74250de5ad62", + "sha256:309a7de0a0ff3040acaebb35ec45d18db4b28232f21998851cfa709eeff49d62", + "sha256:35c404d74c2926d0287fbd63ed5d27eb911eb9e4a3bb2c6d294f3cfd4a9e0c23", + "sha256:3710a9751938947e6327ea9f3ea6332a09bf0ba0c09cae9cb1f250bd1f1549bc", + "sha256:3d59d125ffbd6d552765510e3f31ed75ebac2c7470c7274195b9161a32350284", + "sha256:40d3ff7fc90b98c637bda91c89d51264a3dcf210cade3a2c6f838c7268d7a4ca", + "sha256:425c5f215d0eecee9a56cdb703203dda90423247421bf0d67125add85d0c4455", + "sha256:43193c5cda5d612f247172016c4bb71251c784d7a4d9314677186a838ad34858", + "sha256:44aeb140295a2f0659e113b31cfe92c9061622cadbc9e2a2f7b8ef6b1e29ef4b", + "sha256:47334db71978b23ebcf3c0f9f5ee98b8d65992b65c9c4f2d34c2eaf5bcaf0594", + "sha256:4796efc4faf6b53a18e3d46343535caed491776a22af773f366534056c4e1fbc", + "sha256:4a51b48f42d9358460b78725283f04bddaf44a9358197b889657deba38f329db", + "sha256:4b67fdab07fdd3c10bb21edab3cbfe8cf5696f453afce75d815d9d7223fbe88b", + "sha256:4ec9dd88a5b71abfc74e9df5ebe7921c35cbb3b641181a531ca65cdb5e8e4dea", + "sha256:4f9fc98dad6c2eaa32fc3af1417d95b5e3d08aff968df0cd320066def971f9a6", + "sha256:54b6a92d009cbe2fb11054ba694bc9e284dad30a26757b1e372a1fdddaf21920", + "sha256:55f56e2ebd4e3bc50442fbc0888c9d8c94e4e06a933804e2af3e89e2f9c1c749", + "sha256:5726cf76c982532c1863fb64d8c6dd0e4c90b6ece9feb06c9f202417a31f7dd7", + "sha256:5d447056e2ca60382d460a604b6302d8db69476fd2015c81e7c35417cfabe4cd", + "sha256:5ed2e36c3e9b4f21dd9422f6893dec0abf2cca553af509b10cd630f878d3eb99", + "sha256:5ff2ed8194587faf56555927b3aa10e6fb69d931e33953943bc4f837dfee2242", + "sha256:62f60aebecfc7f4b82e3f639a7d1433a20ec32824db2199a11ad4f5e146ef5ee", + "sha256:63bc5c4ae26e4bc6be6469943b8253c0fd4e4186c43ad46e713ea61a0ba49129", + "sha256:6b40e8d38afe634559e398cc32b1472f376a4099c75fe6299ae607e404c033b2", + "sha256:6b493a043635eb376e50eedf7818f2f322eabbaa974e948bd8bdd29eb7ef2a51", + "sha256:6dba5d19c4dfab08e58d5b36304b3f92f3bd5d42c1a3fa37b5ba5cdf6dfcbcee", + "sha256:6fd30dc99682dc2c603c2b315bded2799019cea829f8bf57dc6b61efde6611c8", + "sha256:707b82d19e65c9bd28b81dde95249b07bf9f5b90ebe1ef17d9b57473f8a64b7b", + "sha256:7706f5850360ac01d80c89bcef1640683cc12ed87f42579dab6c5d3ed6888613", + "sha256:7782afc9b6b42200f7362858f9e73b1f8316afb276d316336c0ec3bd73312742", + "sha256:79983512b108e4a164b9c8d34de3992f76d48cadc9554c9e60b43f308988aabe", + "sha256:7f683ddc7eedd742e2889d2bfb96d69573fde1d92fcb811979cdb7165bb9c7d3", + "sha256:82357d85de703176b5587dbe6ade8ff67f9f69a41c0733cf2425378b49954de5", + "sha256:84450ba661fb96e9fd67629b93d2941c871ca86fc38d835d19d4225ff946a631", + "sha256:86f4e8cca779080f66ff4f191a685ced73d2f72d50216f7112185dc02b90b9b7", + "sha256:8cda06946eac330cbe6598f77bb54e690b4ca93f593dee1568ad22b04f347c15", + "sha256:8ce7fd6767a1cc5a92a639b391891bf1c268b03ec7e021c7d6d902285259685c", + "sha256:8ff4e7cdfdb1ab5698e675ca622e72d58a6fa2a8aa58195de0c0061288e6e3ea", + "sha256:9289fd5dddcf57bab41d044f1756550f9e7cf0c8e373b8cdf0ce8773dc4bd417", + "sha256:92a7e36b000bf022ef3dbb9c46bfe2d52c047d5e3f3343f43204263c5addc250", + "sha256:92db3c28b5b2a273346bebb24857fda45601aef6ae1c011c0a997106581e8a88", + "sha256:95c3c157765b031331dd4db3c775e58deaee050a3042fcad72cbc4189d7c8dca", + "sha256:980b4f289d1d90ca5efcf07958d3eb38ed9c0b7676bf2831a54d4f66f9c27dfa", + "sha256:9ae4ef0b3f6b41bad6366fb0ea4fc1d7ed051528e113a60fa2a65a9abb5b1d99", + "sha256:9c98230f5042f4945f957d006edccc2af1e03ed5e37ce7c373f00a5a4daa6149", + "sha256:9fa2566ca27d67c86569e8c85297aaf413ffab85a8960500f12ea34ff98e4c41", + "sha256:a14969b8691f7998e74663b77b4c36c0337cb1df552da83d5c9004a93afdb574", + "sha256:a8aacce6e2e1edcb6ac625fb0f8c3a9570ccc7bfba1f63419b3769ccf6a00ed0", + "sha256:a8e538f46104c815be19c975572d74afb53f29650ea2025bbfaef359d2de2f7f", + "sha256:aa41e526a5d4a9dfcfbab0716c7e8a1b215abd3f3df5a45cf18a12721d31cb5d", + "sha256:aa693779a8b50cd97570e5a0f343538a8dbd3e496fa5dcb87e29406ad0299654", + "sha256:ab22fbd9765e6954bc0bcff24c25ff71dcbfdb185fcdaca49e81bac68fe724d3", + "sha256:ab2e5bef076f5a235c3774b4f4028a680432cded7cad37bba0fd90d64b187d19", + "sha256:ab973df98fc99ab39080bfb0eb3a925181454d7c3ac8a1e695fddfae696d9e90", + "sha256:af73657b7a68211996527dbfeffbb0864e043d270580c5aef06dc4b659a4b578", + "sha256:b197e7094f232959f8f20541ead1d9862ac5ebea1d58e9849c1bf979255dfac9", + "sha256:b295729485b06c1a0683af02a9e42d2caa9db04a373dc38a6a58cdd1e8abddf1", + "sha256:b8831399554b92b72af5932cdbbd4ddc55c55f631bb13ff8fe4e6536a06c5c51", + "sha256:b8dcd239c743aa2f9c22ce674a145e0a25cb1566c495928440a181ca1ccf6719", + "sha256:bcb4f8ea87d03bc51ad04add8ceaf9b0f085ac045ab4d74e73bbc2dc033f0236", + "sha256:bd7af3717683bea4c87acd8c0d3d5b44d56120b26fd3f8a692bdd2d5260c620a", + "sha256:bf4475b82be41b07cc5e5ff94810e6a01f276e37c2d55571e3fe175e467a1a1c", + "sha256:c3e446d253bd88f6377260d07c895816ebf33ffffd56c1c792b13bff9c3e1ade", + "sha256:c57516e58fd17d03ebe67e181a4e4e2ccab1168f8c2976c6a334d4f819fe5944", + "sha256:c94057af19bc953643a33581844649a7fdab902624d2eb739738a30e2b3e60fc", + "sha256:cab5d0b79d987c67f3b9e9c53f54a61360422a5a0bc075f43cab5621d530c3b6", + "sha256:ce031db0408e487fd2775d745ce30a7cd2923667cf3b69d48d219f1d8f5ddeb6", + "sha256:cee4373f4d3ad28f1ab6290684d8e2ebdb9e7a1b74fdc39e4c211995f77bec27", + "sha256:d5b054862739d276e09928de37c79ddeec42a6e1bfc55863be96a36ba22926f6", + "sha256:dbe03226baf438ac4fda9e2d0715022fd579cb641c4cf639fa40d53b2fe6f3e2", + "sha256:dc15e99b2d8a656f8e666854404f1ba54765871104e50c8e9813af8a7db07f12", + "sha256:dcaf7c1524c0542ee2fc82cc8ec337f7a9f7edee2532421ab200d2b920fc97cf", + "sha256:dd4eda173a9fcccb5f2e2bd2a9f423d180194b1bf17cf59e3269899235b2a114", + "sha256:dd9a8bd8900e65504a305bf8ae6fa9fbc66de94178c420791d0293702fce2df7", + "sha256:de7376c29d95d6719048c194a9cf1a1b0393fbe8488a22008610b0361d834ecf", + "sha256:e7fdd52961feb4c96507aa649550ec2a0d527c086d284749b2f582f2d40a2e0d", + "sha256:e91f541a85298cf35433bf66f3fab2a4a2cff05c127eeca4af174f6d497f0d4b", + "sha256:e9e3c4c9e1ed40ea53acf11e2a386383c3304212c965773704e4603d589343ed", + "sha256:ee803480535c44e7f5ad00788526da7d85525cfefaf8acf8ab9a310000be4b03", + "sha256:f09cb5a7bbe1ecae6e87901a2eb23e0256bb524a79ccc53eb0b7629fbe7677c4", + "sha256:f19c1585933c82098c2a520f8ec1227f20e339e33aca8fa6f956f6691b784e67", + "sha256:f1a2f519ae173b5b6a2c9d5fa3116ce16e48b3462c8b96dfdded11055e3d6365", + "sha256:f28f891ccd15c514a0981f3b9db9aa23d62fe1a99997512b0491d2ed323d229a", + "sha256:f3e73a4255342d4eb26ef6df01e3962e73aa29baa3124a8e824c5d3364a65748", + "sha256:f606a1881d2663630ea5b8ce2efe2111740df4b687bd78b34a8131baa007f79b", + "sha256:fe9f97feb71aa9896b81973a7bbada8c49501dc73e58a10fcef6663af95e5079", + "sha256:ffc519621dce0c767e96b9c53f09c5d215578e10b02c285809f76509a3931482" ], "markers": "python_full_version >= '3.7.0'", - "version": "==3.3.2" + "version": "==3.4.0" }, "click": { "hashes": [ @@ -189,12 +204,12 @@ }, "flake8": { "hashes": [ - "sha256:33f96621059e65eec474169085dc92bf26e7b2d47366b70be2f67ab80dc25132", - "sha256:a6dfbb75e03252917f2473ea9653f7cd799c3064e54d4c8140044c5c065f53c3" + "sha256:049d058491e228e03e67b390f311bbf88fce2dbaa8fa673e7aea87b7198b8d38", + "sha256:597477df7860daa5aa0fdd84bf5208a043ab96b8e96ab708770ae0364dd03213" ], "index": "pypi", "markers": "python_full_version >= '3.8.1'", - "version": "==7.0.0" + "version": "==7.1.1" }, "flask": { "hashes": [ @@ -206,19 +221,11 @@ }, "idna": { "hashes": [ - "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca", - "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f" + "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", + "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3" ], - "markers": "python_version >= '3.5'", - "version": "==3.6" - }, - "importlib-metadata": { - "hashes": [ - "sha256:4805911c3a4ec7c3966410053e9ec6a1fecd629117df5adee56dfc9432a1081e", - "sha256:f238736bb06590ae52ac1fab06a3a9ef1d8dce2b7a35b5ab329371d6c8f5d2cc" - ], - "markers": "python_version < '3.10'", - "version": "==7.0.1" + "markers": "python_version >= '3.6'", + "version": "==3.10" }, "inifile": { "hashes": [ @@ -237,94 +244,95 @@ }, "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:7d6d50dd97d52cbc355597bd845fabfbac3f551e1f99619e39a35ce8c370b5fa", - "sha256:ac8bd6544d4bb2c9792bf3a159e80bba8fda7f07e81bc3aed565432d5925ba90" + "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369", + "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d" ], "markers": "python_version >= '3.7'", - "version": "==3.1.3" + "version": "==3.1.4" }, "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:0042d6a9880b38e1dd9ff83146cc3c9c18a059b9360ceae207805567aacccc69", - "sha256:0c26f67b3fe27302d3a412b85ef696792c4a2386293c53ba683a89562f9399b0", - "sha256:0fbad3d346df8f9d72622ac71b69565e621ada2ce6572f37c2eae8dacd60385d", - "sha256:15866d7f2dc60cfdde12ebb4e75e41be862348b4728300c36cdf405e258415ec", - "sha256:1c98c33ffe20e9a489145d97070a435ea0679fddaabcafe19982fe9c971987d5", - "sha256:21e7af8091007bf4bebf4521184f4880a6acab8df0df52ef9e513d8e5db23411", - "sha256:23984d1bdae01bee794267424af55eef4dfc038dc5d1272860669b2aa025c9e3", - "sha256:31f57d64c336b8ccb1966d156932f3daa4fee74176b0fdc48ef580be774aae74", - "sha256:3583a3a3ab7958e354dc1d25be74aee6228938312ee875a22330c4dc2e41beb0", - "sha256:36d7626a8cca4d34216875aee5a1d3d654bb3dac201c1c003d182283e3205949", - "sha256:396549cea79e8ca4ba65525470d534e8a41070e6b3500ce2414921099cb73e8d", - "sha256:3a66c36a3864df95e4f62f9167c734b3b1192cb0851b43d7cc08040c074c6279", - "sha256:3aae9af4cac263007fd6309c64c6ab4506dd2b79382d9d19a1994f9240b8db4f", - "sha256:3ab3a886a237f6e9c9f4f7d272067e712cdb4efa774bef494dccad08f39d8ae6", - "sha256:47bb5f0142b8b64ed1399b6b60f700a580335c8e1c57f2f15587bd072012decc", - "sha256:49a3b78a5af63ec10d8604180380c13dcd870aba7928c1fe04e881d5c792dc4e", - "sha256:4df98d4a9cd6a88d6a585852f56f2155c9cdb6aec78361a19f938810aa020954", - "sha256:5045e892cfdaecc5b4c01822f353cf2c8feb88a6ec1c0adef2a2e705eef0f656", - "sha256:5244324676254697fe5c181fc762284e2c5fceeb1c4e3e7f6aca2b6f107e60dc", - "sha256:54635102ba3cf5da26eb6f96c4b8c53af8a9c0d97b64bdcb592596a6255d8518", - "sha256:54a7e1380dfece8847c71bf7e33da5d084e9b889c75eca19100ef98027bd9f56", - "sha256:55d03fea4c4e9fd0ad75dc2e7e2b6757b80c152c032ea1d1de487461d8140efc", - "sha256:698e84142f3f884114ea8cf83e7a67ca8f4ace8454e78fe960646c6c91c63bfa", - "sha256:6aa5e2e7fc9bc042ae82d8b79d795b9a62bd8f15ba1e7594e3db243f158b5565", - "sha256:7653fa39578957bc42e5ebc15cf4361d9e0ee4b702d7d5ec96cdac860953c5b4", - "sha256:765f036a3d00395a326df2835d8f86b637dbaf9832f90f5d196c3b8a7a5080cb", - "sha256:78bc995e004681246e85e28e068111a4c3f35f34e6c62da1471e844ee1446250", - "sha256:7a07f40ef8f0fbc5ef1000d0c78771f4d5ca03b4953fc162749772916b298fc4", - "sha256:8b570a1537367b52396e53325769608f2a687ec9a4363647af1cded8928af959", - "sha256:987d13fe1d23e12a66ca2073b8d2e2a75cec2ecb8eab43ff5624ba0ad42764bc", - "sha256:9896fca4a8eb246defc8b2a7ac77ef7553b638e04fbf170bff78a40fa8a91474", - "sha256:9e9e3c4020aa2dc62d5dd6743a69e399ce3de58320522948af6140ac959ab863", - "sha256:a0b838c37ba596fcbfca71651a104a611543077156cb0a26fe0c475e1f152ee8", - "sha256:a4d176cfdfde84f732c4a53109b293d05883e952bbba68b857ae446fa3119b4f", - "sha256:a76055d5cb1c23485d7ddae533229039b850db711c554a12ea64a0fd8a0129e2", - "sha256:a76cd37d229fc385738bd1ce4cba2a121cf26b53864c1772694ad0ad348e509e", - "sha256:a7cc49ef48a3c7a0005a949f3c04f8baa5409d3f663a1b36f0eba9bfe2a0396e", - "sha256:abf5ebbec056817057bfafc0445916bb688a255a5146f900445d081db08cbabb", - "sha256:b0fe73bac2fed83839dbdbe6da84ae2a31c11cfc1c777a40dbd8ac8a6ed1560f", - "sha256:b6f14a9cd50c3cb100eb94b3273131c80d102e19bb20253ac7bd7336118a673a", - "sha256:b83041cda633871572f0d3c41dddd5582ad7d22f65a72eacd8d3d6d00291df26", - "sha256:b835aba863195269ea358cecc21b400276747cc977492319fd7682b8cd2c253d", - "sha256:bf1196dcc239e608605b716e7b166eb5faf4bc192f8a44b81e85251e62584bd2", - "sha256:c669391319973e49a7c6230c218a1e3044710bc1ce4c8e6eb71f7e6d43a2c131", - "sha256:c7556bafeaa0a50e2fe7dc86e0382dea349ebcad8f010d5a7dc6ba568eaaa789", - "sha256:c8f253a84dbd2c63c19590fa86a032ef3d8cc18923b8049d91bcdeeb2581fbf6", - "sha256:d18b66fe626ac412d96c2ab536306c736c66cf2a31c243a45025156cc190dc8a", - "sha256:d5291d98cd3ad9a562883468c690a2a238c4a6388ab3bd155b0c75dd55ece858", - "sha256:d5c31fe855c77cad679b302aabc42d724ed87c043b1432d457f4976add1c2c3e", - "sha256:d6e427c7378c7f1b2bef6a344c925b8b63623d3321c09a237b7cc0e77dd98ceb", - "sha256:dac1ebf6983148b45b5fa48593950f90ed6d1d26300604f321c74a9ca1609f8e", - "sha256:de8153a7aae3835484ac168a9a9bdaa0c5eee4e0bc595503c95d53b942879c84", - "sha256:e1a0d1924a5013d4f294087e00024ad25668234569289650929ab871231668e7", - "sha256:e7902211afd0af05fbadcc9a312e4cf10f27b779cf1323e78d52377ae4b72bea", - "sha256:e888ff76ceb39601c59e219f281466c6d7e66bd375b4ec1ce83bcdc68306796b", - "sha256:f06e5a9e99b7df44640767842f414ed5d7bedaaa78cd817ce04bbd6fd86e2dd6", - "sha256:f6be2d708a9d0e9b0054856f07ac7070fbe1754be40ca8525d5adccdbda8f475", - "sha256:f9917691f410a2e0897d1ef99619fd3f7dd503647c8ff2475bf90c3cf222ad74", - "sha256:fc1a75aa8f11b87910ffd98de62b29d6520b6d6e8a3de69a70ca34dea85d2a8a", - "sha256:fe8512ed897d5daf089e5bd010c3dc03bb1bdae00b35588c49b98268d4a01e00" - ], - "markers": "python_version >= '3.7'", - "version": "==2.1.4" + "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": [ @@ -351,11 +359,11 @@ }, "packaging": { "hashes": [ - "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5", - "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7" + "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002", + "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124" ], - "markers": "python_version >= '3.7'", - "version": "==23.2" + "markers": "python_version >= '3.8'", + "version": "==24.1" }, "pathspec": { "hashes": [ @@ -367,27 +375,27 @@ }, "pip": { "hashes": [ - "sha256:5052d7889c1f9d05224cd41741acb7c5d6fa735ab34e339624a614eaaa7e7d76", - "sha256:7fd9972f96db22c8077a1ee2691b172c8089b17a5652a44494a9ecb0d78f9149" + "sha256:3790624780082365f47549d032f3770eeb2b1e8bd1f7b2e02dace1afa361b4ed", + "sha256:ebcb60557f2aefabc2e0f918751cd24ea0d56d8ec5445fe1807f1d2109660b99" ], - "markers": "python_version >= '3.7'", - "version": "==23.3.2" + "markers": "python_version >= '3.8'", + "version": "==24.3.1" }, "platformdirs": { "hashes": [ - "sha256:0614df2a2f37e1a662acbd8e2b25b92ccf8632929bc6d43467e17fe89c75e068", - "sha256:ef0cc731df711022c174543cb70a9b5bd22e5a9337c8624ef2c2ceb8ddad8768" + "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907", + "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb" ], "markers": "python_version >= '3.8'", - "version": "==4.2.0" + "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": [ @@ -399,34 +407,34 @@ }, "python-slugify": { "hashes": [ - "sha256:c71189c161e8c671f1b141034d9a56308a8a5978cd13d40446c879569212fdd1", - "sha256:e04cba5f1c562502a1175c84a8bc23890c54cdaf23fccaaf0bf78511508cabed" + "sha256:276540b79961052b66b7d116620b36518847f52d5fd9e3a70164fc8c50faa6b8", + "sha256:59202371d1d05b54a9e7720c5e038f928f45daaffe41dd10822f3907b937c856" ], "markers": "python_version >= '3.7'", - "version": "==8.0.3" + "version": "==8.0.4" }, "pytz": { "hashes": [ - "sha256:31d4583c4ed539cd037956140d695e42c033a19e984bfce9964a3f7d59bc2b40", - "sha256:f90ef520d95e7c46951105338d918664ebfd6f1d995bd7d153127ce90efafa6a" + "sha256:2aa355083c50a0f93fa581709deac0c9ad65cca8a9e9beac660adcbd493c798a", + "sha256:31c7c1817eb7fae7ca4b8c7ee50c72f93aa2dd863de768e1ef4245d426aa0725" ], - "version": "==2023.4" + "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:385eb4edd9c9d5c17540511303e39a147ce2fc04bc55289c322b9e5904fe2c05", - "sha256:be1af57fc409f93647f2e8e4573a142ed38724b8cdd389706a867bb4efcf1e78" + "sha256:f2504966861356aa38616760c0f66568e535562374995367b4e69c7143cf6bcd", + "sha256:fba5dd4d766e97be1b1681d98712680ae8f2f26d7881245f2ce9e40714f1a686" ], "markers": "python_version >= '3.8'", - "version": "==69.0.3" + "version": "==75.3.0" }, "text-unidecode": { "hashes": [ @@ -435,62 +443,49 @@ ], "version": "==1.3" }, - "tomli": { - "hashes": [ - "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc", - "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f" - ], - "markers": "python_version < '3.11'", - "version": "==2.0.1" - }, - "typing-extensions": { - "hashes": [ - "sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783", - "sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd" - ], - "markers": "python_version < '3.11'", - "version": "==4.9.0" - }, "urllib3": { "hashes": [ - "sha256:051d961ad0c62a94e50ecf1af379c3aba230c66c710493493560c0c223c49f20", - "sha256:ce3711610ddce217e6d113a2732fafad960a03fd0318c91faa79481e35c11224" + "sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac", + "sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9" ], "markers": "python_version >= '3.8'", - "version": "==2.2.0" + "version": "==2.2.3" }, "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": [ @@ -499,14 +494,6 @@ ], "markers": "python_version >= '3.8'", "version": "==2.3.8" - }, - "zipp": { - "hashes": [ - "sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31", - "sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0" - ], - "markers": "python_version >= '3.8'", - "version": "==3.17.0" } }, "develop": {} diff --git a/README.md b/README.md index 30b95fe13..d528e14d8 100644 --- a/README.md +++ b/README.md @@ -20,22 +20,26 @@ 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 list of authors and their contributions to this project :blush: @@ -47,6 +51,10 @@ via lektor (see [Deployment](#deployment), below). ### 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 +70,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 ``` @@ -105,6 +113,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 +217,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 +231,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/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/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/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/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/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/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/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..e57f74542 100644 --- a/content/blog/entries/cc-vocabulary-docs-updates-closing/contents.lr +++ b/content/blog/entries/cc-vocabulary-docs-updates-closing/contents.lr @@ -210,59 +210,59 @@ 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 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/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/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/community/code-of-conduct/contents.lr b/content/community/code-of-conduct/contents.lr index ad45095ae..1a9a5b05d 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: diff --git a/content/community/code-of-conduct/enforcement/contents.lr b/content/community/code-of-conduct/enforcement/contents.lr index 159b103a3..3871b041a 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] 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..7265e5d66 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: @@ -57,6 +56,7 @@ The channels most relevant to CC's developer community are: | `#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 diff --git a/content/community/write-a-blog-post/contents.lr b/content/community/write-a-blog-post/contents.lr index e33aefe14..d5827c94f 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,7 +29,7 @@ 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 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 3b168ce55..ad53b6a52 100644 --- a/content/contributing-code/github-repo-guidelines/contents.lr +++ b/content/contributing-code/github-repo-guidelines/contents.lr @@ -38,9 +38,9 @@ these files: [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/vocabulary/blob/main/CODE_OF_CONDUCT.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/vocabulary/blob/main/CONTRIBUTING.md +[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 @@ -108,8 +108,8 @@ 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 @@ -118,7 +118,7 @@ the contribution guidelines for that project. ## 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. 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 6e5d1b8ac..b706ba5c4 100644 --- a/content/programs/contents.lr +++ b/content/programs/contents.lr @@ -22,22 +22,20 @@ CC isn't currently participating in Google Season of Docs (GSoD). ### Google Summer of Code -CC is applying for participation in Google Summer of Code (GSoC) 2024. +CC will apply for participation in Google Summer of Code (GSoC) 2025. - [Program website](https://summerofcode.withgoogle.com/) ### Outreachy -CC isn't participating in the May 2024 internships. - -CC will participate in the December 2024 internships. +CC is participating in the December 2024 cohort. - [Program website](https://www.outreachy.org/) - [CC's Outreachy page][outreachycc] 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/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/ansible-dev-env/contents.lr b/content/programs/project-ideas-collection/ansible-dev-env/contents.lr deleted file mode 100644 index a0381561b..000000000 --- a/content/programs/project-ideas-collection/ansible-dev-env/contents.lr +++ /dev/null @@ -1,63 +0,0 @@ -_model: project-idea ---- -_hidden: yes ---- -title: Create local Ansible Dev environment using Docker ---- -problem: -The enhancement of system architectures through the strategic transition from -SaltStack to Ansible for provisioning, coupled with the implementation of -Docker infrastructure, represents a significant step towards improved -efficiency and scalability. ---- -expected_outcome: -The project's goal is to create a strong and local development setup using -Ansible and Docker. This setup will be like a real work environment, with a -special server for security (Bastion), automation with Ansible, a server for -websites, and a server for storing data. This setup will make developing things -easier and safer, and it will be a model for how we do similar projects at CC -in the future. - -Docker containers: -- Bastion (SSH jump server) -- Ansible -- Web server (Apache2/WordPress) -- Database server (MariaDB) ---- -contributor_tasks: -Contributor will: -- Set up Docker containers for the Bastion server, Ansible server, Web server, - and Database server. -- Implement a secure system for managing and using secrets - - Set up a secure storage solution for managing secrets, such as Ansible Vault - - It is recommended to inject secrets into containers at runtime as needed, - and not stored within container images. -- Configure Ansible playbooks for deploying the web application and interact - with the database. -- Document the setup process ---- -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: -- [Ansible Documentation](https://docs.ansible.com/) -- [FrontPage - Debian Wiki](https://wiki.debian.org/FrontPage) -- [Docker Docs](https://docs.docker.com/) -- [creativecommons/sre-salt-prime](https://github.com/creativecommons/sre-salt-prime): Site Reliability Engineering / DevOps SaltStack configuration files ---- -skills_recommended: -- Ansible -- Debian -- Docker -- Git ---- -lead: -- Shafiya ---- -difficulty: Medium ---- -size: Large (~350 hours) ---- -filter_value: difficulty-medium skill-ansible skill-debian skill-docker skill-git 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/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..919d03d2f --- /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/creativecommons.github.io-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/media-attribution-wp-plugin/contents.lr b/content/programs/project-ideas-collection/media-attribution-wp-plugin/contents.lr deleted file mode 100644 index d2e09127e..000000000 --- a/content/programs/project-ideas-collection/media-attribution-wp-plugin/contents.lr +++ /dev/null @@ -1,75 +0,0 @@ -_model: project-idea ---- -_hidden: yes ---- -title: Create Media Attribution and License Plugin for WordPress ---- -problem: -The current existing Creative Commons WordPress plugin has feature drift and -technical debt that make it a challenge to sensibly expand/revise. At the core -of desired uses, this new WordPress plugin needs a reliable and succinct way to -add Attribution and Licensing information to a Media item within the Media -Library at initial upload. This modification/extension of the Media item’s -"meta field information" needs to be stable and clear enough to enable future -expansions in featureset into other areas of the WordPress backend interface. ---- -expected_outcome: -Building from a strategy of simplistic and necessary structure and -functionality, a new plugin would be created that extends the fields for a -Media item to include License and Attribution information. ---- -contributor_tasks: -Contributor will follow an approach that is simple to maintain, and possible to -extend in the future. Users can upload items in at least four ways, and ideally -all four would be factored into this plugin: -- through the Media Library directly -- through the TinyMCE editor “Add Media” button when utilizing the Classic - Editor -- when adding an image to a “featured image” or similar field in the Classic - Editor -- through any Gutenberg editor block that utilizes an image/file attachment - mechanism. - -Each of these routes should have the ability to input and modify this -additional meta field information about the item. The plugin should utilize -well structured PHP generally. More specifically when solving for Gutenberg -and/or TinyMCE adequate and sensible choices in JavaScript should be utilized. -All code should be well documented, and specific code interacting with the -Classic editor vs. Gutenberg editor contexts should be well compartmentalized. -The Contributor will also set up a custom Docker configuration in accordance -with other WP + Docker setups utilized by CC, specifically for the build and -testing of the plugin. ---- -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: -- [CC Attribution Guidelines](https://wiki.creativecommons.org/wiki/Recommended_practices_for_attribution) -- [CC Licenses](https://creativecommons.org/share-your-work/cclicenses/) -- [Classic Editor + TinyMCE](https://codex.wordpress.org/TinyMCE) -- [Docker](https://www.docker.com/) -- [Docker in vocabulary-theme](https://github.com/creativecommons/vocabulary-theme?tab=readme-ov-file#docker-containers) -- [Gutenberg](https://developer.wordpress.org/block-editor/explanations/architecture/key-concepts/) -- [WordPress Plugin Development](https://developer.wordpress.org/plugins/intro/) -- [WordPress Theme Development](https://codex.wordpress.org/Theme_Development) ---- -skills_recommended: -- CSS -- Docker -- Git -- HTML -- JavaScript -- PHP -- WordPress (including Classic Editor, Gutenberg Editor/React.js, Plugins, and - Themes) ---- -lead: -- Sara ---- -difficulty: Hard ---- -size: Large (~350 hours) ---- -filter_value: difficulty-hard skill-css skill-docker skill-git skill-javascript skill-php skill-wordpress 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 aa8041b9c..000000000 --- a/content/programs/project-ideas-collection/modernize-cc-resource-archive/contents.lr +++ /dev/null @@ -1,52 +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 and 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 GitHub 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 site hosted on GitHub Pages. 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/), [Lektor](https://www.getlektor.com/), or - [Nikola](https://getnikola.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/databags/community_team_members.json b/databags/community_team_members.json index 665937e05..6b83d0a62 100644 --- a/databags/community_team_members.json +++ b/databags/community_team_members.json @@ -239,6 +239,11 @@ "name": "Kriti Godey", "role": "Project Maintainer" }, + { + "github": "zackkrida", + "name": "Zack Krida", + "role": "Project Maintainer" + }, { "github": "JackieBinya", "name": "Jacqueline Binya", @@ -291,22 +296,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 da7d15289..40ed37c6e 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,22 +155,6 @@ "url": "https://github.com/creativecommons/cc-resource-archive", "website": "https://resources.creativecommons.org/" }, - { - "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)", @@ -345,6 +285,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.", @@ -519,7 +473,7 @@ "english_name": "CC Legal Database", "featured": false, "id": 133715391, - "language": "HTML", + "language": "CSS", "license": { "name": "MIT License", "url": "https://github.com/creativecommons/legaldb/blob/main/LICENSE" @@ -532,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", @@ -625,7 +579,7 @@ }, { "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, @@ -698,7 +652,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" @@ -835,99 +789,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", 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 74efba7bc..3568c1920 100644 --- a/themes/vocabulary_theme/templates/layout.html +++ b/themes/vocabulary_theme/templates/layout.html @@ -1,4 +1,5 @@ + @@ -27,7 +28,6 @@ {% endif %} -