From e36582c71423b0304809baddf783d5dacbc908cd Mon Sep 17 00:00:00 2001 From: Paal Joergensen Date: Tue, 14 Jul 2015 14:37:39 +0200 Subject: [PATCH 1/3] Added H5P base class that all H5P libraries automatically extends --- js/h5p.js | 39 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/js/h5p.js b/js/h5p.js index a57fe64..63c29a8 100644 --- a/js/h5p.js +++ b/js/h5p.js @@ -72,6 +72,38 @@ H5P.DISABLE_ABOUT = 16; */ H5P.opened = {}; +/** + * H5P Base class. Adds utility functions to a library's prototype object. + * + * Functions here may be overridable by the libraries. In special cases, + * it is also possible to override H5P.Base on a global level. + * */ +H5P.Base = function (constructor, standalone, library) { + /** + * Is library standalone or not? Not beeing standalone, means it is + * included in another library + * + * @method isStandalone + * @return {Boolean} + */ + this.isStandalone = function () { + return standalone; + }; + + /** + * 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 + */ + this.getLibraryFilePath = function (filePath) { + return H5P.getLibraryPath(library.library) + '/' + filePath; + }; + + // This order makes it possible for an H5P library to override H5P.Base functions! + return H5P.jQuery.extend({}, this, constructor.prototype); +}; + /** * Initialize H5P content. * Scans for ".h5p-content" in the document and initializes H5P instances where found. @@ -135,7 +167,7 @@ H5P.init = function (target) { }); // Create new instance. - var instance = H5P.newRunnable(library, contentId, $container, true); + var instance = H5P.newRunnable(library, contentId, $container, true, {standalone: true}); // Check if we should add and display a fullscreen button for this H5P. if (contentData.fullScreen == 1 && H5P.canHasFullScreen) { @@ -724,6 +756,10 @@ H5P.newRunnable = function (library, contentId, $attachTo, skipResize, extras) { extras.previousState = library.userDatas.state; } + // Makes all H5P libraries extend H5P.Base: + var standalone = extras.standalone || false; + constructor.prototype = H5P.Base(constructor, standalone, library); + var instance; // Some old library versions have their own custom third parameter. // Make sure we don't send them the extras. @@ -759,6 +795,7 @@ H5P.newRunnable = function (library, contentId, $attachTo, skipResize, extras) { } if ($attachTo !== undefined) { + $attachTo.toggleClass('h5p-standalone', standalone); instance.attach($attachTo); H5P.trigger(instance, 'domChanged', { '$target': $attachTo, From 8cf384f46ace41b678c4829ba52d5e55619bbe57 Mon Sep 17 00:00:00 2001 From: Paal Joergensen Date: Tue, 14 Jul 2015 14:46:35 +0200 Subject: [PATCH 2/3] Fixed H5P.Base.getLibraryFilePath() bug --- js/h5p.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/js/h5p.js b/js/h5p.js index 63c29a8..41cad63 100644 --- a/js/h5p.js +++ b/js/h5p.js @@ -97,7 +97,8 @@ H5P.Base = function (constructor, standalone, library) { * @return {string} The full path to the file */ this.getLibraryFilePath = function (filePath) { - return H5P.getLibraryPath(library.library) + '/' + filePath; + var libraryObject = H5P.libraryFromString(library.library); + return H5P.getLibraryPath(libraryObject.machineName + '-' + libraryObject.majorVersion + '.' + libraryObject.minorVersion) + '/' + filePath; }; // This order makes it possible for an H5P library to override H5P.Base functions! From 56e74c2d680e732c70931e526938e6f4afe96c94 Mon Sep 17 00:00:00 2001 From: Paal Joergensen Date: Fri, 17 Jul 2015 13:32:35 +0200 Subject: [PATCH 3/3] Renamed H5P.Base to H5P.ContentType. Moved H5P.ContentType code to separate file. Made H5P.ContentType extend H5P.EventDispatcher. --- h5p.classes.php | 1 + js/h5p-content-type.js | 37 +++++++++++++++++++++++++++++++++++++ js/h5p.js | 38 +++----------------------------------- 3 files changed, 41 insertions(+), 35 deletions(-) create mode 100644 js/h5p-content-type.js diff --git a/h5p.classes.php b/h5p.classes.php index c291c2d..d9dc982 100644 --- a/h5p.classes.php +++ b/h5p.classes.php @@ -1643,6 +1643,7 @@ class H5PCore { 'js/h5p-event-dispatcher.js', 'js/h5p-x-api-event.js', 'js/h5p-x-api.js', + 'js/h5p-content-type.js', ); public static $adminScripts = array( 'js/jquery.js', diff --git a/js/h5p-content-type.js b/js/h5p-content-type.js new file mode 100644 index 0000000..3a56c72 --- /dev/null +++ b/js/h5p-content-type.js @@ -0,0 +1,37 @@ +/** + * H5P.ContentType is a base class for all content types. Used by newRunnable() + * + * 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 (standalone, library) { + + function ContentType() {}; + + // Inherit from EventDispatcher. + ContentType.prototype = new H5P.EventDispatcher(); + + /** + * Is library standalone or not? Not beeing standalone, means it is + * included in another library + * + * @method isStandalone + * @return {Boolean} + */ + ContentType.prototype.isStandalone = function () { + return standalone; + }; + + /** + * 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 + */ + ContentType.prototype.getLibraryFilePath = function (filePath) { + var libraryObject = H5P.libraryFromString(library.library); + return H5P.getLibraryPath(libraryObject.machineName + '-' + libraryObject.majorVersion + '.' + libraryObject.minorVersion) + '/' + filePath; + }; + + return ContentType; +}; diff --git a/js/h5p.js b/js/h5p.js index 41cad63..ea48c4e 100644 --- a/js/h5p.js +++ b/js/h5p.js @@ -72,39 +72,6 @@ H5P.DISABLE_ABOUT = 16; */ H5P.opened = {}; -/** - * H5P Base class. Adds utility functions to a library's prototype object. - * - * Functions here may be overridable by the libraries. In special cases, - * it is also possible to override H5P.Base on a global level. - * */ -H5P.Base = function (constructor, standalone, library) { - /** - * Is library standalone or not? Not beeing standalone, means it is - * included in another library - * - * @method isStandalone - * @return {Boolean} - */ - this.isStandalone = function () { - return standalone; - }; - - /** - * 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 - */ - this.getLibraryFilePath = function (filePath) { - var libraryObject = H5P.libraryFromString(library.library); - return H5P.getLibraryPath(libraryObject.machineName + '-' + libraryObject.majorVersion + '.' + libraryObject.minorVersion) + '/' + filePath; - }; - - // This order makes it possible for an H5P library to override H5P.Base functions! - return H5P.jQuery.extend({}, this, constructor.prototype); -}; - /** * Initialize H5P content. * Scans for ".h5p-content" in the document and initializes H5P instances where found. @@ -757,9 +724,10 @@ H5P.newRunnable = function (library, contentId, $attachTo, skipResize, extras) { extras.previousState = library.userDatas.state; } - // Makes all H5P libraries extend H5P.Base: + // Makes all H5P libraries extend H5P.ContentType: var standalone = extras.standalone || false; - constructor.prototype = H5P.Base(constructor, standalone, library); + // This order makes it possible for an H5P library to override H5P.ContentType functions! + constructor.prototype = H5P.jQuery.extend({}, H5P.ContentType(standalone, library).prototype, constructor.prototype); var instance; // Some old library versions have their own custom third parameter.