challenge attempts - #1

Open
LiamBorner wants to merge 9 commits into
InfuseGroup:masterfrom
LiamBorner:master
Open

challenge attempts#1
LiamBorner wants to merge 9 commits into
InfuseGroup:masterfrom
LiamBorner:master

Conversation

@LiamBorner

Copy link
Copy Markdown

These are my attempts at completing the challenges

@BowlegsBillBowlegsBill left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added some comments

Comment threadapp/javascript/components/challenges/Login.tsx Outdated
Comment threadapp/javascript/components/challenges/Login.tsx Outdated
Comment threadapp/javascript/components/challenges/Login.tsx Outdated
Comment threadapp/javascript/components/challenges/Login.tsx Outdated
Comment threadapp/javascript/components/challenges/Login.tsx
Comment threadapp/views/static_pages/home.html.erb
Comment threadpackage.json
Comment on lines +13 to +24
"email-validator": "^2.0.4",
"formik": "^2.1.4",
"jquery": "^3.4.1",
"prop-types": "^15.7.2",
"react": "^16.12.0",
"react-dom": "^16.12.0",
"react-native-form-validator": "^0.3.2",
"react_ujs": "^2.6.1",
"ts-loader": "^6.2.1",
"turbolinks": "^5.2.0",
"typescript": "^3.7.5"
"typescript": "^3.7.5",
"yup": "^0.28.1"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess these were all previous attempts at validating the email?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

They were indeed

Comment on lines +76 to +78
<h3>1. Randomise the image when you click the button.</h3>
/* this can potentially be achieved by using the NASA api documentation to fetch
an image from their database each time */

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So basically NASA has 1 image per day so you need to create a random date and pass it into the getImage method and it will give you back their image for that day

Comment threadapp/javascript/components/challenges/Cards.tsx Outdated
Comment threadapp/javascript/components/challenges/Counter.tsx
@LiamBorner

Copy link
Copy Markdown
Author

Hi Bill,

If I've done this correctly, you should be able to see my amends based on your review that have been committed back to my master branch. I'm clicking 'Close and comment' so hopefully this submits those changes.

I have two outstanding issues that I'm stumped with and have tried many methods to solve them. It's frustrating as I was hoping to have them all resolved thanks to your guidance.

@BowlegsBillBowlegsBill left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for doing this mate, much appreciated. You should receive an email from me through Pinpoint shortly



function getImage(date: string) {
return fetch(`${baseUri}?api_key=${nasaApiKey}&date=${myDate}`)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You don't need to use myDate here since we are passing the date into the method.

Just needs to be return fetch('${baseUri}?api_key=${nasaApiKey}&date=${date}')

<button style={buttonStyles}>Randomise</button>
<div className="card" style={{ backgroundImage: `${baseUri}?api_key=${nasaApiKey}&date=${myDate}` }} /></div>
<div style={{ display: 'flex', justifyContent: 'center' }}>
<button style={buttonStyles} >Randomise</button>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So for the onClick add an onclick handler to the button;

<button style={buttonStyles} onClick={handleRandomise}>Randomise</button>

Then we also need to do something with the onClick so:

function handleRandomise() {
const randomDate = "2019-0"+Math.floor(Math.random()*12).toString() +"-" + Math.floor(Math.random()*29).toString();
getImage(randomDate).then(response => setRandomImage(response))
}

Then we need some new state const [randomImage, setRandomImage] = React.useState('')

And finally change the background image for the card:

<div className="card" style={{ backgroundImage: `url(${randomImage})` }} /></div>
<div style={{ display: 'flex', justifyContent: 'center' }}>
<button style={buttonStyles} onClick={handleRandomise}>Randomise</button>
</div>

Comment on lines +17 to +25
function validateEmail(value) {
let error;
if (!value) {
error = 'Required';
} else if (!/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i.test(value)) {
error = 'Invalid email address';
}
return error;
};

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pretty much there with this one.

Add an onblur handler to the email input and add the email validation error into the error box:

<input name="email" type="email" value={email} onChange={handleEmailChange} onBlur={validateEmail} />
<div style={{ color: 'red', margin: '10px 0' }}>{emailValidationError}</div>

Then change your validation function slightly:

function validateEmail(event) {
const value = event.target.value;
let error;
if (!value) {
error = 'Required';
} else if (!/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,6}$/i.test(value)) {
error = 'Invalid email address';
}
setEmailValidationError(error)
};

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@LiamBorner@BowlegsBill
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

