From 4f3b14339f995af194d93b8ad5e5406d7b56bbd1 Mon Sep 17 00:00:00 2001 From: Simon Brooke Date: Tue, 13 Sep 2022 14:56:35 +0100 Subject: [PATCH] Right, popup now appears where it should and has the right content. Tutor sound is playing correctly. Student sound not yet wired up. --- .../public/img/github-logo-transparent.png | Bin 0 -> 7890 bytes resources/public/index.html | 3749 +++++------------ resources/public/scripts/muharni.js | 82 + resources/public/style.css | 1 + src/muharni/construct.clj | 76 +- 5 files changed, 1068 insertions(+), 2840 deletions(-) create mode 100644 resources/public/img/github-logo-transparent.png create mode 100644 resources/public/scripts/muharni.js diff --git a/resources/public/img/github-logo-transparent.png b/resources/public/img/github-logo-transparent.png new file mode 100644 index 0000000000000000000000000000000000000000..6a379595b52fd18cb31d5e9f278e77f72d4388c6 GIT binary patch literal 7890 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 literal 0 HcmV?d00001 diff --git a/resources/public/index.html b/resources/public/index.html index 478a611..350ba42 100644 --- a/resources/public/index.html +++ b/resources/public/index.html @@ -1,3 +1,4 @@ + Tutor - - + + You - - + + - - + + @@ -104,42 +105,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਅ - - ਆ - - ਇ - - ਈ - - ਉ - - ਊ - - ਏ - - ਐ - - ਓ - - ਔ - - ਅੰ - - ਆਂ + ਅ + ਆ + ਇ + ਈ + ਉ + ਊ + ਏ + ਐ + ਓ + ਔ + ਅੰ + ਆਂ Play RTL @@ -148,42 +125,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਸ - - ਸਾ - - ਸਿ - - ਸੀ - - ਸੁ - - ਸੂ - - ਸੇ - - ਸੈ - - ਸੋ - - ਸੌ - - ਸੰ - - ਸਾਂ + ਸ + ਸਾ + ਸਿ + ਸੀ + ਸੁ + ਸੂ + ਸੇ + ਸੈ + ਸੋ + ਸੌ + ਸੰ + ਸਾਂ Play RTL @@ -192,42 +145,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਹ - - ਹਾ - - ਹਿ - - ਹੀ - - ਹੁ - - ਹੂ - - ਹੇ - - ਹੈ - - ਹੋ - - ਹੌ - - ਹੰ - - ਹਾਂ + ਹ + ਹਾ + ਹਿ + ਹੀ + ਹੁ + ਹੂ + ਹੇ + ਹੈ + ਹੋ + ਹੌ + ਹੰ + ਹਾਂ Play RTL @@ -236,42 +165,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਕ - - ਕਾ - - ਕਿ - - ਕੀ - - ਕੁ - - ਕੂ - - ਕੇ - - ਕੈ - - ਕੋ - - ਕੌ - - ਕੰ - - ਕਾਂ + ਕ + ਕਾ + ਕਿ + ਕੀ + ਕੁ + ਕੂ + ਕੇ + ਕੈ + ਕੋ + ਕੌ + ਕੰ + ਕਾਂ Play RTL @@ -280,42 +185,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਖ - - ਖਾ - - ਖਿ - - ਖੀ - - ਖੁ - - ਖੂ - - ਖੇ - - ਖੈ - - ਖੋ - - ਖੌ - - ਖੰ - - ਖਾਂ + ਖ + ਖਾ + ਖਿ + ਖੀ + ਖੁ + ਖੂ + ਖੇ + ਖੈ + ਖੋ + ਖੌ + ਖੰ + ਖਾਂ Play RTL @@ -324,42 +205,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਗ - - ਗਾ - - ਗਿ - - ਗੀ - - ਗੁ - - ਗੂ - - ਗੇ - - ਗੈ - - ਗੋ - - ਗੌ - - ਗੰ - - ਗਾਂ + ਗ + ਗਾ + ਗਿ + ਗੀ + ਗੁ + ਗੂ + ਗੇ + ਗੈ + ਗੋ + ਗੌ + ਗੰ + ਗਾਂ Play RTL @@ -368,42 +225,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਘ - - ਘਾ - - ਘਿ - - ਘੀ - - ਘੁ - - ਘੂ - - ਘੇ - - ਘੈ - - ਘੋ - - ਘੌ - - ਘੰ - - ਘਾਂ + ਘ + ਘਾ + ਘਿ + ਘੀ + ਘੁ + ਘੂ + ਘੇ + ਘੈ + ਘੋ + ਘੌ + ਘੰ + ਘਾਂ Play RTL @@ -412,42 +245,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਙ - - ਙਾ - - ਙਿ - - ਙੀ - - ਙੁ - - ਙੂ - - ਙੇ - - ਙੈ - - ਙੋ - - ਙੌ - - ਙੰ - - ਙਾਂ + ਙ + ਙਾ + ਙਿ + ਙੀ + ਙੁ + ਙੂ + ਙੇ + ਙੈ + ਙੋ + ਙੌ + ਙੰ + ਙਾਂ Play RTL @@ -456,42 +265,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਚ - - ਚਾ - - ਚਿ - - ਚੀ - - ਚੁ - - ਚੂ - - ਚੇ - - ਚੈ - - ਚੋ - - ਚੌ - - ਚੰ - - ਚਾਂ + ਚ + ਚਾ + ਚਿ + ਚੀ + ਚੁ + ਚੂ + ਚੇ + ਚੈ + ਚੋ + ਚੌ + ਚੰ + ਚਾਂ Play RTL @@ -500,42 +285,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਛ - - ਛਾ - - ਛਿ - - ਛੀ - - ਛੁ - - ਛੂ - - ਛੇ - - ਛੈ - - ਛੋ - - ਛੌ - - ਛੰ - - ਛਾਂ + ਛ + ਛਾ + ਛਿ + ਛੀ + ਛੁ + ਛੂ + ਛੇ + ਛੈ + ਛੋ + ਛੌ + ਛੰ + ਛਾਂ Play RTL @@ -544,42 +305,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਜ - - ਜਾ - - ਜਿ - - ਜੀ - - ਜੁ - - ਜੂ - - ਜੇ - - ਜੈ - - ਜੋ - - ਜੌ - - ਜੰ - - ਜਾਂ + ਜ + ਜਾ + ਜਿ + ਜੀ + ਜੁ + ਜੂ + ਜੇ + ਜੈ + ਜੋ + ਜੌ + ਜੰ + ਜਾਂ Play RTL @@ -588,42 +325,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਝ - - ਝਾ - - ਝਿ - - ਝੀ - - ਝੁ - - ਝੂ - - ਝੇ - - ਝੈ - - ਝੋ - - ਝੌ - - ਝੰ - - ਝਾਂ + ਝ + ਝਾ + ਝਿ + ਝੀ + ਝੁ + ਝੂ + ਝੇ + ਝੈ + ਝੋ + ਝੌ + ਝੰ + ਝਾਂ Play RTL @@ -632,42 +345,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਞ - - ਞਾ - - ਞਿ - - ਞੀ - - ਞੁ - - ਞੂ - - ਞੇ - - ਞੈ - - ਞੋ - - ਞੌ - - ਞੰ - - ਞਾਂ + ਞ + ਞਾ + ਞਿ + ਞੀ + ਞੁ + ਞੂ + ਞੇ + ਞੈ + ਞੋ + ਞੌ + ਞੰ + ਞਾਂ Play RTL @@ -676,42 +365,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਟ - - ਟਾ - - ਟਿ - - ਟੀ - - ਟੁ - - ਟੂ - - ਟੇ - - ਟੈ - - ਟੋ - - ਟੌ - - ਟੰ - - ਟਾਂ + ਟ + ਟਾ + ਟਿ + ਟੀ + ਟੁ + ਟੂ + ਟੇ + ਟੈ + ਟੋ + ਟੌ + ਟੰ + ਟਾਂ Play RTL @@ -720,42 +385,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਠ - - ਠਾ - - ਠਿ - - ਠੀ - - ਠੁ - - ਠੂ - - ਠੇ - - ਠੈ - - ਠੋ - - ਠੌ - - ਠੰ - - ਠਾਂ + ਠ + ਠਾ + ਠਿ + ਠੀ + ਠੁ + ਠੂ + ਠੇ + ਠੈ + ਠੋ + ਠੌ + ਠੰ + ਠਾਂ Play RTL @@ -764,42 +405,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਡ - - ਡਾ - - ਡਿ - - ਡੀ - - ਡੁ - - ਡੂ - - ਡੇ - - ਡੈ - - ਡੋ - - ਡੌ - - ਡੰ - - ਡਾਂ + ਡ + ਡਾ + ਡਿ + ਡੀ + ਡੁ + ਡੂ + ਡੇ + ਡੈ + ਡੋ + ਡੌ + ਡੰ + ਡਾਂ Play RTL @@ -808,42 +425,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਢ - - ਢਾ - - ਢਿ - - ਢੀ - - ਢੁ - - ਢੂ - - ਢੇ - - ਢੈ - - ਢੋ - - ਢੌ - - ਢੰ - - ਢਾਂ + ਢ + ਢਾ + ਢਿ + ਢੀ + ਢੁ + ਢੂ + ਢੇ + ਢੈ + ਢੋ + ਢੌ + ਢੰ + ਢਾਂ Play RTL @@ -852,42 +445,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਣ - - ਣਾ - - ਣਿ - - ਣੀ - - ਣੁ - - ਣੂ - - ਣੇ - - ਣੈ - - ਣੋ - - ਣੌ - - ਣੰ - - ਣਾਂ + ਣ + ਣਾ + ਣਿ + ਣੀ + ਣੁ + ਣੂ + ਣੇ + ਣੈ + ਣੋ + ਣੌ + ਣੰ + ਣਾਂ Play RTL @@ -896,42 +465,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਤ - - ਤਾ - - ਤਿ - - ਤੀ - - ਤੁ - - ਤੂ - - ਤੇ - - ਤੈ - - ਤੋ - - ਤੌ - - ਤੰ - - ਤਾਂ + ਤ + ਤਾ + ਤਿ + ਤੀ + ਤੁ + ਤੂ + ਤੇ + ਤੈ + ਤੋ + ਤੌ + ਤੰ + ਤਾਂ Play RTL @@ -940,42 +485,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਥ - - ਥਾ - - ਥਿ - - ਥੀ - - ਥੁ - - ਥੂ - - ਥੇ - - ਥੈ - - ਥੋ - - ਥੌ - - ਥੰ - - ਥਾਂ + ਥ + ਥਾ + ਥਿ + ਥੀ + ਥੁ + ਥੂ + ਥੇ + ਥੈ + ਥੋ + ਥੌ + ਥੰ + ਥਾਂ Play RTL @@ -984,42 +505,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਦ - - ਦਾ - - ਦਿ - - ਦੀ - - ਦੁ - - ਦੂ - - ਦੇ - - ਦੈ - - ਦੋ - - ਦੌ - - ਦੰ - - ਦਾਂ + ਦ + ਦਾ + ਦਿ + ਦੀ + ਦੁ + ਦੂ + ਦੇ + ਦੈ + ਦੋ + ਦੌ + ਦੰ + ਦਾਂ Play RTL @@ -1028,42 +525,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਧ - - ਧਾ - - ਧਿ - - ਧੀ - - ਧੁ - - ਧੂ - - ਧੇ - - ਧੈ - - ਧੋ - - ਧੌ - - ਧੰ - - ਧਾਂ + ਧ + ਧਾ + ਧਿ + ਧੀ + ਧੁ + ਧੂ + ਧੇ + ਧੈ + ਧੋ + ਧੌ + ਧੰ + ਧਾਂ Play RTL @@ -1072,42 +545,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਨ - - ਨਾ - - ਨਿ - - ਨੀ - - ਨੁ - - ਨੂ - - ਨੇ - - ਨੈ - - ਨੋ - - ਨੌ - - ਨੰ - - ਨਾਂ + ਨ + ਨਾ + ਨਿ + ਨੀ + ਨੁ + ਨੂ + ਨੇ + ਨੈ + ਨੋ + ਨੌ + ਨੰ + ਨਾਂ Play RTL @@ -1116,42 +565,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਪ - - ਪਾ - - ਪਿ - - ਪੀ - - ਪੁ - - ਪੂ - - ਪੇ - - ਪੈ - - ਪੋ - - ਪੌ - - ਪੰ - - ਪਾਂ + ਪ + ਪਾ + ਪਿ + ਪੀ + ਪੁ + ਪੂ + ਪੇ + ਪੈ + ਪੋ + ਪੌ + ਪੰ + ਪਾਂ Play RTL @@ -1160,42 +585,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਫ - - ਫਾ - - ਫਿ - - ਫੀ - - ਫੁ - - ਫੂ - - ਫੇ - - ਫੈ - - ਫੋ - - ਫੌ - - ਫੰ - - ਫਾਂ + ਫ + ਫਾ + ਫਿ + ਫੀ + ਫੁ + ਫੂ + ਫੇ + ਫੈ + ਫੋ + ਫੌ + ਫੰ + ਫਾਂ Play RTL @@ -1204,42 +605,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਬ - - ਬਾ - - ਬਿ - - ਬੀ - - ਬੁ - - ਬੂ - - ਬੇ - - ਬੈ - - ਬੋ - - ਬੌ - - ਬੰ - - ਬਾਂ + ਬ + ਬਾ + ਬਿ + ਬੀ + ਬੁ + ਬੂ + ਬੇ + ਬੈ + ਬੋ + ਬੌ + ਬੰ + ਬਾਂ Play RTL @@ -1248,42 +625,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਭ - - ਭਾ - - ਭਿ - - ਭੀ - - ਭੁ - - ਭੂ - - ਭੇ - - ਭੈ - - ਭੋ - - ਭੌ - - ਭੰ - - ਭਾਂ + ਭ + ਭਾ + ਭਿ + ਭੀ + ਭੁ + ਭੂ + ਭੇ + ਭੈ + ਭੋ + ਭੌ + ਭੰ + ਭਾਂ Play RTL @@ -1292,42 +645,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਮ - - ਮਾ - - ਮਿ - - ਮੀ - - ਮੁ - - ਮੂ - - ਮੇ - - ਮੈ - - ਮੋ - - ਮੌ - - ਮੰ - - ਮਾਂ + ਮ + ਮਾ + ਮਿ + ਮੀ + ਮੁ + ਮੂ + ਮੇ + ਮੈ + ਮੋ + ਮੌ + ਮੰ + ਮਾਂ Play RTL @@ -1336,42 +665,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਯ - - ਯਾ - - ਯਿ - - ਯੀ - - ਯੁ - - ਯੂ - - ਯੇ - - ਯੈ - - ਯੋ - - ਯੌ - - ਯੰ - - ਯਾਂ + ਯ + ਯਾ + ਯਿ + ਯੀ + ਯੁ + ਯੂ + ਯੇ + ਯੈ + ਯੋ + ਯੌ + ਯੰ + ਯਾਂ Play RTL @@ -1380,42 +685,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਰ - - ਰਾ - - ਰਿ - - ਰੀ - - ਰੁ - - ਰੂ - - ਰੇ - - ਰੈ - - ਰੋ - - ਰੌ - - ਰੰ - - ਰਾਂ + ਰ + ਰਾ + ਰਿ + ਰੀ + ਰੁ + ਰੂ + ਰੇ + ਰੈ + ਰੋ + ਰੌ + ਰੰ + ਰਾਂ Play RTL @@ -1424,42 +705,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਲ - - ਲਾ - - ਲਿ - - ਲੀ - - ਲੁ - - ਲੂ - - ਲੇ - - ਲੈ - - ਲੋ - - ਲੌ - - ਲੰ - - ਲਾਂ + ਲ + ਲਾ + ਲਿ + ਲੀ + ਲੁ + ਲੂ + ਲੇ + ਲੈ + ਲੋ + ਲੌ + ਲੰ + ਲਾਂ Play RTL @@ -1468,42 +725,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਵ - - ਵਾ - - ਵਿ - - ਵੀ - - ਵੁ - - ਵੂ - - ਵੇ - - ਵੈ - - ਵੋ - - ਵੌ - - ਵੰ - - ਵਾਂ + ਵ + ਵਾ + ਵਿ + ਵੀ + ਵੁ + ਵੂ + ਵੇ + ਵੈ + ਵੋ + ਵੌ + ਵੰ + ਵਾਂ Play RTL @@ -1512,42 +745,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ੜ - - ੜਾ - - ੜਿ - - ੜੀ - - ੜੁ - - ੜੂ - - ੜੇ - - ੜੈ - - ੜੋ - - ੜੌ - - ੜੰ - - ੜਾਂ + ੜ + ੜਾ + ੜਿ + ੜੀ + ੜੁ + ੜੂ + ੜੇ + ੜੈ + ੜੋ + ੜੌ + ੜੰ + ੜਾਂ Play RTL @@ -1556,42 +765,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਸ਼ - - ਸ਼ਾ - - ਸ਼ਿ - - ਸ਼ੀ - - ਸ਼ੁ - - ਸ਼ੂ - - ਸ਼ੇ - - ਸ਼ੈ - - ਸ਼ੋ - - ਸ਼ੌ - - ਸ਼ੰ - - ਸ਼ਾਂ + ਸ਼ + ਸ਼ਾ + ਸ਼ਿ + ਸ਼ੀ + ਸ਼ੁ + ਸ਼ੂ + ਸ਼ੇ + ਸ਼ੈ + ਸ਼ੋ + ਸ਼ੌ + ਸ਼ੰ + ਸ਼ਾਂ Play RTL @@ -1600,41 +785,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਖ਼ - - ਖ਼ਾ - - ਖ਼ਿ - - ਖ਼ੀ - - ਖ਼ੁ - - ਖ਼ੂ - - ਖ਼ੇ - - ਖ਼ੈ - - ਖ਼ੋ - - ਖ਼ੌ - - ਖ਼ੰ - ਖ਼ਾਂ + ਖ਼ + ਖ਼ਾ + ਖ਼ਿ + ਖ਼ੀ + ਖ਼ੁ + ਖ਼ੂ + ਖ਼ੇ + ਖ਼ੈ + ਖ਼ੋ + ਖ਼ੌ + ਖ਼ੰ + ਖ਼ਾਂ Play RTL @@ -1643,41 +805,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਗ਼ - - ਗ਼ਾ - - ਗ਼ਿ - - ਗ਼ੀ - - ਗ਼ੁ - - ਗ਼ੂ - - ਗ਼ੇ - - ਗ਼ੈ - - ਗ਼ੋ - - ਗ਼ੌ - - ਗ਼ੰ - ਗ਼ਾਂ + ਗ਼ + ਗ਼ਾ + ਗ਼ਿ + ਗ਼ੀ + ਗ਼ੁ + ਗ਼ੂ + ਗ਼ੇ + ਗ਼ੈ + ਗ਼ੋ + ਗ਼ੌ + ਗ਼ੰ + ਗ਼ਾਂ Play RTL @@ -1686,42 +825,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਜ਼ - - ਜ਼ਾ - - ਜ਼ਿ - - ਜ਼ੀ - - ਜ਼ੁ - - ਜ਼ੂ - - ਜ਼ੇ - - ਜ਼ੈ - - ਜ਼ੋ - - ਜ਼ੌ - - ਜ਼ੰ - - ਜ਼ਾਂ + ਜ਼ + ਜ਼ਾ + ਜ਼ਿ + ਜ਼ੀ + ਜ਼ੁ + ਜ਼ੂ + ਜ਼ੇ + ਜ਼ੈ + ਜ਼ੋ + ਜ਼ੌ + ਜ਼ੰ + ਜ਼ਾਂ Play RTL @@ -1730,41 +845,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਫ਼ - - ਫ਼ਾ - - ਫ਼ਿ - - ਫ਼ੀ - - ਫ਼ੁ - - ਫ਼ੂ - - ਫ਼ੇ - - ਫ਼ੈ - - ਫ਼ੋ - - ਫ਼ੌ - - ਫ਼ੰ - ਫ਼ਾਂ + ਫ਼ + ਫ਼ਾ + ਫ਼ਿ + ਫ਼ੀ + ਫ਼ੁ + ਫ਼ੂ + ਫ਼ੇ + ਫ਼ੈ + ਫ਼ੋ + ਫ਼ੌ + ਫ਼ੰ + ਫ਼ਾਂ Play RTL @@ -1773,41 +865,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਲ਼ - - ਲ਼ਾ - - ਲ਼ਿ - - ਲ਼ੀ - - ਲ਼ੁ - - ਲ਼ੂ - - ਲ਼ੇ - - ਲ਼ੈ - - ਲ਼ੋ - - ਲ਼ੌ - - ਲ਼ੰ - ਲ਼ਾਂ + ਲ਼ + ਲ਼ਾ + ਲ਼ਿ + ਲ਼ੀ + ਲ਼ੁ + ਲ਼ੂ + ਲ਼ੇ + ਲ਼ੈ + ਲ਼ੋ + ਲ਼ੌ + ਲ਼ੰ + ਲ਼ਾਂ Play RTL @@ -1918,42 +987,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਅ - - ਆ - - ਇ - - ਈ - - ਉ - - ਊ - - ਏ - - ਐ - - ਓ - - ਔ - - ਅੰ - - ਆਂ + ਅ + ਆ + ਇ + ਈ + ਉ + ਊ + ਏ + ਐ + ਓ + ਔ + ਅੰ + ਆਂ Play RTL @@ -1962,42 +1007,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਸ - - ਸਾ - - ਸਿ - - ਸੀ - - ਸੁ - - ਸੂ - - ਸੇ - - ਸੈ - - ਸੋ - - ਸੌ - - ਸੰ - - ਸਾਂ + ਸ + ਸਾ + ਸਿ + ਸੀ + ਸੁ + ਸੂ + ਸੇ + ਸੈ + ਸੋ + ਸੌ + ਸੰ + ਸਾਂ Play RTL @@ -2006,42 +1027,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਹ - - ਹਾ - - ਹਿ - - ਹੀ - - ਹੁ - - ਹੂ - - ਹੇ - - ਹੈ - - ਹੋ - - ਹੌ - - ਹੰ - - ਹਾਂ + ਹ + ਹਾ + ਹਿ + ਹੀ + ਹੁ + ਹੂ + ਹੇ + ਹੈ + ਹੋ + ਹੌ + ਹੰ + ਹਾਂ Play RTL @@ -2050,42 +1047,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਕ - - ਕਾ - - ਕਿ - - ਕੀ - - ਕੁ - - ਕੂ - - ਕੇ - - ਕੈ - - ਕੋ - - ਕੌ - - ਕੰ - - ਕਾਂ + ਕ + ਕਾ + ਕਿ + ਕੀ + ਕੁ + ਕੂ + ਕੇ + ਕੈ + ਕੋ + ਕੌ + ਕੰ + ਕਾਂ Play RTL @@ -2094,42 +1067,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਖ - - ਖਾ - - ਖਿ - - ਖੀ - - ਖੁ - - ਖੂ - - ਖੇ - - ਖੈ - - ਖੋ - - ਖੌ - - ਖੰ - - ਖਾਂ + ਖ + ਖਾ + ਖਿ + ਖੀ + ਖੁ + ਖੂ + ਖੇ + ਖੈ + ਖੋ + ਖੌ + ਖੰ + ਖਾਂ Play RTL @@ -2138,42 +1087,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਗ - - ਗਾ - - ਗਿ - - ਗੀ - - ਗੁ - - ਗੂ - - ਗੇ - - ਗੈ - - ਗੋ - - ਗੌ - - ਗੰ - - ਗਾਂ + ਗ + ਗਾ + ਗਿ + ਗੀ + ਗੁ + ਗੂ + ਗੇ + ਗੈ + ਗੋ + ਗੌ + ਗੰ + ਗਾਂ Play RTL @@ -2182,42 +1107,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਘ - - ਘਾ - - ਘਿ - - ਘੀ - - ਘੁ - - ਘੂ - - ਘੇ - - ਘੈ - - ਘੋ - - ਘੌ - - ਘੰ - - ਘਾਂ + ਘ + ਘਾ + ਘਿ + ਘੀ + ਘੁ + ਘੂ + ਘੇ + ਘੈ + ਘੋ + ਘੌ + ਘੰ + ਘਾਂ Play RTL @@ -2226,42 +1127,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਙ - - ਙਾ - - ਙਿ - - ਙੀ - - ਙੁ - - ਙੂ - - ਙੇ - - ਙੈ - - ਙੋ - - ਙੌ - - ਙੰ - - ਙਾਂ + ਙ + ਙਾ + ਙਿ + ਙੀ + ਙੁ + ਙੂ + ਙੇ + ਙੈ + ਙੋ + ਙੌ + ਙੰ + ਙਾਂ Play RTL @@ -2270,42 +1147,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਚ - - ਚਾ - - ਚਿ - - ਚੀ - - ਚੁ - - ਚੂ - - ਚੇ - - ਚੈ - - ਚੋ - - ਚੌ - - ਚੰ - - ਚਾਂ + ਚ + ਚਾ + ਚਿ + ਚੀ + ਚੁ + ਚੂ + ਚੇ + ਚੈ + ਚੋ + ਚੌ + ਚੰ + ਚਾਂ Play RTL @@ -2314,42 +1167,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਛ - - ਛਾ - - ਛਿ - - ਛੀ - - ਛੁ - - ਛੂ - - ਛੇ - - ਛੈ - - ਛੋ - - ਛੌ - - ਛੰ - - ਛਾਂ + ਛ + ਛਾ + ਛਿ + ਛੀ + ਛੁ + ਛੂ + ਛੇ + ਛੈ + ਛੋ + ਛੌ + ਛੰ + ਛਾਂ Play RTL @@ -2358,42 +1187,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਜ - - ਜਾ - - ਜਿ - - ਜੀ - - ਜੁ - - ਜੂ - - ਜੇ - - ਜੈ - - ਜੋ - - ਜੌ - - ਜੰ - - ਜਾਂ + ਜ + ਜਾ + ਜਿ + ਜੀ + ਜੁ + ਜੂ + ਜੇ + ਜੈ + ਜੋ + ਜੌ + ਜੰ + ਜਾਂ Play RTL @@ -2402,42 +1207,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਝ - - ਝਾ - - ਝਿ - - ਝੀ - - ਝੁ - - ਝੂ - - ਝੇ - - ਝੈ - - ਝੋ - - ਝੌ - - ਝੰ - - ਝਾਂ + ਝ + ਝਾ + ਝਿ + ਝੀ + ਝੁ + ਝੂ + ਝੇ + ਝੈ + ਝੋ + ਝੌ + ਝੰ + ਝਾਂ Play RTL @@ -2446,42 +1227,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਞ - - ਞਾ - - ਞਿ - - ਞੀ - - ਞੁ - - ਞੂ - - ਞੇ - - ਞੈ - - ਞੋ - - ਞੌ - - ਞੰ - - ਞਾਂ + ਞ + ਞਾ + ਞਿ + ਞੀ + ਞੁ + ਞੂ + ਞੇ + ਞੈ + ਞੋ + ਞੌ + ਞੰ + ਞਾਂ Play RTL @@ -2490,42 +1247,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਟ - - ਟਾ - - ਟਿ - - ਟੀ - - ਟੁ - - ਟੂ - - ਟੇ - - ਟੈ - - ਟੋ - - ਟੌ - - ਟੰ - - ਟਾਂ + ਟ + ਟਾ + ਟਿ + ਟੀ + ਟੁ + ਟੂ + ਟੇ + ਟੈ + ਟੋ + ਟੌ + ਟੰ + ਟਾਂ Play RTL @@ -2534,42 +1267,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਠ - - ਠਾ - - ਠਿ - - ਠੀ - - ਠੁ - - ਠੂ - - ਠੇ - - ਠੈ - - ਠੋ - - ਠੌ - - ਠੰ - - ਠਾਂ + ਠ + ਠਾ + ਠਿ + ਠੀ + ਠੁ + ਠੂ + ਠੇ + ਠੈ + ਠੋ + ਠੌ + ਠੰ + ਠਾਂ Play RTL @@ -2578,42 +1287,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਡ - - ਡਾ - - ਡਿ - - ਡੀ - - ਡੁ - - ਡੂ - - ਡੇ - - ਡੈ - - ਡੋ - - ਡੌ - - ਡੰ - - ਡਾਂ + ਡ + ਡਾ + ਡਿ + ਡੀ + ਡੁ + ਡੂ + ਡੇ + ਡੈ + ਡੋ + ਡੌ + ਡੰ + ਡਾਂ Play RTL @@ -2622,42 +1307,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਢ - - ਢਾ - - ਢਿ - - ਢੀ - - ਢੁ - - ਢੂ - - ਢੇ - - ਢੈ - - ਢੋ - - ਢੌ - - ਢੰ - - ਢਾਂ + ਢ + ਢਾ + ਢਿ + ਢੀ + ਢੁ + ਢੂ + ਢੇ + ਢੈ + ਢੋ + ਢੌ + ਢੰ + ਢਾਂ Play RTL @@ -2666,42 +1327,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਣ - - ਣਾ - - ਣਿ - - ਣੀ - - ਣੁ - - ਣੂ - - ਣੇ - - ਣੈ - - ਣੋ - - ਣੌ - - ਣੰ - - ਣਾਂ + ਣ + ਣਾ + ਣਿ + ਣੀ + ਣੁ + ਣੂ + ਣੇ + ਣੈ + ਣੋ + ਣੌ + ਣੰ + ਣਾਂ Play RTL @@ -2710,42 +1347,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਤ - - ਤਾ - - ਤਿ - - ਤੀ - - ਤੁ - - ਤੂ - - ਤੇ - - ਤੈ - - ਤੋ - - ਤੌ - - ਤੰ - - ਤਾਂ + ਤ + ਤਾ + ਤਿ + ਤੀ + ਤੁ + ਤੂ + ਤੇ + ਤੈ + ਤੋ + ਤੌ + ਤੰ + ਤਾਂ Play RTL @@ -2754,42 +1367,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਥ - - ਥਾ - - ਥਿ - - ਥੀ - - ਥੁ - - ਥੂ - - ਥੇ - - ਥੈ - - ਥੋ - - ਥੌ - - ਥੰ - - ਥਾਂ + ਥ + ਥਾ + ਥਿ + ਥੀ + ਥੁ + ਥੂ + ਥੇ + ਥੈ + ਥੋ + ਥੌ + ਥੰ + ਥਾਂ Play RTL @@ -2798,42 +1387,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਦ - - ਦਾ - - ਦਿ - - ਦੀ - - ਦੁ - - ਦੂ - - ਦੇ - - ਦੈ - - ਦੋ - - ਦੌ - - ਦੰ - - ਦਾਂ + ਦ + ਦਾ + ਦਿ + ਦੀ + ਦੁ + ਦੂ + ਦੇ + ਦੈ + ਦੋ + ਦੌ + ਦੰ + ਦਾਂ Play RTL @@ -2842,42 +1407,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਧ - - ਧਾ - - ਧਿ - - ਧੀ - - ਧੁ - - ਧੂ - - ਧੇ - - ਧੈ - - ਧੋ - - ਧੌ - - ਧੰ - - ਧਾਂ + ਧ + ਧਾ + ਧਿ + ਧੀ + ਧੁ + ਧੂ + ਧੇ + ਧੈ + ਧੋ + ਧੌ + ਧੰ + ਧਾਂ Play RTL @@ -2886,42 +1427,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਨ - - ਨਾ - - ਨਿ - - ਨੀ - - ਨੁ - - ਨੂ - - ਨੇ - - ਨੈ - - ਨੋ - - ਨੌ - - ਨੰ - - ਨਾਂ + ਨ + ਨਾ + ਨਿ + ਨੀ + ਨੁ + ਨੂ + ਨੇ + ਨੈ + ਨੋ + ਨੌ + ਨੰ + ਨਾਂ Play RTL @@ -2930,42 +1447,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਪ - - ਪਾ - - ਪਿ - - ਪੀ - - ਪੁ - - ਪੂ - - ਪੇ - - ਪੈ - - ਪੋ - - ਪੌ - - ਪੰ - - ਪਾਂ + ਪ + ਪਾ + ਪਿ + ਪੀ + ਪੁ + ਪੂ + ਪੇ + ਪੈ + ਪੋ + ਪੌ + ਪੰ + ਪਾਂ Play RTL @@ -2974,42 +1467,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਫ - - ਫਾ - - ਫਿ - - ਫੀ - - ਫੁ - - ਫੂ - - ਫੇ - - ਫੈ - - ਫੋ - - ਫੌ - - ਫੰ - - ਫਾਂ + ਫ + ਫਾ + ਫਿ + ਫੀ + ਫੁ + ਫੂ + ਫੇ + ਫੈ + ਫੋ + ਫੌ + ਫੰ + ਫਾਂ Play RTL @@ -3018,42 +1487,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਬ - - ਬਾ - - ਬਿ - - ਬੀ - - ਬੁ - - ਬੂ - - ਬੇ - - ਬੈ - - ਬੋ - - ਬੌ - - ਬੰ - - ਬਾਂ + ਬ + ਬਾ + ਬਿ + ਬੀ + ਬੁ + ਬੂ + ਬੇ + ਬੈ + ਬੋ + ਬੌ + ਬੰ + ਬਾਂ Play RTL @@ -3062,42 +1507,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਭ - - ਭਾ - - ਭਿ - - ਭੀ - - ਭੁ - - ਭੂ - - ਭੇ - - ਭੈ - - ਭੋ - - ਭੌ - - ਭੰ - - ਭਾਂ + ਭ + ਭਾ + ਭਿ + ਭੀ + ਭੁ + ਭੂ + ਭੇ + ਭੈ + ਭੋ + ਭੌ + ਭੰ + ਭਾਂ Play RTL @@ -3106,42 +1527,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਮ - - ਮਾ - - ਮਿ - - ਮੀ - - ਮੁ - - ਮੂ - - ਮੇ - - ਮੈ - - ਮੋ - - ਮੌ - - ਮੰ - - ਮਾਂ + ਮ + ਮਾ + ਮਿ + ਮੀ + ਮੁ + ਮੂ + ਮੇ + ਮੈ + ਮੋ + ਮੌ + ਮੰ + ਮਾਂ Play RTL @@ -3150,42 +1547,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਯ - - ਯਾ - - ਯਿ - - ਯੀ - - ਯੁ - - ਯੂ - - ਯੇ - - ਯੈ - - ਯੋ - - ਯੌ - - ਯੰ - - ਯਾਂ + ਯ + ਯਾ + ਯਿ + ਯੀ + ਯੁ + ਯੂ + ਯੇ + ਯੈ + ਯੋ + ਯੌ + ਯੰ + ਯਾਂ Play RTL @@ -3194,42 +1567,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਰ - - ਰਾ - - ਰਿ - - ਰੀ - - ਰੁ - - ਰੂ - - ਰੇ - - ਰੈ - - ਰੋ - - ਰੌ - - ਰੰ - - ਰਾਂ + ਰ + ਰਾ + ਰਿ + ਰੀ + ਰੁ + ਰੂ + ਰੇ + ਰੈ + ਰੋ + ਰੌ + ਰੰ + ਰਾਂ Play RTL @@ -3238,42 +1587,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਲ - - ਲਾ - - ਲਿ - - ਲੀ - - ਲੁ - - ਲੂ - - ਲੇ - - ਲੈ - - ਲੋ - - ਲੌ - - ਲੰ - - ਲਾਂ + ਲ + ਲਾ + ਲਿ + ਲੀ + ਲੁ + ਲੂ + ਲੇ + ਲੈ + ਲੋ + ਲੌ + ਲੰ + ਲਾਂ Play RTL @@ -3282,42 +1607,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਵ - - ਵਾ - - ਵਿ - - ਵੀ - - ਵੁ - - ਵੂ - - ਵੇ - - ਵੈ - - ਵੋ - - ਵੌ - - ਵੰ - - ਵਾਂ + ਵ + ਵਾ + ਵਿ + ਵੀ + ਵੁ + ਵੂ + ਵੇ + ਵੈ + ਵੋ + ਵੌ + ਵੰ + ਵਾਂ Play RTL @@ -3326,42 +1627,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ੜ - - ੜਾ - - ੜਿ - - ੜੀ - - ੜੁ - - ੜੂ - - ੜੇ - - ੜੈ - - ੜੋ - - ੜੌ - - ੜੰ - - ੜਾਂ + ੜ + ੜਾ + ੜਿ + ੜੀ + ੜੁ + ੜੂ + ੜੇ + ੜੈ + ੜੋ + ੜੌ + ੜੰ + ੜਾਂ Play RTL @@ -3370,42 +1647,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਸ਼ - - ਸ਼ਾ - - ਸ਼ਿ - - ਸ਼ੀ - - ਸ਼ੁ - - ਸ਼ੂ - - ਸ਼ੇ - - ਸ਼ੈ - - ਸ਼ੋ - - ਸ਼ੌ - - ਸ਼ੰ - - ਸ਼ਾਂ + ਸ਼ + ਸ਼ਾ + ਸ਼ਿ + ਸ਼ੀ + ਸ਼ੁ + ਸ਼ੂ + ਸ਼ੇ + ਸ਼ੈ + ਸ਼ੋ + ਸ਼ੌ + ਸ਼ੰ + ਸ਼ਾਂ Play RTL @@ -3414,41 +1667,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਖ਼ - - ਖ਼ਾ - - ਖ਼ਿ - - ਖ਼ੀ - - ਖ਼ੁ - - ਖ਼ੂ - - ਖ਼ੇ - - ਖ਼ੈ - - ਖ਼ੋ - - ਖ਼ੌ - - ਖ਼ੰ - ਖ਼ਾਂ + ਖ਼ + ਖ਼ਾ + ਖ਼ਿ + ਖ਼ੀ + ਖ਼ੁ + ਖ਼ੂ + ਖ਼ੇ + ਖ਼ੈ + ਖ਼ੋ + ਖ਼ੌ + ਖ਼ੰ + ਖ਼ਾਂ Play RTL @@ -3457,41 +1687,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਗ਼ - - ਗ਼ਾ - - ਗ਼ਿ - - ਗ਼ੀ - - ਗ਼ੁ - - ਗ਼ੂ - - ਗ਼ੇ - - ਗ਼ੈ - - ਗ਼ੋ - - ਗ਼ੌ - - ਗ਼ੰ - ਗ਼ਾਂ + ਗ਼ + ਗ਼ਾ + ਗ਼ਿ + ਗ਼ੀ + ਗ਼ੁ + ਗ਼ੂ + ਗ਼ੇ + ਗ਼ੈ + ਗ਼ੋ + ਗ਼ੌ + ਗ਼ੰ + ਗ਼ਾਂ Play RTL @@ -3500,42 +1707,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਜ਼ - - ਜ਼ਾ - - ਜ਼ਿ - - ਜ਼ੀ - - ਜ਼ੁ - - ਜ਼ੂ - - ਜ਼ੇ - - ਜ਼ੈ - - ਜ਼ੋ - - ਜ਼ੌ - - ਜ਼ੰ - - ਜ਼ਾਂ + ਜ਼ + ਜ਼ਾ + ਜ਼ਿ + ਜ਼ੀ + ਜ਼ੁ + ਜ਼ੂ + ਜ਼ੇ + ਜ਼ੈ + ਜ਼ੋ + ਜ਼ੌ + ਜ਼ੰ + ਜ਼ਾਂ Play RTL @@ -3544,41 +1727,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਫ਼ - - ਫ਼ਾ - - ਫ਼ਿ - - ਫ਼ੀ - - ਫ਼ੁ - - ਫ਼ੂ - - ਫ਼ੇ - - ਫ਼ੈ - - ਫ਼ੋ - - ਫ਼ੌ - - ਫ਼ੰ - ਫ਼ਾਂ + ਫ਼ + ਫ਼ਾ + ਫ਼ਿ + ਫ਼ੀ + ਫ਼ੁ + ਫ਼ੂ + ਫ਼ੇ + ਫ਼ੈ + ਫ਼ੋ + ਫ਼ੌ + ਫ਼ੰ + ਫ਼ਾਂ Play RTL @@ -3587,41 +1747,18 @@ src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js" Play LTR - - ਲ਼ - - ਲ਼ਾ - - ਲ਼ਿ - - ਲ਼ੀ - - ਲ਼ੁ - - ਲ਼ੂ - - ਲ਼ੇ - - ਲ਼ੈ - - ਲ਼ੋ - - ਲ਼ੌ - - ਲ਼ੰ - ਲ਼ਾਂ + ਲ਼ + ਲ਼ਾ + ਲ਼ਿ + ਲ਼ੀ + ਲ਼ੁ + ਲ਼ੂ + ਲ਼ੇ + ਲ਼ੈ + ਲ਼ੋ + ਲ਼ੌ + ਲ਼ੰ + ਲ਼ਾਂ Play RTL diff --git a/resources/public/scripts/muharni.js b/resources/public/scripts/muharni.js new file mode 100644 index 0000000..ab42548 --- /dev/null +++ b/resources/public/scripts/muharni.js @@ -0,0 +1,82 @@ +/** + * muharni.js + * + * Custom JavaScript functions, some dependent on JQuery, used in the `muharni` + * page. + */ + +/** + * An array for client side sound recordings made by the student. We don't + * strictly need one for each short and long character, but it will give a + * better experience for people who really get into it. + * + * There are two tables each of 39 rows and 12 columns, but we're going to + * pack both tables into the same array. So the long sounds will be rows 1 + * to 39 inclusive, and the short from 41 to 79 inclusive. + */ +const studentSounds = Array(80).fill(0).map(x => Array(13).fill(null)); + + + +function recordStudentSound() { + if (currentCell) { + $('#record-student').css('background-color', 'green'); + navigator.mediaDevices.getUserMedia({ audio: true }) + .then(stream => { + const mediaRecorder = new MediaRecorder(stream); + mediaRecorder.start(); + + const audioChunks = []; + + mediaRecorder.addEventListener("dataavailable", event => { + audioChunks.push(event.data); + }); + + setTimeout(() => { + mediaRecorder.stop(); + if (audioChunks.length > 0) { + studentSounds[currentCell.row][currentCell.col] = new Blob(audioChunks); + $('#play-student').prop('disabled', false); + } + $('#record-student').css('background-color', 'red'); + + }, 3000); + }); + } +} + +/** + * If a student sound has been recorded for the current cell, play it. + */ +function playStudentSound() { + if (currentCell) { + if (studentSounds[currentCell.row][currentCell.col] != null) { + new Audio(URL.createObjectURL(studentSounds[currentCell.row][currentCell.col])).play(); + } + } +} + + +$(document).ready(function() { + $(".entry").on("click", function(e) { + let cellId = e.currentTarget ? e.currentTarget.id : null; + + if (cellId) + { + $("#popup").css({ + 'left': e.pageX, + 'top': e.pageY + }); + + $("#character").text(e.currentTarget.innerText); + + $("#play-tutor").off("click"); /* trying to remove any previous click handler */ + $("#play-tutor").on("click", function(e){ + let audioUrl = "audio/" + cellId.slice(1) + ".mp3"; + new Audio( audioUrl).play(); + }); + + $("#popup").show(); + } + }); +}) \ No newline at end of file diff --git a/resources/public/style.css b/resources/public/style.css index 5ad6215..33c7a14 100644 --- a/resources/public/style.css +++ b/resources/public/style.css @@ -50,4 +50,5 @@ th { position: absolute; display: none; background-color: whitesmoke; + z-index: 10; } \ No newline at end of file diff --git a/src/muharni/construct.clj b/src/muharni/construct.clj index 0d3ff99..96a2551 100644 --- a/src/muharni/construct.clj +++ b/src/muharni/construct.clj @@ -83,25 +83,28 @@ "Emit a table cell describing one entry from entries with either the long or short audio clip available on click. " [^Integer row ^Integer col ^Boolean long?] - (let [audio (format - "audio/%02d%s.mp3" - (inc row) - ((columns col) (if long? :upper-latin :lower-latin))) + (let [r (inc row) + c ((columns col) (if long? :upper-latin :lower-latin)) + audio (format "audio/%02d%s.mp3" r c) char ((entries row) col)] (vector :td {:class "entry" - - :onclick (format - "showPopup( '%s', '%s', '%s', '%s')" - (if long? row (+ row 40)) - col - char - audio)} + :id (format "%s%02d%s" (if long? "l" "s") r c) + ;; :onclick (format + ;; "showPopup( '%s', '%s', '%s', '%s')" + ;; (if long? row (+ row 40)) + ;; col + ;; char + ;; audio) + } ;; (audio row col long?) - char))) + char))) ;; (entry-cell 3 4 true) (defn all-entries-cell + "Return a table cell which plays the sound for all entries in the specified + `row`, concatenated from left to right if `ltr?` is true else right to left, + and playing long recordings if `long?` is true else short recordings." [^Integer row ^Boolean ltr? ^Boolean long?] [:td {:class "play-row" :onclick (format "new Audio('audio/%s%s%02d_MP3WRAP.mp3').play();" @@ -112,6 +115,8 @@ (defn entries-row + "Return a table row for the specified `row` number for long recordings if + `long?` is true else short recordings." [^Integer row ^Boolean long?] (apply vector (concat [:tr] @@ -122,9 +127,10 @@ ;; (entries-row 3 true) (defn col-header-cell - [^Integer col] + "Return a header cell for the indicated `column`." + [^Integer column] (vector :th - (:name (columns col)))) + (:name (columns column)))) (defn col-headers-row [] @@ -136,19 +142,21 @@ ;; (col-headers-row) (defn play-column-row + "Return a table row of cells which play concatenated sounds for each column, + concatenating from top to bottom is `ttb?` is true, else bottom to top, and + playing long recordings if `long?` is true else short recordings." [^Boolean ttb? ^Boolean long?] (apply vector (concat [:tr] [[:td]] (map #(vector :td {:class "play-column" - :onclick + :onclick (format - "new Audio('audio/%s%s%s_MP3WRAP.mp3').play();" - (if ttb? "ttb" "btt") - (if long? "long" "short") - ((columns %) (if long? :upper-latin :lower-latin))) - } + "new Audio('audio/%s%s%s_MP3WRAP.mp3').play();" + (if ttb? "ttb" "btt") + (if long? "long" "short") + ((columns %) (if long? :upper-latin :lower-latin)))} (str "Play " (if ttb? "down" "up"))) (range (count columns))) [[:td]]))) @@ -156,6 +164,8 @@ ;; (play-column-row true true) (defn table + "Lay out a muharni table, playing long recordings if `long?` is true else + short recordings." [^Boolean long?] (apply vector @@ -171,6 +181,7 @@ ;; (table true) (defn page + "Construct the complete muharni tables page." [title] [:html [:head @@ -183,19 +194,19 @@ :src "scripts/muharni.js"}] [:title (str title)]] [:body {:id "body"} - [:div {:id "popup" + [:div {:id "popup" :onmouseout "hidePopup();" :style "display: none; border: thin solid gray; width: 10%"} [:p {:id "character" :style "text-align: center; margin: 0; font-size: 4em;"} "?"] [:table {:id "controls" :summary "Controls for audio playback and recording"} [:tr [:th "Tutor"] - [:td {:id "play-tutor"} [:button {:onclick "playTutorSound();"} + [:td [:button {:id "play-tutor"} "►"]]] [:tr [:th "You"] - [:td {:id "play-student"} [:button {:onclick "playStudentSound();"} "►"]] - [:td {:id "record-stop"} [:button {:onclick "recordStudentSound();"} "⏺"]]]]] + [:td [:button {:id "play-student"} "►"]] + [:td [:button {:id "record-stop"} "⏺"]]]]] [:h1 (str title)] [:button {:onclick "var l = document.getElementById('long'); var s = document.getElementById('short'); @@ -223,9 +234,7 @@ [:a {:href "https://github.com/simon-brooke/muharni"} "GitHub"]]]]]) (defn tidy-page - "Reads HTML as a string, emits cleaned-up HTML as a string. This is not yet - working with HTML as produced by Hiccup, since Hiccup is currently - entitifying single quotes within (JavaScript) strings." + "Reads HTML from `page` as a string, returns cleaned-up HTML as a string." [^String page] (let [tidy (Tidy.) props (doto (Properties.) @@ -239,14 +248,13 @@ ;; (set! (. config indentContent) true) ;; (set! (. config smartIndent) true) (doto (.getConfiguration tidy) (.addProps props) (.adjust)) - (.parse tidy (input-stream (.getBytes page)) + ;; NOTE: Hiccup is currently entitifying single quotes within + ;; (JavaScript) strings. This is NOT desirable behaviour! + (.parse tidy (input-stream (.getBytes (s/replace page #"\'" "'"))) output) - (.toString output))) + (str "\n" (.toString output)))) (spit "resources/public/index.html" (tidy-page - (s/replace - (str (html - ;;{:escape-strings? false} - (page "Muharni table"))) - #"\'" "'"))) + (str (html + (page "Muharni table")))))