* feat: use legacy flag chore: reorder challenges fix: linter revert: server change feat: unblock new editor fix: proper order fix: 0-based order fix: broke the order feat: move tribute certification to its own block feat: split the old projects block into 4 fix: put all blocks in order chore: add intro text refactor: use block, not blockName in query fix: project progress indicator * fix: reorder new challenges/certs * fix: reorder legacy challenges * fix: reintroduce legacy certs * feat: add showNewCurriculum flag to env * chore: forgot sample.env * feat: use feature flag for display * fix: rename meta + dirs to match new blocks * fix: add new blocks to help-category-map * fix: update completion-modal for new GQL schema * test: duplicate title/id errors -> warnings * fix: update completion-modal to new GQL schema Mk2 * chore: re-order metas (again) * fix: revert super-block-intro changes The intro needs to show both legacy and new content. We need to decide which pages are created, rather than than what a page shows when rendered. * feat: move upcoming curriculum into own superblock * fix: handle one certification with two superBlocks * fix: remove duplicated intros * fix: remove duplicate projects from /settings * fix: drop 'two' from Responsive Web Design Two * chore: rename slug suffix from two to v2 * feat: control display of new curriculum * feat: control project paths shown on /settings * fix: use new project order for /settings This does mean that /settings will change before the release, but I don't think it's serious. All the projects are there, just not in the legacy order. * fix: claim/show cert button * chore: remove isLegacy Since we have legacy superblocks, we don't currently need individual blocks to be legacy * test: fix utils.test * fix: verifyCanClaim needs certification If Shaun removes the cert claim cards, maybe we can remove this entirely * fix: add hasEditableBoundaries flags where needed * chore: remove isUpcomingChange * chore: v2 -> 22 Co-authored-by: Oliver Eyton-Williams <ojeytonwilliams@gmail.com>
		
			
				
	
	
		
			292 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			292 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| ---
 | |
| id: 6141026ec9882f2d39dcf2b8
 | |
| title: Step 26
 | |
| challengeType: 0
 | |
| dashedName: step-26
 | |
| ---
 | |
| 
 | |
| # --description--
 | |
| 
 | |
| Between the `0%` and `100%` selectors, add a `50%` selector. This will apply in the middle of the animation cycle. Set the `background-color` to `purple`.
 | |
| 
 | |
| # --hints--
 | |
| 
 | |
| You should create a new `50%` selector in your `@keyframes cabins` rule.
 | |
| 
 | |
| ```js
 | |
| const rules = new __helpers.CSSHelp(document).getCSSRules('keyframes')?.[1]?.cssRules;
 | |
| assert(rules?.[0]?.keyText === '50%' || rules?.[1]?.keyText === '50%' || rules?.[2]?.keyText === '50%'); 
 | |
| ```
 | |
| 
 | |
| Your `50%` selector should be between your `0%` and `100%` selectors.
 | |
| 
 | |
| ```js
 | |
| assert(new __helpers.CSSHelp(document).getCSSRules('keyframes')?.[1]?.cssRules?.[1]?.keyText === '50%');
 | |
| ```
 | |
| 
 | |
| Your `50%` selector should have a `background-color` property set to `purple`.
 | |
| 
 | |
| ```js
 | |
| assert(new __helpers.CSSHelp(document).getCSSRules('keyframes')?.[1]?.cssRules?.[1]?.style?.backgroundColor === 'purple');
 | |
| ```
 | |
| 
 | |
| # --seed--
 | |
| 
 | |
| ## --seed-contents--
 | |
| 
 | |
| ```html
 | |
| <!DOCTYPE html>
 | |
| <html>
 | |
|   <head>
 | |
|     <meta charset="UTF-8">
 | |
|     <title> Learn CSS Animations by Building a Ferris Wheel</title>
 | |
|     <link rel="stylesheet" href="./styles.css">
 | |
|   </head>
 | |
|   <body>
 | |
|     <div class="wheel">
 | |
|       <span class="line"></span>
 | |
|       <span class="line"></span>
 | |
|       <span class="line"></span>
 | |
|       <span class="line"></span>
 | |
|       <span class="line"></span>
 | |
|       <span class="line"></span>
 | |
| 
 | |
|       <div class="cabin"></div>
 | |
|       <div class="cabin"></div>
 | |
|       <div class="cabin"></div>
 | |
|       <div class="cabin"></div>
 | |
|       <div class="cabin"></div>
 | |
|       <div class="cabin"></div>
 | |
|     </div>
 | |
|   </body>
 | |
| </html>
 | |
| ```
 | |
