final changes
This commit is contained in:
parent
92beec3c2d
commit
537752d6e5
|
|
@ -1,72 +1,72 @@
|
||||||
robots.txt,1761396900570,bfe106a3fb878dc83461c86818bf74fc1bdc7f28538ba613cd3e775516ce8b49
|
robots.txt,1761396900570,bfe106a3fb878dc83461c86818bf74fc1bdc7f28538ba613cd3e775516ce8b49
|
||||||
manifest.json,1761396900568,a9350a49aaac9fe94d3dd77b8270cc998c04ab97944a606189675022431faa51
|
manifest.json,1761396900568,a9350a49aaac9fe94d3dd77b8270cc998c04ab97944a606189675022431faa51
|
||||||
favicon.svg,1761396900561,a2a4880301751061a600b0bfc5c26fc413aed41e581516c4fa976bcb7fff6663
|
favicon.svg,1761396900561,a2a4880301751061a600b0bfc5c26fc413aed41e581516c4fa976bcb7fff6663
|
||||||
service-worker.js,1762704464986,78067025e3c748b0364fd3530a7dbff74bd239814203a53f6845cbd55e0e2607
|
service-worker.js,1770731008838,482a78ad904d2de94c78bd67419d1fdd8172535807b933a9670a304ceefa471a
|
||||||
index.html,1762704464985,57fb1091c5bf8037e3c602389a00e3d80233468408fd05d87722f1fe71a7dd1d
|
index.html,1770731008838,c1e744221cce5c0303625fa501638a0dc9411e7b3af246137116039c2715710f
|
||||||
precache-manifest.47857d818921d80727f3a0850ed0b94a.js,1762704464985,a8d9a4020e5112083b9b7ff4f98ac36fc385970906494ad15fd7658408924fb9
|
static/media/sub-ques-icon.366b4f1e.svg,1770731008776,8e397611007ec5db7581a4c1bcca006950390ddf652cae209bb3973a645af425
|
||||||
static/media/translate.610ad011.svg,1762704464942,c06f8a3d0c976b02429ce805d8a4944571ab0128ed2ce49c2d3ca134511ed120
|
asset-manifest.json,1770731008838,55979a73bf0cabe287dcdb56eb2af16dbe88affb823b4b1b91775b8d8a3c22ed
|
||||||
static/media/tru-fals-icon.d0b962d8.svg,1762704464941,a1deab7e5db8e8a94a9c5812dcde5f8cbfbe5da790da8500bf106980b9c79c33
|
static/media/student-engaged.53fb7b0b.svg,1770731008775,5f8e01d1a5efcbdf3aa00ed07de843ab84404a28b672ca91f4d70d89fa8b37cf
|
||||||
static/media/sub-ques-icon.366b4f1e.svg,1762704464942,8e397611007ec5db7581a4c1bcca006950390ddf652cae209bb3973a645af425
|
static/media/tru-fals-icon.d0b962d8.svg,1770731008776,a1deab7e5db8e8a94a9c5812dcde5f8cbfbe5da790da8500bf106980b9c79c33
|
||||||
static/media/student-engaged.53fb7b0b.svg,1762704464939,5f8e01d1a5efcbdf3aa00ed07de843ab84404a28b672ca91f4d70d89fa8b37cf
|
static/media/translate.610ad011.svg,1770731008777,c06f8a3d0c976b02429ce805d8a4944571ab0128ed2ce49c2d3ca134511ed120
|
||||||
asset-manifest.json,1762704464986,6e040301298d248f77a9e4a7eea95318288cf92ed742ecef21467ae7fce27e5c
|
static/media/question.0c505ed9.svg,1770731008773,29938066f93476c487414bb7a5dd5227d891c8ab8e115a74a7e7ffccd8d87b36
|
||||||
static/media/questions-icon.3d3c1aaf.svg,1762704464939,197f459a359b00c1c44b6ddd71cbc9160f593d1fe08534e3711e9d72a2956ef1
|
precache-manifest.b88347085d339f5dd4f7dc9522a46162.js,1770731008838,5cce4392ad28a60ff6d2d9fe8cec5f5c8796a994b1f717467d5e21204da74beb
|
||||||
static/media/quizexam.5545802e.svg,1762704464936,dfc1278bfcd264264a4d0e0e0247c229335abf0573439c5e9829c8607aacd569
|
static/media/PracticeKiaLogo.a8336af5.svg,1770731008750,1a592518bcfabb2f86669d06ae2fb7b2948bbdbfaf5a80d138ab30f4e482a0f8
|
||||||
static/media/PracticeKiaLogo.a8336af5.svg,1762704464882,1a592518bcfabb2f86669d06ae2fb7b2948bbdbfaf5a80d138ab30f4e482a0f8
|
static/media/quizexam.5545802e.svg,1770731008773,dfc1278bfcd264264a4d0e0e0247c229335abf0573439c5e9829c8607aacd569
|
||||||
static/media/question.0c505ed9.svg,1762704464936,29938066f93476c487414bb7a5dd5227d891c8ab8e115a74a7e7ffccd8d87b36
|
static/media/questions-icon.3d3c1aaf.svg,1770731008774,197f459a359b00c1c44b6ddd71cbc9160f593d1fe08534e3711e9d72a2956ef1
|
||||||
static/media/practice-icon.bf603115.svg,1762704464939,27b6a729d91914d899f4b3c1f817e26ac58d2ec0be54dc9b93c01f28adcdd00c
|
static/media/practice.f05e6f00.svg,1770731008773,13b094bcbbb8c50906b1ee0ce68305059e99319464dd4147b4c2194dbb460475
|
||||||
static/media/practice.f05e6f00.svg,1762704464936,13b094bcbbb8c50906b1ee0ce68305059e99319464dd4147b4c2194dbb460475
|
static/media/OdiSVGlogo.f0834bb1.svg,1770731008752,3ec1cab31a32db378894d796afedaee7c35f8ff99dfb1039b0bb757225a47235
|
||||||
static/media/mul-res-icon.8ef3b097.svg,1762704464939,1f0a79350cb5546361ef02af1657ad36efeff833fd7bb61db88a20e127a290b4
|
static/media/performance.88855f12.svg,1770731008773,03fc1b19005084049382091745d3f1f29a447763091ad4a9bc5d097c338671c9
|
||||||
static/media/mul-cho-icon.b3dc9ea9.svg,1762704464940,e8edbceb0eb49f7629cf0b8edf599f9347acbf0c6d1df2fa6145cbed03f37e1f
|
static/media/perf-icon.1597a235.svg,1770731008776,7183482b785de425506f49deb27bba02e906132ac7ce5af01f7da8452ef64f28
|
||||||
static/media/OdiSVGlogo.f0834bb1.svg,1762704464920,3ec1cab31a32db378894d796afedaee7c35f8ff99dfb1039b0bb757225a47235
|
static/media/mul-res-icon.8ef3b097.svg,1770731008776,1f0a79350cb5546361ef02af1657ad36efeff833fd7bb61db88a20e127a290b4
|
||||||
static/media/perf-icon.1597a235.svg,1762704464939,7183482b785de425506f49deb27bba02e906132ac7ce5af01f7da8452ef64f28
|
static/media/mul-cho-icon.b3dc9ea9.svg,1770731008776,e8edbceb0eb49f7629cf0b8edf599f9347acbf0c6d1df2fa6145cbed03f37e1f
|
||||||
static/media/performance.88855f12.svg,1762704464937,03fc1b19005084049382091745d3f1f29a447763091ad4a9bc5d097c338671c9
|
static/media/locale-icon.b3596424.svg,1770731008774,68618c76952aa4c5f2623bb010514871688960bb3b9edbcda0eab7eb75442054
|
||||||
static/media/locale-icon.b3596424.svg,1762704464938,68618c76952aa4c5f2623bb010514871688960bb3b9edbcda0eab7eb75442054
|
static/media/KaTeX_Typewriter-Regular.b8b8393d.woff2,1770731008771,54a0126379ac9b84c5745f17cd0ac9bf11532ea04c39d387d165a71caf77f8d2
|
||||||
static/media/KaTeX_Typewriter-Regular.b8b8393d.woff2,1762704464935,54a0126379ac9b84c5745f17cd0ac9bf11532ea04c39d387d165a71caf77f8d2
|
static/media/KaTeX_Size4-Regular.61522cd3.woff2,1770731008771,65378bc44e4f908ff3e7d3b5a36f1351cd29dbed446fcf86ebe0655afefe9ea8
|
||||||
static/media/KaTeX_Size4-Regular.61522cd3.woff2,1762704464932,65378bc44e4f908ff3e7d3b5a36f1351cd29dbed446fcf86ebe0655afefe9ea8
|
static/media/KaTeX_Typewriter-Regular.0e046058.woff,1770731008771,82cff08904dbae816ffe38a914d56622c9b677680bba6a629e584a19ffb6e873
|
||||||
static/media/KaTeX_Typewriter-Regular.0e046058.woff,1762704464935,82cff08904dbae816ffe38a914d56622c9b677680bba6a629e584a19ffb6e873
|
static/media/KaTeX_Size4-Regular.3045a61f.woff,1770731008771,c397a0db368b7313fdae7297ab0efb8f25f1bc12afc4ce691dabf8e0918017fa
|
||||||
static/media/KaTeX_Size4-Regular.27a23ee6.ttf,1762704464935,df3392005f1d7a6f9bd8cbc0d1e0f06c147944fdd86e3316fd38d4f55f8e4a9f
|
static/media/KaTeX_Size3-Regular.9108a400.woff2,1770731008767,01dd9815f099722e1f7958ab976d9c0ee81615fa39699daf775fdd8a953ff8b1
|
||||||
static/media/KaTeX_Size3-Regular.4de844d4.woff,1762704464935,4398fd91cc5e6b45e4293262c5361ada3a54a24aff0d7a38bc70d3a242f0ef27
|
static/media/KaTeX_Size4-Regular.27a23ee6.ttf,1770731008771,df3392005f1d7a6f9bd8cbc0d1e0f06c147944fdd86e3316fd38d4f55f8e4a9f
|
||||||
static/media/KaTeX_Size3-Regular.963af864.ttf,1762704464934,f94a1dddcfc1df9beb0ecfaf0a73c3df96009a8d7e8a098ada1aa3a39e9ca678
|
static/media/KaTeX_Size3-Regular.4de844d4.woff,1770731008769,4398fd91cc5e6b45e4293262c5361ada3a54a24aff0d7a38bc70d3a242f0ef27
|
||||||
static/media/KaTeX_Size3-Regular.9108a400.woff2,1762704464932,01dd9815f099722e1f7958ab976d9c0ee81615fa39699daf775fdd8a953ff8b1
|
static/media/KaTeX_Size3-Regular.963af864.ttf,1770731008771,f94a1dddcfc1df9beb0ecfaf0a73c3df96009a8d7e8a098ada1aa3a39e9ca678
|
||||||
static/media/KaTeX_Size2-Regular.95a1da91.woff2,1762704464932,47c15e4348ddda442adae347550b466a6325266ccf8d7a4793481682b5bdf4f2
|
static/media/KaTeX_Size2-Regular.b0628bfd.woff,1770731008767,e23e150fad1a0531631c97f0170716a09b51211d3ad23c84794647ef603a19de
|
||||||
static/media/KaTeX_Size2-Regular.b0628bfd.woff,1762704464932,e23e150fad1a0531631c97f0170716a09b51211d3ad23c84794647ef603a19de
|
static/media/KaTeX_Size2-Regular.95a1da91.woff2,1770731008767,47c15e4348ddda442adae347550b466a6325266ccf8d7a4793481682b5bdf4f2
|
||||||
static/media/KaTeX_Size1-Regular.82ef26dc.woff2,1762704464931,353eb899698a648194c4bfabf250818092ebfdee0f3078346c3acb4194797f48
|
static/media/KaTeX_Size2-Regular.1fdda0e5.ttf,1770731008767,1685351b16075c0e5c880bbb9c6a3b4c5161ac3c852cc8a67963a37d7311b2b9
|
||||||
static/media/KaTeX_Size1-Regular.4788ba5b.woff,1762704464932,8e8412c0abbcb89ea321e50ec95b55bfe9d77486c84664fbca5b9b101bab7f3d
|
static/media/KaTeX_Size1-Regular.4788ba5b.woff,1770731008766,8e8412c0abbcb89ea321e50ec95b55bfe9d77486c84664fbca5b9b101bab7f3d
|
||||||
static/media/KaTeX_Size2-Regular.1fdda0e5.ttf,1762704464936,1685351b16075c0e5c880bbb9c6a3b4c5161ac3c852cc8a67963a37d7311b2b9
|
static/media/KaTeX_Script-Regular.1b3161eb.woff2,1770731008766,a5bfd2c095c085b45d10126c94e5cc116a0ea8fd7946a49b54a95da414535890
|
||||||
static/media/KaTeX_Size4-Regular.3045a61f.woff,1762704464935,c397a0db368b7313fdae7297ab0efb8f25f1bc12afc4ce691dabf8e0918017fa
|
static/media/KaTeX_Size1-Regular.0d8d9204.ttf,1770731008767,535e05d118e935a5a1ce5be35dc03a4b20a69ccc5f25210206deaed676c16a64
|
||||||
static/media/KaTeX_Script-Regular.1b3161eb.woff2,1762704464931,a5bfd2c095c085b45d10126c94e5cc116a0ea8fd7946a49b54a95da414535890
|
static/media/KaTeX_Size1-Regular.82ef26dc.woff2,1770731008766,353eb899698a648194c4bfabf250818092ebfdee0f3078346c3acb4194797f48
|
||||||
static/media/KaTeX_Size1-Regular.0d8d9204.ttf,1762704464935,535e05d118e935a5a1ce5be35dc03a4b20a69ccc5f25210206deaed676c16a64
|
static/media/KaTeX_Script-Regular.a82fa2a7.woff,1770731008766,84a67d2df883ac10ca688757491e777b64ef90f94ca712cc23b64a8c97de68af
|
||||||
static/media/KaTeX_Script-Regular.a189c37d.ttf,1762704464931,ec985a3df1d229119c660bfaa16e4be32ec7391f09d9c1e220cef2b149745a1a
|
static/media/KaTeX_SansSerif-Regular.1ac3ed6e.woff2,1770731008764,2836d2dafad00dd468d7e2b8f305eeb3af4f434980bc7efb3c696e6968cec09b
|
||||||
static/media/KaTeX_SansSerif-Regular.5f8637ee.woff,1762704464929,d0d8050720c1b4cedb8cfe1feb22dc45fc0382ff62b5504c7fc09e1c24652544
|
static/media/KaTeX_SansSerif-Regular.5f8637ee.woff,1770731008766,d0d8050720c1b4cedb8cfe1feb22dc45fc0382ff62b5504c7fc09e1c24652544
|
||||||
static/media/KaTeX_SansSerif-Italic.f60b4a34.ttf,1762704464931,cf5a68a17d022639016a9da976bb6a4ab05e06ccd74ce712db3009adcf34fd32
|
static/media/KaTeX_Script-Regular.a189c37d.ttf,1770731008766,ec985a3df1d229119c660bfaa16e4be32ec7391f09d9c1e220cef2b149745a1a
|
||||||
static/media/KaTeX_SansSerif-Italic.ef725de5.woff,1762704464928,9476b240a74b872f7cbe8517997d68df0c375e3d52a58e165f893a7191f54e86
|
static/media/KaTeX_SansSerif-Italic.ef725de5.woff,1770731008763,9476b240a74b872f7cbe8517997d68df0c375e3d52a58e165f893a7191f54e86
|
||||||
static/media/KaTeX_SansSerif-Regular.3243452e.ttf,1762704464932,89e5632b7b1d0a3b94bcb71efd36838bb407d575f0212a8d3499b3c3c0fcb12c
|
static/media/KaTeX_SansSerif-Italic.e934cbc8.woff2,1770731008762,2a474c036e86d3fcabb4f8d68318ccce7e5e103f27f804e1fd74a1646ed15cae
|
||||||
static/media/KaTeX_SansSerif-Bold.ad546b47.woff2,1762704464931,9a2e88c7f50de44ea6842c0dc687cd0fc54cff06a47bf6408cf1eba76e25bb81
|
static/media/KaTeX_SansSerif-Regular.3243452e.ttf,1770731008765,89e5632b7b1d0a3b94bcb71efd36838bb407d575f0212a8d3499b3c3c0fcb12c
|
||||||
static/media/KaTeX_SansSerif-Regular.1ac3ed6e.woff2,1762704464931,2836d2dafad00dd468d7e2b8f305eeb3af4f434980bc7efb3c696e6968cec09b
|
static/media/KaTeX_SansSerif-Bold.ad546b47.woff2,1770731008763,9a2e88c7f50de44ea6842c0dc687cd0fc54cff06a47bf6408cf1eba76e25bb81
|
||||||
static/media/KaTeX_SansSerif-Bold.0e897d27.woff,1762704464928,06df349cd9f09f229c964190cea7b3487aefe84f055207793ddf3e83a3db281a
|
static/media/practice-icon.bf603115.svg,1770731008775,27b6a729d91914d899f4b3c1f817e26ac58d2ec0be54dc9b93c01f28adcdd00c
|
||||||
static/media/KaTeX_Script-Regular.a82fa2a7.woff,1762704464931,84a67d2df883ac10ca688757491e777b64ef90f94ca712cc23b64a8c97de68af
|
static/media/KaTeX_SansSerif-Italic.f60b4a34.ttf,1770731008765,cf5a68a17d022639016a9da976bb6a4ab05e06ccd74ce712db3009adcf34fd32
|
||||||
static/media/KaTeX_SansSerif-Italic.e934cbc8.woff2,1762704464928,2a474c036e86d3fcabb4f8d68318ccce7e5e103f27f804e1fd74a1646ed15cae
|
static/media/KaTeX_SansSerif-Bold.f2ac7312.ttf,1770731008765,a248317ab48e3dc924f1c87b13a27cc5e6d887272d02b1c1cab72795de2c9591
|
||||||
static/media/KaTeX_SansSerif-Bold.f2ac7312.ttf,1762704464929,a248317ab48e3dc924f1c87b13a27cc5e6d887272d02b1c1cab72795de2c9591
|
static/media/KaTeX_SansSerif-Bold.0e897d27.woff,1770731008763,06df349cd9f09f229c964190cea7b3487aefe84f055207793ddf3e83a3db281a
|
||||||
static/media/logo.0dd03933.png,1762704464920,b9716ed1f565a052edc1154a207334de81856339e8ca43d5d8f51041f3785085
|
static/media/KaTeX_Typewriter-Regular.6bf42875.ttf,1770731008772,3f8e9a7e1c8f9835a5fdbf303b775991de8d868a7b8ee8eb1f32b0b01ed1b90b
|
||||||
static/media/KaTeX_Typewriter-Regular.6bf42875.ttf,1762704464935,3f8e9a7e1c8f9835a5fdbf303b775991de8d868a7b8ee8eb1f32b0b01ed1b90b
|
static/media/logo.0dd03933.png,1770731008752,b9716ed1f565a052edc1154a207334de81856339e8ca43d5d8f51041f3785085
|
||||||
static/media/KaTeX_Math-Italic.fe5ed587.ttf,1762704464931,1cf503e99eee1d6931a59f03a2718c879571c4bc878d8c5bb310c057e15fcffa
|
static/media/KaTeX_Math-Italic.ed7aea12.woff,1770731008761,7f65f9be10f45caa82382689fe21bf358899ac28002cbd44d3696eea1d6affee
|
||||||
static/media/KaTeX_Math-Italic.ed7aea12.woff,1762704464928,7f65f9be10f45caa82382689fe21bf358899ac28002cbd44d3696eea1d6affee
|
static/media/KaTeX_Math-Italic.fe5ed587.ttf,1770731008762,1cf503e99eee1d6931a59f03a2718c879571c4bc878d8c5bb310c057e15fcffa
|
||||||
static/media/KaTeX_Fraktur-Regular.f9e6a99f.woff2,1762704464923,30c5ebf8d693d9a6db88068bd72eca6aaab2313d91682e147db6ae4d43efc013
|
static/media/KaTeX_Fraktur-Regular.f9e6a99f.woff2,1770731008756,30c5ebf8d693d9a6db88068bd72eca6aaab2313d91682e147db6ae4d43efc013
|
||||||
static/media/KaTeX_Fraktur-Regular.e435cda5.woff,1762704464923,1ed825d761d10b653432e13606827af1a1621353e75a2bb10c9fdc3f9568cbf2
|
static/media/KaTeX_Fraktur-Regular.e435cda5.woff,1770731008756,1ed825d761d10b653432e13606827af1a1621353e75a2bb10c9fdc3f9568cbf2
|
||||||
static/media/KaTeX_Fraktur-Bold.796f3797.woff2,1762704464923,440fe396e2bc189c86a666bed548bed61a5482c3afaa04eb41e5b4e977f9accd
|
static/media/KaTeX_Fraktur-Regular.97a699d8.ttf,1770731008756,c84e9b333b1c3dfd0edf947b0166c4436bded08309d47955b99fa4e43177bdaf
|
||||||
static/media/KaTeX_Fraktur-Bold.b9d7c449.ttf,1762704464923,05ef840382f3b9a91d6a08c707c5288ed173a0623b5f986c92d03afd59d2972e
|
static/media/KaTeX_Fraktur-Bold.b9d7c449.ttf,1770731008756,05ef840382f3b9a91d6a08c707c5288ed173a0623b5f986c92d03afd59d2972e
|
||||||
static/media/KaTeX_Fraktur-Regular.97a699d8.ttf,1762704464923,c84e9b333b1c3dfd0edf947b0166c4436bded08309d47955b99fa4e43177bdaf
|
static/media/KaTeX_Fraktur-Bold.796f3797.woff2,1770731008756,440fe396e2bc189c86a666bed548bed61a5482c3afaa04eb41e5b4e977f9accd
|
||||||
static/media/KaTeX_Caligraphic-Regular.e6fb499f.ttf,1762704464923,7d6aca5b5f7d749a0fd1f9e4e7449b1b79a347fd08696f5cadc303ea5e3f3f1c
|
static/media/KaTeX_Caligraphic-Regular.08d95d99.woff2,1770731008752,d4574df1e20cd3519662aff34dcdfa42339c48bfd9dd675d804723794949a8c8
|
||||||
static/media/KaTeX_Caligraphic-Regular.a25140fb.woff,1762704464921,41d8909c711af0e11e9df1fa5bbd8c14071e22130fbac9b6518e920386152038
|
static/media/KaTeX_Caligraphic-Bold.de2ba279.woff,1770731008752,4e80ee5909ce3b5b965be5b11b75919d58dc6633d372869dbbbbd13f93dbd662
|
||||||
static/media/KaTeX_Fraktur-Bold.40934fc0.woff,1762704464923,8a9c9bd2084df9282df1c63c593dda4c662d2a8111d09956d5bf2c92e6213f4a
|
static/media/KaTeX_Caligraphic-Regular.a25140fb.woff,1770731008756,41d8909c711af0e11e9df1fa5bbd8c14071e22130fbac9b6518e920386152038
|
||||||
static/media/KaTeX_Caligraphic-Bold.de2ba279.woff,1762704464920,4e80ee5909ce3b5b965be5b11b75919d58dc6633d372869dbbbbd13f93dbd662
|
static/media/KaTeX_Caligraphic-Bold.a9e9b095.woff2,1770731008753,80906c4f0be4d8dccfbb0d3b8cafe79b6ba8bc3200c3c9f060b5616a4d8dec39
|
||||||
static/media/KaTeX_Caligraphic-Regular.08d95d99.woff2,1762704464920,d4574df1e20cd3519662aff34dcdfa42339c48bfd9dd675d804723794949a8c8
|
static/media/KaTeX_Caligraphic-Regular.e6fb499f.ttf,1770731008754,7d6aca5b5f7d749a0fd1f9e4e7449b1b79a347fd08696f5cadc303ea5e3f3f1c
|
||||||
static/media/KaTeX_Caligraphic-Bold.a9e9b095.woff2,1762704464920,80906c4f0be4d8dccfbb0d3b8cafe79b6ba8bc3200c3c9f060b5616a4d8dec39
|
static/media/KaTeX_Fraktur-Bold.40934fc0.woff,1770731008756,8a9c9bd2084df9282df1c63c593dda4c662d2a8111d09956d5bf2c92e6213f4a
|
||||||
static/media/GrayscalePKLogo.6bb74404.svg,1762704464920,576b38300e49eda6407adce420001e7ad0333cca317eb668aff457c3258dcca2
|
static/media/GrayscalePKLogo.6bb74404.svg,1770731008754,576b38300e49eda6407adce420001e7ad0333cca317eb668aff457c3258dcca2
|
||||||
static/media/getFetch.2b2b7da4.cjs,1762704464920,b2d82abee5b8af22b81d67fc20b3feef1eaaf04585dbc24ec755e3304c469096
|
static/media/getFetch.2b2b7da4.cjs,1770731008752,b2d82abee5b8af22b81d67fc20b3feef1eaaf04585dbc24ec755e3304c469096
|
||||||
static/media/KaTeX_Caligraphic-Bold.497bf407.ttf,1762704464920,50b8dd982d91b531aaf3009e30dc42e72635d476bd0e3d6fe9ba2bdb5c7a036f
|
static/media/KaTeX_Caligraphic-Bold.497bf407.ttf,1770731008752,50b8dd982d91b531aaf3009e30dc42e72635d476bd0e3d6fe9ba2bdb5c7a036f
|
||||||
static/media/exam-icon.10f48851.svg,1762704464939,b766e9975582af716870a844f8deabd4d80e33a47c400d36cee6bc4840062693
|
static/media/feature-2.36f8d7e2.webp,1770731008752,fc1c038517abf3b731ff3a4675cbaf1a6aa1150ca970762dd0ffc4199b92b75c
|
||||||
static/media/feature-2.36f8d7e2.webp,1762704464918,fc1c038517abf3b731ff3a4675cbaf1a6aa1150ca970762dd0ffc4199b92b75c
|
static/media/exam-icon.10f48851.svg,1770731008774,b766e9975582af716870a844f8deabd4d80e33a47c400d36cee6bc4840062693
|
||||||
assets/images/locale-icon.svg,1761396900579,610498c7ca3b5800d268b1654473f0b1d79de2c6493a7c6982bef90456d35179
|
assets/images/locale-icon.svg,1761396900579,610498c7ca3b5800d268b1654473f0b1d79de2c6493a7c6982bef90456d35179
|
||||||
assets/images/icons/icon-96x96.png,1761396900602,43a8ac4df8945d7a44e3e4911032214f01eaea92267baa31a93e77942b424c73
|
assets/images/icons/icon-96x96.png,1761396900602,43a8ac4df8945d7a44e3e4911032214f01eaea92267baa31a93e77942b424c73
|
||||||
assets/images/icons/icon-72x72.png,1761396900600,a42f1df8ab0a8fe921573976d49158e1a2c52fe430460c869947f221aba30a94
|
assets/images/icons/icon-72x72.png,1761396900600,a42f1df8ab0a8fe921573976d49158e1a2c52fe430460c869947f221aba30a94
|
||||||
|
|
@ -76,52 +76,52 @@ assets/images/icons/icon-192x192.png,1761396900592,ac9fe46fbeb4c54fb3c838b645380
|
||||||
assets/images/icons/icon-152x152.png,1761396900590,95a5a117fbd5640f1f1f13c9923398545e3f5b66734ff6c8ce67c942319a8b67
|
assets/images/icons/icon-152x152.png,1761396900590,95a5a117fbd5640f1f1f13c9923398545e3f5b66734ff6c8ce67c942319a8b67
|
||||||
assets/images/icons/icon-144x144.png,1761396900588,e42168e0e1abb5bd7811ebe1b5a2183d0ce287bf266c2efd8d97a23d23ca8d00
|
assets/images/icons/icon-144x144.png,1761396900588,e42168e0e1abb5bd7811ebe1b5a2183d0ce287bf266c2efd8d97a23d23ca8d00
|
||||||
assets/images/icons/icon-128x128.png,1761396900585,45b577c86e7c03fef868bfa3f96810c5b36f31156c32c0d85620d2e6fe1fc85b
|
assets/images/icons/icon-128x128.png,1761396900585,45b577c86e7c03fef868bfa3f96810c5b36f31156c32c0d85620d2e6fe1fc85b
|
||||||
static/media/delete-icon.da38c0f4.svg,1762704464942,8078772ee88a0588989eec477da1ca949430f3f06efaa9c2db860b74c65f6722
|
static/media/dashboard.8ec7624b.svg,1770731008772,5a5b5d4bf416d414842bd5eac30432b592342a392450e52943f067db4077bec1
|
||||||
static/media/dashboard.8ec7624b.svg,1762704464936,5a5b5d4bf416d414842bd5eac30432b592342a392450e52943f067db4077bec1
|
static/media/delete-icon.da38c0f4.svg,1770731008777,8078772ee88a0588989eec477da1ca949430f3f06efaa9c2db860b74c65f6722
|
||||||
static/media/classes.3b73dba0.svg,1762704464936,2abfbb7015d5bccb8640fd0614d3782c048672c9543fe17d127db63287ac141d
|
static/media/class-icon.6afd34b5.svg,1770731008774,a2f492c6c9c7b5201773062dfe90c238c12bc00bec097dc06141201f02b9588e
|
||||||
static/media/class-icon.6afd34b5.svg,1762704464938,a2f492c6c9c7b5201773062dfe90c238c12bc00bec097dc06141201f02b9588e
|
static/media/batch-icon.bf664771.svg,1770731008776,7519e2a92f436a2f46ef7420d721e24df2837d7fce7fe8c30f4bc12980b3d1a0
|
||||||
static/media/Checkmark.1356376c.svg,1762704464948,aa56f27c8198bcae3236a881a7134cd3b7d3dbb048ec75654e8ce2d4710ce027
|
static/media/batch.3fcff66e.svg,1770731008773,f29038480286f091e3805a43f90ca5a70a13bbcef3076831e0b29b1fcb61d862
|
||||||
static/media/batch.3fcff66e.svg,1762704464936,f29038480286f091e3805a43f90ca5a70a13bbcef3076831e0b29b1fcb61d862
|
static/media/classes.3b73dba0.svg,1770731008773,2abfbb7015d5bccb8640fd0614d3782c048672c9543fe17d127db63287ac141d
|
||||||
static/media/batch-icon.bf664771.svg,1762704464939,7519e2a92f436a2f46ef7420d721e24df2837d7fce7fe8c30f4bc12980b3d1a0
|
static/media/Checkmark.1356376c.svg,1770731008788,aa56f27c8198bcae3236a881a7134cd3b7d3dbb048ec75654e8ce2d4710ce027
|
||||||
static/media/KaTeX_Math-Italic.d8b7a801.woff2,1762704464928,463c7b305e898eff5291b63c93cc5cb344035692b6913c1c79073ecbb6243bd4
|
static/media/auth-BG.2835584f.svg,1770731008752,238d3a2ff1aead1c4aaed0e07d23d2c1164f8be0ef2d5fced5c5ade370f3c5bf
|
||||||
static/media/auth-BG.2835584f.svg,1762704464918,238d3a2ff1aead1c4aaed0e07d23d2c1164f8be0ef2d5fced5c5ade370f3c5bf
|
static/media/KaTeX_Math-Italic.d8b7a801.woff2,1770731008761,463c7b305e898eff5291b63c93cc5cb344035692b6913c1c79073ecbb6243bd4
|
||||||
static/media/KaTeX_Math-BoldItalic.1320454d.woff2,1762704464928,6845d5004e7c212c58d4760856f246a648906e552b0fe06cc1602598c12451c2
|
static/media/KaTeX_Math-BoldItalic.1320454d.woff2,1770731008763,6845d5004e7c212c58d4760856f246a648906e552b0fe06cc1602598c12451c2
|
||||||
static/media/KaTeX_Math-BoldItalic.48155e43.woff,1762704464928,85cd1b757a1e147fa60d9a33c097ac463cd361d7d29278acb6f9fa12b1ab1807
|
static/media/add-circle.0011f2bc.svg,1770731008774,d9e5d90e8de1ce16df5720b43ca79543036fcf1a6cd6439a9b15c5a97d269f17
|
||||||
static/media/add-circle.0011f2bc.svg,1762704464938,d9e5d90e8de1ce16df5720b43ca79543036fcf1a6cd6439a9b15c5a97d269f17
|
static/media/KaTeX_Math-BoldItalic.48155e43.woff,1770731008761,85cd1b757a1e147fa60d9a33c097ac463cd361d7d29278acb6f9fa12b1ab1807
|
||||||
static/media/KaTeX_Math-BoldItalic.6589c4f1.ttf,1762704464928,7015e678d3236d50b3fefa9ba69b1473ed3f8e75adee5cace69614afcfc2f5bf
|
static/media/KaTeX_Main-Regular.f8a7f19f.woff2,1770731008761,d9e0bfb38531e96891681155d118070f8026358d2951cb8470c394b91809288d
|
||||||
static/media/KaTeX_Main-Regular.f8a7f19f.woff2,1762704464928,d9e0bfb38531e96891681155d118070f8026358d2951cb8470c394b91809288d
|
static/media/KaTeX_Main-Italic.65297062.woff2,1770731008758,d85767f0359678f357e48c84e9872f47b139674a79b7b71db0fdbb1317c26d12
|
||||||
static/media/KaTeX_Main-Italic.65297062.woff2,1762704464923,d85767f0359678f357e48c84e9872f47b139674a79b7b71db0fdbb1317c26d12
|
static/media/KaTeX_Main-Regular.f1cdb692.woff,1770731008761,17452652a1119d3bcd8a71406fc8698a686f53c3923cb96e790e6a5d36d08ab1
|
||||||
static/media/KaTeX_Main-Italic.8ffd28f6.woff,1762704464928,96448f48ed2241c86e68c8461f1640b4420784ddafae0187411614145e1b86b7
|
static/media/KaTeX_Main-Italic.8ffd28f6.woff,1770731008761,96448f48ed2241c86e68c8461f1640b4420784ddafae0187411614145e1b86b7
|
||||||
static/media/KaTeX_Main-Regular.f1cdb692.woff,1762704464928,17452652a1119d3bcd8a71406fc8698a686f53c3923cb96e790e6a5d36d08ab1
|
static/media/KaTeX_Main-BoldItalic.d8737343.woff2,1770731008756,c626855b7d035c168c7d791991df8d939103de514bfb4451d79d386573284c72
|
||||||
static/media/KaTeX_Main-BoldItalic.d8737343.woff2,1762704464923,c626855b7d035c168c7d791991df8d939103de514bfb4451d79d386573284c72
|
static/media/KaTeX_Math-BoldItalic.6589c4f1.ttf,1770731008761,7015e678d3236d50b3fefa9ba69b1473ed3f8e75adee5cace69614afcfc2f5bf
|
||||||
static/media/KaTeX_Main-BoldItalic.5f875f98.woff,1762704464923,70abceb4229394d854d0f09cb4c174bb3044efcb0c914765da73cef487dff695
|
static/media/KaTeX_Main-Italic.39349e0a.ttf,1770731008758,1d8cb78615c1bf0e6382d19209ab3b545f62297a75006719c9fe6a82f4b3b282
|
||||||
static/media/KaTeX_Main-Bold.a9382e25.woff2,1762704464923,5a85aa329e280b7ebe07d42616135b81a43b3e7699beb03e4f85cb85cc1c42a0
|
static/media/KaTeX_Main-Bold.4cdba646.woff,1770731008758,0a80f97f42c420ce18f49adadd979581ee6c7b2fea155197d564eab7d4a33b94
|
||||||
static/media/KaTeX_Main-Italic.39349e0a.ttf,1762704464928,1d8cb78615c1bf0e6382d19209ab3b545f62297a75006719c9fe6a82f4b3b282
|
static/media/KaTeX_Main-BoldItalic.5f875f98.woff,1770731008758,70abceb4229394d854d0f09cb4c174bb3044efcb0c914765da73cef487dff695
|
||||||
static/media/KaTeX_Main-BoldItalic.52fb39b0.ttf,1762704464926,2c270214096b727d963e376c50c9372e0696e3807ab3593c99721e98a2350d9a
|
static/media/KaTeX_Main-Bold.a9382e25.woff2,1770731008756,5a85aa329e280b7ebe07d42616135b81a43b3e7699beb03e4f85cb85cc1c42a0
|
||||||
static/media/KaTeX_Main-Bold.4cdba646.woff,1762704464923,0a80f97f42c420ce18f49adadd979581ee6c7b2fea155197d564eab7d4a33b94
|
static/media/KaTeX_Main-BoldItalic.52fb39b0.ttf,1770731008756,2c270214096b727d963e376c50c9372e0696e3807ab3593c99721e98a2350d9a
|
||||||
static/media/KaTeX_Main-Regular.818582da.ttf,1762704464928,303bad6cffa808e8161bca30051b6116e39cd128fad1565f4cfe87d57e54f715
|
static/media/KaTeX_Main-Regular.818582da.ttf,1770731008761,303bad6cffa808e8161bca30051b6116e39cd128fad1565f4cfe87d57e54f715
|
||||||
static/js/runtime-main.6081d0ec.js.map,1762704464986,c8123cc8ee1dd267e60bcb091eaf2d25ed7a5509451d8e86afbc787380151e00
|
static/media/KaTeX_Main-Bold.8e431f7e.ttf,1770731008758,05a2a07c87d1436ec1339788f266910afda2ef11c2c159b5f9da217e5862678b
|
||||||
static/media/KaTeX_Main-Bold.8e431f7e.ttf,1762704464923,05a2a07c87d1436ec1339788f266910afda2ef11c2c159b5f9da217e5862678b
|
static/media/KaTeX_AMS-Regular.66c67820.woff2,1770731008772,d3c3fdcc36a8dd47d2361854708db75facde86716ac4aff340c27a53edb91fa3
|
||||||
static/js/runtime-main.6081d0ec.js,1762704464949,7a1c482f42a20039677e21ce34ce022263885023785a057bc06f70d610dc40ee
|
static/js/runtime-main.6081d0ec.js,1770731008788,7a1c482f42a20039677e21ce34ce022263885023785a057bc06f70d610dc40ee
|
||||||
static/media/KaTeX_AMS-Regular.66c67820.woff2,1762704464920,d3c3fdcc36a8dd47d2361854708db75facde86716ac4aff340c27a53edb91fa3
|
static/js/runtime-main.6081d0ec.js.map,1770731008838,c8123cc8ee1dd267e60bcb091eaf2d25ed7a5509451d8e86afbc787380151e00
|
||||||
static/media/feature-1.ea5c34ea.svg,1762704464920,d802659785b69508e521d5543fca40a58cb9076521ffc3e6b006f4786b8079f8
|
static/media/feature-1.ea5c34ea.svg,1770731008752,d802659785b69508e521d5543fca40a58cb9076521ffc3e6b006f4786b8079f8
|
||||||
static/media/KaTeX_AMS-Regular.10824af7.woff,1762704464920,6c46aa92e4310f9c70a445e7a423691f1704dce1cdc29fdd2e0c83d195fcee10
|
static/media/KaTeX_AMS-Regular.10824af7.woff,1770731008752,6c46aa92e4310f9c70a445e7a423691f1704dce1cdc29fdd2e0c83d195fcee10
|
||||||
static/media/KaTeX_AMS-Regular.56573229.ttf,1762704464923,c2f8c0a308e057708caa69b82f187cbff35ecda40162ceed7cf66bb958032bba
|
static/media/KaTeX_AMS-Regular.56573229.ttf,1770731008752,c2f8c0a308e057708caa69b82f187cbff35ecda40162ceed7cf66bb958032bba
|
||||||
static/media/feature-3.3d5d81e9.svg,1762704464920,ba23393d89776cb78f7a559903baff48be76665abd99bdd4e5ea103c5e5ed88b
|
static/media/feature-3.3d5d81e9.svg,1770731008752,ba23393d89776cb78f7a559903baff48be76665abd99bdd4e5ea103c5e5ed88b
|
||||||
static/js/4.5c9ee2d0.chunk.js.map,1762704464986,d8d9e9abbe0f04082879cc9c90c0fb1d1f28dfbba11b3d2b78b65d66b35b8b96
|
static/js/4.5c9ee2d0.chunk.js.map,1770731008838,d8d9e9abbe0f04082879cc9c90c0fb1d1f28dfbba11b3d2b78b65d66b35b8b96
|
||||||
static/js/4.5c9ee2d0.chunk.js,1762704464949,59a7c7888c9e73c67d5bf9455563cee7e9397cd306a614609a84aee098da6cad
|
static/js/4.5c9ee2d0.chunk.js,1770731008795,59a7c7888c9e73c67d5bf9455563cee7e9397cd306a614609a84aee098da6cad
|
||||||
static/js/3.0ae51bd8.chunk.js.map,1762704464986,3bec27d014f16133ccaade384debea7dc56f5deec998a15216216de721bad82a
|
static/js/3.0ae51bd8.chunk.js.map,1770731008838,3bec27d014f16133ccaade384debea7dc56f5deec998a15216216de721bad82a
|
||||||
static/js/3.0ae51bd8.chunk.js,1762704464949,6cdf0e52237283728c7fc227c590b009fd353a8fa0acc12b923b2e79fe4632b9
|
static/js/3.0ae51bd8.chunk.js,1770731008795,6cdf0e52237283728c7fc227c590b009fd353a8fa0acc12b923b2e79fe4632b9
|
||||||
static/js/2.f1872374.chunk.js.LICENSE.txt,1762704464950,bc485844887473eb82502f45e4e363ca58190ef2e4a8beb067ea4edb86b11522
|
static/js/2.bdcfca92.chunk.js.LICENSE.txt,1770731008797,bc485844887473eb82502f45e4e363ca58190ef2e4a8beb067ea4edb86b11522
|
||||||
static/js/main.70d2f001.chunk.js,1762704464948,3d8677571a3059a12b3c1c27668166f6956e585ac5385bb8142ea24c7c273526
|
static/js/main.566c7652.chunk.js,1770731008778,7a99cba7d531b55223ff7059d492704c01d44cd7c58b1faa6f2f64ec2695b08f
|
||||||
static/css/4.97cefae8.chunk.css,1762704464950,a89028fc172450f4ccc12fecd86c150cf0735405675044cee04cf2592756c3a5
|
static/css/4.97cefae8.chunk.css,1770731008797,a89028fc172450f4ccc12fecd86c150cf0735405675044cee04cf2592756c3a5
|
||||||
static/css/3.1bfbb5fe.chunk.css,1762704464949,fa53ebd8effa8804499790774262a950c68115e9b4ea9d295b07ae92473848c9
|
static/css/main.b9782f65.chunk.css,1770731008777,115aa90fc90106158cf0fd7a972fa326510d33a8e5481055d603540f1f116766
|
||||||
static/css/2.4ed2bec6.chunk.css,1762704464949,6b672aefb165bb49fe7761f8a920bd7efdfb60ae496f004f9443d6bf2a529434
|
static/css/2.4ed2bec6.chunk.css,1770731008788,6b672aefb165bb49fe7761f8a920bd7efdfb60ae496f004f9443d6bf2a529434
|
||||||
static/css/main.b9782f65.chunk.css,1762704464942,115aa90fc90106158cf0fd7a972fa326510d33a8e5481055d603540f1f116766
|
static/css/3.1bfbb5fe.chunk.css,1770731008788,fa53ebd8effa8804499790774262a950c68115e9b4ea9d295b07ae92473848c9
|
||||||
static/css/4.97cefae8.chunk.css.map,1762704464986,cceccec195cfcf6a0764663e84b5386fa8152a3f15e41bad1f79c3287313f005
|
static/css/4.97cefae8.chunk.css.map,1770731008838,cceccec195cfcf6a0764663e84b5386fa8152a3f15e41bad1f79c3287313f005
|
||||||
static/css/3.1bfbb5fe.chunk.css.map,1762704464986,8fc475e7ed4214343dbe8e12953947d213f2d77dd7472cc99b811bb8ee58a5c4
|
static/css/main.b9782f65.chunk.css.map,1770731008797,ae1202cb201526bddc6046fd5fd3669972e60c33bdcb2a8e79a39fc84f2c5503
|
||||||
static/js/main.70d2f001.chunk.js.map,1762704464986,810249b85784dfc2de58cb464bdb5cd59ba31451960f1ab91f19842b200edd9f
|
static/js/main.566c7652.chunk.js.map,1770731008838,66af6aedc25e5cca60f0147a079ab74328c1a67d602a8c1c8db6e9bdd3c09218
|
||||||
static/css/main.b9782f65.chunk.css.map,1762704464959,ae1202cb201526bddc6046fd5fd3669972e60c33bdcb2a8e79a39fc84f2c5503
|
static/css/3.1bfbb5fe.chunk.css.map,1770731008801,8fc475e7ed4214343dbe8e12953947d213f2d77dd7472cc99b811bb8ee58a5c4
|
||||||
static/css/2.4ed2bec6.chunk.css.map,1762704464959,2bd4fbcd3a9b593f1727d1006860d8ca592b270fcab15dbc28ba1f0c63391fe4
|
static/css/2.4ed2bec6.chunk.css.map,1770731008797,2bd4fbcd3a9b593f1727d1006860d8ca592b270fcab15dbc28ba1f0c63391fe4
|
||||||
static/js/2.f1872374.chunk.js,1762704464951,d8698341ec32ecca8a2a685aba96645f44c03b0fb5ff7f3b33fd0488a7a1b00b
|
static/js/2.bdcfca92.chunk.js,1770731008791,192def8e8054a74baac0d16daf01c4cd1307ac0e1de5f9094fe059db449e8d16
|
||||||
static/js/2.f1872374.chunk.js.map,1762704465002,0be0c48865eaee81ab852a3a6c543f111a98fd7fe6816a1650d37680b8ce46cc
|
static/js/2.bdcfca92.chunk.js.map,1770731008853,ab26184996e92c80b8438fcf5b995947365ffa83a2e1570badb3da9dfc380218
|
||||||
|
|
|
||||||
|
|
@ -38,6 +38,10 @@ class AttemptExam extends React.Component {
|
||||||
activeDetailQuestion: {},
|
activeDetailQuestion: {},
|
||||||
activeQuestionIndex: -1,
|
activeQuestionIndex: -1,
|
||||||
pauseUpdate: false,
|
pauseUpdate: false,
|
||||||
|
isSectionWise: false,
|
||||||
|
activeSectionIndex: 0,
|
||||||
|
sectionDeadline: null,
|
||||||
|
lockedSections: [],
|
||||||
};
|
};
|
||||||
|
|
||||||
this.onGetExamAttempt = this.onGetExamAttempt.bind(this);
|
this.onGetExamAttempt = this.onGetExamAttempt.bind(this);
|
||||||
|
|
@ -53,8 +57,54 @@ class AttemptExam extends React.Component {
|
||||||
componentDidMount() {
|
componentDidMount() {
|
||||||
this.onGetExamAttempt();
|
this.onGetExamAttempt();
|
||||||
this.sendHeartbeat();
|
this.sendHeartbeat();
|
||||||
|
|
||||||
|
// ⏱️ section timer watcher
|
||||||
|
this.sectionTimer = setInterval(this.checkSectionTimeout, 1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
checkSectionTimeout = () => {
|
||||||
|
const {
|
||||||
|
isSectionWise,
|
||||||
|
sectionDeadline,
|
||||||
|
activeSectionIndex,
|
||||||
|
sections,
|
||||||
|
lockedSections,
|
||||||
|
} = this.state;
|
||||||
|
|
||||||
|
if (!isSectionWise || !sectionDeadline) return;
|
||||||
|
|
||||||
|
if (Date.now() >= sectionDeadline) {
|
||||||
|
const nextSectionIndex = activeSectionIndex + 1;
|
||||||
|
|
||||||
|
// 🔒 lock current section
|
||||||
|
const newLockedSections = [...lockedSections, activeSectionIndex];
|
||||||
|
|
||||||
|
// ✅ If next section exists
|
||||||
|
if (sections[nextSectionIndex]) {
|
||||||
|
const firstQuestion = sections[nextSectionIndex].questions[0];
|
||||||
|
|
||||||
|
this.setState(
|
||||||
|
{
|
||||||
|
activeSectionIndex: nextSectionIndex,
|
||||||
|
lockedSections: newLockedSections,
|
||||||
|
sectionDeadline: sections[nextSectionIndex].section_duration
|
||||||
|
? Date.now() +
|
||||||
|
sections[nextSectionIndex].section_duration * 60 * 1000
|
||||||
|
: null,
|
||||||
|
showQuestion: true,
|
||||||
|
},
|
||||||
|
() => {
|
||||||
|
this.showDetailQuestion(firstQuestion);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
// ✅ No more sections → submit exam
|
||||||
|
this.onSubmitExam();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
getExamModelToUpdate() {
|
getExamModelToUpdate() {
|
||||||
let tempAllQuestions = this.state.allQuestions;
|
let tempAllQuestions = this.state.allQuestions;
|
||||||
let questionsArray = [];
|
let questionsArray = [];
|
||||||
|
|
@ -118,8 +168,10 @@ class AttemptExam extends React.Component {
|
||||||
|
|
||||||
componentWillUnmount() {
|
componentWillUnmount() {
|
||||||
this.stopExamUpdate();
|
this.stopExamUpdate();
|
||||||
|
clearInterval(this.sectionTimer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
sendHeartbeat() {
|
sendHeartbeat() {
|
||||||
this.interval = setInterval(() => {
|
this.interval = setInterval(() => {
|
||||||
if (this.state.pauseUpdate) {
|
if (this.state.pauseUpdate) {
|
||||||
|
|
@ -138,47 +190,118 @@ class AttemptExam extends React.Component {
|
||||||
}
|
}
|
||||||
|
|
||||||
showDetailQuestion(question) {
|
showDetailQuestion(question) {
|
||||||
|
const {
|
||||||
|
isSectionWise,
|
||||||
|
activeSectionIndex,
|
||||||
|
sectionDeadline,
|
||||||
|
sections,
|
||||||
|
lockedSections,
|
||||||
|
} = this.state;
|
||||||
|
|
||||||
|
/* ============================
|
||||||
|
🔐 SECTION-WISE HARD GUARD
|
||||||
|
============================ */
|
||||||
|
if (isSectionWise) {
|
||||||
|
// ❌ Block visiting locked (previous) sections
|
||||||
|
if (lockedSections.includes(question.sectionIndx)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ❌ Block jumping to any section other than active
|
||||||
|
if (question.sectionIndx !== activeSectionIndex) {
|
||||||
|
const timeLeft = sectionDeadline - Date.now();
|
||||||
|
|
||||||
|
// Section still running → NO movement
|
||||||
|
if (timeLeft > 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Time over → allow ONLY next section
|
||||||
|
if (question.sectionIndx !== activeSectionIndex + 1) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ✅ Lock current section & activate next
|
||||||
|
this.setState({
|
||||||
|
lockedSections: [...lockedSections, activeSectionIndex],
|
||||||
|
activeSectionIndex: question.sectionIndx,
|
||||||
|
sectionDeadline: sections[question.sectionIndx]?.section_duration
|
||||||
|
? Date.now() +
|
||||||
|
sections[question.sectionIndx].section_duration * 60 * 1000
|
||||||
|
: null,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================
|
||||||
|
⬇️ SAFE QUESTION LOAD
|
||||||
|
============================ */
|
||||||
|
|
||||||
|
// Save previous question progress
|
||||||
this.updateAnswersForQuestion(this.state.activeDetailQuestion);
|
this.updateAnswersForQuestion(this.state.activeDetailQuestion);
|
||||||
|
|
||||||
// Mark the question as visited
|
// Mark visited
|
||||||
question.isVisited = true;
|
question.isVisited = true;
|
||||||
|
|
||||||
// Update the question in both section and allQuestions arrays
|
|
||||||
this.state.sections[question.sectionIndx].questions[question.secQIndex] = question;
|
|
||||||
this.state.allQuestions[question.index - 1] = question;
|
|
||||||
question.answer_duration = Date.now();
|
question.answer_duration = Date.now();
|
||||||
|
|
||||||
// Save the current section index for returning to the same tab
|
// Update state (yes, this mutates — refactor later)
|
||||||
|
this.state.sections[question.sectionIndx].questions[question.secQIndex] = question;
|
||||||
|
this.state.allQuestions[question.index - 1] = question;
|
||||||
|
|
||||||
this.setState({
|
this.setState({
|
||||||
showQuestion: true,
|
showQuestion: true,
|
||||||
activeDetailQuestion: question,
|
activeDetailQuestion: question,
|
||||||
activeQuestionIndex: question.index - 1,
|
activeQuestionIndex: question.index - 1,
|
||||||
sections: this.state.sections,
|
sections: this.state.sections,
|
||||||
allQuestions: this.state.allQuestions,
|
allQuestions: this.state.allQuestions,
|
||||||
lastActiveSection: question.sectionIndx // Save the section index
|
lastActiveSection: question.sectionIndx,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Send heartbeat update
|
||||||
this.updateAnswersForQuestion(question);
|
this.updateAnswersForQuestion(question);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
onQuestionClick(index) {
|
onQuestionClick(index) {
|
||||||
let q = this.state.allQuestions[index - 1];
|
let q = this.state.allQuestions[index - 1];
|
||||||
this.showDetailQuestion(q);
|
this.showDetailQuestion(q);
|
||||||
}
|
}
|
||||||
|
|
||||||
onTabPaneClick() {
|
onTabPaneClick = (key) => {
|
||||||
// Only handle the back navigation if we're in question detail view
|
const newIndex = Number(key);
|
||||||
if (this.state.showQuestion) {
|
const { isSectionWise, activeSectionIndex, sectionDeadline, sections } = this.state;
|
||||||
this.updateAnswersForQuestion(this.state.activeDetailQuestion);
|
|
||||||
|
|
||||||
|
if (isSectionWise && newIndex !== activeSectionIndex) {
|
||||||
|
const timeLeft = sectionDeadline - Date.now();
|
||||||
|
|
||||||
|
if (timeLeft > 0) {
|
||||||
|
// ❌ Block navigation
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ✅ Allow next section ONLY
|
||||||
|
if (newIndex === activeSectionIndex + 1) {
|
||||||
this.setState({
|
this.setState({
|
||||||
|
activeSectionIndex: newIndex,
|
||||||
|
sectionDeadline: sections[newIndex]?.section_duration
|
||||||
|
? Date.now() + sections[newIndex].section_duration * 60 * 1000
|
||||||
|
: null,
|
||||||
showQuestion: false,
|
showQuestion: false,
|
||||||
activeDetailQuestion: {},
|
|
||||||
activeQuestionIndex: -1
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Non section-wise exam
|
||||||
|
this.setState({
|
||||||
|
activeSectionIndex: newIndex,
|
||||||
|
showQuestion: false,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
onGetExamAttempt() {
|
onGetExamAttempt() {
|
||||||
var attemptId;
|
var attemptId;
|
||||||
selectorService
|
selectorService
|
||||||
|
|
@ -204,7 +327,48 @@ class AttemptExam extends React.Component {
|
||||||
item.questions = quest;
|
item.questions = quest;
|
||||||
return item;
|
return item;
|
||||||
});
|
});
|
||||||
this.setState({
|
|
||||||
|
// ✅ Detect section-wise timing
|
||||||
|
const isSectionWise = sections1.some(
|
||||||
|
sec => sec.section_duration && sec.section_duration > 0
|
||||||
|
);
|
||||||
|
|
||||||
|
// ⏱️ total exam duration in seconds
|
||||||
|
const totalExamSeconds = sections1.reduce(
|
||||||
|
(sum, sec) => sum + sec.section_duration * 60,
|
||||||
|
0
|
||||||
|
);
|
||||||
|
|
||||||
|
// ⏳ elapsed time
|
||||||
|
let elapsedSeconds = totalExamSeconds - result.time_left;
|
||||||
|
|
||||||
|
let activeSectionIndex = 0;
|
||||||
|
let sectionDeadline = null;
|
||||||
|
let lockedSections = [];
|
||||||
|
|
||||||
|
// Walk through sections using ELAPSED time
|
||||||
|
for (let i = 0; i < sections1.length; i++) {
|
||||||
|
const sectionTime = sections1[i].section_duration * 60;
|
||||||
|
|
||||||
|
if (elapsedSeconds >= sectionTime) {
|
||||||
|
// section already finished
|
||||||
|
elapsedSeconds -= sectionTime;
|
||||||
|
lockedSections.push(i);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// current active section
|
||||||
|
activeSectionIndex = i;
|
||||||
|
sectionDeadline =
|
||||||
|
Date.now() + (sectionTime - elapsedSeconds) * 1000;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// ✅ Set initial state
|
||||||
|
this.setState(
|
||||||
|
{
|
||||||
attempt_id: attemptId,
|
attempt_id: attemptId,
|
||||||
exam_id: result.exam_id,
|
exam_id: result.exam_id,
|
||||||
exam_language: result.exam_language,
|
exam_language: result.exam_language,
|
||||||
|
|
@ -213,7 +377,21 @@ class AttemptExam extends React.Component {
|
||||||
time_left: result.time_left,
|
time_left: result.time_left,
|
||||||
deadline: Date.now() + result.time_left * 1000,
|
deadline: Date.now() + result.time_left * 1000,
|
||||||
allQuestions: questionsArray,
|
allQuestions: questionsArray,
|
||||||
});
|
|
||||||
|
isSectionWise,
|
||||||
|
activeSectionIndex,
|
||||||
|
sectionDeadline,
|
||||||
|
lockedSections,
|
||||||
|
},
|
||||||
|
() => {
|
||||||
|
// ✅ Auto-load first question of active section
|
||||||
|
const firstQuestion =
|
||||||
|
sections1[activeSectionIndex]?.questions[0];
|
||||||
|
if (firstQuestion) {
|
||||||
|
this.showDetailQuestion(firstQuestion);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
@ -275,14 +453,38 @@ class AttemptExam extends React.Component {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
callbackFunctionNext = (childData) => {
|
callbackFunctionNext = (currentQuestion) => {
|
||||||
// ✅ Load next question
|
const {
|
||||||
const q = childData;
|
isSectionWise,
|
||||||
const indx = q.index;
|
activeSectionIndex,
|
||||||
const nxtQuestion = this.state.allQuestions[indx];
|
sections,
|
||||||
this.showDetailQuestion(nxtQuestion);
|
allQuestions,
|
||||||
|
} = this.state;
|
||||||
|
|
||||||
|
const currentIndex = currentQuestion.index - 1;
|
||||||
|
const nextQuestion = allQuestions[currentIndex + 1];
|
||||||
|
|
||||||
|
if (!nextQuestion) return;
|
||||||
|
|
||||||
|
// 🔐 SECTION-WISE HARD BLOCK
|
||||||
|
if (isSectionWise) {
|
||||||
|
const currentSectionQuestions =
|
||||||
|
sections[activeSectionIndex]?.questions || [];
|
||||||
|
|
||||||
|
const lastQuestionOfSection =
|
||||||
|
currentSectionQuestions[currentSectionQuestions.length - 1];
|
||||||
|
|
||||||
|
// ❌ Do NOT allow cross-section jump
|
||||||
|
if (lastQuestionOfSection?.id === currentQuestion.id) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ✅ Safe to navigate
|
||||||
|
this.showDetailQuestion(nextQuestion);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
callbackFunctionUpdateAnswer = (question) => {
|
callbackFunctionUpdateAnswer = (question) => {
|
||||||
console.log("Answer Updated", question);
|
console.log("Answer Updated", question);
|
||||||
}
|
}
|
||||||
|
|
@ -358,14 +560,20 @@ class AttemptExam extends React.Component {
|
||||||
<QuestionDetail
|
<QuestionDetail
|
||||||
totalQuestion={this.state.allQuestions.length}
|
totalQuestion={this.state.allQuestions.length}
|
||||||
question={this.state.activeDetailQuestion}
|
question={this.state.activeDetailQuestion}
|
||||||
updateAnswerCallback={this.callbackFunctionUpdateAnswer}
|
isSectionWise={this.state.isSectionWise}
|
||||||
|
activeSectionIndex={this.state.activeSectionIndex}
|
||||||
|
sections={this.state.sections}
|
||||||
parentCallbackNext={this.callbackFunctionNext}
|
parentCallbackNext={this.callbackFunctionNext}
|
||||||
parentCallback={this.callbackFunction}
|
parentCallback={this.callbackFunction}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
listItems = this.state.sections.map((item, index) => (
|
listItems = this.state.sections.map((item, index) => (
|
||||||
<TabPane tab={item.subject_name} key={index}>
|
<TabPane tab={item.subject_name} key={index} disabled={
|
||||||
|
this.state.isSectionWise &&
|
||||||
|
index !== this.state.activeSectionIndex
|
||||||
|
}>
|
||||||
{this.state.showQuestion ? (
|
{this.state.showQuestion ? (
|
||||||
activeQuestion
|
activeQuestion
|
||||||
) : (
|
) : (
|
||||||
|
|
@ -608,11 +816,11 @@ class AttemptExam extends React.Component {
|
||||||
<Layout.Content style={{ marginLeft: '300px', padding: '0 24px', minHeight: 280, background: '#fff' }}>
|
<Layout.Content style={{ marginLeft: '300px', padding: '0 24px', minHeight: 280, background: '#fff' }}>
|
||||||
<Layout className="create-exam-card" style={{ background: '#fff' }}>
|
<Layout className="create-exam-card" style={{ background: '#fff' }}>
|
||||||
<Tabs
|
<Tabs
|
||||||
defaultActiveKey="1"
|
activeKey={String(this.state.activeSectionIndex)}
|
||||||
size="large"
|
size="large"
|
||||||
type="line"
|
type="line"
|
||||||
animated
|
animated
|
||||||
onTabClick={this.onTabPaneClick.bind(this)}
|
onTabClick={this.onTabPaneClick}
|
||||||
className="create-exam-tabs"
|
className="create-exam-tabs"
|
||||||
>
|
>
|
||||||
{listItems}
|
{listItems}
|
||||||
|
|
|
||||||
|
|
@ -23,15 +23,37 @@ class QuestionDetail extends React.Component {
|
||||||
this.props.parentCallback(question);
|
this.props.parentCallback(question);
|
||||||
}
|
}
|
||||||
|
|
||||||
loadNextQuestion = () => {
|
loadNextQuestion = () => {
|
||||||
|
const { isSectionWise } = this.props;
|
||||||
|
|
||||||
|
if (isSectionWise && this.isLastQuestionOfSection()) {
|
||||||
|
return; // ❌ hard stop
|
||||||
|
}
|
||||||
|
|
||||||
this.props.parentCallbackNext(this.props.question);
|
this.props.parentCallbackNext(this.props.question);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
onReviewQuestion = (val) => {
|
onReviewQuestion = (val) => {
|
||||||
this.state.question.isReviewMarked = val;
|
this.state.question.isReviewMarked = val;
|
||||||
this.sendData(this.state.question);
|
this.sendData(this.state.question);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
isLastQuestionOfSection = () => {
|
||||||
|
const { question, sections, activeSectionIndex } = this.props;
|
||||||
|
|
||||||
|
if (!sections || activeSectionIndex === undefined) return false;
|
||||||
|
|
||||||
|
const currentSectionQuestions =
|
||||||
|
sections[activeSectionIndex]?.questions || [];
|
||||||
|
|
||||||
|
const lastQuestion =
|
||||||
|
currentSectionQuestions[currentSectionQuestions.length - 1];
|
||||||
|
|
||||||
|
return lastQuestion?.id === question.id;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
onAnswerChange = (event) => {
|
onAnswerChange = (event) => {
|
||||||
let questionType = this.state.question.type_code;
|
let questionType = this.state.question.type_code;
|
||||||
let id = event.target.value;
|
let id = event.target.value;
|
||||||
|
|
@ -202,11 +224,15 @@ class QuestionDetail extends React.Component {
|
||||||
<Button
|
<Button
|
||||||
onClick={this.loadNextQuestion}
|
onClick={this.loadNextQuestion}
|
||||||
type="primary"
|
type="primary"
|
||||||
disabled={question.index >= totalQuestion}
|
disabled={
|
||||||
|
question.index >= totalQuestion ||
|
||||||
|
(this.props.isSectionWise && this.isLastQuestionOfSection())
|
||||||
|
}
|
||||||
style={{ borderRadius: '6px' }}
|
style={{ borderRadius: '6px' }}
|
||||||
>
|
>
|
||||||
Next Question
|
Next Question
|
||||||
</Button>
|
</Button>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</Col>
|
</Col>
|
||||||
</Row>
|
</Row>
|
||||||
|
|
|
||||||
|
|
@ -134,6 +134,7 @@ const LiveExams = () => {
|
||||||
}}
|
}}
|
||||||
dataSource={data}
|
dataSource={data}
|
||||||
renderItem={(item) => (
|
renderItem={(item) => (
|
||||||
|
console.log("Rendering item:", item),
|
||||||
<List.Item>
|
<List.Item>
|
||||||
<Card
|
<Card
|
||||||
hoverable
|
hoverable
|
||||||
|
|
|
||||||
|
|
@ -859,8 +859,8 @@ function loadLiveExams(jsonObj) {
|
||||||
if (response.ok) {
|
if (response.ok) {
|
||||||
return response.json();
|
return response.json();
|
||||||
}
|
}
|
||||||
authenticationService.logout();
|
// authenticationService.logout();
|
||||||
window.location.reload(true);
|
// window.location.reload(true);
|
||||||
})
|
})
|
||||||
.then((data) => {
|
.then((data) => {
|
||||||
console.log(data);
|
console.log(data);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue