Added generic fallback for libraries that hasn't implemented getCopyrights.

namespaces
Frode Petterson 2014-10-30 15:51:20 +01:00
parent af2f01cbb7
commit ad03edf662
2 changed files with 69 additions and 8 deletions

View File

@ -70,11 +70,12 @@ H5P.init = function () {
window.location.href = contentData.exportUrl; window.location.href = contentData.exportUrl;
}); });
} }
if (instance.getCopyrights !== undefined) {
// Display copyrights button // Display copyrights button
H5P.jQuery('<li class="h5p-button h5p-copyrights" role="button" tabindex="1" title="' + H5P.t('copyrightsDescription') + '">' + H5P.t('copyrights') + '</li>').appendTo($actions).click(function () { H5P.jQuery('<li class="h5p-button h5p-copyrights" role="button" tabindex="1" title="' + H5P.t('copyrightsDescription') + '">' + H5P.t('copyrights') + '</li>').appendTo($actions).click(function () {
H5P.openCopyrightsDialog($actions, instance); H5P.openCopyrightsDialog($actions, instance, library.params, contentId);
}); });
} }
if (contentData.embedCode !== undefined) { if (contentData.embedCode !== undefined) {
// Display embed button // Display embed button
@ -482,19 +483,77 @@ H5P.Dialog = function (name, title, content, $element) {
* @param {object} instance to get copyright information from. * @param {object} instance to get copyright information from.
* @returns {undefined} * @returns {undefined}
*/ */
H5P.openCopyrightsDialog = function ($element, instance) { H5P.openCopyrightsDialog = function ($element, instance, parameters, contentId) {
var copyrights = instance.getCopyrights(); var copyrights;
if (instance.getCopyrights !== undefined) {
// Use the instance's own copyright generator
copyrights = instance.getCopyrights();
}
else {
// Create a generic flat copyright list
copyrights = new H5P.ContentCopyrights();
H5P.findCopyrights(copyrights, parameters, contentId);
}
if (copyrights !== undefined) { if (copyrights !== undefined) {
// Convert to string
copyrights = copyrights.toString(); copyrights = copyrights.toString();
} }
if (copyrights === undefined || copyrights === '') { if (copyrights === undefined || copyrights === '') {
// Use no copyrights default text
copyrights = H5P.t('noCopyrights'); copyrights = H5P.t('noCopyrights');
} }
// Open dialog with copyright information
var dialog = new H5P.Dialog('copyrights', H5P.t('copyrightInformation'), copyrights, $element); var dialog = new H5P.Dialog('copyrights', H5P.t('copyrightInformation'), copyrights, $element);
dialog.open(); dialog.open();
}; };
/**
* Gather a flat list of copyright information from the given parameters.
*
* @param {H5P.ContentCopyrights} info Used to collect all information in.
* @param {(Object|Arrray)} parameters To search for file objects in.
* @param {Number} contentId Used to insert thumbnails for images.
* @returns {undefined}
*/
H5P.findCopyrights = function (info, parameters, contentId) {
// Cycle through parameters
for (var field in parameters) {
if (!parameters.hasOwnProperty(field)) {
continue; // Do not check
}
var value = parameters[field];
if (value instanceof Array) {
// Cycle through array
H5P.findCopyrights(info, value, contentId);
}
else if (value instanceof Object) {
// Check if object is a file with copyrights
if (value.copyright === undefined ||
value.copyright.license === undefined ||
value.path === undefined ||
value.mime === undefined) {
// Nope, cycle throught object
H5P.findCopyrights(info, value, contentId);
}
else {
// Found file, add copyrights
var copyrights = new H5P.MediaCopyright(value.copyright);
if (value.width !== undefined && value.height !== undefined) {
copyrights.setThumbnail(new H5P.Thumbnail(H5P.getPath(value.path, contentId), value.width, value.height));
}
info.addMedia(copyrights);
}
}
else {
}
}
};
/** /**
* Display a dialog containing the embed code. * Display a dialog containing the embed code.
* *

View File

@ -234,6 +234,8 @@ div.h5p-fullscreen {
font-size: 1.5em; font-size: 1.5em;
margin: 0.25em 0; margin: 0.25em 0;
position: absolute; position: absolute;
line-height: 1.25em;
padding: 0;
} }
.h5p-embed-dialog .h5p-inner { .h5p-embed-dialog .h5p-inner {
width: 50%; width: 50%;