| 
 | |
| ```css
 | |
| .wheel {
 | |
|   border: 2px solid black;
 | |
|   border-radius: 50%;
 | |
|   margin-left: 50px;
 | |
|   position: absolute;
 | |
|   height: 55vw;
 | |
|   width: 55vw;
 | |
|   max-width: 500px;
 | |
|   max-height: 500px;
 | |
|   animation-name: wheel;
 | |
|   animation-duration: 10s;
 | |
|   animation-iteration-count: infinite;
 | |
|   animation-timing-function: linear;
 | |
| }
 | |
| 
 | |
| .line {
 | |
|   background-color: black;
 | |
|   width: 50%;
 | |
|   height: 2px;
 | |
|   position: absolute;
 | |
|   top: 50%;
 | |
|   left: 50%;
 | |
|   transform-origin: 0% 0%;
 | |
| }
 | |
| 
 | |
| .line:nth-of-type(2) {
 | |
|   transform: rotate(60deg);
 | |
| }
 | |
| .line:nth-of-type(3) {
 | |
|   transform: rotate(120deg);
 | |
| }
 | |
| .line:nth-of-type(4) {
 | |
|   transform: rotate(180deg);
 | |
| }
 | |
| .line:nth-of-type(5) {
 | |
|   transform: rotate(240deg);
 | |
| }
 | |
| .line:nth-of-type(6) {
 | |
|   transform: rotate(300deg);
 | |
| }
 | |
| 
 | |
| .cabin {
 | |
|   background-color: red;
 | |
|   width: 20%;
 | |
|   height: 20%;
 | |
|   position: absolute;
 | |
|   border: 2px solid;
 | |
|   transform-origin: 50% 0%;
 | |
|   animation: cabins 10s ease-in-out infinite;
 | |
| }
 | |
| 
 | |
| .cabin:nth-of-type(1) {
 | |
|   right: -8.5%;
 | |
|   top: 50%;
 | |
| }
 | |
| .cabin:nth-of-type(2) {
 | |
|   right: 17%;
 | |
|   top: 93.5%;
 | |
| }
 | |
| .cabin:nth-of-type(3) {
 | |
|   right: 67%;
 | |
|   top: 93.5%;
 | |
| }
 | |
| .cabin:nth-of-type(4) {
 | |
|   left: -8.5%;
 | |
|   top: 50%;
 | |
| }
 | |
| .cabin:nth-of-type(5) {
 | |
|   left: 17%;
 | |
|   top: 7%;
 | |
| }
 | |
| .cabin:nth-of-type(6) {
 | |
|   right: 17%;
 | |
|   top: 7%;
 | |
| }
 | |
| 
 | |
| @keyframes wheel {
 | |
|    0% {
 | |
|      transform: rotate(0deg);
 | |
|    }
 | |
|    100% {
 | |
|      transform: rotate(360deg);
 | |
|    }
 | |
| }
 | |
| 
 | |
| --fcc-editable-region--
 | |
| @keyframes cabins {
 | |
|   0% {
 | |
|     transform: rotate(0deg);
 | |
|     background-color: yellow;
 | |
|   }
 | |
|   100% {
 | |
|     transform: rotate(-360deg);
 | |
|   }
 | |
| }
 | |
| --fcc-editable-region--
 | |
| ```
 | |
| 
 | |
| ## --solutions--
 | |
| 
 | |
