mirror of
https://github.com/humhub/humhub.git
synced 2025-01-17 22:28:51 +01:00
97 lines
2.9 KiB
JavaScript
97 lines
2.9 KiB
JavaScript
/**
|
|
* This module is not in use since Yii provides an build in mechanism for blocking
|
|
* ajax requests for scripts already loaded.
|
|
*
|
|
* This module provides functions to keep track of loaded scripts and load scripts
|
|
* once synchronously or asynchronously.
|
|
*
|
|
* @param {type} param1
|
|
* @param {type} param2
|
|
*/
|
|
humhub.initModule('scripts', function(module, require, $) {
|
|
var _scripts = [];
|
|
|
|
$(document).ready(function() {
|
|
$('script[src]').each(function() {
|
|
addScript(cutTimestamp($(this).attr('src')));
|
|
});
|
|
});
|
|
|
|
var cutTimestamp = function(url) {
|
|
return url.split('?')[0];
|
|
};
|
|
|
|
var loadOnce = function(urls) {
|
|
urls = $.isArray(urls) ? urls : [urls];
|
|
|
|
var promises = [];
|
|
$.each(urls, function(index, scriptUrl) {
|
|
if(!containsScript(scriptUrl)) {
|
|
addScript(scriptUrl);
|
|
promises.push($.getScript(scriptUrl));
|
|
}
|
|
});
|
|
|
|
promises.push($.Deferred(function( deferred ){
|
|
$( deferred.resolve );
|
|
}));
|
|
|
|
return $.when.apply(null, promises);
|
|
};
|
|
|
|
var loadOnceSync = function(urls, callback) {
|
|
var deferred = new $.Deferred();
|
|
var promise = deferred.promise();
|
|
$.each(urls, function(index, scriptUrl) {
|
|
if(!containsScript(scriptUrl)) {
|
|
// we need an immediately invoked function expression to capture
|
|
// the current value of the iteration
|
|
(function(url) {
|
|
// chaining the promises,
|
|
// by assigning the new promise to the variable
|
|
// and returning a promise from the callback
|
|
promise = promise.then(function() {
|
|
addScript(url);
|
|
return $.getScript(url).done(function(){});
|
|
});
|
|
}(scriptUrl));
|
|
}
|
|
});
|
|
|
|
promise.done(function() {
|
|
callback.apply();
|
|
});
|
|
|
|
promise.fail(function(arg) {
|
|
console.error('Failed loading scripts for: '+arg);
|
|
//Call callback anyway
|
|
callback.apply();
|
|
});
|
|
|
|
deferred.resolve();
|
|
};
|
|
|
|
var containsScript = function(url) {
|
|
var result = false;
|
|
url = cutTimestamp(url);
|
|
$.each(_scripts, function(index, scriptUrl) {
|
|
if(scriptUrl === url) {
|
|
result = true;
|
|
return false; //leave each
|
|
}
|
|
});
|
|
return result;
|
|
};
|
|
|
|
var addScript = function(url) {
|
|
url = cutTimestamp(url);
|
|
_scripts.push(url);
|
|
};
|
|
|
|
module.export({
|
|
loadOnce: loadOnce,
|
|
loadOnceSync: loadOnceSync,
|
|
containsScript: containsScript,
|
|
addScript:addScript
|
|
});
|
|
}); |