Compare commits

...

649 Commits

Author SHA1 Message Date
Ravi Majithia c79f97a16f
JI-2872 Fix h5p content font size in safari ios devices (#114) 2022-01-05 09:24:39 +01:00
Oliver Tacke d3d003e978
HFP-3465 Fix line breaks breaking metadata field validation (#109)
* Fix linebreaks breaking metadata field validation
* HFP-3465 Use "single line" flag for regexp
2021-12-21 23:45:32 +01:00
Ravi Majithia 22115c0aea
JI-2899 Add aria label to width and height for embed popup (#110) 2021-11-10 12:47:39 +01:00
Erik Langhaug aaf26d584b Merge branch 'master' into JI-2176-tutorial-example-links-new-design 2021-07-01 10:40:04 +02:00
Frode Petterson eeefc1228b
Merge pull request #85 from otacke/add-gltf-file-format
Add gltf to list of allowed file extensions
2021-06-17 13:07:56 +02:00
Erik Langhaug 13ba87ed58 JI-2176 Fix incorrect paths to h5p font files 2021-06-02 09:36:31 +02:00
Erik Langhaug f9a20e908f JI-2176 Add new icons for tutorial and example links 2021-05-31 15:29:14 +02:00
Thomas Marstrander 4599291d7c Fix using undefined $ function 2021-05-12 12:27:57 +02:00
Frode Petterson 1c12b7bbf7
Fix check/use of incorrect API function
This will solve fullscreen issues in Firefox
2021-05-12 12:10:51 +02:00
Frode Petterson 588f096afe
Fix iframe for back button in Edge Chromium
When navigating to the previous page in Edge Chromium the H5P would often break due to it not being loaded when the page is ready. This fix will force a reload of the iframe if it is broken on initialization.
2021-04-29 22:00:15 +02:00
Frode Petterson affaa83b51 Merge branch 'fix-improved-attribute-filtering' 2021-04-22 11:31:08 +02:00
Frode Petterson db3da7a144 Fix renaming of variables 2021-04-22 11:30:45 +02:00
Frode Petterson 17e97d48db Merge branch 'fix-improved-attribute-filtering' 2021-04-22 10:19:26 +02:00
Frode Petterson efd98a719d Fix prevent unnecessary looping 2021-04-22 10:18:43 +02:00
Frode Petterson 0eca5935c0 Fix improved filtering of attributes 2021-04-22 10:05:51 +02:00
Thomas Marstrander f6fef74651 Update keywords description text
Fixes issue 5 from Hub review april
2021-04-14 16:52:43 +02:00
Thomas Marstrander cc5a0b2e57 Update hub sharing 2021-04-14 16:11:48 +02:00
Thomas Marstrander fe3f4a504d Update to use production content hub api 2021-04-07 15:45:36 +02:00
Thomas Marstrander d2522e3800 JI-2366 Update hub sharing UI 2021-04-06 18:36:27 +02:00
Thomas Marstrander 4c543f3214 JI-2359 Update sharing UI 2021-04-06 16:27:22 +02:00
Thomas Marstrander 1d8f0e8dac JI-2366 Update sharing UI 2021-04-06 10:56:34 +02:00
Thomas Marstrander a0f1e1a527 Merge branch 'master' into release 2021-03-23 10:56:38 +01:00
Thomas Marstrander 0308e3a888 Update hub sharing ui 2021-03-23 10:54:51 +01:00
Thomas Marstrander 8ba1611575 Update sharing ui 2021-03-19 11:05:40 +01:00
Thomas Marstrander 951912d7c1 Merge branch 'content-hub' of https://github.com/h5p/h5p-php-library into content-hub 2021-03-17 15:11:51 +01:00
Thomas Marstrander 0c40e081e7 HFP-3234 Adjust notification text when content is shared 2021-03-17 15:11:34 +01:00
Hannaes 982d07f137 HFP-3233 Add hub sharing ui keyword tip strings 2021-03-15 17:13:56 +01:00
Hannaes 96d5b63b2e HFP-3232 Change placeholder text for disciplines selector 2021-03-12 16:31:18 +01:00
Thomas Marstrander 16e51c06f5 JI-2271 Update hub sharing ui 2021-02-22 12:23:36 +01:00
Thomas Marstrander 09e7a7cb0d JI-2271 Add translations for the content hub 2021-02-11 12:28:46 +01:00
Thomas Marstrander 9aacfa1780 Update hub sharing ui 2021-02-10 12:27:56 +01:00
Frode Petterson f1ddd3b3f5 HFP-3089 Update registration UI + translations 2020-12-10 15:13:48 +01:00
Frode Petterson 90835b7345 Update Core font to include hub molecule icon 2020-12-03 10:56:17 +01:00
Thomas Marstrander 1831312d41
JI-2081 Add translations
Move token verification to the individual integrations
Add error message to UI if logo validation fails
2020-12-01 10:40:33 +01:00
Frode Petterson 47d4499377 Update Hub Sharing + Registration clients 2020-11-26 16:22:53 +01:00
Frode Petterson fdd2a618bc Remove token validation from Core
Causes issues for other platforms.
2020-11-12 16:01:37 +01:00
Frode Petterson 8a29796cab Remove token validation from Core
Causes issues for other platforms.
2020-11-12 15:04:10 +01:00
Frode Petterson aa6c909572 Add support for 404 when trying to update content 2020-11-10 14:10:22 +01:00
Frode Petterson 0ba2496c11 Update Sharing UI 2020-11-09 16:12:36 +01:00
Frode Petterson dab4e5120d Update sharing UI 2020-11-05 13:50:06 +01:00
Frode Petterson d5be0158a4 Revert "Fix using Core language"
This reverts commit 4d7dccad3d.
2020-11-04 13:23:56 +01:00
Frode Petterson 4d7dccad3d Fix using Core language 2020-11-04 11:50:54 +01:00
Frode Petterson 160b86e9ae Fix cleanup after reverting revert 2020-11-04 10:42:52 +01:00
Frode Petterson aa5abe786e Revert "Reverts content hub interface change"
This reverts commit 16c71b444b.
2020-11-04 10:25:27 +01:00
Frode Petterson 48c961b661 Merge branch 'master' into content-hub 2020-11-04 10:08:12 +01:00
Frode Petterson d1450fc1bb Update to latest version of registration/sharing UI 2020-10-26 15:52:31 +01:00
Erik Langhaug 96a2c1ff91 Fix syntax error 2020-10-05 14:36:39 +02:00
Hannaes 4b76c7ff8f JI-1958 Add UI string needed 2020-10-02 15:41:36 +02:00
Erik Langhaug 720e6b29a2 HFP-3120 Add UI string for content hub disciplines 2020-09-23 12:48:09 +02:00
Paal Joergensen a5c3dd6c4e JI-1923 Rename 'Hub' -> 'H5P Hub' 2020-09-18 11:07:31 +02:00
Hannaes 832707dcaf JI-1923 Change title text of registration ui 2020-09-18 09:50:41 +02:00
Erik Langhaug ba98139ccb HFP-3049 Add UI strings for cancel publish dialog 2020-09-17 11:50:01 +02:00
Thomas Marstrander ae7b82a34a
HFP-3109 Update hub sharing ui 2020-09-16 15:28:32 +02:00
Erik Langhaug 25deeac560 HFP-3107 Add UI strings for remove and removeImage 2020-09-16 14:14:05 +02:00
Thomas Marstrander 7538202500
HFP-3108 Adjust translations
Removed duplicate strings
2020-09-14 12:31:29 +02:00
Thomas Marstrander 0d7abe0e51
HFP-3102 Add error handling for the content hub 2020-09-10 17:08:14 +02:00
Thomas Marstrander 14bad68d70
HFP-3095 Throw error if retrieving content from hub failed 2020-09-09 14:48:19 +02:00
Thomas Marstrander 917a9b6ccb
HFP-3095 Add error message if unable to contact hub
Fix translation
Update hub registration ui
2020-09-09 13:26:46 +02:00
Thomas Marstrander 67bce48842
HFP-3092 Update sharing ui 2020-09-09 11:24:18 +02:00
Frode Petterson d90accc55e Update sharing UI 2020-09-04 12:54:16 +02:00
Frode Petterson a7f2054101 Update translations and sharing UI 2020-09-04 11:19:34 +02:00
Frode Petterson 03fe25df5a Merge branch 'content-hub' of github.com:h5p/h5p-php-library into content-hub 2020-09-03 15:39:27 +02:00
Frode Petterson 7cb4419eb0 Add separate trigger to trigger content sync 2020-09-03 15:38:45 +02:00
Thomas Marstrander 645058f03e
Merge branch 'content-hub' of github.com:h5p/h5p-php-library into content-hub 2020-09-03 15:02:50 +02:00
Thomas Marstrander b47ae6de6e
HFP-3040 Move account registration logic into core 2020-09-03 15:02:23 +02:00
Frode Petterson e65b22f0d1 HFP-3048 Add support for updating existing content 2020-09-03 14:28:11 +02:00
Frode Petterson 8b317fa5fe HFP-3048 Add UI for getting content data
+ Update sharing UI
2020-09-02 16:22:06 +02:00
Thomas Marstrander 1a644dda11
HFP-3008 Add content language to iframe document 2020-08-28 16:54:16 +02:00
Thomas Marstrander 16c71b444b
Reverts content hub interface change
Moved content hub changes to its own feature branch until it is ready to be implemented for all plugins
2020-08-28 15:26:10 +02:00
Thomas Marstrander eb52ec25a0
Fix missing merge from Drupal git 2020-08-28 11:17:19 +02:00
Thomas Marstrander 3a2232e690
Remove unused font 2020-08-28 10:49:13 +02:00
Thomas Marstrander fb6278744c
Add content hub and a11y changes from Drupal git
See Drupal 7 git for git history for these commits.
2020-08-28 10:30:06 +02:00
Thomas Marstrander 35eb39c469
HFP-3006 Change contrast for iframe action buttons 2020-08-26 13:35:01 +02:00
Thomas Marstrander 555442d37e
Change fallback to original jquery .load() if first arg is not a function 2020-08-05 11:44:23 +02:00
Thomas Marstrander c472d5172d
Add backwards compatibility for old libraries using jQuery's .load() 2020-08-05 11:09:38 +02:00
Oliver Tacke a80773e8d6
Add binary variant of glTF files
glTF files can also be compressed making them smaller
2020-05-30 12:50:37 +02:00
Oliver Tacke ce373203b0 Add gltf to list of allowed file extensions 2020-05-23 17:27:56 +02:00
Frode Petterson 196888bf3e Add jQuery 3.5.1 2020-05-18 11:27:47 +02:00
Pål Jørgensen 743147698f
Merge pull request #74 from andrewnicols/libraryPathSubClassA2
Allow the dependency path to be overridden by child classes
2019-12-18 09:13:46 +01:00
Pål Jørgensen 3b2990f9b8
Merge pull request #76 from andrewnicols/travisfix
Change lint check to report fails correctly
2019-12-18 09:09:51 +01:00
Andrew Nicols 2cb43ad147 Remove type-hint from h5p.classes 2019-12-18 08:44:25 +08:00
Andrew Nicols acec5b0b33 Change lint check to report fails correctly 2019-12-18 08:41:25 +08:00
Paal Joergensen df9d25a5b3 JI-1497 Add audio icon to H5P core font 2019-12-17 10:16:51 +01:00
Paal Joergensen bea974e597 Remove incompatible code 2019-12-17 09:55:54 +01:00
Paal Joergensen 866f94ea47 Revert "Revert "Allow the dependency path to be overridden by child classes""
This reverts commit 87f6f3c970.
2019-12-11 08:56:26 +01:00
Pål Jørgensen 8432a88386
Merge pull request #75 from andrewnicols/travis
Add Travis for all supported PHP versions
2019-12-11 08:49:46 +01:00
Andrew Nicols d392737f45 Add Travis for all supported PHP versions 2019-12-11 08:35:14 +08:00
Andrew Nicols 668233fb95 Allow the dependency path to be overridden by child classes
This allows an implementor to choose how the library is served.
2019-12-11 08:22:19 +08:00
Pål Jørgensen 4c973c3088
Merge pull request #70 from h5p/revert-68-libraryPathSubclass
Revert "Allow the dependency path to be overridden by child classes"
2019-11-12 16:05:14 +01:00
Pål Jørgensen 87f6f3c970
Revert "Allow the dependency path to be overridden by child classes" 2019-11-12 16:04:50 +01:00
Thomas 42568106fc
Merge pull request #68 from andrewnicols/libraryPathSubclass
Allow the dependency path to be overridden by child classes
2019-10-31 16:30:56 +01:00
Frode Petterson 541f6d8415
Merge pull request #69 from stronk7/php74_curly_array_string_offset
Fix PHP 7.4 don't use curly braces for array/string offset
2019-10-30 12:48:13 +01:00
Frode Petterson 143a44cef5 Merge branch 'release' 2019-10-30 11:48:24 +01:00
Frode Petterson 55b04018d7 Adjust icons 2019-10-30 11:42:15 +01:00
Eloy Lafuente (stronk7) f6f6d0fb56 PHP 7.4 fix, don't use curly braces for array/string offset
The array and string offset access syntax using curly braces is deprecated.
Use $str[$idx] instead of $str{$idx}.
RFC: https://wiki.php.net/rfc/deprecate_curly_braces_array_access
2019-10-30 11:28:54 +01:00
Frode Petterson f37231eb3a Merge branch 'release' 2019-10-29 15:14:07 +01:00
Frode Petterson 128fbbc532 Fix de-centered fonts 2019-10-29 15:13:47 +01:00
Frode Petterson 8bf43081dd HFP-2860 Fix white-space style 2019-10-25 13:04:37 +02:00
Frode Petterson ec518a6f67 HFP-2860 Fix BG color 2019-10-25 10:22:14 +02:00
Frode Petterson e635d33169 HFP-2860 Fix BG color + overflow 2019-10-24 16:29:22 +02:00
Frode Petterson 43605b14d6 HFP-2860 Add styling for code tag 2019-10-24 14:39:07 +02:00
Frode Petterson f08655cfb0 Fix dialog accessibility 2019-10-17 15:01:22 +02:00
Frode Petterson 0293d2cdfb Fix space key scrolling page on button expand 2019-10-17 13:02:36 +02:00
Andrew Nicols 34bc10184d Allow the dependency path to be overridden by child classes
This allows an implementor to choose how the library is served.
2019-10-11 20:38:01 +08:00
Thomas Marstrander 9a658ba387
JI-1352 Add event when h5p has finished initializing
This is useful if you want to hook into H5P functionality after the
init function has run, e.g. 'resize' event in instances
2019-10-10 10:34:57 +02:00
Frode Petterson 159f83f1b8 JI-1282 Bump core 2019-10-03 14:01:27 +02:00
Frode Petterson 117668d0e5 JI-1282 Update icons 2019-10-03 09:32:54 +02:00
Oliver Tacke bf10430671 Add toggler view others contents (#65)
* Add toggler to show/hide content of others in data view

Will try to retrieve user.id, user.name and
user.canToggleViewOthersH5PContents from H5PIntegration. If set,
allows to show/hide contents of other users using a checkbox that
uses the user parameters to set a facet on the author column.

* Add toggler to show/hide content of others in data view

Will try to retrieve user.id, user.name and
user.canToggleViewOthersH5PContents from H5PIntegration. If set,
allows to show/hide contents of other users using a checkbox that
uses the user parameters to set a facet on the author column.

* Adjust stylesheet to better match WordPress look
2019-09-30 10:36:42 +02:00
Sjoerd Zonneveld 7d7b420b45 Replaced DIRECTORY_SEPARATOR (#63)
Replace DIRECTORY_SEPARATOR with slash
2019-09-27 11:15:10 +02:00
Paal Joergensen e6fa3d7e54 HFP-1763 Simplify logic 2019-09-26 12:58:15 +02:00
Thomas Marstrander 4d061aef7a
Merge branch 'master' of github.com:h5p/h5p-php-library 2019-09-23 10:58:56 +02:00
Thomas Marstrander 058a9f0a71
HFP-1763 Add focus effect back for textarea 2019-09-23 10:58:28 +02:00
Frode Petterson 9577c57f95 Update H5P font file to include throbber 2019-09-19 11:29:46 +02:00
Thomas Marstrander 8cfd2f0519
HFP-1763 Remove focus effect when using mouse 2019-09-18 13:45:37 +02:00
Paal Joergensen 0922db6fab JI-1285 Add comment 2019-09-10 14:15:28 +02:00
Thomas Marstrander 7a8f894c85 JI-1285 Set empty XAPIEvent object when instance has no contentId
Content types view always expect to have a contentId when they are displayed. This is no the case if they are displayed in the editor as part of a preview. The fix is to set an empty object with definition for the xAPI event, so all the content types that rely on this does not have to be rewritten. This means that content types that are being previewed will send xAPI completed events, but since there are no scripts that catch these events in the editor, this is not a problem.
2019-09-10 14:15:17 +02:00
Paal Joergensen 7bc8666f30 Don't invoke clearFilteredParameters for empty array 2019-08-15 21:15:55 +02:00
Paal Joergensen 8ceb77e881 Bump core api version 2019-08-15 13:26:32 +02:00
Thomas Marstrander 064391236a
Fix keeping metadata when upgrading content 2019-08-15 11:15:47 +02:00
Frode Petterson 4a9ea77d47 HFP-2796 Fix confirm dialog in editor semi-fullsreen mode 2019-08-01 16:21:34 +02:00
Frode Petterson 03794f36dd HFP-2323 Fix clearing all the content caches at the same time 2019-07-12 16:39:46 +02:00
Frode Petterson 9e749eda92 HFP-2766 Allow setting bitrate for video files 2019-06-20 16:10:18 +02:00
Frode Petterson 2c15047e50 JI-1192 Add support for additional query parameter 2019-06-19 10:58:47 +02:00
Frode Petterson fec8953ba8 JI-1192 Fix crossOrigin policy only set for local sources 2019-06-18 14:43:34 +02:00
Frode Petterson 3570441801 Add two new allowed verbs to the xAPI events 2019-06-11 15:03:33 +02:00
Frode Petterson b9a1e5f404 Fix trying to copy URLs upon saving 2019-05-08 14:16:22 +02:00
Paal Joergensen 5d7b480c3b Fix code format 2019-04-08 11:19:38 +02:00
Thomas Marstrander 665e5d424a JI-1059 Move online/offline logic to offline request queue
Fix only queue requests if we are offline
Fix always assume offline request queue is defined
2019-04-08 10:23:20 +02:00
Thomas Marstrander 3b685a5520 JI-1059 Fix offline dialog always showing at the top of the instance
This is needed because we can't determine where the user was on the page
when the request failed
Avoid restoring focus to prevent the screen from jumping around
2019-04-05 16:11:19 +02:00
Thomas Marstrander 38fc962625 JI-1059 Position offline dialog elements on top of last focused element 2019-04-05 14:50:43 +02:00
Frode Petterson 70278d15f4 HFP-2683 Fix empty arrays instead of groups when uploading 2019-04-05 10:15:52 +02:00
Thomas Marstrander 0b1aadbbca JI-1059 Add resizing of offline request dialog for small content
Fix height calculation of confirmation dialog when not provided
2019-04-03 16:12:27 +02:00
Thomas Marstrander 687f886e3d JI-1059 Add offline request queue only if frame contains H5P
Add logic for queueing requests that failed outside the H5P frame
Fix showing throbber when retrying because connection was reestablished
2019-04-03 13:09:18 +02:00
Thomas Marstrander 39d27ab9bb JI-1059 Add offline request queue with retry dialog
Add logic for adding extra class and hiding buttons in conf dialog
Update font files with throbber
2019-04-03 09:43:09 +02:00
Thomas Marstrander ada2f4009d JI-1059 Fix not showing toast if it is disabled 2019-04-01 15:10:37 +02:00
Thomas Marstrander 75453e872c JI-1059 Fix setting item name in request queue 2019-04-01 14:46:29 +02:00
Thomas Marstrander 49c48e29b3 JI-1059 Fix no options in request queue 2019-04-01 14:42:53 +02:00
Thomas Marstrander a934d5b3ec Merge branch 'master' of github.com:h5p/h5p-php-library 2019-04-01 12:06:07 +02:00
Thomas Marstrander e0eb03026a JI-1059 Add request queue events
Add dialog texts
2019-04-01 12:06:00 +02:00
Frode Petterson 052ad0ea81 Fix use filtered instead of params in .h5p files 2019-03-26 16:49:21 +01:00
Frode Petterson 7a85c115db HFP-2693 Fix dialog size on resize 2019-03-26 14:51:38 +01:00
Frode Petterson cdb53c5cfd Merge branch 'master' of github.com:h5p/h5p-php-library 2019-03-25 14:04:25 +01:00
Frode Petterson ac5dba1e19 Fix validation of old libraries before running content upgrade 2019-03-25 14:03:43 +01:00
Thomas Horn Sivertsen 4525d6383f Incorrect json (#58)
Default language is of type text and should therefore add quotes around the value like source, license and license_version do.
2019-03-21 10:30:09 +01:00
Thomas Marstrander d4931ec20a JI-1059 Add support for storing and resubmitting offline results
(cherry picked from commit cd869f8400)
2019-03-19 09:24:38 +01:00
Thomas Marstrander 8f7742ab0b Revert "JI-1059 Add support for storing and resubmitting offline results"
This reverts commit cd869f8400.
2019-03-18 11:02:42 +01:00
Thomas Marstrander cd869f8400 JI-1059 Add support for storing and resubmitting offline results 2019-03-18 10:58:13 +01:00
Frode Petterson 60fb6c96ca JI-1062 Remove unused code 2019-03-15 13:04:34 +01:00
Frode Petterson 366d8f2a0b JI-1062 Add interface function for saving files from .h5p
Make it easier for plugins to override the unpacking of the
package files.
2019-03-15 12:52:54 +01:00
Frode Petterson d38b3b1e8a JI-1062 Add option for max file size + total size limits 2019-03-14 14:53:25 +01:00
Frode Petterson bf9250d80b Bump Core API 2019-03-14 11:53:53 +01:00
Frode Petterson d05bc94d92 Add back custom libraries URL (Needed for Moodle) 2019-03-12 12:47:31 +01:00
Frode Petterson 71038f89ea Merge branch 'master' into release 2019-03-08 10:00:53 +01:00
Thomas Marstrander 1a09b1a30e Fix flickering for embedded content on iPads
see https://github.com/h5p/h5p-moodle-plugin/issues/237
2019-03-07 15:48:21 +01:00
Frode Petterson 7b7b35ea39 Merge branch 'master' of github.com:h5p/h5p-php-library 2019-03-07 15:02:13 +01:00
Frode Petterson 68e56dd8fd Fix reuse dialog not 100% visible on iPhone 2019-03-07 15:01:49 +01:00
Frode Petterson e9d08b973a Remove old libraryUrl due to conflict with Content Upgrade 2019-03-07 14:33:01 +01:00
Frode Petterson 53adda67c2 JI-1010 Add disable fullscreen feature for embeds 2019-03-07 12:57:45 +01:00
Frode Petterson fc044630bc JI-853 Add option to disable fullscreen on load 2019-03-07 12:02:02 +01:00
Frode Petterson 840f5dcb12 HFP-2541 Fix UX improvements when reusing content
(Moved Toast from Editor to Core)
2019-03-01 15:24:46 +01:00
Frode Petterson a5f1b49f6b HFP-2541 Fix small dialogs larger 2019-02-27 16:21:11 +01:00
Frode Petterson b64292af09 HFP-2541 Fix Dialog scrollbar on small dialogs 2019-02-27 16:04:37 +01:00
Frode Petterson 47d049afb2 HFP-2541 Add reuse dialog instead of download button 2019-02-27 15:03:58 +01:00
Frode Petterson 01550e7f11 HFP-2650 Add new fonts! 2019-02-22 15:12:43 +01:00
Frode Petterson d3b5b07669 Merge branch 'language-switcher' 2019-02-22 09:36:56 +01:00
Thomas Marstrander 801f3f33c3 HFP-2654 Add defaultLanguage to exported fields 2019-02-21 15:28:04 +01:00
Thomas Marstrander 32b0840ca6 HFP-2654 Add default language as part of metadata 2019-02-21 13:42:00 +01:00
Frode Petterson 7ee0c3372b Fix closing of aria-attribute 2019-02-18 15:12:13 +01:00
Frode Petterson 2b2184fa30
Fix closing of aria-attribute 2019-02-11 16:18:57 +01:00
Frode Petterson 415e101064 JI-942 Add extra check for library upload 2019-02-05 17:14:34 +01:00
Frode Petterson d1dd47be6f JI-942 Fix auto content upgrade to work with Drupal module 2019-02-05 13:15:50 +01:00
Frode Petterson aa723bcb40 Merge branch 'content-upgrade-on-upload' 2019-02-04 13:25:56 +01:00
Frode Petterson 741cd04d34 Merge branch 'release' 2019-02-04 13:22:28 +01:00
Frode Petterson e7a256da05 Merge branch 'master' into release 2019-02-04 13:22:15 +01:00
Frode Petterson f96d04cc27 JI-942 Add missing library error message 2019-02-01 13:03:27 +01:00
Frode Petterson c9e1ac9347 JI-942 Add better error handling for Content Upgrade 2019-01-28 16:01:08 +01:00
Frode Petterson 9cf3f4aa7f JI-942 Add restict save when a higher version is available 2019-01-22 15:27:27 +01:00
Frode Petterson bee7c550d9 Merge branch 'release' of github.com:h5p/h5p-php-library into release 2019-01-14 15:28:56 +01:00
Frode Petterson b6080a1a00 Update FS comment 2019-01-14 15:26:27 +01:00
Oliver Tacke bfb7b5600c Fix missing closing div for close button 2019-01-11 14:52:10 +01:00
Oliver Tacke c2d7b987cc Fix missing closing div for close button 2019-01-11 14:09:56 +01:00
Frode Petterson 8d30949969 Revert "Make eslint happy"
This reverts commit 132f25e14a.
2019-01-09 11:51:17 +01:00
Frode Petterson 9a7a343844 HFP-2508 Remove caching of pasted content
Objects can not be referenced by multiple widgets when used in the editor
2019-01-03 12:50:44 +01:00
Frode Petterson f19ca76461 HFP-2508 Fix reset of all subContentIds on Copy/Paste 2019-01-03 12:46:16 +01:00
Frode Petterson 4a9c3c7881 Merge branch 'master' of github.com:h5p/h5p-php-library 2018-12-20 16:17:58 +01:00
Frode Petterson 6f4c4d9cc3 HFP-1145 Bump Core API version due to improvements 2018-12-20 16:17:27 +01:00
Frode Petterson 2b474699b2 HFP-1145 Remove base64 data decoding since we now use Blob 2018-12-20 16:17:14 +01:00
thomasmars b43051c785 HFP-15474 Fix xAPI errors when previewing content 2018-12-20 15:07:40 +01:00
Frode Petterson 96694e4c70 Merge branch 'master' of github.com:h5p/h5p-php-library 2018-12-17 10:20:58 +01:00
Frode Petterson 57570db8d6 Merge branch 'semi-fullscreen' 2018-12-17 10:20:47 +01:00
Oliver Tacke 0678126f82 HFP-2398 Add aria-label to fullscreen buttons 2018-11-23 16:40:18 +01:00
Frode Petterson 152dfc0fb2 HFP-2433 Add CSS needed for Editor semi-fullscreen 2018-11-23 15:47:26 +01:00
Oliver Tacke 48f3805f94 HFP-2398 Remove aria-label in action bar
WAIA states it is *not* supposed to be used if there's a visible label
2018-11-23 15:13:41 +01:00
Oliver Tacke 2be06b2eb9 HFP-2396 Add aria-label to elements with role button 2018-11-23 13:10:07 +01:00
Oliver Tacke 132f25e14a Make eslint happy 2018-11-23 13:05:23 +01:00
Frode Petterson f2a9801879 Merge branch 'master' into release 2018-11-22 10:17:29 +01:00
Frode Petterson c438f9136e Merge branch 'release' 2018-11-22 10:16:37 +01:00
Frode Petterson 1cd7b67010 Merge branch 'master' of github.com:h5p/h5p-php-library 2018-11-16 12:41:24 +01:00
Frode Petterson ec9127d245 JI-915 Fix embed resizing issue with Chrome 2018-11-16 12:39:57 +01:00
Frode Petterson f7f2479b2a Fix new style array into old style array 2018-11-08 12:36:30 +01:00
Paal Joergensen a0e7bcd2af Merge branch 'stable' 2018-11-05 10:21:54 +01:00
Frode Petterson 85b278bd52 Fix variable $ 2018-11-02 10:25:35 +01:00
Frode Petterson c8ddb305ab Merge branch 'release' of github.com:h5p/h5p-php-library into release 2018-11-02 10:15:14 +01:00
Frode Petterson 39fc577fd5 Add prefilter that improves jQuery AJAX 2018-11-02 10:14:35 +01:00
Paal Joergensen 512a0de321 Merge branch 'release' of github.com:h5p/h5p-php-library into release 2018-11-02 10:04:10 +01:00
Paal Joergensen 898d975921 Avoid getting 'Invalid selected option in select' for existing content 2018-11-02 10:03:58 +01:00
Frode Petterson 6b3b3db575 Merge branch 'release' of github.com:h5p/h5p-php-library into release 2018-11-02 09:54:57 +01:00
Frode Petterson db022830a6 Add m4a extension to content files whitelist 2018-11-02 09:54:23 +01:00
Paal Joergensen d9940b81e2 Merge branch 'release' 2018-11-01 14:50:46 +01:00
Paal Joergensen 715fa6f803 HFP-2378 Add option to overwrite unset metadata fields 2018-11-01 14:42:12 +01:00
Frode Petterson e15f6d6678 Merge branch 'release' of github.com:h5p/h5p-php-library into release 2018-10-29 11:01:39 +01:00
Oliver Tacke 37c0593ff4 Merge remote-tracking branch 'origin/release'
Keep simpler version of simultaneous fixes
2018-10-26 14:58:22 +02:00
Oliver Tacke 066ea94b11 Fix warning in toDBArray()
Prevent accessing keys of metadata that don't exist
2018-10-26 09:35:24 +02:00
Paal Joergensen fd2ac997ef HFP-2328 Fix bug 2018-10-26 08:45:20 +02:00
Paal Joergensen 2e305ded71 HFP-2328 Reset metadata fields if needed 2018-10-23 14:59:50 +02:00
Paal Joergensen f661248b5a HFP-2329 Skip emty metadata fields for h5p.json 2018-10-23 13:15:55 +02:00
Paal Joergensen 82b50fc2f1 Fix code style 2018-10-23 11:25:46 +02:00
Paal Joergensen e316eff18d Don't display empty metadata fields in copyright popup 2018-10-23 11:10:06 +02:00
Paal Joergensen 85d2e2eb75 Don't filter params if library or params is not set 2018-10-23 10:56:44 +02:00
Paal Joergensen c4e52f4f29 Fixed bug for saving metadata settings 2018-10-17 13:53:38 +02:00
Paal Joergensen 8dafa5db91 Rename 'Change Log' to 'Changelog' 2018-10-16 09:53:11 +02:00
Frode Petterson 06985cca7c Fix h5p.json title field htmlencoded 2018-10-05 15:14:47 +02:00
Paal Joergensen 9081ca3128 JI-857 Validate metadata properly 2018-10-04 16:02:05 +02:00
Paal Joergensen e75745f0db metadataSettings returned as JSON, not string 2018-09-26 10:30:50 +02:00
Frode Petterson 7762f903c8 Add storing of content type title in metadata 2018-09-24 11:03:10 +02:00
Frode Petterson cb2acb21c8 Merge branch 'master' of github.com:h5p/h5p-php-library 2018-09-24 10:18:40 +02:00
Frode Petterson 64c8090d13 Add storing of content type title in metadata 2018-09-24 10:18:13 +02:00
Paal Joergensen 73f41e2dbd library.json: metadata -> metadataSettings 2018-09-21 15:09:31 +02:00
Frode Petterson d6e9c4ec09 Fix const not allowed in abstract class for PHP 5.3 2018-09-21 13:08:11 +02:00
Frode Petterson cfd15d8265 Merge branch 'master' of github.com:h5p/h5p-php-library 2018-09-21 10:12:59 +02:00
Frode Petterson 841d24cab8 Capitalize metadata titles 2018-09-21 10:05:00 +02:00
Paal Joergensen e2c8d6459a Numbers use format '%d' - only relevant for WordPress 2018-09-20 11:14:50 +02:00
Paal Joergensen 3566ac4141 HFP-2183 Default library.metadata property shall be 1 2018-09-18 15:02:12 +02:00
Paal Joergensen d391d486c9 HFP-2187 Only allow new license IDs 2018-09-18 14:26:36 +02:00
Paal Joergensen c9cb23e06c Add generic function for generating metadata JSON 2018-09-17 13:44:42 +02:00
Paal Joergensen 2bf38c5b00 Support title in metadata 2018-09-17 12:54:21 +02:00
Paal Joergensen 3d1c1cbe38 Autoload metadata class 2018-09-17 12:53:09 +02:00
Paal Joergensen eb766b0081 HFP-2184 Add utility class for handling metadata 2018-09-17 11:47:05 +02:00
Paal Joergensen 4fe8eca0f2 JI-857 Validate metadata 2018-09-17 08:58:38 +02:00
Paal Joergensen 74f9a84034 JI-857 Make metadata semantics describe the actual data structure 2018-09-17 08:45:18 +02:00
Paal Joergensen 8067277e63 JI-857 Add support for optgroup type in semantics 2018-09-17 08:41:31 +02:00
Paal Joergensen 425aac5d33 HFP-2183 Set metadata when saving library 2018-09-11 11:50:51 +02:00
Paal Joergensen 9e4db6cdd9 Merge branch 'master' of github.com:h5p/h5p-php-library 2018-09-10 11:31:40 +02:00
Paal Joergensen e257e5ecff HFP-2185 Treat major & minor version as int (not string) 2018-09-10 11:30:57 +02:00
Frode Petterson 394a4aace3 Merge branch 'master' of github.com:h5p/h5p-php-library 2018-08-31 17:29:54 +02:00
Frode Petterson 97eab5c3ce JI-848 Add changing main content metadata in upgrade
(except for title!)
2018-08-31 17:29:11 +02:00
Oliver Tacke 2d3fe61371 Merge branch 'master' of https://github.com/h5p/h5p-php-library 2018-08-31 09:44:18 +02:00
Oliver Tacke 775b45ab6c HFP-2094 Add metadata property to validation of library.json 2018-08-31 09:32:23 +02:00
Paal Joergensen 43b9703fc9 Merge branch 'master' of github.com:h5p/h5p-php-library 2018-08-30 12:35:56 +02:00
Paal Joergensen e74fb6009a Use title from metadata object when creating xAPI stmt 2018-08-30 12:35:46 +02:00
Frode Petterson e094da76fa HFP-1900 Remove metadata/extras from upgrade for main content 2018-08-30 12:33:24 +02:00
Frode Petterson 768eb2a64b
Remove unkown todo comment 2018-08-29 14:30:31 +02:00
Paal Joergensen 8c374be79d HFP-1871 Improve addon feature 2018-08-28 08:08:56 +02:00
Paal Joergensen 6959f65022 HFP-1871 Add library config as a generic feature 2018-08-27 14:53:17 +02:00
Paal Joergensen bbe99e4db8 Merge branch 'HFP-1871-math-display' 2018-08-27 13:53:10 +02:00
Paal Joergensen ee0e97e17b HFP-1871 Skip loading semantics for addons 2018-08-27 13:52:33 +02:00
Paal Joergensen 0c7df179a7 Fix content upgrade bug 2018-08-24 12:55:42 +02:00
Paal Joergensen 6c4f904079 Generalize addons 2018-08-23 10:24:20 +02:00
Pål Jørgensen b1db442554
Merge pull request #53 from beheist/dev-bh-fix-header-case
BUGFIX: Fix capitalization of the "Content-Type" HTTP header
2018-08-06 14:15:32 +02:00
Bastian Heist 3a8847424c BUGFIX: Fix capitalization of the "Content-Type" HTTP header 2018-08-04 13:46:52 +02:00
Oliver Tacke 6d50bae108 HFP-1905 Complete validation for h5p.json 2018-08-01 17:30:30 +02:00
Oliver Tacke 64e5ab4424
HFP-1871 Fix missing variables 2018-08-01 10:55:13 +02:00
Oliver Tacke d068b82ff5 HFP-1871 Fix sanitization of containsMath 2018-07-30 14:52:36 +02:00
thomasmars 5be4ba1222 JI-781 Support regex in core for when CORS attributes is set 2018-07-30 14:28:02 +02:00
Oliver Tacke 9314c55994 HFP-1871 Clean code 2018-07-26 19:34:46 +02:00
Oliver Tacke 942fd922bc HFP-1871 Add general function to get values from library json config 2018-07-26 10:37:16 +02:00
Oliver Tacke 62b6345c49 HFP-1871 Use param from MathDisplay library.json for configuration 2018-07-25 15:08:29 +02:00
Oliver Tacke a55379adcf Fix Array use 2018-07-24 10:36:43 +02:00
Oliver Tacke c45be49a4f Merge branch 'master' of https://github.com/h5p/h5p-php-library 2018-07-23 15:30:31 +02:00
Oliver Tacke d3a63dd756 HFP-2133 Fix additional space 2018-07-23 15:30:10 +02:00
Oliver Tacke 023613c131 HFP-2131 Fix additional space 2018-07-23 15:26:09 +02:00
Oliver Tacke e22766157b HFP-2133 Add Creative Commons acronyms 2018-07-23 14:57:14 +02:00
Oliver Tacke 9ee5fb9907 HFP-2110 Refactor to have a plain setClipboard function
Custom editors handled storing data to the clipboard on their own,
so the datainclipboard trigger was missing for some functionality.
H5P.clipboardify() however doesn't cope with additional information
that the custom editors can deal with.

Custom editors that prepare their own clipboard data can now use
H5P.setClipboard() directly and set their data while other elements
will be informed about the clipboard change.

Also relevant for HFP-2111 and HFP-2112.
2018-07-18 10:45:14 +02:00
Oliver Tacke a295d7d434 HFP-1925 Fix typo 2018-07-12 10:07:01 +02:00
thomasmars 579ba96b49 HFP-1942 Add crossorigin api call.
Update minor version of core since interface changes
2018-07-11 14:44:45 +02:00
Oliver Tacke b1a01b728d Fix update script bug that was introduced with adding the hasmetadata field 2018-07-11 09:33:59 +02:00
Frode Petterson a015d1a134 Merge branch 'HFP-1905-metadata-system' 2018-07-03 15:49:21 +02:00
Frode Petterson 10aaa38844 HFP-2027 Fix copy-paste icons 2018-07-03 10:34:26 +02:00
Oliver Tacke e241ec6963 HFP-1905 Fix for LibraryNames with many elements 2018-06-28 18:36:58 +02:00
Oliver Tacke 14bcb913b7 HFP-1905 Include metadata in findCopyrights 2018-06-28 18:21:30 +02:00
Oliver Tacke 972c7a13f6 HFP-2074 Remove CC prefix in license names
Now that the optgroup feature is in place, the prefix is obsolete
2018-06-28 11:44:01 +02:00
Oliver Tacke ae85ea3f2a Merge branch 'HFP-1905-metadata-system' of https://github.com/h5p/h5p-php-library into HFP-1905-metadata-system 2018-06-27 16:01:20 +02:00
Oliver Tacke 9432d80b23 HFP-2075 Don't require protocol for metadata source field 2018-06-27 15:59:34 +02:00
Frode Petterson 1605581608 Merge branch 'copy-paste' into HFP-1905-metadata-system 2018-06-27 13:42:13 +02:00
Frode Petterson d24fd0e667 HFP-2072 Improve copy-paste API behavior 2018-06-26 11:52:57 +02:00
thomasmars d963a23a15 HFP-2074 Add optgroup to Creative Commons licenses in metadata dialog. 2018-06-26 10:51:48 +02:00
Frode Petterson b1446e8d60 HFP-2027 Add copy paste helpers to core 2018-06-25 15:59:17 +02:00
Oliver Tacke 4d286b0bdb Fix HFP-1905 Add CC for creative commons license names 2018-06-25 14:14:51 +02:00
Oliver Tacke d113809e80 HFP-1905 Fix source and link in copyright view 2018-06-25 14:14:13 +02:00
Oliver Tacke 8190fe1d42 HFP-1896 Fix metadata form error handling 2018-06-25 11:31:09 +02:00
Oliver Tacke 2a53b7bb7b HFP-2059 Accept objects as library options, too
Compound content types should be able to deactivate the metadata
button for their subcontent types. This should be achievable
by amending the options property of a library field.

The options array can not either contains strings with library names
or objects with the property "name" (mandatory) and further properties,
one of them being "hasmetadata"
2018-06-22 13:45:59 +02:00
Oliver Tacke 17162f32ef HFP-2052 Fix undefined source 2018-06-20 16:25:27 +02:00
Thomas 30cb2aec45
Merge pull request #50 from tsivert/max_score
Max score
2018-06-19 09:17:12 +02:00
Thomas Horn Sivertsen 930f85e0fb HFP-1806
Removed unused changes, fixed indentation
2018-06-18 11:24:04 +02:00
Oliver Tacke 04707a9f8a HFP-1871 Add function to load MathDisplay if params contain math 2018-06-13 18:36:23 +02:00
Oliver Tacke e179ec2934 HFP-2052 Make changes requested in UX review
- Add link for source
- Change URLs for licenses
2018-06-13 16:41:49 +02:00
Thomas Horn Sivertsen a59640672d HFP-1806
- fixed PhpDoc
- only load presave.js when editing a H5P
- moved loading logic from core to editor
- removed unused code
2018-06-07 12:43:12 +02:00
Oliver Tacke 367763a215 Merge remote-tracking branch 'origin/master' into HFP-1905-metadata-system 2018-06-05 13:07:01 +02:00
Oliver Tacke be77130fef HFP-1905 Require words for author roles 2018-06-05 08:54:12 +02:00
Oliver Tacke ea722126ff HFP-1905 Fix property naming and validation defaults
Fix property naming for more harmony (and peace in the world)
Fix validation on uploading content by adding Author as a role
2018-06-04 15:44:04 +02:00
Oliver Tacke 0fbc6ef5a8 HFP-1905 Fix potential undefined values 2018-06-01 17:44:21 +02:00
Oliver Tacke 8f45ea4d79 HFP-1905 Fix finding copyright edge case bug 2018-06-01 15:45:09 +02:00
thomasmars 3ce0adf418 HFP-1942 Add crossorigin api call.
Update minor version of core since interface changes
2018-06-01 11:09:45 +02:00
Oliver Tacke a30a93e62e HFP-1897 Set correct field types and boundaries 2018-05-29 17:23:06 +02:00
Oliver Tacke 47be831f49 HFP-1897 Fix author as default role 2018-05-29 17:00:56 +02:00
Oliver Tacke 00deb02aa7 HFP-1897 Set author as default role, change placeholder text for change 2018-05-28 18:01:28 +02:00
Oliver Tacke 3deda27f9b HFP-1898 Move mocked semantics to backend 2018-05-25 18:38:42 +02:00
Frode Petterson 942a083afa JI-575 Fix content upgrade script 2018-05-16 15:16:34 +02:00
Paal Joergensen d99ab7eda2 HFP-1994 Bump core minor version 2018-05-08 11:30:54 +02:00
Frode Petterson 022695ac74 JI-575 Add support for file aggregation 2018-05-03 10:27:06 +02:00
Oliver Tacke 58597460f6 HFP-1905 Fix updating for scripts with old update functions
"params" (and "extras", e.g. metadata) flow through each update function
and are changed if necessary. Since "extras" was added later and old
update functions don't return it, we need to ignore undefined values
-- or change every single update function in all content types.
2018-04-09 11:43:48 +02:00
Oliver Tacke 3b38e273eb HFP-1905 Bump minor core version number 2018-04-06 17:11:33 +02:00
Oliver Tacke fbc21f6368 HFP-1905 Remove console output 2018-04-05 17:22:31 +02:00
Oliver Tacke ef063ce5cb HFP-1905 Fix image in "rights of use" view 2018-04-05 17:17:56 +02:00
Oliver Tacke 83e3c58ba3 HFP-1943 Include metadata information in "rights of use" popup
Add copyright information of main content in popup
Add copyright information of subcontent in popup
HFP-1902 is intended to make the styling better
2018-04-04 15:46:30 +02:00
Oliver Tacke 95d99d0ad3 HFP-1905 Add update functionality for metadata 2018-04-03 15:17:46 +02:00
Oliver Tacke b28624ba8e HFP-1905 Allow metadata as keyword for subcontent 2018-03-26 17:44:00 +02:00
Oliver Tacke c589285351 HFP-1905 Fix unset values for array fields
Some array fields were filled with undefined and lead to warnings.
2018-03-26 11:24:26 +02:00
Oliver Tacke 6ef2f96e8b HFP-1905 Add logic for download/upload
Add metadata fields to h5p.json
2018-03-23 13:11:00 +01:00
Oliver Tacke 011c7df675 HFP-1905 Add metadata to contentData 2018-03-16 20:11:08 +01:00
Frode Petterson 0fb35a3f7c
HFP-1869 Fix fullscreen button icon not centered 2018-02-28 14:16:02 +01:00
Paal Joergensen 78c19d6779 Merge branch 'drsassafras-master' 2018-02-20 08:46:00 +01:00
Paal Joergensen 4a0739f1c4 Merge branch 'master' of https://github.com/drsassafras/h5p-php-library into drsassafras-master 2018-02-20 08:45:41 +01:00
Paal Joergensen 3ed15f2249 Remove old H5P logo 2018-02-20 08:34:51 +01:00
drsassafras 24bbbf08ae lossless image compression 2018-02-16 01:17:35 -05:00
Thomas Horn Sivertsen 615bac7c08 HFP-1806
Add presave for development and public libraries
2018-02-01 12:18:31 +01:00
Thomas Horn Sivertsen 04edd73855 HFP-1806
Formatting code + adding comments.
2018-01-19 14:56:07 +01:00
Thomas Horn Sivertsen 1b079d36f1 HFP-1806
Load presave script if present in library.
2018-01-19 14:42:43 +01:00
Paal Joergensen 95901159d0 HFP-1768 Send core api version as a single element 2017-11-23 15:15:03 +01:00
Paal Joergensen 90d1e7579d HFP-1768 Add api core version to requests to api.h5p.org 2017-11-23 11:39:03 +01:00
Frode Petterson f3efd217c8 HFP-1678 Remove unsued variable 2017-11-20 16:12:22 +01:00
Paal Joergensen f91f2e82fb HFP-1678 Add error code to error messages 2017-11-16 16:24:29 +01:00
Frode Petterson 6798e0bbbf HFP-924 Add singular version of plural install info 2017-11-15 13:24:56 +01:00
Frode Petterson 717edc2a6f HFP-924 Add support for more detailed messages when using AJAX 2017-11-14 15:06:54 +01:00
Frode Petterson 5919b64c2a Clean up syntax and avoid empty values 2017-11-06 09:59:46 +01:00
Frode Petterson b418d24c29
Merge pull request #42 from icmcnamara/embed-additional-head-tags
Add optional additional head tags support to embed
2017-11-06 09:53:00 +01:00
Ian McNamara 07ac995cf0 Prints optional additonal head tags in embed.php
Works in conjunction with modifications to class-h5p-php-admin.php
in the core h5p plugin. Allows other plugins to add code to be
inserted into the head of the embeded iframe generated by embed.php.

See discussion of this issue here:
https://github.com/h5p/h5p-wordpress-plugin/issues/58#issuecomment-337906304
2017-11-01 16:08:14 -05:00
Frode Petterson 500c264b88 Merge branch 'master' of github.com:h5p/h5p-php-library 2017-08-28 10:49:57 +02:00
Frode Petterson dfdfb3bd99 Add prevent deleting sub content of linked directories
Sometimes devs may link to library folders elsewhere, then we
should prevent traversing and deleting the linked content.
Default behavior now is to remove the link and not its content.
2017-08-28 10:45:54 +02:00
Paal Joergensen cbbff0e296 Merge branch 'release' 2017-08-25 11:19:53 +02:00
Paal Joergensen 0252beb03d Revert "HFP-1407 Improve robustness of content-id retrival"
This reverts commit e3d7cf2562.
2017-08-25 11:18:59 +02:00
Paal Joergensen 64f170b8a3 Define H5P Hub endpoints one place in code 2017-08-24 12:40:53 +02:00
Tom Arild Jakobsen e3d7cf2562 HFP-1407 Improve robustness of content-id retrival
The code made an assumption that the $element.parent() would contain
the [data-content-id] which isn't always true.

Changed the code, so that it looks up the parent with [data-content-id].
2017-08-23 15:22:29 +02:00
Frode Petterson f090e651e1 HFP-1405 Fix targeting wrong parent iframe element
Just in case there are two elements with the same ID avoid misbehaving
2017-08-23 12:44:15 +02:00
Paal Joergensen 7c3a322fda HFP-1317 Made library detail pager behave good 2017-08-07 16:38:09 +02:00
Frode Petterson f112f761c3 Prevent JS error when no pager is available 2017-08-04 11:04:10 +02:00
Frode Petterson 0dddbf654e Merge branch 'master' into release 2017-08-02 13:10:27 +02:00
Frode Petterson 7728243c18 Improve hashing logic 2017-07-27 13:36:51 +02:00
Frode Petterson b6019ade21 Merge pull request #40 from cornelles/validate-text-font-family
Fixing font-family regex pattern when validating text
2017-07-26 10:03:20 +02:00
Cornel Les 75803f8dfb Fixing font-family regex pattern when validating text 2017-07-20 17:54:12 +03:00
Frode Petterson 3a2cd46f6a Merge branch 'HFP-1174-feedback' 2017-07-13 13:30:39 +02:00
Frode Petterson cc5440cc4a Merge branch 'master' into HFP-1100-improve-file-handling 2017-07-07 10:59:38 +02:00
Frode Petterson b1531bcbc0 Add support for temporary file suffix
HFP-1100
2017-07-07 10:51:57 +02:00
Timothy Lim 91ff99145a HFP-1258 Whitelist .webvtt 2017-07-07 10:11:23 +02:00
Timothy Lim cc7caa6604 HFP-1258 Whitelist .vtt extension 2017-07-07 09:56:24 +02:00
Frode Petterson 6444c1443b Bump coreApi due to editor changes
HFP-1174
2017-06-26 10:43:59 +02:00
thomasmars f07ce1b3c3 Merge branch 'master' of https://github.com/h5p/h5p-php-library 2017-06-22 10:56:42 +02:00
thomasmars d2746b18b4 Make fullscreen button keyboard accessible
HFP-1199
2017-06-22 10:56:15 +02:00
Tom Arild Jakobsen 9ea6f277e1 Merge branch 'master' of github.com:h5p/h5p-php-library into HFP-574-remove-override-settings 2017-06-07 11:49:47 +02:00
Frode Petterson 278586ef58 Add forgotten symbol 2017-06-06 14:21:18 +02:00
Frode Petterson 3192f0fe19 Add default license when no version is selected 2017-06-06 13:51:51 +02:00
Paal Joergensen 46d772cb51 Added missing parameter in getLibraryUsage [HFP-1067] 2017-05-31 11:17:28 +02:00
Frode Petterson aaa0861355 Fix copyright not being display processes correctly
HFP-1079
2017-05-31 09:33:10 +02:00
Frode Petterson 9adc92d3c4 Move license definition for localization to work
HFP-1079
2017-05-30 15:43:26 +02:00
Frode Petterson 59fd08594f Support localized licenses
HFP-1079
2017-05-30 15:23:25 +02:00
Frode Petterson 42e0c99fd3 Add version info to license
HFP-1079
2017-05-30 14:12:22 +02:00
thomasmars fa31c56dce Fixed returnBytes function return correct amount of bytes 2017-05-29 11:18:12 +02:00
thomasmars 0ce7d66c3a Cast bytes to int before multiplying it.
Removes warning in PHP 7.0+
2017-05-25 13:52:50 +02:00
thomasmars d1bbed49fc Don't assume fetchLibrariesMetadata is AJAX
HFP-1103
2017-05-22 12:57:43 +02:00
Tom Arild Jakobsen 87bd3c7e11 Resize h5p container instead of body by default. HFP-574 2017-05-11 17:09:44 +02:00
Tom Arild Jakobsen f277fed4d1 Set overlay and dialog to be 'position: absolute;' again. HFP-574 2017-05-10 13:50:57 +02:00
Tom Arild Jakobsen dfc2e52ba5 Merge branch 'master' of github.com:h5p/h5p-php-library into HFP-574-remove-override-settings 2017-05-10 12:45:55 +02:00
Tom Arild Jakobsen 481322e6ae Deprecate 'overrideSettings'
* Deprecate and log warning to console when 'overrideSettings' is used
 * Change confirmation dialog be 'fixed' e.g relative to viewport instead of
   and arbitrary relative parent element
 * Same for the overlay mask
 * Set minimum height on body element, to fit confirmation dialog
 * Remove the minimum height on close dialog

Fixes HFP-574
2017-05-08 14:17:29 +02:00
Paal Joergensen 677adb0d8a HFP-1035 Whitelisted wav files 2017-05-03 10:02:27 +02:00
Paal Joergensen 3fda439aa1 Bumping core version 2017-05-02 10:30:27 +02:00
Timothy Lim fb76e09e8c HFP-967 Revert a revert
Ensures that latest code from stable is added.
2017-04-25 16:30:52 +02:00
Timothy Lim 56e453f6c1 HFP-967 Apply correct changes 2017-04-25 15:59:25 +02:00
Timothy Lim edb9e6244c Revert "HFP-967 Update content validator to handle headers and tables"
This reverts commit 9ee5d2ebe7.
2017-04-25 15:58:28 +02:00
Timothy Lim 8d01baca8e Merge branch 'master' of https://github.com/h5p/h5p-php-library 2017-04-25 15:37:18 +02:00
Timothy Lim 9ee5d2ebe7 HFP-967 Update content validator to handle headers and tables 2017-04-25 15:37:04 +02:00
Frode Petterson 60c822b47e Merge branch 'stable' 2017-04-20 15:02:15 +02:00
Frode Petterson 41cee98970 Merge branch 'release' into stable 2017-04-18 15:36:08 +02:00
Frode Petterson bd851f2929 Remove http_response_code()
Not supported prior to PHP 5.4
HFP-959
2017-04-18 14:54:58 +02:00
thomasmars d4c90e716d Merge branch 'CheckFileExistsBeforeZip' of https://github.com/mannes/h5p-php-library into mannes-CheckFileExistsBeforeZip 2017-04-18 10:44:37 +02:00
Paal Joergensen da568e4b8a Merge branch 'release' into stable 2017-04-18 09:26:01 +02:00
Frode Petterson dcbb5a2a18 Merge branch 'master' into release 2017-04-12 13:17:04 +02:00
thomasmars d50d98297b Set action frame button sizes in pixels to be IE11 compat
Frame is always set in pixels anyway, so should not be a problem
HFP-939
2017-04-11 19:34:58 +02:00
Paal Joergensen 727e88908a Made statistics being sent on updateContentTypeCache [HFP-931] 2017-04-11 14:51:27 +02:00
thomasmars 2ff14ecd37 Remove key message when registering with Hub until it is back.
JI-115
2017-04-11 13:02:44 +02:00
Frode Petterson d81fa06499 Check correct variable
JI-114
2017-04-11 09:35:17 +02:00
Frode Petterson c475db843d Separate statistics reporting from 'Use H5P Hub' option
JI-114
2017-04-10 14:09:02 +02:00
thomasmars c4f2b26116 Make sure contentId are handled when passed as strings 2017-04-09 17:43:56 +02:00
Tom Arild Jakobsen 86ee19905e Fix confirmation dialog confirm icon
* Position icon up a bit
 * Fix icon not showing in IE at all

Relates to: HFP-889
2017-04-07 10:28:17 +02:00
thomasmars a0069235f1 Make it possible to move content directory to existing content
HFP-899
2017-04-06 16:30:26 +02:00
Frode Petterson 29fd758bf5 Update phpdoc
HFP-884
2017-04-04 12:44:22 +02:00
Frode Petterson c5974e6212 Update fetch api 2017-04-03 14:51:54 +02:00
Frode Petterson 280946979f Remove update functionality
JI-111
2017-04-03 13:33:47 +02:00
Svein-Tore Griff With 98f1ac4abb Merge pull request #38 from otacke/HFP-878
Avoid accidently selecting things in the toolbar
2017-04-03 10:22:12 +02:00
otacke 8cb9e8b0d1 remove non standard touch CSS 2017-03-31 13:57:11 +02:00
otacke bd83ddc5e7 make actionbar buttons unselectable 2017-03-31 13:36:40 +02:00
Frode Petterson bfda796ab7 Allow processing after export is generated 2017-03-30 13:55:44 +02:00
Timothy Lim 33406c69cc JI-89 Fix spelling error 2017-03-28 13:32:30 +02:00
thomasmars d3d5dbe1a7 Removed api_version from site data, since it is part of url now. 2017-03-21 14:48:52 +01:00
thomasmars 3611da5921 Only send the necessary data when registering a site
Merge in the rest of the metadata when fetching ct cache
HFP-489
2017-03-18 15:39:27 +01:00
thomasmars 4098f7a0d9 Merge branches 'HFP-822-ajax-refactor' and 'master' of https://github.com/h5p/h5p-php-library into HFP-822-ajax-refactor
# Conflicts:
#	h5p.classes.php
2017-03-16 20:01:08 +01:00
thomasmars fd93b30a38 Fixed return statement of fetch libraries metadata
HFP-489
2017-03-16 10:09:52 +01:00
thomasmars 675c87df68 Added more detailed messages when site is or fails to register
HFP-489
2017-03-16 10:01:41 +01:00
thomasmars 93e9d6e0ec Register site with new endpoint if no site is already registered
HFP-489
2017-03-16 09:51:46 +01:00
thomasmars 75b8f9efd6 Fixed move content folder bug
HFP-822
2017-03-14 15:00:14 +01:00
thomasmars 754346992b Minor documentation details 2017-03-14 14:21:36 +01:00
thomasmars 1b19f2701d Make data optional in fetchExternalData function
HFP-822
2017-03-13 14:56:01 +01:00
thomasmars cf3022af43 Moved editor specific functionality to editor interface
Refactored hub endpoints into an abstract class for consistency and easier lookup
Fixed bug in moveContentDirectory function
HFP-822
2017-03-12 17:56:36 +01:00
thomasmars 0970f74b43 Made it easier to use ajax functions in core with existing endpoints
Moved common ajax functionality to core.
Created interface functions for ajax functionality that must be handled by each plugin
Re-encapsulated storage functions to keep a clean interface
Added function for moving temp files to the editor
HFP-822
2017-03-11 18:43:08 +01:00
Paal Joergensen b3e0539261 Resetting [HFP-805] 2017-03-10 14:29:49 +01:00
Frode Petterson 907396e49b Merge branch 'master' of github.com:h5p/h5p-php-library 2017-03-10 13:06:31 +01:00
Frode Petterson 2b327323e1 Add missing default 2017-03-10 13:06:19 +01:00
Svein-Tore Griff With 58d5eef422 Document ios landscape / portrait hack 2017-03-10 08:59:46 +01:00
Svein-Tore Griff With 918084647f Merge pull request #36 from lukemuller/master
Fixed iOS bug for Image Hotspots and iFrames
2017-03-10 08:56:09 +01:00
Luke Muller 4999862689 Fixed iOS bug for Image Hotspots and iFrames
There is a bug in iOS with IFrame's that when changing orientation width: 100% stays at landscape rather than going back to portrait. https://bugs.webkit.org/show_bug.cgi?id=155198. Tested on iOS 10 iPhone 7 on image hotspot.
2017-03-10 12:31:20 +10:00
thomasmars 16982c0207 Merge branch 'master' of https://github.com/h5p/h5p-php-library 2017-03-09 17:36:27 +01:00
thomasmars a720d46548 Make it easier to send files to the editor
HFP-822
2017-03-09 17:36:20 +01:00
Andreas Nergaard 358424f2be HFP-826 Added 2 new icons to the core font. 2017-03-08 12:25:56 +01:00
Paal Joergensen f247bbdfe8 Improved json returned from content type cache endpoint 2017-03-07 11:24:08 +01:00
Paal Joergensen 914ee55ac5 Fixed broken core - using wrong function name [HFP-805] 2017-03-07 10:36:49 +01:00
Paal Joergensen 37f4399ab4 Added interface function that returns library file URL [HFP-805] 2017-03-07 10:25:52 +01:00
Paal Joergensen c8b123c5c3 Using local icon if present (HFP-807) 2017-03-07 09:46:16 +01:00
thomasmars ae56eef91d Use ID instead of library_id for lbiraries
HFP-793
2017-03-03 15:45:19 +01:00
thomasmars a95323948e Improved upload size error msg
HFP-509
2017-03-03 14:47:15 +01:00
thomasmars 217c2006a4 Separate between setup error messages and disabling hub
HFP-509
2017-03-03 11:29:09 +01:00
thomasmars 318b9f4819 Restrict LRS dependent content if set
HFP-797
2017-03-03 10:43:39 +01:00
thomasmars 410c2a9ae1 Added permission check for restricted local libraries
Renamed cached library map function to something more appropriate
HFP-797
2017-03-03 10:33:21 +01:00
thomasmars 0af411bac8 Send json as camelCase
HFP-794
2017-03-02 14:39:36 +01:00
thomasmars c0e82edfb4 Fixed endpoint address
HFP-794
2017-03-02 14:25:30 +01:00
thomasmars 79e32f0a7f Added proper protocol for endpoints
HFP-794
2017-03-02 14:21:11 +01:00
thomasmars 515365d8df Add common hub endpoint to core
HFP-794
2017-03-02 14:14:26 +01:00
thomasmars 34b8a2fb58 Updated phpdocs
HFP-797
2017-03-02 13:10:00 +01:00
thomasmars 16228b3086 Merge branch 'master' of https://github.com/h5p/h5p-php-library 2017-03-02 12:49:45 +01:00
thomasmars 0e2edff5a8 Helper functions for ct cache
Generates properly formatted json from content type cache
Merges content type cache with locally installed libraries
HFP-797
2017-03-02 12:48:30 +01:00
Paal Joergensen 3dbb8fae70 Added check for icon.svg [HFP-806] 2017-03-02 11:43:45 +01:00
Frode Petterson 90fd9a2a28 Merge branch 'master' of github.com:h5p/h5p-php-library 2017-03-02 10:18:38 +01:00
Frode Petterson 66409f1a14 Merge branch 'JI-92-path-fix' 2017-03-02 10:18:28 +01:00
Frode Petterson 179601657c Remove prefix from file path
Should already be complete at this point.
JI-92
2017-03-02 10:17:16 +01:00
Frode Petterson b6ca0cd2df Merge branch 'master' of github.com:h5p/h5p-php-library 2017-02-28 13:05:50 +01:00
Frode Petterson 0f08031abf Allow Core to override permission check
HFP-504 HFP-505
2017-02-28 13:05:11 +01:00
thomasmars 362464ad56 Updated endpoint
JI-90
2017-02-27 16:01:08 +01:00
Frode Petterson a83ea9999d Merge branch 'master' of github.com:h5p/h5p-php-library 2017-02-27 14:15:17 +01:00
thomasmars 3068d58b2b Make update content type cache function public
JI-53
2017-02-24 17:00:43 +01:00
thomasmars 933b95f5ce Allow ajaxError to specify an error code as well.
JI-53
2017-02-24 16:34:16 +01:00
thomasmars ec5a164971 Send in current content type cache update timestamp when updating content type cache
JI-53
2017-02-24 16:06:55 +01:00
thomasmars 0641b3b824 Restored old package and tutorial functionality
Removed uuid registration, will need separate endpoint
Use time instead of localized time when setting ct cache update time
Changed variable names to match API docs
2017-02-24 15:38:49 +01:00
thomasmars 2b5a10bec6 Merge branches 'HFP-502-install-errors' and 'master' of https://github.com/h5p/h5p-php-library 2017-02-24 14:11:07 +01:00
thomasmars 1dec6453fd Check write access of H5P folder
HFP-502
2017-02-24 09:47:44 +01:00
thomasmars fb1ed589e5 Style for drupal form seems to live here
JI-47
2017-02-23 17:00:43 +01:00
thomasmars 585f4d238a Fixed incorrect hub enabled value after server check
HFP-502
2017-02-23 15:22:55 +01:00
thomasmars e88a23d265 Changed hub variable name to match new settings name
HFP-502
2017-02-23 14:54:37 +01:00
thomasmars a32f210188 Fixed enable hub button state after confirming dialog
HFP-502
2017-02-23 14:22:56 +01:00
thomasmars aa861fc8ce Make disable hub, into enable hub to match the checkbox state.
Implemented write access check
HFP-502
2017-02-23 14:20:56 +01:00
thomasmars 183ec0a930 Pass postData as array when fetching external ct cache data
JI-54
2017-02-23 13:28:59 +01:00
thomasmars 4a8a791327 Fixed default arg for update content type cache
JI-53
2017-02-23 12:43:18 +01:00
thomasmars 952a07456c Merge fetch libraries metadata and update content type cache into one request.
Use fetchExteralData instead of adding new functionality since we're now using post.
JI-53
2017-02-23 11:33:39 +01:00
Frode Petterson bdf60a943d Use realpath() instead of document root = safer
Document root might be rewritten or incorrect for some sites(observed on multiple WP)
HFP-784
2017-02-23 11:18:59 +01:00
Frode Petterson a6b01f510f Use realpath() instead of document root = safer
Document root might be rewritten or incorrect for some sites(observed on multiple WP)
HFP-784
2017-02-23 11:18:45 +01:00
thomasmars ff531a157c Improved error msg and check for openssl extension
HFP-502
2017-02-22 18:29:21 +01:00
thomasmars 1f7d03dfd4 Don't use verb in setting name.
HFP-502
2017-02-22 18:03:23 +01:00
thomasmars f556cde385 Added localized time interface for displaying correct time of content type cache update.
JI-53
2017-02-22 16:20:09 +01:00
thomasmars 58cbfc7f0c Moved update content type cache into library core and interface.
JI-53
2017-02-22 14:50:45 +01:00
Frode Petterson 79fa5076f2 Use realpath() instead of document root = safer
Document root might be rewritten or incorrect for some sites(observed on multiple WP)
HFP-784
2017-02-22 11:25:05 +01:00
thomasmars 24fd6b1bc5 Made server setup check return errors instead of setting them.
This is useful in cases where you want to process the error messages differently
HFP-502
2017-02-22 11:14:35 +01:00
thomasmars 46d4d403f4 Added default selectors for disable hub elements.
HFP-503
2017-02-21 20:01:30 +01:00
thomasmars c4affb23dd Added confirmation dialog functionality when disabling hub.
Refactored server setup check into check and var updates.
Moved bytes string parsing out of server setup check and fixed naming convention.
Fixed indentation to match library core instead of Moodle style.
2017-02-21 17:37:01 +01:00
thomasmars c70f8521bb Use core naming convention for requirements function
HFP-502
2017-02-21 14:31:01 +01:00
thomasmars ff496d9a38 Check for H5P requirements.
HFP-502
2017-02-21 14:01:49 +01:00
Frode Petterson c4b88c3992 Add reveling field support for settings
HFP-495
2017-02-20 15:06:42 +01:00
Andreas Nergaard 8f132cfffb Merge branch 'master' into HFP-186-tutorial-example-links 2017-02-09 17:23:18 +01:00
Andreas Nergaard c41d001754 HFP-750 Adding fixed icon. 2017-02-09 14:09:25 +01:00
Andreas Nergaard 3e9277c0f8 HFP-750 Updated h5p core font from 16 to 17. 2017-02-09 12:45:51 +01:00
Frode Petterson e66e6c5d76 Only clone content folder if it exists
HFP-731
2017-02-08 10:57:16 +01:00
Frode Petterson bb71ea20a3 Update JSDoc 2017-02-07 13:48:42 +01:00
Frode Petterson ea3b86dcfe Development mode must be set by default
HFP-724
2017-02-07 12:55:53 +01:00
Frode Petterson b555e4d7a4 Merge branch 'master' of github.com:h5p/h5p-php-library 2017-02-06 14:40:56 +01:00
Frode Petterson 26d0a3a341 Double check that contents settings exist
… before using them.
HFP-714
2017-02-06 14:39:59 +01:00
Frode Petterson 39d7ddc6b8 Merge branch 'master' of github.com:h5p/h5p-php-library 2017-01-31 13:36:32 +01:00
Frode Petterson e548b3575f Add custom xAPI events for action toolbar buttons 2017-01-31 13:35:23 +01:00
Timothy Lim 3b9dd95683 HFP-580 Update regex 2017-01-30 14:49:09 +01:00
Paal Joergensen ef4165a11d Fixed developer mode for Drupal 2017-01-30 11:38:34 +01:00
Paal Joergensen 6ab68eb6e2 Minor cleaning 2017-01-30 08:43:47 +01:00
Frode Petterson 9abe7ef321 Merge branch 'master' of github.com:h5p/h5p-php-library 2017-01-26 15:35:53 +01:00
Timothy Lim 5dc9e3ddd1 HFP-580 Handle language files with hyphens 2017-01-26 15:31:51 +01:00
Frode Petterson bdec1319ed Always return fileId for tracking tmp files 2017-01-26 14:56:36 +01:00
Frode Petterson 03271418f0 Use correct variable 2017-01-26 14:56:28 +01:00
Frode Petterson 95cfaf6b9e Merge branch 'master' into improved-file-handling 2017-01-26 14:12:43 +01:00
Frode Petterson e02df35bb1 Fix compability with PHP <5.4
Big thanks to andyrandom at drupal.org for providing the fix.
2017-01-26 10:37:26 +01:00
Paal Joergensen aedd0112c2 Merge branch 'release' into improved-file-handling 2017-01-13 15:20:11 +01:00
Frode Petterson 79fb0e310c Change confirm dialog overlay color tint
HFP-457
2017-01-13 13:06:22 +01:00
Paal Joergensen 6e135d0319 Merge branch 'release' into improved-file-handling 2017-01-11 16:21:15 +01:00
Paal Joergensen 738dced286 Added utility function for figuriong out if event is from child [HFP-436] 2017-01-04 16:16:28 +01:00
Paal Joergensen 2cc6c53da1 bg colors on h5p core buttons changed [HFP-413] 2017-01-02 15:30:42 +01:00
Tom Arild Jakobsen dcb02810f0 Change confirmation dialogs button color. Relates to: #HFP-413 2016-12-30 14:13:05 +01:00
Andreas Nergaard fc668c5ab3 Revert "Merge branch 'master' into HFP-186-tutorial-example-links"
This reverts commit 893f610861, reversing
changes made to e00bdbd125.
2016-12-22 15:10:15 +01:00
Andreas Nergaard 893f610861 Merge branch 'master' into HFP-186-tutorial-example-links
Conflicts:
	fonts/h5p-core-16.eot
	fonts/h5p-core-16.svg
	fonts/h5p-core-16.ttf
	fonts/h5p-core-16.woff
	styles/h5p.css
2016-12-22 12:50:56 +01:00
Paal Joergensen a41df0ad9e Merge branch 'master' into improved-file-handling 2016-12-21 15:17:56 +01:00
Paal Joergensen e00bdbd125 Making sure displayoptions.icon is a boolean [HFP-277] 2016-12-21 15:17:36 +01:00
Paal Joergensen 20042fba85 Merge branch 'master' into improved-file-handling 2016-12-21 13:34:06 +01:00
Paal Joergensen 671c079eee Merge branch 'improved-embed-and-download' 2016-12-21 13:21:39 +01:00
thomasmars 53f38d596b Merge branch 'master' of https://github.com/h5p/h5p-php-library 2016-12-21 11:35:43 +01:00
thomasmars e2634070d4 Ignore overrideSettings parameter fields.
HFP-391
2016-12-21 11:34:51 +01:00
Paal Joergensen 8f681a2140 Fixing missing semicolon [HFP-375] 2016-12-20 16:40:45 +01:00
Paal Joergensen 8dd766ecb8 More contrast between confirmation dialog and background [HFP-375] 2016-12-20 16:39:51 +01:00
Timothy Lim b91be29cec Add return statement to recursive function
HFP-391
2016-12-20 15:46:36 +01:00
Paal Joergensen 117e1457b7 Merge branch 'master' into improved-embed-and-download 2016-12-20 14:37:52 +01:00
Paal Joergensen 1341768c90 Fixed problem with empty actionbar [HFP-277] 2016-12-20 14:37:31 +01:00
Paal Joergensen f6449a6043 Improving confirmation dialog [HFP-375] 2016-12-20 13:08:49 +01:00
Paal Joergensen 87ec43d687 Using constants for the different display options, and avoid special cases [HFP-277] 2016-12-16 14:22:03 +01:00
Paal Joergensen 7b39a6900c Inheriting global disable setting for export & embed when saving [HFP-277] 2016-12-16 13:29:18 +01:00
Paal Joergensen ea0362c3da Making lines shorter [HFP-277] 2016-12-16 13:27:40 +01:00
Paal Joergensen a1e68d212b Updated comments [HFP-277] 2016-12-16 11:38:47 +01:00
Paal Joergensen 526d7ddd7e Made copyright button being shown [HFP-277] 2016-12-16 11:30:59 +01:00
Timothy Lim 28e34c1c09 Simplify fullscreenSupported
HFP-339
2016-12-14 16:21:42 +01:00
Andreas Nergaard 5a272ea2f1 Fixed broken font referrance and metadata after font update. 2016-12-14 09:32:57 +01:00
Timothy Lim bbe16fb8da Revert changes for canHasFullScreen
HFP-339
2016-12-13 19:46:21 +01:00
Timothy Lim f0d65d4f9d Refactor canHasFullscreen
HFP-339
2016-12-13 16:04:57 +01:00
Paal Joergensen cfd6cb1e63 Fixed download/embed button bug when permissions are used 2016-12-13 15:57:05 +01:00
jelenamilinovic 1058dab02d Delete h5p-core-15.woff 2016-12-13 13:46:02 +01:00
jelenamilinovic 26cedf7d70 Delete h5p-core-15.ttf 2016-12-13 13:45:58 +01:00
jelenamilinovic c442300cab Delete h5p-core-15.svg 2016-12-13 13:45:55 +01:00
jelenamilinovic afc2084c2e Delete h5p-core-15.eot 2016-12-13 13:45:48 +01:00
jelenamilinovic cddef83287 Add files via upload 2016-12-13 13:43:25 +01:00
thomasmars a326066c97 Only set tutorial url if it exists.
HFP-348
2016-12-13 11:36:28 +01:00
Paal Joergensen e69a81f403 Added description of new interface method [HFP-277] 2016-12-13 10:33:59 +01:00
Timothy Lim 52dc1b2a81 Refactor canHasFullScreen
HFP-339
2016-12-13 10:33:11 +01:00
Paal Joergensen 0a23dc043d Download and embed granularity (HFP-277) 2016-12-13 10:29:33 +01:00
thomasmars 7d741fa503 Reset list-style for list items in action bar.
HFP-350
2016-12-13 10:16:15 +01:00
Timothy Lim a4d6f3aaab Restore deprecated variable H5P.canHasFullScreen for backwards compatability
HFP-339
2016-12-12 11:28:59 +01:00
thomasmars d76ce3f3a5 Applied fix for Safari full screen in version > 9
Big thanks to Lest@t at Drupal for providing the patch.
HFP-342
2016-12-12 11:22:34 +01:00
Andreas Nergaard 180d179f66 HFP-186 Added new icons to h5p core font. 2016-12-09 09:23:02 +01:00
thomasmars bc28592e48 Merge branch 'master' into ignoreBuildFiles 2016-12-06 11:35:55 +01:00
thomasmars 47c35d5135 Merge branches 'master' and 'stable' of https://github.com/h5p/h5p-php-library 2016-12-06 11:35:24 +01:00
Pål Jørgensen c906cb7084 Merge pull request #33 from h5p/improved-message-for-library-in-smantics-no-valid
Improved message presented to user
2016-12-05 09:45:23 +01:00
thomasmars d100c5102a Merge branch 'release' into ignoreBuildFiles 2016-12-02 13:47:21 +01:00
Paal Joergensen 4d010ef38f Improved message presented to user 2016-12-01 11:34:28 +01:00
thomasmars 5ec651e696 Merge branch 'release' into ignoreBuildFiles 2016-11-30 13:24:33 +01:00
Paal Joergensen ed1fb00745 Merge branch 'release' into improved-file-handling 2016-11-30 11:19:08 +01:00
Pål Jørgensen ece72fcfbe Merge pull request #32 from h5p/semi-fullscreen-api-function
Added semi fullscreen function
2016-11-30 09:40:17 +01:00
Tom Arild Jakobsen 32d06356b1 Bump to version 1.11
Relates to: #HFP-285
2016-11-29 16:44:20 +01:00
Tom Arild Jakobsen 5494443533 validateGroup must handle isSubContent
* Update validateGroup in h4p.classes.php to allow subContentId into the data
 * Fix h5p-content-upgrade-process.js to take into account isSubContent

Relates to: #HFP-285
2016-11-29 15:44:32 +01:00
Tom Arild Jakobsen 0882879552 Allow subContentId in group validation. Relates to: #HFP-285 2016-11-28 14:55:57 +01:00
Tom Arild Jakobsen b4615e01b1 Allow subContentId in group validation. Relates to: #HFP-285 2016-11-28 14:54:33 +01:00
Tom Arild Jakobsen b55c1838a9 Update .gitignore 2016-11-23 14:21:28 +01:00
thomasmars 9b0d77a721 Check instanceof score as well to validate number.
HFP-215
2016-11-19 12:29:38 +01:00
thomasmars 3278535a04 Merge branch 'master' into ignoreBuildFiles 2016-11-17 13:28:17 +01:00
thomasmars f82f3a354c Removed debug
HFP-86
2016-11-17 13:27:41 +01:00
thomasmars 0d3648d601 Merge branch 'master' into ignoreBuildFiles 2016-11-17 12:57:58 +01:00
thomasmars d55134151c Moved registering of external dispatcher listener.
- This will dispatch events that are dispatched inside the constructor of
  content types
HFP-86
2016-11-17 12:56:15 +01:00
thomasmars 3e2266fe6c Merge branch 'master' into ignoreBuildFiles 2016-11-17 11:17:32 +01:00
thomasmars ec2ff180c1 Updated H5P font
HFP-114
2016-11-17 11:13:59 +01:00
thomasmars bb29d0c161 Merge branch 'master' into ignoreBuildFiles 2016-11-16 16:29:11 +01:00
Frode Petterson 44c0507887 Merge branch 'editor-redesign' 2016-11-16 16:12:40 +01:00
thomasmars 49e0ff09f4 Merge branch 'master' into ignoreBuildFiles 2016-11-16 14:41:46 +01:00
Paal Joergensen 6001b68b99 Making naming harder to misunderstand 2016-11-11 11:57:54 +01:00
Paal Joergensen 7e90871cb7 Fixing typo 2016-11-11 11:51:20 +01:00
Paal Joergensen 96f84a430a Added semi fullscreen function 2016-11-11 11:45:59 +01:00
Frode Petterson 1173341b76 Merge branch 'release' into improved-file-handling 2016-11-01 16:30:32 +01:00
thomasmars 426f51caa0 Check that score is a number before storing it to the database.
HFP-173

(cherry picked from commit bae3145)
2016-10-28 13:49:03 +02:00
thomasmars bae31451c0 Check that score is a number before storing it to the database.
HFP-173
2016-10-28 13:45:11 +02:00
thomasmars b4949c0d83 Don't store results if they have no score.
HFP-173

(cherry picked from commit 516c70a)
2016-10-28 10:46:40 +02:00
thomasmars 516c70add5 Don't store results if they have no score.
HFP-173
2016-10-28 10:46:05 +02:00
Frode Petterson 08a1cece26 Merge branch 'master' into improved-file-handling 2016-10-27 11:20:18 +02:00
thomasmars 0474ed89af Merge branch 'master' into ignoreBuildFiles 2016-10-21 09:55:08 +02:00
thomasmars f28036ca0e Bumped core API version because of API changes in editor 2016-10-21 09:53:59 +02:00
Frode Petterson bf554b8ee2 Updated composer config 2016-10-07 13:39:51 +02:00
Mannes 52723ad933 Check for file exists before adding to zip. Adding a non existent file to ZipArchive can lead to archive not being created 2016-10-05 17:14:48 +02:00
Frode Petterson c9e5680e85 Merge branch 'master' into improved-file-handling 2016-10-03 15:12:32 +02:00
Frode Petterson e4266efb22 Added framework method to clear dirsize cache
HFP-23
2016-09-30 13:41:50 +02:00
Frode Petterson 0a9aa5a783 Merge pull request #28 from limikael/master
don't fail silently in createExportFile
2016-09-30 11:31:17 +02:00
Håkon Ellingsen a2097d56cb HVP-73: Update font with new icons 2016-09-27 08:12:46 +02:00
Mikael Lindqvist ce796cf0cf don't fail silently in createExportFile 2016-09-26 12:05:02 +02:00
thomasmars cee88a544f Made it possible to ignore build files when exporting development folders. 2016-09-23 15:47:38 +02:00
Frode Petterson 1c5b9707e5 Regenerate export if missing on view
Thanks to paravibe on Drupal.org for contributing.
2016-09-23 10:52:40 +02:00
Frode Petterson 263a987eeb Added document root when creating zip
Thanks to paravibe on Drupal.org for contributing.
2016-09-23 10:31:55 +02:00
Frode Petterson 6b6d4cd109 Merge branch 'improved-file-handling' of github.com:h5p/h5p-php-library into improved-file-handling 2016-09-23 10:14:28 +02:00
Frode Petterson f0e7ea1283 Merge branch 'moodle-rc3' into improved-file-handling 2016-09-23 10:14:19 +02:00
thomasmars 7d86a6235b Merge branch 'release' of https://github.com/h5p/h5p-php-library into moodle-rc3 2016-09-21 14:34:24 +02:00
Thomas 218e48ee91 Merge pull request #25 from h5p/release
Merge 'release' into 'improved-file-handling'
2016-09-21 13:42:06 +02:00
Paal Joergensen 5f38e2b7f8 Bumped core because of bugfix for optional selects [HFJ-2183] 2016-09-21 13:22:35 +02:00
Frode Petterson fd34af6964 Use content array instead of just id
Makes it easier when additional properties are needed.
Also, don't try to translate PHP exception messages.
h5p/h5p-moodle-plugin#112
2016-09-14 10:44:10 +02:00
Frode Petterson c88c049438 Check if contents is set before using
h5p/h5p-moodle-plugin#112
2016-09-09 09:19:55 +02:00
Frode Petterson e8f90c9116 Allow overriding of content URLs
h5p/h5p-moodle-plugin#112
2016-09-08 16:34:53 +02:00
Frode Petterson 2896c9fdab Revert "Added content ID to export handlers"
This reverts commit 7fca1d100d.

Holding off on the exports for now
2016-09-08 14:48:08 +02:00
Frode Petterson 7fca1d100d Added content ID to export handlers
This is to enable for proper access control.
h5p/h5p-moodle-plugin#112
2016-09-08 13:32:57 +02:00
Paal Joergensen 5b8836b5be Making select beeing able to be optional 2016-08-29 15:54:48 +02:00
Frode Petterson d946f32b81 Merge branch 'master' into improved-file-handling 2016-08-02 13:37:26 +02:00
Frode Petterson 888a46844b Bumped core version 2016-08-02 12:57:43 +02:00
Frode Petterson 832aebf5e0 Moved regexp from editor to core
HFJ-2099
2016-07-29 14:15:00 +02:00
Frode Petterson 1ef52dfafe Merge branch 'release' of github.com:h5p/h5p-php-library into release 2016-07-29 13:47:17 +02:00
Frode Petterson 44633fc1db Updated regexp to support existing content to new content copy
HFJ-2099
2016-07-29 13:46:14 +02:00
Frode Petterson 8b31f88ca8 Increase performance by removing unused code 2016-07-27 16:17:58 +02:00
Frode Petterson 9f7b545f02 Added lost part of old fix
HVP-212
2016-07-15 16:14:32 +02:00
Svein-Tore Griff With 43748bc4b8 Add documentation regarding stylePatterns 2016-07-15 15:33:11 +02:00
Frode Petterson 61219a7d84 Merge branch 'master' into improved-file-handling 2016-07-14 10:29:30 +02:00
Frode Petterson 3d14588160 Bugfix: Check if library json is valid 2016-07-08 11:08:47 +02:00
ndobromirov 406a55be5c Excessive calls to variable_set HFJ-1893 2016-06-21 13:26:39 +02:00
Frode Petterson 18e2b79cc6 Merge branch 'master' of github.com:h5p/h5p-php-library 2016-06-21 09:34:37 +02:00
andyrandom 8cb0aad09e Allow hyphens in HTML tags HFJ-1951 2016-06-21 09:34:27 +02:00
Frode Petterson a6656c2e6f Support for when cookies are disabled
HFJ-1915
2016-06-20 14:57:14 +02:00
Frode Petterson 77b9959c87 Merge pull request #22 from davericher/patch-1
Minor cleanup
2016-06-17 08:59:40 +02:00
Dave Richer bcdaf59e5e Minor cleanup 2016-06-16 14:13:51 -04:00
Frode Petterson d4d9f81518 Merge branch 'stable' 2016-06-16 15:32:14 +02:00
Frode Petterson a9a99afb9b Handle non-existing content dir 2016-06-16 10:43:17 +02:00
Frode Petterson 94d3334f37 Merge branch 'improved-file-handling' of github.com:h5p/h5p-php-library into improved-file-handling 2016-06-15 10:34:43 +02:00
Frode Petterson ba2f7c5e67 Merge branch 'release' into improved-file-handling 2016-06-15 10:34:34 +02:00
Frode Petterson 89541acfa8 Allow for alternative editor path
(used by Drupal)
2016-06-14 12:39:15 +02:00
Frode Petterson ec2e0fbb71 Removed JS error on empty results 2016-06-13 14:46:15 +02:00
Frode Petterson 0ee4cc57fc Fixed saveFile not working for default storage 2016-06-13 12:47:44 +02:00
Frode Petterson fca0537a4d Use context and token in URL prefix 2016-06-13 10:31:09 +02:00
Frode Petterson 5e87aee63c Merge branch 'release' into improved-file-handling 2016-06-13 09:58:18 +02:00
Thomas Marstrander b3c55928e3 Remove tabindex of exitButton in confirmation dialog.
Trapped focus between confirm and cancel button.
HFJ-2004
2016-06-09 15:26:15 +02:00
Thomas Marstrander 51851f14c3 Use aria-labelledby to describe dialog, instead of alert.
HFJ-2003
2016-06-09 13:18:09 +02:00
Thomas Marstrander e10594fb49 Hide redundant confirmation dialog exit button for assistive technologies.
HFJ-2004
2016-06-09 11:26:11 +02:00
Paal Joergensen d42630c369 Merge branch 'mbstring-check' into release 2016-06-08 11:29:37 +02:00
Paal Joergensen 6caf44e54b Added checks for mbstring PHP extension [HFJ-1996] 2016-06-08 11:28:07 +02:00
Thomas Marstrander 8615deb23b Hide elements that confirmation dialog covers from assistive technologies.
HFJ-1995
2016-06-08 11:06:03 +02:00
Thomas Marstrander 10e1a7ba65 Use DOM Level 2 events.
HFJ-1999
2016-06-07 15:09:59 +02:00
Thomas Marstrander 8bd9e9c2db Merge remote-tracking branch 'origin/release' into release 2016-06-07 14:32:12 +02:00
Thomas Marstrander 77fb832221 Added focus capturing, redirecting it to the open confirmation dialog
HFJ-1995
2016-06-07 14:31:41 +02:00
Frode Petterson b261754cf1 Merge branch 'release' into improved-file-handling 2016-06-07 14:28:12 +02:00
Frode Petterson 2ebc9225ee Merge branch 'release' of github.com:h5p/h5p-php-library into release 2016-06-07 12:58:40 +02:00
Paal Joergensen f4cee6e284 Moved deletion of content user data to after dialog is closed [HFJ-1989] 2016-06-07 11:09:42 +02:00
Thomas Marstrander 87658ed42b Accessibility - reads confirmation dialog text on show.
HFJ-1992
2016-06-07 11:04:21 +02:00
Paal Joergensen 7807b8af68 Making sure reset dialog is only shown once [HFJ-1989] 2016-06-06 16:09:35 +02:00
Thomas Marstrander e3b29a2199 Accessibility - reads confirmation dialog text on show.
HFJ-1992
2016-06-06 14:57:51 +02:00
Frode Petterson 2bcf3b783f Merge branch 'release' 2016-06-06 10:01:36 +02:00
Thomas Marstrander 93a07d2e9b Merge branch 'improved-file-handling' of https://github.com/h5p/h5p-php-library into improved-file-handling 2016-05-31 14:43:34 +02:00
Thomas Marstrander b102a7de21 Only add editor context when in editor.
HFJ-1972
2016-05-31 14:43:12 +02:00
Frode Petterson ce89b516ef Merge branch 'release' into improved-file-handling 2016-05-31 12:43:06 +02:00
Frode Petterson 594d992f19 Merge branch 'master' into improved-file-handling 2016-05-31 12:42:29 +02:00
Thomas Marstrander 0a63d123cf Prevent DOM pollution when having many confirmation dialogs.
Append confirmation dialog on show and detach it on hide.
HFJ-1969
2016-05-31 10:19:07 +02:00
Thomas Marstrander 73a23d4679 Send context id together with post data in order to determine our context.
HFJ-1964
2016-05-30 10:35:06 +02:00
Frode Petterson bba5190876 Merge branch 'release' of github.com:h5p/h5p-php-library into improved-file-handling 2016-05-24 11:27:28 +02:00
Thomas Marstrander c6b3b06a97 Added pointer cursor for core cancel button.
HFJ-1930
2016-05-24 11:18:42 +02:00
Thomas Marstrander 27bc158708 Use buttons instead of anchors in Confirmation Dialog.
HFJ-1930
2016-05-23 14:34:56 +02:00
Frode Petterson 417af36c81 Bugfix: Must be able to run from CLI 2016-05-12 15:52:37 +02:00
Frode Petterson cbfa2913bc Merge branch 'master' into improved-file-handling 2016-05-09 13:21:47 +02:00
Frode Petterson 51698d325b Corrected file storage interface 2016-05-09 11:53:12 +02:00
Frode Petterson a36b2f1212 Removed TODO which makes no sense 2016-05-06 10:40:28 +02:00
Frode Petterson e056b6776a More functions for handling content files
Added three more functions to File Storage Interface
h5p/h5p-moodle-plugin#49
HFJ-1846
2016-05-04 16:52:02 +02:00
Frode Petterson c9583cb8fa Merge branch 'master' into improved-file-handling 2016-04-26 11:57:04 +02:00
Frode Petterson c9349b8e26 Merge branch 'master' into improved-file-handling
Conflicts:
	h5p-default-storage.class.php
	h5p-file-storage.interface.php
2016-04-25 14:34:05 +02:00
Frode Petterson 325ea27562 Added func. for saving uploaded files
h5p/h5p-moodle-plugin#48
HFJ-1845
2016-04-25 14:31:25 +02:00
Frode Petterson 7b38c3571e Made dir handling private to prevent abuse
h5p/h5p-moodle-plugin#48
HFJ-1845
2016-04-25 14:30:12 +02:00
54 changed files with 6512 additions and 1228 deletions

2
.gitignore vendored
View File

@ -1 +1,3 @@
vendor
*~
.idea

40
.travis.yml Normal file
View File

@ -0,0 +1,40 @@
language: php
# At present the only jobs to run are a php lint.
# Run this against all supported versions of PHP.
jobs:
include:
# Bionic supports PHP 7.1, 7.2, 7.3, and 7.4.
# https://docs.travis-ci.com/user/reference/bionic/#php-support
- php: 7.4
dist: bionic
- php: 7.3
dist: bionic
- php: 7.2
dist: bionic
- php: 7.1
dist: bionic
# Xenial was the last Travis distribution to support PHP 5.6, and 7.0.
# https://docs.travis-ci.com/user/reference/xenial/#php-support
- php: 7.0
dist: xenial
- php: 5.6
dist: xenial
# Trusty was the last Travis distribution to support PHP 5.4, and 5.5.
# https://docs.travis-ci.com/user/languages/php/#php-54x---55x-support-is-available-on-precise-and-trusty-only
- php: 5.5
dist: trusty
- php: 5.4
dist: trusty
# Precise was the last Travis distribution to support PHP 5.2, and 5.3.
# https://docs.travis-ci.com/user/languages/php/#php-52x---53x-support-is-available-on-precise-only
- php: 5.3
dist: precise
script:
# Run a php lint across all PHP files.
- find . -type f -name '*\.php' -print0 | xargs -0 -n1 php -l

View File

@ -1,10 +1,35 @@
{
"name": "h5p/h5p-php-library",
"name": "h5p/h5p-core",
"type": "library",
"description": "H5P Core functionality in PHP",
"keywords": ["h5p","hvp","interactive","content","quiz"],
"homepage": "https://h5p.org",
"license": "GPL-3.0",
"authors": [
{
"name": "Svein-Tore Griff With",
"email": "with@joubel.com",
"homepage": "http://joubel.com",
"role": "CEO"
},
{
"name": "Frode Petterson",
"email": "frode.petterson@joubel.com",
"homepage": "http://joubel.com",
"role": "Developer"
}
],
"require": {
"php": ">=5.3.0"
},
"autoload": {
"files": [
"h5p.classes.php",
"h5p-development.class.php",
"h5p.classes.php"
"h5p-file-storage.interface.php",
"h5p-default-storage.class.php",
"h5p-event-base.class.php",
"h5p-metadata.class.php"
]
}
}

View File

@ -9,6 +9,7 @@
<?php for ($i = 0, $s = count($styles); $i < $s; $i++): ?>
<link rel="stylesheet" href="<?php print $styles[$i]; ?>">
<?php endfor; ?>
<?php if (!empty($additional_embed_head_tags)): print implode("\n", $additional_embed_head_tags); endif; ?>
</head>
<body>
<div class="h5p-content" data-content-id="<?php print $content['id']; ?>"></div>

Binary file not shown.

View File

@ -1,25 +0,0 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<svg xmlns="http://www.w3.org/2000/svg">
<metadata>Generated by IcoMoon</metadata>
<defs>
<font id="h5p-core-14" horiz-adv-x="1024">
<font-face units-per-em="1024" ascent="960" descent="-64" />
<missing-glyph horiz-adv-x="1024" />
<glyph unicode="&#x20;" horiz-adv-x="512" d="" />
<glyph unicode="&#xe600;" glyph-name="uniE88D" d="M386.662 874.394h71.27v-71.27h-71.27v71.27zM566.067 874.394h71.27v-71.27h-71.27v71.27zM386.662 718.131h71.27v-71.27h-71.27v71.27zM566.067 718.131h71.27v-71.27h-71.27v71.27zM386.662 561.766h71.27v-71.27h-71.27v71.27zM566.067 561.766h71.27v-71.27h-71.27v71.27zM386.662 405.504h71.27v-71.27h-71.27v71.27zM566.067 405.504h71.27v-71.27h-71.27v71.27zM386.662 249.139h71.27v-71.27h-71.27v71.27zM566.067 249.139h71.27v-71.27h-71.27v71.27zM386.662 92.877h71.27v-71.27h-71.27v71.27zM566.067 92.877h71.27v-71.27h-71.27v71.27z" />
<glyph unicode="&#xe601;" glyph-name="uniE601" d="M454.299 416.588l-116.917 116.917-84.781-84.707 201.696-201.697 317.097 317.097-84.781 84.706z" />
<glyph unicode="&#xe888;" glyph-name="uniE888" horiz-adv-x="1321" d="M660.48 703.59c-140.288 0-253.952-113.664-253.952-253.952 0-122.47 86.63-224.666 202.138-248.627v206.234h-86.835c-11.264 0-14.541 7.168-7.373 16.179l133.12 164.659c7.168 9.011 18.842 9.011 26.010 0l133.12-164.659c7.373-8.602 3.686-16.179-7.373-16.179h-86.835v-206.234c115.507 23.962 202.138 126.157 202.138 248.627-0.205 140.288-113.869 253.952-254.157 253.952z" />
<glyph unicode="&#xe889;" glyph-name="uniE889" horiz-adv-x="1321" d="M662.118 701.952c-140.288 0-253.952-113.664-253.952-253.952s113.664-253.952 253.952-253.952 253.952 113.664 253.952 253.952-113.664 253.952-253.952 253.952zM621.773 652.8h83.763v-65.946h-83.763v65.946zM748.749 273.92h-173.67v50.995h49.562v159.13h-49.562v50.995h133.53v-210.125h40.346v-50.995z" />
<glyph unicode="&#xe88a;" glyph-name="uniE88A" horiz-adv-x="1321" d="M925.491 236.646l-114.688 114.688c27.238 37.888 43.213 84.378 43.213 134.554 0 127.59-103.834 231.424-231.424 231.424s-231.424-103.834-231.424-231.424c0-127.59 103.834-231.424 231.424-231.424 50.176 0 96.666 15.974 134.554 43.213l114.688-114.688c5.325-5.325 13.926-5.325 19.251 0l34.406 34.406c5.325 5.12 5.325 13.926 0 19.251zM622.797 318.566c-92.365 0-167.117 74.752-167.117 167.117s74.752 167.117 167.117 167.117c92.365 0 167.117-74.752 167.117-167.117s-74.752-167.117-167.117-167.117z" />
<glyph unicode="&#xe88c;" glyph-name="uniE88C" horiz-adv-x="1321" d="M495.845 602.867c4.186 4.186 2.79 8.372-3.255 8.835l-111.615 11.86c-6.046 0.697-10.464-3.721-9.766-9.766l11.86-111.615c0.697-6.046 4.65-7.441 8.835-3.255l103.942 103.942zM421.202 534.968l64.876-64.876c4.186-4.186 11.161-4.186 15.581 0l23.254 23.254c4.186 4.186 4.186 11.161 0 15.581l-64.876 64.876zM932.774 498.924c4.186-4.186 8.372-2.79 8.835 3.255l11.86 111.615c0.697 6.046-3.721 10.464-9.766 9.766l-111.615-11.86c-6.046-0.697-7.441-4.65-3.255-8.835l103.942-103.942zM864.873 573.799l-64.876-64.876c-4.186-4.186-4.186-11.161 0-15.581l23.254-23.254c4.186-4.186 11.161-4.186 15.581 0l64.876 64.876zM828.83 284.064c-4.186-4.186-2.79-8.372 3.255-8.835l111.615-11.86c6.046-0.697 10.464 3.721 9.766 9.766l-11.86 111.615c-0.697 6.046-4.65 7.441-8.835 3.255l-103.942-103.942zM903.707 351.733l-64.876 64.876c-4.186 4.186-11.161 4.186-15.581 0l-23.254-23.254c-4.186-4.186-4.186-11.161 0-15.581l64.876-64.876zM391.903 388.008c-4.186 4.186-8.372 2.79-8.835-3.255l-11.86-111.615c-0.697-6.046 3.721-10.464 9.766-9.766l111.615 11.86c6.046 0.697 7.441 4.65 3.255 8.835l-103.942 103.942zM459.802 313.131l64.876 64.876c4.186 4.186 4.186 11.161 0 15.581l-23.254 23.254c-4.186 4.186-11.161 4.186-15.581 0l-64.876-64.876zM284.938 707.273v-518.547h751.079v518.547h-751.079zM990.906 233.837h-660.857v428.325h660.623v-428.325z" />
<glyph unicode="&#xe88e;" glyph-name="uniE88E" horiz-adv-x="1321" d="M1062.773 608.822c-21.364 20.404-53.527 31.205-96.254 31.205h-148.821v-76.81h-168.504l-14.162-60.968c11.762 5.521 28.565 9.602 40.087 12.483 11.521 2.88 23.044 1.681 34.325 1.681 38.405 0 69.369-12.001 93.131-35.285 23.763-23.044 35.765-52.567 35.765-87.611 0-24.722-6.241-48.488-18.484-71.529-12.243-22.804-29.764-41.766-52.327-53.768-8.161-4.321-17.043-2.4-26.644-12.001h141.62v144.021h70.811c47.767 0 83.292 9.843 106.335 31.684 23.285 21.844 34.806 51.848 34.806 90.494 0.241 37.205-10.321 66.009-31.684 86.411zM965.8 488.087c-9.12-7.921-25.204-11.284-48.006-11.284h-35.285v86.411h39.846c22.084 0 37.205-5.281 45.125-13.683 7.921-8.401 12.001-18.722 12.001-30.724 0-12.483-4.562-22.804-13.683-30.724zM671.518 446.559c-20.642 0-38.646-12.001-47.287-29.285l-103.694 15.122 46.807 207.629h-100.095v-163.222h-122.417v163.222h-120.017v-384.053h120.017v144.021h122.417v-144.021h148.579c-17.522 9.602-32.643 13.202-45.125 22.563-12.721 9.602-22.804 20.883-30.724 32.885s-13.921 25.685-19.203 43.686l103.694 15.122c8.642-17.283 26.403-29.044 47.047-29.044 29.044 0 52.567 23.522 52.567 52.567s-23.522 52.807-52.567 52.807z" />
<glyph unicode="&#xe88f;" glyph-name="uniE88F" horiz-adv-x="1321" d="M1030.554 429.363c1.638-3.277 0-3.277-1.638-6.349-20.89-22.323-46.49-35.226-76.8-41.574-12.902-1.638-25.6-3.277-36.864-3.277-12.493 0-18.637 0-27.238 1.638-1.638 0.205-3.277 1.638-4.71 3.277-67.174 60.826-135.987 121.651-203.162 182.477-1.638 1.638-4.71 1.638-6.349 1.638-23.962-6.349-47.923-12.902-73.523-19.251-25.6-4.71-51.2-1.638-75.162 12.902-12.902 7.987-22.323 19.251-28.877 33.587-4.71 9.626 1.638 22.323 12.902 25.6 43.213 12.902 86.426 28.877 128 44.851 12.902 4.71 27.238 7.987 41.574 6.349 4.71 0 9.626-3.277 14.336-4.71 41.574-15.974 83.149-30.31 124.723-46.49 1.638-1.638 4.71-1.638 7.987 0 30.31 7.987 62.464 17.613 92.774 25.6 3.277 1.638 4.71 0 6.349-1.638zM420.864 437.35c19.251 9.626 36.864 6.349 51.2-9.626 12.902-12.902 12.902-28.877 3.277-49.562 19.251 3.277 33.587-3.277 43.213-19.251 11.264-17.613 7.987-33.587-6.349-49.562 4.71 0 11.264 0 15.974-1.638 14.336-3.277 25.6-12.902 30.31-27.238s1.638-27.238-7.987-36.864c-4.71-6.349-11.264-11.264-15.974-17.613s-11.264-11.264-15.974-17.613c-14.336-14.336-38.502-15.974-52.838-1.638-30.31 30.31-55.91 64.102-83.149 97.69-17.613 22.323-33.587 43.213-49.562 65.536-7.987 9.626-12.902 19.251-14.336 31.949 0 7.987 1.638 15.974 7.987 22.323 9.626 9.626 17.613 19.251 27.238 28.877 17.613 17.613 47.923 12.698 62.464-7.987 1.434-1.434 3.072-4.506 4.506-7.782zM571.392 224.563l27.238-28.877c17.613-15.974 46.49-12.902 57.549 7.987l-3.277 3.277c-22.323 22.323-46.49 46.49-68.813 68.813-3.277 3.277-4.71 7.987-3.277 12.902 1.638 4.71 4.71 7.987 9.626 9.626 4.71 1.638 9.626 0 12.902-4.71 14.336-14.336 30.31-30.31 44.851-44.851 14.336-14.336 30.31-28.877 44.851-44.851 7.987-9.626 19.251-11.264 30.31-9.626 14.336 3.277 23.962 11.264 30.31 25.6 1.638 3.277 0 4.71-1.638 6.349-43.213 43.213-86.426 84.787-128 128-3.277 3.277-6.349 7.987-4.71 14.336 1.638 9.626 12.902 14.336 22.323 7.987 1.638-1.638 3.277-1.638 3.277-3.277 43.213-43.213 88.064-88.064 131.277-131.277 3.277-3.277 4.71-3.277 7.987-3.277 17.613 1.638 33.587 15.974 36.864 33.587 0 3.277 0 4.71-1.638 6.349-49.562 49.562-99.123 99.123-148.89 148.89-3.277 3.277-4.71 6.349-4.71 11.264 0 4.71 3.277 11.264 7.987 12.698 4.71 1.638 9.626 1.638 14.336-3.277 3.277-3.277 7.987-7.987 11.264-11.264 35.226-35.226 70.451-70.451 105.677-105.677 11.264-11.264 22.323-20.89 31.949-31.949 1.638-1.638 4.71-3.277 6.349-1.638 23.962 4.71 38.502 30.31 28.877 54.477l38.298-1.638c0-0.205 0-0.41 0.205-0.614 1.434-7.987 1.434-17.203-0.205-24.986-6.349-30.31-23.962-49.562-52.838-59.187-1.638 0-3.277-1.638-3.277-3.277-9.626-31.949-33.587-52.838-67.174-55.91-3.277 0-3.277-1.638-4.71-3.277-17.613-33.587-57.549-49.562-91.136-36.864-4.71 1.638-9.626 4.71-14.336 6.349-6.349-6.349-14.336-12.698-22.323-15.974-27.238-12.698-57.549-6.349-78.438 14.336-9.626 9.626-19.251 19.251-30.31 28.877 7.987 7.987 14.336 15.974 23.962 25.6l1.434-1.024zM404.89 744.55c31.949-9.626 62.464-20.89 94.413-30.31 33.587-11.264 65.536-20.89 99.123-31.949 1.638 0 1.638 0 3.277-1.638-17.613-6.349-33.587-11.264-49.562-17.613-1.638 0-3.277 0-4.71 0-44.851 14.336-91.136 28.877-135.987 43.213-3.277 1.638-4.71 0-7.987-1.638l-80.077-185.549c0-9.626 4.71-17.613 11.264-25.6 3.277-4.71 6.349-7.987 7.987-9.626-7.987-7.987-14.336-15.974-22.323-25.6-15.974 19.251-28.877 38.502-30.31 64.102l89.498 212.787c-0.41-0.205 12.902 13.312 25.395 9.421z" />
<glyph unicode="&#xe890;" glyph-name="uniE890" horiz-adv-x="1321" d="M660.48 701.952c-140.288 0-253.952-113.664-253.952-253.952s113.664-253.952 253.952-253.952 253.952 113.664 253.952 253.952-113.664 253.952-253.952 253.952zM796.058 371.2c6.963-6.963 6.963-18.022 0-24.986l-33.997-33.997c-6.963-6.963-18.022-6.963-24.986 0l-76.8 76.8-76.595-76.595c-6.963-6.963-18.022-6.963-24.986 0l-33.997 33.997c-6.963 6.963-6.963 18.022 0 24.986l76.8 76.8-76.8 76.8c-6.963 6.963-6.963 18.022 0 24.986l33.997 33.997c6.963 6.963 18.022 6.963 24.986 0l76.8-76.8 76.8 76.8c6.963 6.963 18.022 6.963 24.986 0l33.997-33.997c6.963-6.963 6.963-18.022 0-24.986l-77.005-77.005 76.8-76.8z" />
<glyph unicode="&#xe891;" glyph-name="uniE891" horiz-adv-x="1321" d="M324.468 566.591c-4.186-4.186-2.79-8.372 3.255-8.835l111.615-11.86c6.046-0.697 10.464 3.721 9.766 9.766l-11.86 111.615c-0.697 6.046-4.65 7.441-8.835 3.255l-103.942-103.942zM399.112 634.259l-64.644 64.876c-4.186 4.186-11.161 4.186-15.581 0l-23.254-23.254c-4.186-4.186-4.186-11.161 0-15.581l64.876-64.876zM896.497 670.533c-4.186 4.186-8.372 2.79-8.835-3.255l-11.86-111.615c-0.697-6.046 3.721-10.464 9.766-9.766l111.615 11.86c6.046 0.697 7.441 4.65 3.255 8.835l-103.942 103.942zM964.165 595.657l64.876 64.876c4.186 4.186 4.186 11.161 0 15.581l-23.254 23.254c-4.186 4.186-11.161 4.186-15.581 0l-64.876-64.876zM1000.44 320.34c4.186 4.186 2.79 8.372-3.255 8.835l-111.615 11.86c-6.046 0.697-10.464-3.721-9.766-9.766l11.86-111.615c0.697-6.046 4.65-7.441 8.835-3.255l103.942 103.942zM925.564 252.441l64.876-64.876c4.186-4.186 11.161-4.186 15.581 0l23.254 23.254c4.186 4.186 4.186 11.161 0 15.581l-64.876 64.876zM428.41 216.398c4.186-4.186 8.372-2.79 8.835 3.255l11.86 111.615c0.697 6.046-3.721 10.464-9.766 9.766l-111.615-11.86c-6.046-0.697-7.441-4.65-3.255-8.835l103.942-103.942zM360.51 291.273l-64.876-64.876c-4.186-4.186-4.186-11.161 0-15.581l23.254-23.254c4.186-4.186 11.161-4.186 15.581 0l64.876 64.876zM477.939 572.404v-248.809h365.076v248.809h-365.076zM797.905 368.707h-274.854v158.355h274.621v-158.355z" />
<glyph unicode="&#xe892;" glyph-name="uniE892" horiz-adv-x="1321" d="M599.553 337.314c4.419-3.023 8.138-9.998 8.138-15.581v-58.599c0-5.348-3.721-7.441-8.138-4.419l-220.906 148.123c-4.419 3.023-8.138 9.998-8.138 15.348v50.228c0 5.348 3.721 12.323 8.138 15.581l220.906 149.517c4.419 3.023 8.138 1.162 8.138-4.419v-58.599c0-5.348-3.721-12.556-8.138-15.581l-152.773-106.731c-4.419-3.023-4.419-8.138 0-11.161l152.773-103.71zM874.175 440.559c4.419 3.023 4.65 8.138 0 11.161l-152.773 106.731c-4.419 3.023-8.138 10.232-8.138 15.581v58.599c0 5.348 3.721 7.441 8.138 4.419l220.906-149.517c4.419-3.023 8.138-9.998 8.138-15.581v-50.228c0-5.348-3.721-12.323-8.138-15.348l-220.906-148.123c-4.419-3.023-8.138-1.162-8.138 4.419v58.599c0 5.348 3.721 12.323 8.138 15.581l152.773 103.71z" />
<glyph unicode="&#xe893;" glyph-name="uniE893" horiz-adv-x="1321" d="M502.17 522.957c-12.902 0-16.998-8.192-8.806-18.227l152.166-188.006c8.192-10.035 21.504-10.035 29.696 0l152.166 188.006c8.192 10.035 4.301 18.227-8.806 18.227h-316.416zM719.462 512.512v139.878c0 12.902-10.65 23.552-23.552 23.552h-70.656c-12.902 0-23.552-10.65-23.552-23.552v-139.878zM798.106 375.91c-8.602 0-20.070-5.53-25.6-12.288l-75.162-92.979c-5.325-6.758-15.36-16.589-22.118-21.914 0 0-4.506-3.686-14.746-3.686s-14.746 3.686-14.746 3.686c-6.758 5.325-16.589 15.36-22.118 21.914l-75.162 92.979c-5.325 6.758-16.998 12.288-25.6 12.288h-130.253c-8.602 0-15.77-6.963-15.77-15.77v-141.722c0-8.602 6.963-15.77 15.77-15.77h535.962c8.602 0 15.77 6.963 15.77 15.77v141.722c0 8.602-6.963 15.77-15.77 15.77h-130.458zM448.102 261.018c-15.565 0-28.262 12.698-28.262 28.262s12.698 28.262 28.262 28.262 28.262-12.698 28.262-28.262c-0.205-15.565-12.698-28.262-28.262-28.262z" />
<glyph unicode="&#xe894;" glyph-name="uniE894" horiz-adv-x="1321" d="M742.605 448l107.11 107.11c9.626 9.626 9.626 25.19 0 34.816l-47.309 47.309c-9.626 9.626-25.19 9.626-34.816 0l-107.11-107.11-107.11 107.11c-9.626 9.626-25.19 9.626-34.816 0l-47.309-47.309c-9.626-9.626-9.626-25.19 0-34.816l107.11-107.11-107.11-107.11c-9.626-9.626-9.626-25.19 0-34.816l47.309-47.309c9.626-9.626 25.19-9.626 34.816 0l107.11 107.11 107.11-107.11c9.626-9.626 25.19-9.626 34.816 0l47.309 47.309c9.626 9.626 9.626 25.19 0 34.816l-107.11 107.11z" />
<glyph unicode="&#xe900;" glyph-name="edit-image" d="M300.237 770.97c69.018 23.142 133.325 14.234 189.133-33.28 56.627-48.128 77.619-110.592 63.181-183.808-2.355-12.186 0.307-19.456 8.704-27.853 93.901-93.389 156.774-156.467 250.47-250.163 5.427-5.427 10.957-10.854 15.667-16.896 39.424-50.278 16.794-124.006-44.237-142.029-36.966-10.957-68.403 0-95.334 27.034-95.642 96.051-160.973 160.973-256.614 257.024-6.963 6.963-12.8 8.909-22.63 6.758-117.76-26.317-229.171 60.826-231.731 181.453-0.614 26.419 3.584 52.326 15.974 77.926 34.816-34.816 68.506-67.789 101.274-101.786 10.445-10.752 20.992-15.36 36.045-15.36 14.643 0 25.19 3.891 34.816 14.848 10.752 12.39 23.040 23.347 34.611 35.021 14.336 14.438 14.336 46.080-0.205 60.518-35.123 35.226-70.349 70.349-106.598 106.496 3.891 2.253 5.632 3.482 7.475 4.096zM703.386 212.89c-0.41-24.269 20.685-45.466 44.851-45.158 23.757 0.41 44.032 20.992 43.93 44.544-0.102 23.757-20.275 44.032-44.237 44.134-23.859 0.307-44.237-19.661-44.544-43.52z" />
<glyph unicode="&#xe901;" glyph-name="hourglass" d="M733.286 138.752c-147.763 0-295.526 0-443.29 0 0 2.048 0.102 4.096 0 6.144-0.307 13.824-1.024 32.666-0.922 46.49 0.41 39.731 6.861 78.131 19.046 115.2 17.203 52.224 43.725 96.256 81.306 130.355 4.506 4.096 9.216 7.885 13.722 11.776-0.205 0.717-0.307 1.126-0.41 1.229-1.331 1.229-2.765 2.355-4.198 3.584-28.058 22.63-50.688 51.405-68.403 85.606-30.618 59.085-43.52 123.597-41.165 192.614 0.205 7.168 0.614 18.33 0.922 25.498 147.763 0 295.526 0 443.29 0 0.205-1.331 0.512-2.662 0.614-3.994 2.662-36.966 1.229-77.722-5.939-113.869-14.336-72.909-44.544-133.837-95.027-179.405-4.096-3.686-8.294-7.066-12.39-10.547 0.205-0.717 0.307-1.126 0.512-1.331 0.819-0.717 1.638-1.434 2.458-2.15 42.189-33.894 71.68-79.872 90.931-135.782 11.776-34.202 18.637-69.837 20.070-106.701 0.819-19.763-0.614-44.851-1.126-64.717zM687.309 181.965c0 6.554 0.205 12.493 0 18.432-1.331 37.581-7.27 74.138-19.866 108.749-17.92 49.562-45.568 88.269-88.678 108.646-2.458 1.126-2.97 3.072-2.97 5.837 0.102 16.691 0.102 33.485 0 50.176 0 3.994 1.331 5.427 4.096 6.963 9.114 5.325 18.432 10.24 26.829 16.896 29.696 23.552 49.152 56.934 62.362 95.744 10.342 30.413 15.77 62.259 17.818 94.822 0.614 9.114 0.102 18.227 0.102 27.546-116.634 0-233.574 0-351.027 0 0.307-8.704 0.614-16.998 1.024-25.395 1.946-37.274 8.499-73.216 21.504-107.213 18.125-47.104 45.261-83.558 86.528-103.117 2.253-1.024 2.867-2.662 2.867-5.427-0.102-17.203-0.102-34.509 0-51.712 0-3.072-1.024-4.506-3.277-5.632-5.632-2.867-11.366-5.734-16.691-9.216-34.304-22.733-56.832-57.754-71.987-100.147-12.493-35.123-18.125-71.987-19.661-109.875-0.205-5.325 0-10.752 0-16.282 117.35 0.205 234.189 0.205 351.027 0.205zM410.214 601.293c68.096 0 135.373 0 203.674 0-3.789-6.554-7.168-12.595-10.752-18.227-10.957-16.998-24.269-30.618-39.731-41.472s-27.75-25.293-32.768-46.592c-1.638-6.963-2.765-14.336-2.867-21.606-0.307-17.203-0.205-34.406 0.307-51.712 0.717-28.058 12.493-48.947 32.154-62.566 43.008-30.003 65.843-75.878 75.776-132.506 0.307-1.638 0.307-3.379 0.614-5.53-83.149 0-166.093 0-249.242 0 2.662 20.685 7.885 40.346 15.462 59.085 13.312 32.973 32.768 59.187 59.494 77.722 16.589 11.469 28.365 27.955 32.358 50.995 0.819 4.813 1.331 9.83 1.434 14.746 0.102 18.637 0.614 37.274-0.205 55.808-1.126 24.678-11.981 43.213-28.57 57.139-9.216 7.782-18.944 14.746-27.648 23.142-11.981 11.162-21.197 25.395-29.491 41.574z" />
</font></defs></svg>

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Binary file not shown.

BIN
fonts/h5p-core-28.eot Normal file

Binary file not shown.

114
fonts/h5p-core-28.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 97 KiB

BIN
fonts/h5p-core-28.ttf Normal file

Binary file not shown.

BIN
fonts/h5p-core-28.woff Normal file

Binary file not shown.

BIN
fonts/h5p-hub-publish.eot Normal file

Binary file not shown.

38
fonts/h5p-hub-publish.svg Normal file
View File

@ -0,0 +1,38 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<svg xmlns="http://www.w3.org/2000/svg">
<metadata>
<json>
<![CDATA[
{
"fontFamily": "h5p-hub",
"description": "Font generated by IcoMoon.",
"majorVersion": 1,
"minorVersion": 3,
"version": "Version 1.3",
"fontId": "h5p-hub",
"psName": "h5p-hub",
"subFamily": "Regular",
"fullName": "h5p-hub"
}
]]>
</json>
</metadata>
<defs>
<font id="h5p-hub" horiz-adv-x="1024">
<font-face units-per-em="1024" ascent="960" descent="-64" />
<missing-glyph horiz-adv-x="1024" />
<glyph unicode="&#x20;" horiz-adv-x="512" d="" />
<glyph unicode="&#xe900;" glyph-name="dropdown" data-tags="dropdown" d="M1004.654 717.002c-11.526 11.526-27.853 19.209-45.142 19.209h-895.161c-35.538 0-63.391-27.853-64.352-63.391 0-17.289 6.724-33.616 19.209-46.103l447.582-447.582c24.013-24.972 63.391-25.933 88.363-1.92 0.961 0.961 0.961 0.961 1.92 1.92l447.582 447.582c24.972 24.013 25.933 63.391 1.92 88.363-0.961 0.961-0.961 0.961-1.92 1.92z" />
<glyph unicode="&#xe901;" glyph-name="info" data-tags="info" d="M745.14 76.307c-0.699 25.827-20.941 46.069-46.768 46.768h-46.069v418.813c-1.395 25.827-21.639 46.069-46.768 46.069h-279.209c-25.827 0-46.768-20.941-47.465-46.768v-92.837c0.699-25.827 20.941-46.069 46.768-46.768h46.768v-279.209h-46.069c-25.827-0.699-46.069-20.941-46.768-46.768v-92.837c0.699-25.827 20.941-46.069 46.768-46.768h372.045c25.827 0.699 46.069 20.941 46.768 46.768v93.534zM638.343 946.041c-8.376 9.075-20.242 13.96-32.806 13.96h-185.673c-25.827-0.699-46.069-20.941-46.768-46.768v-139.604c0.699-25.827 20.941-46.069 46.768-46.768h186.372c25.129 1.395 45.371 21.639 46.069 46.768v139.604c0 12.564-5.584 24.43-13.96 32.806z" />
<glyph unicode="&#xe902;" glyph-name="thick-arrow" data-tags="thick-arrow" d="M997.162 446.653c0.634 22.167-8.234 44.336-24.701 59.537l-428.789 428.789c-32.302 32.936-85.505 33.568-118.44 0.634 0 0-0.634-0.634-0.634-0.634l-49.403-49.403c-32.936-32.302-32.936-84.871-1.266-117.806 0.634-0.634 0.634-0.634 1.266-1.266l192.544-193.81h-463.625c-21.535 0.634-41.802-8.234-55.737-24.701-14.567-16.467-22.167-38.002-21.535-59.537v-84.238c-0.634-21.535 6.967-43.068 21.535-59.537 13.935-16.467 34.202-25.335 55.737-24.701h464.259l-193.81-190.644c-32.936-32.936-33.568-86.138-0.634-119.073 0 0 0.634-0.634 0.634-0.634l49.403-49.403c32.936-32.302 86.138-32.302 119.073 0l429.423 429.423c15.201 15.201 24.067 35.468 24.701 57.003v0z" />
<glyph unicode="&#xe903;" glyph-name="check" data-tags="check" d="M1021.469 686.541c0 17.084-6.328 32.903-18.349 44.924l-89.849 89.215c-24.677 24.677-64.539 24.677-89.215 0.633 0 0 0 0-0.633-0.633l-432.156-432.79-193.616 194.25c-24.677 24.677-64.539 24.677-89.215 0.633 0 0 0 0-0.633-0.633l-89.215-89.215c-24.677-24.677-24.677-64.539-0.633-89.215 0 0 0 0 0.633-0.633l327.755-327.755c24.677-24.677 64.539-24.677 89.215-0.633 0 0 0 0 0.633 0.633l569.46 569.46c12.022 12.022 18.349 27.84 18.349 44.924v0l-2.531-3.163z" />
<glyph unicode="&#xe904;" glyph-name="close" data-tags="close" d="M1024 856.869l-103.131 103.131-408.869-408.869-408.869 408.869-103.131-103.131 408.869-408.869-408.869-408.869 103.131-103.131 408.869 408.869 408.869-408.869 103.131 103.131-408.869 408.869z" />
<glyph unicode="&#xe905;" glyph-name="plus" data-tags="plus" d="M597.333 533.333v426.667h-170.667v-426.667h-426.667v-170.667h426.667v-426.667h170.667v426.667h426.667v170.667z" />
<glyph unicode="&#xe906;" glyph-name="filters" data-tags="filters" d="M217.543 834.589v98.249c0 14.999-12.163 27.162-27.162 27.162h-8.785c-14.999 0-27.162-12.163-27.162-27.162v-98.249c-63.792-14.19-110.78-70.3-110.78-137.38s46.988-123.189 109.844-137.208l0.936-592.841c0-14.999 12.163-27.162 27.162-27.162h7.99c14.999 0 27.162 12.163 27.162 27.162v588.669c69.551 9.191 122.666 68.109 122.666 139.435 0 71.041-52.699 129.772-121.13 139.246zM549.82 417.644v515.184c0 14.999-12.163 27.162-27.162 27.162h-4.796c-14.999 0-27.162-12.163-27.162-27.162v-513.593c-71.358-12.114-125.020-73.469-125.020-147.364s53.662-135.26 124.145-147.242l0.884-159.869c0-14.999 12.163-27.162 27.162-27.162h4.796c14.999 0 27.162 12.163 27.162 27.162v159.745c67.325 15.43 116.8 74.826 116.8 145.772s-49.464 130.342-115.794 145.579zM980.345 594.96c-0.075 69.212-51.022 126.499-117.453 136.489l-0.764 201.379c0 14.999-12.163 27.162-27.162 27.162h-6.387c-14.999 0-27.162-12.163-27.162-27.162v-205.273c-58.17-16.849-99.977-69.642-99.977-132.191s41.807-115.342 99-131.95l0.967-500.252c0-14.999 12.163-27.162 27.162-27.162h4.796c14.999 0 27.162 12.163 27.162 27.162v496.022c67.608 9.329 119.206 66.436 119.809 135.722z" />
<glyph unicode="&#xe907;" glyph-name="arrow-line" data-tags="arrow-line" d="M995.878 700.739l-43.703 43.703c-17.591 16.506-41.326 26.645-67.432 26.645s-49.837-10.139-67.483-26.693l-303.387-303.389-305.935 304.692c-17.468 16.781-41.244 27.116-67.432 27.116s-49.958-10.335-67.464-27.148l-44.92-44.92c-17.371-17.206-28.122-41.062-28.122-67.432s10.752-50.226 28.112-67.421l414.583-414.583c17.206-17.371 41.062-28.122 67.432-28.122s50.226 10.752 67.421 28.112l418.329 414.583c17.371 17.206 28.122 41.062 28.122 67.432s-10.752 50.226-28.112 67.421z" />
<glyph unicode="&#xe908;" glyph-name="check-empty" data-tags="check-empty" d="M910.2 846.2v-796.4h-796.4v796.4h796.4zM910.2 960h-796.4c-62.6 0-113.8-51.2-113.8-113.8v-796.4c0-62.6 51.2-113.8 113.8-113.8h796.4c62.6 0 113.8 51.2 113.8 113.8v796.4c0 62.6-51.2 113.8-113.8 113.8z" />
<glyph unicode="&#xe909;" glyph-name="check1" data-tags="check" d="M910.2 960h-796.4c-62.6 0-113.8-51.2-113.8-113.8v-796.4c0-62.6 51.2-113.8 113.8-113.8h796.4c62.6 0 113.8 51.2 113.8 113.8v796.4c0 62.6-51.2 113.8-113.8 113.8zM398.2 163.6l-284.4 284.4 79.6 79.6 204.8-204.8 432.4 432.4 79.6-79.6-512-512z" />
<glyph unicode="&#xe90a;" glyph-name="details-arrow" data-tags="details-arrow" d="M512 960.001l-90.24-90.24 357.12-357.76h-778.879v-127.999h778.879l-357.12-357.76 90.24-90.24 511.999 511.999z" />
<glyph unicode="&#xe90b;" glyph-name="Spinner" data-tags="Spinner" d="M1023.953 448.071c1.137 83.016-18.195 164.895-56.861 238.814-75.625 145.563-216.069 245.637-378.121 270.087v-135.328c85.291-16.489 162.621-63.115 217.207-130.779 89.839-108.035 112.015-257.578 56.861-387.219-38.097-91.545-110.309-163.758-201.855-201.855-93.82-40.37-200.149-40.37-293.969 0-91.545 38.097-163.758 110.309-201.855 201.855-55.155 129.642-32.979 279.184 56.861 387.219 54.586 67.663 131.917 114.289 217.207 130.779v135.328c-163.758-22.745-305.91-123.388-382.102-270.087-69.938-135.328-76.193-294.537-17.058-434.982 51.174-123.388 149.542-221.756 272.93-272.361 127.367-54.017 270.655-54.017 398.023 0 122.819 51.174 220.619 148.975 271.793 271.793 26.724 61.978 40.37 129.073 40.94 196.738v0z" />
</font></defs></svg>

After

Width:  |  Height:  |  Size: 6.6 KiB

BIN
fonts/h5p-hub-publish.ttf Normal file

Binary file not shown.

BIN
fonts/h5p-hub-publish.woff Normal file

Binary file not shown.

View File

@ -16,17 +16,20 @@
* @license MIT
*/
class H5PDefaultStorage implements \H5PFileStorage {
private $path;
private $path, $alteditorpath;
/**
* The great Constructor!
*
* @param string $path
* The base location of H5P files
* @param string $alteditorpath
* Optional. Use a different editor path
*/
function __construct($path) {
function __construct($path, $alteditorpath = NULL) {
// Set H5P storage path
$this->path = $path;
$this->alteditorpath = $alteditorpath;
}
/**
@ -50,11 +53,11 @@ class H5PDefaultStorage implements \H5PFileStorage {
*
* @param string $source
* Path on file system to content directory.
* @param int $id
* What makes this content unique.
* @param array $content
* Content properties
*/
public function saveContent($source, $id) {
$dest = "{$this->path}/content/{$id}";
public function saveContent($source, $content) {
$dest = "{$this->path}/content/{$content['id']}";
// Remove any old content
\H5PCore::deleteFileTree($dest);
@ -65,11 +68,11 @@ class H5PDefaultStorage implements \H5PFileStorage {
/**
* Remove content folder.
*
* @param int $id
* Content identifier
* @param array $content
* Content properties
*/
public function deleteContent($id) {
\H5PCore::deleteFileTree("{$this->path}/content/{$id}");
public function deleteContent($content) {
\H5PCore::deleteFileTree("{$this->path}/content/{$content['id']}");
}
/**
@ -82,8 +85,10 @@ class H5PDefaultStorage implements \H5PFileStorage {
*/
public function cloneContent($id, $newId) {
$path = $this->path . '/content/';
if (file_exists($path . $id)) {
self::copyFileTree($path . $id, $path . $newId);
}
}
/**
* Get path to a new unique tmp folder.
@ -106,7 +111,15 @@ class H5PDefaultStorage implements \H5PFileStorage {
* Where the content folder will be saved
*/
public function exportContent($id, $target) {
self::copyFileTree("{$this->path}/content/{$id}", $target);
$source = "{$this->path}/content/{$id}";
if (file_exists($source)) {
// Copy content folder if it exists
self::copyFileTree($source, $target);
}
else {
// No contnet folder, create emty dir for content.json
self::dirReady($target);
}
}
/**
@ -132,11 +145,18 @@ class H5PDefaultStorage implements \H5PFileStorage {
* Path on file system to temporary export file.
* @param string $filename
* Name of export file.
* @throws Exception Unable to save the file
*/
public function saveExport($source, $filename) {
$this->deleteExport($filename);
self::dirReady("{$this->path}/exports");
copy($source, "{$this->path}/exports/{$filename}");
if (!self::dirReady("{$this->path}/exports")) {
throw new Exception("Unable to create directory for H5P export file.");
}
if (!copy($source, "{$this->path}/exports/{$filename}")) {
throw new Exception("Unable to save H5P export file.");
}
}
/**
@ -151,6 +171,17 @@ class H5PDefaultStorage implements \H5PFileStorage {
}
}
/**
* Check if the given export file exists
*
* @param string $filename
* @return boolean
*/
public function hasExport($filename) {
$target = "{$this->path}/exports/{$filename}";
return file_exists($target);
}
/**
* Will concatenate all JavaScrips and Stylesheets into two files in order
* to improve page performance.
@ -247,6 +278,216 @@ class H5PDefaultStorage implements \H5PFileStorage {
}
}
/**
* Read file content of given file and then return it.
*
* @param string $file_path
* @return string
*/
public function getContent($file_path) {
return file_get_contents($file_path);
}
/**
* Save files uploaded through the editor.
* The files must be marked as temporary until the content form is saved.
*
* @param \H5peditorFile $file
* @param int $contentid
*/
public function saveFile($file, $contentId) {
// Prepare directory
if (empty($contentId)) {
// Should be in editor tmp folder
$path = $this->getEditorPath();
}
else {
// Should be in content folder
$path = $this->path . '/content/' . $contentId;
}
$path .= '/' . $file->getType() . 's';
self::dirReady($path);
// Add filename to path
$path .= '/' . $file->getName();
copy($_FILES['file']['tmp_name'], $path);
return $file;
}
/**
* Copy a file from another content or editor tmp dir.
* Used when copy pasting content in H5P Editor.
*
* @param string $file path + name
* @param string|int $fromid Content ID or 'editor' string
* @param int $toid Target Content ID
*/
public function cloneContentFile($file, $fromId, $toId) {
// Determine source path
if ($fromId === 'editor') {
$sourcepath = $this->getEditorPath();
}
else {
$sourcepath = "{$this->path}/content/{$fromId}";
}
$sourcepath .= '/' . $file;
// Determine target path
$filename = basename($file);
$filedir = str_replace($filename, '', $file);
$targetpath = "{$this->path}/content/{$toId}/{$filedir}";
// Make sure it's ready
self::dirReady($targetpath);
$targetpath .= $filename;
// Check to see if source exist and if target doesn't
if (!file_exists($sourcepath) || file_exists($targetpath)) {
return; // Nothing to copy from or target already exists
}
copy($sourcepath, $targetpath);
}
/**
* Copy a content from one directory to another. Defaults to cloning
* content from the current temporary upload folder to the editor path.
*
* @param string $source path to source directory
* @param string $contentId Id of contentarray
*/
public function moveContentDirectory($source, $contentId = NULL) {
if ($source === NULL) {
return NULL;
}
// TODO: Remove $contentId and never copy temporary files into content folder. JI-366
if ($contentId === NULL || $contentId == 0) {
$target = $this->getEditorPath();
}
else {
// Use content folder
$target = "{$this->path}/content/{$contentId}";
}
$contentSource = $source . '/' . 'content';
$contentFiles = array_diff(scandir($contentSource), array('.','..', 'content.json'));
foreach ($contentFiles as $file) {
if (is_dir("{$contentSource}/{$file}")) {
self::copyFileTree("{$contentSource}/{$file}", "{$target}/{$file}");
}
else {
copy("{$contentSource}/{$file}", "{$target}/{$file}");
}
}
// TODO: Return list of all files so that they can be marked as temporary. JI-366
}
/**
* Checks to see if content has the given file.
* Used when saving content.
*
* @param string $file path + name
* @param int $contentId
* @return string File ID or NULL if not found
*/
public function getContentFile($file, $contentId) {
$path = "{$this->path}/content/{$contentId}/{$file}";
return file_exists($path) ? $path : NULL;
}
/**
* Checks to see if content has the given file.
* Used when saving content.
*
* @param string $file path + name
* @param int $contentid
* @return string|int File ID or NULL if not found
*/
public function removeContentFile($file, $contentId) {
$path = "{$this->path}/content/{$contentId}/{$file}";
if (file_exists($path)) {
unlink($path);
// Clean up any empty parent directories to avoid cluttering the file system
$parts = explode('/', $path);
while (array_pop($parts) !== NULL) {
$dir = implode('/', $parts);
if (is_dir($dir) && count(scandir($dir)) === 2) { // empty contains '.' and '..'
rmdir($dir); // Remove empty parent
}
else {
return; // Not empty
}
}
}
}
/**
* Check if server setup has write permission to
* the required folders
*
* @return bool True if site can write to the H5P files folder
*/
public function hasWriteAccess() {
return self::dirReady($this->path);
}
/**
* Check if the file presave.js exists in the root of the library
*
* @param string $libraryFolder
* @param string $developmentPath
* @return bool
*/
public function hasPresave($libraryFolder, $developmentPath = null) {
$path = is_null($developmentPath) ? 'libraries' . '/' . $libraryFolder : $developmentPath;
$filePath = realpath($this->path . '/' . $path . '/' . 'presave.js');
return file_exists($filePath);
}
/**
* Check if upgrades script exist for library.
*
* @param string $machineName
* @param int $majorVersion
* @param int $minorVersion
* @return string Relative path
*/
public function getUpgradeScript($machineName, $majorVersion, $minorVersion) {
$upgrades = "/libraries/{$machineName}-{$majorVersion}.{$minorVersion}/upgrades.js";
if (file_exists($this->path . $upgrades)) {
return $upgrades;
}
else {
return NULL;
}
}
/**
* Store the given stream into the given file.
*
* @param string $path
* @param string $file
* @param resource $stream
* @return bool
*/
public function saveFileFromZip($path, $file, $stream) {
$filePath = $path . '/' . $file;
// Make sure the directory exists first
$matches = array();
preg_match('/(.+)\/[^\/]*$/', $filePath, $matches);
self::dirReady($matches[1]);
// Store in local storage folder
return file_put_contents($filePath, $stream);
}
/**
* Recursive function for copying directories.
*
@ -264,6 +505,8 @@ class H5PDefaultStorage implements \H5PFileStorage {
throw new \Exception('unabletocopy');
}
$ignoredFiles = self::getIgnoredFiles("{$source}/.h5pignore");
$dir = opendir($source);
if ($dir === FALSE) {
trigger_error('Unable to open directory ' . $source, E_USER_WARNING);
@ -271,7 +514,7 @@ class H5PDefaultStorage implements \H5PFileStorage {
}
while (false !== ($file = readdir($dir))) {
if (($file != '.') && ($file != '..') && $file != '.git' && $file != '.gitignore') {
if (($file != '.') && ($file != '..') && $file != '.git' && $file != '.gitignore' && !in_array($file, $ignoredFiles)) {
if (is_dir("{$source}/{$file}")) {
self::copyFileTree("{$source}/{$file}", "{$destination}/{$file}");
}
@ -283,17 +526,33 @@ class H5PDefaultStorage implements \H5PFileStorage {
closedir($dir);
}
/**
* Retrieve array of file names from file.
*
* @param string $file
* @return array Array with files that should be ignored
*/
private static function getIgnoredFiles($file) {
if (file_exists($file) === FALSE) {
return array();
}
$contents = file_get_contents($file);
if ($contents === FALSE) {
return array();
}
return preg_split('/\s+/', $contents);
}
/**
* Recursive function that makes sure the specified directory exists and
* is writable.
*
* TODO: Will be made private when the editor file handling is done by this
* class!
*
* @param string $path
* @return bool
*/
public static function dirReady($path) {
private static function dirReady($path) {
if (!file_exists($path)) {
$parent = preg_replace("/\/[^\/]+\/?$/", '', $path);
if (!self::dirReady($parent)) {
@ -315,4 +574,13 @@ class H5PDefaultStorage implements \H5PFileStorage {
return TRUE;
}
/**
* Easy helper function for retrieving the editor path
*
* @return string Path to editor files
*/
private function getEditorPath() {
return ($this->alteditorpath !== NULL ? $this->alteditorpath : "{$this->path}/editor");
}
}

View File

@ -67,7 +67,7 @@ class H5PDevelopment {
$contents = scandir($path);
for ($i = 0, $s = count($contents); $i < $s; $i++) {
if ($contents[$i]{0} === '.') {
if ($contents[$i][0] === '.') {
continue; // Skip hidden stuff.
}
@ -78,16 +78,25 @@ class H5PDevelopment {
}
$library = json_decode($libraryJSON, TRUE);
if ($library === FALSE) {
if ($library === NULL) {
continue; // Invalid JSON.
}
// TODO: Validate props? Not really needed, is it? this is a dev site.
// Save/update library.
$library['libraryId'] = $this->h5pF->getLibraryId($library['machineName'], $library['majorVersion'], $library['minorVersion']);
// Convert metadataSettings values to boolean & json_encode it before saving
$library['metadataSettings'] = isset($library['metadataSettings']) ?
H5PMetadata::boolifyAndEncodeSettings($library['metadataSettings']) :
NULL;
// Save/update library.
$this->h5pF->saveLibraryData($library, $library['libraryId'] === FALSE);
// Need to decode it again, since it is served from here.
$library['metadataSettings'] = json_decode($library['metadataSettings']);
$library['path'] = 'development/' . $contents[$i];
$this->libraries[H5PDevelopment::libraryToString($library['machineName'], $library['majorVersion'], $library['minorVersion'])] = $library;
}

View File

@ -22,18 +22,18 @@ interface H5PFileStorage {
*
* @param string $source
* Path on file system to content directory.
* @param int $id
* What makes this content unique.
* @param array $content
* Content properties
*/
public function saveContent($source, $id);
public function saveContent($source, $content);
/**
* Remove content folder.
*
* @param int $id
* Content identifier
* @param array $content
* Content properties
*/
public function deleteContent($id);
public function deleteContent($content);
/**
* Creates a stored copy of the content folder.
@ -90,6 +90,14 @@ interface H5PFileStorage {
*/
public function deleteExport($filename);
/**
* Check if the given export file exists
*
* @param string $filename
* @return boolean
*/
public function hasExport($filename);
/**
* Will concatenate all JavaScrips and Stylesheets into two files in order
* to improve page performance.
@ -117,4 +125,98 @@ interface H5PFileStorage {
* The hash keys of removed files
*/
public function deleteCachedAssets($keys);
/**
* Read file content of given file and then return it.
*
* @param string $file_path
* @return string contents
*/
public function getContent($file_path);
/**
* Save files uploaded through the editor.
* The files must be marked as temporary until the content form is saved.
*
* @param \H5peditorFile $file
* @param int $contentId
*/
public function saveFile($file, $contentId);
/**
* Copy a file from another content or editor tmp dir.
* Used when copy pasting content in H5P.
*
* @param string $file path + name
* @param string|int $fromId Content ID or 'editor' string
* @param int $toId Target Content ID
*/
public function cloneContentFile($file, $fromId, $toId);
/**
* Copy a content from one directory to another. Defaults to cloning
* content from the current temporary upload folder to the editor path.
*
* @param string $source path to source directory
* @param string $contentId Id of content
*
* @return object Object containing h5p json and content json data
*/
public function moveContentDirectory($source, $contentId = NULL);
/**
* Checks to see if content has the given file.
* Used when saving content.
*
* @param string $file path + name
* @param int $contentId
* @return string|int File ID or NULL if not found
*/
public function getContentFile($file, $contentId);
/**
* Remove content files that are no longer used.
* Used when saving content.
*
* @param string $file path + name
* @param int $contentId
*/
public function removeContentFile($file, $contentId);
/**
* Check if server setup has write permission to
* the required folders
*
* @return bool True if server has the proper write access
*/
public function hasWriteAccess();
/**
* Check if the library has a presave.js in the root folder
*
* @param string $libraryName
* @param string $developmentPath
* @return bool
*/
public function hasPresave($libraryName, $developmentPath = null);
/**
* Check if upgrades script exist for library.
*
* @param string $machineName
* @param int $majorVersion
* @param int $minorVersion
* @return string Relative path
*/
public function getUpgradeScript($machineName, $majorVersion, $minorVersion);
/**
* Store the given stream into the given file.
*
* @param string $path
* @param string $file
* @param resource $stream
* @return bool
*/
public function saveFileFromZip($path, $file, $stream);
}

156
h5p-metadata.class.php Normal file
View File

@ -0,0 +1,156 @@
<?php
/**
* Utility class for handling metadata
*/
abstract class H5PMetadata {
private static $fields = array(
'title' => array(
'type' => 'text',
'maxLength' => 255
),
'a11yTitle' => array(
'type' => 'text',
'maxLength' => 255,
),
'authors' => array(
'type' => 'json'
),
'changes' => array(
'type' => 'json'
),
'source' => array(
'type' => 'text',
'maxLength' => 255
),
'license' => array(
'type' => 'text',
'maxLength' => 32
),
'licenseVersion' => array(
'type' => 'text',
'maxLength' => 10
),
'licenseExtras' => array(
'type' => 'text',
'maxLength' => 5000
),
'authorComments' => array(
'type' => 'text',
'maxLength' => 5000
),
'yearFrom' => array(
'type' => 'int'
),
'yearTo' => array(
'type' => 'int'
),
'defaultLanguage' => array(
'type' => 'text',
'maxLength' => 32,
)
);
/**
* JSON encode metadata
*
* @param object $content
* @return string
*/
public static function toJSON($content) {
// Note: deliberatly creating JSON string "manually" to improve performance
return
'{"title":' . (isset($content->title) ? json_encode($content->title) : 'null') .
',"a11yTitle":' . (isset($content->a11y_title) ? $content->a11y_title : 'null') .
',"authors":' . (isset($content->authors) ? $content->authors : 'null') .
',"source":' . (isset($content->source) ? '"' . $content->source . '"' : 'null') .
',"license":' . (isset($content->license) ? '"' . $content->license . '"' : 'null') .
',"licenseVersion":' . (isset($content->license_version) ? '"' . $content->license_version . '"' : 'null') .
',"licenseExtras":' . (isset($content->license_extras) ? json_encode($content->license_extras) : 'null') .
',"yearFrom":' . (isset($content->year_from) ? $content->year_from : 'null') .
',"yearTo":' . (isset($content->year_to) ? $content->year_to : 'null') .
',"changes":' . (isset($content->changes) ? $content->changes : 'null') .
',"defaultLanguage":' . (isset($content->default_language) ? '"' . $content->default_language . '"' : 'null') .
',"authorComments":' . (isset($content->author_comments) ? json_encode($content->author_comments) : 'null') . '}';
}
/**
* Make the metadata into an associative array keyed by the property names
* @param mixed $metadata Array or object containing metadata
* @param bool $include_title
* @param bool $include_missing For metadata fields not being set, skip 'em.
* Relevant for content upgrade
* @param array $types
* @return array
*/
public static function toDBArray($metadata, $include_title = true, $include_missing = true, &$types = array()) {
$fields = array();
if (!is_array($metadata)) {
$metadata = (array) $metadata;
}
foreach (self::$fields as $key => $config) {
// Ignore title?
if ($key === 'title' && !$include_title) {
continue;
}
$exists = array_key_exists($key, $metadata);
// Don't include missing fields
if (!$include_missing && !$exists) {
continue;
}
$value = $exists ? $metadata[$key] : null;
// lowerCamelCase to snake_case
$db_field_name = strtolower(preg_replace('/(?<!^)[A-Z]/', '_$0', $key));
switch ($config['type']) {
case 'text':
if ($value !== null && strlen($value) > $config['maxLength']) {
$value = mb_substr($value, 0, $config['maxLength']);
}
$types[] = '%s';
break;
case 'int':
$value = ($value !== null) ? intval($value) : null;
$types[] = '%d';
break;
case 'json':
$value = ($value !== null) ? json_encode($value) : null;
$types[] = '%s';
break;
}
$fields[$db_field_name] = $value;
}
return $fields;
}
/**
* The metadataSettings field in libraryJson uses 1 for true and 0 for false.
* Here we are converting these to booleans, and also doing JSON encoding.
* This is invoked before the library data is beeing inserted/updated to DB.
*
* @param array $metadataSettings
* @return string
*/
public static function boolifyAndEncodeSettings($metadataSettings) {
// Convert metadataSettings values to boolean
if (isset($metadataSettings['disable'])) {
$metadataSettings['disable'] = $metadataSettings['disable'] === 1;
}
if (isset($metadataSettings['disableExtraTitleField'])) {
$metadataSettings['disableExtraTitleField'] = $metadataSettings['disableExtraTitleField'] === 1;
}
return json_encode($metadataSettings);
}
}

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

View File

@ -1,26 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 17.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="36px" height="36px" viewBox="0 0 36 36" enable-background="new 0 0 36 36" xml:space="preserve">
<g>
<path fill="#FFFFFF" d="M0.126,13.306h3.07l0.365,3.476h3.354L6.55,13.306h3.083l1.044,9.934H7.594l-0.422-4.018H3.818L4.24,23.24
H1.17L0.126,13.306z"/>
<path fill="#FFFFFF" d="M27.738,13.306h5.103c1.111,0,1.916,0.264,2.414,0.793c0.498,0.529,0.696,1.281,0.593,2.257
c-0.105,1.003-0.489,1.787-1.152,2.351c-0.662,0.565-1.613,0.847-2.85,0.847h-1.681l-0.387,3.686h-3.083L27.738,13.306z
M30.376,17.541h0.752c0.592,0,1.018-0.103,1.279-0.308c0.261-0.205,0.408-0.469,0.442-0.789c0.033-0.312-0.043-0.576-0.228-0.793
c-0.185-0.217-0.564-0.325-1.138-0.325h-0.874L30.376,17.541z"/>
<g>
<polygon fill="#E24E26" points="12.431,25.515 11.035,9.851 26.38,9.851 24.982,25.512 18.698,27.254 "/>
<polygon fill="#F06529" points="18.707,25.923 23.785,24.515 24.98,11.132 18.707,11.132 "/>
<polygon fill="#EAEAEA" points="18.707,16.941 16.165,16.941 15.99,14.974 18.707,14.974 18.707,13.053 18.701,13.053
13.89,13.053 13.936,13.568 14.408,18.862 18.707,18.862 "/>
<polygon fill="#EAEAEA" points="18.707,21.93 18.699,21.933 16.56,21.355 16.423,19.823 15.383,19.823 14.494,19.823
14.763,22.839 18.699,23.932 18.707,23.929 "/>
<polygon fill="#FFFFFF" points="18.701,16.941 18.701,18.862 21.066,18.862 20.843,21.354 18.701,21.932 18.701,23.931
22.639,22.839 22.668,22.514 23.119,17.457 23.166,16.941 22.649,16.941 "/>
<polygon fill="#FFFFFF" points="18.701,13.053 18.701,14.246 18.701,14.969 18.701,14.974 23.335,14.974 23.335,14.974
23.341,14.974 23.38,14.542 23.467,13.568 23.513,13.053 "/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@ -1,19 +0,0 @@
(function ($) {
$(document).ready(function () {
var $inputs = $('.h5p-action-bar-settings input');
var $frame = $inputs.filter('input[name="frame"], input[name="h5p_frame"]');
var $others = $inputs.filter(':not(input[name="frame"], input[name="h5p_frame"])');
var toggle = function () {
if ($frame.is(':checked')) {
$others.attr('disabled', false);
}
else {
$others.attr('disabled', true);
}
};
$frame.change(toggle);
toggle();
});
})(H5P.jQuery);

100
js/h5p-action-bar.js Normal file
View File

@ -0,0 +1,100 @@
/**
* @class
* @augments H5P.EventDispatcher
* @param {Object} displayOptions
* @param {boolean} displayOptions.export Triggers the display of the 'Download' button
* @param {boolean} displayOptions.copyright Triggers the display of the 'Copyright' button
* @param {boolean} displayOptions.embed Triggers the display of the 'Embed' button
* @param {boolean} displayOptions.icon Triggers the display of the 'H5P icon' link
*/
H5P.ActionBar = (function ($, EventDispatcher) {
"use strict";
function ActionBar(displayOptions) {
EventDispatcher.call(this);
/** @alias H5P.ActionBar# */
var self = this;
var hasActions = false;
// Create action bar
var $actions = H5P.jQuery('<ul class="h5p-actions"></ul>');
/**
* Helper for creating action bar buttons.
*
* @private
* @param {string} type
* @param {string} customClass Instead of type class
*/
var addActionButton = function (type, customClass) {
/**
* Handles selection of action
*/
var handler = function () {
self.trigger(type);
};
H5P.jQuery('<li/>', {
'class': 'h5p-button h5p-noselect h5p-' + (customClass ? customClass : type),
role: 'button',
tabindex: 0,
title: H5P.t(type + 'Description'),
html: H5P.t(type),
on: {
click: handler,
keypress: function (e) {
if (e.which === 32) {
handler();
e.preventDefault(); // (since return false will block other inputs)
}
}
},
appendTo: $actions
});
hasActions = true;
};
// Register action bar buttons
if (displayOptions.export || displayOptions.copy) {
// Add export button
addActionButton('reuse', 'export');
}
if (displayOptions.copyright) {
addActionButton('copyrights');
}
if (displayOptions.embed) {
addActionButton('embed');
}
if (displayOptions.icon) {
// Add about H5P button icon
H5P.jQuery('<li><a class="h5p-link" href="http://h5p.org" target="_blank" title="' + H5P.t('h5pDescription') + '"></a></li>').appendTo($actions);
hasActions = true;
}
/**
* Returns a reference to the dom element
*
* @return {H5P.jQuery}
*/
self.getDOMElement = function () {
return $actions;
};
/**
* Does the actionbar contain actions?
*
* @return {Boolean}
*/
self.hasActions = function () {
return hasActions;
};
}
ActionBar.prototype = Object.create(EventDispatcher.prototype);
ActionBar.prototype.constructor = ActionBar;
return ActionBar;
})(H5P.jQuery, H5P.EventDispatcher);

View File

@ -11,12 +11,20 @@ H5P.ConfirmationDialog = (function (EventDispatcher) {
* @param [options.dialogText] Dialog text
* @param [options.cancelText] Cancel dialog button text
* @param [options.confirmText] Confirm dialog button text
* @param [options.hideCancel] Hide cancel button
* @param [options.hideExit] Hide exit button
* @param [options.skipRestoreFocus] Skip restoring focus when hiding the dialog
* @param [options.classes] Extra classes for popup
* @constructor
*/
function ConfirmationDialog(options) {
EventDispatcher.call(this);
var self = this;
// Make sure confirmation dialogs have unique id
H5P.ConfirmationDialog.uniqueId += 1;
var uniqueId = H5P.ConfirmationDialog.uniqueId;
// Default options
options = options || {};
options.headerText = options.headerText || H5P.t('confirmDialogHeader');
@ -44,6 +52,16 @@ H5P.ConfirmationDialog = (function (EventDispatcher) {
e.preventDefault();
}
/**
* Flow focus to element
* @param {HTMLElement} element Next element to be focused
* @param {Event} e Original tab event
*/
function flowTo(element, e) {
element.focus();
e.preventDefault();
}
// Offset of exit button
var exitButtonOffset = 2 * 16;
var shadowOffset = 8;
@ -59,7 +77,21 @@ H5P.ConfirmationDialog = (function (EventDispatcher) {
// Create outer popup
var popup = document.createElement('div');
popup.classList.add('h5p-confirmation-dialog-popup', 'hidden');
if (options.classes) {
options.classes.forEach(function (popupClass) {
popup.classList.add(popupClass);
});
}
popup.setAttribute('role', 'dialog');
popup.setAttribute('aria-labelledby', 'h5p-confirmation-dialog-dialog-text-' + uniqueId);
popupBackground.appendChild(popup);
popup.addEventListener('keydown', function (e) {
if (e.which === 27) {// Esc key
// Exit dialog
dialogCanceled(e);
}
});
// Popup header
var header = document.createElement('div');
@ -81,6 +113,7 @@ H5P.ConfirmationDialog = (function (EventDispatcher) {
var text = document.createElement('div');
text.classList.add('h5p-confirmation-dialog-text');
text.innerHTML = options.dialogText;
text.id = 'h5p-confirmation-dialog-dialog-text-' + uniqueId;
body.appendChild(text);
// Popup buttons
@ -92,41 +125,76 @@ H5P.ConfirmationDialog = (function (EventDispatcher) {
var cancelButton = document.createElement('button');
cancelButton.classList.add('h5p-core-cancel-button');
cancelButton.textContent = options.cancelText;
cancelButton.onclick = dialogCanceled;
cancelButton.onkeydown = function (e) {
if (e.which === 32) { // Space
dialogCanceled(e);
}
};
buttons.appendChild(cancelButton);
// Confirm button
var confirmButton = document.createElement('button');
confirmButton.classList.add('h5p-core-button',
'h5p-confirmation-dialog-confirm-button');
confirmButton.classList.add('h5p-core-button');
confirmButton.classList.add('h5p-confirmation-dialog-confirm-button');
confirmButton.textContent = options.confirmText;
confirmButton.onclick = dialogConfirmed;
confirmButton.onkeydown = function (e) {
if (e.which === 32) { // Space
dialogConfirmed(e);
}
};
buttons.appendChild(confirmButton);
// Exit button
var exitButton = document.createElement('button');
exitButton.classList.add('h5p-confirmation-dialog-exit');
exitButton.onclick = dialogCanceled;
exitButton.onkeydown = function (e) {
exitButton.setAttribute('aria-hidden', 'true');
exitButton.tabIndex = -1;
exitButton.title = options.cancelText;
// Cancel handler
cancelButton.addEventListener('click', dialogCanceled);
cancelButton.addEventListener('keydown', function (e) {
if (e.which === 32) { // Space
dialogCanceled(e);
}
};
else if (e.which === 9 && e.shiftKey) { // Shift-tab
flowTo(confirmButton, e);
}
});
if (!options.hideCancel) {
buttons.appendChild(cancelButton);
}
else {
// Center buttons
buttons.classList.add('center');
}
// Confirm handler
confirmButton.addEventListener('click', dialogConfirmed);
confirmButton.addEventListener('keydown', function (e) {
if (e.which === 32) { // Space
dialogConfirmed(e);
}
else if (e.which === 9 && !e.shiftKey) { // Tab
const nextButton = !options.hideCancel ? cancelButton : confirmButton;
flowTo(nextButton, e);
}
});
buttons.appendChild(confirmButton);
// Exit handler
exitButton.addEventListener('click', dialogCanceled);
exitButton.addEventListener('keydown', function (e) {
if (e.which === 32) { // Space
dialogCanceled(e);
}
});
if (!options.hideExit) {
popup.appendChild(exitButton);
}
// Wrapper element
var wrapperElement;
// Focus capturing
var focusPredator;
// Maintains hidden state of elements
var wrapperSiblingsHidden = [];
var popupSiblingsHidden = [];
// Element with focus before dialog
var previouslyFocused;
/**
* Set parent of confirmation dialog
* @param {HTMLElement} wrapper
@ -137,16 +205,101 @@ H5P.ConfirmationDialog = (function (EventDispatcher) {
return this;
};
/**
* Capture the focus element, send it to confirmation button
* @param {Event} e Original focus event
*/
var captureFocus = function (e) {
if (!popupBackground.contains(e.target)) {
e.preventDefault();
confirmButton.focus();
}
};
/**
* Hide siblings of element from assistive technology
*
* @param {HTMLElement} element
* @returns {Array} The previous hidden state of all siblings
*/
var hideSiblings = function (element) {
var hiddenSiblings = [];
var siblings = element.parentNode.children;
var i;
for (i = 0; i < siblings.length; i += 1) {
// Preserve hidden state
hiddenSiblings[i] = siblings[i].getAttribute('aria-hidden') ?
true : false;
if (siblings[i] !== element) {
siblings[i].setAttribute('aria-hidden', true);
}
}
return hiddenSiblings;
};
/**
* Restores assistive technology state of element's siblings
*
* @param {HTMLElement} element
* @param {Array} hiddenSiblings Hidden state of all siblings
*/
var restoreSiblings = function (element, hiddenSiblings) {
var siblings = element.parentNode.children;
var i;
for (i = 0; i < siblings.length; i += 1) {
if (siblings[i] !== element && !hiddenSiblings[i]) {
siblings[i].removeAttribute('aria-hidden');
}
}
};
/**
* Start capturing focus of parent and send it to dialog
*/
var startCapturingFocus = function () {
focusPredator = wrapperElement.parentNode || wrapperElement;
focusPredator.addEventListener('focus', captureFocus, true);
};
/**
* Clean up event listener for capturing focus
*/
var stopCapturingFocus = function () {
focusPredator.removeAttribute('aria-hidden');
focusPredator.removeEventListener('focus', captureFocus, true);
};
/**
* Hide siblings in underlay from assistive technologies
*/
var disableUnderlay = function () {
wrapperSiblingsHidden = hideSiblings(wrapperElement);
popupSiblingsHidden = hideSiblings(popupBackground);
};
/**
* Restore state of underlay for assistive technologies
*/
var restoreUnderlay = function () {
restoreSiblings(wrapperElement, wrapperSiblingsHidden);
restoreSiblings(popupBackground, popupSiblingsHidden);
};
/**
* Fit popup to container. Makes sure it doesn't overflow.
* @params {number} [offsetTop] Offset of popup
*/
var fitToContainer = function (offsetTop) {
var popupOffsetTop = parseInt(popup.style.top, 10);
if (offsetTop) {
if (offsetTop !== undefined) {
popupOffsetTop = offsetTop;
}
if (!popupOffsetTop) {
popupOffsetTop = 0;
}
// Overflows height
if (popupOffsetTop + popup.offsetHeight > wrapperElement.offsetHeight) {
popupOffsetTop = wrapperElement.offsetHeight - popup.offsetHeight - shadowOffset;
@ -167,7 +320,11 @@ H5P.ConfirmationDialog = (function (EventDispatcher) {
* @returns {H5P.ConfirmationDialog}
*/
this.show = function (offsetTop) {
// Capture focused item
previouslyFocused = document.activeElement;
wrapperElement.appendChild(popupBackground);
startCapturingFocus();
disableUnderlay();
popupBackground.classList.remove('hidden');
fitToContainer(offsetTop);
setTimeout(function () {
@ -182,7 +339,7 @@ H5P.ConfirmationDialog = (function (EventDispatcher) {
if (resizeIFrame && options.instance) {
var minHeight = parseInt(popup.offsetHeight, 10) +
exitButtonOffset + (2 * shadowOffset);
wrapperElement.style.minHeight = minHeight + 'px';
self.setViewPortMinimumHeight(minHeight);
options.instance.trigger('resize');
resizeIFrame = false;
}
@ -199,13 +356,48 @@ H5P.ConfirmationDialog = (function (EventDispatcher) {
this.hide = function () {
popupBackground.classList.add('hiding');
popup.classList.add('hidden');
// Restore focus
stopCapturingFocus();
if (!options.skipRestoreFocus) {
previouslyFocused.focus();
}
restoreUnderlay();
setTimeout(function () {
popupBackground.classList.add('hidden');
wrapperElement.removeChild(popupBackground);
self.setViewPortMinimumHeight(null);
}, 100);
return this;
};
/**
* Retrieve element
*
* @return {HTMLElement}
*/
this.getElement = function () {
return popup;
};
/**
* Get previously focused element
* @return {HTMLElement}
*/
this.getPreviouslyFocused = function () {
return previouslyFocused;
};
/**
* Sets the minimum height of the view port
*
* @param {number|null} minHeight
*/
this.setViewPortMinimumHeight = function (minHeight) {
var container = document.querySelector('.h5p-container') || document.body;
container.style.minHeight = (typeof minHeight === 'number') ? (minHeight + 'px') : minHeight;
};
}
ConfirmationDialog.prototype = Object.create(EventDispatcher.prototype);
@ -214,3 +406,5 @@ H5P.ConfirmationDialog = (function (EventDispatcher) {
return ConfirmationDialog;
}(H5P.EventDispatcher));
H5P.ConfirmationDialog.uniqueId = -1;

View File

@ -3,10 +3,17 @@
*
* Functions here may be overridable by the libraries. In special cases,
* it is also possible to override H5P.ContentType on a global level.
* */
H5P.ContentType = function (isRootLibrary, library) {
*
* NOTE that this doesn't actually 'extend' the event dispatcher but instead
* it creates a single instance which all content types shares as their base
* prototype. (in some cases this may be the root of strange event behavior)
*
* @class
* @augments H5P.EventDispatcher
*/
H5P.ContentType = function (isRootLibrary) {
function ContentType() {};
function ContentType() {}
// Inherit from EventDispatcher.
ContentType.prototype = new H5P.EventDispatcher();
@ -15,7 +22,6 @@ H5P.ContentType = function (isRootLibrary, library) {
* Is library standalone or not? Not beeing standalone, means it is
* included in another library
*
* @method isStandalone
* @return {Boolean}
*/
ContentType.prototype.isRoot = function () {
@ -24,7 +30,6 @@ H5P.ContentType = function (isRootLibrary, library) {
/**
* Returns the file path of a file in the current library
* @method getLibraryFilePath
* @param {string} filePath The path to the file relative to the library folder
* @return {string} The full path to the file
*/

View File

@ -25,19 +25,28 @@ H5P.ContentUpgradeProcess = (function (Version) {
}
self.loadLibrary = loadLibrary;
self.upgrade(name, oldVersion, newVersion, params, function (err, result) {
self.upgrade(name, oldVersion, newVersion, params.params, params.metadata, function (err, upgradedParams, upgradedMetadata) {
if (err) {
err.id = id;
return done(err);
}
done(null, JSON.stringify(params));
done(null, JSON.stringify({params: upgradedParams, metadata: upgradedMetadata}));
});
}
/**
* Run content upgrade.
*
* @public
* @param {string} name
* @param {Version} oldVersion
* @param {Version} newVersion
* @param {Object} params
* @param {Object} metadata
* @param {Function} done
*/
ContentUpgradeProcess.prototype.upgrade = function (name, oldVersion, newVersion, params, done) {
ContentUpgradeProcess.prototype.upgrade = function (name, oldVersion, newVersion, params, metadata, done) {
var self = this;
// Load library details and upgrade routines
@ -45,9 +54,15 @@ H5P.ContentUpgradeProcess = (function (Version) {
if (err) {
return done(err);
}
if (library.semantics === null) {
return done({
type: 'libraryMissing',
library: library.name + ' ' + library.version.major + '.' + library.version.minor
});
}
// Run upgrade routines on params
self.processParams(library, oldVersion, newVersion, params, function (err, params) {
self.processParams(library, oldVersion, newVersion, params, metadata, function (err, params, metadata) {
if (err) {
return done(err);
}
@ -61,7 +76,7 @@ H5P.ContentUpgradeProcess = (function (Version) {
next(err);
});
}, function (err) {
done(err, params);
done(err, params, metadata);
});
});
});
@ -77,7 +92,7 @@ H5P.ContentUpgradeProcess = (function (Version) {
* @param {Object} params
* @param {Function} next
*/
ContentUpgradeProcess.prototype.processParams = function (library, oldVersion, newVersion, params, next) {
ContentUpgradeProcess.prototype.processParams = function (library, oldVersion, newVersion, params, metadata, next) {
if (H5PUpgrades[library.name] === undefined) {
if (library.upgradesScript) {
// Upgrades script should be loaded so the upgrades should be here.
@ -88,7 +103,7 @@ H5P.ContentUpgradeProcess = (function (Version) {
}
// No upgrades script. Move on
return next(null, params);
return next(null, params, metadata);
}
// Run upgrade hooks. Start by going through major versions
@ -110,16 +125,19 @@ H5P.ContentUpgradeProcess = (function (Version) {
var unnecessaryWrapper = (upgrade.contentUpgrade !== undefined ? upgrade.contentUpgrade : upgrade);
try {
unnecessaryWrapper(params, function (err, upgradedParams) {
unnecessaryWrapper(params, function (err, upgradedParams, upgradedExtras) {
params = upgradedParams;
if (upgradedExtras && upgradedExtras.metadata) { // Optional
metadata = upgradedExtras.metadata;
}
nextMinor(err);
});
}, {metadata: metadata});
}
catch (err) {
if (console && console.log) {
console.log("Error", err.stack);
console.log("Error", err.name);
console.log("Error", err.message);
if (console && console.error) {
console.error("Error", err.stack);
console.error("Error", err.name);
console.error("Error", err.message);
}
next(err);
}
@ -127,7 +145,7 @@ H5P.ContentUpgradeProcess = (function (Version) {
}, nextMajor);
}
}, function (err) {
next(err, params);
next(err, params, metadata);
});
};
@ -155,7 +173,7 @@ H5P.ContentUpgradeProcess = (function (Version) {
// Look for available upgrades
var usedLib = params.library.split(' ', 2);
for (var i = 0; i < field.options.length; i++) {
var availableLib = field.options[i].split(' ', 2);
var availableLib = (typeof field.options[i] === 'string') ? field.options[i].split(' ', 2) : field.options[i].name.split(' ', 2);
if (availableLib[0] === usedLib[0]) {
if (availableLib[1] === usedLib[1]) {
return done(); // Same version
@ -165,24 +183,36 @@ H5P.ContentUpgradeProcess = (function (Version) {
var usedVer = new Version(usedLib[1]);
var availableVer = new Version(availableLib[1]);
if (usedVer.major > availableVer.major || (usedVer.major === availableVer.major && usedVer.minor >= availableVer.minor)) {
return done(); // Larger or same version that's available
return done({
type: 'errorTooHighVersion',
used: usedLib[0] + ' ' + usedVer,
supported: availableLib[0] + ' ' + availableVer
}); // Larger or same version that's available
}
// A newer version is available, upgrade params
return self.upgrade(availableLib[0], usedVer, availableVer, params.params, function (err, upgraded) {
return self.upgrade(availableLib[0], usedVer, availableVer, params.params, params.metadata, function (err, upgradedParams, upgradedMetadata) {
if (!err) {
params.library = availableLib[0] + ' ' + availableVer.major + '.' + availableVer.minor;
params.params = upgraded;
params.params = upgradedParams;
if (upgradedMetadata) {
params.metadata = upgradedMetadata;
}
}
done(err, params);
});
}
}
done();
// Content type was not supporte by the higher version
done({
type: 'errorNotSupported',
used: usedLib[0] + ' ' + usedVer
});
break;
case 'group':
if (field.fields.length === 1) {
if (field.fields.length === 1 && field.isSubContent !== true) {
// Single field to process, wrapper will be skipped
self.processField(field.fields[0], params, function (err, upgradedParams) {
if (upgradedParams) {

View File

@ -1,3 +1,4 @@
/* global importScripts */
var H5P = H5P || {};
importScripts('h5p-version.js', 'h5p-content-upgrade-process.js');

View File

@ -1,7 +1,7 @@
/*jshint -W083 */
/* global H5PAdminIntegration H5PUtils */
(function ($, Version) {
var info, $container, librariesCache = {}, scriptsCache = {};
var info, $log, $container, librariesCache = {}, scriptsCache = {};
// Initialize
$(document).ready(function () {
@ -9,7 +9,9 @@
info = H5PAdminIntegration.libraryInfo;
// Get and reset container
$container = $('#h5p-admin-container').html('<p>' + info.message + '</p>');
const $wrapper = $('#h5p-admin-container').html('');
$log = $('<ul class="content-upgrade-log"></ul>').appendTo($wrapper);
$container = $('<div><p>' + info.message + '</p></div>').appendTo($wrapper);
// Make it possible to select version
var $version = $(getVersionSelect(info.versions)).appendTo($container);
@ -120,9 +122,7 @@
},
error: function (error) {
self.printError(error.err);
// Stop everything
self.terminate();
self.workDone(error.id, null, this);
},
loadLibrary: function (details) {
var worker = this;
@ -184,7 +184,7 @@
self.token = inData.token;
// Start processing
self.processBatch(inData.params);
self.processBatch(inData.params, inData.skipped);
});
};
@ -202,11 +202,12 @@
*
* @param {Object} parameters
*/
ContentUpgrade.prototype.processBatch = function (parameters) {
ContentUpgrade.prototype.processBatch = function (parameters, skipped) {
var self = this;
// Track upgraded params
self.upgraded = {};
self.skipped = skipped;
// Track current batch
self.parameters = parameters;
@ -276,7 +277,7 @@
}, function done(err, result) {
if (err) {
self.printError(err);
return ;
result = null;
}
self.workDone(id, result);
@ -291,7 +292,12 @@
var self = this;
self.working--;
if (result === null) {
self.skipped.push(id);
}
else {
self.upgraded[id] = result;
}
// Update progress message
self.throbber.setProgress(Math.round((info.total - self.left + self.current) / (info.total / 100)) + ' %');
@ -302,6 +308,7 @@
self.nextBatch({
libraryId: self.version.libraryId,
token: self.token,
skipped: JSON.stringify(self.skipped),
params: JSON.stringify(self.upgraded)
});
}
@ -410,14 +417,29 @@
ContentUpgrade.prototype.printError = function (error) {
var self = this;
if (error.type === 'errorParamsBroken') {
switch (error.type) {
case 'errorParamsBroken':
error = info.errorContent.replace('%id', error.id) + ' ' + info.errorParamsBroken;
}
else if (error.type === 'scriptMissing') {
break;
case 'libraryMissing':
error = info.errorLibrary.replace('%lib', error.library);
break;
case 'scriptMissing':
error = info.errorScript.replace('%lib', error.library);
break;
case 'errorTooHighVersion':
error = info.errorContent.replace('%id', error.id) + ' ' + info.errorTooHighVersion.replace('%used', error.used).replace('%supported', error.supported);
break;
case 'errorNotSupported':
error = info.errorContent.replace('%id', error.id) + ' ' + info.errorNotSupported.replace('%used', error.used);
break;
}
self.setStatus('<p>' + info.error + '<br/>' + error + '</p>');
$('<li>' + info.error + '<br/>' + error + '</li>').appendTo($log);
};
})(H5P.jQuery, H5P.Version);

View File

@ -1,3 +1,4 @@
/* global H5PUtils */
var H5PDataView = (function ($) {
/**
@ -52,8 +53,18 @@ var H5PDataView = (function ($) {
self.filterOn = [];
self.facets = {};
// Index of column with author name; could be made more general by passing database column names and checking for position
self.columnIdAuthor = 2;
// Future option: Create more general solution for filter presets
if (H5PIntegration.user && parseInt(H5PIntegration.user.canToggleViewOthersH5PContents) === 1) {
self.updateTable([]);
self.filterByFacet(self.columnIdAuthor, H5PIntegration.user.id, H5PIntegration.user.name || '');
}
else {
self.loadData();
}
}
/**
* Load data from source URL.
@ -150,6 +161,12 @@ var H5PDataView = (function ($) {
// Add filters
self.addFilters();
// Add toggler for others' content
if (H5PIntegration.user && parseInt(H5PIntegration.user.canToggleViewOthersH5PContents) > 0) {
// canToggleViewOthersH5PContents = 1 is setting for only showing current user's contents
self.addOthersContentToggler(parseInt(H5PIntegration.user.canToggleViewOthersH5PContents) === 1);
}
// Add facets
self.$facets = $('<div/>', {
'class': 'h5p-facet-wrapper',
@ -198,7 +215,6 @@ var H5PDataView = (function ($) {
* @param number col ID of column
*/
H5PDataView.prototype.createFacets = function (input, col) {
var self = this;
var facets = '';
if (input instanceof Array) {
@ -246,13 +262,17 @@ var H5PDataView = (function ($) {
appendTo: self.$facets,
})
};
/**
* Callback for removing filter.
*
* @private
*/
var remove = function () {
// Uncheck toggler for others' H5P contents
if ( self.$othersContentToggler && self.facets.hasOwnProperty( self.columnIdAuthor ) ) {
self.$othersContentToggler.prop('checked', false );
}
self.facets[col].$tag.remove();
delete self.facets[col];
self.loadData();
@ -288,6 +308,11 @@ var H5PDataView = (function ($) {
var self = this;
if (self.pagination === undefined) {
if (self.table === undefined) {
// No table, no pagination
return;
}
// Create new widget
var $pagerContainer = $('<div/>', {'class': 'h5p-pagination'});
self.pagination = new H5PUtils.Pagination(num, self.limit, function (offset) {
@ -369,5 +394,49 @@ var H5PDataView = (function ($) {
}).appendTo(self.$container);
};
/**
* Add toggle for others' H5P content.
* @param {boolean} [checked=false] Initial check setting.
*/
H5PDataView.prototype.addOthersContentToggler = function (checked) {
var self = this;
checked = (typeof checked === 'undefined') ? false : checked;
// Checkbox
this.$othersContentToggler = $('<input/>', {
type: 'checkbox',
'class': 'h5p-others-contents-toggler',
'id': 'h5p-others-contents-toggler',
'checked': checked,
'click': function () {
if ( this.checked ) {
// Add filter on current user
self.filterByFacet( self.columnIdAuthor, H5PIntegration.user.id, H5PIntegration.user.name );
}
else {
// Remove facet indicator and reload full data view
if ( self.facets.hasOwnProperty( self.columnIdAuthor ) && self.facets[self.columnIdAuthor].$tag ) {
self.facets[self.columnIdAuthor].$tag.remove();
}
delete self.facets[self.columnIdAuthor];
self.loadData();
}
}
});
// Label
var $label = $('<label>', {
'class': 'h5p-others-contents-toggler-label',
'text': this.l10n.showOwnContentOnly,
'for': 'h5p-others-contents-toggler'
}).prepend(this.$othersContentToggler);
$('<div>', {
'class': 'h5p-others-contents-toggler-wrapper'
}).append($label)
.appendTo(this.$container);
};
return H5PDataView;
})(H5P.jQuery);

54
js/h5p-display-options.js Normal file
View File

@ -0,0 +1,54 @@
/**
* Utility that makes it possible to hide fields when a checkbox is unchecked
*/
(function ($) {
function setupHiding() {
var $toggler = $(this);
// Getting the field which should be hidden:
var $subject = $($toggler.data('h5p-visibility-subject-selector'));
var toggle = function () {
$subject.toggle($toggler.is(':checked'));
};
$toggler.change(toggle);
toggle();
}
function setupRevealing() {
var $button = $(this);
// Getting the field which should have the value:
var $input = $('#' + $button.data('control'));
if (!$input.data('value')) {
$button.remove();
return;
}
// Setup button action
var revealed = false;
var text = $button.html();
$button.click(function () {
if (revealed) {
$input.val('');
$button.html(text);
revealed = false;
}
else {
$input.val($input.data('value'));
$button.html($button.data('hide'));
revealed = true;
}
});
}
$(document).ready(function () {
// Get the checkboxes making other fields being hidden:
$('.h5p-visibility-toggler').each(setupHiding);
// Get the buttons making other fields have hidden values:
$('.h5p-reveal-value').each(setupRevealing);
});
})(H5P.jQuery);

View File

@ -1,4 +1,4 @@
var H5P = H5P || {};
var H5P = window.H5P = window.H5P || {};
/**
* The Event class for the EventDispatcher.

File diff suppressed because one or more lines are too long

54
js/h5p-hub-sharing.js Normal file

File diff suppressed because one or more lines are too long

View File

@ -1,3 +1,4 @@
/* global H5PAdminIntegration H5PUtils */
var H5PLibraryDetails = H5PLibraryDetails || {};
(function ($) {
@ -93,10 +94,6 @@ var H5PLibraryDetails= H5PLibraryDetails || {};
* Creates the pager element on the bottom of the list
*/
H5PLibraryDetails.createPagerElement = function () {
// Only create pager if needed:
if(H5PLibraryDetails.currentContent.length > H5PLibraryDetails.PAGER_SIZE) {
H5PLibraryDetails.$previous = $('<button type="button" class="previous h5p-admin"><</button>');
H5PLibraryDetails.$next = $('<button type="button" class="next h5p-admin">></button>');
@ -174,7 +171,6 @@ var H5PLibraryDetails= H5PLibraryDetails || {};
});
H5PLibraryDetails.updatePager();
}
};
/**

View File

@ -1,4 +1,4 @@
/*jshint multistr: true */
/* global H5PAdminIntegration H5PUtils */
var H5PLibraryList = H5PLibraryList || {};
(function ($) {

View File

@ -20,8 +20,12 @@
// Make iframe responsive
iframe.style.width = '100%';
// Bugfix for Chrome: Force update of iframe width. If this is not done the
// document size may not be updated before the content resizes.
iframe.getBoundingClientRect();
// Tell iframe that it needs to resize when our window resizes
var resize = function (event) {
var resize = function () {
if (iframe.contentWindow) {
// Limit resize calls to avoid flickering
respond('resize');
@ -64,7 +68,7 @@
* @param {Object} data Payload
* @param {Function} respond Send a response to the iframe
*/
actionHandlers.resize = function (iframe, data, respond) {
actionHandlers.resize = function (iframe, data) {
// Resize iframe so all content is visible. Use scrollHeight to make sure we get everything
iframe.style.height = data.scrollHeight + 'px';
};

View File

@ -1,3 +1,4 @@
/* global H5PAdminIntegration*/
var H5PUtils = H5PUtils || {};
(function ($) {

View File

@ -7,11 +7,24 @@ H5P.Version = (function () {
* @param {String} version
*/
function Version(version) {
var versionSplit = version.split('.', 3);
// Public
if (typeof version === 'string') {
// Name version string (used by content upgrade)
var versionSplit = version.split('.', 3);
this.major =+ versionSplit[0];
this.minor =+ versionSplit[1];
}
else {
// Library objects (used by editor)
if (version.localMajorVersion !== undefined) {
this.major =+ version.localMajorVersion;
this.minor =+ version.localMinorVersion;
}
else {
this.major =+ version.majorVersion;
this.minor =+ version.minorVersion;
}
}
/**
* Public. Custom string for this object.

View File

@ -1,4 +1,4 @@
var H5P = H5P || {};
var H5P = window.H5P = window.H5P || {};
/**
* Used for xAPI events.
@ -133,13 +133,26 @@ H5P.XAPIEvent.prototype.setObject = function (instance) {
}
}
else {
if (H5PIntegration && H5PIntegration.contents && H5PIntegration.contents['cid-' + instance.contentId].title) {
var content = H5P.getContentForInstance(instance.contentId);
if (content && content.metadata && content.metadata.title) {
this.data.statement.object.definition.name = {
"en-US": H5P.createTitle(H5PIntegration.contents['cid-' + instance.contentId].title)
"en-US": H5P.createTitle(content.metadata.title)
};
}
}
}
else {
// Content types view always expect to have a contentId when they are displayed.
// This is not the case if they are displayed in the editor as part of a preview.
// The fix is to set an empty object with definition for the xAPI event, so all
// the content types that rely on this does not have to handle it. This means
// that content types that are being previewed will send xAPI completed events,
// but since there are no scripts that catch these events in the editor,
// this is not a problem.
this.data.statement.object = {
definition: {}
};
}
};
/**
@ -150,7 +163,6 @@ H5P.XAPIEvent.prototype.setObject = function (instance) {
*/
H5P.XAPIEvent.prototype.setContext = function (instance) {
if (instance.parent && (instance.parent.contentId || instance.parent.subContentId)) {
var parentId = instance.parent.subContentId === undefined ? instance.parent.contentId : instance.parent.subContentId;
this.data.statement.context = {
"contextActivities": {
"parent": [
@ -188,6 +200,7 @@ H5P.XAPIEvent.prototype.setActor = function () {
}
else {
var uuid;
try {
if (localStorage.H5PUserUUID) {
uuid = localStorage.H5PUserUUID;
}
@ -195,6 +208,11 @@ H5P.XAPIEvent.prototype.setActor = function () {
uuid = H5P.createUUID();
localStorage.H5PUserUUID = uuid;
}
}
catch (err) {
// LocalStorage and Cookies are probably disabled. Do not track the user.
uuid = 'not-trackable-' + H5P.createUUID();
}
this.data.statement.actor = {
'account': {
'name': uuid,
@ -233,7 +251,7 @@ H5P.XAPIEvent.prototype.getScore = function() {
*/
H5P.XAPIEvent.prototype.getContentXAPIId = function (instance) {
var xAPIId;
if (instance.contentId && H5PIntegration && H5PIntegration.contents) {
if (instance.contentId && H5PIntegration && H5PIntegration.contents && H5PIntegration.contents['cid-' + instance.contentId]) {
xAPIId = H5PIntegration.contents['cid-' + instance.contentId].url;
if (instance.subContentId) {
xAPIId += '?subContentId=' + instance.subContentId;
@ -242,6 +260,16 @@ H5P.XAPIEvent.prototype.getContentXAPIId = function (instance) {
return xAPIId;
};
/**
* Check if this event is sent from a child (i.e not from grandchild)
*
* @return {Boolean}
*/
H5P.XAPIEvent.prototype.isFromChild = function () {
var parentId = this.getVerifiedStatementValue(['context', 'contextActivities', 'parent', 0, 'id']);
return !parentId || parentId.indexOf('subContentId') === -1;
};
/**
* Figure out if a property exists in the statement and return it
*
@ -292,5 +320,12 @@ H5P.XAPIEvent.allowedXAPIVerbs = [
'shared',
'suspended',
'terminated',
'voided'
'voided',
// Custom verbs used for action toolbar below content
'downloaded',
'copied',
'accessed-reuse',
'accessed-embed',
'accessed-copyright'
];

View File

@ -1,4 +1,4 @@
var H5P = H5P || {};
var H5P = window.H5P = window.H5P || {};
/**
* The external event dispatcher. Others, outside of H5P may register and

1229
js/h5p.js

File diff suppressed because it is too large Load Diff

35
js/jquery.js vendored

File diff suppressed because one or more lines are too long

436
js/request-queue.js Normal file
View File

@ -0,0 +1,436 @@
/**
* Queue requests and handle them at your convenience
*
* @type {RequestQueue}
*/
H5P.RequestQueue = (function ($, EventDispatcher) {
/**
* A queue for requests, will be automatically processed when regaining connection
*
* @param {boolean} [options.showToast] Show toast when losing or regaining connection
* @constructor
*/
const RequestQueue = function (options) {
EventDispatcher.call(this);
this.processingQueue = false;
options = options || {};
this.showToast = options.showToast;
this.itemName = 'requestQueue';
};
/**
* Add request to queue. Only supports posts currently.
*
* @param {string} url
* @param {Object} data
* @returns {boolean}
*/
RequestQueue.prototype.add = function (url, data) {
if (!window.localStorage) {
return false;
}
let storedStatements = this.getStoredRequests();
if (!storedStatements) {
storedStatements = [];
}
storedStatements.push({
url: url,
data: data,
});
window.localStorage.setItem(this.itemName, JSON.stringify(storedStatements));
this.trigger('requestQueued', {
storedStatements: storedStatements,
processingQueue: this.processingQueue,
});
return true;
};
/**
* Get stored requests
*
* @returns {boolean|Array} Stored requests
*/
RequestQueue.prototype.getStoredRequests = function () {
if (!window.localStorage) {
return false;
}
const item = window.localStorage.getItem(this.itemName);
if (!item) {
return [];
}
return JSON.parse(item);
};
/**
* Clear stored requests
*
* @returns {boolean} True if the storage was successfully cleared
*/
RequestQueue.prototype.clearQueue = function () {
if (!window.localStorage) {
return false;
}
window.localStorage.removeItem(this.itemName);
return true;
};
/**
* Start processing of requests queue
*
* @return {boolean} Returns false if it was not possible to resume processing queue
*/
RequestQueue.prototype.resumeQueue = function () {
// Not supported
if (!H5PIntegration || !window.navigator || !window.localStorage) {
return false;
}
// Already processing
if (this.processingQueue) {
return false;
}
// Attempt to send queued requests
const queue = this.getStoredRequests();
const queueLength = queue.length;
// Clear storage, failed requests will be re-added
this.clearQueue();
// No items left in queue
if (!queueLength) {
this.trigger('emptiedQueue', queue);
return true;
}
// Make sure requests are not changed while they're being handled
this.processingQueue = true;
// Process queue in original order
this.processQueue(queue);
return true
};
/**
* Process first item in the request queue
*
* @param {Array} queue Request queue
*/
RequestQueue.prototype.processQueue = function (queue) {
if (!queue.length) {
return;
}
this.trigger('processingQueue');
// Make sure the requests are processed in a FIFO order
const request = queue.shift();
const self = this;
$.post(request.url, request.data)
.fail(self.onQueuedRequestFail.bind(self, request))
.always(self.onQueuedRequestProcessed.bind(self, queue))
};
/**
* Request fail handler
*
* @param {Object} request
*/
RequestQueue.prototype.onQueuedRequestFail = function (request) {
// Queue the failed request again if we're offline
if (!window.navigator.onLine) {
this.add(request.url, request.data);
}
};
/**
* An item in the queue was processed
*
* @param {Array} queue Queue that was processed
*/
RequestQueue.prototype.onQueuedRequestProcessed = function (queue) {
if (queue.length) {
this.processQueue(queue);
return;
}
// Finished processing this queue
this.processingQueue = false;
// Run empty queue callback with next request queue
const requestQueue = this.getStoredRequests();
this.trigger('queueEmptied', requestQueue);
};
/**
* Display toast message on the first content of current page
*
* @param {string} msg Message to display
* @param {boolean} [forceShow] Force override showing the toast
* @param {Object} [configOverride] Override toast message config
*/
RequestQueue.prototype.displayToastMessage = function (msg, forceShow, configOverride) {
if (!this.showToast && !forceShow) {
return;
}
const config = H5P.jQuery.extend(true, {}, {
position: {
horizontal : 'centered',
vertical: 'centered',
noOverflowX: true,
}
}, configOverride);
H5P.attachToastTo(H5P.jQuery('.h5p-content:first')[0], msg, config);
};
return RequestQueue;
})(H5P.jQuery, H5P.EventDispatcher);
/**
* Request queue for retrying failing requests, will automatically retry them when you come online
*
* @type {offlineRequestQueue}
*/
H5P.OfflineRequestQueue = (function (RequestQueue, Dialog) {
/**
* Constructor
*
* @param {Object} [options] Options for offline request queue
* @param {Object} [options.instance] The H5P instance which UI components are placed within
*/
const offlineRequestQueue = function (options) {
const requestQueue = new RequestQueue();
// We could handle requests from previous pages here, but instead we throw them away
requestQueue.clearQueue();
let startTime = null;
const retryIntervals = [10, 20, 40, 60, 120, 300, 600];
let intervalIndex = -1;
let currentInterval = null;
let isAttached = false;
let isShowing = false;
let isLoading = false;
const instance = options.instance;
const offlineDialog = new Dialog({
headerText: H5P.t('offlineDialogHeader'),
dialogText: H5P.t('offlineDialogBody'),
confirmText: H5P.t('offlineDialogRetryButtonLabel'),
hideCancel: true,
hideExit: true,
classes: ['offline'],
instance: instance,
skipRestoreFocus: true,
});
const dialog = offlineDialog.getElement();
// Add retry text to body
const countDownText = document.createElement('div');
countDownText.classList.add('count-down');
countDownText.innerHTML = H5P.t('offlineDialogRetryMessage')
.replace(':num', '<span class="count-down-num">0</span>');
dialog.querySelector('.h5p-confirmation-dialog-text').appendChild(countDownText);
const countDownNum = countDownText.querySelector('.count-down-num');
// Create throbber
const throbberWrapper = document.createElement('div');
throbberWrapper.classList.add('throbber-wrapper');
const throbber = document.createElement('div');
throbber.classList.add('sending-requests-throbber');
throbberWrapper.appendChild(throbber);
requestQueue.on('requestQueued', function (e) {
// Already processing queue, wait until queue has finished processing before showing dialog
if (e.data && e.data.processingQueue) {
return;
}
if (!isAttached) {
const rootContent = document.body.querySelector('.h5p-content');
if (!rootContent) {
return;
}
offlineDialog.appendTo(rootContent);
rootContent.appendChild(throbberWrapper);
isAttached = true;
}
startCountDown();
}.bind(this));
requestQueue.on('queueEmptied', function (e) {
if (e.data && e.data.length) {
// New requests were added while processing queue or requests failed again. Re-queue requests.
startCountDown(true);
return;
}
// Successfully emptied queue
clearInterval(currentInterval);
toggleThrobber(false);
intervalIndex = -1;
if (isShowing) {
offlineDialog.hide();
isShowing = false;
}
requestQueue.displayToastMessage(
H5P.t('offlineSuccessfulSubmit'),
true,
{
position: {
vertical: 'top',
offsetVertical: '100',
}
}
);
}.bind(this));
offlineDialog.on('confirmed', function () {
// Show dialog on next render in case it is being hidden by the 'confirm' button
isShowing = false;
setTimeout(function () {
retryRequests();
}, 100);
}.bind(this));
// Initialize listener for when requests are added to queue
window.addEventListener('online', function () {
retryRequests();
}.bind(this));
// Listen for queued requests outside the iframe
window.addEventListener('message', function (event) {
const isValidQueueEvent = window.parent === event.source
&& event.data.context === 'h5p'
&& event.data.action === 'queueRequest';
if (!isValidQueueEvent) {
return;
}
this.add(event.data.url, event.data.data);
}.bind(this));
/**
* Toggle throbber visibility
*
* @param {boolean} [forceShow] Will force throbber visibility if set
*/
const toggleThrobber = function (forceShow) {
isLoading = !isLoading;
if (forceShow !== undefined) {
isLoading = forceShow;
}
if (isLoading && isShowing) {
offlineDialog.hide();
isShowing = false;
}
if (isLoading) {
throbberWrapper.classList.add('show');
}
else {
throbberWrapper.classList.remove('show');
}
};
/**
* Retries the failed requests
*/
const retryRequests = function () {
clearInterval(currentInterval);
toggleThrobber(true);
requestQueue.resumeQueue();
};
/**
* Increments retry interval
*/
const incrementRetryInterval = function () {
intervalIndex += 1;
if (intervalIndex >= retryIntervals.length) {
intervalIndex = retryIntervals.length - 1;
}
};
/**
* Starts counting down to retrying queued requests.
*
* @param forceDelayedShow
*/
const startCountDown = function (forceDelayedShow) {
// Already showing, wait for retry
if (isShowing) {
return;
}
toggleThrobber(false);
if (!isShowing) {
if (forceDelayedShow) {
// Must force delayed show since dialog may be hiding, and confirmation dialog does not
// support this.
setTimeout(function () {
offlineDialog.show(0);
}, 100);
}
else {
offlineDialog.show(0);
}
}
isShowing = true;
startTime = new Date().getTime();
incrementRetryInterval();
clearInterval(currentInterval);
currentInterval = setInterval(updateCountDown, 100);
};
/**
* Updates the count down timer. Retries requests when time expires.
*/
const updateCountDown = function () {
const time = new Date().getTime();
const timeElapsed = Math.floor((time - startTime) / 1000);
const timeLeft = retryIntervals[intervalIndex] - timeElapsed;
countDownNum.textContent = timeLeft.toString();
// Retry interval reached, retry requests
if (timeLeft <= 0) {
retryRequests();
}
};
/**
* Add request to offline request queue. Only supports posts for now.
*
* @param {string} url The request url
* @param {Object} data The request data
*/
this.add = function (url, data) {
// Only queue request if it failed because we are offline
if (window.navigator.onLine) {
return false;
}
requestQueue.add(url, data);
};
};
return offlineRequestQueue;
})(H5P.RequestQueue, H5P.ConfirmationDialog);

View File

@ -0,0 +1,68 @@
/* global H5PDisableHubData */
/**
* Global data for disable hub functionality
*
* @typedef {object} H5PDisableHubData Data passed in from the backend
*
* @property {string} selector Selector for the disable hub check-button
* @property {string} overlaySelector Selector for the element that the confirmation dialog will mask
* @property {Array} errors Errors found with the current server setup
*
* @property {string} header Header of the confirmation dialog
* @property {string} confirmationDialogMsg Body of the confirmation dialog
* @property {string} cancelLabel Cancel label of the confirmation dialog
* @property {string} confirmLabel Confirm button label of the confirmation dialog
*
*/
/**
* Utility that makes it possible to force the user to confirm that he really
* wants to use the H5P hub without proper server settings.
*/
(function ($) {
$(document).on('ready', function () {
// No data found
if (!H5PDisableHubData) {
return;
}
// No errors found, no need for confirmation dialog
if (!H5PDisableHubData.errors || !H5PDisableHubData.errors.length) {
return;
}
H5PDisableHubData.selector = H5PDisableHubData.selector ||
'.h5p-settings-disable-hub-checkbox';
H5PDisableHubData.overlaySelector = H5PDisableHubData.overlaySelector ||
'.h5p-settings-container';
var dialogHtml = '<div>' +
'<p>' + H5PDisableHubData.errors.join('</p><p>') + '</p>' +
'<p>' + H5PDisableHubData.confirmationDialogMsg + '</p>';
// Create confirmation dialog, make sure to include translations
var confirmationDialog = new H5P.ConfirmationDialog({
headerText: H5PDisableHubData.header,
dialogText: dialogHtml,
cancelText: H5PDisableHubData.cancelLabel,
confirmText: H5PDisableHubData.confirmLabel
}).appendTo($(H5PDisableHubData.overlaySelector).get(0));
confirmationDialog.on('confirmed', function () {
enableButton.get(0).checked = true;
});
confirmationDialog.on('canceled', function () {
enableButton.get(0).checked = false;
});
var enableButton = $(H5PDisableHubData.selector);
enableButton.change(function () {
if ($(this).is(':checked')) {
confirmationDialog.show(enableButton.offset().top);
}
});
});
})(H5P.jQuery);

View File

@ -1,143 +0,0 @@
[
{
"machineName": "H5P.CoursePresentation",
"downloadUrl": "http://h5p.org/presentation",
"minimumVersions": [
{
"major": 1,
"minor": 0,
"patch": 64
},
{
"major": 1,
"minor": 1,
"patch": 10
}
]
},
{
"machineName": "H5P.Blanks",
"downloadUrl": "http://h5p.org/fill-in-the-blanks",
"minimumVersions": [
{
"major": 1,
"minor": 0,
"patch": 65
}
]
},
{
"machineName": "H5P.Dialogcards",
"downloadUrl": "http://h5p.org/dialog-cards",
"minimumVersions": [
{
"major": 1,
"minor": 0,
"patch": 28
}
]
},
{
"machineName": "H5P.DragQuestion",
"downloadUrl": "http://h5p.org/drag-and-drop",
"minimumVersions": [
{
"major": 1,
"minor": 0,
"patch": 61
}
]
},
{
"machineName": "H5P.InteractiveVideo",
"downloadUrl": "http://h5p.org/interactive-video",
"minimumVersions": [
{
"major": 1,
"minor": 0,
"patch": 31
},
{
"major": 1,
"minor": 1,
"patch": 10
},
{
"major": 1,
"minor": 2,
"patch": 10
}
]
},
{
"machineName": "H5P.Flashcards",
"downloadUrl": "http://h5p.org/flashcards",
"minimumVersions": [
{
"major": 1,
"minor": 0,
"patch": 37
}
]
},
{
"machineName": "H5P.ImageHotspots",
"downloadUrl": "http://h5p.org/image-hotspots",
"minimumVersions": [
{
"major": 1,
"minor": 0,
"patch": 5
}
]
},
{
"machineName": "H5P.JoubelUI",
"downloadUrl": "http://h5p.org/fill-in-the-blanks",
"minimumVersions": [
{
"major": 1,
"minor": 0,
"patch": 6
}
]
},
{
"machineName": "H5P.MultiChoice",
"downloadUrl": "http://h5p.org/multichoice",
"minimumVersions": [
{
"major": 1,
"minor": 0,
"patch": 51
}
]
},
{
"machineName": "H5P.QuestionSet",
"downloadUrl": "http://h5p.org/question-set",
"minimumVersions": [
{
"major": 1,
"minor": 0,
"patch": 53
}
]
},
{
"machineName": "H5P.Summary",
"downloadUrl": "http://h5p.org/summary",
"minimumVersions": [
{
"major": 1,
"minor": 0,
"patch": 38
},
{
"major": 1,
"minor": 1,
"patch": 4
}
]
}
]

View File

@ -204,7 +204,7 @@ button.h5p-admin.disabled:hover {
line-height: 130%;
border: none;
background: none;
font-family: 'H5P'; /* TODO: Find content */
font-family: 'H5P';
font-size: 1.4em;
}
.h5p-content-pager > button:focus {
@ -232,7 +232,8 @@ button.h5p-admin.disabled:hover {
.h5p-admin-header {
margin-top: 1.5em;
}
#h5p-library-upload-form.h5p-admin-upload-libraries-form {
#h5p-library-upload-form.h5p-admin-upload-libraries-form,
#h5p-content-type-cache-update-form.h5p-admin-upload-libraries-form {
position: relative;
margin: 0;
@ -265,6 +266,20 @@ button.h5p-admin.disabled:hover {
display: none;
}
.h5p-data-view .h5p-others-contents-toggler-wrapper {
float: right;
line-height: 2;
margin-right: 0.5em;
}
.h5p-data-view .h5p-others-contents-toggler-label {
font-size: 14px;
}
.h5p-data-view .h5p-others-contents-toggler {
margin-right: 0.5em;
}
.h5p-data-view th[role="button"] {
cursor: pointer;
}
@ -338,3 +353,6 @@ button.h5p-admin.disabled:hover {
.h5p-data-view .h5p-facet-tag > span:active {
color: #d20000;
}
.content-upgrade-log {
color: red;
}

View File

@ -1,11 +1,11 @@
.h5p-confirmation-dialog-background {
position: absolute;
position: fixed;
height: 100%;
width: 100%;
left: 0;
top: 0;
background: rgba(255, 255, 255, 0.85);
background: rgba(44, 44, 44, 0.9);
opacity: 1;
visibility: visible;
-webkit-transition: opacity 0.1s, linear 0s, visibility 0s linear 0s;
@ -46,7 +46,7 @@
transform: translate(-50%, 0%);
color: #555;
box-shadow: 0 0 6px 1px #ddd;
box-shadow: 0 0 6px 6px rgba(10,10,10,0.3);
-webkit-transition: transform 0.1s ease-in;
transition: transform 0.1s ease-in;
@ -61,7 +61,7 @@
.h5p-confirmation-dialog-header {
padding: 1.5em;
background: #fff;
color: #1a73d9;
color: #356593;
}
.h5p-confirmation-dialog-header-text {
@ -69,8 +69,9 @@
}
.h5p-confirmation-dialog-body {
background: #fafbfc;
border-top: solid 1px #dde0e9;
padding: 1.25em 1.5em;
background: #fafafa;
}
.h5p-confirmation-dialog-text {
@ -90,14 +91,14 @@ button.h5p-confirmation-dialog-exit {
font-size: 2.5em;
top: -0.9em;
right: -1.15em;
color: #777;
color: #fff;
cursor: pointer;
text-decoration: none;
}
button.h5p-confirmation-dialog-exit:focus,
button.h5p-confirmation-dialog-exit:hover {
color: #555;
color: #E4ECF5;
}
.h5p-confirmation-dialog-exit:before {
@ -112,4 +113,71 @@ button.h5p-confirmation-dialog-exit:hover {
.h5p-core-button.h5p-confirmation-dialog-confirm-button:before {
content: "\e601";
margin-top: -6px;
display: inline-block;
}
.h5p-confirmation-dialog-popup.offline .h5p-confirmation-dialog-buttons {
float: none;
text-align: center;
}
.h5p-confirmation-dialog-popup.offline .count-down {
font-family: Arial;
margin-top: 0.15em;
color: #000;
}
.h5p-confirmation-dialog-popup.offline .h5p-confirmation-dialog-confirm-button:before {
content: "\e90b";
font-weight: normal;
vertical-align: text-bottom;
}
.throbber-wrapper {
display: none;
position: absolute;
height: 100%;
width: 100%;
top: 0;
left: 0;
z-index: 1;
background: rgba(44, 44, 44, 0.9);
}
.throbber-wrapper.show {
display: block;
}
.throbber-wrapper .throbber-container {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
.throbber-wrapper .sending-requests-throbber{
position: absolute;
top: 7em;
left: 50%;
transform: translateX(-50%);
}
.throbber-wrapper .sending-requests-throbber:before {
display: block;
font-family: 'H5P';
content: "\e90b";
color: white;
font-size: 10em;
animation: request-throbber 1.5s infinite linear;
}
@keyframes request-throbber {
from {
transform: rotate(0);
}
to {
transform: rotate(359deg);
}
}

View File

@ -1,13 +1,15 @@
button.h5p-core-button:visited,
button.h5p-core-button:link,
button.h5p-core-button {
font-family: "Open Sans", sans-serif;
font-weight: 600;
font-size: 1em;
line-height: 1.2;
padding: 0.5em 1.25em;
border-radius: 2em;
background: #1a73d9;
color: #ffffff;
background: #2579c6;
color: #fff;
cursor: pointer;
border: none;
@ -19,24 +21,19 @@ button.h5p-core-button {
text-shadow: none;
vertical-align: baseline;
text-decoration: none;
}
button.h5p-core-button:hover,
button.h5p-core-button:focus {
background: #1356a3;
color: #fff;
text-decoration: none;
-webkit-transition: initial;
transition: initial;
}
button.h5p-core-button:active {
position: relative;
background: #104888;
-webkit-box-shadow: inset 0 4px 0 #0e407a;
-moz-box-shadow: inset 0 4px 0 #0e407a;
box-shadow: inset 0 4px 0 #0e407a;
button.h5p-core-button:focus {
background: #1f67a8;
}
button.h5p-core-button:hover {
background: rgba(31, 103, 168, 0.83);
}
button.h5p-core-button:active {
background: #104888;
}
button.h5p-core-button:before {
font-family: 'H5P';
padding-right: 0.15em;
@ -44,7 +41,6 @@ button.h5p-core-button:before {
vertical-align: middle;
line-height: 0.7;
}
button.h5p-core-cancel-button:visited,
button.h5p-core-cancel-button:link,
button.h5p-core-cancel-button {
@ -56,7 +52,6 @@ button.h5p-core-cancel-button {
text-decoration: none;
cursor: pointer;
}
button.h5p-core-cancel-button:hover,
button.h5p-core-cancel-button:focus {
background: none;

File diff suppressed because one or more lines are too long

401
styles/h5p-hub-sharing.css Normal file

File diff suppressed because one or more lines are too long

View File

@ -3,15 +3,27 @@
/* Custom H5P font to use for icons. */
@font-face {
font-family: 'h5p';
src: url('../fonts/h5p-core-14.eot?inh2er');
src: url('../fonts/h5p-core-14.eot?inh2er#iefix') format('embedded-opentype'),
url('../fonts/h5p-core-14.ttf?inh2er') format('truetype'),
url('../fonts/h5p-core-14.woff?inh2er') format('woff'),
url('../fonts/h5p-core-14.svg?inh2er#h5p-core-14') format('svg');
src: url('../fonts/h5p-core-28.eot?h1atjl');
src: url('../fonts/h5p-core-28.eot?h1atjl#iefix') format('embedded-opentype'),
url('../fonts/h5p-core-28.ttf?h1atjl') format('truetype'),
url('../fonts/h5p-core-28.woff?h1atjl') format('woff'),
url('../fonts/h5p-core-28.svg?h1atjl#h5p-core-28') format('svg');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'h5p-hub-publish';
src: url('../fonts/h5p-hub-publish.eot?wy8ylc');
src: url('../fonts/h5p-hub-publish.eot?wy8ylc#iefix') format('embedded-opentype'),
url('../fonts/h5p-hub-publish.ttf?wy8ylc') format('truetype'),
url('../fonts/h5p-hub-publish.woff?wy8ylc') format('woff'),
url('../fonts/h5p-hub-publish.svg?wy8ylc#h5p-hub') format('svg');
font-weight: normal;
font-style: normal;
font-display: block;
}
html.h5p-iframe, html.h5p-iframe > body {
font-family: Sans-Serif; /* Use the browser's default sans-serif font. (Since Heletica doesn't look nice on Windows, and Arial on OS X.) */
width: 100%;
@ -30,11 +42,21 @@ html.h5p-iframe, html.h5p-iframe > body {
box-sizing: border-box;
-moz-box-sizing: border-box;
}
.h5p-noselect
{
-khtml-user-select: none;
-ms-user-select: none;
-moz-user-select: none;
-webkit-user-select: none;
user-select: none;
}
html.h5p-iframe .h5p-content {
font-size: 16px;
line-height: 1.5em;
width: 100%;
height: auto;
-webkit-text-size-adjust: none;
text-size-adjust: none;
}
html.h5p-iframe .h5p-fullscreen .h5p-content,
html.h5p-iframe .h5p-semi-fullscreen .h5p-content {
@ -98,15 +120,22 @@ body.h5p-semi-fullscreen {
line-height: 0.975em;
font-size: 2em;
width: 1.125em;
height: 0.925em;
text-indent: -0.0875em;
outline: none;
height: 1em;
text-indent: 0.04em;
}
.h5p-disable-fullscreen {
line-height: 0.925em;
width: 1.1em;
height: 0.9em;
}
.h5p-enable-fullscreen:focus,
.h5p-disable-fullscreen:focus {
outline-style: solid;
outline-width: 1px;
outline-offset: 0.25em;
}
.h5p-enable-fullscreen:hover, .h5p-disable-fullscreen:hover {
background: rgba(0,0,0,0.5);
}
@ -147,7 +176,11 @@ div.h5p-fullscreen {
z-index: 20;
}
.h5p-iframe-wrapper iframe.h5p-iframe {
width: 100%;
/* Hack for IOS landscape / portrait */
width: 10px;
min-width: 100%;
*width: 100%;
/* End of hack */
height: 100%;
z-index: 10;
overflow: hidden;
@ -180,13 +213,13 @@ div.h5p-fullscreen {
background: none;
padding: 0 0.75em 0 0.25em;
vertical-align: top;
color: #999;
color: #707070;
text-decoration: none;
outline: none;
line-height: 23px;
line-height: 22px;
}
.h5p-actions > .h5p-button:hover {
color: #666;
color: #333;
}
.h5p-actions > .h5p-button:active,
.h5p-actions > .h5p-button:focus,
@ -203,14 +236,13 @@ div.h5p-fullscreen {
}
.h5p-actions > .h5p-button:before {
font-family: 'H5P';
font-size: 1em;
font-size: 20px;
line-height: 23px;
vertical-align: bottom;
padding-right: 0;
font-size: 1.7em;
line-height: 1.125em;
vertical-align: middle;
}
.h5p-actions > .h5p-button.h5p-export:before {
content: "\e893";
content: "\e90b";
}
.h5p-actions > .h5p-button.h5p-copyrights:before {
content: "\e88f";
@ -235,13 +267,14 @@ div.h5p-fullscreen {
}
.h5p-actions > li {
margin: 0;
list-style: none;
}
.h5p-popup-dialog {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
min-height: 100%;
z-index: 100;
padding: 2em;
box-sizing: border-box;
@ -278,13 +311,20 @@ div.h5p-fullscreen {
padding: 0.325em 0.5em 0.25em;
line-height: 1.25em;
border-bottom: 1px solid #ccc;
z-index: 2;
}
.h5p-embed-dialog .h5p-inner {
width: 300px;
.h5p-popup-dialog .h5p-inner > h2 > a {
font-size: 12px;
margin-left: 1em;
}
.h5p-embed-dialog .h5p-inner,
.h5p-reuse-dialog .h5p-inner,
.h5p-content-user-data-reset-dialog .h5p-inner {
min-width: 316px;
max-width: 400px;
left: 50%;
top: 50%;
margin: 0 0 0 -150px;
transition: margin 250ms linear 100ms;
transform: translateX(-50%);
}
.h5p-embed-dialog .h5p-embed-code-container,
.h5p-embed-size {
@ -320,11 +360,14 @@ div.h5p-fullscreen {
padding: 1em;
box-sizing: border-box;
-moz-box-sizing: border-box;
height: 100%;
color: #555555;
z-index: 1;
}
.h5p-popup-dialog.h5p-open .h5p-scroll-content {
overflow: auto;
overflow-x: hidden;
overflow-y: auto;
color: #555555;
height: 100%;
}
.h5p-popup-dialog .h5p-scroll-content::-webkit-scrollbar {
width: 8px;
@ -338,11 +381,6 @@ div.h5p-fullscreen {
}
.h5p-popup-dialog .h5p-close {
cursor: pointer;
outline:none
}
.h5p-popup-dialog .h5p-close:after {
font-family: 'H5P';
content: "\e894";
font-size: 2em;
position: absolute;
right: 0;
@ -353,6 +391,11 @@ div.h5p-fullscreen {
color: #656565;
cursor: pointer;
text-indent: -0.065em;
z-index: 3
}
.h5p-popup-dialog .h5p-close:after {
font-family: 'H5P';
content: "\e894";
}
.h5p-popup-dialog .h5p-close:hover:after,
.h5p-popup-dialog .h5p-close:focus:after {
@ -383,7 +426,6 @@ div.h5p-fullscreen {
.h5p-expander {
cursor: pointer;
font-size: 1.125em;
outline: none;
margin: 0.5em 0 0;
display: inline-block;
}
@ -436,3 +478,148 @@ div.h5p-fullscreen {
.h5p-dialog-ok-button:active {
background: #eeffee;
}
.h5p-big-button {
line-height: 1.25;
display: block;
position: relative;
cursor: pointer;
width: 100%;
padding: 1em 1em 1em 3.75em;
text-align: left;
border: 1px solid #dedede;
background: linear-gradient(#ffffff, #f1f1f2);
border-radius: 0.25em;
}
.h5p-big-button:before {
font-family: 'h5p';
content: "\e893";
line-height: 1;
font-size: 3em;
color: #2747f7;
position: absolute;
left: 0.125em;
top: 0.125em;
}
.h5p-copy-button:before {
content: "\e905";
}
.h5p-big-button:hover {
border: 1px solid #2747f7;
background: #eff1fe;
}
.h5p-big-button:active {
border: 1px solid #dedede;
background: #dfe4fe;
}
.h5p-button-title {
color: #2747f7;
font-size: 15px;
font-weight: bold;
margin-bottom: 0.5em;
}
.h5p-button-description {
color: #757575;
}
.h5p-horizontal-line-text {
border-top: 1px solid #dadada;
line-height: 1;
color: #474747;
text-align: center;
position: relative;
margin: 1.25em 0;
}
.h5p-horizontal-line-text > span {
background: white;
padding: 0.5em;
position: absolute;
top: -1em;
left: 50%;
transform: translateX(-50%);
}
.h5p-toast {
font-size: 0.75em;
background-color: rgba(0, 0, 0, 0.9);
color: #fff;
z-index: 110;
position: absolute;
padding: 0 0.5em;
line-height: 2;
border-radius: 4px;
white-space: nowrap;
pointer-events: none;
top: 0;
opacity: 1;
visibility: visible;
transition: opacity 1s;
}
.h5p-toast-disabled {
opacity: 0;
visibility: hidden;
}
.h5p-content code,
.h5peditor code {
color: #3d3d3d;
background: #e0e0e0;
border-radius: 2px;
padding: 0 5px;
}
.h5p-content pre > code,
.h5peditor pre > code {
background-color: #fafafa;
padding: 5px;
display: block;
line-height: normal;
border: 1px solid #c7c7c7;
border-left-width: 4px;
max-width: 100%;
white-space: pre;
overflow: auto;
}
/* This is loaded as part of Core and not Editor since this needs to be outside the editor iframe */
.h5peditor-semi-fullscreen {
width: 100%;
height: 100%;
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
z-index: 101;
}
iframe.h5peditor-semi-fullscreen {
background: #fff;
z-index: 100001;
}
.h5p-content.using-mouse *:not(textarea):focus {
outline: none !important;
}
.h5p-content-hub-button:before {
font-family: "h5p";
margin-right: 0.5em;
font-size: 0.7em;
line-height: 1;
}
.h5p-content-hub-button.unpublish:before {
content: "\e916";
}
.h5p-content-hub-button.waiting:before,
.h5p-content-hub-button.sync:before {
content: "\e917";
}
.h5p-content-hub-button.waiting:before {
display: inline-block;
animation: rotate 2s linear infinite;
}
@keyframes rotate {
to {
transform: rotate(360deg);
}
}