challenge attempts - #1

Open
LiamBorner wants to merge 9 commits into
InfuseGroup:masterfrom
LiamBorner:master
Open

challenge attempts#1
LiamBorner wants to merge 9 commits into
InfuseGroup:masterfrom
LiamBorner:master

Conversation

@LiamBorner

Copy link
Copy Markdown

These are my attempts at completing the challenges

@BowlegsBillBowlegsBill left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added some comments

Comment threadapp/javascript/components/challenges/Login.tsx Outdated
Comment threadapp/javascript/components/challenges/Login.tsx Outdated
Comment threadapp/javascript/components/challenges/Login.tsx Outdated
Comment threadapp/javascript/components/challenges/Login.tsx Outdated
Comment threadapp/javascript/components/challenges/Login.tsx
Comment threadapp/views/static_pages/home.html.erb
Comment threadpackage.json
Comment on lines +13 to +24
"email-validator": "^2.0.4",
"formik": "^2.1.4",
"jquery": "^3.4.1",
"prop-types": "^15.7.2",
"react": "^16.12.0",
"react-dom": "^16.12.0",
"react-native-form-validator": "^0.3.2",
"react_ujs": "^2.6.1",
"ts-loader": "^6.2.1",
"turbolinks": "^5.2.0",
"typescript": "^3.7.5"
"typescript": "^3.7.5",
"yup": "^0.28.1"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess these were all previous attempts at validating the email?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

They were indeed

Comment on lines +76 to +78
<h3>1. Randomise the image when you click the button.</h3>
/* this can potentially be achieved by using the NASA api documentation to fetch
an image from their database each time */

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So basically NASA has 1 image per day so you need to create a random date and pass it into the getImage method and it will give you back their image for that day

Comment threadapp/javascript/components/challenges/Cards.tsx Outdated
Comment threadapp/javascript/components/challenges/Counter.tsx
@LiamBorner

Copy link
Copy Markdown
Author

Hi Bill,

If I've done this correctly, you should be able to see my amends based on your review that have been committed back to my master branch. I'm clicking 'Close and comment' so hopefully this submits those changes.

I have two outstanding issues that I'm stumped with and have tried many methods to solve them. It's frustrating as I was hoping to have them all resolved thanks to your guidance.

@BowlegsBillBowlegsBill left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for doing this mate, much appreciated. You should receive an email from me through Pinpoint shortly



function getImage(date: string) {
return fetch(`${baseUri}?api_key=${nasaApiKey}&date=${myDate}`)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You don't need to use myDate here since we are passing the date into the method.

Just needs to be return fetch('${baseUri}?api_key=${nasaApiKey}&date=${date}')

<button style={buttonStyles}>Randomise</button>
<div className="card" style={{ backgroundImage: `${baseUri}?api_key=${nasaApiKey}&date=${myDate}` }} /></div>
<div style={{ display: 'flex', justifyContent: 'center' }}>
<button style={buttonStyles} >Randomise</button>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So for the onClick add an onclick handler to the button;

<button style={buttonStyles} onClick={handleRandomise}>Randomise</button>

Then we also need to do something with the onClick so:

function handleRandomise() {
const randomDate = "2019-0"+Math.floor(Math.random()*12).toString() +"-" + Math.floor(Math.random()*29).toString();
getImage(randomDate).then(response => setRandomImage(response))
}

Then we need some new state const [randomImage, setRandomImage] = React.useState('')

And finally change the background image for the card:

<div className="card" style={{ backgroundImage: `url(${randomImage})` }} /></div>
<div style={{ display: 'flex', justifyContent: 'center' }}>
<button style={buttonStyles} onClick={handleRandomise}>Randomise</button>
</div>

Comment on lines +17 to +25
function validateEmail(value) {
let error;
if (!value) {
error = 'Required';
} else if (!/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i.test(value)) {
error = 'Invalid email address';
}
return error;
};

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pretty much there with this one.

Add an onblur handler to the email input and add the email validation error into the error box:

<input name="email" type="email" value={email} onChange={handleEmailChange} onBlur={validateEmail} />
<div style={{ color: 'red', margin: '10px 0' }}>{emailValidationError}</div>

Then change your validation function slightly:

function validateEmail(event) {
const value = event.target.value;
let error;
if (!value) {
error = 'Required';
} else if (!/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,6}$/i.test(value)) {
error = 'Invalid email address';
}
setEmailValidationError(error)
};

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@LiamBorner@BowlegsBill
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

challenge attempts - #1

Open
LiamBorner wants to merge 9 commits into
InfuseGroup:masterfrom
LiamBorner:master
Open

challenge attempts#1
LiamBorner wants to merge 9 commits into
InfuseGroup:masterfrom
LiamBorner:master

Conversation

@LiamBorner

Copy link
Copy Markdown

These are my attempts at completing the challenges

@BowlegsBillBowlegsBill left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added some comments

Comment threadapp/javascript/components/challenges/Login.tsx Outdated
Comment threadapp/javascript/components/challenges/Login.tsx Outdated
Comment threadapp/javascript/components/challenges/Login.tsx Outdated
Comment threadapp/javascript/components/challenges/Login.tsx Outdated
Comment threadapp/javascript/components/challenges/Login.tsx
Comment threadapp/views/static_pages/home.html.erb
Comment threadpackage.json
Comment on lines +13 to +24
"email-validator": "^2.0.4",
"formik": "^2.1.4",
"jquery": "^3.4.1",
"prop-types": "^15.7.2",
"react": "^16.12.0",
"react-dom": "^16.12.0",
"react-native-form-validator": "^0.3.2",
"react_ujs": "^2.6.1",
"ts-loader": "^6.2.1",
"turbolinks": "^5.2.0",
"typescript": "^3.7.5"
"typescript": "^3.7.5",
"yup": "^0.28.1"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess these were all previous attempts at validating the email?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

They were indeed

Comment on lines +76 to +78
<h3>1. Randomise the image when you click the button.</h3>
/* this can potentially be achieved by using the NASA api documentation to fetch
an image from their database each time */

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So basically NASA has 1 image per day so you need to create a random date and pass it into the getImage method and it will give you back their image for that day

Comment threadapp/javascript/components/challenges/Cards.tsx Outdated
Comment threadapp/javascript/components/challenges/Counter.tsx
@LiamBorner

Copy link
Copy Markdown
Author

Hi Bill,

If I've done this correctly, you should be able to see my amends based on your review that have been committed back to my master branch. I'm clicking 'Close and comment' so hopefully this submits those changes.

I have two outstanding issues that I'm stumped with and have tried many methods to solve them. It's frustrating as I was hoping to have them all resolved thanks to your guidance.

@BowlegsBillBowlegsBill left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for doing this mate, much appreciated. You should receive an email from me through Pinpoint shortly



function getImage(date: string) {
return fetch(`${baseUri}?api_key=${nasaApiKey}&date=${myDate}`)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You don't need to use myDate here since we are passing the date into the method.

Just needs to be return fetch('${baseUri}?api_key=${nasaApiKey}&date=${date}')

<button style={buttonStyles}>Randomise</button>
<div className="card" style={{ backgroundImage: `${baseUri}?api_key=${nasaApiKey}&date=${myDate}` }} /></div>
<div style={{ display: 'flex', justifyContent: 'center' }}>
<button style={buttonStyles} >Randomise</button>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So for the onClick add an onclick handler to the button;

<button style={buttonStyles} onClick={handleRandomise}>Randomise</button>

Then we also need to do something with the onClick so:

function handleRandomise() {
const randomDate = "2019-0"+Math.floor(Math.random()*12).toString() +"-" + Math.floor(Math.random()*29).toString();
getImage(randomDate).then(response => setRandomImage(response))
}

Then we need some new state const [randomImage, setRandomImage] = React.useState('')

And finally change the background image for the card:

<div className="card" style={{ backgroundImage: `url(${randomImage})` }} /></div>
<div style={{ display: 'flex', justifyContent: 'center' }}>
<button style={buttonStyles} onClick={handleRandomise}>Randomise</button>
</div>

Comment on lines +17 to +25
function validateEmail(value) {
let error;
if (!value) {
error = 'Required';
} else if (!/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i.test(value)) {
error = 'Invalid email address';
}
return error;
};

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pretty much there with this one.

Add an onblur handler to the email input and add the email validation error into the error box:

<input name="email" type="email" value={email} onChange={handleEmailChange} onBlur={validateEmail} />
<div style={{ color: 'red', margin: '10px 0' }}>{emailValidationError}</div>

Then change your validation function slightly:

function validateEmail(event) {
const value = event.target.value;
let error;
if (!value) {
error = 'Required';
} else if (!/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,6}$/i.test(value)) {
error = 'Invalid email address';
}
setEmailValidationError(error)
};

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@LiamBorner@BowlegsBill
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

