diff --git a/src/App.jsx b/src/App.jsx index d40979e..c080983 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -9,6 +9,9 @@ import "./footer.css"; import "./passphrase.css"; import "./landingpage.css"; import {Toaster} from "react-hot-toast"; +import FingerspellComponent from "./components/Fingerspell.jsx"; +import SentencesComponent from "./components/SentencesSession.jsx"; +import NumbersSession from "./components/NumbersComponent.jsx"; function App() { const [view, setView] = useState(() => sessionStorage.getItem("asl-unlocked") ? "input" : "gate"); @@ -24,7 +27,17 @@ function App() { setCardColors(colors); setCategoryTitle(title); setCategoryDescription(description); - setView("session"); + + // Route UI Element based on category title. + if(title === "Finger Spelling") { + setView("fingerspell"); + } else if(title === "Numbers") { + setView("numbers"); + } else if(title === "Sentences") { + setView("sentences"); + } else { + setView("session"); + } } function handleBack() { @@ -42,12 +55,24 @@ function App() { return (
- {view === "input" ? ( - - ) : ( - - )} + {view === "input" && } + {view === "session" && } + {view === "fingerspell" && } + {view === "numbers" && } + {view === "sentences" && }
diff --git a/src/assets/fonts/GALLAUDET.ttf b/src/assets/fonts/GALLAUDET.ttf new file mode 100644 index 0000000..dba6a28 Binary files /dev/null and b/src/assets/fonts/GALLAUDET.ttf differ diff --git a/src/components/Fingerspell.jsx b/src/components/Fingerspell.jsx new file mode 100644 index 0000000..d8eadc3 --- /dev/null +++ b/src/components/Fingerspell.jsx @@ -0,0 +1,466 @@ +import styled from "styled-components"; +import {useEffect, useRef, useState} from "react"; +import toast from "react-hot-toast"; +import axios from "axios"; +import Tippy from "@tippyjs/react"; + +// Structure ───────────────────────────────────────────────────────────── +/* + + + +
+

Fingerspell

+ + Learn how to fingerspell + +
+
+ +
+ + {word[step]} + + {showHint && + {word[step]} + } +
+ + + + + + + +
    +
+
+
+
+ */ + + +// Styling ───────────────────────────────────────────────────────────── + +const FingerspellContainer = styled.div` + width: 100%; +`; + +const FingerspellHeader = styled.div` + display: flex; + flex-direction: row; + + .btn-back { + width: 100px; + + flex-shrink: 0; + align-self: flex-start; + background: none; + border: none; + padding: 0; + color: var(--text); + font-size: 15px; + cursor: pointer; + transition: color 0.2s; + z-index: 100; + + &:hover { + color: var(--text-h); + } + } + + h1 { + //border: 1px solid pink; + width: 100%; + margin-top: 10px; + justify-content: center; + align-items: center; + } + + .text-header { + width: 100%; + margin-left: -100px; + } +`; + +const FingerspellTitle = styled.h2` + margin-top: -20px; +`; + +const Fingerspell = styled.div` + //border: 1px solid blue; + display: flex; + justify-content: space-between; +`; + +const FingerspellNav = styled.nav` + //border: 1px solid yellow; + flex: 1; + width: 300px; + display: flex; + flex-direction: column; + + button { + width: 150px; + } +`; + +const FingerspellTermsList = styled.div` + flex: none; + width: 200px; + border: 1px solid pink; + max-height: 330px; + overflow-y: auto; + + ul { + list-style: none; + text-align: left; + } +`; + +/* + CSS calc() + Spaces around operators: You must include a space on both sides of the subtraction (-) operator. If you write calc(100px-2rem), it will be + treated as an invalid expression or a negative number. + Mixed Units: calc() is the only native CSS way to do this because rem is relative (based on the root font size, usually 16px) + and px is absolute. The browser calculates the final pixel value at runtime + + */ + +const FingerCharacter = styled.p` + flex: 1; + width: 300px; + height: ${props => props.showHint ? `calc(200px - 2rem)` : "200px"}; + background-color: beige; + font-family: "Gallaudet", cursive; + font-size: 20rem; + color: black; + //margin-top: 40px; + align-items: center; + padding-top: 130px; + border: 1px solid red; +`; + +const FingerspellHint = styled.p` + width: 300px; + border: 1px solid orange; + height: 2rem; +`; + +const ButtonNav = styled.div` + border: 1px solid green; +`; + +const FingerspellCheck = styled.div` + border: 1px solid orange; + width: 100%; + margin-top: auto; +`; + +function getSmallWordLength() { + const max = 5; + const min = 3; + return Math.floor(Math.random() * (max - min + 1)) + min; +} + +function getMediumWordLength() { + const max = 7; + const min = 4; + return Math.floor(Math.random() * (max - min + 1)) + min; +} + +function getLargeWordLength() { + const max = 10; + const min = 6; + return Math.floor(Math.random() * (max - min + 1)) + min; +} + +const DisplayScene = Object.freeze( + { + NORMAL: "NORMAL", + WORDS: "WORDS", + LETTERS: "LETTERS" + } +); + +export default function FingerspellComponent({onBack}) { + const [isActive, setIsActive] = useState(false); + const [stepCount, setStepCount] = useState(0); + const [step, setStep] = useState(0); + const [word, setWord] = useState(""); + const [wordList, setWordList] = useState([]); + + // Configuration + const [showHint, setShowHint] = useState(false); + const [showWord, setShowWord] = useState(false); + + // For sample words - what length do we want? Small, medium or large + const [sampleWordLength, setSampleWordLength] = useState(getSmallWordLength()); + const [sampleWordLengthSetting, setSampleWordLengthSetting] = useState(0); // 0 == small, 1 == medium, 2 == large + const [sceneMode, setSceneMode] = useState(DisplayScene.NORMAL); + + // Playback rate - slow, normal, fast + const [playbackRate, setPlaybackRate] = useState(1); + const [stepInterval, setStepInterval] = useState(1000); + + const [repeat, setRepeat] = useState(false); + + // Word list index + const [wordIndex, setWordIndex] = useState(0); + + // Test entry + const [wordEntry, setWordEntry] = useState(""); + const inputRef = useRef(); + + + function updateSampleWordLength() { + if (sampleWordLengthSetting < 2) { + setSampleWordLengthSetting(sampleWordLengthSetting + 1); + } else { + setSampleWordLengthSetting(0); + } + } + + function updatePlaybackSpeed() { + let newPlaybackRate = 0; + if (playbackRate < 2) { + newPlaybackRate = playbackRate + 1; + } + setPlaybackRate(newPlaybackRate); + switch (newPlaybackRate) { + case 0: + setStepInterval(1500); + break; + case 1: + setStepInterval(1000); + break; + default: + setStepInterval(700); + break; + } + } + + function loadWords() { + // load random words + // https://random-words-api.kushcreates.com/ + const words_to_fetch = 20; + const word_length = sampleWordLength; + const word_language = "language=en"; + const starts_with = "firstletter=a"; + + const randomWordsUrl = `https://random-words-api.kushcreates.com/api?words=${words_to_fetch}&${word_language}&length=${word_length}`; + axios.get(randomWordsUrl).then((response) => { + const wordData = []; + response.data.forEach(element => { + const entry = { + "term": element.word, + "code": "", + "type": "spell" + }; + wordData.push(entry); + }); + setWordList(wordData); + }); + + } + + // Data Effect Logic ───────────────────────────────────────────────────────────── + + useEffect(() => { + let interval = null; + if (isActive) { + if (step < stepCount) { + interval = setInterval(() => { + setStep((step) => step + 1); + }, stepInterval); + } else { + if (!repeat) { + clearInterval(interval); + setIsActive(false); + } + setStep(0); + } + } + + // Cleanup the interval on unmount or when isActive/seconds change + return () => clearInterval(interval); + }, [isActive, repeat, step, stepCount, stepInterval]); + + useEffect(() => { + setStepCount(word.length); + }, [word]); + + useEffect(() => { + loadWords(); + }, []); + + useEffect(() => { + if (wordList.length > 0) { + setWordIndex(0); + setWord(" " + wordList[0].term); + } + }, [wordList]); + + // Term Test Logic ───────────────────────────────────────────────────────────── + function checkEntry() { + if (wordEntry.toLowerCase() === word.slice(1).toLowerCase()) { + toast.success("Correct!"); + nextWord(); + inputRef.current.focus(); + } else { + toast.error("Wrong word! Try again."); + } + } + + function updateEntry(e) { + setWordEntry(e.target.value); + } + + const handleKeyDown = (event) => { + if (event.key === "Enter") { + checkEntry() + } + }; + + const onToggleRepeat = () => { + setRepeat(r => !r); + }; + + function nextWord() { + if (sceneMode === DisplayScene.NORMAL) { + const newIndex = wordIndex < wordList.length ? wordIndex + 1 : 0; + setWordIndex(newIndex); + setWord(" " + wordList[newIndex].term); + setWordEntry(""); + setIsActive(true); + } + } + + function onWordSize() { + // For sample words - what length do we want? Small, medium or large + let newLengthSetting = 0; + if (sampleWordLengthSetting < 2) { + newLengthSetting = sampleWordLengthSetting + 1; + } + setSampleWordLengthSetting(newLengthSetting); + switch(newLengthSetting) { + case 1: + setSampleWordLength(getMediumWordLength()); + break; + case 2: + setSampleWordLength(getLargeWordLength()); + break; + default: + setSampleWordLength(getSmallWordLength()); + } + loadWords(); + } + + function playbackLabel() { + const returnValue = { + text: "", + tip: "", + icon: "" + }; + switch (playbackRate) { + case 1: + returnValue.tip = "Normal - 1×"; + returnValue.text = "1×"; + returnValue.icon = "🚶🏻‍♀️‍➡️️"; + break; + case 0: + returnValue.tip = "Slow - ½×"; + returnValue.text = "½×"; + returnValue.icon = "🐢️"; + break; + default: + returnValue.tip = "Fast - 2×"; + returnValue.text = "2×"; + returnValue.icon = "🏃‍➡️"; + break; + } + return returnValue; + } + + + return ( + + + +
+

Fingerspell

+ + Learn how to fingerspell + +
+
+ +
+ + {word[step]} + + {showHint && + {word[step]} + } +
+ + + + + + + + + + + "}> + + + + + + + + + + + + + + + + +
+ + +
+ {showWord && word} +
+ +
+ +
    + {/*{wordList.map((word, index) => (*/} + {/*
  • {word.term}
  • */} + {/*))}*/} +
+
+
+
+ ); +}; diff --git a/src/components/NumbersComponent.jsx b/src/components/NumbersComponent.jsx new file mode 100644 index 0000000..b582955 --- /dev/null +++ b/src/components/NumbersComponent.jsx @@ -0,0 +1,305 @@ +import {useEffect, useRef, useState} from "react"; +import toast from "react-hot-toast"; +import Tippy from "@tippyjs/react"; +import {FlashcardPlayer} from "./FlashcardPlayer.jsx"; +import { + NumbersComponentContainer, + NumbersComponentHeader, + NumbersComponentBody, + NumbersComponentNav, + NumbersComponentTermsList, + NumbersComponentHint, + ButtonNav, + NumbersComponentCheck, +} from "./NumbersComponent.styles.js"; + +import number_terms from "../data/numbers.json" with {type: "json"}; + +export default function NumbersSession({onBack}) { + const [isActive, setIsActive] = useState(false); + const [word, setWord] = useState(""); + + // wordList acts as a playlist - a series of tracks to be played sequentially. + const [wordList, setWordList] = useState([]); + // Word list index + const [wordIndex, setWordIndex] = useState(0); + const [playbackUrl, setPlaybackUrl] = useState(""); + const selectRef = useRef(null); + + // Configuration + const [showHint, setShowHint] = useState(true); + const [showWord, setShowWord] = useState(true); + + // Test entry + const [wordEntry, setWordEntry] = useState(""); + const inputRef = useRef(); + + // Playback rate - slow, normal, fast + const [autoPlay, setAutoPlay] = useState(false); + const [showPlayerControls, setShowPlayerControls] = useState(false); + const [playing, setPlaying] = useState(false); + const [playbackRate, setPlaybackRate] = useState(1); + const [repeat, setRepeat] = useState(false); + + function setupCountFromZero() { + const terms = number_terms.map((term, i) => { + return {...term, ndx: i} + }) + console.log(terms); + setWordList(terms); + setWordIndex(0); + setRepeat(false); + setPlaybackUrl(number_terms[0].code); + setWord(number_terms[0].term); + setAutoPlay(true); + } + + + // Term Test Logic ───────────────────────────────────────────────────────────── + function checkEntry() { + if (wordEntry === word) { + toast.success("Correct!"); + nextWord(); + inputRef.current.focus(); + } else { + console.log(wordEntry, word); + toast.error("Wrong word! Try again."); + } + } + + function updateEntry(e) { + setWordEntry(e.target.value); + } + + const handleKeyDown = (event) => { + if (event.key === "Enter") { + checkEntry() + } + }; + + const onToggleRepeat = () => { + setRepeat(r => !r); + }; + + function onSelectTerm(e) { + console.log(e.target.value); + const newTermIndex = Number(e.target.value); + setPlaying(false); + setAutoPlay(false); + setIsActive(false); + setWord(wordList[newTermIndex].term) + setWordIndex(newTermIndex); + } + + function getRandomInt(min, max) { + return Math.floor(Math.random() * (max - min + 1)) + min; + } + function nextWord() { + const randNumber = getRandomInt(34, 100000); + // {"term": "1", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%201-roPWtHm3Udw.mp4"}, + // build playlist + const numberString = randNumber.toString(); + const newWordList = [] + for (let i = 0; i < numberString.length; i++) { + const term = number_terms.find((t) => t.term === numberString[i]); + console.log(term); + newWordList.push(term); + } + setWordList(newWordList); + const firstWord = newWordList[0] + setPlaybackUrl(firstWord.code); + setWord(firstWord.term); + setWordIndex(0); + setIsActive(true); + setAutoPlay(true); + setPlaying(true); + } + + function getPlaybackUrl() { + console.log("Get url"); + if (wordList.length > 0 && wordIndex > -1) { + const current = wordList[wordIndex]; + console.log(current.code); + return current.code; + } + } + + function onPlay() { + console.log("onPlay: ", isActive); + console.log("--wl: ", wordList.length); + console.log("--curr: ", wordIndex); + console.log("--word: ", word); + if (isActive) { + setIsActive(false); + setPlaying(false); + setAutoPlay(false); + } else { + setIsActive(true); + // setWordIndex(0); + // setAutoPlay(true); + setPlaying(true); + } + } + + function playbackLabel() { + const returnValue = { + text: "", + tip: "", + icon: "" + }; + switch (playbackRate) { + case 0.5: + returnValue.tip = "Slow - ½×"; + returnValue.text = "½×"; + returnValue.icon = "🐢️"; + break; + default: + returnValue.tip = "Normal - 1×"; + returnValue.text = "1×"; + returnValue.icon = "🚶🏻‍♀️‍➡️️"; + } + return returnValue; + } + + function playbackError(error) { + console.error(error); + console.log("Playback error", error.nativeEvent.target.error); + console.log("Source: ", error.nativeEvent.target.src) + toast.error("Playback error"); + } + + const PLAYBACK_STATE_START = 1 + const PLAYBACK_STATE_END = 2 + const PLAYBACK_STATE_PAUSE = 3 + + function playingStateChanged(stateChange) { + switch(stateChange) { + case PLAYBACK_STATE_START: + console.log("Playback start"); + // setPlaying(true); + break; + case PLAYBACK_STATE_END: + console.log("Playback end: ", repeat); + + if (wordIndex + 1 < wordList.length) { + setWordIndex(wordIndex + 1); + setWord(wordList[wordIndex+1].term); + } else { + // stop playback + setPlaying(false); + setIsActive(false); + } + break; + case PLAYBACK_STATE_PAUSE: + console.log("Playback paused"); + // setPlaying(false); + break; + default: + console.error("Unknown Playback state change: ", stateChange); + } + } + + useEffect(() => { + setPlaybackUrl(getPlaybackUrl()); + }, [playbackUrl, wordIndex]); + + + return ( + + + +
+

NumbersComponent

+ Key Tips for 1-100 ASL Numbers +
    +
  • 1-5: Palm faces in towards the signer.
  • +
  • 6-9: Palm faces out.
  • +
  • 11-15: Flicking motions.
  • +
  • 20s: Unique handshapes, generally 20-29 start with a "G" or "L" shape base depending on the number.
  • +
  • Multiples (22, 33, etc.): Involve a rocking motion.
  • +
  • 67-99: Use "rocking numbers" technique
  • +
+
+
+ +
+ playingStateChanged(PLAYBACK_STATE_START)} + onPause={() => playingStateChanged(PLAYBACK_STATE_PAUSE)} + onEnded={() => playingStateChanged(PLAYBACK_STATE_END)} + onError={playbackError} + /> + {showHint && + {word} + } +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ {showWord && word} +
+ +
+ + + +
+
+ ); +}; diff --git a/src/components/NumbersComponent.styles.js b/src/components/NumbersComponent.styles.js new file mode 100644 index 0000000..7c774c5 --- /dev/null +++ b/src/components/NumbersComponent.styles.js @@ -0,0 +1,111 @@ +import styled from "styled-components"; + +export const NumbersComponentContainer = styled.div` + width: 100%; +`; + +export const NumbersComponentHeader = styled.div` + display: flex; + flex-direction: row; + + .btn-back { + width: 100px; + + flex-shrink: 0; + align-self: flex-start; + background: none; + border: none; + padding: 0; + color: var(--text); + font-size: 15px; + cursor: pointer; + transition: color 0.2s; + z-index: 100; + + &:hover { + color: var(--text-h); + } + } + + h1 { + //border: 1px solid pink; + width: 100%; + margin-top: 10px; + justify-content: center; + align-items: center; + } + + .text-header { + width: 100%; + margin-left: -100px; + } + + ul { + display: flex; + list-style: none; + gap: 15px; + padding: 0; + text-align: left; + } + + li { + border-right: 1px solid grey; + font-size: small; + line-height: 15px; + } + + li:last-child { + border-right: none; + } +`; + +export const NumbersComponentBody = styled.div` + //border: 1px solid blue; + display: flex; + justify-content: space-between; + + .flashcard-video { + max-width: 400px; + } +`; + +export const NumbersComponentNav = styled.nav` + //border: 1px solid yellow; + flex: 1; + width: 300px; + display: flex; + flex-direction: column; + + button { + width: 150px; + } +`; + +export const NumbersComponentTermsList = styled.div` + flex: none; + width: 200px; + border: 1px solid pink; + max-height: 330px; + overflow-y: auto; + + ul { + list-style: none; + text-align: left; + } +`; + +export const NumbersComponentHint = styled.p` + width: 400px; + border: 1px solid orange; + height: 2rem; +`; + +export const ButtonNav = styled.div` + border: 1px solid green; +`; + +export const NumbersComponentCheck = styled.div` + border: 1px solid orange; + width: 100%; + margin-top: auto; +`; \ No newline at end of file diff --git a/src/components/SentencesSession.jsx b/src/components/SentencesSession.jsx new file mode 100644 index 0000000..d68c597 --- /dev/null +++ b/src/components/SentencesSession.jsx @@ -0,0 +1,371 @@ +import styled from "styled-components"; +import {useEffect, useState} from "react"; +import Tippy from "@tippyjs/react"; +import ReactPlayer from "react-player"; +import toast from "react-hot-toast"; + + +// Styling ───────────────────────────────────────────────────────────── + + +const SentencesContainer = styled.div` + width: 100%; +`; + +const SentencesHeader = styled.div` + display: flex; + flex-direction: row; + + .btn-back { + width: 100px; + + flex-shrink: 0; + align-self: flex-start; + background: none; + border: none; + padding: 0; + color: var(--text); + font-size: 15px; + cursor: pointer; + transition: color 0.2s; + z-index: 100; + + &:hover { + color: var(--text-h); + } + } + + h1 { + //border: 1px solid pink; + width: 100%; + + margin-top: 10px; + justify-content: center; + align-items: center; + } + + .text-header { + width: 100%; + margin-left: -100px; + } +`; + +const SentencesTitle = styled.h2` + margin-top: -20px; +`; + +const Sentences = styled.div` + border: 1px solid blue; + display: flex; + justify-content: space-between; +`; + +const SentencesNav = styled.nav` + //border: 1px solid yellow; + flex: 1; + width: 300px; + display: flex; + flex-direction: column; + + button { + width: 150px; + } +`; + +const SentencesTermsList = styled.div` + flex: none; + width: 200px; + border: 1px solid pink; + max-height: 330px; + overflow-y: auto; + + ul { + list-style: none; + text-align: left; + } +`; + +/* + CSS calc() + Spaces around operators: You must include a space on both sides of the subtraction (-) operator. If you write calc(100px-2rem), it will be + treated as an invalid expression or a negative number. + Mixed Units: calc() is the only native CSS way to do this because rem is relative (based on the root font size, usually 16px) + and px is absolute. The browser calculates the final pixel value at runtime + + */ + +const FingerCharacter = styled.p` + flex: 1; + width: 300px; + height: ${props => props.showHint ? `calc(200px - 2rem)` : "200px"}; + background-color: beige; + font-family: "Gallaudet", cursive; + font-size: 20rem; + color: black; + //margin-top: 40px; + align-items: center; + padding-top: 130px; + border: 1px solid red; +`; + +const PlayerContainer = styled.div` + flex: 1; + width: 300px; + border: 1px solid white; +`; + +const SentencesHint = styled.p` + width: 300px; + border: 1px solid orange; + height: 2rem; +`; + +const ButtonNav = styled.div` + border: 1px solid green; +`; + +const SentencesCheck = styled.div` + border: 1px solid orange; + width: 100%; + margin-top: auto; +`; + +export default function SentencesComponent({onBack, terms}) { + // terms: list[term: "", codes: []] + const [isActive, setIsActive] = useState(false); + + // number of 'words' in current phrase + const [stepCount, setStepCount] = useState(0); + + // current 'workd' in current phrase + const [step, setStep] = useState(0); + + // terms index + const [phraseIndex, setPhraseIndex] = useState(0); + const [phrase, setPhrase] = useState({}); // current phrase + + // Configuration + const [showHint, setShowHint] = useState(false); + const [showWord, setShowWord] = useState(false); + + // Playback rate - slow, normal, fast + const [playbackRate, setPlaybackRate] = useState(1.0); + + const [repeat, setRepeat] = useState(false); + const [playing, setPlaying] = useState(false); + const [url, setUrl] = useState(""); + const [autoPlay, setAutoPlay] = useState(true); + const [showPlayerControls, setShowPlayerControls] = useState(true); + + const PLAYBACK_STATE_START = 1 + const PLAYBACK_STATE_END = 2 + const PLAYBACK_STATE_PAUSE = 3 + + function playingStateChanged(stateChange) { + switch(stateChange) { + case PLAYBACK_STATE_START: + console.log("Playback start"); + setPlaying(true); + break; + case PLAYBACK_STATE_END: + console.log("Playback end: ", repeat); + if (step < stepCount) { + setStep(step+1); + setUrl(phrase.codes[step+1]) + } else { + setPlaying(false); + } + break; + case PLAYBACK_STATE_PAUSE: + console.log("Playback paused"); + setPlaying(false); + setIsActive(false); + break; + default: + console.error("Unknown Playback state change: ", stateChange); + } + } + + function setCurrentTerm(index) { + setPhraseIndex(index); + setPhrase(terms[index]); + console.log(terms[index]); + setStepCount(terms[index].codes.length); + } + + function playbackError(error) { + console.error(error); + console.log("Playback error", error.nativeEvent.target.error); + console.log("Source: ", error.nativeEvent.target.src) + toast.error("Playback error"); + } + + function updatePlaybackSpeed() { + switch (playbackRate) { + case .5: + setPlaybackRate(1.0); + break; + case 1: + setPlaybackRate(2.0); + break; + default: + setPlaybackRate(.5); + break; + } + } + + // Data Effect Logic ───────────────────────────────────────────────────────────── + + // useEffect(() => { + // console.log("Phrase: ", phrase); + // if (phrase.hasOwnProperty('codes')) { + // setStepCount(phrase.codes.length); + // setPlaying(true); + // setUrl(phrase.codes[0]); + // } + // }, [phrase]); + // + // useEffect(() => { + // if (terms.length > 0) { + // console.log(terms); + // setPhraseIndex(0); + // setPhrase(terms[0]); + // } + // }, [terms]); + + + const onToggleRepeat = () => { + setRepeat(r => !r); + }; + + function nextWord() { + console.log("PhraseIndex: ", phraseIndex); + const newIndex = phraseIndex + 1 < terms.length ? phraseIndex + 1 : 0; + setCurrentTerm(newIndex); + // setIsActive(true); + } + + function playbackLabel() { + const returnValue = { + text: "", + tip: "", + icon: "" + }; + switch (playbackRate) { + case 1: + returnValue.tip = "Normal - 1×"; + returnValue.text = "1×"; + returnValue.icon = "🚶🏻‍♀️‍➡️️"; + break; + case 0.5: + returnValue.tip = "Slow - ½×"; + returnValue.text = "½×"; + returnValue.icon = "🐢️"; + break; + default: + returnValue.tip = "Fast - 2×"; + returnValue.text = "2×"; + returnValue.icon = "🏃‍➡️"; + break; + } + return returnValue; + } + + function onSetActive() { + if (!isActive) { // Transition from not active to active + setStep(0); + setUrl(phrase.codes[0]) + setPlaying(true); + } else { + setPlaying(false); + } + setIsActive(!isActive); + } + + useEffect(() => { + console.log("Playback start: ", terms); + if(terms.length > 0) { + console.log(terms.length); + setCurrentTerm(0); + } + }, [terms]) + + // Render ───────────────────────────────────────────────────────────── + + return ( + + + +
+

