diff --git a/README.md b/README.md index ce8c301b..5070cd5d 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@ The player can be set up either by directly calling the already built scripts an const el = document.getElementById('h5p-container'); const options = { - h5pJsonPath: '/h5p-folder'; + h5pJsonPath: '/h5p-folder', frameJs: '/assets/frame.bundle.js', frameCss: '/assets/styles/h5p.css', } @@ -89,8 +89,9 @@ The standalone H5P player constructor accepts two arguments. `frame` |false| A boolean on whether to show frame and buttons below H5P `copyright` |false| A boolean on whether display copyright button `embed` |false| A boolean on whether display embed button -`export` |false| A boolean on whether display a download button +`export` |false| A boolean on whether display a download button. `icon` |false| A boolean on whether display H5P icon +`downloadUrl` |false| A path or a url that returns zipped h5p for download. The link is used by H5P `export` button **Note:** - One can use absolute URL for `frameCss`, `frameJs`, and for other path options(`h5pJsonPath`,`librariesPath`, & `librariesPath`) @@ -115,7 +116,8 @@ const options = { copyright: true, embed: false, 'export': false, - icon: true + icon: true, + downloadUrl: '/path/to/exercise-one.h5p' }; diff --git a/cypress/integration/advance-options.spec.js b/cypress/integration/advance-options.spec.js new file mode 100644 index 00000000..1ecc05cd --- /dev/null +++ b/cypress/integration/advance-options.spec.js @@ -0,0 +1,25 @@ +describe('single', () => { + it('should display h5p', () => { + + cy.visit('test/advance-options.html'); + + cy.get('.h5p-iframe').should(iframe => { + expect(iframe.contents().find('.h5p-content')).to.exist; + + iframe.contents().find('.h5p-true-false-answer').click(); + + iframe.contents().find('.h5p-question-check-answer').click(); + + expect(iframe.contents().find('.h5p-joubelui-score-bar-star')).to.exist; + + expect(iframe.contents().find('.h5p-actions').find('.h5p-export')).to.exist; + + iframe.contents() + .find('.h5p-actions') + .find('.h5p-export') + .click(); + + expect(iframe.contents().find('.h5p-download-button')).to.exist; + }); + }); +}); \ No newline at end of file diff --git a/cypress/plugins/index.js b/cypress/plugins/index.js index fd170fba..bf9caece 100644 --- a/cypress/plugins/index.js +++ b/cypress/plugins/index.js @@ -10,8 +10,73 @@ // This function is called when a project is opened or re-opened (e.g. due to // the project's config changing) +const fs = require('fs'); +const path = require('path'); +const unzipper = require("unzipper"); module.exports = (on, config) => { - // `on` is used to hook into various events Cypress emits - // `config` is the resolved Cypress config + // `on` is used to hook into various events Cypress emits + // `config` is the resolved Cypress config + const workspace = 'test/'; + const h5pFile = 'h5p-test.h5p'; + const extractFolder = 'full_workspace/' + const librariesFolder = 'libraries/' + const contentFolder = 'h5p/' + + + on('task', { + 'unzip:h5p': async () => { + await fs.createReadStream(`${workspace}${h5pFile}`) + .pipe(unzipper.Extract({path: `${workspace}${extractFolder}`})) + .promise(); + return true; + }, + 'copy:libraries': () => { + const H5PLibraries = ['Drop-1.0', 'FontAwesome-4.5', 'H5P.FontIcons-1.0', 'H5P.JoubelUI-1.3', + 'H5P.Question-1.4', 'H5P.Transition-1.0', 'H5P.TrueFalse-1.6', 'H5PEditor.RadioGroup-1.1', + 'H5PEditor.ShowWhen-1.0', 'Tether-1.0']; //reading from H5P.json is most dynamic approach + + H5PLibraries.map((folder) => { + recursiveCopy(`${workspace}${extractFolder}${folder}/`, `${workspace}${librariesFolder}${folder}`) + }); + + return true; + }, + 'copy:content': () => { + recursiveCopy(`${workspace}${extractFolder}content/`, `${workspace}${contentFolder}content`) + return true; + }, + 'copy:h5pjson': () => { + fs.copyFileSync(`${workspace}${extractFolder}h5p.json`, `${workspace}${contentFolder}h5p.json`); + return true; + }, + 'clean': () => { + fs.rmdirSync(`${workspace}${extractFolder}`, {recursive: true}); + fs.rmdirSync(`${workspace}${librariesFolder}`, {recursive: true}); + fs.rmdirSync(`${workspace}${contentFolder}`, {recursive: true}); + + return true; + } + }); + + function recursiveCopy(src, dest) { + const exists = fs.existsSync(src); + if (!exists) { + return; + } + const stats = fs.statSync(src); + const isDirectory = stats.isDirectory(); + + if (isDirectory) { + if (!fs.existsSync(dest)) { + fs.mkdirSync(dest, {recursive: true}); + } + fs.readdirSync(src).forEach((item) => { + recursiveCopy(path.join(src, item), path.join(dest, item)); + }); + } else { + fs.copyFileSync(src, dest); + } + } + } diff --git a/cypress/support/index.js b/cypress/support/index.js index d68db96d..910cbdaf 100644 --- a/cypress/support/index.js +++ b/cypress/support/index.js @@ -16,5 +16,14 @@ // Import commands.js using ES2015 syntax: import './commands' -// Alternatively you can use CommonJS syntax: -// require('./commands') +before( () =>{ + + cy.task('unzip:h5p') // Extract .h5p for tests + .task('copy:libraries') // copy libraries + .task('copy:content') // copy content + .task('copy:h5pjson'); // copy H5P.json file to content folder +}); + +after(()=>{ + cy.task('clean'); //we need to clean up after ourselves +}) \ No newline at end of file diff --git a/dist/main.bundle.js b/dist/main.bundle.js index a6122e4d..f9b43508 100644 --- a/dist/main.bundle.js +++ b/dist/main.bundle.js @@ -1,2 +1,2 @@ /*! For license information please see main.bundle.js.LICENSE.txt */ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports["h5p-standalone"]=t():e.H5PStandalone=t()}(self,(function(){return(()=>{var e={757:(e,t,n)=>{e.exports=n(666)},768:()=>{window.H5PIntegration={l10n:{H5P:{fullscreen:"Fullscreen",disableFullscreen:"Disable fullscreen",download:"Download",copyrights:"Rights of use",embed:"Embed",size:"Size",showAdvanced:"Show advanced",hideAdvanced:"Hide advanced",advancedHelp:"Include this script on your website if you want dynamic sizing of the embedded content:",copyrightInformation:"Rights of use",close:"Close",title:"Title",author:"Author",year:"Year",source:"Source",license:"License",thumbnail:"Thumbnail",noCopyrights:"No copyright information available for this content.",reuse:"Reuse",reuseContent:"Reuse Content",reuseDescription:"Reuse this content.",downloadDescription:"Download this content as a H5P file.",copyrightsDescription:"View copyright information for this content.",embedDescription:"View the embed code for this content.",h5pDescription:"Visit H5P.org to check out more cool content.",contentChanged:"This content has changed since you last used it.",startingOver:"You'll be starting over.",by:"by",showMore:"Show more",showLess:"Show less",subLevel:"Sublevel",confirmDialogHeader:"Confirm action",confirmDialogBody:"Please confirm that you wish to proceed. This action is not reversible.",cancelLabel:"Cancel",confirmLabel:"Confirm",licenseU:"Undisclosed",licenseCCBY:"Attribution",licenseCCBYSA:"Attribution-ShareAlike",licenseCCBYND:"Attribution-NoDerivs",licenseCCBYNC:"Attribution-NonCommercial",licenseCCBYNCSA:"Attribution-NonCommercial-ShareAlike",licenseCCBYNCND:"Attribution-NonCommercial-NoDerivs",licenseCC40:"4.0 International",licenseCC30:"3.0 Unported",licenseCC25:"2.5 Generic",licenseCC20:"2.0 Generic",licenseCC10:"1.0 Generic",licenseGPL:"General Public License",licenseV3:"Version 3",licenseV2:"Version 2",licenseV1:"Version 1",licensePD:"Public Domain",licenseCC010:"CC0 1.0 Universal (CC0 1.0) Public Domain Dedication",licensePDM:"Public Domain Mark",licenseC:"Copyright",contentType:"Content Type",licenseExtras:"License Extras",changes:"Changelog",contentCopied:"Content is copied to the clipboard",connectionLost:"Connection lost. Results will be stored and sent when you regain connection.",connectionReestablished:"Connection reestablished.",resubmitScores:"Attempting to submit stored results.",offlineDialogHeader:"Your connection to the server was lost",offlineDialogBody:"We were unable to send information about your completion of this task. Please check your internet connection.",offlineDialogRetryMessage:"Retrying in :num....",offlineDialogRetryButtonLabel:"Retry now",offlineSuccessfulSubmit:"Successfully submitted results."}}}},666:e=>{var t=function(e){"use strict";var t,n=Object.prototype,r=n.hasOwnProperty,i="function"==typeof Symbol?Symbol:{},o=i.iterator||"@@iterator",a=i.asyncIterator||"@@asyncIterator",s=i.toStringTag||"@@toStringTag";function c(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{c({},"")}catch(e){c=function(e,t,n){return e[t]=n}}function l(e,t,n,r){var i=t&&t.prototype instanceof v?t:v,o=Object.create(i.prototype),a=new A(r||[]);return o._invoke=function(e,t,n){var r=d;return function(i,o){if(r===p)throw new Error("Generator is already running");if(r===h){if("throw"===i)throw o;return I()}for(n.method=i,n.arg=o;;){var a=n.delegate;if(a){var s=S(a,n);if(s){if(s===g)continue;return s}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(r===d)throw r=h,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r=p;var c=u(e,t,n);if("normal"===c.type){if(r=n.done?h:f,c.arg===g)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(r=h,n.method="throw",n.arg=c.arg)}}}(e,n,a),o}function u(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=l;var d="suspendedStart",f="suspendedYield",p="executing",h="completed",g={};function v(){}function y(){}function m(){}var b={};b[o]=function(){return this};var x=Object.getPrototypeOf,w=x&&x(x(D([])));w&&w!==n&&r.call(w,o)&&(b=w);var C=m.prototype=v.prototype=Object.create(b);function P(e){["next","throw","return"].forEach((function(t){c(e,t,(function(e){return this._invoke(t,e)}))}))}function T(e,t){function n(i,o,a,s){var c=u(e[i],e,o);if("throw"!==c.type){var l=c.arg,d=l.value;return d&&"object"==typeof d&&r.call(d,"__await")?t.resolve(d.__await).then((function(e){n("next",e,a,s)}),(function(e){n("throw",e,a,s)})):t.resolve(d).then((function(e){l.value=e,a(l)}),(function(e){return n("throw",e,a,s)}))}s(c.arg)}var i;this._invoke=function(e,r){function o(){return new t((function(t,i){n(e,r,t,i)}))}return i=i?i.then(o,o):o()}}function S(e,n){var r=e.iterator[n.method];if(r===t){if(n.delegate=null,"throw"===n.method){if(e.iterator.return&&(n.method="return",n.arg=t,S(e,n),"throw"===n.method))return g;n.method="throw",n.arg=new TypeError("The iterator does not provide a 'throw' method")}return g}var i=u(r,e.iterator,n.arg);if("throw"===i.type)return n.method="throw",n.arg=i.arg,n.delegate=null,g;var o=i.arg;return o?o.done?(n[e.resultName]=o.value,n.next=e.nextLoc,"return"!==n.method&&(n.method="next",n.arg=t),n.delegate=null,g):o:(n.method="throw",n.arg=new TypeError("iterator result is not an object"),n.delegate=null,g)}function E(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function k(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function A(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(E,this),this.reset(!0)}function D(e){if(e){var n=e[o];if(n)return n.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var i=-1,a=function n(){for(;++i=0;--o){var a=this.tryEntries[o],s=a.completion;if("root"===a.tryLoc)return i("end");if(a.tryLoc<=this.prev){var c=r.call(a,"catchLoc"),l=r.call(a,"finallyLoc");if(c&&l){if(this.prev=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),k(n),g}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var i=r.arg;k(n)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(e,n,r){return this.delegate={iterator:D(e),resultName:n,nextLoc:r},"next"===this.method&&(this.arg=t),g}},e}(e.exports);try{regeneratorRuntime=t}catch(e){Function("r","regeneratorRuntime = r")(t)}},714:function(e,t){var n,r;void 0===(r="function"==typeof(n=function(e,t){"use strict";var n=function(){function e(){(function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")})(this,e),this.edges=[],this.Toposort=e}return e.prototype.add=function(e,t){if("string"!=typeof e||!e)throw new TypeError("Dependent name must be given as a not empty string");if((t=Array.isArray(t)?t:[t]).length>0){var n=t,r=Array.isArray(n),i=0;for(n=r?n:n[Symbol.iterator]();;){var o;if(r){if(i>=n.length)break;o=n[i++]}else{if((i=n.next()).done)break;o=i.value}var a=o;if("string"!=typeof a||!a)throw new TypeError("Dependency name must be given as a not empty string");this.edges.push([e,a])}}else this.edges.push([e]);return this},e.prototype.sort=function(){var e=this,t=[],n=this.edges,r=Array.isArray(n),i=0;for(n=r?n:n[Symbol.iterator]();;){var o;if(r){if(i>=n.length)break;o=n[i++]}else{if((i=n.next()).done)break;o=i.value}var a=b=o,s=Array.isArray(a),c=0;for(a=s?a:a[Symbol.iterator]();;){var l;if(s){if(c>=a.length)break;l=a[c++]}else{if((c=a.next()).done)break;l=c.value}var u=l;-1===t.indexOf(u)&&t.push(u)}}for(var d=t.length,f=new Array(t.length),p=function n(r,i){if(0!==i.length&&-1!==i.indexOf(r))throw new Error("Cyclic dependency found. "+r+" is dependent of itself.\nDependency chain: "+i.join(" -> ")+" => "+r);var o=t.indexOf(r);if(-1!==o){var a=!1;t[o]=!1;var s=e.edges,c=Array.isArray(s),l=0;for(s=c?s:s[Symbol.iterator]();;){var u;if(c){if(l>=s.length)break;u=s[l++]}else{if((l=s.next()).done)break;u=l.value}var p=u;p[0]===r&&(a=a||i.concat([r]),n(p[1],a))}f[--d]=r}},h=0;h=g.length)break;m=g[y++]}else{if((y=g.next()).done)break;m=y.value}(b=m)[0]===u&&p(b[1],[u])}f[--d]=u}return f},e.prototype.clear=function(){return this.edges=[],this},e}();t.exports=n})?n.apply(t,[t,e]):n)||(e.exports=r)},295:(e,t,n)=>{e.exports=n(714)},798:()=>{H5P.ContentType=function(e){function t(){}return t.prototype=new H5P.EventDispatcher,t.prototype.isRoot=function(){return e},t.prototype.getLibraryFilePath=function(e){return H5P.getLibraryPath(this.libraryInfo.versionedNameNoSpaces)+"/"+e},t}},449:()=>{var e=window.H5P=window.H5P||{};e.Event=function(e,t,n){this.type=e,this.data=t;var r=!1,i=!1,o=!1;void 0===n&&(n={}),!0===n.bubbles&&(r=!0),!0===n.external&&(i=!0),this.preventBubbling=function(){r=!1},this.getBubbles=function(){return r},this.scheduleForExternal=function(){return!(!i||o||(o=!0,0))}},e.EventDispatcher=function(){var t=this,n={};this.on=function(e,r,i){if("function"!=typeof r)throw TypeError("listener must be a function");t.trigger("newListener",{type:e,listener:r});var o={listener:r,thisArg:i};n[e]?n[e].push(o):n[e]=[o]},this.once=function(e,n,r){if(!(n instanceof Function))throw TypeError("listener must be a function");var i=function(e){t.off(e.type,i),n.call(this,e)};t.on(e,i,r)},this.off=function(e,r){if(void 0!==r&&!(r instanceof Function))throw TypeError("listener must be a function");if(void 0!==n[e]){if(void 0===r)return delete n[e],void t.trigger("removeListener",e);for(var i=0;i{var e=window.H5P=window.H5P||{};e.XAPIEvent=function(){e.Event.call(this,"xAPI",{statement:{}},{bubbles:!0,external:!0})},e.XAPIEvent.prototype=Object.create(e.Event.prototype),e.XAPIEvent.prototype.constructor=e.XAPIEvent,e.XAPIEvent.prototype.setScoredResult=function(e,t,n,r,i){if(this.data.statement.result={},void 0!==e&&(void 0===t?this.data.statement.result.score={raw:e}:(this.data.statement.result.score={min:0,max:t,raw:e},t>0&&(this.data.statement.result.score.scaled=Math.round(e/t*1e4)/1e4))),this.data.statement.result.completion=void 0===r?"completed"===this.getVerb()||"answered"===this.getVerb():r,void 0!==i&&(this.data.statement.result.success=i),n&&n.activityStartTime){var o=Math.round((Date.now()-n.activityStartTime)/10)/100;this.data.statement.result.duration="PT"+o+"S"}},e.XAPIEvent.prototype.setVerb=function(t){-1!==e.jQuery.inArray(t,e.XAPIEvent.allowedXAPIVerbs)?this.data.statement.verb={id:"http://adlnet.gov/expapi/verbs/"+t,display:{"en-US":t}}:void 0!==t.id&&(this.data.statement.verb=t)},e.XAPIEvent.prototype.getVerb=function(e){var t=this.data.statement;return"verb"in t?!0===e?t.verb:t.verb.id.slice(31):null},e.XAPIEvent.prototype.setObject=function(t){if(t.contentId)if(this.data.statement.object={id:this.getContentXAPIId(t),objectType:"Activity",definition:{extensions:{"http://h5p.org/x-api/h5p-local-content-id":t.contentId}}},t.subContentId)this.data.statement.object.definition.extensions["http://h5p.org/x-api/h5p-subContentId"]=t.subContentId,"function"==typeof t.getTitle&&(this.data.statement.object.definition.name={"en-US":t.getTitle()});else{var n=e.getContentForInstance(t.contentId);n&&n.metadata&&n.metadata.title&&(this.data.statement.object.definition.name={"en-US":e.createTitle(n.metadata.title)})}else this.data.statement.object={definition:{}}},e.XAPIEvent.prototype.setContext=function(e){e.parent&&(e.parent.contentId||e.parent.subContentId)&&(this.data.statement.context={contextActivities:{parent:[{id:this.getContentXAPIId(e.parent),objectType:"Activity"}]}}),e.libraryInfo&&(void 0===this.data.statement.context&&(this.data.statement.context={contextActivities:{}}),this.data.statement.context.contextActivities.category=[{id:"http://h5p.org/libraries/"+e.libraryInfo.versionedNameNoSpaces,objectType:"Activity"}])},e.XAPIEvent.prototype.setActor=function(){if(void 0!==H5PIntegration.user)this.data.statement.actor={name:H5PIntegration.user.name,mbox:"mailto:"+H5PIntegration.user.mail,objectType:"Agent"};else{var t;try{localStorage.H5PUserUUID?t=localStorage.H5PUserUUID:(t=e.createUUID(),localStorage.H5PUserUUID=t)}catch(n){t="not-trackable-"+e.createUUID()}this.data.statement.actor={account:{name:t,homePage:H5PIntegration.siteUrl},objectType:"Agent"}}},e.XAPIEvent.prototype.getMaxScore=function(){return this.getVerifiedStatementValue(["result","score","max"])},e.XAPIEvent.prototype.getScore=function(){return this.getVerifiedStatementValue(["result","score","raw"])},e.XAPIEvent.prototype.getContentXAPIId=function(e){var t;return e.contentId&&H5PIntegration&&H5PIntegration.contents&&H5PIntegration.contents["cid-"+e.contentId]&&(t=H5PIntegration.contents["cid-"+e.contentId].url,e.subContentId&&(t+="?subContentId="+e.subContentId)),t},e.XAPIEvent.prototype.isFromChild=function(){var e=this.getVerifiedStatementValue(["context","contextActivities","parent",0,"id"]);return!e||-1===e.indexOf("subContentId")},e.XAPIEvent.prototype.getVerifiedStatementValue=function(e){for(var t=this.data.statement,n=0;n{var e=window.H5P=window.H5P||{};e.externalDispatcher=new e.EventDispatcher,e.EventDispatcher.prototype.triggerXAPI=function(e,t){this.trigger(this.createXAPIEventTemplate(e,t))},e.EventDispatcher.prototype.createXAPIEventTemplate=function(t,n){var r=new e.XAPIEvent;if(r.setActor(),r.setVerb(t),void 0!==n)for(var i in n)r.data.statement[i]=n[i];return"object"in r.data.statement||r.setObject(this),"context"in r.data.statement||r.setContext(this),r},e.EventDispatcher.prototype.triggerXAPICompleted=function(e,t,n){this.triggerXAPIScored(e,t,"completed",!0,n)},e.EventDispatcher.prototype.triggerXAPIScored=function(e,t,n,r,i){var o=this.createXAPIEventTemplate(n);o.setScoredResult(e,t,this,r,i),this.trigger(o)},e.EventDispatcher.prototype.setActivityStarted=function(){void 0===this.activityStartTime&&(void 0!==this.contentId&&void 0!==H5PIntegration.contents&&void 0!==H5PIntegration.contents["cid-"+this.contentId]&&this.triggerXAPI("attempted"),this.activityStartTime=Date.now())},e.xAPICompletedListener=function(t){if(("completed"===t.getVerb()||"answered"===t.getVerb())&&!t.getVerifiedStatementValue(["context","contextActivities","parent"])){var n=t.getScore(),r=t.getMaxScore(),i=t.getVerifiedStatementValue(["object","definition","extensions","http://h5p.org/x-api/h5p-local-content-id"]);e.setFinished(i,n,r)}}},357:function(e,t){var n;!function(t,n){"use strict";"object"==typeof e.exports?e.exports=t.document?n(t,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return n(e)}:n(t)}("undefined"!=typeof window?window:this,(function(r,i){"use strict";var o=[],a=Object.getPrototypeOf,s=o.slice,c=o.flat?function(e){return o.flat.call(e)}:function(e){return o.concat.apply([],e)},l=o.push,u=o.indexOf,d={},f=d.toString,p=d.hasOwnProperty,h=p.toString,g=h.call(Object),v={},y=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},m=function(e){return null!=e&&e===e.window},b=r.document,x={type:!0,src:!0,nonce:!0,noModule:!0};function w(e,t,n){var r,i,o=(n=n||b).createElement("script");if(o.text=e,t)for(r in x)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function C(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?d[f.call(e)]||"object":typeof e}var P="3.5.1",T=function(e,t){return new T.fn.init(e,t)};function S(e){var t=!!e&&"length"in e&&e.length,n=C(e);return!y(e)&&!m(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+F+")"+F+"*"),_=new RegExp(F+"|>"),X=new RegExp(B),W=new RegExp("^"+R+"$"),Q={ID:new RegExp("^#("+R+")"),CLASS:new RegExp("^\\.("+R+")"),TAG:new RegExp("^("+R+"|[*])"),ATTR:new RegExp("^"+M),PSEUDO:new RegExp("^"+B),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+F+"*(even|odd|(([+-]|)(\\d*)n|)"+F+"*(?:([+-]|)"+F+"*(\\d+)|))"+F+"*\\)|)","i"),bool:new RegExp("^(?:"+q+")$","i"),needsContext:new RegExp("^"+F+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+F+"*((?:-\\d)?\\d*)"+F+"*\\)|)(?=[^-]|$)","i")},J=/HTML$/i,Y=/^(?:input|select|textarea|button)$/i,G=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+F+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"�":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){f()},ae=xe((function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()}),{dir:"parentNode",next:"legend"});try{N.apply(I=L.call(w.childNodes),w.childNodes),I[w.childNodes.length].nodeType}catch(t){N={apply:I.length?function(e,t){H.apply(e,L.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}function se(e,t,r,i){var o,s,l,u,d,h,y,m=t&&t.ownerDocument,w=t?t.nodeType:9;if(r=r||[],"string"!=typeof e||!e||1!==w&&9!==w&&11!==w)return r;if(!i&&(f(t),t=t||p,g)){if(11!==w&&(d=Z.exec(e)))if(o=d[1]){if(9===w){if(!(l=t.getElementById(o)))return r;if(l.id===o)return r.push(l),r}else if(m&&(l=m.getElementById(o))&&b(t,l)&&l.id===o)return r.push(l),r}else{if(d[2])return N.apply(r,t.getElementsByTagName(e)),r;if((o=d[3])&&n.getElementsByClassName&&t.getElementsByClassName)return N.apply(r,t.getElementsByClassName(o)),r}if(n.qsa&&!k[e+" "]&&(!v||!v.test(e))&&(1!==w||"object"!==t.nodeName.toLowerCase())){if(y=e,m=t,1===w&&(_.test(e)||$.test(e))){for((m=ee.test(e)&&ye(t.parentNode)||t)===t&&n.scope||((u=t.getAttribute("id"))?u=u.replace(re,ie):t.setAttribute("id",u=x)),s=(h=a(e)).length;s--;)h[s]=(u?"#"+u:":scope")+" "+be(h[s]);y=h.join(",")}try{return N.apply(r,m.querySelectorAll(y)),r}catch(t){k(e,!0)}finally{u===x&&t.removeAttribute("id")}}}return c(e.replace(V,"$1"),t,r,i)}function ce(){var e=[];return function t(n,i){return e.push(n+" ")>r.cacheLength&&delete t[e.shift()],t[n+" "]=i}}function le(e){return e[x]=!0,e}function ue(e){var t=p.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function de(e,t){for(var n=e.split("|"),i=n.length;i--;)r.attrHandle[n[i]]=t}function fe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function pe(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function he(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function ge(e){return function(t){return"form"in t?t.parentNode&&!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&ae(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function ve(e){return le((function(t){return t=+t,le((function(n,r){for(var i,o=e([],n.length,t),a=o.length;a--;)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))}))}))}function ye(e){return e&&void 0!==e.getElementsByTagName&&e}for(t in n=se.support={},o=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!J.test(t||n&&n.nodeName||"HTML")},f=se.setDocument=function(e){var t,i,a=e?e.ownerDocument||e:w;return a!=p&&9===a.nodeType&&a.documentElement&&(h=(p=a).documentElement,g=!o(p),w!=p&&(i=p.defaultView)&&i.top!==i&&(i.addEventListener?i.addEventListener("unload",oe,!1):i.attachEvent&&i.attachEvent("onunload",oe)),n.scope=ue((function(e){return h.appendChild(e).appendChild(p.createElement("div")),void 0!==e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length})),n.attributes=ue((function(e){return e.className="i",!e.getAttribute("className")})),n.getElementsByTagName=ue((function(e){return e.appendChild(p.createComment("")),!e.getElementsByTagName("*").length})),n.getElementsByClassName=K.test(p.getElementsByClassName),n.getById=ue((function(e){return h.appendChild(e).id=x,!p.getElementsByName||!p.getElementsByName(x).length})),n.getById?(r.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},r.find.ID=function(e,t){if(void 0!==t.getElementById&&g){var n=t.getElementById(e);return n?[n]:[]}}):(r.filter.ID=function(e){var t=e.replace(te,ne);return function(e){var n=void 0!==e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},r.find.ID=function(e,t){if(void 0!==t.getElementById&&g){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];for(i=t.getElementsByName(e),r=0;o=i[r++];)if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),r.find.TAG=n.getElementsByTagName?function(e,t){return void 0!==t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){for(;n=o[i++];)1===n.nodeType&&r.push(n);return r}return o},r.find.CLASS=n.getElementsByClassName&&function(e,t){if(void 0!==t.getElementsByClassName&&g)return t.getElementsByClassName(e)},y=[],v=[],(n.qsa=K.test(p.querySelectorAll))&&(ue((function(e){var t;h.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+F+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+F+"*(?:value|"+q+")"),e.querySelectorAll("[id~="+x+"-]").length||v.push("~="),(t=p.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+F+"*name"+F+"*="+F+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+x+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")})),ue((function(e){e.innerHTML="";var t=p.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+F+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),h.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")}))),(n.matchesSelector=K.test(m=h.matches||h.webkitMatchesSelector||h.mozMatchesSelector||h.oMatchesSelector||h.msMatchesSelector))&&ue((function(e){n.disconnectedMatch=m.call(e,"*"),m.call(e,"[s!='']:x"),y.push("!=",B)})),v=v.length&&new RegExp(v.join("|")),y=y.length&&new RegExp(y.join("|")),t=K.test(h.compareDocumentPosition),b=t||K.test(h.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},A=t?function(e,t){if(e===t)return d=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(1&(r=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached&&t.compareDocumentPosition(e)===r?e==p||e.ownerDocument==w&&b(w,e)?-1:t==p||t.ownerDocument==w&&b(w,t)?1:u?O(u,e)-O(u,t):0:4&r?-1:1)}:function(e,t){if(e===t)return d=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==p?-1:t==p?1:i?-1:o?1:u?O(u,e)-O(u,t):0;if(i===o)return fe(e,t);for(n=e;n=n.parentNode;)a.unshift(n);for(n=t;n=n.parentNode;)s.unshift(n);for(;a[r]===s[r];)r++;return r?fe(a[r],s[r]):a[r]==w?-1:s[r]==w?1:0}),p},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(f(e),n.matchesSelector&&g&&!k[t+" "]&&(!y||!y.test(t))&&(!v||!v.test(t)))try{var r=m.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){k(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return Q.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=a(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=T[e+" "];return t||(t=new RegExp("(^|"+F+")"+e+"("+F+"|$)"))&&T(e,(function(e){return t.test("string"==typeof e.className&&e.className||void 0!==e.getAttribute&&e.getAttribute("class")||"")}))},ATTR:function(e,t,n){return function(r){var i=se.attr(r,e);return null==i?"!="===t:!t||(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function H(e,t,n){return y(t)?T.grep(e,(function(e,r){return!!t.call(e,r,e)!==n})):t.nodeType?T.grep(e,(function(e){return e===t!==n})):"string"!=typeof t?T.grep(e,(function(e){return-1)[^>]*|#([\w-]+))$/;(T.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||N,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:L.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof T?t[0]:t,T.merge(this,T.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:b,!0)),j.test(r[1])&&T.isPlainObject(t))for(r in t)y(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=b.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):y(e)?void 0!==n.ready?n.ready(e):e(T):T.makeArray(e,this)}).prototype=T.fn,N=T(b);var O=/^(?:parents|prev(?:Until|All))/,q={children:!0,contents:!0,next:!0,prev:!0};function F(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}T.fn.extend({has:function(e){var t=T(e,this),n=t.length;return this.filter((function(){for(var e=0;e\x20\t\r\n\f]*)/i,ye=/^$|^module$|\/(?:java|ecma)script/i;pe=b.createDocumentFragment().appendChild(b.createElement("div")),(he=b.createElement("input")).setAttribute("type","radio"),he.setAttribute("checked","checked"),he.setAttribute("name","t"),pe.appendChild(he),v.checkClone=pe.cloneNode(!0).cloneNode(!0).lastChild.checked,pe.innerHTML="",v.noCloneChecked=!!pe.cloneNode(!0).lastChild.defaultValue,pe.innerHTML="",v.option=!!pe.lastChild;var me={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function be(e,t){var n;return n=void 0!==e.getElementsByTagName?e.getElementsByTagName(t||"*"):void 0!==e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&I(e,t)?T.merge([e],n):n}function xe(e,t){for(var n=0,r=e.length;n",""]);var we=/<|&#?\w+;/;function Ce(e,t,n,r,i){for(var o,a,s,c,l,u,d=t.createDocumentFragment(),f=[],p=0,h=e.length;p\s*$/g;function Le(e,t){return I(e,"table")&&I(11!==t.nodeType?t:t.firstChild,"tr")&&T(e).children("tbody")[0]||e}function Oe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Fe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(K.hasData(e)&&(s=K.get(e).events))for(i in K.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(e.scriptAttrs||{}).prop({charset:e.scriptCharset,src:e.url}).on("load error",n=function(e){t.remove(),n=null,e&&i("error"===e.type?404:200,e.type)}),b.head.appendChild(t[0])},abort:function(){n&&n()}}}));var Qt,Jt=[],Yt=/(=)\?(?=&|$)|\?\?/;T.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Jt.pop()||T.expando+"_"+Et.guid++;return this[e]=!0,e}}),T.ajaxPrefilter("json jsonp",(function(e,t,n){var i,o,a,s=!1!==e.jsonp&&(Yt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Yt.test(e.data)&&"data");if(s||"jsonp"===e.dataTypes[0])return i=e.jsonpCallback=y(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,s?e[s]=e[s].replace(Yt,"$1"+i):!1!==e.jsonp&&(e.url+=(kt.test(e.url)?"&":"?")+e.jsonp+"="+i),e.converters["script json"]=function(){return a||T.error(i+" was not called"),a[0]},e.dataTypes[0]="json",o=r[i],r[i]=function(){a=arguments},n.always((function(){void 0===o?T(r).removeProp(i):r[i]=o,e[i]&&(e.jsonpCallback=t.jsonpCallback,Jt.push(i)),a&&y(o)&&o(a[0]),a=o=void 0})),"script"})),v.createHTMLDocument=((Qt=b.implementation.createHTMLDocument("").body).innerHTML="
",2===Qt.childNodes.length),T.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(v.createHTMLDocument?((r=(t=b.implementation.createHTMLDocument("")).createElement("base")).href=b.location.href,t.head.appendChild(r)):t=b),o=!n&&[],(i=j.exec(e))?[t.createElement(i[1])]:(i=Ce([e],t,o),o&&o.length&&T(o).remove(),T.merge([],i.childNodes)));var r,i,o},T.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(T.parseHTML(e)).find(r):e)})).always(n&&function(e,t){a.each((function(){n.apply(this,o||[e.responseText,t,e])}))}),this},T.expr.pseudos.animated=function(e){return T.grep(T.timers,(function(t){return e===t.elem})).length},T.offset={setOffset:function(e,t,n){var r,i,o,a,s,c,l=T.css(e,"position"),u=T(e),d={};"static"===l&&(e.style.position="relative"),s=u.offset(),o=T.css(e,"top"),c=T.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+c).indexOf("auto")?(a=(r=u.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(c)||0),y(t)&&(t=t.call(e,n,T.extend({},s))),null!=t.top&&(d.top=t.top-s.top+a),null!=t.left&&(d.left=t.left-s.left+i),"using"in t?t.using.call(e,d):("number"==typeof d.top&&(d.top+="px"),"number"==typeof d.left&&(d.left+="px"),u.css(d))}},T.fn.extend({offset:function(e){if(arguments.length)return void 0===e?this:this.each((function(t){T.offset.setOffset(this,e,t)}));var t,n,r=this[0];return r?r.getClientRects().length?(t=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:t.top+n.pageYOffset,left:t.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===T.css(r,"position"))t=r.getBoundingClientRect();else{for(t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;e&&(e===n.body||e===n.documentElement)&&"static"===T.css(e,"position");)e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=T(e).offset()).top+=T.css(e,"borderTopWidth",!0),i.left+=T.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-T.css(r,"marginTop",!0),left:t.left-i.left-T.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map((function(){for(var e=this.offsetParent;e&&"static"===T.css(e,"position");)e=e.offsetParent;return e||ae}))}}),T.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},(function(e,t){var n="pageYOffset"===t;T.fn[e]=function(r){return _(this,(function(e,r,i){var o;if(m(e)?o=e:9===e.nodeType&&(o=e.defaultView),void 0===i)return o?o[t]:e[r];o?o.scrollTo(n?o.pageXOffset:i,n?i:o.pageYOffset):e[r]=i}),e,r,arguments.length)}})),T.each(["top","left"],(function(e,t){T.cssHooks[t]=_e(v.pixelPosition,(function(e,n){if(n)return n=$e(e,t),Be.test(n)?T(e).position()[t]+"px":n}))})),T.each({Height:"height",Width:"width"},(function(e,t){T.each({padding:"inner"+e,content:t,"":"outer"+e},(function(n,r){T.fn[r]=function(i,o){var a=arguments.length&&(n||"boolean"!=typeof i),s=n||(!0===i||!0===o?"margin":"border");return _(this,(function(t,n,i){var o;return m(t)?0===r.indexOf("outer")?t["inner"+e]:t.document.documentElement["client"+e]:9===t.nodeType?(o=t.documentElement,Math.max(t.body["scroll"+e],o["scroll"+e],t.body["offset"+e],o["offset"+e],o["client"+e])):void 0===i?T.css(t,n,s):T.style(t,n,i,s)}),t,a?i:void 0,a)}}))})),T.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],(function(e,t){T.fn[t]=function(e){return this.on(t,e)}})),T.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),T.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),(function(e,t){T.fn[t]=function(e,n){return 0{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);var r={};return(()=>{"use strict";function e(e,t,n,r,i,o,a){try{var s=e[o](a),c=s.value}catch(e){return void n(e)}s.done?t(c):Promise.resolve(c).then(r,i)}function t(t){return function(){var n=this,r=arguments;return new Promise((function(i,o){var a=t.apply(n,r);function s(t){e(a,i,o,s,c,"next",t)}function c(t){e(a,i,o,s,c,"throw",t)}s(void 0)}))}}function i(e,t){for(var n=0;ng}),n(768);var o=n(757),a=n.n(o),s=n(295),c=n.n(s),l=n(357),u=n.n(l),d=window.H5P=window.H5P||{};d.jQuery=u().noConflict(!0),d.jQuery.fn.__originalLoad=d.jQuery.load,d.jQuery.fn.load=function(e,t,n){if("function"==typeof e){console.warn("You are using a deprecated H5P library. Please upgrade!");let e=Array.prototype.slice.call(arguments);return e.unshift("load"),d.jQuery.fn.on.apply(this,e)}return d.jQuery.fn.__originalLoad.apply(this,arguments)},d.isFramed=window.self!==window.parent,d.$window=d.jQuery(window),d.instances=[],document.documentElement.requestFullScreen?d.fullScreenBrowserPrefix="":document.documentElement.webkitRequestFullScreen?(d.safariBrowser=navigator.userAgent.match(/version\/([.\d]+)/i),d.safariBrowser=null===d.safariBrowser?0:parseInt(d.safariBrowser[1]),(0===d.safariBrowser||d.safariBrowser>6)&&(d.fullScreenBrowserPrefix="webkit")):document.documentElement.mozRequestFullScreen?d.fullScreenBrowserPrefix="moz":document.documentElement.msRequestFullscreen&&(d.fullScreenBrowserPrefix="ms"),d.opened={},d.init=function(e){void 0===d.$body&&(d.$body=d.jQuery(document.body)),void 0===d.fullscreenSupported&&(d.fullscreenSupported=!(H5PIntegration.fullscreenDisabled||d.fullscreenDisabled||d.isFramed&&!1!==d.externalEmbed&&!(document.fullscreenEnabled||document.webkitFullscreenEnabled||document.mozFullScreenEnabled))),void 0===d.canHasFullScreen&&(d.canHasFullScreen=d.fullscreenSupported),d.jQuery(".h5p-content:not(.h5p-initialized)",e).each((function(){var e=d.jQuery(this).addClass("h5p-initialized"),t=d.jQuery('
').appendTo(e),n=e.data("content-id"),r=H5PIntegration.contents["cid-"+n];if(void 0===r)return d.error("No data for content id "+n+". Perhaps the library is gone?");var i={library:r.library,params:JSON.parse(r.jsonContent),metadata:r.metadata};d.getUserData(n,"state",(function(e,a){if(a)i.userDatas={state:a};else if(null===a&&H5PIntegration.saveFreq){delete r.contentUserData;var s=new d.Dialog("content-user-data-reset","Data Reset","