challenge attempts - #1

Open
LiamBorner wants to merge 9 commits into
InfuseGroup:masterfrom
LiamBorner:master
Open

challenge attempts#1
LiamBorner wants to merge 9 commits into
InfuseGroup:masterfrom
LiamBorner:master

Conversation

@LiamBorner

Copy link
Copy Markdown

These are my attempts at completing the challenges

@BowlegsBillBowlegsBill left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added some comments

Comment threadapp/javascript/components/challenges/Login.tsx Outdated
Comment threadapp/javascript/components/challenges/Login.tsx Outdated
Comment threadapp/javascript/components/challenges/Login.tsx Outdated
Comment threadapp/javascript/components/challenges/Login.tsx Outdated
Comment threadapp/javascript/components/challenges/Login.tsx
Comment threadapp/views/static_pages/home.html.erb
Comment threadpackage.json
Comment on lines +13 to +24
"email-validator": "^2.0.4",
"formik": "^2.1.4",
"jquery": "^3.4.1",
"prop-types": "^15.7.2",
"react": "^16.12.0",
"react-dom": "^16.12.0",
"react-native-form-validator": "^0.3.2",
"react_ujs": "^2.6.1",
"ts-loader": "^6.2.1",
"turbolinks": "^5.2.0",
"typescript": "^3.7.5"
"typescript": "^3.7.5",
"yup": "^0.28.1"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess these were all previous attempts at validating the email?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

They were indeed

Comment on lines +76 to +78
<h3>1. Randomise the image when you click the button.</h3>
/* this can potentially be achieved by using the NASA api documentation to fetch
an image from their database each time */

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So basically NASA has 1 image per day so you need to create a random date and pass it into the getImage method and it will give you back their image for that day

Comment threadapp/javascript/components/challenges/Cards.tsx Outdated
Comment threadapp/javascript/components/challenges/Counter.tsx
@LiamBorner

Copy link
Copy Markdown
Author

Hi Bill,

If I've done this correctly, you should be able to see my amends based on your review that have been committed back to my master branch. I'm clicking 'Close and comment' so hopefully this submits those changes.

I have two outstanding issues that I'm stumped with and have tried many methods to solve them. It's frustrating as I was hoping to have them all resolved thanks to your guidance.

@BowlegsBillBowlegsBill left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for doing this mate, much appreciated. You should receive an email from me through Pinpoint shortly



function getImage(date: string) {
return fetch(`${baseUri}?api_key=${nasaApiKey}&date=${myDate}`)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You don't need to use myDate here since we are passing the date into the method.

Just needs to be return fetch('${baseUri}?api_key=${nasaApiKey}&date=${date}')

<button style={buttonStyles}>Randomise</button>
<div className="card" style={{ backgroundImage: `${baseUri}?api_key=${nasaApiKey}&date=${myDate}` }} /></div>
<div style={{ display: 'flex', justifyContent: 'center' }}>
<button style={buttonStyles} >Randomise</button>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So for the onClick add an onclick handler to the button;

<button style={buttonStyles} onClick={handleRandomise}>Randomise</button>

Then we also need to do something with the onClick so:

function handleRandomise() {
const randomDate = "2019-0"+Math.floor(Math.random()*12).toString() +"-" + Math.floor(Math.random()*29).toString();
getImage(randomDate).then(response => setRandomImage(response))
}

Then we need some new state const [randomImage, setRandomImage] = React.useState('')

And finally change the background image for the card:

<div className="card" style={{ backgroundImage: `url(${randomImage})` }} /></div>
<div style={{ display: 'flex', justifyContent: 'center' }}>
<button style={buttonStyles} onClick={handleRandomise}>Randomise</button>
</div>

Comment on lines +17 to +25
function validateEmail(value) {
let error;
if (!value) {
error = 'Required';
} else if (!/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i.test(value)) {
error = 'Invalid email address';
}
return error;
};

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pretty much there with this one.

Add an onblur handler to the email input and add the email validation error into the error box:

<input name="email" type="email" value={email} onChange={handleEmailChange} onBlur={validateEmail} />
<div style={{ color: 'red', margin: '10px 0' }}>{emailValidationError}</div>

Then change your validation function slightly:

function validateEmail(event) {
const value = event.target.value;
let error;
if (!value) {
error = 'Required';
} else if (!/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,6}$/i.test(value)) {
error = 'Invalid email address';
}
setEmailValidationError(error)
};

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@LiamBorner@BowlegsBill
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

challenge attempts - #1

Open
LiamBorner wants to merge 9 commits into
InfuseGroup:masterfrom
LiamBorner:master
Open

challenge attempts#1
LiamBorner wants to merge 9 commits into
InfuseGroup:masterfrom
LiamBorner:master

Conversation

@LiamBorner

Copy link
Copy Markdown

These are my attempts at completing the challenges

@BowlegsBillBowlegsBill left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added some comments

Comment threadapp/javascript/components/challenges/Login.tsx Outdated
Comment threadapp/javascript/components/challenges/Login.tsx Outdated
Comment threadapp/javascript/components/challenges/Login.tsx Outdated
Comment threadapp/javascript/components/challenges/Login.tsx Outdated
Comment threadapp/javascript/components/challenges/Login.tsx
Comment threadapp/views/static_pages/home.html.erb
Comment threadpackage.json
Comment on lines +13 to +24
"email-validator": "^2.0.4",
"formik": "^2.1.4",
"jquery": "^3.4.1",
"prop-types": "^15.7.2",
"react": "^16.12.0",
"react-dom": "^16.12.0",
"react-native-form-validator": "^0.3.2",
"react_ujs": "^2.6.1",
"ts-loader": "^6.2.1",
"turbolinks": "^5.2.0",
"typescript": "^3.7.5"
"typescript": "^3.7.5",
"yup": "^0.28.1"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess these were all previous attempts at validating the email?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

They were indeed

Comment on lines +76 to +78
<h3>1. Randomise the image when you click the button.</h3>
/* this can potentially be achieved by using the NASA api documentation to fetch
an image from their database each time */

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So basically NASA has 1 image per day so you need to create a random date and pass it into the getImage method and it will give you back their image for that day

Comment threadapp/javascript/components/challenges/Cards.tsx Outdated
Comment threadapp/javascript/components/challenges/Counter.tsx
@LiamBorner

Copy link
Copy Markdown
Author

Hi Bill,

If I've done this correctly, you should be able to see my amends based on your review that have been committed back to my master branch. I'm clicking 'Close and comment' so hopefully this submits those changes.

I have two outstanding issues that I'm stumped with and have tried many methods to solve them. It's frustrating as I was hoping to have them all resolved thanks to your guidance.

@BowlegsBillBowlegsBill left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for doing this mate, much appreciated. You should receive an email from me through Pinpoint shortly



function getImage(date: string) {
return fetch(`${baseUri}?api_key=${nasaApiKey}&date=${myDate}`)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You don't need to use myDate here since we are passing the date into the method.

Just needs to be return fetch('${baseUri}?api_key=${nasaApiKey}&date=${date}')

<button style={buttonStyles}>Randomise</button>
<div className="card" style={{ backgroundImage: `${baseUri}?api_key=${nasaApiKey}&date=${myDate}` }} /></div>
<div style={{ display: 'flex', justifyContent: 'center' }}>
<button style={buttonStyles} >Randomise</button>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So for the onClick add an onclick handler to the button;

<button style={buttonStyles} onClick={handleRandomise}>Randomise</button>

Then we also need to do something with the onClick so:

function handleRandomise() {
const randomDate = "2019-0"+Math.floor(Math.random()*12).toString() +"-" + Math.floor(Math.random()*29).toString();
getImage(randomDate).then(response => setRandomImage(response))
}

Then we need some new state const [randomImage, setRandomImage] = React.useState('')

And finally change the background image for the card:

<div className="card" style={{ backgroundImage: `url(${randomImage})` }} /></div>
<div style={{ display: 'flex', justifyContent: 'center' }}>
<button style={buttonStyles} onClick={handleRandomise}>Randomise</button>
</div>

Comment on lines +17 to +25
function validateEmail(value) {
let error;
if (!value) {
error = 'Required';
} else if (!/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i.test(value)) {
error = 'Invalid email address';
}
return error;
};

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pretty much there with this one.

Add an onblur handler to the email input and add the email validation error into the error box:

<input name="email" type="email" value={email} onChange={handleEmailChange} onBlur={validateEmail} />
<div style={{ color: 'red', margin: '10px 0' }}>{emailValidationError}</div>

Then change your validation function slightly:

function validateEmail(event) {
const value = event.target.value;
let error;
if (!value) {
error = 'Required';
} else if (!/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,6}$/i.test(value)) {
error = 'Invalid email address';
}
setEmailValidationError(error)
};

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@LiamBorner@BowlegsBill
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