Sentences

+
+
+ + + playingStateChanged(PLAYBACK_STATE_START)} + onPause={() => playingStateChanged(PLAYBACK_STATE_PAUSE)} + onEnded={() => playingStateChanged(PLAYBACK_STATE_END)} + onError={playbackError} + config={{ + file: { + attributes: { + playsInline: true, + }, + }, + }} + /> + + + + + + + + + + + "}> + + + + + + + + + + + {showWord && phrase.term} + + + + +
    + {terms.map((word, index) => ( +
  • {word.term}
  • + ))} +
+
+
+
+ ); +}; diff --git a/src/components/TermInput.jsx b/src/components/TermInput.jsx index cf32900..e544249 100644 --- a/src/components/TermInput.jsx +++ b/src/components/TermInput.jsx @@ -1,26 +1,38 @@ import {useState, useEffect} from "react"; import Tippy from "@tippyjs/react"; import "tippy.js/dist/tippy.css"; +import axios from "axios"; +import toast from "react-hot-toast"; +// Import all term files import terms from "../data/terms.json" with {type: "json"}; import other_terms from "../data/terms2.json" with {type: "json"}; import questions from "../data/questions.json" with {type: "json"}; import verbs from "../data/verbs.json" with {type: "json"}; -import date_time_terms from "../data/calendar-terms.json"; -import color_terms from "../data/colors.json"; -import faire_terms from "../data/faire.json"; +import date_time_terms from "../data/calendar-terms.json" with {type: "json"}; +import color_terms from "../data/colors.json" with {type: "json"}; +import faire_terms from "../data/faire.json" with {type: "json"}; +import countries from "../data/countries.json" with {type: "json"}; +import food_signs from "../data/food.json" with {type: "json"}; import asl_2_1_terms from "../data/asl_2_1_terms.json" with {type: "json"}; import asl_2_2_terms from "../data/asl_2_2_terms.json" with {type: "json"}; +import asl_2_3_terms from "../data/asl_2_3_terms.json" with {type: "json"}; +// import asl_2_4_terms from "../data/asl_2_4_terms.json" with {type: "json"}; +// import asl_2_5_terms from "../data/asl_2_5_terms.json" with {type: "json"}; +// import asl_2_6_terms from "../data/asl_2_6_terms.json" with {type: "json"}; -// import sentences from "../data/sentences1.json" with {type: "json"}; +import sentences from "../data/sentences-multi.json" with {type: "json"}; -import axios from "axios"; -import toast from "react-hot-toast"; +// Config content based on environment variables const debugLayouts = import.meta.env.VITE_DEBUGGING === 1; +console.log("debugLayouts", debugLayouts); +const showFingerspell = import.meta.env.VITE_SHOW_FINGERSPELL === "true"; +console.log("showFingerspell", showFingerspell); +const showNumbers = import.meta.env.VITE_SHOW_NUMBERS === "true"; +console.log("showNumbers", showNumbers); -const DEVELOPMENT = false; - +// Setup our display categories const CATEGORIES = [ {icon: "📚", title: "ASL Level I & II Class Terms - Comprehensive", description: "Core vocabulary from ASL Level I and II coursework.", terms: terms}, {icon: "❓", title: "Questions", description: "Essential question words and phrases used in ASL conversation.", terms: questions}, @@ -29,22 +41,27 @@ const CATEGORIES = [ {icon: "⚔️", title: "Renaissance Faire Terms", description: "Specialized vocabulary for Renaissance Faire settings.", terms: faire_terms}, {icon: "📆", title: "Calendar / Date & Time", description: "Months, Days, Time, etc.", terms: date_time_terms}, {icon: "🎨", title: "Colors", description: "Various Colors", terms: color_terms}, + {icon: "🍔", title: "Food", description: "Country Names", terms: food_signs}, {icon: "1️⃣", title: "ASL 2 - Week 1", description: "Terms learned in week 1 of ASL 2 course.", terms: asl_2_1_terms}, {icon: "2️⃣", title: "ASL 2 - Week 2", description: "Terms learned in week 2 of ASL 2 course.", terms: asl_2_2_terms}, - // {icon: "📝", title: "Sentences", description: "Phrases", terms:sentences} - // {icon: "3️⃣", title: "ASL 2 - Week 1", description: "Terms learned in week 1 of ASL 2 course.", terms: terms}, - // {icon: "4️⃣", title: "ASL 2 - Week 1", description: "Terms learned in week 1 of ASL 2 course.", terms: terms}, - // {icon: "5️⃣", title: "ASL 2 - Week 1", description: "Terms learned in week 1 of ASL 2 course.", terms: terms}, - // {icon: "6️⃣", title: "ASL 2 - Week 1", description: "Terms learned in week 1 of ASL 2 course.", terms: terms}, + {icon: "3️⃣", title: "ASL 2 - Week 3", description: "Terms learned in week 3 of ASL 2 course.", terms: asl_2_3_terms}, + {icon: "📝", title: "Sentences", description: "Phrases", terms: sentences}, + {icon: "🌎", title: "Countries", description: "Country Names", terms: countries}, + // {icon: "4️⃣", title: "ASL 2 - Week 4", description: "Terms learned in week 4 of ASL 2 course.", terms: asl_2_4_terms}, + // {icon: "5️⃣", title: "ASL 2 - Week 5", description: "Terms learned in week 5 of ASL 2 course.", terms: asl_2_5_terms}, + // {icon: "6️⃣", title: "ASL 2 - Week 6", description: "Terms learned in week 6 of ASL 2 course.", terms: asl_2_6_terms}, ]; -if (DEVELOPMENT) { +if(showFingerspell) { CATEGORIES.splice(0, 0, { icon: "🖐️", title: "Finger Spelling", description: "Practice spelling words letter by letter using ASL handshapes.", terms: terms }); +} + +if (showNumbers) { CATEGORIES.splice(0, 0, { icon: "🔢", title: "Numbers", @@ -57,68 +74,53 @@ const webResources = [ {url: "https://www.signasl.org/", description: "Sign ASL - American Sign Language Dictionary", type: ""}, {url: "https://www.handspeak.com/", description: "Hand Speak", type: ""}, {url: "https://www.lifeprint.com/", description: "ASL University", type: ""}, + {url: "https://www.signschool.com/", description: "Sign School", type: ""}, {url: "https://www.startasl.com/asl-dictionary/", description: "Free dictionary on Paid site with Phrases.", type: ""}, {url: "https://asl.ms/", description: "ASL Finger Spell Comprehension Test", type: ""}, - {url: "https://www.signingsavvy.com/", description: "Sign Savvy", type: ""}, + {url: "https://www.signingsavvy.com/tools", description: "Sign Savvy", type: ""}, {url: "https://en.wikipedia.org/wiki/American_Sign_Language", description: "Wikipedia", type: ""}, ]; function useWindowDimensions() { - const [dimensions, setDimensions] = useState({ - width: window.innerWidth, - height: window.innerHeight, - }); - - useEffect(() => { - const handleResize = () => setDimensions({ - width: window.innerWidth, - height: window.innerHeight, + const [dimensions, setDimensions] = useState({ + width: window.innerWidth, + height: window.innerHeight, }); - window.addEventListener('resize', handleResize); - return () => window.removeEventListener('resize', handleResize); - }, []); - return dimensions; + useEffect(() => { + const handleResize = () => setDimensions({ + width: window.innerWidth, + height: window.innerHeight, + }); + window.addEventListener("resize", handleResize); + return () => window.removeEventListener("resize", handleResize); + }, []); + + return dimensions; } export function TermInput({onStart}) { const [error, setError] = useState(""); - const [wordlist, setWordlist] = useState([]); const [numberList, setNumberList] = useState([]); const { height, width } = useWindowDimensions(); useEffect(() => { - if (DEVELOPMENT) { - // load random words - const randomWordsUrl = "https://random-word-api.herokuapp.com/word?number=45"; - axios.get(randomWordsUrl).then((response) => { - const wordData = []; - response.data.forEach(element => { - const entry = { - "term": element, - "code": "", - "type": "spell" - }; - wordData.push(entry); - }); - setWordlist(wordData); - }); - - const randomNumbersUrl = "https://api.codetabs.com/v1/random/integer?min=1&max=9999×=45"; - axios.get(randomNumbersUrl).then((response) => { - const numberData = []; - response.data.data.forEach(element => { - const entry = { - "term": element.toString(), - "code": "" - }; - numberData.push(entry); - }); - setNumberList(numberData); - }); - } + // if (showNumbers) { + // const randomNumbersUrl = "https://api.codetabs.com/v1/random/integer?min=1&max=9999×=45"; + // axios.get(randomNumbersUrl).then((response) => { + // const numberData = []; + // response.data.data.forEach(element => { + // const entry = { + // "term": element.toString(), + // "code": "" + // }; + // numberData.push(entry); + // }); + // setNumberList(numberData); + // }); + // } const displayString = `${width} x ${height}`; console.log(displayString); debugLayouts && toast(displayString, { @@ -130,19 +132,13 @@ export function TermInput({onStart}) { }, [height, width]); useEffect(() => { - if (DEVELOPMENT) { + if(showNumbers) { CATEGORIES.find((category) => category.title === "Numbers").terms = numberList; - CATEGORIES.find((category) => category.title === "Finger Spelling").terms = wordlist; } - }, [wordlist, numberList]); + }, [numberList]); function handleStart(category) { const terms = category.terms; - if (terms.length === 0) { - setError("Please enter at least one term before starting."); - return; - } - setError(""); onStart(terms, category.title, category.description); } return ( diff --git a/src/data/asl_2_3_terms.json b/src/data/asl_2_3_terms.json new file mode 100644 index 0000000..e87cb31 --- /dev/null +++ b/src/data/asl_2_3_terms.json @@ -0,0 +1,26 @@ +[ + {"term": "Really? (are you sure?)", "code": "https://media.signbsl.com/videos/asl/youtube/mp4/xBiqpivwL3g.mp4"}, + {"term": "Confused", "code": "https://media.signbsl.com/videos/asl/youtube/mp4/VJvLrvWCgHU.mp4"}, + {"term": "Doubt", "code": "https://media.signbsl.com/videos/asl/youtube/mp4/rJL_9qyE6xw.mp4"}, + {"term": "Fake", "code": "https://media.signbsl.com/videos/asl/youtube/mp4/ogNUNChfJE4.mp4"}, + {"term": "False / Not True", "code": "https://media.signbsl.com/videos/asl/mariekatzenbachschool/mp4/false.mp4"}, + {"term": "True", "code": "https://media.signbsl.com/videos/asl/youtube/mp4/wBZSWnlg3-g.mp4"}, + {"term": "Lie", "code": "https://media.signbsl.com/videos/asl/aslsearch/mp4/lie2.mp4"}, + {"term": "Trouble", "code": "https://media.signbsl.com/videos/asl/youtube/mp4/aTDC1kgRTGw.mp4"}, + {"term": "Get out of Trouble", "code": "", "fix": true}, + {"term": "Distracting", "code": "https://media.signbsl.com/videos/asl/youtube/mp4/4zOdie2Uh-0.mp4"}, + {"term": "Restless", "code": "https://player.vimeo.com/external/392125717.sd.mp4?s=8e01570e977cb00008d9352b30967df0b44bc98f&profile_id=164"}, + {"term": "Become", "code": "https://media.signbsl.com/videos/asl/youtube/mp4/4TPPOZK2IHU.mp4"}, + {"term": "Hamburger", "code": "https://media.signbsl.com/videos/asl/aslsignbank/mp4/HAMBURGER-1844.mp4"}, + {"term": "Home", "code": "https://media.signbsl.com/videos/asl/startasl/mp4/home.mp4"}, + {"term": "Day", "code": "https://media.signbsl.com/videos/asl/aslsignbank/mp4/DAY-102.mp4"}, + {"term": "Now + Day == Today", "code": "https://media.signbsl.com/videos/asl/tsdvideo/mp4/429.mp4"}, + {"term": "Today (shorter)", "code": "https://media.signbsl.com/videos/asl/startasl/mp4/today.mp4"}, + {"term": "Now", "code": "https://media.signbsl.com/videos/asl/aslsearch/mp4/now.mp4"}, + {"term": "My Fault", "code": "https://player.vimeo.com/external/392125010.sd.mp4?s=91aa0687b4f1075418fcb58b0d21d8d3dfbeeac3&profile_id=164"}, + {"term": "Your Fault", "code": "https://media.signbsl.com/videos/asl/aslsearch/mp4/your-fault.mp4"}, + {"term": "Birth", "code": "https://media.signbsl.com/videos/asl/youtube/mp4/433igLZMigk.mp4"}, + {"term": "Birthday", "code": "https://media.signbsl.com/videos/asl/aslsignbank/mp4/BIRTHDAY-CANDLES-2113.mp4"}, + {"term": "How Person Question", "code": "https://media.signbsl.com/videos/asl/startasl/mp4/how.mp4"}, + {"term": "How Thing Question", "code": "https://media.signbsl.com/videos/asl/startasl/mp4/how2.mp4"} +] diff --git a/src/data/colors.json b/src/data/colors.json index 95f6623..25c3c4e 100644 --- a/src/data/colors.json +++ b/src/data/colors.json @@ -11,7 +11,7 @@ {"term": "Pink", "code": ""}, {"term": "Purple", "code": ""}, {"term": "Red", "code": ""}, - {"term": "Silver", "code":"https://media.signbsl.com/videos/asl/youtube/mp4/9fWuTtBHMGY.mp4"}, + {"term": "Silver", "code": "https://media.signbsl.com/videos/asl/youtube/mp4/9fWuTtBHMGY.mp4"}, {"term": "Tan", "code": "https://media.signbsl.com/videos/asl/youtube/mp4/LArybO-sRVE.mp4"}, {"term": "Turquoise", "code": "https://player.vimeo.com/external/392536451.sd.mp4?s=f74e8841764e2f1d06a4d314d0c6708fc090f519&profile_id=164"}, {"term": "White", "code": ""}, diff --git a/src/data/countries.json b/src/data/countries.json new file mode 100644 index 0000000..937a63a --- /dev/null +++ b/src/data/countries.json @@ -0,0 +1,20 @@ +[ + {"term": "Country", "code": "https://www.youtube.com/watch?v=4iJ1t0DklFY"}, + {"term": "Africa", "code": "https://www.youtube.com/watch?v=ZyH7kuEa18Q"}, + {"term": "Australia", "code": "https://www.youtube.com/watch?v=Qkec7A7_o8c"}, + {"term": "Canada", "code": "https://www.youtube.com/watch?v=6wD5KHuM4xE"}, + {"term": "China", "code": "https://www.youtube.com/watch?v=yLX_qaQY6B8"}, + {"term": "England", "code": "https://www.youtube.com/watch?v=_Q0GxbRQnKQ"}, + {"term": "Europe", "code": "https://www.youtube.com/watch?v=gs57N42wVK0"}, + {"term": "France", "code": "https://www.youtube.com/watch?v=mhxJADfOYRU"}, + {"term": "Germany", "code": "https://www.youtube.com/watch?v=pn2NIz6Nw_A"}, + {"term": "India", "code": "https://www.youtube.com/watch?v=kw4mnCKHY7I"}, + {"term": "Iran", "code": "https://www.youtube.com/watch?v=lWgoRSVEz9s"}, + {"term": "Iraq", "code": "https://www.youtube.com/watch?v=9I8NhjSBQuY"}, + {"term": "Ireland", "code": "https://www.youtube.com/watch?v=D0F6keeYsNg"}, + {"term": "Mexico", "code": "https://www.youtube.com/watch?v=9hDYv623eyM"}, + {"term": "Russia", "code": "https://www.youtube.com/watch?v=YSAX7AP-JW4"}, + {"term": "UK", "code": "https://www.youtube.com/watch?v=Wq7h19-eSV0"}, + {"term": "USA", "code": "https://www.youtube.com/watch?v=VG1ccC2LJXM"} +] + diff --git a/src/data/faire.json b/src/data/faire.json index 1f6d6bc..b24ffd2 100644 --- a/src/data/faire.json +++ b/src/data/faire.json @@ -1,32 +1,183 @@ [ - {"term": "Bottle", "code": "https://media.signbsl.com/videos/asl/aslsignbank/mp4/BOTTLE-47.mp4"}, - {"term": "Camper", "code": "https://media.signbsl.com/videos/asl/aslsearch/mp4/camper.mp4"}, - {"term": "Camping", "code": "https://media.signbsl.com/videos/asl/mariekatzenbachschool/mp4/camping.mp4"}, - {"term": "Dress", "code": "https://media.signbsl.com/videos/asl/youtube/mp4/4bH5_C1XJTE.mp4"}, - {"term": "Fairy", "code": "https://media.signbsl.com/videos/asl/youtube/mp4/npbm43CeWqM.mp4"}, - {"term": "First Aid", "code": "https://player.vimeo.com/external/392127258.sd.mp4?s=b5f2cc211a4a27935975227c922dc86d614d2b7b&profile_id=164"}, - {"term": "Horse", "code": "https://media.signbsl.com/videos/asl/startasl/mp4/horse.mp4"}, - {"term": "Joust (Clash)", "code": "https://www.lifeprint.com/asl101/videos/clash_flash.mp4"}, - {"term": "King", "code": ""}, - {"term": "Knife", "code": "https://media.signbsl.com/videos/asl/aslsignbank/mp4/KNIFE-167.mp4"}, - {"term": "Knight", "code": "https://www.youtube.com/watch?v=XeQ1TwCKy_U"}, - {"term": "Park", "code": "https://media.signbsl.com/videos/asl/youtube/mp4/OhugS4ENgkg.mp4"}, - {"term": "Parking lot", "code": "https://media.signbsl.com/videos/asl/youtube/mp4/oWm64Do5zW0.mp4"}, - {"term": "Pickle (also Pineapple)", "code": "https://media.signbsl.com/videos/asl/aslsignbank/mp4/PICKLE-2008.mp4"}, - {"term": "Prince", "code": "https://media.signbsl.com/videos/asl/aslsearch/mp4/prince.mp4"}, - {"term": "Princess", "code": "https://media.signbsl.com/videos/asl/aslsearch/mp4/princess.mp4"}, - {"term": "Queen", "code": ""}, - {"term": "Sword", "code": "https://media.signbsl.com/videos/asl/aslsearch/mp4/sword.mp4"}, - {"term": "Welcome", "code": "https://media.signbsl.com/videos/asl/youtube/mp4/tQBaI8oi6tw.mp4"}, - {"term": "Parents", "code": "https://media.signbsl.com/videos/asl/aslsignbank/mp4/PARENTS-696.mp4"}, - {"term": "Do you need help?", "code": "https://www.youtube.com/embed/HDwqcA11tx4?rel=0"}, - {"term": "Do you understand?", "code": "https://www.youtube.com/embed/plJHFy1RcMI?rel=0"}, - {"term": "Do you want to play a game?", "code": "https://www.youtube.com/embed/aRxUSAA_k2w?rel=0"}, - {"term": "How are you?", "code": "https://www.youtube.com/embed/JPtdvzvpWMQ?rel=0"}, - {"term": "How did you get here?", "code": "https://www.youtube.com/embed/8Gl6aTI1zAQ?rel=0"}, - {"term": "How many siblings do you have?", "code": "https://www.youtube.com/embed/gPjmZURJgWg?rel=0"}, - {"term": "How much does it cost?", "code": "https://www.youtube.com/embed/wPwZpfA397c?rel=0"}, - {"term": "How old are you?", "code": "https://www.youtube.com/embed/yQD5HyEyWkI?rel=0"}, - {"term": "What is your phone number", "code": "https://media.signbsl.com/videos/asl/startasl/mp4/what-is-your-phone-number.mp4"} + { + "term": "Bottle", + "code": "https://media.signbsl.com/videos/asl/aslsignbank/mp4/BOTTLE-47.mp4" + }, + { + "term": "Camper", + "code": "https://media.signbsl.com/videos/asl/aslsearch/mp4/camper.mp4" + }, + { + "term": "Camping", + "code": "https://media.signbsl.com/videos/asl/mariekatzenbachschool/mp4/camping.mp4" + }, + { + "term": "Dress", + "code": "https://media.signbsl.com/videos/asl/youtube/mp4/4bH5_C1XJTE.mp4" + }, + { + "term": "Fairy", + "code": "https://media.signbsl.com/videos/asl/youtube/mp4/npbm43CeWqM.mp4" + }, + { + "term": "First Aid", + "code": "https://player.vimeo.com/external/392127258.sd.mp4?s=b5f2cc211a4a27935975227c922dc86d614d2b7b&profile_id=164" + }, + { + "term": "Horse", + "code": "https://media.signbsl.com/videos/asl/startasl/mp4/horse.mp4" + }, + { + "term": "Joust (Clash)", + "code": "https://www.lifeprint.com/asl101/videos/clash_flash.mp4" + }, + { + "term": "King", + "code": "" + }, + { + "term": "Knife", + "code": "https://media.signbsl.com/videos/asl/aslsignbank/mp4/KNIFE-167.mp4" + }, + { + "term": "Knight", + "code": "https://www.youtube.com/watch?v=XeQ1TwCKy_U" + }, + { + "term": "Park", + "code": "https://media.signbsl.com/videos/asl/youtube/mp4/OhugS4ENgkg.mp4" + }, + { + "term": "Parking lot", + "code": "https://media.signbsl.com/videos/asl/youtube/mp4/oWm64Do5zW0.mp4" + }, + { + "term": "Pickle (also Pineapple)", + "code": "https://media.signbsl.com/videos/asl/aslsignbank/mp4/PICKLE-2008.mp4" + }, + { + "term": "Prince", + "code": "https://media.signbsl.com/videos/asl/aslsearch/mp4/prince.mp4" + }, + { + "term": "Princess", + "code": "https://media.signbsl.com/videos/asl/aslsearch/mp4/princess.mp4" + }, + { + "term": "Queen", + "code": "" + }, + { + "term": "Sword", + "code": "https://media.signbsl.com/videos/asl/aslsearch/mp4/sword.mp4" + }, + { + "term": "Welcome", + "code": "https://media.signbsl.com/videos/asl/youtube/mp4/tQBaI8oi6tw.mp4" + }, + { + "term": "Parents", + "code": "https://media.signbsl.com/videos/asl/aslsignbank/mp4/PARENTS-696.mp4" + }, + { + "term": "Do you need help?", + "code": "https://www.youtube.com/embed/HDwqcA11tx4?rel=0" + }, + { + "term": "Do you understand?", + "code": "https://www.youtube.com/embed/plJHFy1RcMI?rel=0" + }, + { + "term": "Do you want to play a game?", + "code": "https://www.youtube.com/embed/aRxUSAA_k2w?rel=0" + }, + { + "term": "How are you?", + "code": "https://www.youtube.com/embed/JPtdvzvpWMQ?rel=0" + }, + { + "term": "How did you get here?", + "code": "https://www.youtube.com/embed/8Gl6aTI1zAQ?rel=0" + }, + { + "term": "How many siblings do you have?", + "code": "https://www.youtube.com/embed/gPjmZURJgWg?rel=0" + }, + { + "term": "How much does it cost?", + "code": "https://www.youtube.com/embed/wPwZpfA397c?rel=0" + }, + { + "term": "How old are you?", + "code": "https://www.youtube.com/embed/yQD5HyEyWkI?rel=0" + }, + { + "term": "What is your phone number", + "code": "https://media.signbsl.com/videos/asl/startasl/mp4/what-is-your-phone-number.mp4" + }, + { + "term": "Beer", + "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%20Beer%20var-wX78EPtSuzU.mp4" + }, + { + "term": "Crepe", + "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%20Crepe-bcHahEqTzuA.mp4" + }, + { + "term": "Doughnut", + "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%20Doughnut-LJgG-jJAZUg.mp4" + }, + { + "term": "Hamburger", + "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%20Hamburger-N6o8WBkjFK4.mp4" + }, + { + "term": "Honey", + "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%20Honey%202-BW6iLCTPYx8.mp4" + }, + { + "term": "Hot Dog", + "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%20Sausage%2C%20Hot%20Dog-rfFblMZW92c.mp4" + }, + { + "term": "Ice Cream", + "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%20Ice%20Cream%202-blIP3pcEkmY.mp4" + }, + { + "term": "Mushroom", + "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%20Mushroom%2C%20Championship-FwEsnbhJcdw.mp4" + }, + { + "term": "Nut", + "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%20Nut-3EyoOwwqMi4.mp4" + }, + { + "term": "Pizza", + "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%20Pizza-mJVC9oI13Lo.mp4" + }, + { + "term": "Popcorn", + "code": "https://signstock.blob.core.windows.net/signschool/videos/SignSchool%20Popcorn.mp4" + }, + { + "term": "Potato", + "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%20Potato-bMnw7FVrglA.mp4" + }, + { + "term": "Pretzel", + "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%20Olympics-clU8I371n5Y.mp4" + }, + { + "term": "Sandwich", + "code": "https://signstock.blob.core.windows.net/signschool/videos/SignSchool%20Sandwich.mp4" + }, + { + "term": "Soda", + "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%20Soda-vSOMm-bPMm4.mp4" + }, + { + "term": "Wine", + "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%20Wine-uQou6pZTucA.mp4" + } ] diff --git a/src/data/food.json b/src/data/food.json new file mode 100644 index 0000000..f64313c --- /dev/null +++ b/src/data/food.json @@ -0,0 +1,54 @@ +[ + {"term": "Bacon", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%20Bacon-2ricwcKQJ1Y.mp4"}, + {"term": "Bagel", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%20Bagel-Tt8Di-ylTIM.mp4"}, + {"term": "Banana", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%20Banana%202-7dm2Wk8HYIY.mp4"}, + {"term": "Beer", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%20Beer%20var-wX78EPtSuzU.mp4"}, + {"term": "Cake", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%20Cake-ld9YQUWWWgw.mp4"}, + {"term": "Carrot", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%20Carrot%202-Rg8mCLofZaQ.mp4"}, + {"term": "Cheese", "code": "https://signstock.blob.core.windows.net/signschool/videos/SignSchool%20Cheese.mp4"}, + {"term": "Chocolate", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%20Chocolate-zEiMHvlOtW8.mp4"}, + {"term": "Coffee", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%20coffee-zjqRswd2CkM.mp4"}, + {"term": "Cookie", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%20Cookie%202-VDyv32guxac.mp4"}, + {"term": "Crepe", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%20Crepe-bcHahEqTzuA.mp4"}, + {"term": "Doughnut", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%20Doughnut-LJgG-jJAZUg.mp4"}, + {"term": "Egg", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%20Egg-AB_6DLv-5-8.mp4"}, + {"term": "Fish", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%20Fish-_GVODUZLS70.mp4"}, + {"term": "Fruit", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%20Fruit-UcwPhApYAsY.mp4"}, + {"term": "Grapes", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%20Grapes-6byvo_QDEoE.mp4"}, + {"term": "Gum", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%20Gum-44XwkLXYj94.mp4"}, + {"term": "Hamburger", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%20Hamburger-N6o8WBkjFK4.mp4"}, + {"term": "Honey", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%20Honey%202-BW6iLCTPYx8.mp4"}, + {"term": "Hot Dog", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%20Sausage%2C%20Hot%20Dog-rfFblMZW92c.mp4"}, + {"term": "Ice Cream", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%20Ice%20Cream%202-blIP3pcEkmY.mp4"}, + {"term": "Juice", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%20Juice-M16OET0NJEk.mp4"}, + {"term": "Ketchup", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%20Ketchup-4Yn7uy7Uo1E.mp4"}, + {"term": "Lettuce", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%20Cabbage%2C%20Lettuce%2C%20Garbage%202-mBmLhI--vyg.mp4"}, + {"term": "Meat", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%20Content%2C%20Meat-YMsnuzgcmYk.mp4"}, + {"term": "Milk", "code": "https://signstock.blob.core.windows.net/signschool/videos/SignSchool%20Milk.mp4"}, + {"term": "Mushroom", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%20Mushroom%2C%20Championship-FwEsnbhJcdw.mp4"}, + {"term": "Nut", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%20Nut-3EyoOwwqMi4.mp4"}, + {"term": "Onion", "code": "https://signstock.blob.core.windows.net/signschool/videos/SignSchool%20Onion.mp4"}, + {"term": "Pasta", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%20Pasta-GO8-46-dlIg.mp4"}, + {"term": "Peas", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%20Peas-Esp7Q0dB3RI.mp4"}, + {"term": "Pie", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%20Pie-qYyoVxL86o4.mp4"}, + {"term": "Pineapple", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%20Pineapple%202-OMk3URQEERw.mp4"}, + {"term": "Pizza", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%20Pizza-mJVC9oI13Lo.mp4"}, + {"term": "Popcorn", "code": "https://signstock.blob.core.windows.net/signschool/videos/SignSchool%20Popcorn.mp4"}, + {"term": "Popsicle", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%20Popsicle-g_h0lAoKBs8.mp4"}, + {"term": "Potato", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%20Potato-bMnw7FVrglA.mp4"}, + {"term": "Pretzel", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%20Olympics-clU8I371n5Y.mp4"}, + {"term": "Rice", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%20Rice-zGSkINONDik.mp4"}, + {"term": "Salad", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%20Salad-ETh-CCE1ye4.mp4"}, + {"term": "Sandwich", "code": "https://signstock.blob.core.windows.net/signschool/videos/SignSchool%20Sandwich.mp4"}, + {"term": "Sauce", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%20Sauce-Jn74uLB0_v0.mp4"}, + {"term": "Shrimp", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%20Shrimp%202-1EgWn1Qa1JQ.mp4"}, + {"term": "Soda", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%20Soda-vSOMm-bPMm4.mp4"}, + {"term": "Soup", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%20Soup%2C%20Spoon-vAx8Y7ThSvM.mp4"}, + {"term": "Strawberry", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%20Strawberry-h56ZEHdCSqU.mp4"}, + {"term": "Tacos", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%20Taco-J9cbODQLzUM.mp4"}, + {"term": "Tea", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%20Tea-KteSJtbKjwA.mp4"}, + {"term": "Tomato", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%20Tomato-HC0J3JaPVqU.mp4"}, + {"term": "Tortilla", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%20Tortilla-MxYWALTT75M.mp4"}, + {"term": "Vegetable", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%20Vegetable-H4WFMRW0-Mc.mp4"}, + {"term": "Wine", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%20Wine-uQou6pZTucA.mp4"} +] \ No newline at end of file diff --git a/src/data/numbers.json b/src/data/numbers.json new file mode 100644 index 0000000..aa1f78b --- /dev/null +++ b/src/data/numbers.json @@ -0,0 +1,104 @@ +[ + {"term": "number", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%20Number-ocqPQu_xQKY.mp4"}, + {"term": "hundred", "code": "https://media.signbsl.com/videos/asl/youtube/mp4/97FQFyNLDbg.mp4"}, + {"term": "thousand", "code": "https://media.signbsl.com/videos/asl/youtube/mp4/pnHCIwO5EQo.mp4"}, + {"term": "million", "code": "https://media.signbsl.com/videos/asl/aslsearch/mp4/million.mp4"}, + {"term": "1", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%201-roPWtHm3Udw.mp4"}, + {"term": "2", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%202-134Blu6daD8.mp4"}, + {"term": "3", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%203-ob_nKsit-Lw.mp4"}, + {"term": "4", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%204-jA2eoxloaHc.mp4"}, + {"term": "5", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%205-hcCQFYPXUHk.mp4"}, + {"term": "6", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%206-zR2SZtM-DsM.mp4"}, + {"term": "7", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%207-JOcIe5ikrP8.mp4"}, + {"term": "8", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%208-CARjA59J2iE.mp4"}, + {"term": "9", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%209-2guCgS9_uhg.mp4"}, + {"term": "10", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2010-6ojLD8vgvg8.mp4"}, + {"term": "11", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2011-41gWNdewpjM.mp4"}, + {"term": "12", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2012-WQzWdM4VITc.mp4"}, + {"term": "13", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2013-abeII7kaDyg.mp4"}, + {"term": "14", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2014-zUvqxUuJ8Oc.mp4"}, + {"term": "15", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2015-UbMTvct_PMk.mp4"}, + {"term": "16", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2016-nCj3u_CzXEo.mp4"}, + {"term": "17", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2017-pjoUbNTwS74.mp4"}, + {"term": "18", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2018-DhSdUZQnsTk.mp4"}, + {"term": "19", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2019-wO_y6Ioe15E.mp4"}, + {"term": "20", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2020-DWvukTjn7p0.mp4"}, + {"term": "21", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2021-unErbMtXUcA.mp4"}, + {"term": "22", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2022-lX2vPDN4Lk0.mp4"}, + {"term": "23", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2023-eYGdpPAJdgM.mp4"}, + {"term": "24", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2024-MhFIAEHpTfA.mp4"}, + {"term": "25", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2025-IUOLwKSy__8.mp4"}, + {"term": "26", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2026-PYeFvzRhVV4.mp4"}, + {"term": "27", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2027-HYYC-8j5cYc.mp4"}, + {"term": "28", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2028-K1UB7oGMQwA.mp4"}, + {"term": "29", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2029-p0v9UU-ekqU.mp4"}, + {"term": "30", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2030-WmvjI4G24fY.mp4"}, + {"term": "31", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2031-1pcZwe7aZeU.mp4"}, + {"term": "32", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2032-9j4OhKx4aZ4.mp4"}, + {"term": "33", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2033-BIJteAAY9-c.mp4"}, + {"term": "34", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2034-EPVYrzYShmg.mp4"}, + {"term": "35", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2035-K60uTzwKdzM.mp4"}, + {"term": "36", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2036-xwhn6s_l1n4.mp4"}, + {"term": "37", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2037-Bm5Q3T1b6nc.mp4"}, + {"term": "38", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2038-EjN-kJE2LUg.mp4"}, + {"term": "39", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2039-PsdV592090o.mp4"}, + {"term": "40", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2040-sG-R3kE8BRY.mp4"}, + {"term": "41", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2041-aSaIKpfZ_Y0.mp4"}, + {"term": "42", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2042-HUeE4ilVdOw.mp4"}, + {"term": "43", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2043-SQlGjaHP_MQ.mp4"}, + {"term": "44", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2044-n_ZtlH77pHo.mp4"}, + {"term": "45", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2045-9PnauFZ3qac.mp4"}, + {"term": "46", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2046-OHfQrWuXZwk.mp4"}, + {"term": "47", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2047-95RTpjw4PRw.mp4"}, + {"term": "48", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2048-utIcI_pJm3g.mp4"}, + {"term": "49", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2049-mK-efk5y0Ss.mp4"}, + {"term": "50", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2050-qaOx5-whHHI.mp4"}, + {"term": "51", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2051-WQmCq5K9gd8.mp4"}, + {"term": "52", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2052-JEwBR50WL9k.mp4"}, + {"term": "53", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2053-e8b4FF9PYjw.mp4"}, + {"term": "54", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2054-vnWx1E6Y_is.mp4"}, + {"term": "55", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2055-O-KqHbd3PTQ.mp4"}, + {"term": "56", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2056-TTMg6QWZpaY.mp4"}, + {"term": "57", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2057-XLwcvPnS1oA.mp4"}, + {"term": "58", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2058-ZIPSZGSaNEo.mp4"}, + {"term": "59", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2059-TaKU_egeFeA.mp4"}, + {"term": "60", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2060-KjFlAszWPc0.mp4"}, + {"term": "61", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2061-RtMi4c1mx_Q.mp4"}, + {"term": "62", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2062-yUV0iudUHq4.mp4"}, + {"term": "63", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2063-dCingQWzYcs.mp4"}, + {"term": "64", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2064-x-KL87G2spg.mp4"}, + {"term": "65", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2065-5uNQfRLOwbM.mp4"}, + {"term": "66", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2066-D4NAMOEnFC0.mp4"}, + {"term": "67", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2067-XbaM5Kq3uf0.mp4"}, + {"term": "68", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2068-DUjyJXCx-xg.mp4"}, + {"term": "69", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2069-FEVjdBOk8i4.mp4"}, + {"term": "70", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2070%202x-u10QZUAoax8.mp4"}, + {"term": "71", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2071-svHAVAaoE7M.mp4"}, + {"term": "72", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2072-yCfSfn0ZjZ4.mp4"}, + {"term": "73", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2073-6O8hEl5hWy0.mp4"}, + {"term": "74", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2074-C09kfVnRWW0.mp4"}, + {"term": "75", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2075-WyYz0Y6veHw.mp4"}, + {"term": "76", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2076-3OI6vBkITtI.mp4"}, + {"term": "77", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2077-x4fUBWBioq4.mp4"}, + {"term": "78", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2078-xnNcQvi-YSg.mp4"}, + {"term": "79", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2079-DrO0ZQsZR9k.mp4"}, + {"term": "80", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2080-0PMuoKkULb0.mp4"}, + {"term": "81", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2081-WFp2UgFzufM.mp4"}, + {"term": "82", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2082-8akdToXWKd8.mp4"}, + {"term": "83", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2083-0D7Gs8CBiRM.mp4"}, + {"term": "84", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2084-l3e7YIH7-Ak.mp4"}, + {"term": "85", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2085-nT5DlZiqLgI.mp4"}, + {"term": "86", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2086-ki2PNlTw90Y.mp4"}, + {"term": "87", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2087-u_R6NlFYaJU.mp4"}, + {"term": "88", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2088-iE0HsHrwqLM.mp4"}, + {"term": "89", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2089-XMELvcw6_xo.mp4"}, + {"term": "90", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2090-QGgoTx4nOw0.mp4"}, + {"term": "91", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2091-C7Dzs6lroJI.mp4"}, + {"term": "92", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2092-YawPrph_5Bg.mp4"}, + {"term": "93", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2093-1_P-kSc-VxA.mp4"}, + {"term": "94", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2094-Ezmr2U8m_aE.mp4"}, + {"term": "95", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2095-nldlrvWe60U.mp4"}, + {"term": "96", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2096-DNrk3On24_4.mp4"}, + {"term": "97", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2097-wL7ISqGxWgk.mp4"}, + {"term": "98", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%2098-tYky-gyn2EE.mp4"} +] \ No newline at end of file diff --git a/src/data/plans.md b/src/data/plans.md new file mode 100644 index 0000000..79a30d0 --- /dev/null +++ b/src/data/plans.md @@ -0,0 +1,22 @@ +# Week 3 - Sentences + + +Where do you live? + +What time do you work? + +Can you help me with my signing? + +I really enjoy mexican food. + + +What kind of car do you drive? +- I drive a silver truck + +My wife says to tell you hello + +https://media.signbsl.com/videos/asl/youtube/mp4/3msfJ_fibwg.mp4 +https://media.signbsl.com/videos/asl/aslsignbank/mp4/WIFE-2237.mp4 +https://media.signbsl.com/videos/asl/youtube/mp4/BJ_V7T3naFY.mp4 +https://media.signbsl.com/videos/asl/startasl/mp4/you.mp4 +https://media.signbsl.com/videos/asl/startasl/mp4/hello.mp4 \ No newline at end of file diff --git a/src/data/sentences-multi.json b/src/data/sentences-multi.json new file mode 100644 index 0000000..6a174c0 --- /dev/null +++ b/src/data/sentences-multi.json @@ -0,0 +1,71 @@ +[ + {"term": "My wife says to tell you hello", "codes": [ + "https://media.signbsl.com/videos/asl/youtube/mp4/3msfJ_fibwg.mp4", + "https://media.signbsl.com/videos/asl/aslsignbank/mp4/WIFE-2237.mp4", + "https://media.signbsl.com/videos/asl/youtube/mp4/BJ_V7T3naFY.mp4", + "https://media.signbsl.com/videos/asl/startasl/mp4/you.mp4", + "https://media.signbsl.com/videos/asl/startasl/mp4/hello.mp4"]}, + {"term": "What kind of car do you drive?", "codes": [ + "https://media.signbsl.com/videos/asl/startasl/mp4/what.mp4", + "https://media.signbsl.com/videos/asl/aslsignbank/mp4/TYPE-164.mp4", + "https://media.signbsl.com/videos/asl/startasl/mp4/car.mp4", + "https://media.signbsl.com/videos/asl/startasl/mp4/you.mp4", + "https://media.signbsl.com/videos/asl/aslsearch/mp4/drive.mp4" + ]}, + {"term": "I really like Mexican food", "codes": [ + "https://media.signbsl.com/videos/asl/youtube/mp4/qIaZAO2YlYk.mp4", + "https://media.signbsl.com/videos/asl/aslbricks/mp4/really.mp4", + "https://media.signbsl.com/videos/asl/startasl/mp4/like.mp4", + "https://media.signbsl.com/videos/asl/startasl/mp4/mexican.mp4", + "https://media.signbsl.com/videos/asl/startasl/mp4/food.mp4" + ]}, + {"term": "Can you help me with my signing?", "codes": [ + "https://media.signbsl.com/videos/asl/mariekatzenbachschool/mp4/can%202.mp4", + "https://media.signbsl.com/videos/asl/startasl/mp4/you.mp4", + "https://media.signbsl.com/videos/asl/startasl/mp4/help.mp4", + "https://media.signbsl.com/videos/asl/startasl/mp4/with.mp4", + "https://media.signbsl.com/videos/asl/youtube/mp4/3msfJ_fibwg.mp4", + "https://media.signbsl.com/videos/asl/youtube/mp4/6cCmHoxAGtc.mp4" + ]}, + {"term": "What time do you work?", "codes": [ + "https://media.signbsl.com/videos/asl/startasl/mp4/what.mp4", + "https://media.signbsl.com/videos/asl/aslbricks/mp4/time.mp4", + "https://media.signbsl.com/videos/asl/startasl/mp4/you.mp4", + "https://media.signbsl.com/videos/asl/startasl/mp4/work.mp4" + ]}, + {"term": "Where do you live?", "codes": [ + "https://media.signbsl.com/videos/asl/startasl/mp4/where.mp4", + "https://media.signbsl.com/videos/asl/startasl/mp4/you.mp4", + "https://media.signbsl.com/videos/asl/youtube/mp4/wcA5c3BrHQA.mp4" + ]}, + {"term": "I drive a silver truck", "codes": [ + "https://media.signbsl.com/videos/asl/youtube/mp4/qIaZAO2YlYk.mp4", + "https://media.signbsl.com/videos/asl/aslsearch/mp4/drive.mp4", + "https://media.signbsl.com/videos/asl/youtube/mp4/9fWuTtBHMGY.mp4", + "https://media.signbsl.com/videos/asl/aslsignbank/mp4/TRUCK-1316.mp4" + ]}, + {"term": "My wife and I like to go camping", "codes" : [ + "https://media.signbsl.com/videos/asl/youtube/mp4/3msfJ_fibwg.mp4", + "https://media.signbsl.com/videos/asl/aslsignbank/mp4/WIFE-2237.mp4", + "https://media.signbsl.com/videos/asl/aslsearch/mp4/and.mp4", + "https://media.signbsl.com/videos/asl/youtube/mp4/qIaZAO2YlYk.mp4", + "https://media.signbsl.com/videos/asl/startasl/mp4/like.mp4", + "https://media.signbsl.com/videos/asl/startasl/mp4/go.mp4", + "https://media.signbsl.com/videos/asl/youtube/mp4/khW2tiregWM.mp4" + ]}, + {"term": "I like to go river fishing", "codes": [ + "https://media.signbsl.com/videos/asl/youtube/mp4/qIaZAO2YlYk.mp4", + "https://media.signbsl.com/videos/asl/startasl/mp4/like.mp4", + "https://media.signbsl.com/videos/asl/startasl/mp4/go.mp4", + "https://media.signbsl.com/videos/asl/signlanguagestudent/mp4/river.mp4", + "https://media.signbsl.com/videos/asl/mariekatzenbachschool/mp4/fishing.mp4" + ]} +] + + + + + + + + diff --git a/src/data/terms.json b/src/data/terms.json index a8f9233..46dece7 100644 --- a/src/data/terms.json +++ b/src/data/terms.json @@ -23,6 +23,7 @@ {"term": "Break", "code": "https://media.signbsl.com/videos/asl/aslsignbank/mp4/BREAK-420.mp4"}, {"term": "Brother", "code": "https://media.signbsl.com/videos/asl/startasl/mp4/brother.mp4"}, {"term": "But", "code": "https://media.signbsl.com/videos/asl/aslsearch/mp4/but.mp4"}, + {"term": "Can't", "code": "https://media.signbsl.com/videos/asl/aslsearch/mp4/cannot.mp4"}, {"term": "Cheat", "code": "https://media.signbsl.com/videos/asl/aslsignbank/mp4/CHEAT_1-1058.mp4"}, {"term": "Child", "code": "https://media.signbsl.com/videos/asl/aslsignbank/mp4/CHILD-75.mp4"}, {"term": "Children", "code": ""}, @@ -38,6 +39,7 @@ {"term": "Draw", "code": ""}, {"term": "Drink", "code": ""}, {"term": "Drunk", "code": "https://media.signbsl.com/videos/asl/aslsearch/mp4/drunk.mp4"}, + {"term": "End", "code": "https://media.signbsl.com/videos/asl/youtube/mp4/Y8kF63nbYEc.mp4"}, {"term": "Express", "code": "https://media.signbsl.com/videos/asl/aslsignbank/mp4/EXPRESS-1363.mp4"}, {"term": "Fall", "code": ""}, {"term": "Fall Down", "code": "https://media.signbsl.com/videos/asl/startasl/mp4/fall-down.mp4"}, @@ -85,6 +87,7 @@ {"term": "Kid", "code": "https://media.signbsl.com/videos/asl/aslsearch/mp4/kid.mp4"}, {"term": "Knowledge", "code": "https://media.signbsl.com/videos/asl/youtube/mp4/G1idOu49Nq0.mp4"}, {"term": "Large", "code": ""}, + {"term": "Last", "code": ""}, {"term": "Last Name", "code": "https://media.signbsl.com/videos/asl/youtube/mp4/3uim_eaSkmI.mp4"}, {"term": "Learn", "code": ""}, {"term": "Leave", "code": "https://media.signbsl.com/videos/asl/aslsearch/mp4/leave.mp4"}, diff --git a/src/data/terms2.json b/src/data/terms2.json index 6da6a60..d826732 100644 --- a/src/data/terms2.json +++ b/src/data/terms2.json @@ -96,5 +96,11 @@ {"term": "Who", "code": ""}, {"term": "Why", "code": ""}, {"term": "Work", "code": "https://media.signbsl.com/videos/asl/youtube/mp4/hQKYeuN5tMI.mp4"}, - {"term": "World", "code": ""} + {"term": "World", "code": ""}, + {"term": "Appetizer", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%20Appetizer-YDERzTpcc6Y.mp4"}, + {"term": "Breakfast", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%20Breakfast-THwAruhoYd8.mp4"}, + {"term": "Dessert", "code": "https://signstock.blob.core.windows.net/signschool/videos/SignSchool%20Dessert%252C%20Dating.mp4"}, + {"term": "Dinner", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%20Dinner-9jBzuXsAPvE.mp4"}, + {"term": "Lunch", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%20Lunch-X2xNSM8So48.mp4"}, + {"term": "Snack", "code": "https://signstock.blob.core.windows.net/signschool/videos/db_uploads/SignSchool%20Snack%202-CtUN_tUG-ZA.mp4"} ] diff --git a/src/index.css b/src/index.css index 900a56c..bc99779 100644 --- a/src/index.css +++ b/src/index.css @@ -54,6 +54,13 @@ } } +@font-face { + font-family: 'Gallaudet'; + src: local('Gallaudet'), url('./assets/fonts/GALLAUDET.ttf') format('truetype'); + font-weight: normal; + font-style: normal; +} + body.modal-open { overflow: hidden; }