diff options
| -rw-r--r-- | App.js | 36 | ||||
| -rw-r--r-- | characters.js | 4 | ||||
| -rw-r--r-- | index.html | 50 | ||||
| -rw-r--r-- | index.js | 142 | ||||
| -rw-r--r-- | main.js | 14 | 
5 files changed, 67 insertions, 179 deletions
| @@ -0,0 +1,36 @@ +let state = {}; +let internalState = {}; + +state.currentChar = '你'; + +function setState(key, value) +{ +   state[key] = value; +   render(); +} + + +const CurrentCharacter = function({character}) +{ +   return h( +      'h1', +      { onClick: () => setState('currentChar', '我') }, +      character +   ); +} +    + +const App = function() +{ +   const { currentChar } = state; +    +   return h( +      'div', {}, +      [ +         h( +            CurrentCharacter, +            {character: currentChar} +         ), +      ] +   ); +} diff --git a/characters.js b/characters.js index cec829e..0ed41aa 100644 --- a/characters.js +++ b/characters.js @@ -7,7 +7,7 @@ let characters = [['的','de'],                    ['大','da4'],                    ['在','zai4'],                    ['人','ren2'], -                  ['了','liao3'], +                  ['了','le'],                    ['中','zhong1'],                    ['到','dao4'],                    ['资','zi1'], @@ -76,7 +76,7 @@ let characters = [['的','de'],                    ['成','cheng2'],                    ['章','zhang1'],                    ['何','he2'], -                  ['同','tong4'], +                  ['同','tong2'],                    ['道','dao4'],                    ['地','di4'],                    ['发','fa3'], @@ -1,43 +1,23 @@  <!doctype html>  <html>    <head> -    <title>Learn Chinese Characters</title>      <meta charset="utf-8"> -    <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script> -    <script src="characters.js"></script> -    <script src="index.js"></script> -    <link rel="stylesheet" href="style.css" /> -  </head> -  <body> -    <div id="content"> -      <h2 id="score">100.00%</h2> -      <h2 id="level">Level 1</h2> -      <h1 id="current-character"></h1> +    <title>学汉字</title> -      <span style="width: 300px; display: block;"> -        <input id="pinyin-input" type="text"> -      </span> -       -      <span id="hint-span"> -        <button id="hint-button">Hint</button> -        <span id="hint">?</span> -      </span> -      <br> -      <button id="reset-button">Reset</button> -      <br> -       -      <label>Level</label> -      <select id="level-select"> -      </select> -      <br> +    <!-- inferno scripts --> +    <script src="https://unpkg.com/inferno@7.4.8/dist/inferno.min.js"></script> +    <script src="https://unpkg.com/inferno-hyperscript@7.4.8/dist/inferno-hyperscript.min.js"></script> -      <label>Mode</label> -      <select id="mode-select"> -        <option value="newchars">Level Characters Only</option> -        <option value="allchars">All Characters Up To Level</option> -      </select> -      <p> <b>Tips:</b> This game uses numbered pinyin, so for instance you would write '你' as 'ni3'. Additionally, 'ü' is written with as 'v'.</p> -    </div> +    <!-- local scripts --> +    <script src="./characters.js"></script> +    <script src="./App.js"></script> +    <script src="./main.js"></script> +  </head> + +  <body> +    <noscript> +      <h1>You need JavaScript enabled to view this site.</h1> +    </noscript> +    <div id="root"></div>    </body>  </html> -       diff --git a/index.js b/index.js deleted file mode 100644 index b7386eb..0000000 --- a/index.js +++ /dev/null @@ -1,142 +0,0 @@ -'using strict'; - -let currentCharacter; -let score = 100; -let totalGuesses = 0; -let totalCorrect = 0; -let level = 1; -let hintLevel = 0; -let previousCharacters = []; -let completed = false; -let mode = "newchars"; - -const CHARS_PER_LEVEL = 20; - -let totalChars = CHARS_PER_LEVEL; - -function setupLevels() -{ -    let levelSelect = $('#level-select'); -    let numLevels = Math.floor(characters.length/CHARS_PER_LEVEL); -    for (let i=0; i<numLevels; i++) { -        let levelString = `${(i+1) * CHARS_PER_LEVEL} Characters`; -        levelSelect.append( -            $('<option></option>') -                .val(i+1) -                .text(levelString)); -    } -} - -function randomCharacter() -{ -    let minVal = level * CHARS_PER_LEVEL - totalChars; -    let maxVal = level * CHARS_PER_LEVEL; -    console.log(minVal, maxVal); -    let index = Math.floor(Math.random() * (maxVal-minVal)) + minVal; -    return characters[index]; -} - -function reset() -{ -    completed = false; -    level = Number($('#level-select').val()); -    mode = $('#mode-select').val(); -    if (mode === 'allchars') -        totalChars = level * CHARS_PER_LEVEL; -    else -        totalChars = CHARS_PER_LEVEL; - -    $('#level').text(`Level ${level}`); -    totalGuesses = 0; -    totalCorrect = 0; -    previousCharacters = []; -    updateCharacter(); -    updateScore(); -} - -// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -$(document).ready(() => { -    setupLevels(); -    $('#level-select').val('1'); -    $('#level-select').change(reset); -    $('#mode-select').change(reset); -    $('#pinyin-input').change(submitGuess); -    $('#hint-button').click(updateHint); -    $('#reset-button').click(reset); -    reset(); -}); - -// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~! - -function submitGuess() -{ -    totalGuesses += 1; -    let guess = $('#pinyin-input').val(); -    if (guess === currentCharacter[1]) { -        totalCorrect += 1; -        updateCharacter(); -    } -    updateScore(); -} - -// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -function updateCharacter() -{ -    if (completed || previousCharacters.length === totalChars) { -        completed = true; -        $('#level').text("Completed!"); -        return; -    } -    currentCharacter = randomCharacter(); -    while (previousCharacters.includes(currentCharacter[0])) -        currentCharacter = randomCharacter(); -    previousCharacters.push(currentCharacter[0]); -    $('#level').text(`Level ${level} (${previousCharacters.length-1}/${totalChars})`); -    $('#current-character').text(currentCharacter[0]); -    $('#pinyin-input').val(''); -    $('#pinyin-input').focus(); -    $('#hint').text('?'); -    hintLevel = 0; -} - -// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -function updateScore() -{ -    if (totalGuesses === 0) -        score = 100; -    else -        score = 100 * totalCorrect/totalGuesses; -    $('#score').text(`${score.toFixed(2)}%`); -} - -// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -function updateHint() -{ -    if (hintLevel === 3) -        return; - -    totalGuesses += 1; -    updateScore(); -     -    hintLevel += 1; -    let pinyin = currentCharacter[1]; -    if (hintLevel === 3) { -        $('#hint').text(pinyin); -        return; -    } - -    hintString = ''; -    for (let i=0; i<pinyin.length; i++) { -        if (i < hintLevel) -            hintString += pinyin[i]; -        else -            hintString += "*"; -    } - -    $('#hint').text(hintString); -    $('#pinyin-input').focus(); -} @@ -0,0 +1,14 @@ +'use strict'; + +const h = Inferno.h; + +function render() +{ +   Inferno.render( +      h(App, {}), +      document.getElementById('root') +   ); +} + + +window.onload = render; | 