challenge attempts - #1

Open
LiamBorner wants to merge 9 commits into
InfuseGroup:masterfrom
LiamBorner:master
Open

challenge attempts#1
LiamBorner wants to merge 9 commits into
InfuseGroup:masterfrom
LiamBorner:master

Conversation

@LiamBorner

Copy link
Copy Markdown

These are my attempts at completing the challenges

@BowlegsBillBowlegsBill left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added some comments

Comment threadapp/javascript/components/challenges/Login.tsx Outdated
Comment threadapp/javascript/components/challenges/Login.tsx Outdated
Comment threadapp/javascript/components/challenges/Login.tsx Outdated
Comment threadapp/javascript/components/challenges/Login.tsx Outdated
Comment threadapp/javascript/components/challenges/Login.tsx
Comment threadapp/views/static_pages/home.html.erb
Comment threadpackage.json
Comment on lines +13 to +24
"email-validator": "^2.0.4",
"formik": "^2.1.4",
"jquery": "^3.4.1",
"prop-types": "^15.7.2",
"react": "^16.12.0",
"react-dom": "^16.12.0",
"react-native-form-validator": "^0.3.2",
"react_ujs": "^2.6.1",
"ts-loader": "^6.2.1",
"turbolinks": "^5.2.0",
"typescript": "^3.7.5"
"typescript": "^3.7.5",
"yup": "^0.28.1"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess these were all previous attempts at validating the email?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

They were indeed

Comment on lines +76 to +78
<h3>1. Randomise the image when you click the button.</h3>
/* this can potentially be achieved by using the NASA api documentation to fetch
an image from their database each time */

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So basically NASA has 1 image per day so you need to create a random date and pass it into the getImage method and it will give you back their image for that day

Comment threadapp/javascript/components/challenges/Cards.tsx Outdated
Comment threadapp/javascript/components/challenges/Counter.tsx
@LiamBorner

Copy link
Copy Markdown
Author

Hi Bill,

If I've done this correctly, you should be able to see my amends based on your review that have been committed back to my master branch. I'm clicking 'Close and comment' so hopefully this submits those changes.

I have two outstanding issues that I'm stumped with and have tried many methods to solve them. It's frustrating as I was hoping to have them all resolved thanks to your guidance.

@BowlegsBillBowlegsBill left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for doing this mate, much appreciated. You should receive an email from me through Pinpoint shortly



function getImage(date: string) {
return fetch(`${baseUri}?api_key=${nasaApiKey}&date=${myDate}`)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You don't need to use myDate here since we are passing the date into the method.

Just needs to be return fetch('${baseUri}?api_key=${nasaApiKey}&date=${date}')

<button style={buttonStyles}>Randomise</button>
<div className="card" style={{ backgroundImage: `${baseUri}?api_key=${nasaApiKey}&date=${myDate}` }} /></div>
<div style={{ display: 'flex', justifyContent: 'center' }}>
<button style={buttonStyles} >Randomise</button>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So for the onClick add an onclick handler to the button;

<button style={buttonStyles} onClick={handleRandomise}>Randomise</button>

Then we also need to do something with the onClick so:

function handleRandomise() {
const randomDate = "2019-0"+Math.floor(Math.random()*12).toString() +"-" + Math.floor(Math.random()*29).toString();
getImage(randomDate).then(response => setRandomImage(response))
}

Then we need some new state const [randomImage, setRandomImage] = React.useState('')

And finally change the background image for the card:

<div className="card" style={{ backgroundImage: `url(${randomImage})` }} /></div>
<div style={{ display: 'flex', justifyContent: 'center' }}>
<button style={buttonStyles} onClick={handleRandomise}>Randomise</button>
</div>

Comment on lines +17 to +25
function validateEmail(value) {
let error;
if (!value) {
error = 'Required';
} else if (!/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i.test(value)) {
error = 'Invalid email address';
}
return error;
};

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pretty much there with this one.

Add an onblur handler to the email input and add the email validation error into the error box:

<input name="email" type="email" value={email} onChange={handleEmailChange} onBlur={validateEmail} />
<div style={{ color: 'red', margin: '10px 0' }}>{emailValidationError}</div>

Then change your validation function slightly:

function validateEmail(event) {
const value = event.target.value;
let error;
if (!value) {
error = 'Required';
} else if (!/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,6}$/i.test(value)) {
error = 'Invalid email address';
}
setEmailValidationError(error)
};

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@LiamBorner@BowlegsBill
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

challenge attempts - #1

Open
LiamBorner wants to merge 9 commits into
InfuseGroup:masterfrom
LiamBorner:master
Open

challenge attempts#1
LiamBorner wants to merge 9 commits into
InfuseGroup:masterfrom
LiamBorner:master

Conversation

@LiamBorner

Copy link
Copy Markdown

These are my attempts at completing the challenges

@BowlegsBillBowlegsBill left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added some comments

Comment threadapp/javascript/components/challenges/Login.tsx Outdated
Comment threadapp/javascript/components/challenges/Login.tsx Outdated
Comment threadapp/javascript/components/challenges/Login.tsx Outdated
Comment threadapp/javascript/components/challenges/Login.tsx Outdated
Comment threadapp/javascript/components/challenges/Login.tsx
Comment threadapp/views/static_pages/home.html.erb
Comment threadpackage.json
Comment on lines +13 to +24
"email-validator": "^2.0.4",
"formik": "^2.1.4",
"jquery": "^3.4.1",
"prop-types": "^15.7.2",
"react": "^16.12.0",
"react-dom": "^16.12.0",
"react-native-form-validator": "^0.3.2",
"react_ujs": "^2.6.1",
"ts-loader": "^6.2.1",
"turbolinks": "^5.2.0",
"typescript": "^3.7.5"
"typescript": "^3.7.5",
"yup": "^0.28.1"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess these were all previous attempts at validating the email?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

They were indeed

Comment on lines +76 to +78
<h3>1. Randomise the image when you click the button.</h3>
/* this can potentially be achieved by using the NASA api documentation to fetch
an image from their database each time */

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So basically NASA has 1 image per day so you need to create a random date and pass it into the getImage method and it will give you back their image for that day

Comment threadapp/javascript/components/challenges/Cards.tsx Outdated
Comment threadapp/javascript/components/challenges/Counter.tsx
@LiamBorner

Copy link
Copy Markdown
Author

Hi Bill,

If I've done this correctly, you should be able to see my amends based on your review that have been committed back to my master branch. I'm clicking 'Close and comment' so hopefully this submits those changes.

I have two outstanding issues that I'm stumped with and have tried many methods to solve them. It's frustrating as I was hoping to have them all resolved thanks to your guidance.

@BowlegsBillBowlegsBill left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for doing this mate, much appreciated. You should receive an email from me through Pinpoint shortly



function getImage(date: string) {
return fetch(`${baseUri}?api_key=${nasaApiKey}&date=${myDate}`)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You don't need to use myDate here since we are passing the date into the method.

Just needs to be return fetch('${baseUri}?api_key=${nasaApiKey}&date=${date}')

<button style={buttonStyles}>Randomise</button>
<div className="card" style={{ backgroundImage: `${baseUri}?api_key=${nasaApiKey}&date=${myDate}` }} /></div>
<div style={{ display: 'flex', justifyContent: 'center' }}>
<button style={buttonStyles} >Randomise</button>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So for the onClick add an onclick handler to the button;

<button style={buttonStyles} onClick={handleRandomise}>Randomise</button>

Then we also need to do something with the onClick so:

function handleRandomise() {
const randomDate = "2019-0"+Math.floor(Math.random()*12).toString() +"-" + Math.floor(Math.random()*29).toString();
getImage(randomDate).then(response => setRandomImage(response))
}

Then we need some new state const [randomImage, setRandomImage] = React.useState('')

And finally change the background image for the card:

<div className="card" style={{ backgroundImage: `url(${randomImage})` }} /></div>
<div style={{ display: 'flex', justifyContent: 'center' }}>
<button style={buttonStyles} onClick={handleRandomise}>Randomise</button>
</div>

Comment on lines +17 to +25
function validateEmail(value) {
let error;
if (!value) {
error = 'Required';
} else if (!/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i.test(value)) {
error = 'Invalid email address';
}
return error;
};

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pretty much there with this one.

Add an onblur handler to the email input and add the email validation error into the error box:

<input name="email" type="email" value={email} onChange={handleEmailChange} onBlur={validateEmail} />
<div style={{ color: 'red', margin: '10px 0' }}>{emailValidationError}</div>

Then change your validation function slightly:

function validateEmail(event) {
const value = event.target.value;
let error;
if (!value) {
error = 'Required';
} else if (!/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,6}$/i.test(value)) {
error = 'Invalid email address';
}
setEmailValidationError(error)
};

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@LiamBorner@BowlegsBill
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

