Skip to content

Commit f17415b

Browse files
committed
feat: Clickable dialog words that pops up a modal
1 parent 007841b commit f17415b

13 files changed

Lines changed: 178 additions & 36 deletions

File tree

_data/sessions.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,8 @@ dialog-01:
6262
segment: 'week-03'
6363
title: 'Making Conversations'
6464
type: 'Dialog'
65+
mode: learn-english
66+
index: true
6567
icon: forum
6668
sequence: 1
6769
header: 'Dialogue 1'

_includes/foot/popup.html

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<div id="course-popup" class="course-popup">
2+
<div class="card-tab {{ segment_data.theme }}">
3+
<div class="top-bar">&nbsp;</div>
4+
<div class="tab icon {{ symbols }}">close</div>
5+
<div class="body"></div>
6+
</div>
7+
</div>

_includes/session/bubble.html

Lines changed: 20 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,28 @@
1-
{% assign words = include.text | split: " " %}
21

32
<div class="bubble-container {{ include.side }}">
43
<div class="talk-bubble {{ include.side }} tri-right {{ include.side }}-in border round">
54
<div class="talktext">
6-
<div class="index">{{ include.index }}</div>
5+
{%- if session_data.index %}
6+
<div class="index">{{ include.index }}</div>
7+
{%- endif %}
8+
9+
{% assign words = include.text | replace: '\', '<br/>' | split: " " %}
710
{%- for raw in words %}
8-
{%- assign w = raw
9-
| replace: 'th', '<u>th</u>'
10-
| replace: 'Th', '<u>Th</u>'
11-
| replace: 'St', '<u>St</u>'
12-
| replace: 've', '<u>ve</u>'
13-
| replace: 'Ve', '<u>Ve</u>'
14-
| replace: 'dr', '<u>dr</u>'
15-
| replace: 'Dr', '<u>Dr</u>'
16-
%}
17-
{%- assign str = w | remove_first: '^' %}
18-
{%- if str == w %}
19-
{{ w }}
20-
{%- else -%}
21-
{%- assign word = str
22-
| remove_first: '.'
23-
| remove_first: ','
24-
| remove_first: '!'
25-
| remove_first: '?'
26-
%}
27-
{%- if word == str %}
28-
{%- include session/say.html word=word -%}
29-
{%- else %}
30-
{%- assign punct = str | slice: -1, 1 -%}
31-
{%- include session/say.html word=word punct=punct -%}
32-
{% endif -%}
33-
{% endif -%}
11+
{%- if session_data.mode == 'learn-english' %}
12+
{%- assign w = raw
13+
| replace: 'th', '<u>th</u>'
14+
| replace: 'Th', '<u>Th</u>'
15+
| replace: 'St', '<u>St</u>'
16+
| replace: 've', '<u>ve</u>'
17+
| replace: 'Ve', '<u>Ve</u>'
18+
| replace: 'dr', '<u>dr</u>'
19+
| replace: 'Dr', '<u>Dr</u>'
20+
%}
21+
{%- else %}
22+
{%- assign w = raw %}
23+
{%- endif %}
24+
25+
{%- include session/hilight_word.html word=w %}
3426
{% endfor -%}
3527
</div>
3628
</div>

_includes/session/conversation.html

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,14 @@
66
{%- else -%}
77
{%- assign side = 'left' -%}
88
{%- endif -%}
9-
{% include session/bubble.html text=text side=side index=forloop.index %}
9+
{%- if text.first -%}
10+
{%- assign idx = forloop.index -%}
11+
{%- for line in text -%}
12+
{%- assign i = forloop.index | prepend: "." | prepend: idx -%}
13+
{% include session/bubble.html text=line side=side index=i %}
14+
{%- endfor -%}
15+
{%- else -%}
16+
{% include session/bubble.html text=text side=side index=forloop.index %}
17+
{%- endif -%}
1018
{%- endfor -%}
1119
</section>
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
{% assign word = include.word | replace: '<u>' | replace: '</u>' %}
2+
{%- assign str = word | remove_first: '^' %}
3+
4+
{%- if str == word %}
5+
{{ word }}
6+
{%- else -%}
7+
{%- assign w = str
8+
| remove_first: '.'
9+
| remove_first: ','
10+
| remove_first: ';'
11+
| remove_first: '!'
12+
| remove_first: '?'
13+
%}
14+
{%- if w == str %}
15+
{%- assign punct = '' -%}
16+
{%- else %}
17+
{%- assign punct = str | slice: -1, 1 -%}
18+
{% endif -%}
19+
<a href="#"
20+
data-word-click="wordClick"
21+
data-arg-word="{{ w }}"
22+
>{{ w }}</a>{{ punct }}
23+
{% endif -%}

_includes/session/say.html

Lines changed: 0 additions & 2 deletions
This file was deleted.

_includes/word-click-handler.html

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<script>
2+
function wordClick(_event, _link, args) {
3+
console.info('Default "wordClick" function defined in _includes/word-click-handler.html\nReplace this file with your custom function');
4+
console.log(`Word clicked: "${args.word}"`);
5+
showPopup("Word", args.word);
6+
}
7+
</script>

_layouts/session.html

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44
{%- if session_data.width != 'max' -%}
55
{%- assign constraint = 'max-width' -%}
66
{%- endif -%}
7+
{%- if session_data.type == 'Dialog' -%}
8+
{%- assign constraint = constraint | prepend: 'dialog ' -%}
9+
{%- endif -%}
710

811
<!doctype html>
912
<html lang="en">
@@ -20,7 +23,7 @@
2023
{%- include session/sounds.html audio=session_data.audio -%}
2124
{{ content }}
2225
{%- if page.dialogue -%}
23-
{%- include session/conversation.html data=page.dialogue-%}
26+
{%- include session/conversation.html data=page.dialogue -%}
2427
{%- endif -%}
2528
</article>
2629
</section>
@@ -30,5 +33,10 @@
3033
{%- include footer.html -%}
3134
{%- include foot/mathjax.html -%}
3235
<script async src="/assets/js/essential-audio-player.js"></script>
36+
{%- if session_data.type == 'Dialog' -%}
37+
<script async src="/assets/js/word-click-handler.js"></script>
38+
{%- include word-click-handler.html -%}
39+
{%- include foot/popup.html -%}
40+
{%- endif -%}
3341
</body>
3442
</html>

_sass/popup.scss

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
.course-popup {
2+
position: fixed;
3+
inset: 0;
4+
background: rgba(0, 0, 0, 0.6);
5+
display: flex;
6+
align-items: center;
7+
justify-content: center;
8+
z-index: 9999;
9+
opacity: 0;
10+
visibility: hidden;
11+
transition: all 0.2s ease;
12+
13+
&.show {
14+
opacity: 1;
15+
visibility: visible;
16+
}
17+
18+
.card-tab {
19+
max-width: 90%;
20+
width: 480px;
21+
max-height: 85vh;
22+
position: relative;
23+
height: inherit;
24+
}
25+
}

assets/css/dialog.scss

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,7 @@
33

44
@use "init" as *;
55
@use "base" as *;
6+
@use "tab-main" as *;
67
@use "article" as *;
78
@use "bubbles" as *;
9+
@use "popup" as *;

0 commit comments

Comments
 (0)