| ```html
 | |
| <!DOCTYPE html>
 | |
| <html>
 | |
|   <head>
 | |
|     <meta charset="UTF-8">
 | |
|     <title> Learn CSS Animations by Building a Ferris Wheel</title>
 | |
|     <link rel="stylesheet" href="./styles.css">
 | |
|   </head>
 | |
|   <body>
 | |
|     <div class="wheel">
 | |
|       <span class="line"></span>
 | |
|       <span class="line"></span>
 | |
|       <span class="line"></span>
 | |
|       <span class="line"></span>
 | |
|       <span class="line"></span>
 | |
|       <span class="line"></span>
 | |
| 
 | |
|       <div class="cabin"></div>
 | |
|       <div class="cabin"></div>
 | |
|       <div class="cabin"></div>
 | |
|       <div class="cabin"></div>
 | |
|       <div class="cabin"></div>
 | |
|       <div class="cabin"></div>
 | |
|     </div>
 | |
|   </body>
 | |
| </html>
 | |
| ```
 | |
| 
 | |
| ```css
 | |
| .wheel {
 | |
|   border: 2px solid black;
 | |
|   border-radius: 50%;
 | |
|   margin-left: 50px;
 | |
|   position: absolute;
 | |
|   height: 55vw;
 | |
|   width: 55vw;
 | |
|   animation-name: wheel;
 | |
|   animation-duration: 10s;
 | |
|   animation-iteration-count: infinite;
 | |
|   animation-timing-function: linear;
 | |
| }
 | |
| 
 | |
| .line {
 | |
|   background-color: black;
 | |
|   width: 50%;
 | |
|   height: 2px;
 | |
|   position: absolute;
 | |
|   top: 50%;
 | |
|   left: 50%;
 | |
|   transform-origin: 0% 0%;
 | |
| }
 | |
| 
 | |
| .line:nth-of-type(2) {
 | |
|   transform: rotate(60deg);
 | |
| }
 | |
| .line:nth-of-type(3) {
 | |
|   transform: rotate(120deg);
 | |
| }
 | |
| .line:nth-of-type(4) {
 | |
|   transform: rotate(180deg);
 | |
| }
 | |
| .line:nth-of-type(5) {
 | |
|   transform: rotate(240deg);
 | |
| }
 | |
| .line:nth-of-type(6) {
 | |
|   transform: rotate(300deg);
 | |
| }
 | |
| 
 | |
| .cabin {
 | |
|   background-color: red;
 | |
|   width: 20%;
 | |
|   height: 20%;
 | |
|   position: absolute;
 | |
|   border: 2px solid;
 | |
|   transform-origin: 50% 0%;
 | |
|   animation: cabins 10s ease-in-out infinite;
 | |
| }
 | |
| 
 | |
| .cabin:nth-of-type(1) {
 | |
|   right: -8.5%;
 | |
|   top: 50%;
 | |
| }
 | |
| .cabin:nth-of-type(2) {
 | |
|   right: 17%;
 | |
|   top: 93.5%;
 | |
| }
 | |
| .cabin:nth-of-type(3) {
 | |
|   right: 67%;
 | |
|   top: 93.5%;
 | |
| }
 | |
| .cabin:nth-of-type(4) {
 | |
|   left: -8.5%;
 | |
|   top: 50%;
 | |
| }
 | |
| .cabin:nth-of-type(5) {
 | |
|   left: 17%;
 | |
|   top: 7%;
 | |
| }
 | |
| .cabin:nth-of-type(6) {
 | |
|   right: 17%;
 | |
|   top: 7%;
 | |
| }
 | |
| 
 | |
| @keyframes wheel {
 | |
|    0% {
 | |
|      transform: rotate(0deg);
 | |
|    }
 | |
|    100% {
 | |
|      transform: rotate(360deg);
 | |
|    }
 | |
| }
 | |
| 
 | |
| @keyframes cabins {
 | |
|   0% {
 | |
|     transform: rotate(0deg);
 | |
|     background-color: yellow;
 | |
|   }
 | |
|   50% {
 | |
|     background-color: purple;
 | |
|   }
 | |
|   100% {
 | |
|     transform: rotate(-360deg);
 | |
|   }
 | |
| }
 | |
| ```
 | |
| 
 |