challenge attempts - #1

Open
LiamBorner wants to merge 9 commits into
InfuseGroup:masterfrom
LiamBorner:master
Open

challenge attempts#1
LiamBorner wants to merge 9 commits into
InfuseGroup:masterfrom
LiamBorner:master

Conversation

@LiamBorner

Copy link
Copy Markdown

These are my attempts at completing the challenges

@BowlegsBillBowlegsBill left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added some comments

Comment threadapp/javascript/components/challenges/Login.tsx Outdated
Comment threadapp/javascript/components/challenges/Login.tsx Outdated
Comment threadapp/javascript/components/challenges/Login.tsx Outdated
Comment threadapp/javascript/components/challenges/Login.tsx Outdated
Comment threadapp/javascript/components/challenges/Login.tsx
Comment threadapp/views/static_pages/home.html.erb
Comment threadpackage.json
Comment on lines +13 to +24
"email-validator": "^2.0.4",
"formik": "^2.1.4",
"jquery": "^3.4.1",
"prop-types": "^15.7.2",
"react": "^16.12.0",
"react-dom": "^16.12.0",
"react-native-form-validator": "^0.3.2",
"react_ujs": "^2.6.1",
"ts-loader": "^6.2.1",
"turbolinks": "^5.2.0",
"typescript": "^3.7.5"
"typescript": "^3.7.5",
"yup": "^0.28.1"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess these were all previous attempts at validating the email?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

They were indeed

Comment on lines +76 to +78
<h3>1. Randomise the image when you click the button.</h3>
/* this can potentially be achieved by using the NASA api documentation to fetch
an image from their database each time */

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So basically NASA has 1 image per day so you need to create a random date and pass it into the getImage method and it will give you back their image for that day

Comment threadapp/javascript/components/challenges/Cards.tsx Outdated
Comment threadapp/javascript/components/challenges/Counter.tsx
@LiamBorner

Copy link
Copy Markdown
Author

Hi Bill,

If I've done this correctly, you should be able to see my amends based on your review that have been committed back to my master branch. I'm clicking 'Close and comment' so hopefully this submits those changes.

I have two outstanding issues that I'm stumped with and have tried many methods to solve them. It's frustrating as I was hoping to have them all resolved thanks to your guidance.

@BowlegsBillBowlegsBill left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for doing this mate, much appreciated. You should receive an email from me through Pinpoint shortly



function getImage(date: string) {
return fetch(`${baseUri}?api_key=${nasaApiKey}&date=${myDate}`)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You don't need to use myDate here since we are passing the date into the method.

Just needs to be return fetch('${baseUri}?api_key=${nasaApiKey}&date=${date}')

<button style={buttonStyles}>Randomise</button>
<div className="card" style={{ backgroundImage: `${baseUri}?api_key=${nasaApiKey}&date=${myDate}` }} /></div>
<div style={{ display: 'flex', justifyContent: 'center' }}>
<button style={buttonStyles} >Randomise</button>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So for the onClick add an onclick handler to the button;

<button style={buttonStyles} onClick={handleRandomise}>Randomise</button>

Then we also need to do something with the onClick so:

function handleRandomise() {
const randomDate = "2019-0"+Math.floor(Math.random()*12).toString() +"-" + Math.floor(Math.random()*29).toString();
getImage(randomDate).then(response => setRandomImage(response))
}

Then we need some new state const [randomImage, setRandomImage] = React.useState('')

And finally change the background image for the card:

<div className="card" style={{ backgroundImage: `url(${randomImage})` }} /></div>
<div style={{ display: 'flex', justifyContent: 'center' }}>
<button style={buttonStyles} onClick={handleRandomise}>Randomise</button>
</div>

Comment on lines +17 to +25
function validateEmail(value) {
let error;
if (!value) {
error = 'Required';
} else if (!/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i.test(value)) {
error = 'Invalid email address';
}
return error;
};

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pretty much there with this one.

Add an onblur handler to the email input and add the email validation error into the error box:

<input name="email" type="email" value={email} onChange={handleEmailChange} onBlur={validateEmail} />
<div style={{ color: 'red', margin: '10px 0' }}>{emailValidationError}</div>

Then change your validation function slightly:

function validateEmail(event) {
const value = event.target.value;
let error;
if (!value) {
error = 'Required';
} else if (!/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,6}$/i.test(value)) {
error = 'Invalid email address';
}
setEmailValidationError(error)
};

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@LiamBorner@BowlegsBill