viewofmaxLengthWords=Inputs.text({label:"Max length in words"})
viewofmaxLengthCharacters=Inputs.text({label:"Max length in characters"})
viewofgoals=Inputs.textarea({
rows:20,
label:"Notes on what you need to write"
})
numWords=text==""?0:text.split(/\s+/gi).length
numCharacters=text.trim().length
wordsLeft={
leti=parseInt(maxLengthWords,10);
if(isNaN(i)){
returnnull;
}
returni;
}
charactersLeft={
leti=parseInt(maxLengthCharacters,10);
if(isNaN(i)){
returnnull;
}
returni;
}
wordsMessage={
if(wordsLeft===null){
return"";
}
returnwordsLeft-numWords;
}
charactersMessage={
if(charactersLeft===null){
return"";
}
returncharactersLeft-numCharacters;
}
Purpose-built for displays of data
Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.