AutorÃa | Ultima modificación | Ver Log |
/*** The library list cache** @type Object*/var llc = H5PEditor.LibraryListCache = {libraryCache: {},librariesComingIn: {},librariesMissing: {},que: []};/*** Get data for a list of libraries** @param {Array} libraries - list of libraries to load info for (uber names)* @param {Function} handler - Callback when list of libraries is loaded* @param {Function} [thisArg] - Context for the callback function*/llc.getLibraries = function (libraries, handler, thisArg) {// Determine whether we're dealing with simple library strings or objectslibraries = libraries.map(function (option) {return (typeof option === 'object') ? option.name : option;});var cachedLibraries = [];var status = 'hasAll';for (var i = 0; i < libraries.length; i++) {if (libraries[i] in llc.libraryCache) {// Libraries that are missing on the server are set to null...if (llc.libraryCache[libraries[i]] !== null) {cachedLibraries.push(llc.libraryCache[libraries[i]]);}}else if (libraries[i] in llc.librariesComingIn) {if (status === 'hasAll') {status = 'onTheWay';}}else {status = 'requestThem';llc.librariesComingIn[libraries[i]] = true;}}switch (status) {case 'hasAll':handler.call(thisArg, cachedLibraries);break;case 'onTheWay':llc.que.push({libraries: libraries, handler: handler, thisArg: thisArg});break;case 'requestThem':var ajaxParams = {type: "POST",url: H5PEditor.getAjaxUrl('libraries'),success: function (data) {llc.setLibraries(data, libraries);handler.call(thisArg, data);llc.runQue();},data: {'libraries': libraries},dataType: "json"};H5PEditor.$.ajax(ajaxParams);break;}};/*** Call all qued handlers*/llc.runQue = function () {var l = llc.que.length;for (var i = 0; i < l; i++) {var handlerObject = llc.que.shift();llc.getLibraries(handlerObject.libraries, handlerObject.handler, handlerObject.thisArg);}};/*** We've got new libraries from the server, save them** @param {Array} libraries - Libraries with info from server* @param {Array} requestedLibraries - List of what libraries we requested*/llc.setLibraries = function (libraries, requestedLibraries) {var reqLibraries = requestedLibraries.slice();for (var i = 0; i < libraries.length; i++) {llc.libraryCache[libraries[i].uberName] = libraries[i];if (libraries[i].uberName in llc.librariesComingIn) {delete llc.librariesComingIn[libraries[i].uberName];}var index = reqLibraries.indexOf(libraries[i].uberName);if (index > -1) {reqLibraries.splice(index, 1);}}for (i = 0; i < reqLibraries.length; i++) {llc.libraryCache[reqLibraries[i]] = null;if (reqLibraries[i] in llc.librariesComingIn) {delete llc.librariesComingIn[libraries[i]];}}};/*** Creates a default content title, based on the title of the library* @param {String} uberName "<machineName> <major>.<minor>"* @return {String}*/llc.getDefaultTitle = function (uberName) {var libraryMetadata = llc.libraryCache[uberName];var title = libraryMetadata && libraryMetadata.title ? libraryMetadata.title : '';return H5PEditor.t('core', 'untitled').replace(':libraryTitle', title);};