"+d.t("contentChanged")+"

"+d.t("startingOver")+'

OK
',t);d.jQuery(s).on("dialog-opened",(function(e,t){var r=function(e){"click"!==e.type&&32!==e.which||(s.close(),d.deleteUserData(n,"state",0))};t.find(".h5p-dialog-ok-button").click(r).keypress(r),d.trigger(o,"resize")})).on("dialog-closed",(function(){d.trigger(o,"resize")})),s.open()}}));var o=d.newRunnable(i,n,t,!0,{standalone:!0});d.offlineRequestQueue=new d.OfflineRequestQueue({instance:o}),1==r.fullScreen&&d.fullscreenSupported&&d.jQuery('
').prependTo(t).children().click((function(){d.fullScreen(t,o)})).keydown((function(e){if(32===e.which||13===e.which)return d.fullScreen(t,o),!1}));var a,s=r.displayOptions,c=!1;if(s.frame){if(s.copyright){var l=d.getCopyrights(o,i.params,n,i.metadata);l||(s.copyright=!1)}var u=new d.ActionBar(s),f=u.getDOMElement();u.on("reuse",(function(){d.openReuseDialog(f,r,i,o,n),o.triggerXAPI("accessed-reuse")})),u.on("copyrights",(function(){new d.Dialog("copyrights",d.t("copyrightInformation"),l,t).open(!0),o.triggerXAPI("accessed-copyright")})),u.on("embed",(function(){d.openEmbedDialog(f,r.embedCode,r.resizeCode,{width:e.width(),height:e.height()},o),o.triggerXAPI("accessed-embed")})),u.hasActions()&&(c=!0,f.insertAfter(t))}if(e.addClass(c?"h5p-frame":"h5p-no-frame"),d.opened[n]=new Date,d.on(o,"finish",(function(e){void 0!==e.data&&d.setFinished(n,e.data.score,e.data.maxScore,e.data.time)})),d.on(o,"xAPI",d.xAPICompletedListener),!1!==H5PIntegration.saveFreq&&(o.getCurrentState instanceof Function||"function"==typeof o.getCurrentState)){var p,h=function(){var e=o.getCurrentState();void 0!==e&&d.setUserData(n,"state",e,{deleteOnChange:!0}),H5PIntegration.saveFreq&&(p=setTimeout(h,1e3*H5PIntegration.saveFreq))};H5PIntegration.saveFreq&&(p=setTimeout(h,1e3*H5PIntegration.saveFreq)),d.on(o,"xAPI",(function(e){var t=e.getVerb();"completed"!==t&&"progressed"!==t||(clearTimeout(p),p=setTimeout(h,3e3))}))}if(d.isFramed)if(!1===d.externalEmbed){var g=window.frameElement;d.on(o,"resize",(function(){clearTimeout(a),a=setTimeout((function(){!function(){if(!window.parent.H5P.isFullscreen){var e=g.parentElement.style.height;g.parentElement.style.height=g.parentElement.clientHeight+"px",g.getBoundingClientRect(),g.style.height="1px",g.style.height=g.contentDocument.body.scrollHeight+"px",g.parentElement.style.height=e}}()}),1)}))}else if(d.communicator){var v=!1;d.communicator.on("ready",(function(){d.communicator.send("hello")})),d.communicator.on("hello",(function(){v=!0,document.body.style.height="auto",document.body.style.overflow="hidden",d.trigger(o,"resize")})),d.communicator.on("resizePrepared",(function(){d.communicator.send("resize",{scrollHeight:document.body.scrollHeight})})),d.communicator.on("resize",(function(){d.trigger(o,"resize")})),d.on(o,"resize",(function(){d.isFullscreen||(clearTimeout(a),a=setTimeout((function(){v?d.communicator.send("prepareResize",{scrollHeight:document.body.scrollHeight,clientHeight:document.body.clientHeight}):d.communicator.send("hello")}),0))}))}d.isFramed&&!1!==d.externalEmbed||d.jQuery(window.parent).resize((function(){window.parent.H5P.isFullscreen,d.trigger(o,"resize")})),d.instances.push(o),d.trigger(o,"resize"),e.addClass("using-mouse"),e.on("mousedown keydown keyup",(function(t){e.toggleClass("using-mouse","mousedown"===t.type)})),d.externalDispatcher&&d.externalDispatcher.trigger("initialized")})),d.jQuery("iframe.h5p-iframe:not(.h5p-initialized)",e).each((function(){var e=d.jQuery(this).addClass("h5p-initialized").data("content-id");const t=H5PIntegration.contents["cid-"+e],n=t&&t.metadata&&t.metadata.defaultLanguage?t.metadata.defaultLanguage:"en";this.contentDocument.open(),this.contentDocument.write(''+d.getHeadTags(e)+'
'),this.contentDocument.close()}))},d.getHeadTags=function(e){var t=function(e){for(var t="",n=0;n';return t},n=function(e){for(var t="",n=0;n<\/script>';return t};return''+t(H5PIntegration.core.styles)+t(H5PIntegration.contents["cid-"+e].styles)+n(H5PIntegration.core.scripts)+n(H5PIntegration.contents["cid-"+e].scripts)+" + + + +
+ + + + + \ No newline at end of file diff --git a/test/full_workspace/Drop-1.0/css/drop-theme-arrows-bounce.min.css b/test/full_workspace/Drop-1.0/css/drop-theme-arrows-bounce.min.css deleted file mode 100644 index c5c80302..00000000 --- a/test/full_workspace/Drop-1.0/css/drop-theme-arrows-bounce.min.css +++ /dev/null @@ -1 +0,0 @@ -.drop-element,.drop-element *,.drop-element :after,.drop-element :before,.drop-element:after,.drop-element:before{box-sizing:border-box}.drop-element{position:absolute;display:none}.drop-element.drop-open{display:block}.drop-element.drop-theme-arrows-bounce .drop-content{border-radius:5px;position:relative;font-family:inherit;background:#fff;color:#444;padding:1em;font-size:1.1em;line-height:1.5em;-webkit-transform:translateZ(0);transform:translateZ(0);-webkit-filter:drop-shadow(0 1px 4px rgba(0, 0, 0, .2));filter:drop-shadow(0 1px 4px rgba(0, 0, 0, .2))}.drop-element.drop-theme-arrows-bounce .drop-content:before{content:"";display:block;position:absolute;width:0;height:0;border-color:transparent;border-width:12px;border-style:solid}.drop-element.drop-theme-arrows-bounce.drop-element-attached-bottom.drop-element-attached-center .drop-content:before{top:100%;left:50%;margin-left:-12px;border-top-color:#fff}.drop-element.drop-theme-arrows-bounce.drop-element-attached-top.drop-element-attached-center .drop-content{margin-top:12px}.drop-element.drop-theme-arrows-bounce.drop-element-attached-top.drop-element-attached-center .drop-content:before{bottom:100%;left:50%;margin-left:-12px;border-bottom-color:#fff}.drop-element.drop-theme-arrows-bounce.drop-element-attached-right.drop-element-attached-middle .drop-content:before{left:100%;top:50%;margin-top:-12px;border-left-color:#fff}.drop-element.drop-theme-arrows-bounce.drop-element-attached-left.drop-element-attached-middle .drop-content:before{right:100%;top:50%;margin-top:-12px;border-right-color:#fff}.drop-element.drop-theme-arrows-bounce.drop-element-attached-top.drop-element-attached-left.drop-target-attached-bottom .drop-content:before{bottom:100%;left:12px;border-bottom-color:#fff}.drop-element.drop-theme-arrows-bounce.drop-element-attached-top.drop-element-attached-right.drop-target-attached-bottom .drop-content:before{bottom:100%;right:12px;border-bottom-color:#fff}.drop-element.drop-theme-arrows-bounce.drop-element-attached-bottom.drop-element-attached-left.drop-target-attached-top .drop-content:before{top:100%;left:12px;border-top-color:#fff}.drop-element.drop-theme-arrows-bounce.drop-element-attached-bottom.drop-element-attached-right.drop-target-attached-top .drop-content:before{top:100%;right:12px;border-top-color:#fff}.drop-element.drop-theme-arrows-bounce.drop-element-attached-top.drop-element-attached-right.drop-target-attached-left .drop-content:before{top:12px;left:100%;border-left-color:#fff}.drop-element.drop-theme-arrows-bounce.drop-element-attached-top.drop-element-attached-left.drop-target-attached-right .drop-content:before{top:12px;right:100%;border-right-color:#fff}.drop-element.drop-theme-arrows-bounce.drop-element-attached-bottom.drop-element-attached-right.drop-target-attached-left .drop-content:before{bottom:12px;left:100%;border-left-color:#fff}.drop-element.drop-theme-arrows-bounce.drop-element-attached-bottom.drop-element-attached-left.drop-target-attached-right .drop-content:before{bottom:12px;right:100%;border-right-color:#fff}.drop-element.drop-theme-arrows-bounce{max-width:100%;max-height:100%;-webkit-transform:translateZ(0);transform:translateZ(0);-webkit-transition:opacity .1s;transition:opacity .1s;opacity:0}.drop-element.drop-theme-arrows-bounce .drop-content{-webkit-transition:-webkit-transform .3s cubic-bezier(0,0,.265,1.55);transition:transform .3s cubic-bezier(0,0,.265,1.55);-webkit-transform:scale(0) translateZ(0);transform:scale(0) translateZ(0)}.drop-element.drop-theme-arrows-bounce.drop-open{display:none}.drop-element.drop-theme-arrows-bounce.drop-open-transitionend{display:block}.drop-element.drop-theme-arrows-bounce.drop-after-open{-webkit-transition:none;transition:none;opacity:1}.drop-element.drop-theme-arrows-bounce.drop-after-open .drop-content{-webkit-transform:scale(1) translateZ(0);transform:scale(1) translateZ(0)}.drop-element.drop-theme-arrows-bounce.drop-element-attached-bottom.drop-element-attached-center .drop-content{margin-bottom:12px;-webkit-transform-origin:50%,calc(100% + 12px);-ms-transform-origin:50%,calc(100% + 12px);transform-origin:50%,calc(100% + 12px)}.drop-element.drop-theme-arrows-bounce.drop-element-attached-top.drop-element-attached-center .drop-content{-webkit-transform-origin:50%,-12px;-ms-transform-origin:50%,-12px;transform-origin:50%,-12px}.drop-element.drop-theme-arrows-bounce.drop-element-attached-right.drop-element-attached-middle .drop-content{margin-right:12px;-webkit-transform-origin:calc(100% + 12px),50%;-ms-transform-origin:calc(100% + 12px),50%;transform-origin:calc(100% + 12px),50%}.drop-element.drop-theme-arrows-bounce.drop-element-attached-left.drop-element-attached-middle .drop-content{margin-left:12px;-webkit-transform-origin:-12px,50%;-ms-transform-origin:-12px,50%;transform-origin:-12px,50%}.drop-element.drop-theme-arrows-bounce.drop-element-attached-top.drop-element-attached-left.drop-target-attached-bottom .drop-content{margin-top:12px;-webkit-transform-origin:0,-12px;-ms-transform-origin:0,-12px;transform-origin:0,-12px}.drop-element.drop-theme-arrows-bounce.drop-element-attached-top.drop-element-attached-right.drop-target-attached-bottom .drop-content{margin-top:12px;-webkit-transform-origin:100%,-12px;-ms-transform-origin:100%,-12px;transform-origin:100%,-12px}.drop-element.drop-theme-arrows-bounce.drop-element-attached-bottom.drop-element-attached-left.drop-target-attached-top .drop-content{margin-bottom:12px;-webkit-transform-origin:0,calc(100% + 12px);-ms-transform-origin:0,calc(100% + 12px);transform-origin:0,calc(100% + 12px)}.drop-element.drop-theme-arrows-bounce.drop-element-attached-bottom.drop-element-attached-right.drop-target-attached-top .drop-content{margin-bottom:12px;-webkit-transform-origin:100%,calc(100% + 12px);-ms-transform-origin:100%,calc(100% + 12px);transform-origin:100%,calc(100% + 12px)}.drop-element.drop-theme-arrows-bounce.drop-element-attached-top.drop-element-attached-right.drop-target-attached-left .drop-content{margin-right:12px;-webkit-transform-origin:calc(100% + 12px),0;-ms-transform-origin:calc(100% + 12px),0;transform-origin:calc(100% + 12px),0}.drop-element.drop-theme-arrows-bounce.drop-element-attached-top.drop-element-attached-left.drop-target-attached-right .drop-content{margin-left:12px;-webkit-transform-origin:-12px,0;-ms-transform-origin:-12px,0;transform-origin:-12px,0}.drop-element.drop-theme-arrows-bounce.drop-element-attached-bottom.drop-element-attached-right.drop-target-attached-left .drop-content{margin-right:12px;-webkit-transform-origin:calc(100% + 12px),100%;-ms-transform-origin:calc(100% + 12px),100%;transform-origin:calc(100% + 12px),100%}.drop-element.drop-theme-arrows-bounce.drop-element-attached-bottom.drop-element-attached-left.drop-target-attached-right .drop-content{margin-left:12px;-webkit-transform-origin:-12px,100%;-ms-transform-origin:-12px,100%;transform-origin:-12px,100%} \ No newline at end of file diff --git a/test/full_workspace/Drop-1.0/js/drop.min.js b/test/full_workspace/Drop-1.0/js/drop.min.js deleted file mode 100644 index 262412d4..00000000 --- a/test/full_workspace/Drop-1.0/js/drop.min.js +++ /dev/null @@ -1,7 +0,0 @@ -var oldDrop = window.Drop; -var oldTether = window.Tether; -Tether = H5P.Tether; -!function(t,e){"function"==typeof define&&define.amd?define(["tether"],e):"object"==typeof exports?module.exports=e(require("tether")):t.Drop=e(t.Tether)}(this,function(t){"use strict";function e(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function n(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}function o(t){var e=t.split(" "),n=a(e,2),o=n[0],i=n[1];if(["left","right"].indexOf(o)>=0){var s=[i,o];o=s[0],i=s[1]}return[o,i].join(" ")}function i(t,e){for(var n=void 0,o=[];-1!==(n=t.indexOf(e));)o.push(t.splice(n,1));return o}function s(){var a=arguments.length<=0||void 0===arguments[0]?{}:arguments[0],u=function(){for(var t=arguments.length,e=Array(t),n=0;t>n;n++)e[n]=arguments[n];return new(r.apply(b,[null].concat(e)))};p(u,{createContext:s,drops:[],defaults:{}});var g={classPrefix:"drop",defaults:{position:"bottom left",openOn:"click",beforeClose:null,constrainToScrollParent:!0,constrainToWindow:!0,classes:"",remove:!1,tetherOptions:{}}};p(u,g,a),p(u.defaults,g.defaults,a.defaults),"undefined"==typeof x[u.classPrefix]&&(x[u.classPrefix]=[]),u.updateBodyClasses=function(){for(var t=!1,e=x[u.classPrefix],n=e.length,o=0;n>o;++o)if(e[o].isOpened()){t=!0;break}t?d(document.body,u.classPrefix+"-open"):c(document.body,u.classPrefix+"-open")};var b=function(s){function r(t){if(e(this,r),l(Object.getPrototypeOf(r.prototype),"constructor",this).call(this),this.options=p({},u.defaults,t),this.target=this.options.target,"undefined"==typeof this.target)throw new Error("Drop Error: You must provide a target.");var n="data-"+u.classPrefix,o=this.target.getAttribute(n);o&&(this.options.content=o);for(var i=["position","openOn"],s=0;s=0)for(var n=function(e){t.toggle(e),e.preventDefault()},o=function(e){t.isOpened()&&(e.target===t.drop||t.drop.contains(e.target)||e.target===t.target||t.target.contains(e.target)||t.close(e))},i=0;i=0&&(this._on(this.target,"mouseover",h),this._on(this.drop,"mouseover",h),this._on(this.target,"mouseout",l),this._on(this.drop,"mouseout",l)),e.indexOf("focus")>=0&&(this._on(this.target,"focus",h),this._on(this.drop,"focus",h),this._on(this.target,"blur",l),this._on(this.drop,"blur",l))}}},{key:"isOpened",value:function(){return this.drop?f(this.drop,u.classPrefix+"-open"):void 0}},{key:"toggle",value:function(t){this.isOpened()?this.close(t):this.open(t)}},{key:"open",value:function(t){var e=this;this.isOpened()||(this.drop.parentNode||document.body.appendChild(this.drop),"undefined"!=typeof this.tether&&this.tether.enable(),d(this.drop,u.classPrefix+"-open"),d(this.drop,u.classPrefix+"-open-transitionend"),setTimeout(function(){e.drop&&d(e.drop,u.classPrefix+"-after-open")}),"undefined"!=typeof this.tether&&this.tether.position(),this.trigger("open"),u.updateBodyClasses())}},{key:"_transitionEndHandler",value:function(t){t.target===t.currentTarget&&(f(this.drop,u.classPrefix+"-open")||c(this.drop,u.classPrefix+"-open-transitionend"),this.drop.removeEventListener(m,this.transitionEndHandler))}},{key:"beforeCloseHandler",value:function(t){var e=!0;return this.isClosing||"function"!=typeof this.options.beforeClose||(this.isClosing=!0,e=this.options.beforeClose(t,this)!==!1),this.isClosing=!1,e}},{key:"close",value:function(t){this.isOpened()&&this.beforeCloseHandler(t)&&(c(this.drop,u.classPrefix+"-open"),c(this.drop,u.classPrefix+"-after-open"),this.drop.addEventListener(m,this.transitionEndHandler),this.trigger("close"),"undefined"!=typeof this.tether&&this.tether.disable(),u.updateBodyClasses(),this.options.remove&&this.remove(t))}},{key:"remove",value:function(t){this.close(t),this.drop.parentNode&&this.drop.parentNode.removeChild(this.drop)}},{key:"position",value:function(){this.isOpened()&&"undefined"!=typeof this.tether&&this.tether.position()}},{key:"destroy",value:function(){this.remove(),"undefined"!=typeof this.tether&&this.tether.destroy();for(var t=0;t - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/test/full_workspace/FontAwesome-4.5/fontawesome-webfont.ttf b/test/full_workspace/FontAwesome-4.5/fontawesome-webfont.ttf deleted file mode 100644 index 26dea795..00000000 Binary files a/test/full_workspace/FontAwesome-4.5/fontawesome-webfont.ttf and /dev/null differ diff --git a/test/full_workspace/FontAwesome-4.5/fontawesome-webfont.woff b/test/full_workspace/FontAwesome-4.5/fontawesome-webfont.woff deleted file mode 100644 index dc35ce3c..00000000 Binary files a/test/full_workspace/FontAwesome-4.5/fontawesome-webfont.woff and /dev/null differ diff --git a/test/full_workspace/FontAwesome-4.5/fontawesome-webfont.woff2 b/test/full_workspace/FontAwesome-4.5/fontawesome-webfont.woff2 deleted file mode 100644 index 500e5172..00000000 Binary files a/test/full_workspace/FontAwesome-4.5/fontawesome-webfont.woff2 and /dev/null differ diff --git a/test/full_workspace/FontAwesome-4.5/h5p-font-awesome.min.css b/test/full_workspace/FontAwesome-4.5/h5p-font-awesome.min.css deleted file mode 100644 index e7df4248..00000000 --- a/test/full_workspace/FontAwesome-4.5/h5p-font-awesome.min.css +++ /dev/null @@ -1,4 +0,0 @@ -/*! - * Font Awesome 4.5.0 by @davegandy - http://fontawesome.io - @fontawesome - * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */@font-face{font-family:'H5PFontAwesome4';src:url('fontawesome-webfont.eot?v=4.5.0');src:url('fontawesome-webfont.eot?#iefix&v=4.5.0') format('embedded-opentype'),url('fontawesome-webfont.woff2?v=4.5.0') format('woff2'),url('fontawesome-webfont.woff?v=4.5.0') format('woff'),url('fontawesome-webfont.ttf?v=4.5.0') format('truetype'),url('fontawesome-webfont.svg?v=4.5.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 H5PFontAwesome4;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"} diff --git a/test/full_workspace/FontAwesome-4.5/library.json b/test/full_workspace/FontAwesome-4.5/library.json deleted file mode 100644 index f6943f44..00000000 --- a/test/full_workspace/FontAwesome-4.5/library.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "title": "Font Awesome", - "contentType": "Font", - "majorVersion": 4, - "minorVersion": 5, - "patchVersion": 4, - "runnable": 0, - "machineName": "FontAwesome", - "license": "MIT", - "author": "Dave Gandy", - "preloadedCss": [ - { - "path": "h5p-font-awesome.min.css" - } - ] -} \ No newline at end of file diff --git a/test/full_workspace/H5P.FontIcons-1.0/fonts/h5p.eot b/test/full_workspace/H5P.FontIcons-1.0/fonts/h5p.eot deleted file mode 100644 index e6d78c9b..00000000 Binary files a/test/full_workspace/H5P.FontIcons-1.0/fonts/h5p.eot and /dev/null differ diff --git a/test/full_workspace/H5P.FontIcons-1.0/fonts/h5p.svg b/test/full_workspace/H5P.FontIcons-1.0/fonts/h5p.svg deleted file mode 100644 index 39f005e1..00000000 --- a/test/full_workspace/H5P.FontIcons-1.0/fonts/h5p.svg +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - -{ - "fontFamily": "h5p", - "description": "Font generated by IcoMoon.", - "majorVersion": 1, - "minorVersion": 1, - "version": "Version 1.1", - "fontId": "h5p", - "psName": "h5p", - "subFamily": "Regular", - "fullName": "h5p" -} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/test/full_workspace/H5P.FontIcons-1.0/fonts/h5p.ttf b/test/full_workspace/H5P.FontIcons-1.0/fonts/h5p.ttf deleted file mode 100644 index f2303d0a..00000000 Binary files a/test/full_workspace/H5P.FontIcons-1.0/fonts/h5p.ttf and /dev/null differ diff --git a/test/full_workspace/H5P.FontIcons-1.0/fonts/h5p.woff b/test/full_workspace/H5P.FontIcons-1.0/fonts/h5p.woff deleted file mode 100644 index acd54ec9..00000000 Binary files a/test/full_workspace/H5P.FontIcons-1.0/fonts/h5p.woff and /dev/null differ diff --git a/test/full_workspace/H5P.FontIcons-1.0/library.json b/test/full_workspace/H5P.FontIcons-1.0/library.json deleted file mode 100644 index 8ccf8978..00000000 --- a/test/full_workspace/H5P.FontIcons-1.0/library.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "title": "H5P.FontIcons", - "majorVersion": 1, - "minorVersion": 0, - "patchVersion": 6, - "runnable": 0, - "machineName": "H5P.FontIcons", - "author": "Joubel", - "preloadedCss": [ - { - "path": "styles/h5p-font-icons.css" - } - ] -} diff --git a/test/full_workspace/H5P.FontIcons-1.0/styles/h5p-font-icons.css b/test/full_workspace/H5P.FontIcons-1.0/styles/h5p-font-icons.css deleted file mode 100644 index a6c71f9a..00000000 --- a/test/full_workspace/H5P.FontIcons-1.0/styles/h5p-font-icons.css +++ /dev/null @@ -1,10 +0,0 @@ -@font-face { - font-family: 'H5PFontIcons'; - src: url('../fonts/h5p.eot?105'); - src: url('../fonts/h5p.eot?105#iefix') format('embedded-opentype'), - url('../fonts/h5p.ttf?105') format('truetype'), - url('../fonts/h5p.woff?105') format('woff'), - url('../fonts/h5p.svg?105#H5PFontIcons') format('svg'); - font-weight: normal; - font-style: normal; -} diff --git a/test/full_workspace/H5P.JoubelUI-1.3/css/joubel-help-dialog.css b/test/full_workspace/H5P.JoubelUI-1.3/css/joubel-help-dialog.css deleted file mode 100644 index bd49d6fa..00000000 --- a/test/full_workspace/H5P.JoubelUI-1.3/css/joubel-help-dialog.css +++ /dev/null @@ -1,67 +0,0 @@ -/* Main Container */ -.joubel-help-text-dialog-box { - position: absolute; - width: 100%; - height: 100%; - top: 0; - left: 0; - color: #555; - z-index: 2; -} - -/* Background for help dialog */ -.joubel-help-text-dialog-background { - position: absolute; - width: 100%; - height: 100%; - top: 0; - left: 0; - background: #555555; - opacity: 0.75; -} - -/* ------------------------------------ Main content container ------------------------ */ -.joubel-help-text-dialog-container { - display: block; - position: absolute; - top: 3.5%; - left: 20%; - width: 60%; - background: #fff; - opacity: 1; - max-height: 93%; - overflow: auto; -} - -/* Header */ -.joubel-help-text-header { - font-size: 1.1em; - border-bottom: 1px solid #E0E0E0; - padding: 0.75em 3em 0.75em 1.5em; -} - -/* Body */ -.joubel-help-text-body { - padding: 0.5em 1.5em; - margin: 1em 0 2em; -} - -/* Close help dialog container */ -.joubel-help-text-remove { - position: absolute; - right: 1.5em; - top: 0.8em; - cursor: pointer; -} - -.joubel-help-text-remove:hover { - color: #333; -} - -.joubel-help-text-remove:before { - font-family: 'H5PFontAwesome4'; - content: '\f00d'; - font-size: 1.3em; - right: 0em; - top: 0em; -} diff --git a/test/full_workspace/H5P.JoubelUI-1.3/css/joubel-icon.css b/test/full_workspace/H5P.JoubelUI-1.3/css/joubel-icon.css deleted file mode 100644 index 4ff09498..00000000 --- a/test/full_workspace/H5P.JoubelUI-1.3/css/joubel-icon.css +++ /dev/null @@ -1,152 +0,0 @@ -[class^="joubel-icon-"], [class*=" joubel-icon-"] { - /* use !important to prevent issues with browser extensions that change fonts */ - font-family: 'H5PFontIcons' !important; - speak: none; - font-size: 1.5em; - line-height: 1.5em; - font-style: normal; - font-weight: normal; - font-variant: normal; - text-transform: none; - word-wrap: normal; - cursor: pointer; - - /* Better Font Rendering =========== */ - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -/* Comment icon */ -.joubel-icon-comment-normal .h5p-icon-shadow:before { - content: "\e90a"; - color: rgb(221, 221, 221); -} -.joubel-icon-comment-normal .h5p-icon-speech-bubble:before { - content: "\e908"; - margin-left: -1em; - color: rgb(206, 114, 193); -} -.joubel-icon-comment-normal .h5p-icon-question:before { - content: "\e906"; - margin-left: -1em; - color: rgb(255, 255, 255); -} -.joubel-icon-comment-normal:hover .h5p-icon-speech-bubble:before { - color: rgb(188, 92, 163); -} -.joubel-icon-comment-normal:active .h5p-icon-speech-bubble:before { - color: rgb(206, 114, 193); - position: relative; - top: 0.05em; - left: 0.05em; -} -.joubel-icon-comment-normal:active .h5p-icon-question:before { - position: relative; - top: 0.05em; - left: 0.05em; -} - -/* Tip icon */ -.joubel-icon-tip-normal .h5p-icon-shadow:before { - content: "\e90a"; - color: rgb(221, 221, 221); -} -.joubel-icon-tip-normal .h5p-icon-speech-bubble:before { - content: "\e908"; - margin-left: -1em; - color: rgb(53, 128, 195); -} -.joubel-icon-tip-normal .h5p-icon-info:before { - content: "\e905"; - margin-left: -1em; - color: rgb(255, 255, 255); -} -.joubel-icon-tip-normal:hover .h5p-icon-speech-bubble:before { - color: rgb(72, 155, 213); -} -.joubel-icon-tip-normal:active .h5p-icon-speech-bubble:before { - color: rgb(72, 155, 213); - position: relative; - top: 0.05em; - left: 0.05em; -} -.joubel-icon-tip-normal:active .h5p-icon-info:before { - position: relative; - top: 0.05em; - left: 0.05em; -} - -/* Edit icon */ -.joubel-icon-edit .h5p-icon-circle:before { - content: "\e90d"; - color: #1d74c8; - font-size: 1.5em; -} -.joubel-icon-edit .h5p-icon-pencil:before { - content: "\e90c"; - color: #1d74c8; - font-size: 0.8em; - text-align: center; - position: absolute; - margin-left: -1.42em; -} -.joubel-icon-edit:hover .h5p-icon-circle:before { - content: "\e90e"; - color: #1d74c8; -} -.joubel-icon-edit:hover .h5p-icon-pencil:before { - color: #ffffff; -} - -/* Approve icon */ -.joubel-icon-approve .h5p-icon-circle:before { - content: "\e90d"; - color: #3ea35f; - font-size: 1.5em; -} -.joubel-icon-approve .h5p-icon-check:before { - content: "\e601"; - color: #3ea35f; - font-size: 0.8em; - text-align: center; - position: absolute; - margin-left: -1.42em; -} -.joubel-icon-approve:hover .h5p-icon-circle:before { - content: "\e90e"; -} -.joubel-icon-approve:hover .h5p-icon-check:before { - color: #ffffff; -} - -/* Cancel icon */ -.joubel-icon-cancel .h5p-icon-circle:before { - content: "\e90d"; - color: #de3354; - font-size: 1.5em; -} -.joubel-icon-cancel .h5p-icon-cross:before { - content: "\e600"; - color: #de3354; - font-size: 0.85em; - text-align: center; - position: absolute; - margin-left: -1.38em; -} -.joubel-icon-cancel:hover .h5p-icon-circle:before { - content: "\e90e"; -} -.joubel-icon-cancel:hover .h5p-icon-cross:before { - color: #ffffff; -} - -/* Custom override CSS */ -.joubel-icon-tip-normal.help-icon:before { - font-family: 'H5PFontAwesome4'; - content: "\f059"; -} - -/* Hide icon layers if using font awesome */ -.joubel-icon-tip-normal.help-icon > span { - display: none; -} diff --git a/test/full_workspace/H5P.JoubelUI-1.3/css/joubel-message-dialog.css b/test/full_workspace/H5P.JoubelUI-1.3/css/joubel-message-dialog.css deleted file mode 100644 index 079b4f32..00000000 --- a/test/full_workspace/H5P.JoubelUI-1.3/css/joubel-message-dialog.css +++ /dev/null @@ -1,25 +0,0 @@ -@CHARSET "UTF-8"; - -.joubel-message-dialog { - position: absolute; - bottom: 0; - left: 0; - right: 0; - width: 100%; - padding: .3em; - z-index: 11; - box-sizing: border-box; - -moz-box-sizing: border-box; - border-top: 1px solid #ffcd0d; - background-color: #fcffcc; - text-align: center; - font-size: 0.8em; -} -.joubel-message-dialog:before { - font-family: 'H5PFontAwesome4'; - content: '\f05a'; - padding-right: .5em; - font-size: 1.3em; - position: relative; - top: 0.1em; -} \ No newline at end of file diff --git a/test/full_workspace/H5P.JoubelUI-1.3/css/joubel-progress-circle.css b/test/full_workspace/H5P.JoubelUI-1.3/css/joubel-progress-circle.css deleted file mode 100644 index 1697ea33..00000000 --- a/test/full_workspace/H5P.JoubelUI-1.3/css/joubel-progress-circle.css +++ /dev/null @@ -1,56 +0,0 @@ -.joubel-progress-circle-wrapper{ - display: inline-block; - padding: 0em 1em; -} -.joubel-progress-circle-percentage{ - position: relative; - font-size: 1em; -} - -.joubel-progress-circle-circle{ - -webkit-transform: rotate(0deg); - -ms-transform: rotate(0deg); - transform: rotate(0deg); - - display: -webkit-box; /* OLD - iOS 6-, Safari 3.1-6 */ - display: -ms-flexbox; /* TWEENER - IE 10 */ - display: -webkit-flex; /* NEW - Chrome */ - display: flex; /* NEW, Spec - Opera 12.1, Firefox 20+ */ - - -webkit-align-items: center; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - - -webkit-justify-content: center; - -webkit-box-pack: center; - -ms-flex-pack: center; - justify-content: center; - - position: relative; - - top: 0.151em; - left: 0.151em; - text-align: center; - width: 2.7em; - height: 2.7em; - - -webkit-border-radius: 100%; /* Safari 3-4, iOS 1-3.2, Android 1.6- */ - -moz-border-radius: 100%; /* Firefox 1-3.6 */ - border-radius: 100%; /* Opera 10.5, IE 9, Safari 5, Chrome, Firefox 4, iOS 4, Android 2.1+ */ - - background-color: #fff; -} - -.joubel-progress-circle-active-border{ - position: relative; - text-align: center; - width: 3em; - height: 3em; - - -webkit-border-radius: 100%; /* Safari 3-4, iOS 1-3.2, Android 1.6- */ - -moz-border-radius: 100%; /* Firefox 1-3.6 */ - border-radius: 100%; /* Opera 10.5, IE 9, Safari 5, Chrome, Firefox 4, iOS 4, Android 2.1+ */ - - background-color: #1a73d9; -} diff --git a/test/full_workspace/H5P.JoubelUI-1.3/css/joubel-progressbar.css b/test/full_workspace/H5P.JoubelUI-1.3/css/joubel-progressbar.css deleted file mode 100644 index 0c48c973..00000000 --- a/test/full_workspace/H5P.JoubelUI-1.3/css/joubel-progressbar.css +++ /dev/null @@ -1,38 +0,0 @@ -.h5p-joubelui-progressbar { - width: 100%; - position: absolute; - left: 0; - bottom: 0; - right: 0; - height: .25em; - background: #fff; - -webkit-box-shadow: 0px -1px 3px 0px rgba(1,72,118,0.75); - -moz-box-shadow: 0px -1px 3px 0px rgba(1,72,118,0.75); - box-shadow: 0px -1px 3px 0px rgba(1,72,118,0.75); -} - -.h5p-joubelui-progressbar-slide-status-text { - font-size: 0; - width: 0; - height: 0; -} - -.h5p-joubelui-progressbar-background { - position: absolute; - left: 0; - top: 0; - height: 100%; - width: 0; - background-color: #014876; - -webkit-transition: width .3s ease-in-out; - -moz-transition: width .3s ease-in-out; - -o-transition: width .3s ease-in-out; - transition: width .3s ease-in-out; -} -.h5p-joubelui-drop { - z-index: 1; -} -.drop-element.h5p-joubelui-drop .drop-content { - padding: .2em .8em; - font-weight: bold; -} diff --git a/test/full_workspace/H5P.JoubelUI-1.3/css/joubel-score-bar.css b/test/full_workspace/H5P.JoubelUI-1.3/css/joubel-score-bar.css deleted file mode 100644 index e51b80d4..00000000 --- a/test/full_workspace/H5P.JoubelUI-1.3/css/joubel-score-bar.css +++ /dev/null @@ -1,159 +0,0 @@ -.h5p-joubelui-score-bar { - display: inline-flex; - display: -webkit-inline-flexbox; - display: -ms-inline-flexbox; - display: -webkit-inline-flex; - width: 15em; - max-width: 100%; - background: #fff; - border-radius: 1.5em; - padding: 0.625em; - border: 1px solid rgba(0, 0, 0, 0.08); - box-sizing: border-box; - position: relative; -} -.h5p-joubelui-score-bar-visuals { - flex: 1; - -webkit-box-flex: 1; - -webkit-flex: 1; - position: relative; - overflow: visible; -} -.h5p-joubelui-score-bar-progress-wrapper { - position: relative; - margin-right: 1.7em; - height: 0.917em; - border-top-left-radius: 1.5em; - border-bottom-left-radius: 1.5em; - background: #ddd; -} -.h5p-joubelui-score-bar-progress { - overflow: hidden; - white-space: nowrap; - color: transparent; - position: absolute; - left: 0; - top: 0; - height: 100%; - width: 0; - border-top-left-radius: .5em; - border-bottom-left-radius: .5em; - background: #48b57e; /* For browsers not supporting linear-gradient */ - background: linear-gradient(to right, #52ca8d, #48b57e); - -webkit-transition: width 0.4s ease-in-out; - -moz-transition: width 0.4s ease-in-out; - -o-transition: width 0.4s ease-in-out; - transition: width 0.4s ease-in-out; - -webkit-backface-visibility: hidden; -} -/* The star */ -.h5p-joubelui-score-bar-star { - height: 1.8em; - width: 2.1em; - position: absolute; - right: 0; - top: -0.4em; - overflow: visible; -} -.h5p-joubelui-score-bar-full-score.h5p-joubelui-score-bar-animation-active .h5p-joubelui-score-bar-star { - -webkit-animation: pound 0.8s 1; - animation: pound 0.8s 1; -} -@keyframes pound { - from { - transform: scale(0); - } - 20% { - transform: scale(1.4); - } - 60% { - transform: scale(0.8); - } - 80% { - transform: scale(1.2); - } - to { - transform: scale(1); - } -} -@-webkit-keyframes pound { - from { - -webkit-transform: scale(0); - } - 20% { - -webkit-transform: scale(1.4); - } - 60% { - -webkit-transform: scale(0.8); - } - 80% { - -webkit-transform: scale(1.2); - } - to { - -webkit-transform: scale(1); - } -} -/* Styling the star */ -.h5p-joubelui-score-bar-star svg { - overflow: visible; -} -.h5p-joubelui-score-bar-star-shadow { - fill: #fff; -} -.h5p-joubelui-score-bar-star-border { - fill: none; - stroke: #ddd; - stroke-miterlimit: 10; - stroke-width: 3px; -} -.h5p-joubelui-score-bar-star-fill { - fill: #ddd; -} -.h5p-joubelui-score-bar-full-score .h5p-joubelui-score-bar-star-border { - stroke: #ab741a; - stroke-width: 6; -} -.h5p-joubelui-score-bar-star-fill-full-score { - visibility: hidden; - fill: #ffc80b; -} -.h5p-joubelui-score-bar-full-score .h5p-joubelui-score-bar-star-fill { - /* This will be a fallback for browsers not supporting the filter, - i.e. Safari */ - fill: #ffc80b; -} -.h5p-joubelui-score-bar-full-score .h5p-joubelui-score-bar-star-fill-full-score { - visibility: visible; -} - -/* The numeric part on the end (score / maxScore) */ -.h5p-joubelui-score-numeric { - margin: 0em 0.4em; - font-size: 1.333em; - line-height: 0.7; - font-weight: bold; -} -.h5p-score-bar-has-help .h5p-joubelui-score-numeric { - /* Need more space when icon is displayed */ - margin-right: 0.625em; -} -.h5p-joubelui-score-number { - color: #333; -} -.h5p-joubelui-score-number-separator { - color: #999; - padding: 0 0.1em; -} -.h5p-joubelui-score-bar .joubel-tip-container { - position: absolute; - top: 0.1em; - right: 0.3em; - font-size: 1em; - line-height: 1; - color: #1a73d9; - margin-right: 0.2em; -} -.h5p-joubelui-score-bar .joubel-tip-container > .help-icon { - font-size: 1em; - line-height: 1; -} diff --git a/test/full_workspace/H5P.JoubelUI-1.3/css/joubel-simple-rounded-button.css b/test/full_workspace/H5P.JoubelUI-1.3/css/joubel-simple-rounded-button.css deleted file mode 100644 index a2969b40..00000000 --- a/test/full_workspace/H5P.JoubelUI-1.3/css/joubel-simple-rounded-button.css +++ /dev/null @@ -1,28 +0,0 @@ -.joubel-simple-rounded-button { - cursor: pointer; - display: inline-block; - margin: 0.25em 0; - padding: 0.3em 1.2em; - border-radius: 2em; - background-color: #1a73d9; - color: #FFFFFF; -} - -.joubel-simple-rounded-button:hover, -.joubel-simple-rounded-button:focus { - background-color: #1356a3; -} - -.joubel-simple-rounded-button:active { - position: relative; - background-color: #104888; - - -webkit-box-shadow: inset 0 4px 0px #0e407a; - -moz-box-shadow: inset 0 4px 0px #0e407a; - box-shadow: inset 0 4px 0px #0e407a; -} - -.joubel-simple-rounded-button:active .joubel-simple-rounded-button-text { - position: relative; - top: 2px; -} diff --git a/test/full_workspace/H5P.JoubelUI-1.3/css/joubel-slider.css b/test/full_workspace/H5P.JoubelUI-1.3/css/joubel-slider.css deleted file mode 100644 index 87caa741..00000000 --- a/test/full_workspace/H5P.JoubelUI-1.3/css/joubel-slider.css +++ /dev/null @@ -1,29 +0,0 @@ -.h5p-joubel-ui-slider { - -webkit-transition: -webkit-transform 0.3s ease-in-out; - -moz-transition: -moz-transform 0.3s ease-in-out; - -ms-transition: -ms-transform 0.3s ease-in-out; - transition: transform 0.3s ease-in-out; - - /* Avoid flickering */ - -webkit-transform: translateX(0); - -moz-transform: translateX(0); - -ms-transform: translateX(0); - transform: translateX(0); - -webkit-backface-visibility: hidden; - backface-visibility: hidden; - - height: 100%; -} -.h5p-joubel-ui-slide { - position: absolute; - width: 100%; - height: 100%; - - top: 0; - left: 0; - - display: none; -} -.h5p-joubel-ui-slide.current { - display: block; -} diff --git a/test/full_workspace/H5P.JoubelUI-1.3/css/joubel-speech-bubble.css b/test/full_workspace/H5P.JoubelUI-1.3/css/joubel-speech-bubble.css deleted file mode 100644 index 937cc1af..00000000 --- a/test/full_workspace/H5P.JoubelUI-1.3/css/joubel-speech-bubble.css +++ /dev/null @@ -1,50 +0,0 @@ -@CHARSET "UTF-8"; - -.joubel-speech-bubble { - position: absolute; - color: #333; - z-index: 301; - margin-top: 0.45em; - min-width: 1em; - opacity: 0; - transition: opacity 0.5s ease; -} -.joubel-speech-bubble p { - margin: 0.75em 0; -} -.joubel-speech-bubble p:first-child { - margin-top: 0.25em; -} -.joubel-speech-bubble p:last-child { - margin-bottom: 0.25em; -} -.joubel-speech-bubble.show { - opacity: 1; -} -.joubel-speech-bubble-inner { - background: #fbfbfb; - box-shadow: 0 0 0.5em #2c2c2c; - border-radius: 0.5em; - padding: 0.2em 0.5em; - text-align: left; - position: relative; - word-wrap: break-word; /* Long words have to break */ - z-index: 1; -} -.joubel-speech-bubble-inner-tail, -.joubel-speech-bubble-tail { - position: absolute; - /* Setting these in pixels is intentional. We use it when calculating placement of bubble */ - width: 12px; - height: 12px; - background: #fbfbfb; - -webkit-transform: rotate(45deg); - -moz-transform: rotate(45deg); - -ms-transform: rotate(45deg); - -o-transform: rotate(45deg); - transform: rotate(45deg); - z-index: -1; -} -.joubel-speech-bubble-tail { - box-shadow: 0 0 0.5em #2c2c2c; -} diff --git a/test/full_workspace/H5P.JoubelUI-1.3/css/joubel-tip.css b/test/full_workspace/H5P.JoubelUI-1.3/css/joubel-tip.css deleted file mode 100644 index 09ba502a..00000000 --- a/test/full_workspace/H5P.JoubelUI-1.3/css/joubel-tip.css +++ /dev/null @@ -1,56 +0,0 @@ -.joubel-tip-container { - display: inline-block; - font-weight: normal; - color: #777; - cursor: pointer; -} -.joubel-tip-container:hover { - color: #333; -} -.joubel-tip-container:focus { - outline: 0; - box-shadow: 0px 0px 5px 2px rgba(140,185,240,1); - outline: rgba(140,185,240,1) solid 1px; -} -.using-mouse .joubel-tip-container:focus { - box-shadow: none; -} -.joubel-tip-container.be-quiet:focus { - outline: none; -} -.joubel-tip-container.be-quiet { - pointer-events: none; -} -.joubel-tip-icon { - text-align: center; - font-size: 1.5em; - line-height: 1.5em; - width: 1.5em; - height: 1.5em; - pointer-events: none; -} -.joubel-tip-icon:before { - font-family: Joubel; - content: "\e888"; - - /* Better Font Rendering */ - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} -.joubel-tip-icon.help-icon:before { - font-family: 'H5PFontAwesome4'; - content: "\f059"; -} - -.joubel-tip-container * { - pointer-events: none; -} - -.joubel-tip-container .hidden-but-read { - position: absolute; - top: 0; - left: 0; - width: 0; - height: 0; - overflow: hidden; -} \ No newline at end of file diff --git a/test/full_workspace/H5P.JoubelUI-1.3/css/joubel-ui.css b/test/full_workspace/H5P.JoubelUI-1.3/css/joubel-ui.css deleted file mode 100644 index 95ac94e4..00000000 --- a/test/full_workspace/H5P.JoubelUI-1.3/css/joubel-ui.css +++ /dev/null @@ -1,96 +0,0 @@ -@CHARSET "UTF-8"; - -/* Styling of button */ -.h5peditor .ui-dialog .h5p-joubelui-button, -.h5peditor .h5p-joubelui-button, -.h5p-joubelui-button { - font-size: 1em; - line-height: 1.2; - margin: 0 0.5em 1em; - padding: 0.5em 1.25em; - border-radius: 2em; - - background: #1a73d9; - color: #ffffff; - - cursor: pointer; - border: none; - box-shadow: none; - -webkit-transform: translateZ(0); - transform: translateZ(0); - - display: inline-block; - text-align: center; - text-shadow: none; - text-decoration: none; - vertical-align: baseline; -} -.h5p-joubelui-button:first-child { - margin: 0 0.5em 1em 0; -} - -.h5p-joubelui-button:last-child { - margin: 0 0 1em 0.5em; -} - -.h5p-joubelui-button:first-child:last-child { - margin: 0 0 1em; -} - -/* Truncated buttons */ -.h5p-joubelui-button.truncated { - width: 2.235em; - height: 2.235em; - border-radius: 50%; - padding: 0; - text-align: center; -} - -.h5p-joubelui-button.truncated:before { - padding: 0; -} - -.h5p-joubelui-button:hover, -.h5p-joubelui-button:focus { - background: #1356a3; - color: #fff; - text-decoration: none; - -webkit-transition: initial; - -moz-transition: initial; - -o-transition: initial; - transition: initial; -} -.h5p-joubelui-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; -} -.h5p-joubelui-button:active .h5p-joubelui-button-text { - position: relative; - top: 2px; -} - -.h5p-joubelui-button:before { - font-family: 'H5PFontAwesome4'; - padding-right: 0.5em; -} - -.h5p-question-try-again:before { - content: "\F01E"; -} - -.h5p-question-show-solution:before { - content: "\F06E"; -} - -.h5p-question-check-answer:before { - content: "\F058"; -} - -/* Remove outline for all elements having tabIndex="-1"*/ -.h5p-content [tabIndex="-1"] { - outline: none; -} diff --git a/test/full_workspace/H5P.JoubelUI-1.3/fonts/joubel.eot b/test/full_workspace/H5P.JoubelUI-1.3/fonts/joubel.eot deleted file mode 100644 index 572c2ed1..00000000 Binary files a/test/full_workspace/H5P.JoubelUI-1.3/fonts/joubel.eot and /dev/null differ diff --git a/test/full_workspace/H5P.JoubelUI-1.3/fonts/joubel.svg b/test/full_workspace/H5P.JoubelUI-1.3/fonts/joubel.svg deleted file mode 100644 index bb9e6514..00000000 --- a/test/full_workspace/H5P.JoubelUI-1.3/fonts/joubel.svg +++ /dev/null @@ -1,30 +0,0 @@ - - - -Generated by IcoMoon - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/test/full_workspace/H5P.JoubelUI-1.3/fonts/joubel.ttf b/test/full_workspace/H5P.JoubelUI-1.3/fonts/joubel.ttf deleted file mode 100644 index fbb17f79..00000000 Binary files a/test/full_workspace/H5P.JoubelUI-1.3/fonts/joubel.ttf and /dev/null differ diff --git a/test/full_workspace/H5P.JoubelUI-1.3/fonts/joubel.woff b/test/full_workspace/H5P.JoubelUI-1.3/fonts/joubel.woff deleted file mode 100644 index 6c7b7279..00000000 Binary files a/test/full_workspace/H5P.JoubelUI-1.3/fonts/joubel.woff and /dev/null differ diff --git a/test/full_workspace/H5P.JoubelUI-1.3/js/joubel-help-dialog.js b/test/full_workspace/H5P.JoubelUI-1.3/js/joubel-help-dialog.js deleted file mode 100644 index 135c5971..00000000 --- a/test/full_workspace/H5P.JoubelUI-1.3/js/joubel-help-dialog.js +++ /dev/null @@ -1,93 +0,0 @@ -var H5P = H5P || {}; - -/** - * Class responsible for creating a help text dialog - */ -H5P.JoubelHelpTextDialog = (function ($) { - - var numInstances = 0; - /** - * Display a pop-up containing a message. - * - * @param {H5P.jQuery} $container The container which message dialog will be appended to - * @param {string} message The message - * @param {string} closeButtonTitle The title for the close button - * @return {H5P.jQuery} - */ - function JoubelHelpTextDialog(header, message, closeButtonTitle) { - H5P.EventDispatcher.call(this); - - var self = this; - - numInstances++; - var headerId = 'joubel-help-text-header-' + numInstances; - var helpTextId = 'joubel-help-text-body-' + numInstances; - - var $helpTextDialogBox = $('
', { - 'class': 'joubel-help-text-dialog-box', - 'role': 'dialog', - 'aria-labelledby': headerId, - 'aria-describedby': helpTextId - }); - - $('
', { - 'class': 'joubel-help-text-dialog-background' - }).appendTo($helpTextDialogBox); - - var $helpTextDialogContainer = $('
', { - 'class': 'joubel-help-text-dialog-container' - }).appendTo($helpTextDialogBox); - - $('
', { - 'class': 'joubel-help-text-header', - 'id': headerId, - 'role': 'header', - 'html': header - }).appendTo($helpTextDialogContainer); - - $('
', { - 'class': 'joubel-help-text-body', - 'id': helpTextId, - 'html': message, - 'role': 'document', - 'tabindex': 0 - }).appendTo($helpTextDialogContainer); - - var handleClose = function () { - $helpTextDialogBox.remove(); - self.trigger('closed'); - }; - - var $closeButton = $('
', { - 'class': 'joubel-help-text-remove', - 'role': 'button', - 'title': closeButtonTitle, - 'tabindex': 1, - 'click': handleClose, - 'keydown': function (event) { - // 32 - space, 13 - enter - if ([32, 13].indexOf(event.which) !== -1) { - event.preventDefault(); - handleClose(); - } - } - }).appendTo($helpTextDialogContainer); - - /** - * Get the DOM element - * @return {HTMLElement} - */ - self.getElement = function () { - return $helpTextDialogBox; - }; - - self.focus = function () { - $closeButton.focus(); - }; - } - - JoubelHelpTextDialog.prototype = Object.create(H5P.EventDispatcher.prototype); - JoubelHelpTextDialog.prototype.constructor = JoubelHelpTextDialog; - - return JoubelHelpTextDialog; -}(H5P.jQuery)); diff --git a/test/full_workspace/H5P.JoubelUI-1.3/js/joubel-message-dialog.js b/test/full_workspace/H5P.JoubelUI-1.3/js/joubel-message-dialog.js deleted file mode 100644 index 805d76a2..00000000 --- a/test/full_workspace/H5P.JoubelUI-1.3/js/joubel-message-dialog.js +++ /dev/null @@ -1,38 +0,0 @@ -var H5P = H5P || {}; - -/** - * Class responsible for creating auto-disappearing dialogs - */ -H5P.JoubelMessageDialog = (function ($) { - - /** - * Display a pop-up containing a message. - * - * @param {H5P.jQuery} $container The container which message dialog will be appended to - * @param {string} message The message - * @return {H5P.jQuery} - */ - function JoubelMessageDialog ($container, message) { - var timeout; - - var removeDialog = function () { - $warning.remove(); - clearTimeout(timeout); - $container.off('click.messageDialog'); - }; - - // Create warning popup: - var $warning = $('
', { - 'class': 'joubel-message-dialog', - text: message - }).appendTo($container); - - // Remove after 3 seconds or if user clicks anywhere in $container: - timeout = setTimeout(removeDialog, 3000); - $container.on('click.messageDialog', removeDialog); - - return $warning; - } - - return JoubelMessageDialog; -})(H5P.jQuery); diff --git a/test/full_workspace/H5P.JoubelUI-1.3/js/joubel-progress-circle.js b/test/full_workspace/H5P.JoubelUI-1.3/js/joubel-progress-circle.js deleted file mode 100644 index e5cfcdbe..00000000 --- a/test/full_workspace/H5P.JoubelUI-1.3/js/joubel-progress-circle.js +++ /dev/null @@ -1,159 +0,0 @@ -var H5P = H5P || {}; - -/** - * Class responsible for creating a circular progress bar - */ - -H5P.JoubelProgressCircle = (function ($) { - - /** - * Constructor for the Progress Circle - * - * @param {Number} number The amount of progress to display - * @param {string} progressColor Color for the progress meter - * @param {string} backgroundColor Color behind the progress meter - */ - function ProgressCircle(number, progressColor, fillColor, backgroundColor) { - progressColor = progressColor || '#1a73d9'; - fillColor = fillColor || '#f0f0f0'; - backgroundColor = backgroundColor || '#ffffff'; - var progressColorRGB = this.hexToRgb(progressColor); - - //Verify number - try { - number = Number(number); - if (number === '') { - throw 'is empty'; - } - if (isNaN(number)) { - throw 'is not a number'; - } - } catch (e) { - number = 'err'; - } - - //Draw circle - if (number > 100) { - number = 100; - } - - // We can not use rgba, since they will stack on top of each other. - // Instead we create the equivalent of the rgba color - // and applies this to the activeborder and background color. - var progressColorString = 'rgb(' + parseInt(progressColorRGB.r, 10) + - ',' + parseInt(progressColorRGB.g, 10) + - ',' + parseInt(progressColorRGB.b, 10) + ')'; - - // Circle wrapper - var $wrapper = $('
', { - 'class': "joubel-progress-circle-wrapper" - }); - - //Active border indicates progress - var $activeBorder = $('
', { - 'class': "joubel-progress-circle-active-border" - }).appendTo($wrapper); - - //Background circle - var $backgroundCircle = $('
', { - 'class': "joubel-progress-circle-circle" - }).appendTo($activeBorder); - - //Progress text/number - $('', { - 'text': number + '%', - 'class': "joubel-progress-circle-percentage" - }).appendTo($backgroundCircle); - - var deg = number * 3.6; - if (deg <= 180) { - $activeBorder.css('background-image', - 'linear-gradient(' + (90 + deg) + 'deg, transparent 50%, ' + fillColor + ' 50%),' + - 'linear-gradient(90deg, ' + fillColor + ' 50%, transparent 50%)') - .css('border', '2px solid' + backgroundColor) - .css('background-color', progressColorString); - } else { - $activeBorder.css('background-image', - 'linear-gradient(' + (deg - 90) + 'deg, transparent 50%, ' + progressColorString + ' 50%),' + - 'linear-gradient(90deg, ' + fillColor + ' 50%, transparent 50%)') - .css('border', '2px solid' + backgroundColor) - .css('background-color', progressColorString); - } - - this.$activeBorder = $activeBorder; - this.$backgroundCircle = $backgroundCircle; - this.$wrapper = $wrapper; - - this.initResizeFunctionality(); - - return $wrapper; - } - - /** - * Initializes resize functionality for the progress circle - */ - ProgressCircle.prototype.initResizeFunctionality = function () { - var self = this; - - $(window).resize(function () { - // Queue resize - setTimeout(function () { - self.resize(); - }); - }); - - // First resize - setTimeout(function () { - self.resize(); - }, 0); - }; - - /** - * Resize function makes progress circle grow or shrink relative to parent container - */ - ProgressCircle.prototype.resize = function () { - var $parent = this.$wrapper.parent(); - - if ($parent !== undefined && $parent) { - - // Measurements - var fontSize = parseInt($parent.css('font-size'), 10); - - // Static sizes - var fontSizeMultiplum = 3.75; - var progressCircleWidthPx = parseInt((fontSize / 4.5), 10) % 2 === 0 ? parseInt((fontSize / 4.5), 10) + 4 : parseInt((fontSize / 4.5), 10) + 5; - var progressCircleOffset = progressCircleWidthPx / 2; - - var width = fontSize * fontSizeMultiplum; - var height = fontSize * fontSizeMultiplum; - this.$activeBorder.css({ - 'width': width, - 'height': height - }); - - this.$backgroundCircle.css({ - 'width': width - progressCircleWidthPx, - 'height': height - progressCircleWidthPx, - 'top': progressCircleOffset, - 'left': progressCircleOffset - }); - } - }; - - /** - * Hex to RGB conversion - * @param hex - * @returns {{r: Number, g: Number, b: Number}} - */ - ProgressCircle.prototype.hexToRgb = function (hex) { - var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex); - return result ? { - r: parseInt(result[1], 16), - g: parseInt(result[2], 16), - b: parseInt(result[3], 16) - } : null; - }; - - return ProgressCircle; - -}(H5P.jQuery)); diff --git a/test/full_workspace/H5P.JoubelUI-1.3/js/joubel-progressbar.js b/test/full_workspace/H5P.JoubelUI-1.3/js/joubel-progressbar.js deleted file mode 100644 index 01274d16..00000000 --- a/test/full_workspace/H5P.JoubelUI-1.3/js/joubel-progressbar.js +++ /dev/null @@ -1,190 +0,0 @@ -var H5P = H5P || {}; - -H5P.JoubelProgressbar = (function ($) { - - /** - * Joubel progressbar class - * @method JoubelProgressbar - * @constructor - * @param {number} steps Number of steps - * @param {Object} [options] Additional options - * @param {boolean} [options.disableAria] Disable readspeaker assistance - * @param {string} [options.progressText] A progress text for describing - * current progress out of total progress for readspeakers. - * e.g. "Slide :num of :total" - */ - function JoubelProgressbar(steps, options) { - H5P.EventDispatcher.call(this); - var self = this; - this.options = $.extend({ - progressText: 'Slide :num of :total' - }, options); - this.currentStep = 0; - this.steps = steps; - - this.$progressbar = $('
', { - 'class': 'h5p-joubelui-progressbar', - on: { - click: function () { - self.toggleTooltip(); - return false; - }, - mouseenter: function () { - self.showTooltip(); - }, - mouseleave: function () { - setTimeout(function () { - self.hideTooltip(); - }, 1500); - } - } - }); - this.$background = $('
', { - 'class': 'h5p-joubelui-progressbar-background' - }).appendTo(this.$progressbar); - - $('body').click(function () { - self.toggleTooltip(true); - }); - } - - JoubelProgressbar.prototype = Object.create(H5P.EventDispatcher.prototype); - JoubelProgressbar.prototype.constructor = JoubelProgressbar; - - /** - * Display tooltip - * @method showTooltip - */ - JoubelProgressbar.prototype.showTooltip = function () { - var self = this; - - if (this.currentStep === 0 || this.tooltip !== undefined) { - return; - } - - var parentWidth = self.$progressbar.offset().left + self.$progressbar.width(); - - this.tooltip = new H5P.Drop({ - target: this.$background.get(0), - content: this.currentStep + '/' + this.steps, - classes: 'drop-theme-arrows-bounce h5p-joubelui-drop', - position: 'top right', - openOn: 'always', - tetherOptions: { - attachment: 'bottom center', - targetAttachment: 'top right' - } - }); - this.tooltip.on('open', function () { - var $drop = $(self.tooltip.drop); - var left = $drop.position().left; - var dropWidth = $drop.width(); - - // Need to handle drops getting outside of the progressbar: - if (left < 0) { - $drop.css({marginLeft: (-left) + 'px'}); - } - else if (left + dropWidth > parentWidth) { - $drop.css({marginLeft: (parentWidth - (left + dropWidth)) + 'px'}); - } - }); - }; - - JoubelProgressbar.prototype.updateAria = function () { - var self = this; - if (this.options.disableAria) { - return; - } - - if (!this.$currentStatus) { - this.$currentStatus = $('
', { - 'class': 'h5p-joubelui-progressbar-slide-status-text', - 'aria-live': 'assertive' - }).appendTo(this.$progressbar); - } - var interpolatedProgressText = self.options.progressText - .replace(':num', self.currentStep) - .replace(':total', self.steps); - this.$currentStatus.html(interpolatedProgressText); - }; - - /** - * Hides tooltip - * @method hideTooltip - */ - JoubelProgressbar.prototype.hideTooltip = function () { - if (this.tooltip !== undefined) { - this.tooltip.remove(); - this.tooltip.destroy(); - this.tooltip = undefined; - } - }; - - /** - * Toggles tooltip-visibility - * @method toggleTooltip - * @param {boolean} [closeOnly] Don't show, only close if open - */ - JoubelProgressbar.prototype.toggleTooltip = function (closeOnly) { - if (this.tooltip === undefined && !closeOnly) { - this.showTooltip(); - } - else if (this.tooltip !== undefined) { - this.hideTooltip(); - } - }; - - /** - * Appends to a container - * @method appendTo - * @param {H5P.jquery} $container - */ - JoubelProgressbar.prototype.appendTo = function ($container) { - this.$progressbar.appendTo($container); - }; - - /** - * Update progress - * @method setProgress - * @param {number} step - */ - JoubelProgressbar.prototype.setProgress = function (step) { - // Check for valid value: - if (step > this.steps || step < 0) { - return; - } - this.currentStep = step; - this.$background.css({ - width: ((this.currentStep/this.steps)*100) + '%' - }); - - this.updateAria(); - }; - - /** - * Increment progress with 1 - * @method next - */ - JoubelProgressbar.prototype.next = function () { - this.setProgress(this.currentStep+1); - }; - - /** - * Reset progressbar - * @method reset - */ - JoubelProgressbar.prototype.reset = function () { - this.setProgress(0); - }; - - /** - * Check if last step is reached - * @method isLastStep - * @return {Boolean} - */ - JoubelProgressbar.prototype.isLastStep = function () { - return this.steps === this.currentStep; - }; - - return JoubelProgressbar; -})(H5P.jQuery); diff --git a/test/full_workspace/H5P.JoubelUI-1.3/js/joubel-score-bar.js b/test/full_workspace/H5P.JoubelUI-1.3/js/joubel-score-bar.js deleted file mode 100644 index 4d46ceba..00000000 --- a/test/full_workspace/H5P.JoubelUI-1.3/js/joubel-score-bar.js +++ /dev/null @@ -1,225 +0,0 @@ -var H5P = H5P || {}; - -/** - * @module - */ -H5P.JoubelScoreBar = (function ($) { - - /* Need to use an id for the star SVG since that is the only way to reference - SVG filters */ - var idCounter = 0; - - /** - * Creates a score bar - * @class H5P.JoubelScoreBar - * @param {number} maxScore Maximum score - * @param {string} [label] Makes it easier for readspeakers to identify the scorebar - * @param {string} [helpText] Score explanation - * @param {string} [scoreExplanationButtonLabel] Label for score explanation button - */ - function JoubelScoreBar(maxScore, label, helpText, scoreExplanationButtonLabel) { - var self = this; - - self.maxScore = maxScore; - self.score = 0; - idCounter++; - - /** - * @const {string} - */ - self.STAR_MARKUP = ''; - - /** - * @function appendTo - * @memberOf H5P.JoubelScoreBar# - * @param {H5P.jQuery} $wrapper Dom container - */ - self.appendTo = function ($wrapper) { - self.$scoreBar.appendTo($wrapper); - }; - - /** - * Create the text representation of the scorebar . - * - * @private - * @return {string} - */ - var createLabel = function (score) { - if (!label) { - return ''; - } - - return label.replace(':num', score).replace(':total', self.maxScore); - }; - - /** - * Creates the html for this widget - * - * @method createHtml - * @private - */ - var createHtml = function () { - // Container div - self.$scoreBar = $('
', { - 'class': 'h5p-joubelui-score-bar', - }); - - var $visuals = $('
', { - 'class': 'h5p-joubelui-score-bar-visuals', - appendTo: self.$scoreBar - }); - - // The progress bar wrapper - self.$progressWrapper = $('
', { - 'class': 'h5p-joubelui-score-bar-progress-wrapper', - appendTo: $visuals - }); - - self.$progress = $('
', { - 'class': 'h5p-joubelui-score-bar-progress', - 'html': createLabel(self.score), - appendTo: self.$progressWrapper - }); - - // The star - $('
', { - 'class': 'h5p-joubelui-score-bar-star', - html: self.STAR_MARKUP - }).appendTo($visuals); - - // The score container - var $numerics = $('
', { - 'class': 'h5p-joubelui-score-numeric', - appendTo: self.$scoreBar, - 'aria-hidden': true - }); - - // The current score - self.$scoreCounter = $('', { - 'class': 'h5p-joubelui-score-number h5p-joubelui-score-number-counter', - text: 0, - appendTo: $numerics - }); - - // The separator - $('', { - 'class': 'h5p-joubelui-score-number-separator', - text: '/', - appendTo: $numerics - }); - - // Max score - self.$maxScore = $('', { - 'class': 'h5p-joubelui-score-number h5p-joubelui-score-max', - text: self.maxScore, - appendTo: $numerics - }); - - if (helpText) { - H5P.JoubelUI.createTip(helpText, { - tipLabel: scoreExplanationButtonLabel ? scoreExplanationButtonLabel : helpText, - helpIcon: true - }).appendTo(self.$scoreBar); - self.$scoreBar.addClass('h5p-score-bar-has-help'); - } - }; - - /** - * Set the current score - * @method setScore - * @memberOf H5P.JoubelScoreBar# - * @param {number} score - */ - self.setScore = function (score) { - // Do nothing if score hasn't changed - if (score === self.score) { - return; - } - self.score = score > self.maxScore ? self.maxScore : score; - self.updateVisuals(); - }; - - /** - * Increment score - * @method incrementScore - * @memberOf H5P.JoubelScoreBar# - * @param {number=} incrementBy Optional parameter, defaults to 1 - */ - self.incrementScore = function (incrementBy) { - self.setScore(self.score + (incrementBy || 1)); - }; - - /** - * Set the max score - * @method setMaxScore - * @memberOf H5P.JoubelScoreBar# - * @param {number} maxScore The max score - */ - self.setMaxScore = function (maxScore) { - self.maxScore = maxScore; - }; - - /** - * Updates the progressbar visuals - * @memberOf H5P.JoubelScoreBar# - * @method updateVisuals - */ - self.updateVisuals = function () { - self.$progress.html(createLabel(self.score)); - self.$scoreCounter.text(self.score); - self.$maxScore.text(self.maxScore); - - setTimeout(function () { - // Start the progressbar animation - self.$progress.css({ - width: ((self.score / self.maxScore) * 100) + '%' - }); - - H5P.Transition.onTransitionEnd(self.$progress, function () { - // If fullscore fill the star and start the animation - self.$scoreBar.toggleClass('h5p-joubelui-score-bar-full-score', self.score === self.maxScore); - self.$scoreBar.toggleClass('h5p-joubelui-score-bar-animation-active', self.score === self.maxScore); - - // Only allow the star animation to run once - self.$scoreBar.one("animationend", function() { - self.$scoreBar.removeClass("h5p-joubelui-score-bar-animation-active"); - }); - }, 600); - }, 300); - }; - - /** - * Removes all classes - * @method reset - */ - self.reset = function () { - self.$scoreBar.removeClass('h5p-joubelui-score-bar-full-score'); - }; - - createHtml(); - } - - return JoubelScoreBar; -})(H5P.jQuery); diff --git a/test/full_workspace/H5P.JoubelUI-1.3/js/joubel-simple-rounded-button.js b/test/full_workspace/H5P.JoubelUI-1.3/js/joubel-simple-rounded-button.js deleted file mode 100644 index 0ced1e74..00000000 --- a/test/full_workspace/H5P.JoubelUI-1.3/js/joubel-simple-rounded-button.js +++ /dev/null @@ -1,32 +0,0 @@ -var H5P = H5P || {}; - -H5P.SimpleRoundedButton = (function ($) { - - /** - * Creates a new tip - */ - function SimpleRoundedButton(text) { - - var $simpleRoundedButton = $('
', { - 'class': 'joubel-simple-rounded-button', - 'title': text, - 'role': 'button', - 'tabindex': '0' - }).keydown(function (e) { - // 32 - space, 13 - enter - if ([32, 13].indexOf(e.which) !== -1) { - $(this).click(); - e.preventDefault(); - } - }); - - $('', { - 'class': 'joubel-simple-rounded-button-text', - 'html': text - }).appendTo($simpleRoundedButton); - - return $simpleRoundedButton; - } - - return SimpleRoundedButton; -}(H5P.jQuery)); diff --git a/test/full_workspace/H5P.JoubelUI-1.3/js/joubel-slider.js b/test/full_workspace/H5P.JoubelUI-1.3/js/joubel-slider.js deleted file mode 100644 index ac413869..00000000 --- a/test/full_workspace/H5P.JoubelUI-1.3/js/joubel-slider.js +++ /dev/null @@ -1,96 +0,0 @@ -var H5P = H5P || {}; - -H5P.JoubelSlider = (function ($) { - - /** - * Creates a new Slider - * - * @param {object} [params] Additional parameters - */ - function JoubelSlider(params) { - H5P.EventDispatcher.call(this); - - this.$slider = $('
', $.extend({ - 'class': 'h5p-joubel-ui-slider' - }, params)); - - this.$slides = []; - this.currentIndex = 0; - this.numSlides = 0; - } - JoubelSlider.prototype = Object.create(H5P.EventDispatcher.prototype); - JoubelSlider.prototype.constructor = JoubelSlider; - - JoubelSlider.prototype.addSlide = function ($content) { - $content.addClass('h5p-joubel-ui-slide').css({ - 'left': (this.numSlides*100) + '%' - }); - this.$slider.append($content); - this.$slides.push($content); - - this.numSlides++; - - if(this.numSlides === 1) { - $content.addClass('current'); - } - }; - - JoubelSlider.prototype.attach = function ($container) { - $container.append(this.$slider); - }; - - JoubelSlider.prototype.move = function (index) { - var self = this; - - if(index === 0) { - self.trigger('first-slide'); - } - if(index+1 === self.numSlides) { - self.trigger('last-slide'); - } - self.trigger('move'); - - var $previousSlide = self.$slides[this.currentIndex]; - H5P.Transition.onTransitionEnd(this.$slider, function () { - $previousSlide.removeClass('current'); - self.trigger('moved'); - }); - this.$slides[index].addClass('current'); - - var translateX = 'translateX(' + (-index*100) + '%)'; - this.$slider.css({ - '-webkit-transform': translateX, - '-moz-transform': translateX, - '-ms-transform': translateX, - 'transform': translateX - }); - - this.currentIndex = index; - }; - - JoubelSlider.prototype.remove = function () { - this.$slider.remove(); - }; - - JoubelSlider.prototype.next = function () { - if(this.currentIndex+1 >= this.numSlides) { - return; - } - - this.move(this.currentIndex+1); - }; - - JoubelSlider.prototype.previous = function () { - this.move(this.currentIndex-1); - }; - - JoubelSlider.prototype.first = function () { - this.move(0); - }; - - JoubelSlider.prototype.last = function () { - this.move(this.numSlides-1); - }; - - return JoubelSlider; -})(H5P.jQuery); diff --git a/test/full_workspace/H5P.JoubelUI-1.3/js/joubel-speech-bubble.js b/test/full_workspace/H5P.JoubelUI-1.3/js/joubel-speech-bubble.js deleted file mode 100644 index 96c94d4c..00000000 --- a/test/full_workspace/H5P.JoubelUI-1.3/js/joubel-speech-bubble.js +++ /dev/null @@ -1,356 +0,0 @@ -var H5P = H5P || {}; - -/** - * Class responsible for creating speech bubbles - */ -H5P.JoubelSpeechBubble = (function ($) { - - var $currentSpeechBubble; - var $currentContainer; - var $tail; - var $innerTail; - var removeSpeechBubbleTimeout; - var currentMaxWidth; - - var DEFAULT_MAX_WIDTH = 400; - - var iDevice = navigator.userAgent.match(/iPod|iPhone|iPad/g) ? true : false; - - /** - * Creates a new speech bubble - * - * @param {H5P.jQuery} $container The speaking object - * @param {string} text The text to display - * @param {number} maxWidth The maximum width of the bubble - * @return {H5P.JoubelSpeechBubble} - */ - function JoubelSpeechBubble($container, text, maxWidth) { - maxWidth = maxWidth || DEFAULT_MAX_WIDTH; - currentMaxWidth = maxWidth; - $currentContainer = $container; - - this.isCurrent = function ($tip) { - return $tip.is($currentContainer); - }; - - this.remove = function () { - remove(); - }; - - var fadeOutSpeechBubble = function ($speechBubble) { - if (!$speechBubble) { - return; - } - - // Stop removing bubble - clearTimeout(removeSpeechBubbleTimeout); - - $speechBubble.removeClass('show'); - setTimeout(function () { - if ($speechBubble) { - $speechBubble.remove(); - $speechBubble = undefined; - } - }, 500); - }; - - if ($currentSpeechBubble !== undefined) { - remove(); - } - - var $h5pContainer = getH5PContainer($container); - - // Make sure we fade out old speech bubble - fadeOutSpeechBubble($currentSpeechBubble); - - // Create bubble - $tail = $('
'); - $innerTail = $('
'); - var $innerBubble = $( - '
' + - '
' + text + '
' + - '
' - ).prepend($innerTail); - - $currentSpeechBubble = $( - '
' - ).append([$tail, $innerBubble]) - .appendTo($h5pContainer); - - // Show speech bubble with transition - setTimeout(function () { - $currentSpeechBubble.addClass('show'); - }, 0); - - position($currentSpeechBubble, $currentContainer, maxWidth, $tail, $innerTail); - - // Handle click to close - H5P.$body.on('mousedown.speechBubble', handleOutsideClick); - - // Handle window resizing - H5P.$window.on('resize', '', handleResize); - - // Handle clicks when inside IV which blocks bubbling. - $container.parents('.h5p-dialog') - .on('mousedown.speechBubble', handleOutsideClick); - - if (iDevice) { - H5P.$body.css('cursor', 'pointer'); - } - - return this; - } - - // Remove speechbubble if it belongs to a dom element that is about to be hidden - H5P.externalDispatcher.on('domHidden', function (event) { - if ($currentSpeechBubble !== undefined && event.data.$dom.find($currentContainer).length !== 0) { - remove(); - } - }); - - /** - * Returns the closest h5p container for the given DOM element. - * - * @param {object} $container jquery element - * @return {object} the h5p container (jquery element) - */ - function getH5PContainer($container) { - var $h5pContainer = $container.closest('.h5p-frame'); - - // Check closest h5p frame first, then check for container in case there is no frame. - if (!$h5pContainer.length) { - $h5pContainer = $container.closest('.h5p-container'); - } - - return $h5pContainer; - } - - /** - * Event handler that is called when the window is resized. - */ - function handleResize() { - position($currentSpeechBubble, $currentContainer, currentMaxWidth, $tail, $innerTail); - } - - /** - * Repositions the speech bubble according to the position of the container. - * - * @param {object} $currentSpeechbubble the speech bubble that should be positioned - * @param {object} $container the container to which the speech bubble should point - * @param {number} maxWidth the maximum width of the speech bubble - * @param {object} $tail the tail (the triangle that points to the referenced container) - * @param {object} $innerTail the inner tail (the triangle that points to the referenced container) - */ - function position($currentSpeechBubble, $container, maxWidth, $tail, $innerTail) { - var $h5pContainer = getH5PContainer($container); - - // Calculate offset between the button and the h5p frame - var offset = getOffsetBetween($h5pContainer, $container); - - var direction = (offset.bottom > offset.top ? 'bottom' : 'top'); - var tipWidth = offset.outerWidth * 0.9; // Var needs to be renamed to make sense - var bubbleWidth = tipWidth > maxWidth ? maxWidth : tipWidth; - - var bubblePosition = getBubblePosition(bubbleWidth, offset); - var tailPosition = getTailPosition(bubbleWidth, bubblePosition, offset, $container.width()); - // Need to set font-size, since element is appended to body. - // Using same font-size as parent. In that way it will grow accordingly - // when resizing - var fontSize = 16;//parseFloat($parent.css('font-size')); - - // Set width and position of speech bubble - $currentSpeechBubble.css(bubbleCSS( - direction, - bubbleWidth, - bubblePosition, - fontSize - )); - - var preparedTailCSS = tailCSS(direction, tailPosition); - $tail.css(preparedTailCSS); - $innerTail.css(preparedTailCSS); - } - - /** - * Static function for removing the speechbubble - */ - var remove = function () { - H5P.$body.off('mousedown.speechBubble'); - H5P.$window.off('resize', '', handleResize); - $currentContainer.parents('.h5p-dialog').off('mousedown.speechBubble'); - if (iDevice) { - H5P.$body.css('cursor', ''); - } - if ($currentSpeechBubble !== undefined) { - // Apply transition, then remove speech bubble - $currentSpeechBubble.removeClass('show'); - - // Make sure we remove any old timeout before reassignment - clearTimeout(removeSpeechBubbleTimeout); - removeSpeechBubbleTimeout = setTimeout(function () { - $currentSpeechBubble.remove(); - $currentSpeechBubble = undefined; - }, 500); - } - // Don't return false here. If the user e.g. clicks a button when the bubble is visible, - // we want the bubble to disapear AND the button to receive the event - }; - - /** - * Remove the speech bubble and container reference - */ - function handleOutsideClick(event) { - if (event.target === $currentContainer[0]) { - return; // Button clicks are not outside clicks - } - - remove(); - // There is no current container when a container isn't clicked - $currentContainer = undefined; - } - - /** - * Calculate position for speech bubble - * - * @param {number} bubbleWidth The width of the speech bubble - * @param {object} offset - * @return {object} Return position for the speech bubble - */ - function getBubblePosition(bubbleWidth, offset) { - var bubblePosition = {}; - - var tailOffset = 9; - var widthOffset = bubbleWidth / 2; - - // Calculate top position - bubblePosition.top = offset.top + offset.innerHeight; - - // Calculate bottom position - bubblePosition.bottom = offset.bottom + offset.innerHeight + tailOffset; - - // Calculate left position - if (offset.left < widthOffset) { - bubblePosition.left = 3; - } - else if ((offset.left + widthOffset) > offset.outerWidth) { - bubblePosition.left = offset.outerWidth - bubbleWidth - 3; - } - else { - bubblePosition.left = offset.left - widthOffset + (offset.innerWidth / 2); - } - - return bubblePosition; - } - - /** - * Calculate position for speech bubble tail - * - * @param {number} bubbleWidth The width of the speech bubble - * @param {object} bubblePosition Speech bubble position - * @param {object} offset - * @param {number} iconWidth The width of the tip icon - * @return {object} Return position for the tail - */ - function getTailPosition(bubbleWidth, bubblePosition, offset, iconWidth) { - var tailPosition = {}; - // Magic numbers. Tuned by hand so that the tail fits visually within - // the bounds of the speech bubble. - var leftBoundary = 9; - var rightBoundary = bubbleWidth - 20; - - tailPosition.left = offset.left - bubblePosition.left + (iconWidth / 2) - 6; - if (tailPosition.left < leftBoundary) { - tailPosition.left = leftBoundary; - } - if (tailPosition.left > rightBoundary) { - tailPosition.left = rightBoundary; - } - - tailPosition.top = -6; - tailPosition.bottom = -6; - - return tailPosition; - } - - /** - * Return bubble CSS for the desired growth direction - * - * @param {string} direction The direction the speech bubble will grow - * @param {number} width The width of the speech bubble - * @param {object} position Speech bubble position - * @param {number} fontSize The size of the bubbles font - * @return {object} Return CSS - */ - function bubbleCSS(direction, width, position, fontSize) { - if (direction === 'top') { - return { - width: width + 'px', - bottom: position.bottom + 'px', - left: position.left + 'px', - fontSize: fontSize + 'px', - top: '' - }; - } - else { - return { - width: width + 'px', - top: position.top + 'px', - left: position.left + 'px', - fontSize: fontSize + 'px', - bottom: '' - }; - } - } - - /** - * Return tail CSS for the desired growth direction - * - * @param {string} direction The direction the speech bubble will grow - * @param {object} position Tail position - * @return {object} Return CSS - */ - function tailCSS(direction, position) { - if (direction === 'top') { - return { - bottom: position.bottom + 'px', - left: position.left + 'px', - top: '' - }; - } - else { - return { - top: position.top + 'px', - left: position.left + 'px', - bottom: '' - }; - } - } - - /** - * Calculates the offset between an element inside a container and the - * container. Only works if all the edges of the inner element are inside the - * outer element. - * Width/height of the elements is included as a convenience. - * - * @param {H5P.jQuery} $outer - * @param {H5P.jQuery} $inner - * @return {object} Position offset - */ - function getOffsetBetween($outer, $inner) { - var outer = $outer[0].getBoundingClientRect(); - var inner = $inner[0].getBoundingClientRect(); - - return { - top: inner.top - outer.top, - right: outer.right - inner.right, - bottom: outer.bottom - inner.bottom, - left: inner.left - outer.left, - innerWidth: inner.width, - innerHeight: inner.height, - outerWidth: outer.width, - outerHeight: outer.height - }; - } - - return JoubelSpeechBubble; -})(H5P.jQuery); diff --git a/test/full_workspace/H5P.JoubelUI-1.3/js/joubel-throbber.js b/test/full_workspace/H5P.JoubelUI-1.3/js/joubel-throbber.js deleted file mode 100644 index ef98bfbf..00000000 --- a/test/full_workspace/H5P.JoubelUI-1.3/js/joubel-throbber.js +++ /dev/null @@ -1,19 +0,0 @@ -var H5P = H5P || {}; - -H5P.JoubelThrobber = (function ($) { - - /** - * Creates a new tip - */ - function JoubelThrobber() { - - // h5p-throbber css is described in core - var $throbber = $('
', { - 'class': 'h5p-throbber' - }); - - return $throbber; - } - - return JoubelThrobber; -}(H5P.jQuery)); diff --git a/test/full_workspace/H5P.JoubelUI-1.3/js/joubel-tip.js b/test/full_workspace/H5P.JoubelUI-1.3/js/joubel-tip.js deleted file mode 100644 index abd58be9..00000000 --- a/test/full_workspace/H5P.JoubelUI-1.3/js/joubel-tip.js +++ /dev/null @@ -1,106 +0,0 @@ -H5P.JoubelTip = (function ($) { - var $conv = $('
'); - - /** - * Creates a new tip element. - * - * NOTE that this may look like a class but it doesn't behave like one. - * It returns a jQuery object. - * - * @param {string} tipHtml The text to display in the popup - * @param {Object} [behaviour] Options - * @param {string} [behaviour.tipLabel] Set to use a custom label for the tip button (you want this for good A11Y) - * @param {boolean} [behaviour.helpIcon] Set to 'true' to Add help-icon classname to Tip button (changes the icon) - * @param {boolean} [behaviour.showSpeechBubble] Set to 'false' to disable functionality (you may this in the editor) - * @param {boolean} [behaviour.tabcontrol] Set to 'true' if you plan on controlling the tabindex in the parent (tabindex="-1") - * @return {H5P.jQuery|undefined} Tip button jQuery element or 'undefined' if invalid tip - */ - function JoubelTip(tipHtml, behaviour) { - - // Keep track of the popup that appears when you click the Tip button - var speechBubble; - - // Parse tip html to determine text - var tipText = $conv.html(tipHtml).text().trim(); - if (tipText === '') { - return; // The tip has no textual content, i.e. it's invalid. - } - - // Set default behaviour - behaviour = $.extend({ - tipLabel: tipText, - helpIcon: false, - showSpeechBubble: true, - tabcontrol: false - }, behaviour); - - // Create Tip button - var $tipButton = $('
', { - class: 'joubel-tip-container' + (behaviour.showSpeechBubble ? '' : ' be-quiet'), - title: behaviour.tipLabel, - 'aria-label': behaviour.tipLabel, - 'aria-expanded': false, - role: 'button', - tabindex: (behaviour.tabcontrol ? -1 : 0), - click: function (event) { - // Toggle show/hide popup - toggleSpeechBubble(); - event.preventDefault(); - }, - keydown: function (event) { - if (event.which === 32 || event.which === 13) { // Space & enter key - // Toggle show/hide popup - toggleSpeechBubble(); - event.stopPropagation(); - event.preventDefault(); - } - else { // Any other key - // Toggle hide popup - toggleSpeechBubble(false); - } - }, - // Add markup to render icon - html: '' + - '' + - '' + - '' + - '' - // IMPORTANT: All of the markup elements must have 'pointer-events: none;' - }); - - const $tipAnnouncer = $('
', { - 'class': 'hidden-but-read', - 'aria-live': 'polite', - appendTo: $tipButton, - }); - - /** - * Tip button interaction handler. - * Toggle show or hide the speech bubble popup when interacting with the - * Tip button. - * - * @private - * @param {boolean} [force] 'true' shows and 'false' hides. - */ - var toggleSpeechBubble = function (force) { - if (speechBubble !== undefined && speechBubble.isCurrent($tipButton)) { - // Hide current popup - speechBubble.remove(); - speechBubble = undefined; - - $tipButton.attr('aria-expanded', false); - $tipAnnouncer.html(''); - } - else if (force !== false && behaviour.showSpeechBubble) { - // Create and show new popup - speechBubble = H5P.JoubelSpeechBubble($tipButton, tipHtml); - $tipButton.attr('aria-expanded', true); - $tipAnnouncer.html(tipHtml); - } - }; - - return $tipButton; - } - - return JoubelTip; -})(H5P.jQuery); diff --git a/test/full_workspace/H5P.JoubelUI-1.3/js/joubel-ui.js b/test/full_workspace/H5P.JoubelUI-1.3/js/joubel-ui.js deleted file mode 100644 index 3d9388fc..00000000 --- a/test/full_workspace/H5P.JoubelUI-1.3/js/joubel-ui.js +++ /dev/null @@ -1,183 +0,0 @@ -var H5P = H5P || {}; - -/** - * H5P Joubel UI library. - * - * This is a utility library, which does not implement attach. I.e, it has to bee actively used by - * other libraries - * @module - */ -H5P.JoubelUI = (function ($) { - - /** - * The internal object to return - * @class H5P.JoubelUI - * @static - */ - function JoubelUI() {} - - /* Public static functions */ - - /** - * Create a tip icon - * @method H5P.JoubelUI.createTip - * @param {string} text The textual tip - * @param {Object} params Parameters - * @return {H5P.JoubelTip} - */ - JoubelUI.createTip = function (text, params) { - return new H5P.JoubelTip(text, params); - }; - - /** - * Create message dialog - * @method H5P.JoubelUI.createMessageDialog - * @param {H5P.jQuery} $container The dom container - * @param {string} message The message - * @return {H5P.JoubelMessageDialog} - */ - JoubelUI.createMessageDialog = function ($container, message) { - return new H5P.JoubelMessageDialog($container, message); - }; - - /** - * Create help text dialog - * @method H5P.JoubelUI.createHelpTextDialog - * @param {string} header The textual header - * @param {string} message The textual message - * @param {string} closeButtonTitle The title for the close button - * @return {H5P.JoubelHelpTextDialog} - */ - JoubelUI.createHelpTextDialog = function (header, message, closeButtonTitle) { - return new H5P.JoubelHelpTextDialog(header, message, closeButtonTitle); - }; - - /** - * Create progress circle - * @method H5P.JoubelUI.createProgressCircle - * @param {number} number The progress (0 to 100) - * @param {string} progressColor The progress color in hex value - * @param {string} fillColor The fill color in hex value - * @param {string} backgroundColor The background color in hex value - * @return {H5P.JoubelProgressCircle} - */ - JoubelUI.createProgressCircle = function (number, progressColor, fillColor, backgroundColor) { - return new H5P.JoubelProgressCircle(number, progressColor, fillColor, backgroundColor); - }; - - /** - * Create throbber for loading - * @method H5P.JoubelUI.createThrobber - * @return {H5P.JoubelThrobber} - */ - JoubelUI.createThrobber = function () { - return new H5P.JoubelThrobber(); - }; - - /** - * Create simple rounded button - * @method H5P.JoubelUI.createSimpleRoundedButton - * @param {string} text The button label - * @return {H5P.SimpleRoundedButton} - */ - JoubelUI.createSimpleRoundedButton = function (text) { - return new H5P.SimpleRoundedButton(text); - }; - - /** - * Create Slider - * @method H5P.JoubelUI.createSlider - * @param {Object} [params] Parameters - * @return {H5P.JoubelSlider} - */ - JoubelUI.createSlider = function (params) { - return new H5P.JoubelSlider(params); - }; - - /** - * Create Score Bar - * @method H5P.JoubelUI.createScoreBar - * @param {number=} maxScore The maximum score - * @param {string} [label] Makes it easier for readspeakers to identify the scorebar - * @return {H5P.JoubelScoreBar} - */ - JoubelUI.createScoreBar = function (maxScore, label, helpText, scoreExplanationButtonLabel) { - return new H5P.JoubelScoreBar(maxScore, label, helpText, scoreExplanationButtonLabel); - }; - - /** - * Create Progressbar - * @method H5P.JoubelUI.createProgressbar - * @param {number=} numSteps The total numer of steps - * @param {Object} [options] Additional options - * @param {boolean} [options.disableAria] Disable readspeaker assistance - * @param {string} [options.progressText] A progress text for describing - * current progress out of total progress for readspeakers. - * e.g. "Slide :num of :total" - * @return {H5P.JoubelProgressbar} - */ - JoubelUI.createProgressbar = function (numSteps, options) { - return new H5P.JoubelProgressbar(numSteps, options); - }; - - /** - * Create standard Joubel button - * - * @method H5P.JoubelUI.createButton - * @param {object} params - * May hold any properties allowed by jQuery. If href is set, an A tag - * is used, if not a button tag is used. - * @return {H5P.jQuery} The jquery element created - */ - JoubelUI.createButton = function(params) { - var type = 'button'; - if (params.href) { - type = 'a'; - } - else { - params.type = 'button'; - } - if (params.class) { - params.class += ' h5p-joubelui-button'; - } - else { - params.class = 'h5p-joubelui-button'; - } - return $('<' + type + '/>', params); - }; - - /** - * Fix for iframe scoll bug in IOS. When focusing an element that doesn't have - * focus support by default the iframe will scroll the parent frame so that - * the focused element is out of view. This varies dependening on the elements - * of the parent frame. - */ - if (H5P.isFramed && !H5P.hasiOSiframeScrollFix && - /iPad|iPhone|iPod/.test(navigator.userAgent)) { - H5P.hasiOSiframeScrollFix = true; - - // Keep track of original focus function - var focus = HTMLElement.prototype.focus; - - // Override the original focus - HTMLElement.prototype.focus = function () { - // Only focus the element if it supports it natively - if ( (this instanceof HTMLAnchorElement || - this instanceof HTMLInputElement || - this instanceof HTMLSelectElement || - this instanceof HTMLTextAreaElement || - this instanceof HTMLButtonElement || - this instanceof HTMLIFrameElement || - this instanceof HTMLAreaElement) && // HTMLAreaElement isn't supported by Safari yet. - !this.getAttribute('role')) { // Focus breaks if a different role has been set - // In theory this.isContentEditable should be able to recieve focus, - // but it didn't work when tested. - - // Trigger the original focus with the proper context - focus.call(this); - } - }; - } - - return JoubelUI; -})(H5P.jQuery); diff --git a/test/full_workspace/H5P.JoubelUI-1.3/library.json b/test/full_workspace/H5P.JoubelUI-1.3/library.json deleted file mode 100644 index 880ce2b9..00000000 --- a/test/full_workspace/H5P.JoubelUI-1.3/library.json +++ /dev/null @@ -1,107 +0,0 @@ -{ - "title": "Joubel UI", - "contentType": "Utility", - "description": "UI utility library", - "majorVersion": 1, - "minorVersion": 3, - "patchVersion": 9, - "runnable": 0, - "coreApi": { - "majorVersion": 1, - "minorVersion": 3 - }, - "machineName": "H5P.JoubelUI", - "author": "Joubel", - "preloadedJs": [ - { - "path": "js/joubel-help-dialog.js" - }, - { - "path": "js/joubel-message-dialog.js" - }, - { - "path": "js/joubel-progress-circle.js" - }, - { - "path": "js/joubel-simple-rounded-button.js" - }, - { - "path": "js/joubel-speech-bubble.js" - }, - { - "path": "js/joubel-throbber.js" - }, - { - "path": "js/joubel-tip.js" - }, - { - "path": "js/joubel-slider.js" - }, - { - "path": "js/joubel-score-bar.js" - }, - { - "path": "js/joubel-progressbar.js" - }, - { - "path": "js/joubel-ui.js" - } - ], - "preloadedCss": [ - { - "path": "css/joubel-help-dialog.css" - }, - { - "path": "css/joubel-message-dialog.css" - }, - { - "path": "css/joubel-progress-circle.css" - }, - { - "path": "css/joubel-simple-rounded-button.css" - }, - { - "path": "css/joubel-speech-bubble.css" - }, - { - "path": "css/joubel-tip.css" - }, - { - "path": "css/joubel-slider.css" - }, - { - "path": "css/joubel-score-bar.css" - }, - { - "path": "css/joubel-progressbar.css" - }, - { - "path": "css/joubel-ui.css" - }, - { - "path": "css/joubel-icon.css" - } - ], - "preloadedDependencies": [ - { - "machineName": "FontAwesome", - "majorVersion": 4, - "minorVersion": 5 - }, - { - "machineName": "H5P.Transition", - "majorVersion": 1, - "minorVersion": 0 - }, - { - "machineName": "Drop", - "majorVersion": 1, - "minorVersion": 0 - }, - { - "machineName": "H5P.FontIcons", - "majorVersion": 1, - "minorVersion": 0 - } - ] -} \ No newline at end of file diff --git a/test/full_workspace/H5P.Question-1.4/images/minus-one.svg b/test/full_workspace/H5P.Question-1.4/images/minus-one.svg deleted file mode 100644 index 688eaaa0..00000000 --- a/test/full_workspace/H5P.Question-1.4/images/minus-one.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - diff --git a/test/full_workspace/H5P.Question-1.4/images/plus-one.svg b/test/full_workspace/H5P.Question-1.4/images/plus-one.svg deleted file mode 100644 index be4d5f74..00000000 --- a/test/full_workspace/H5P.Question-1.4/images/plus-one.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - diff --git a/test/full_workspace/H5P.Question-1.4/library.json b/test/full_workspace/H5P.Question-1.4/library.json deleted file mode 100644 index 49d1431f..00000000 --- a/test/full_workspace/H5P.Question-1.4/library.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "title": "Question", - "machineName": "H5P.Question", - "majorVersion": 1, - "minorVersion": 4, - "patchVersion": 6, - "runnable": 0, - "license": "MIT", - "author": "Joubel", - "coreApi": { - "majorVersion": 1, - "minorVersion": 7 - }, - "preloadedCss": [ - { - "path": "styles/question.css" - }, - { - "path": "styles/explainer.css" - } - ], - "preloadedJs": [ - { - "path": "scripts/question.js" - }, - { - "path": "scripts/explainer.js" - }, - { - "path": "scripts/score-points.js" - } - ], - "preloadedDependencies": [ - { - "machineName": "FontAwesome", - "majorVersion": 4, - "minorVersion": 5 - }, - { - "machineName": "H5P.JoubelUI", - "majorVersion": 1, - "minorVersion": 3 - } - ] -} diff --git a/test/full_workspace/H5P.Question-1.4/scripts/explainer.js b/test/full_workspace/H5P.Question-1.4/scripts/explainer.js deleted file mode 100644 index d9ab0771..00000000 --- a/test/full_workspace/H5P.Question-1.4/scripts/explainer.js +++ /dev/null @@ -1,84 +0,0 @@ -H5P.Question.Explainer = (function ($) { - /** - * Constructor - * - * @class - * @param {string} title - * @param {array} explanations - */ - function Explainer(title, explanations) { - var self = this; - - /** - * Create the DOM structure - */ - var createHTML = function () { - self.$explanation = $('
', { - 'class': 'h5p-question-explanation-container' - }); - - // Add title: - $('
', { - 'class': 'h5p-question-explanation-title', - role: 'heading', - html: title, - appendTo: self.$explanation - }); - - var $explanationList = $('