Browse Source

begin work on gossip-grid

content-update
Clement Denis 4 years ago committed by Clément
parent
commit
b019660f55
  1. 37
      puppeteer/gossip-grid.js
  2. 41
      puppeteer/gossip-grid_test.js
  3. 6
      subjects/gossip-grid/README.md

37
puppeteer/gossip-grid.js

@ -1,4 +1,4 @@
import { gossips as archived } from './data.js' import { gossips } from './data.js'
const body = document.querySelector('body') const body = document.querySelector('body')
@ -12,14 +12,6 @@ const inputs = [
{ props: ['background'], min: 20, max: 75, value: 60 }, { props: ['background'], min: 20, max: 75, value: 60 },
] ]
let gossips = new Proxy(archived, {
set: (target, prop, value) => {
target[prop] = value
createGossip(value, true)
return true
},
})
export const grid = () => { export const grid = () => {
inputs.forEach((input) => createInput(input)) inputs.forEach((input) => createInput(input))
createAddGossip() createAddGossip()
@ -45,16 +37,17 @@ const createGossip = (g, isNew = false) => {
} }
const createAddGossip = () => { const createAddGossip = () => {
const addGossip = document.createElement('div') const addGossip = document.createElement('form')
addGossip.className = 'gossip' addGossip.className = 'gossip'
addGossip.id = 'add-gossip' addGossip.id = 'add-gossip'
addGossip.onsubmit = () => false
const newInput = document.createElement('textarea') const newInput = document.createElement('textarea')
newInput.autofocus = true newInput.autofocus = true
newInput.placeholder = 'Got a gossip to share ?' newInput.placeholder = 'Got a gossip to share ?'
newInput.addEventListener('keyup', (e) => addNewGossip(newInput, e)) newInput.addEventListener('keyup', (e) => addNewGossip(newInput, e))
const button = document.createElement('div') const button = document.createElement('button')
button.className = 'button' button.className = 'button'
button.textContent = 'Share gossip!' button.textContent = 'Share gossip!'
button.addEventListener('click', (e) => addNewGossip(newInput)) button.addEventListener('click', (e) => addNewGossip(newInput))
@ -64,13 +57,11 @@ const createAddGossip = () => {
} }
const addNewGossip = (input, event) => { const addNewGossip = (input, event) => {
const noValue = !input.value const noValue = !input.value.trim()
const notEnterKey = event && event.keyCode !== 13 const notEnterKey = event && event.keyCode !== 13
if (notEnterKey || noValue) { if (notEnterKey || noValue) return
input.focus() createGossip(input.value, true)
return gossips.push(input.value)
}
gossips[gossips.length] = input.value
input.value = '' input.value = ''
input.focus() input.focus()
} }
@ -97,16 +88,16 @@ const createInput = ({ props, min, max, value }) => {
} }
const customize = ({ target }, ...props) => { const customize = ({ target }, ...props) => {
const gossips = [...document.querySelectorAll('.gossip')] for (const card of [...document.querySelectorAll('.gossip')]) {
gossips.forEach((gossip) => { for (const prop of props) {
props.forEach((prop) => {
const updatedValue = const updatedValue =
(prop === 'lineHeight' && `${Number(target.value) * 1.5}px`) || (prop === 'lineHeight' && `${Number(target.value) * 1.5}px`) ||
(prop === 'background' && `hsl(280, 50%, ${target.value}%)`) || (prop === 'background' && `hsl(280, 50%, ${target.value}%)`) ||
`${target.value}px` `${target.value}px`
gossip.style[prop] = updatedValue card.style[prop] = updatedValue
}) }
}) }
const valueLabel = target.nextElementSibling const valueLabel = target.nextElementSibling
valueLabel.textContent = target.value valueLabel.textContent = target.value
} }

41
puppeteer/gossip-grid_test.js

@ -0,0 +1,41 @@
import { gossips } from './subjects/gossip-grid/data.js'
export const tests = []
tests.push(async ({ page, eq }) => {
// test that the grid is properly generated
const content = await page.$$eval('.gossip', nodes => nodes.map(n => n.textContent))
eq(content, ['Share gossip!', ...gossips])
})
tests.push(async ({ page, eq }) => {
// test that you can add a gossip
return new Promise(()=>{})
})
tests.push(async ({ page, eq }) => {
// test that you can change the width
return new Promise(()=>{})
})
tests.push(async ({ page, eq }) => {
// test that you can change the font-size
return new Promise(()=>{})
})
tests.push(async ({ page, eq }) => {
// test that you can change the background
return new Promise(()=>{})
})

6
subjects/gossip-grid/README.md

@ -4,9 +4,11 @@
Good information is the pillar of society, that's why you've decided to dedicate your time to reveal the powerful truth to the world and deliver essential and strong news: you're launching a gossip grid. Good information is the pillar of society, that's why you've decided to dedicate your time to reveal the powerful truth to the world and deliver essential and strong news: you're launching a gossip grid.
Create the function `grid` which displays all the `gossips`, provided in the data file below, as cards on a grid, and allows the user to: Create the function `grid` which displays all the `gossips`, provided in the data file below, as cards on a grid (in the same order).
They must be `div` with the `gossip` class.
The first `gossip` card must be a form with a `textarea` and a submit button that allows to add a new gossip to the list
- add a new gossip to the list
- customize the width, font size and background of each card with `range` inputs. - customize the width, font size and background of each card with `range` inputs.
### Notions ### Notions

Loading…
Cancel
Save