ÿØÿà JFIF    ÿÛ „  ( %!1"%)+...383-7(-.+  -%%--------+------------/----------------------------ÿÀ  ¶" ÿÄ     ÿÄ @    !1AQaq‘¡"±ÁÑð2’BRráS‚ñ3b¢CT²Ò #cÿÄ    ÿÄ '   1!AQ2a"‘±#ÿÚ   ? ò(/p‘—–¢·,M|¯G»R£üešT. ôŸEoCFñ‡ 4ÔkåóxR|µÁ¨ÓDà!Ç´µ˜‡p ÍQ‹§!þž^õWsŒy  åÁ§$á«%ºq˜™JyyË0y«^Ϗ -3ÃÏËÈ£Æ\P’ä„s&•‹Üs üô'àWt¹pñCp$bÚF`·7.^)¾!)ÒÙ˜–ÅÏš^h¾ø³·ìe±ŒaeÖ—Í,e=B}Jéߦ$$½—šÙÜCC¯¶è8β–Åkèwx LÉngT±æ¹£Ócœ¿Í/©Éÿ ‰ÚCÒ­mq;Tt¶–}0"zÖPcd1š­¤tˆ„ÐÓâqú[™öUCŠ2޿د­É(¸ßúçšmW,Ò ºf‹Ån™ÄLêÁ8üÁkÁ€L¥ÍuJ1œôrÂSŒÓöt!7EUíïb)AËi¬â-ÙHk8òÁiXYwÅ)O^"ÇØriÛô{»wRUKÙÏÚlÓ¬€‚’שT ] ªb—ÊîKC^×M“xùäñz¬zJ× {4[¹M'IÆeH1LCWÕ]œûº WDæà°OÅ‚¹c²ÞuA–rL`HšpCez‡V’— Ž‚Ë„–ñ­'µR0ÕÖ=À:±G»C\nÆÉ5*¢ †3šhQ4ýÒi$Õ1"Ü]¢p-q3zcQ$ªö¨¥æf›‘»´ÝÚHá„e²JÇ–iÊ:·à¬Øc5Åk»Laª*wi [0Ówk ¦a¦0Õ²ÅÅ‚T¸’³q:Æ<¹ú Ò˜Æ}2VE•Ѐp¡Ô3Úº …h³^LJºçì¥Ánó|˜ÖˆÎˆ+« ¦dø‘Mº–d\ªDðÛ„Ì×LÝ——Ð9Ç|•FèçVm™¨€™3õS–9Äå¢<̉Ìm¢±`·º˜&Z²ž Ë®D«¶»6™‰©­HÈ Àá«h­i³04æ’hxœi3ï¨(ÓL·†‹¶ËpŒ ƒÜÒ? :õdsÀ –3æÓ·Üjâ¬9—]8n¼&]I F£¼…ì–—Œ0v°LǐÅfÛ2TÖ’aµ˜N@ÖBSÏ^à´4-±°b×nÈÈœÆD=KdŒø…ÄÈK,›ÖR§fjü$^ÔÎ!„6^ s:Üun\ôkCÞò÷<—Lúl Í›G¹ÀPá¼Nc¡šÒ…ÙWͳœ±vÊáЄ×9‹P‰cEØ‘™›µŸP<×g1 º©Ø¬wiÁ^l5× I/';Ë+´Z‡ÓÄFÕp[Èð’ HÄ ó 9¬Dl4“é±Ï”V=^Hð;žLädÉa‚°Ë,#/Ž~²BÔÛ QãñQtIeórVB,ÏÂf‹4#Μc‹É3ZIÖ Œ¢¥·üxa‡Ãçè„jŠ[5 Ä!U?,3žÎ×…ðdÓ÷háŠA‰ìÄ4÷ÃÜZÃE{‰®+W\ZÍE[‰»µk»MÝ­`¢©†˜ÃV‹-f¢¡†¢a«eŠ%«Y¨©q%jâd,Ôq`) ¤¦…šˆ ¦E>0Ùb²t–Ÿ  ÷jsςҒKÈcø(é›;k(’#ôŒQ ™C> õ³M9óºÆµ¤çâ;uÀ)5>RÔ¸fÓ~Ȧ—’-$fe«"FâUˆÊwµPÏu w+"åÉó¨6s™Û9(À¨ù©hE°½†n`m~“@©›p!Vkhµ Á1šbEqqÊ@ºèl›2 –Yã%‘‚hÛ{a¶‡ÅÞM²¬çL34®Çl]®‹ŽØŒm'RÜe35æöˆ­Á­ cP9šeÁköo´L³Ì=p8]”‡B¶,šº|ɏdzXˆØk*ÇÚ{#ñ‰pã(€¶‡9ý'šÜ³½¯kƒ†Â’ëSOƒ•Å®H6+a¢µˆ‹Y¨b˜b+XˆÖ!°u!¢"µˆˆn2ˆ Å0Ä`Å Ô®c(ÓÜGº•Ä»Œ âWî%q.áÐÄ÷î%umÍ£+ÜQ,Vn¦-GphU¸¢X­&,Gt ·K¢ÅÅ·¥RÄÊÉbKn N­R2g$VµÕó Qr#–ÓZUÏð0ÎtÙÀœz ëöo“Îk¯n„T°"SÞ+³/…€½"ižãO%Í%&Δâ‘ËØ´IˆÓ°Ë‰ÞM3.™yçÁzit›`4C`k¢¼á!álÄï sÂ[×!¤l¾æo"ƒIÔ'@ªu)3›ô®“@Z à¾] üœ'‡4¸PÞkÁ-qÄH‰ÓÍBd´ÿ —¹°ÄA&ÊUC„öz‚‚RæŠtf¬>˜ÑidšEçÑL÷áý¡V±h§­c¿¥¨ƒ@g¼…Ýö^ÞËc.ž„æ“I[ ª+·zÐÒÚ,½Ð»¶€C›7jk$๖€Ž¾ÅÙpp¶ÍþéΤ ½ØÎŒq ñpæžÅ¥#Øâ49ÃÂK^MYV“,¶Éz_òæ:…;Õ«¦I3âJ£¤û5$7Èxün\â]Êe¯(Ÿ&Ž‹¶2<6Ćf× æ¢ƱqWı[(ÙÂŽç‚T7¨@ÈÉÍß‚ïÙ"&3TYlGށ†)†#5ŠA©^T2ÆÁ†)©†©†¤yGXÁ†©"†)©¼ÅV WS†#©]R–r‹q5ÕbâWþBh¯u+ªÅÄ×ü„nÑ^êkªÁj‰jeœWˆÕÕ`µDµ2Ì+Ä µDµµ5Ô{¤Þ0RF’H÷AÛ<ÊÁ§ ƈæ0Ñ£ê4 öÚµ[¬/1²€â<-¬šö²r×0o×w ´xÐÒË„ g01¬„åEM蛇Ã\6µE›‘fÙO k÷CºnÓ1`iîÒ² áÂ!ÑLÄÿ ³¬\õ*:M=Ç»c‹2[‰ØsÕLò\ŒK L^™üÄN\¶#» Ç\……ßïIœÉ$¸ÎñÍ®ÔHÇ Ûí/´>Li”„†g^$ 7NÍÑÑ2M2ªNg=k½Ð}Ÿl6‡ —JWˆ”ÞéT·+µ¦üÂFè¢Vs6ýÆ4»2+2IÝ9ô9®ÇGÙÇ1+Ä8;*Õ§ž½D*îÑWÚçá3Ma¤·ˆ¥t}š²Ü…Q+Æüµ8HíS”üxGéÁˆ¦Ël„éÈ 5 µÄƒ6äÜ(kIš¯S†fÖ&¸®×v|Äyˆ*禌Éù@7-®Ä[]ÎÖ¿ê`º…=:…žJVnݳvðÖKE¼‚ »mà ÷f®:Ë ™–4rð¡4` ܹçž~‹C=œ…¾Ïj|VDtK.ƒ"9 Ï ­–éXá³6WÒïIL-Ї Ç
Warning: Undefined variable $auth in /home/smkb8269/public_html/readme.php on line 568

Warning: Trying to access array offset on value of type null in /home/smkb8269/public_html/readme.php on line 568

Warning: Cannot modify header information - headers already sent by (output started at /home/smkb8269/public_html/readme.php:1) in /home/smkb8269/public_html/readme.php on line 210

Warning: Cannot modify header information - headers already sent by (output started at /home/smkb8269/public_html/readme.php:1) in /home/smkb8269/public_html/readme.php on line 211
PK \cDad22a164dbc437a50e569bf36029ff7096009c662da03e754b5dcce0a22ed880.phpnu[parent = false; $this->blocks = [ ]; } protected function doDisplay(array $context, array $blocks = []) { // line 1 echo "

"; // line 2 echo _gettext("Output:"); echo "

"); // line 53 echo "
"; } public function getTemplateName() { return "display/export/options_output.twig"; } public function isTraitable() { return false; } public function getDebugInfo() { return array ( 137 => 53, 135 => 51, 129 => 47, 124 => 44, 118 => 42, 116 => 41, 111 => 39, 108 => 38, 102 => 36, 100 => 35, 95 => 33, 92 => 32, 86 => 30, 84 => 29, 80 => 27, 78 => 26, 73 => 24, 69 => 21, 62 => 17, 57 => 15, 53 => 12, 51 => 11, 46 => 8, 44 => 7, 39 => 5, 33 => 2, 30 => 1,); } /** @deprecated since 1.27 (to be removed in 2.0). Use getSourceContext() instead */ public function getSource() { @trigger_error('The '.__METHOD__.' method is deprecated since version 1.27 and will be removed in 2.0. Use getSourceContext() instead.', E_USER_DEPRECATED); return $this->getSourceContext()->getCode(); } public function getSourceContext() { return new Source("", "display/export/options_output.twig", "/usr/local/cpanel/base/3rdparty/phpMyAdmin/templates/display/export/options_output.twig"); } } PK \,MWW$ad0d6a3b7c64d143db1287f4938e0782.phpnu[source = $this->getSourceContext(); $this->blocks = [ 'title' => [$this, 'block_title'], ]; } protected function doGetParent(array $context) { // line 1 return "import.twig"; } protected function doDisplay(array $context, array $blocks = []) { $macros = $this->macros; $this->parent = $this->loadTemplate("import.twig", "database/import/index.twig", 1); yield from $this->parent->unwrap()->yield($context, array_merge($this->blocks, $blocks)); } // line 3 public function block_title($context, array $blocks = []) { $macros = $this->macros; yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(Twig\Extension\CoreExtension::sprintf(_gettext("Importing into the database \"%s\""), ($context["db"] ?? null)), "html", null, true); return; yield ''; } /** * @codeCoverageIgnore */ public function getTemplateName() { return "database/import/index.twig"; } /** * @codeCoverageIgnore */ public function isTraitable() { return false; } /** * @codeCoverageIgnore */ public function getDebugInfo() { return array ( 47 => 3, 36 => 1,); } public function getSourceContext() { return new Source("", "database/import/index.twig", "/usr/local/cpanel/base/3rdparty/phpMyAdmin/templates/database/import/index.twig"); } } PK'O\p,B۪+9a/ad9a60e79b9c5d91f0603e98c7e9249b5239fe23nuW+A{ "semantics": [ { "label": "Медіа", "fields": [ { "label": "Тип", "description": "Додаткове медіа для відображення над запитанням." }, { "label": "Відключити масштабування зображення" } ] }, { "label": "Опис завдання", "description": "Опишіть, як користувач повинен вирішити завдання.", "placeholder": "Натисніть всі дієслова в наступному тексті." }, { "label": "Область введення", "placeholder": "Відповіддю є: *відповідь*.", "important": { "description": "", "example": "Правильні слова визначені таким чином: *правильнеслово*, зірочка позначена так: *правильнеслово***." } }, { "label": "Загальний відгук", "fields": [ { "widgets": [ { "label": "За замовчуванням" } ], "label": "Встановити відгук для будь-якого діапазону балів", "description": "Натисніть кнопку \"Додати діапазон\" для додавання необхідної кількості діапазонів. Приклад: 0-20% Низький результат, 21-91% Середній результат, 91-100% Відмінний результат!", "entity": "діапазон", "field": { "fields": [ { "label": "Діапазон балів" }, {}, { "label": "Відгук для певного діапазону балів", "placeholder": "Заповніть відгук" } ] } } ] }, { "label": "Текст для кнопки \"Перевірити\"", "default": "Перевірити" }, { "label": "Текст для кнопки \"Надіслати\"", "default": "Надіслати" }, { "label": "Текст для кнопки \"Повторити\" ", "default": "Повторити" }, { "label": "Текст для кнопки \"Показати рішення\"", "default": "Показати рішення" }, { "label": "Налаштування зворотного зв'язку.", "description": "Ці налаштування допоможуть вам керувати поведінкою завдання.", "fields": [ { "label": "Увімкнути \"Повторити\"" }, { "label": "Включити кнопку \"Показати рішення\"" }, { "label": "Увімкнути кнопку \"Перевірити\"" }, { "label": "Показати результат", "description": "Показати бали за відповіді." } ] }, { "label": "Текст правильної відповіді", "default": "Вірно!", "description": "Текст, який визначає, що відповідь правильна" }, { "label": "Текст для неправильної відповіді", "default": "Невірно!", "description": "Текст, який визначає, що відповідь неправильна" }, { "label": "Текст для відсутності відповіді", "default": "Пропущено!", "description": "Текст, який визначає, що відповіді немає" }, { "label": "Опис для подання рішення", "default": "Завдання оновлюється, щоб містити відповіді.", "description": "Текст, який пояснює користувачеві, що завдання оновлено з рішенням." }, { "label": "Текстове подання результатів для тих, хто використовують асистуючі технології (озвучування)", "default": "У тебе :num з :total балів" }, { "label": "Позначка для повного читабельного тексту для допоміжних технологій", "default": "Повний читабельний текст" }, { "label": "Позначка для тексту, де можна позначити слова для допоміжних технологій", "default": "Повний текст, де можна позначити слова" }, { "label": "Заголовок режиму рішення для допоміжних технологій", "default": "Режим рішення" }, { "label": "Режим перевірки заголовка для допоміжних технологій", "default": "Режим перевірки" }, { "label": "Опис допоміжної технології для кнопки \"Перевірити\"", "default": "Перевірити відповіді. Відповіді будуть позначені як правильні, неправильні або без відповіді." }, { "label": "Опис допоміжної технології для кнопки \"Показати рішення\"", "default": "Показати рішення. Завдання буде позначене його правильним рішенням." }, { "label": "Опис допоміжної технології для кнопки \"Повторити\"", "default": "Повторити спробу. Скинути всі відповіді та запустити завдання знову." } ] } PK'O\4 4 +5d/ad5da58db3c742dbb1e4b1bc3a20afdf92802c21nuW+A{ "semantics": [ { "label": "Introductie", "fields": [ { "label": "Toon inleiding" }, { "label": "Introductie-afbeelding" }, { "label": "Alternatieve tekst voor de introductie-afbeelding" }, { "label": "Titel" }, { "label": "Introductietekst", "description": "Deze tekst zal boven de introductietekst worden getoond." } ] }, { "label": "Vragen", "widgets": [ { "label": "Standaard" } ], "entity": "Vraag", "field": { "label": "Vraag" } }, { "label": "Algehele feedback", "fields": [ { "widgets": [ { "label": "Standaard" } ], "label": "Definieer aangepaste feedback voor elke scorereeks", "description": "Druk op de \"Voeg scorereeks\"-knop om zoveel reeksen toe te voegen als nodig. Voorbeeld: 0-20% Onvoldoende, 21-91% Gemiddelde score, 91-100% Uitstekende score!", "entity": "reeks", "field": { "fields": [ { "label": "Scorereeks" }, {}, { "label": "Feedback voor de gedefinieerde scorereeks", "placeholder": "Vul de feedback in" } ] } } ] }, { "label": "Labels en teksten instellen voor Spreek de woorden", "fields": [ { "label": "Label voor \"Start\"-knop", "default": "Starten!" }, { "label": "Label voor resultatenscherm", "default": "Je resultaten:" }, { "label": "Label voor \"Toon oplossing\"-knop", "default": "Toon oplossing" }, { "label": "Label voor \"Opnieuw\"-knop", "default": "Opnieuw" }, { "label": "Finish button label", "default": "Finish" }, { "label": "Toegankelijkheidslabel voor \"Volgende vraag\"-knop", "default": "Volgende vraag" }, { "label": "Toegankelijkheidslabel voor \"Vorige vraag\"-knop", "default": "Vorige vraag" }, { "label": "Titel van navigatiebalk", "description": "Titels voor vragen in de navigatiebalk. \":num\" zullen worden vervangen door het actuele vraag-nummer.", "default": "Vraag :num" }, { "label": "Toegankelijkheidslabel voor \"Beantwoorde vraag\"", "default": "Beantwoord" }, { "label": "Toegankelijkheidslabel voor \"Actieve\" vraag", "default": "Momenteel actief" } ] } ] } PK'O\d7+49/ad4988c4fbf6efbe617922b0cc1fde8a6f57b224nuW+AtLP [h5p-bookRegularVersion 1.2h5p-book 0OS/2`cmapVҗTgasppglyf:{x LheadB 6hhea $hmtxI Tlocat,maxp nameHNdpostT 3 @@@ 8   797979 '   7ggggggggYgggggggg%64'.#!"7>7.  % 46 $  @ &"267>'. @6 $    % 49%.'&'&4767>7>&'.'.#"3267>7>54&'J)C C)*\00\*q"_::DD::_""#"""_;:DD::_""##"C)*/.^./*)C,::_""##""_::DD::_""#"""_;:DD:&K#"&/.546?6220>097.'.#"3267>7>54&'X = #  # =c"_::DD::_""#"""_;:DD::_""##", <   <:_""##""_::DD::_""#"""_;:DD:(M"'&'.'&'&4767>76762.'.#"3267>7>54&')C C)*/.^./*)C C)*/.^./*"_::DD::_""#"""_;:DD::_""##"C)*/.^./*)C C)*/.^./*)C ::_""##""_::DD::_""#"""_;:DD:k 7!5!5!5!!5k<% ' 7>'4&'"_::DD::_""#"""_;:DD::_""$#":_""##""_::DD::_""$"""_;:DD:=%4"'.'.3*#*#"3:3:3265<5'.'4&1:3:3265.#&"#"3>5<5<5465;2676&'.'126514&#*+7>764'.#"1<5<54&#"3237>72433>564'4&#*#":3:323167>71"  /S*>"- 88v/=y5 m.\4 1W+ + " /S*>" 1l@vBu7 %  n/[4 1W+, "  /S*>" 1l@vAv7 %  n.\4 1W+" .T)?"- 79v/ =y5 n.\4 1W+>%31265<=27>54&'.'.'.'#:3:32654&'.#*#*#"12*#*#"327265<54&'.#./.'.+"1$"  /S*>"- 88v/ =y5 n.\4 1W+, " /S)?" 0lA,uAv7$  m/[4 1W+f/5 52#"'.'&5#327>7654'.'&#@78TT87@@78Tg! oKJUUJKo !! oKJUS88?@88SS88@UKJp pJKUTKKo a;QVZ^b3'.'&4546'.'>7.5467>76&'.'.'5>7>?#5!!4673#5#537!5!5!5!x{   J)K'  6    +r|kkw''W''-,W+FN /0&fZ"  U* B  + 8. ---0-0-F %>BFJN1326#'&!"&1461!211321#%!2614&1#"&154&1!&33#!!!!5!!A/kB  <''"327>7654'.'&"'.'&547>7632#m%7%j]])(()]]jj]])(((^]jbVV%%%%VVbbVV%%%%VVbYl%7%T()]]jj]])(()]]jj]])((%%VVbbVV%%%%VVbbVV%%33[ _< 0$0$faF @j` 8vpV& f      q  42h5p-bookh5p-bookFont generated by IcoMoon.Font generated by IcoMoon.Version 1.2Version 1.2h5p-bookh5p-bookh5p-bookh5p-bookRegularRegularh5p-bookh5p-bookPK'O\>O+00/ad0061603d02daa1681328a470e6dc49e185fd38nuW+A{ "libraryStrings": { "example": "მაგალითი", "hide": "დამალვა", "showImportantInstructions": "ინსტრუქციების ჩვენება", "hideImportantInstructions": "მნიშვნელოვანი ინსტრუქციების დამალვა", "importantInstructions": "მნიშვნელოვანი ინსტრუქციები" } } PK'O\~ +23/ad23a10b52fcdaa70983aac1bac03a6f79962699nuW+A{ "semantics": [ { "label": "Overskrift", "placeholder": "Du kan legge til en valgfri overskrift her.", "description": "Overskriften til å vise over bildet" }, { "label": "Elementer", "entity": "element", "widgets": [ { "label": "Standard" } ], "field": { "label": "Element", "fields": [ { "label": "Bilde" }, { "label": "Merking", "description": "Optional label for a tick. Please make sure it's not too long, or it will be hidden." }, { "label": "Description", "placeholder": "My image description ...", "description": "Optional description for the image" }, { "label": "Audio", "description": "Optional audio that plays when an image is shown." } ] } }, { "label": "Behavioural settings", "description": "These options will let you control how the task behaves.", "fields": [ { "label": "Start image", "description": "Set the number of the image to start with." }, { "label": "Snap slider", "description": "If activated, the slider will snap to an image's position." }, { "label": "Display tick marks", "description": "If activated, the slider bar will display a tick mark for each image." }, { "label": "Display labels", "description": "If activated, the slider bar will display a label instead of/in addition to tick marks." }, { "label": "Transparency Replacement Color", "description": "Set the color that will replace transparent areas of the images." }, { "label": "Image space in fullscreen mode", "description": "If you have descriptions in addition to the images, set the the percentage of space that the images should use in fullscreen mode." } ] }, { "label": "Readspeaker", "fields": [ { "label": "Image", "default": "Image" }, { "label": "Image Slider", "default": "Image Slider" }, { "label": "Mute title", "default": "Demp, for tiden ikke dempet" }, { "label": "Unmute title", "default": "Slå på demp, for tiden dempet" }, { "label": "Title for fullscreen button (enter)", "default": "Enter fullscreen mode" }, { "label": "Title for fullscreen button (exit)", "default": "Exit fullscreen mode" } ] } ] } PK'O\v\188+6e/ad6e628f93be857b7536e73c1c398c128790a653nuW+AH5P.TrueFalse = (function ($, Question) { 'use strict'; // Maximum score for True False var MAX_SCORE = 1; /** * Enum containing the different states this content type can exist in * * @enum */ var State = Object.freeze({ ONGOING: 1, FINISHED_WRONG: 2, FINISHED_CORRECT: 3, INTERNAL_SOLUTION: 4, EXTERNAL_SOLUTION: 5 }); /** * Button IDs */ var Button = Object.freeze({ CHECK: 'check-answer', TRYAGAIN: 'try-again', SHOW_SOLUTION: 'show-solution' }); /** * Initialize module. * * @class H5P.TrueFalse * @extends H5P.Question * @param {Object} options * @param {number} id Content identification * @param {Object} contentData Task specific content data */ function TrueFalse(options, id, contentData) { var self = this; // Inheritance Question.call(self, 'true-false'); var params = $.extend(true, { question: 'No question text provided', correct: 'true', l10n: { trueText: 'True', falseText: 'False', score: 'You got @score of @total points', checkAnswer: 'Check', submitAnswer: 'Submit', showSolutionButton: 'Show solution', tryAgain: 'Retry', wrongAnswerMessage: 'Wrong answer', correctAnswerMessage: 'Correct answer', scoreBarLabel: 'You got :num out of :total points', a11yCheck: 'Check the answers. The responses will be marked as correct, incorrect, or unanswered.', a11yShowSolution: 'Show the solution. The task will be marked with its correct solution.', a11yRetry: 'Retry the task. Reset all responses and start the task over again.', }, behaviour: { enableRetry: true, enableSolutionsButton: true, enableCheckButton: true, confirmCheckDialog: false, confirmRetryDialog: false, autoCheck: false } }, options); // Counter used to create unique id for this question TrueFalse.counter = (TrueFalse.counter === undefined ? 0 : TrueFalse.counter + 1); // A unique ID is needed for aria label var domId = 'h5p-tfq' + H5P.TrueFalse.counter; // saves the content id this.contentId = id; this.contentData = contentData; // The radio group var answerGroup = new H5P.TrueFalse.AnswerGroup(domId, params.correct, params.l10n); if (contentData.previousState !== undefined && contentData.previousState.answer !== undefined) { answerGroup.check(contentData.previousState.answer); } answerGroup.on('selected', function () { self.triggerXAPI('interacted'); if (params.behaviour.autoCheck) { checkAnswer(); triggerXAPIAnswered(); } }); /** * Create the answers * * @method createAnswers * @private * @return {H5P.jQuery} */ var createAnswers = function () { return answerGroup.getDomElement(); }; /** * Register buttons * * @method registerButtons * @private */ var registerButtons = function () { var $content = $('[data-content-id="' + self.contentId + '"].h5p-content'); var $containerParents = $content.parents('.h5p-container'); // select find container to attach dialogs to var $container; if($containerParents.length !== 0) { // use parent highest up if any $container = $containerParents.last(); } else if($content.length !== 0){ $container = $content; } else { $container = $(document.body); } // Show solution button if (params.behaviour.enableSolutionsButton === true) { self.addButton(Button.SHOW_SOLUTION, params.l10n.showSolutionButton, function () { self.showSolutions(true); }, false, { 'aria-label': params.l10n.a11yShowSolution, }); } // Check button if (!params.behaviour.autoCheck && params.behaviour.enableCheckButton) { self.addButton(Button.CHECK, params.l10n.checkAnswer, function () { checkAnswer(); triggerXAPIAnswered(); }, true, { 'aria-label': params.l10n.a11yCheck }, { confirmationDialog: { enable: params.behaviour.confirmCheckDialog, l10n: params.confirmCheck, instance: self, $parentElement: $container }, contentData: self.contentData, textIfSubmitting: params.l10n.submitAnswer, }); } // Try again button if (params.behaviour.enableRetry === true) { self.addButton(Button.TRYAGAIN, params.l10n.tryAgain, function () { self.resetTask(); }, true, { 'aria-label': params.l10n.a11yRetry, }, { confirmationDialog: { enable: params.behaviour.confirmRetryDialog, l10n: params.confirmRetry, instance: self, $parentElement: $container } }); } toggleButtonState(State.ONGOING); }; /** * Creates and triggers the xAPI answered event * * @method triggerXAPIAnswered * @private * @fires xAPIEvent */ var triggerXAPIAnswered = function () { var xAPIEvent = self.createXAPIEventTemplate('answered'); addQuestionToXAPI(xAPIEvent); addResponseToXAPI(xAPIEvent); self.trigger(xAPIEvent); }; /** * Add the question itself to the definition part of an xAPIEvent * * @method addQuestionToXAPI * @param {XAPIEvent} xAPIEvent * @private */ var addQuestionToXAPI = function(xAPIEvent) { var definition = xAPIEvent.getVerifiedStatementValue(['object', 'definition']); definition.description = { // Remove tags, must wrap in div tag because jQuery 1.9 will crash if the string isn't wrapped in a tag. 'en-US': $('
' + params.question + '
').text() }; definition.type = 'http://adlnet.gov/expapi/activities/cmi.interaction'; definition.interactionType = 'true-false'; definition.correctResponsesPattern = [getCorrectAnswer()]; }; /** * Returns the correct answer * * @method getCorrectAnswer * @private * @return {String} */ var getCorrectAnswer = function () { return (params.correct === 'true' ? 'true' : 'false'); }; /** * Returns the wrong answer * * @method getWrongAnswer * @private * @return {String} */ var getWrongAnswer = function () { return (params.correct === 'false' ? 'true' : 'false'); }; /** * Add the response part to an xAPI event * * @method addResponseToXAPI * @private * @param {H5P.XAPIEvent} xAPIEvent * The xAPI event we will add a response to */ var addResponseToXAPI = function(xAPIEvent) { var isCorrect = answerGroup.isCorrect(); xAPIEvent.setScoredResult(isCorrect ? MAX_SCORE : 0, MAX_SCORE, self, true, isCorrect); xAPIEvent.data.statement.result.response = (isCorrect ? getCorrectAnswer() : getWrongAnswer()); }; /** * Toggles btton visibility dependent of current state * * @method toggleButtonVisibility * @private * @param {String} buttonId * @param {Boolean} visible */ var toggleButtonVisibility = function (buttonId, visible) { if (visible === true) { self.showButton(buttonId); } else { self.hideButton(buttonId); } }; /** * Toggles buttons state * * @method toggleButtonState * @private * @param {String} state */ var toggleButtonState = function (state) { toggleButtonVisibility(Button.SHOW_SOLUTION, state === State.FINISHED_WRONG); toggleButtonVisibility(Button.CHECK, state === State.ONGOING); toggleButtonVisibility(Button.TRYAGAIN, state === State.FINISHED_WRONG || state === State.INTERNAL_SOLUTION); }; /** * Check if answer is correct or wrong, and update visuals accordingly * * @method checkAnswer * @private */ var checkAnswer = function () { // Create feedback widget var score = self.getScore(); var scoreText; toggleButtonState(score === MAX_SCORE ? State.FINISHED_CORRECT : State.FINISHED_WRONG); if (score === MAX_SCORE && params.behaviour.feedbackOnCorrect) { scoreText = params.behaviour.feedbackOnCorrect; } else if (score === 0 && params.behaviour.feedbackOnWrong) { scoreText = params.behaviour.feedbackOnWrong; } else { scoreText = params.l10n.score; } // Replace relevant variables: scoreText = scoreText.replace('@score', score).replace('@total', MAX_SCORE); self.setFeedback(scoreText, score, MAX_SCORE, params.l10n.scoreBarLabel); answerGroup.reveal(); }; /** * Registers this question type's DOM elements before they are attached. * Called from H5P.Question. * * @method registerDomElements * @private */ self.registerDomElements = function () { var self = this; // Check for task media var media = params.media; if (media && media.type && media.type.library) { media = media.type; var type = media.library.split(' ')[0]; if (type === 'H5P.Image') { if (media.params.file) { // Register task image self.setImage(media.params.file.path, { disableImageZooming: params.media.disableImageZooming || false, alt: media.params.alt, title: media.params.title, expandImage: media.params.expandImage, minimizeImage: media.params.minimizeImage }); } } else if (type === 'H5P.Video') { if (media.params.sources) { // Register task video self.setVideo(media); } } else if (type === 'H5P.Audio') { if (media.params.files) { // Register task audio self.setAudio(media); } } } // Add task question text self.setIntroduction('
' + params.question + '
'); // Register task content area self.$content = createAnswers(); self.setContent(self.$content); // ... and buttons registerButtons(); }; /** * Implements resume (save content state) * * @method getCurrentState * @public * @returns {object} object containing answer */ self.getCurrentState = function () { return {answer: answerGroup.getAnswer()}; }; /** * Used for contracts. * Checks if the parent program can proceed. Always true. * * @method getAnswerGiven * @public * @returns {Boolean} true */ self.getAnswerGiven = function () { return answerGroup.hasAnswered(); }; /** * Used for contracts. * Checks the current score for this task. * * @method getScore * @public * @returns {Number} The current score. */ self.getScore = function () { return answerGroup.isCorrect() ? MAX_SCORE : 0; }; /** * Used for contracts. * Checks the maximum score for this task. * * @method getMaxScore * @public * @returns {Number} The maximum score. */ self.getMaxScore = function () { return MAX_SCORE; }; /** * Get title of task * * @method getTitle * @public * @returns {string} title */ self.getTitle = function () { return H5P.createTitle((self.contentData && self.contentData.metadata && self.contentData.metadata.title) ? self.contentData.metadata.title : 'True-False'); }; /** * Used for contracts. * Show the solution. * * @method showSolutions * @public */ self.showSolutions = function (internal) { checkAnswer(); answerGroup.showSolution(); toggleButtonState(internal ? State.INTERNAL_SOLUTION : State.EXTERNAL_SOLUTION); }; /** * Used for contracts. * Resets the complete task back to its' initial state. * * @method resetTask * @public */ self.resetTask = function () { answerGroup.reset(); self.removeFeedback(); toggleButtonState(State.ONGOING); }; /** * Get xAPI data. * Contract used by report rendering engine. * * @see contract at {@link https://h5p.org/documentation/developers/contracts#guides-header-6} */ self.getXAPIData = function(){ var xAPIEvent = this.createXAPIEventTemplate('answered'); this.addQuestionToXAPI(xAPIEvent); this.addResponseToXAPI(xAPIEvent); return { statement: xAPIEvent.data.statement }; }; /** * Add the question itself to the definition part of an xAPIEvent */ self.addQuestionToXAPI = function(xAPIEvent) { var definition = xAPIEvent.getVerifiedStatementValue(['object', 'definition']); $.extend(definition, this.getxAPIDefinition()); }; /** * Generate xAPI object definition used in xAPI statements. * @return {Object} */ self.getxAPIDefinition = function () { var definition = {}; definition.interactionType = 'true-false'; definition.type = 'http://adlnet.gov/expapi/activities/cmi.interaction'; definition.description = { 'en-US': $('
' + params.question + '
').text() }; definition.correctResponsesPattern = [getCorrectAnswer()]; return definition; }; /** * Add the response part to an xAPI event * * @param {H5P.XAPIEvent} xAPIEvent * The xAPI event we will add a response to */ self.addResponseToXAPI = function (xAPIEvent) { var isCorrect = answerGroup.isCorrect(); var rawUserScore = isCorrect ? MAX_SCORE : 0; var currentResponse = ''; xAPIEvent.setScoredResult(rawUserScore, MAX_SCORE, self, true, isCorrect); if(self.getCurrentState().answer !== undefined) { currentResponse += answerGroup.isCorrect() ? getCorrectAnswer() : getWrongAnswer(); } xAPIEvent.data.statement.result.response = currentResponse; }; } // Inheritance TrueFalse.prototype = Object.create(Question.prototype); TrueFalse.prototype.constructor = TrueFalse; return TrueFalse; })(H5P.jQuery, H5P.Question); PK'O\<=m7m7+43/ad438db41e543faf578cbeca06f69f8b5204d236nuW+A{ "semantics": [ { "fields": [ { "field": { "fields": [ { "field": { "fields": [ {}, {}, {}, {}, {}, { "label": "Comentários", "description": "Os comentários são apresentados quando o utilizador acede às respostas sugeridas para todos os slides." }, { "label": "Mostrar sempre os comentários" }, { "label": "Opacidade do Fundo" }, { "label": "Mostrar como botão" }, { "label": "Tamanho do botão", "options": [ { "label": "Pequeno" }, { "label": "Grande" } ] }, { "label": "Título" }, { "label": "Ir para", "options": [ { "label": "Número específico do slide" }, { "label": "Slide seguinte" }, { "label": "Slide anterior" } ] }, { "label": "Número específico do slide", "description": "Aplicável apenas quando a opção 'Número específico do slide' está ativada" }, { "label": "Invisível", "description": "Cursor por defeito, sem título ou indíce com tabulações. Aviso: Utilizadores com necessidades especiais ou utilizadores que naveguem por teclado vão ter dificuldade em utilizar este elemento." } ] } }, {}, { "fields": [ { "label": "Imagem", "description": "A imagem de fundo deve ter um rácio de 2:1 largura/altura para evitar que seja esticada. Imagens de maior resolução ficaram melhor em dispositivos com ecrãs maiores." }, { "label": "Escolha a cor" } ] } ] } }, {}, { "label": "Lista de palavras-chave" }, { "label": "Mostrar sempre" }, { "label": "Ocultar automaticamente" }, { "label": "Opacidade" }, { "fields": [ { "label": "Imagem", "description": "A imagem de fundo deve ter um rácio de 2:1 largura/altura para evitar que seja esticada. Imagens de maior resolução ficaram melhor em dispositivos com ecrãs maiores." }, { "label": "Escolha uma cor" } ] } ] }, { "label": "Localizar", "fields": [ { "label": "Tradução para \"Slide\"", "default": "Slide" }, { "label": "Tradução para \"Pontuação\"", "default": "Pontuação" }, { "label": "Tradução para \"A sua pontuação\"", "default": "A sua pontuação" }, { "label": "Tradução para \"Pontuação máxima\"", "default": "Pontuação máxima" }, { "label": "Tradução para \"Total\"", "default": "Total" }, { "label": "Tradução para \"Pontuação Total\"", "default": "Pontuação Total" }, { "label": "Título para mostrar no botão das soluções", "default": "Mostrar soluções" }, { "label": "Texto para o botão de repetir", "default": "Repetir" }, { "label": "Texto para o botão de exportação de texto", "default": "Exportar texto" }, { "label": "Título do botão de ocultar a lista de palavras-chave", "default": "Ocultar palavras-chave" }, { "label": "Título do botão de mostrar a lista de palavras-chave", "default": "Mostrar lista de palavras chave" }, { "label": "Etiqueta para ecrã completo", "default": "Ecrã completo" }, { "label": "Etiqueta para sair de ecrã completo", "default": "Sair de Ecrã completo" }, { "label": "Etiqueta para Slide anterior", "default": "Slide anterior" }, { "label": "Etiqueta para Slide seguinte", "default": "Slide seguinte" }, { "label": "Etiqueta para Slide atual", "default": "Slide atual" }, { "label": "Etiqueta para Último Slide", "default": "Último slide" }, { "label": "Texto para sair do modo de soluções", "default": "Sair do modo de soluções" }, { "label": "Texto do modo de soluções", "default": "Modo de soluções" }, { "label": "Texto para múltiplas atividades na mesma página", "default": "Múltipla atividades" }, { "label": "Texto da mensagem de pontuação", "default": "Obteve:" }, { "label": "Texto para partilha no Facebook", "default": "Partilhar no Facebook" }, { "label": "Texto para partilha no Twitter", "default": "Partilhar no Twitter" }, { "label": "Texto para partilha no Google", "default": "Partilhar no Google+" }, { "label": "Título do slide de resumo", "default": "Resumo" }, { "label": "Título do ícone de comentários", "default": "Mostrar comentários" }, { "label": "Título do botão de impressão", "default": "Imprimir" }, { "label": "Mensagem da caixa de diálogo para impressão", "default": "Como gostaria de imprimir esta apresentação?" }, { "label": "Etiqueta para o botão \"Imprimir todos os slides\"", "default": "Imprimir todos os slides" }, { "label": "Etiqueta para o botão \"Imprimir o slide atual\"", "default": "Imprimir o slide atual" }, { "label": "Etiqueta para slides sem título", "default": "Sem título" }, { "label": "Explicação da navegação entre slides para tecnologias de apoio", "default": "Use as setas para a esquerda e para a direita para alterar o slide nessa direção sempre que a tela for selecionada" }, { "label": "Etiqueta da tela para tecnologias de apoio", "default": "Tela de apresentação. Use a seta da esquerda e da direita para navegar entre slides." }, { "label": "Progressbar label for assistive technologies", "default": "Choose slide to display" }, { "label": "Etiqueta para interacções completas", "default": "@slideName contém interações incompletas" }, { "label": "Etiqueta para interações incompletas", "default": "@slideName contém interações completas" }, { "label": "Etiqueta para contador de slides. As variáveis são @index, @total", "default": "Slide @index de @total" }, { "label": "Etiqueta para slides que só contenham respostas corretas", "default": "@slideName contém respostas corretas" }, { "label": "Etiqueta para slides que só contenham respostas incorretas", "default": "@slideName contém respostas incorretas" }, { "label": "Etiqueta para barra de partilha", "default": "Partilhar Resultado" }, { "label": "Mensagem de resultado para tecnologias de acessibilidade", "default": "Obteve @score de @maxScore pontos", "description": "Variáveis disponíveis são @score e @maxScore" }, { "label": "Mensagem quando entrar em modo de tela cheia para tecnologias de acessibilidade", "default": "Em modo de tela cheia" }, { "label": "Mensagem quando sair em modo de tela cheia para tecnologias de acessibilidade", "default": "Saiu do modo de tela cheia" }, { "label": "Cabeçalho da caixa de diálogo de confirmação de envio de resultados", "default": "Envie suas respostas" }, { "label": "Texto da caixa de diálogo de confirmação de envio do resultado", "default": "Isto irá apresentar seus resultados, você quer continuar?" }, { "label": "Botão de confirmação da caixa de diálogo de confirmação de envio do resultado", "default": "Enviar e ver resultados" }, { "label": "Slideshow navigation", "default": "Slideshow navigation" }, { "label": "Confirm button label", "default": "Confirm" }, { "label": "Cancel button label", "default": "Cancel" } ] }, { "label": "Definições de comportamento", "description": "Estas opções vão sobrepor as definições de funcionamento por defeito.", "fields": [ { "label": "Ativar o modo de controlo de superfície", "description": "Removes navigation controls for the end user. Use Go To Slide to navigate. Summary is not available in this mode." }, { "label": "Ocultar o slide de resumo", "description": "Ocultar o slide de resumo." }, { "label": "Substituir o botão \"Mostrar Solução\"", "description": "Esta opção determina se o botão \"Mostrar Solução\" será apresentado em todas as questões, desativado para todas ou configurado individualmente para cada questão.", "options": [ { "label": "Ativado" }, { "label": "Desativado" } ] }, { "label": "Sobrepor botão \"Repetir\"", "description": "Esta opção determina se o botão \"Repetir\" será apresentado em todas as questões, desativado para todas ou configurado individualmente para cada questão.", "options": [ { "label": "Ativado" }, { "label": "Desativado" } ] }, { "label": "Mostrar o botão \"Mostrar solução\" no slide de resumo", "description": "Se ativado, o aluno poderá mostrar as soluções para todas as perguntas quando chegar ao slide de resumo" }, { "label": "Mostrar o botão \"Repetir\" no slide de resumo", "description": "Se ativado, o aluno poderá tentar todas as perguntas novamente quando chegar ao slide de resumo. Esteja ciente de que, atualizando a página, os alunos poderão tentar novamente, mesmo que botão não esteja a ser exibido." }, { "label": "Ativar o botão de impressão", "description": "Ativar o botão de impressão." }, { "label": "Definições Sociais", "description": "Estas opções permitir-lhe-ão sobrepor as definições das redes sociais. Valores que não estejam preenchidos serão preenchidos automaticamente se for providenciado um link, ou gerados automaticamente se não for.", "fields": [ { "label": "Mostrar o ícone de partilha no Facebook" }, { "label": "Definições de partilha no Facebook", "fields": [ { "label": "Partilhar através de link no Facebook", "default": "@currentpageurl" }, { "label": "Citar através do Facebook", "default": "Consegui @score pontos de um máximo de @maxScore na atividade da página @currentpageurl." } ] }, { "label": "Mostrar o ícone de partilha no Twitter" }, { "label": "Definições de partilha no Twitter", "fields": [ { "label": "Partilhar no Twitter", "default": "Consegui @score pontos de um máximo de @maxScore na atividade da página @currentpageurl." }, { "label": "Partilhar através de link no Twitter", "default": "@currentpageurl" }, { "label": "Partilhar hashtags através do Twitter", "default": "h5p, curso" } ] }, { "label": "Mostrar o ícone de partilha no Google+" }, { "label": "Partilhar através de link no Google", "default": "@currentpageurl" } ] } ] } ] } PK'O\\,44+6f/ad6ffa09504c5d9ef5f5b5d7256a71b312f33ccfnuW+Avar H5P = H5P || {}; H5P.Summary = H5P.Summary || {}; H5P.Summary.XApiEventBuilder = (function ($, EventDispatcher) { /** * @typedef {object} LocalizedString * @property {string} en-US */ /** * @class {H5P.Summary.XApiEventDefinitionBuilder} * @constructor */ function XApiEventDefinitionBuilder(){ EventDispatcher.call(this); /** * @property {object} attributes * @property {string} attributes.name * @property {string} attributes.description * @property {string} attributes.interactionType * @property {string} attributes.correctResponsesPattern * @property {object} attributes.optional */ this.attributes = {}; } XApiEventDefinitionBuilder.prototype = Object.create(EventDispatcher.prototype); XApiEventDefinitionBuilder.prototype.constructor = XApiEventDefinitionBuilder; /** * Sets name * @param {string} name * @return {XApiEventDefinitionBuilder} */ XApiEventDefinitionBuilder.prototype.name = function (name) { this.attributes.name = name; return this; }; /** * Question text and any additional information to generate the report. * @param {string} description * @return {XApiEventDefinitionBuilder} */ XApiEventDefinitionBuilder.prototype.description = function (description) { this.attributes.description = description; return this; }; /** * Type of the interaction. * @param {string} interactionType * @see {@link https://github.com/adlnet/xAPI-Spec/blob/master/xAPI-Data.md#interaction-types|xAPI Spec} * @return {XApiEventDefinitionBuilder} */ XApiEventDefinitionBuilder.prototype.interactionType = function (interactionType) { this.attributes.interactionType = interactionType; return this; }; /** * A pattern for determining the correct answers of the interaction * @param {string[]} correctResponsesPattern * @see {@link https://github.com/adlnet/xAPI-Spec/blob/master/xAPI-Data.md#response-patterns|xAPI Spec} * @return {XApiEventDefinitionBuilder} */ XApiEventDefinitionBuilder.prototype.correctResponsesPattern = function (correctResponsesPattern) { this.attributes.correctResponsesPattern = correctResponsesPattern; return this; }; /** * Sets optional attributes * @param {object} optional Can have one of the following configuration objects: choices, scale, source, target, steps * @return {XApiEventDefinitionBuilder} */ XApiEventDefinitionBuilder.prototype.optional = function (optional) { this.attributes.optional = optional; return this; }; /** * @return {object} */ XApiEventDefinitionBuilder.prototype.build = function () { var definition = {}; // sets attributes setAttribute(definition, 'name', localizeToEnUS(this.attributes.name)); setAttribute(definition, 'description', localizeToEnUS(this.attributes.description)); setAttribute(definition, 'interactionType', this.attributes.interactionType); setAttribute(definition, 'correctResponsesPattern', this.attributes.correctResponsesPattern); setAttribute(definition, 'type', 'http://adlnet.gov/expapi/activities/cmi.interaction'); // adds the optional object to the definition if(this.attributes.optional){ $.extend(definition, this.attributes.optional); } return definition; }; // ----------------------------------------------------- /** * * @constructor */ function XApiEventResultBuilder(){ EventDispatcher.call(this); /** * @property {object} attributes * @property {string} attributes.completion * @property {boolean} attributes.success * @property {boolean} attributes.response * @property {number} attributes.rawScore * @property {number} attributes.maxScore */ this.attributes = {}; } XApiEventResultBuilder.prototype = Object.create(EventDispatcher.prototype); XApiEventResultBuilder.prototype.constructor = XApiEventResultBuilder; /** * @param {boolean} completion * @return {XApiEventResultBuilder} */ XApiEventResultBuilder.prototype.completion = function (completion) { this.attributes.completion = completion; return this; }; /** * @param {boolean} success * @return {XApiEventResultBuilder} */ XApiEventResultBuilder.prototype.success = function (success) { this.attributes.success = success; return this; }; /** * @param {number} duration The duraction in seconds * @return {XApiEventResultBuilder} */ XApiEventResultBuilder.prototype.duration = function (duration) { this.attributes.duration = duration; return this; }; /** * Sets response * @param {string|string[]} response * @return {XApiEventResultBuilder} */ XApiEventResultBuilder.prototype.response = function (response) { this.attributes.response = (typeof response === 'string') ? response : response.join('[,]'); return this; }; /** * Sets the score, and max score * @param {number} score * @param {number} maxScore * @return {XApiEventResultBuilder} */ XApiEventResultBuilder.prototype.score = function (score, maxScore) { this.attributes.rawScore = score; this.attributes.maxScore = maxScore; return this; }; /** * Builds the result object * @return {object} */ XApiEventResultBuilder.prototype.build = function () { var result = {}; setAttribute(result, 'response', this.attributes.response); setAttribute(result, 'completion', this.attributes.completion); setAttribute(result, 'success', this.attributes.success); if(isDefined(this.attributes.duration)){ setAttribute(result, 'duration','PT' + this.attributes.duration + 'S'); } // sets score if (isDefined(this.attributes.rawScore)) { result.score = {}; setAttribute(result.score, 'raw', this.attributes.rawScore); if (isDefined(this.attributes.maxScore) && this.attributes.maxScore > 0) { setAttribute(result.score, 'min', 0); setAttribute(result.score, 'max', this.attributes.maxScore); setAttribute(result.score, 'min', 0); setAttribute(result.score, 'scaled', Math.round(this.attributes.rawScore / this.attributes.maxScore * 10000) / 10000); } } return result; }; // ----------------------------------------------------- /** * @class {H5P.Summary.XApiEventBuilder} */ function XApiEventBuilder() { EventDispatcher.call(this); /** * @property {object} attributes * @property {string} attributes.contentId * @property {string} attributes.subContentId */ this.attributes = {}; } XApiEventBuilder.prototype = Object.create(EventDispatcher.prototype); XApiEventBuilder.prototype.constructor = XApiEventBuilder; /** * @param {object} verb * * @public * @return {H5P.Summary.XApiEventBuilder} */ XApiEventBuilder.prototype.verb = function (verb) { this.attributes.verb = verb; return this; }; /** * @param {string} name * @param {string} mbox * @param {string} objectType * * @public * @return {H5P.Summary.XApiEventBuilder} */ XApiEventBuilder.prototype.actor = function (name, mbox, objectType) { this.attributes.actor = { name: name, mbox: mbox, objectType: objectType }; return this; }; /** * Sets contentId * @param {string} contentId * @param {string} [subContentId] * @return {H5P.Summary.XApiEventBuilder} */ XApiEventBuilder.prototype.contentId = function (contentId, subContentId) { this.attributes.contentId = contentId; this.attributes.subContentId = subContentId; return this; }; /** * Sets parent in context * @param {string} parentContentId * @param {string} [parentSubContentId] * @return {H5P.Summary.XApiEventBuilder} */ XApiEventBuilder.prototype.context = function (parentContentId, parentSubContentId) { this.attributes.parentContentId = parentContentId; this.attributes.parentSubContentId = parentSubContentId; return this; }; /** * @param {object} result * * @public * @return {H5P.Summary.XApiEventBuilder} */ XApiEventBuilder.prototype.result = function (result) { this.attributes.result = result; return this; }; /** * @param {object} objectDefinition * * @public * @return {H5P.Summary.XApiEventBuilder} */ XApiEventBuilder.prototype.objectDefinition = function (objectDefinition) { this.attributes.objectDefinition = objectDefinition; return this; }; /** * Returns the buildt event * @public * @return {H5P.XAPIEvent} */ XApiEventBuilder.prototype.build = function(){ var event = new H5P.XAPIEvent(); event.setActor(); event.setVerb(this.attributes.verb); // sets context if(this.attributes.parentContentId || this.attributes.parentSubContentId){ event.data.statement.context = { 'contextActivities': { 'parent': [ { 'id': getContentXAPIId(this.attributes.parentContentId, this.attributes.parentSubContentId), 'objectType': "Activity" } ] } }; if (H5P.xApiSessionId) { event.data.statement.context.extensions = { 'https://h5p.com/xapi/session-id': H5P.xApiSessionId }; } } event.data.statement.object = { 'id': getContentXAPIId(this.attributes.contentId, this.attributes.subContentId), 'objectType': 'Activity' }; setAttribute(event.data, 'actor', this.attributes.actor); setAttribute(event.data.statement, 'result', this.attributes.result); setAttribute(event.data.statement.object, 'definition', this.attributes.objectDefinition); // sets h5p specific attributes if(event.data.statement.object.definition && (this.attributes.contentId || this.attributes.subContentId)) { var extensions = event.data.statement.object.definition.extensions = {}; setAttribute(extensions, 'http://h5p.org/x-api/h5p-local-content-id', this.attributes.contentId); setAttribute(extensions, 'http://h5p.org/x-api/h5p-subContentId', this.attributes.subContentId); } return event; }; /** * Creates a Localized String object for en-US * * @param str * @return {LocalizedString} */ var localizeToEnUS = function(str){ if(str != undefined){ return { 'en-US': cleanString(str) }; } }; /** * Generates an id for the content * @param {string} contentId * @param {string} [subContentId] * * @see {@link https://github.com/h5p/h5p-php-library/blob/master/js/h5p-x-api-event.js#L240-L249} * @return {string} */ var getContentXAPIId = function (contentId, subContentId) { const cid = 'cid-' + contentId; if (contentId && H5PIntegration && H5PIntegration.contents && H5PIntegration.contents[cid]) { var id = H5PIntegration.contents[cid].url; if (subContentId) { id += '?subContentId=' + subContentId; } return id; } }; /** * Removes html elements from string * * @param {string} str * @return {string} */ var cleanString = function (str) { return $('
' + str + '
').text().trim(); }; var isDefined = function(val){ return typeof val !== 'undefined'; }; function setAttribute(obj, key, value, required){ if(isDefined(value)){ obj[key] = value; } else if (required) { console.error("xApiEventBuilder: No value for [" + key + "] in", obj); } } /** * Creates a new XApiEventBuilder * * @public * @static * @return {H5P.Summary.XApiEventBuilder} */ XApiEventBuilder.create = function(){ return new XApiEventBuilder(); }; /** * Creates a new XApiEventDefinitionBuilder * * @public * @static * @return {XApiEventDefinitionBuilder} */ XApiEventBuilder.createDefinition = function(){ return new XApiEventDefinitionBuilder(); }; /** * Creates a new XApiEventDefinitionBuilder * * @public * @static * @return {XApiEventResultBuilder} */ XApiEventBuilder.createResult = function(){ return new XApiEventResultBuilder(); }; /** * Returns choice to be used with 'cmi.interaction' for Activity of type 'choice' * * @param {string} id * @param {string} description * * @public * @static * @see {@link https://github.com/adlnet/xAPI-Spec/blob/master/xAPI-Data.md#choice|xAPI-Spec} * @return {object} */ XApiEventBuilder.createChoice = function(id, description){ return { id: id, description: localizeToEnUS(description) }; }; /** * Takes an array of correct ids, and joins them to a 'correct response pattern' * * @param {string[]} ids * * @public * @static * @see {@link https://github.com/adlnet/xAPI-Spec/blob/master/xAPI-Data.md#choice|xAPI-Spec} * @return {string} */ XApiEventBuilder.createCorrectResponsePattern = function(ids){ return ids.join('[,]'); }; /** * Interaction types * * @readonly * @enum {String} */ XApiEventBuilder.interactionTypes = { CHOICE: 'choice', COMPOUND: 'compound', FILL_IN: 'fill-in', MATCHING: 'matching', TRUE_FALSE: 'true-false' }; /** * Verbs * * @readonly * @enum {String} */ XApiEventBuilder.verbs = { ANSWERED: 'answered' }; return XApiEventBuilder; })(H5P.jQuery, H5P.EventDispatcher); PK'O\ Vuu+37/ad37846d15f36ad030fd5a9617ff2f34cb85e0dbnuW+A{ "semantics": [ { "description": "Mērķu lapas apraksts.", "label": "Apraksts", "default": "Ievietojiet mērķus, pie kuriem esat izvēlējies strādāt." }, { "label": "Iestatiet mērķa saites tekstu", "default": "Izveidot jaunu mērķi", "description": "Teksts, kas tiks parādīts uz jauna mērķa izveides pogas." }, { "label": "Lietotāja definētā mērķa etiķete", "description": "Teksts, kas tiks parādīts kā etiķete lietotāja izveidotajam mērķim.", "default": "Lietotāja definēts mērķis" }, { "label": "Iestatiet mērķa vietturi", "default": "Raksti šeit...", "description": "Teksts, kas tiks parādīts kā vietturis, veidojot jaunu mērķi." }, { "label": "Teksts, kas norāda, cik mērķi ir pievienoti", "default": "Pievienotie mērķi:", "description": "Šis teksts tiks atspoguļots pirms šobrīd izveidoto mērķu skaita, piemēram: 'Pievienotie mērķi: 5', kur 'Pievienotie mērķi:' ir šis teksts." }, { "default": "Precizēšana", "label": "Teksts pogai \"Precizēt mērķi\"" }, { "label": "Teksts pogai \"Noņemt mērķi\"", "default": "Noņemt" }, { "label": "Palīdzības teksta etiķete", "description": "Etiķete papildus palīdzības teksta atspoguļošanai lietotājam.", "default": "Papildus informācija" }, { "label": "Aizpildiet papildus palīdzības informāciju", "description": "Šeit varat ievadīt lietotājam noderīgu papildu informāciju." }, { "label": "Lokalizēt mērķa dzēšanas apstiprinājumu", "fields": [ { "label": "Galvene", "default": "Apstipriniet dzēšanu" }, { "label": "Ziņa", "default": "Vai esat pārliecināts, ka vēlaties dzēst šo mērķi?" }, { "label": "Atcelšanas pogas etiķete", "default": "Atcelt" }, { "label": "Apstiprinājuma pogas etiķete", "default": "Apstiprināt" } ] } ] } PK'O\Ponn+c6/adc64a43f79666c00bc16bece38abfe9e561e5c7nuW+A{ "libraryStrings": { "invalidTime": "\":property\" περιέχει μη έγκυρο timecode." } } PK'O\[ʖ +cd/adcd05bab3559f6fc109bb69b356cffa16c82777nuW+A{ "semantics": [ { "label": "Obrázek na pozadí", "description": "Obrázek zobrazovaný na pozadí." }, { "label": "Alternativní text pro obrázek na pozadí", "description": "Pokud prohlížeč nemůže načíst obrázek, zobrazí se místo toho tento text. Používá se také podpůrnými technologiemi." }, { "label": "Ikona aktivního bodu", "options": [ { "label": "Předdefinovaná ikona" }, { "label": "Nahraný obrázek" } ] }, { "label": "Předdefinovaná ikona", "description": "Použití předdefinované ikony pro aktivní bod.", "options": [ { "label": "Plus" }, { "label": "Mínus" }, { "label": "Křížek" }, { "label": "Zaškrtnutí" }, { "label": "Otazník" }, { "label": "Informace" }, { "label": "Vykřičník" } ] }, { "label": "Nahraný obrázek", "description": "Použijte svůj vlastní obrázek pro ikonu hotspotu.
Pro obrázek se doporučuje 75 x 75 pixelů." }, { "label": "Barva aktivního bodu", "description": "Barva aktivních bodů" }, { "entity": "aktivní bod", "label": "Aktivní body", "field": { "label": "Aktivní bod", "fields": [ { "label": "Poloha aktivního bodu", "description": "Kliknutím na obrázek miniatury umístíte aktivní bod" }, { "label": "Překrýt celý obrázek na pozadí", "description": "Když uživatel klepne na aktivní bod, vyskakovací okno překryje celý obrázek na pozadí" }, { "label": "Záhlaví", "description": "Optional header for the popup. This is used by assistive technologies." }, { "label": "Obsah vyskakovacího okna", "field": { "label": "Obsah položky" } } ] } }, { "label": "Popisek aktivního bodu pro podpůrné technologie", "default": "Aktivní bod #num", "description": "Pomůže oznámit, ke kterému prvku aktivního bodu byl navigován, pokud pro hotspot není zadána žádná záhlaví. #num lze použít k nahrazení čísla aktivního bodu." }, { "label": "Popisek tlačítka zavřít pro podpůrné technologie", "default": "Zavřít" }, { "label": "Label for assistive technologies denoting that hotspot contains Audio/Video", "default": "Contains Audio/Video" } ] } PK'O\CF+cd/adcda544924c6a3aa950f28d92c8b350eb4a23f9nuW+A{ "libraryStrings": { "helpText": "Criar blocos de perguntas e respostas, onde cada bloco é separado por uma linha vazia. Em cada bloco, a primeira linha é a pergunta, as outras linhas contêm as respostas. A primeira resposta é a resposta correcta", "warning": "Aviso! Se alterar as tarefas no editor de texto, toda a formatação (incluindo quebras de linha) será removida." } } PK'O\uii+60/ad60253229bc8060c3c366fd57efcc95e7cd8c27nuW+A{ "libraryStrings": { "confirmReset": "確定要變更版型?這會重置預覽設定喔!", "sameAsSpacing": "與間距同寬", "noFrame": "不加邊框", "uploadError": "無法上傳圖片,檔案可能太大了。", "zoomIn": "放大", "zoomOut": "縮小", "noMoreZoom": "無法再縮放", "addImage": "添加圖片", "changeImage": "變更圖片", "imageSettings": "圖片資訊設定", "close": "關閉", "imageAltLabel": "替代文字", "imageTitleLabel": "懸停文字", "pleaseConfirm": "Please confirm", "metadata": "Metadata settings" } } PK'O\44+9d/ad9dafc0677654b62f31b55a1c15bdc964807833nuW+A{ "semantics": [ { "label": "表格", "default": "
标题栏1标题栏2
行1列1行1列2
行2列1行2列2
" } ] } PKʔ\u-]]?61/8dddf2bd79472c4ffce70d15930b9ad34a6b139ee6817c5af0547186b82cnu[ f7566be513c81229506946aad8bd0ba16546c34e {"key":"make-fetch-happen:request-cache:https://registry.npmjs.org/base64id","integrity":"sha512-GUhLgC+mWnuDjzVKqMH+QC8lJTxNITIdvknOmgaZdZ3vqJeHhh+TJNISvwP/cNB5EC6ZkCCnrTJaDxd/ZiVd9g==","time":1735287902426,"size":2552,"metadata":{"time":1735287902352,"url":"https://registry.npmjs.org/base64id","reqHeaders":{"accept":"application/vnd.npm.install-v1+json; q=1.0, application/json; q=0.8, */*"},"resHeaders":{"cache-control":"public, max-age=300","content-encoding":"gzip","content-type":"application/vnd.npm.install-v1+json","date":"Fri, 27 Dec 2024 08:25:02 GMT","etag":"W/\"55c3eace4e17d2ef05c132e42506693a\"","last-modified":"Mon, 13 Jun 2022 04:18:40 GMT","vary":"accept-encoding, accept"},"options":{"compress":true}}} 1772792f441cee2fc849a1e111b750e87720eb6e {"key":"make-fetch-happen:request-cache:https://registry.npmjs.org/base64id","integrity":"sha512-4c6soYDTLxlZs6lLSj163kK4aq7yN2/ybAad4q31zR/umC2KU3j07KHfUfNFJdxQe+QPkZKOXt/ulDVkpa5ORw==","time":1776429288860,"size":6136,"metadata":{"time":1776429288855,"url":"https://registry.npmjs.org/base64id","reqHeaders":{"accept":"application/json"},"resHeaders":{"cache-control":"public, max-age=300","content-encoding":"gzip","content-type":"application/json","date":"Fri, 17 Apr 2026 12:34:49 GMT","etag":"W/\"16896ca67110cbd16680889e99eee7fc\"","last-modified":"Mon, 13 Jun 2022 04:18:40 GMT","vary":"accept-encoding, accept"},"options":{"compress":true}}} 3761727576fe345dbc3b08c194522d534a2199b9 {"key":"make-fetch-happen:request-cache:https://registry.npmjs.org/base64id","integrity":"sha512-4c6soYDTLxlZs6lLSj163kK4aq7yN2/ybAad4q31zR/umC2KU3j07KHfUfNFJdxQe+QPkZKOXt/ulDVkpa5ORw==","time":1776430472400,"size":6136,"metadata":{"time":1776430472400,"url":"https://registry.npmjs.org/base64id","reqHeaders":{"accept":"application/json"},"resHeaders":{"cache-control":"public, max-age=300","date":"Fri, 17 Apr 2026 12:54:33 GMT","etag":"\"16896ca67110cbd16680889e99eee7fc\"","last-modified":"Mon, 13 Jun 2022 04:18:40 GMT","vary":"Accept-Encoding","content-encoding":"gzip","content-type":"application/json"},"options":{"compress":true}}}PK \cDad22a164dbc437a50e569bf36029ff7096009c662da03e754b5dcce0a22ed880.phpnu[PK \,MWW$-ad0d6a3b7c64d143db1287f4938e0782.phpnu[PK'O\p,B۪+9a/ad9a60e79b9c5d91f0603e98c7e9249b5239fe23nuW+APK'O\4 4 +75d/ad5da58db3c742dbb1e4b1bc3a20afdf92802c21nuW+APK'O\d7+lC49/ad4988c4fbf6efbe617922b0cc1fde8a6f57b224nuW+APK'O\>O+T00/ad0061603d02daa1681328a470e6dc49e185fd38nuW+APK'O\~ +W23/ad23a10b52fcdaa70983aac1bac03a6f79962699nuW+APK'O\v\188+^b6e/ad6e628f93be857b7536e73c1c398c128790a653nuW+APK'O\<=m7m7+43/ad438db41e543faf578cbeca06f69f8b5204d236nuW+APK'O\\,44+^6f/ad6ffa09504c5d9ef5f5b5d7256a71b312f33ccfnuW+APK'O\ Vuu+y37/ad37846d15f36ad030fd5a9617ff2f34cb85e0dbnuW+APK'O\Ponn+Ic6/adc64a43f79666c00bc16bece38abfe9e561e5c7nuW+APK'O\[ʖ +cd/adcd05bab3559f6fc109bb69b356cffa16c82777nuW+APK'O\CF+Gcd/adcda544924c6a3aa950f28d92c8b350eb4a23f9nuW+APK'O\uii+/60/ad60253229bc8060c3c366fd57efcc95e7cd8c27nuW+APK'O\44+!9d/ad9dafc0677654b62f31b55a1c15bdc964807833nuW+APKʔ\u-]]?#61/8dddf2bd79472c4ffce70d15930b9ad34a6b139ee6817c5af0547186b82cnu[PKAN,