Compare commits
1 Commits
master
...
redesign-c
Author | SHA1 | Date |
---|---|---|
Thomas Marstrander | 5741cf72c5 |
157
js/h5p.js
157
js/h5p.js
|
@ -154,12 +154,14 @@ H5P.init = function (target) {
|
||||||
}
|
}
|
||||||
if (!(contentData.disable & H5P.DISABLE_COPYRIGHT)) {
|
if (!(contentData.disable & H5P.DISABLE_COPYRIGHT)) {
|
||||||
var copyright = H5P.getCopyrights(instance, library.params, contentId);
|
var copyright = H5P.getCopyrights(instance, library.params, contentId);
|
||||||
|
copyright.removeSubLevel();
|
||||||
|
var copyrightString = copyright.toString();
|
||||||
|
|
||||||
if (copyright) {
|
if (copyrightString) {
|
||||||
// Add copyright dialog button
|
// Add copyright dialog 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 () {
|
||||||
// Open dialog with copyright information
|
// Open dialog with copyright information
|
||||||
var dialog = new H5P.Dialog('copyrights', H5P.t('copyrightInformation'), copyright, $container);
|
var dialog = new H5P.Dialog('copyrights', H5P.t('copyrightInformation'), copyrightString, $container);
|
||||||
dialog.open();
|
dialog.open();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -853,6 +855,32 @@ H5P.Dialog = function (name, title, content, $element) {
|
||||||
.end()
|
.end()
|
||||||
.end();
|
.end();
|
||||||
|
|
||||||
|
// Find all expand buttons, add functionality.
|
||||||
|
H5P.jQuery('.h5p-copyrights-expand-button', $dialog).click(function () {
|
||||||
|
var $copyrightsExpandButton = H5P.jQuery(this);
|
||||||
|
var $buttonParent = $copyrightsExpandButton.parent();
|
||||||
|
|
||||||
|
// Update buttontext
|
||||||
|
if ($buttonParent.hasClass('expand')) {
|
||||||
|
$copyrightsExpandButton.html(H5P.t('showMore'));
|
||||||
|
} else {
|
||||||
|
$copyrightsExpandButton.html(H5P.t('showLess'));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Expand or collapse copyright details
|
||||||
|
$buttonParent.toggleClass('expand');
|
||||||
|
});
|
||||||
|
|
||||||
|
// Make sure all links are opened outside of iframe
|
||||||
|
if (H5P.isFramed) {
|
||||||
|
H5P.jQuery('a', $dialog).click(function () {
|
||||||
|
var href = H5P.jQuery(this).attr('href');
|
||||||
|
window.parent.open(href, '_blank');
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
this.open = function () {
|
this.open = function () {
|
||||||
setTimeout(function () {
|
setTimeout(function () {
|
||||||
$dialog.addClass('h5p-open'); // Fade in
|
$dialog.addClass('h5p-open'); // Fade in
|
||||||
|
@ -878,7 +906,7 @@ H5P.Dialog = function (name, title, content, $element) {
|
||||||
* Parameters of the content instance.
|
* Parameters of the content instance.
|
||||||
* @param {number} contentId
|
* @param {number} contentId
|
||||||
* Identifies the H5P content
|
* Identifies the H5P content
|
||||||
* @returns {string} Copyright information.
|
* @returns {H5P.ContentCopyrights} Copyright information.
|
||||||
*/
|
*/
|
||||||
H5P.getCopyrights = function (instance, parameters, contentId) {
|
H5P.getCopyrights = function (instance, parameters, contentId) {
|
||||||
var copyrights;
|
var copyrights;
|
||||||
|
@ -899,10 +927,7 @@ H5P.getCopyrights = function (instance, parameters, contentId) {
|
||||||
H5P.findCopyrights(copyrights, parameters, contentId);
|
H5P.findCopyrights(copyrights, parameters, contentId);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (copyrights !== undefined) {
|
|
||||||
// Convert to string
|
|
||||||
copyrights = copyrights.toString();
|
|
||||||
}
|
|
||||||
return copyrights;
|
return copyrights;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1050,6 +1075,7 @@ H5P.ContentCopyrights = function () {
|
||||||
var label;
|
var label;
|
||||||
var media = [];
|
var media = [];
|
||||||
var content = [];
|
var content = [];
|
||||||
|
var hasSubLevel = true;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set label.
|
* Set label.
|
||||||
|
@ -1082,6 +1108,13 @@ H5P.ContentCopyrights = function () {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add sub level content.
|
||||||
|
*/
|
||||||
|
this.removeSubLevel = function () {
|
||||||
|
hasSubLevel = false;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Print content copyright.
|
* Print content copyright.
|
||||||
*
|
*
|
||||||
|
@ -1102,13 +1135,13 @@ H5P.ContentCopyrights = function () {
|
||||||
|
|
||||||
|
|
||||||
if (html !== '') {
|
if (html !== '') {
|
||||||
// Add a label to this info
|
if (hasSubLevel) {
|
||||||
if (label !== undefined) {
|
label = (label && label.length ? label : H5P.t('subLevel'));
|
||||||
html = '<h3>' + label + '</h3>' + html;
|
html = '<div class="h5p-content-copyrights-label">' + label + '</div>' + html;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add wrapper
|
// Add wrapper
|
||||||
html = '<div class="h5p-content-copyrights">' + html + '</div>';
|
html = '<div class="h5p-content-copyrights' + (hasSubLevel ? ' sublevel' : '') + '">' + html + '</div>';
|
||||||
}
|
}
|
||||||
|
|
||||||
return html;
|
return html;
|
||||||
|
@ -1129,8 +1162,9 @@ H5P.ContentCopyrights = function () {
|
||||||
* Add extra copyright fields.
|
* Add extra copyright fields.
|
||||||
*/
|
*/
|
||||||
H5P.MediaCopyright = function (copyright, labels, order, extraFields) {
|
H5P.MediaCopyright = function (copyright, labels, order, extraFields) {
|
||||||
var thumbnail;
|
var thumbnail = new H5P.Thumbnail();
|
||||||
var list = new H5P.DefinitionList();
|
var list = new H5P.DefinitionList();
|
||||||
|
var mediaType = '';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get translated label for field.
|
* Get translated label for field.
|
||||||
|
@ -1193,6 +1227,15 @@ H5P.MediaCopyright = function (copyright, labels, order, extraFields) {
|
||||||
thumbnail = newThumbnail;
|
thumbnail = newThumbnail;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set media type.
|
||||||
|
*
|
||||||
|
* @param {H5P.MediaType} newMediaType new media type
|
||||||
|
*/
|
||||||
|
this.setMediaType = function (newMediaType) {
|
||||||
|
mediaType = ' ' + newMediaType;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks if this copyright is undisclosed.
|
* Checks if this copyright is undisclosed.
|
||||||
* I.e. only has the license attribute set, and it's undisclosed.
|
* I.e. only has the license attribute set, and it's undisclosed.
|
||||||
|
@ -1223,11 +1266,17 @@ H5P.MediaCopyright = function (copyright, labels, order, extraFields) {
|
||||||
|
|
||||||
if (thumbnail !== undefined) {
|
if (thumbnail !== undefined) {
|
||||||
html += thumbnail;
|
html += thumbnail;
|
||||||
|
|
||||||
|
// Unable to determine media type, default to "file"
|
||||||
|
if (!thumbnail.hasImage() && mediaType === '') {
|
||||||
|
mediaType = ' file';
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
html += list;
|
html += list;
|
||||||
|
|
||||||
if (html !== '') {
|
if (html !== '') {
|
||||||
html = '<div class="h5p-media-copyright">' + html + '</div>';
|
html = '<div class="h5p-media-copyright' + mediaType + '">' + html + '</div>';
|
||||||
}
|
}
|
||||||
|
|
||||||
return html;
|
return html;
|
||||||
|
@ -1254,6 +1303,18 @@ H5P.copyrightLicenses = {
|
||||||
'C': 'Copyright'
|
'C': 'Copyright'
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Maps copyright type codes to their classes, made accessible to all content types implementing getCopyright
|
||||||
|
*
|
||||||
|
* @type {Object}
|
||||||
|
*/
|
||||||
|
H5P.copyrightTypes = {
|
||||||
|
'image': 'image',
|
||||||
|
'video': 'video',
|
||||||
|
'audio': 'audio',
|
||||||
|
'file': 'file'
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A simple and elegant class for creating thumbnails of images.
|
* A simple and elegant class for creating thumbnails of images.
|
||||||
*
|
*
|
||||||
|
@ -1263,10 +1324,17 @@ H5P.copyrightLicenses = {
|
||||||
* @param {number} height
|
* @param {number} height
|
||||||
*/
|
*/
|
||||||
H5P.Thumbnail = function (source, width, height) {
|
H5P.Thumbnail = function (source, width, height) {
|
||||||
var thumbWidth, thumbHeight = 100;
|
// Deprecated width and height
|
||||||
if (width !== undefined) {
|
var imageSource = source;
|
||||||
thumbWidth = Math.round(thumbHeight * (width / height));
|
|
||||||
}
|
/**
|
||||||
|
* Check if thumbnail has an image source
|
||||||
|
*
|
||||||
|
* @returns {boolean}
|
||||||
|
*/
|
||||||
|
this.hasImage = function () {
|
||||||
|
return !!imageSource;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Print thumbnail.
|
* Print thumbnail.
|
||||||
|
@ -1274,7 +1342,13 @@ H5P.Thumbnail = function (source, width, height) {
|
||||||
* @returns {string} HTML.
|
* @returns {string} HTML.
|
||||||
*/
|
*/
|
||||||
this.toString = function () {
|
this.toString = function () {
|
||||||
return '<img src="' + source + '" alt="' + H5P.t('thumbnail') + '" class="h5p-thumbnail" height="' + thumbHeight + '"' + (thumbWidth === undefined ? '' : ' width="' + thumbWidth + '"') + '/>';
|
var html = '<div class="h5p-thumbnail-wrapper">';
|
||||||
|
if (source !== undefined) {
|
||||||
|
html += '<img src="' + imageSource + '" alt="' + H5P.t('thumbnail') + '" class="h5p-thumbnail"></img>';
|
||||||
|
}
|
||||||
|
html += '</div>';
|
||||||
|
|
||||||
|
return html;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1347,12 +1421,53 @@ H5P.DefinitionList = function () {
|
||||||
* @returns {string} HTML.
|
* @returns {string} HTML.
|
||||||
*/
|
*/
|
||||||
this.toString = function () {
|
this.toString = function () {
|
||||||
var html = '';
|
// Return empty string if there are no fields
|
||||||
|
if (!fields.length) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
var previewHTML = '';
|
||||||
|
var detailsHTML = '';
|
||||||
|
|
||||||
|
// Separate preview and details html parts
|
||||||
for (var i = 0; i < fields.length; i++) {
|
for (var i = 0; i < fields.length; i++) {
|
||||||
var field = fields[i];
|
var field = fields[i];
|
||||||
html += '<dt>' + field.getLabel() + '</dt><dd>' + field.getValue() + '</dd>';
|
var entry = '<div class="h5p-copyright-entry">';
|
||||||
|
if (field.getLabel() === 'Title') {
|
||||||
|
entry += '<span class="h5p-copyright-title">' + field.getValue() + '</span></div>';
|
||||||
|
previewHTML += entry;
|
||||||
|
} else if (field.getLabel() === 'Author') {
|
||||||
|
entry += '<span class="h5p-copyright-label">' + H5P.t('by') + ' </span>' +
|
||||||
|
'<span class="h5p-copyright-value">' + field.getValue() + '</span></div>';
|
||||||
|
previewHTML += entry;
|
||||||
|
} else {
|
||||||
|
entry += '<span class="h5p-copyright-label">' + field.getLabel() + '</span>';
|
||||||
|
|
||||||
|
// Make urls clickable
|
||||||
|
if (field.getLabel() === 'Source') {
|
||||||
|
var urlValidator = /^(https?|ftp):\/\/[^\s/$.?#].[^\s]*$/i;
|
||||||
|
if (urlValidator.test(field.getValue())) {
|
||||||
|
entry += '<span class="h5p-copyright-value">' +
|
||||||
|
'<a href="' + field.getValue() + '" target="_top">' + field.getValue() + '</a>' +
|
||||||
|
'</span></div>';
|
||||||
}
|
}
|
||||||
return (html === '' ? html : '<dl class="h5p-definition-list">' + html + '</dl>');
|
} else {
|
||||||
|
entry += '<span class="h5p-copyright-value">' + field.getValue() + '</span></div>';
|
||||||
|
}
|
||||||
|
detailsHTML += entry;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Generate copyright preview part
|
||||||
|
var html = '<div class="h5p-copyright-preview">' + previewHTML + '</div>';
|
||||||
|
|
||||||
|
// Generate copyright details part
|
||||||
|
html += '<div class="h5p-copyright-details">' + detailsHTML + '</div>';
|
||||||
|
|
||||||
|
// Add expand/collapse button
|
||||||
|
html += '<div role="button" tabindex="0" class="h5p-copyrights-expand-button">' + H5P.t('showMore') + '</div>';
|
||||||
|
|
||||||
|
return '<div class="h5p-copyright-information-wrapper">' + html + '</div>';
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
145
styles/h5p.css
145
styles/h5p.css
|
@ -381,11 +381,6 @@ div.h5p-fullscreen {
|
||||||
.h5p-expander-content p {
|
.h5p-expander-content p {
|
||||||
margin: 0.5em 0;
|
margin: 0.5em 0;
|
||||||
}
|
}
|
||||||
.h5p-content-copyrights {
|
|
||||||
border-left: 0.25em solid #d0d0d0;
|
|
||||||
margin-left: 0.25em;
|
|
||||||
padding-left: 0.25em;
|
|
||||||
}
|
|
||||||
.h5p-throbber {
|
.h5p-throbber {
|
||||||
background: url('../images/throbber.gif?ver=1.2.1') 10px center no-repeat;
|
background: url('../images/throbber.gif?ver=1.2.1') 10px center no-repeat;
|
||||||
padding-left: 38px;
|
padding-left: 38px;
|
||||||
|
@ -396,7 +391,7 @@ div.h5p-fullscreen {
|
||||||
cursor: default;
|
cursor: default;
|
||||||
float: right;
|
float: right;
|
||||||
outline: none;
|
outline: none;
|
||||||
border: 2px solid #ccc;
|
border: 2px solid #ddd;
|
||||||
padding: 0.25em 0.75em 0.125em;
|
padding: 0.25em 0.75em 0.125em;
|
||||||
background: #eee;
|
background: #eee;
|
||||||
}
|
}
|
||||||
|
@ -407,3 +402,141 @@ div.h5p-fullscreen {
|
||||||
.h5p-dialog-ok-button:active {
|
.h5p-dialog-ok-button:active {
|
||||||
background: #eeffee;
|
background: #eeffee;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Copyright dialog styles*/
|
||||||
|
|
||||||
|
/* Copyrights dialog css */
|
||||||
|
.h5p-copyrights-dialog .h5p-copyright-information-wrapper {
|
||||||
|
display: inline-block;
|
||||||
|
padding: 0 1em;
|
||||||
|
vertical-align: top;
|
||||||
|
box-sizing: border-box;
|
||||||
|
width: calc(100% - 85px);
|
||||||
|
|
||||||
|
font-size: 12px;
|
||||||
|
color: #333;
|
||||||
|
line-height: 1.1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Copyright main header */
|
||||||
|
.h5p-copyrights-dialog .h5p-scroll-content > .h5p-content-copyrights > .h5p-content-copyrights.sublevel > .h5p-content-copyrights-label {
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Copyright sub-level */
|
||||||
|
.h5p-copyrights-dialog .h5p-content-copyrights.sublevel .h5p-content-copyrights-label {
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #555;
|
||||||
|
padding: 10px 0;
|
||||||
|
border-bottom: 1px solid #ddd;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Copyright sub-level incremental indent */
|
||||||
|
.h5p-copyrights-dialog .h5p-content-copyrights.sublevel {
|
||||||
|
margin-left: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* No indent for main header */
|
||||||
|
/*.h5p-copyrights-dialog .h5p-scroll-content > .h5p-content-copyrights > .h5p-content-copyrights.sublevel {
|
||||||
|
margin-left: 0;
|
||||||
|
}*/
|
||||||
|
|
||||||
|
/* Media copyright */
|
||||||
|
.h5p-copyrights-dialog .h5p-media-copyright {
|
||||||
|
padding: 10px;
|
||||||
|
border-bottom: 1px solid #ddd;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Thumbnail styles */
|
||||||
|
.h5p-copyrights-dialog .h5p-thumbnail-wrapper {
|
||||||
|
width: 75px;
|
||||||
|
margin-left: 10px;
|
||||||
|
display: inline-block;
|
||||||
|
position: relative;
|
||||||
|
vertical-align: text-top;
|
||||||
|
}
|
||||||
|
|
||||||
|
.h5p-copyrights-dialog .h5p-thumbnail-wrapper .h5p-thumbnail {
|
||||||
|
max-height: 57px;
|
||||||
|
max-width: 75px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Media specific icons */
|
||||||
|
.h5p-copyrights-dialog .h5p-media-copyright .h5p-thumbnail-wrapper:before {
|
||||||
|
font-family: "H5PFontAwesome4";
|
||||||
|
position: absolute;
|
||||||
|
font-size: 1.5em;
|
||||||
|
top: 7px;
|
||||||
|
width: 100%;
|
||||||
|
text-align: center;
|
||||||
|
color: #ccc;
|
||||||
|
}
|
||||||
|
|
||||||
|
.h5p-copyrights-dialog .h5p-media-copyright.video .h5p-thumbnail-wrapper:before {
|
||||||
|
content: "\f1c8";
|
||||||
|
}
|
||||||
|
|
||||||
|
.h5p-copyrights-dialog .h5p-media-copyright.audio .h5p-thumbnail-wrapper:before {
|
||||||
|
content: "\f1c7";
|
||||||
|
}
|
||||||
|
|
||||||
|
.h5p-copyrights-dialog .h5p-media-copyright.file .h5p-thumbnail-wrapper:before {
|
||||||
|
content: "\f016";
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Copyrights entry styles */
|
||||||
|
.h5p-copyrights-dialog .h5p-copyright-entry .h5p-copyright-title {
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.h5p-copyrights-dialog .h5p-copyright-entry .h5p-copyright-label {
|
||||||
|
color: #999;
|
||||||
|
margin-right: 0.2em;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Copyrights expand button */
|
||||||
|
.h5p-copyrights-dialog .h5p-copyright-information-wrapper .h5p-copyrights-expand-button {
|
||||||
|
display: inline-block;
|
||||||
|
cursor: pointer;
|
||||||
|
margin-top: 0.75em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.h5p-copyrights-dialog .h5p-copyright-information-wrapper .h5p-copyrights-expand-button:before {
|
||||||
|
font-family: "H5PFontAwesome4";
|
||||||
|
font-size: 0.85em;
|
||||||
|
content: "\f067";
|
||||||
|
margin-right: 0.25em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.h5p-copyrights-dialog .h5p-copyright-information-wrapper.expand .h5p-copyrights-expand-button:before {
|
||||||
|
content: "\f068";
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Copyright preview */
|
||||||
|
.h5p-copyrights-dialog .h5p-copyright-preview .h5p-copyright-entry {
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.h5p-copyrights-dialog .h5p-copyright-information-wrapper.expand .h5p-copyright-preview .h5p-copyright-entry {
|
||||||
|
overflow: visible;
|
||||||
|
text-overflow: clip;
|
||||||
|
white-space: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Copyright details */
|
||||||
|
.h5p-copyrights-dialog .h5p-copyright-information-wrapper .h5p-copyright-details {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.h5p-copyrights-dialog .h5p-copyright-information-wrapper.expand .h5p-copyright-details {
|
||||||
|
display: block;
|
||||||
|
margin-top: 0.75em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.h5p-copyrights-dialog .h5p-copyright-entry .h5p-copyright-details .h5p-copyright-label:after {
|
||||||
|
content: ":";
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue