practice.html (5012B)
1 {% extends "base.html" %} 2 3 {% block title %}{{ mode_label }} - StenoDojo{% endblock %} 4 5 {% block content %} 6 <div id="practice-container" data-mode="{{ mode }}" data-lesson="{{ lesson_id }}"> 7 <div class="practice-header"> 8 <a href="/" class="btn btn--ghost practice-back">← Dashboard</a> 9 <h1 class="practice-mode-label">{{ mode_label }}</h1> 10 <button id="end-session-btn" class="btn btn--danger practice-end">End</button> 11 </div> 12 13 <div id="loading" class="practice-loading"> 14 {% if lesson_id %} 15 <div id="session-config" class="session-config"> 16 <label class="session-config__label">Session Length</label> 17 <div class="session-config__options"> 18 <button class="session-config__btn" data-count="5">Short (5)</button> 19 <button class="session-config__btn session-config__btn--active" data-count="10">Medium (10)</button> 20 <button class="session-config__btn" data-count="20">Long (20)</button> 21 </div> 22 <button id="start-session-btn" class="btn btn--primary session-config__start">Start Practice</button> 23 </div> 24 {% else %} 25 <div class="spinner"></div> 26 <p>Loading session...</p> 27 {% endif %} 28 </div> 29 30 <div id="practice-area" class="practice-area" style="display: none;"> 31 <div class="practice-main"> 32 <div class="practice-left"> 33 <div id="typing-display" class="typing-display"> 34 <div id="typing-words" class="typing-words"></div> 35 </div> 36 <input type="text" id="typing-input" class="typing-input" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" autofocus> 37 <div id="typed-text-display" class="typed-text-display"></div> 38 39 <div id="steno-hint" class="steno-hint"> 40 <div id="steno-keyboards" class="steno-keyboards"></div> 41 </div> 42 </div> 43 44 <div id="hints-panel" class="hints-panel"> 45 <div id="phrase-hints" class="phrase-hints" style="display: none;"> 46 <div class="phrase-hints__header">Phrase Shortcuts</div> 47 <div id="phrase-hints-list" class="phrase-hints-list"></div> 48 </div> 49 <div class="hints-panel__header">Strokes</div> 50 <div id="hints-list" class="hints-list"></div> 51 </div> 52 </div> 53 54 <div id="session-stats" class="session-stats"> 55 <div class="session-stat"> 56 <span class="session-stat__icon session-stat__icon--time"></span> 57 <span id="stat-time" class="session-stat__value">0.0s</span> 58 </div> 59 <div class="session-stat"> 60 <span class="session-stat__icon session-stat__icon--accuracy"></span> 61 <span id="stat-accuracy" class="session-stat__value">0%</span> 62 </div> 63 <div class="session-stat"> 64 <span class="session-stat__icon session-stat__icon--streak"></span> 65 <span id="stat-streak" class="session-stat__value">0</span> 66 </div> 67 <div class="session-stat"> 68 <span class="session-stat__icon session-stat__icon--wpm"></span> 69 <span id="stat-wpm" class="session-stat__value">0 WPM</span> 70 </div> 71 <div class="session-stat"> 72 <span class="session-stat__icon session-stat__icon--progress"></span> 73 <span id="stat-progress" class="session-stat__value">0/0</span> 74 </div> 75 </div> 76 </div> 77 78 <div id="session-summary" class="modal-overlay" style="display: none;"> 79 <div class="modal"> 80 <h2 class="modal__title">Session Complete</h2> 81 <div id="summary-accuracy" class="summary-accuracy"></div> 82 <div class="summary-stats"> 83 <div class="summary-stat"> 84 <span class="summary-stat__label">Words</span> 85 <span id="summary-words" class="summary-stat__value"></span> 86 </div> 87 <div class="summary-stat"> 88 <span class="summary-stat__label">Avg WPM</span> 89 <span id="summary-wpm" class="summary-stat__value"></span> 90 </div> 91 <div class="summary-stat"> 92 <span class="summary-stat__label">Best Streak</span> 93 <span id="summary-streak" class="summary-stat__value"></span> 94 </div> 95 </div> 96 <div id="summary-weak-words" class="summary-weak-words"></div> 97 <div class="modal__actions"> 98 <a href="/practice?mode={{ mode }}{% if lesson_id %}&lesson={{ lesson_id }}{% endif %}" class="btn btn--primary">Practice Again</a> 99 <a href="/" class="btn btn--ghost">Back to Dashboard</a> 100 </div> 101 </div> 102 </div> 103 </div> 104 {% endblock %}