gs.content.js.loader API¶
In GroupServer a page may be made up of multiple components that are quite separate from each other. A common pattern is for some a component to add some HTML to the page, and then to inject some JavaScript code into the bottom of the page. Each component is usually unaware of what modules have been loaded by the other components. To get around this global tracking of loaded modules prevents modules from being loaded and parsed unnecessarily. While originally written for GroupServer, there is nothing specific to GroupServer in this product.
-
gsJsLoader¶ The global object (singleton) that keeps track of what is loaded.
The gsJsLoader.with_module() method of the
gsJsLoader object loads one or more resources and runs a
function afterwards. Introspection is provided by the
gsJsLoader.loaded(), gsJsLoader.loading() and
gsJsLoader.exists() methods.
-
gsJsLoader.with_module(url | [url1, url2… urlN], fn)¶ Arguments: - url (string) – The URL of the module you wish to load. If a list of URLs is supplied each module is loaded in sequence.
- fn (function) – The function to execute after the module has loaded. (Usually this is the code that depends on the module.) If a list of URLs is supplied as the first argument then the function is executed after all the modules have been loaded.
Returns: Nothing.
With some modules run a function.
- If the module has not been loaded and not been requested:
- Inserts
<script>elements into the<head>of the document, to cause the module or modules specified inurlto load. - Connects the
functionto theload(oronloadfor older versions of Internet Explorer) callback of the<script>.
- Inserts
- If the module has been requested, but has not been loaded:
- Connects the
functionto theloadcallback of the<script>.
- Connects the
- If the module has been loaded:
- Calls the
function.
- Calls the
-
gsJsLoader.loaded(url)¶ Arguments: - url (string) – The URL of the module to test.
Returns: trueif the module has been loaded;falseif the module is being loaded or has yet to be requested.Return type: boolean
This function tests if a module has been loaded (past-tense).
-
gsJsLoader.loading(url)¶ Arguments: - url (string) – The URL of the module to test.
Returns: trueif the module is being loaded;falseif the module has been loaded or has not been requested.Return type: boolean
Test if a module is being loaded (present continuous tense).
-
gsJsLoader.exists(url)¶ Arguments: - url (string) – The URL of the module to test.
Returns: trueif the module has being loaded or has been requested;falseotherwise.Return type: boolean
Test if a module is known (it has either been loaded, or is being loaded).
Examples¶
Run the function init_topic_search with the base search code:
gsJsLoader.with_module('/++resource++gs-search-base-js-20121217.js',
init_topic_search);
Load two modules, jQuery and then Twitter Bootstrap. Execute the
function my_code after both modules have been loaded.
gsJsLoader.with_module(['/++resource++jquery-1.8.3.js',
'/++resource++bootstrap-2.2.2/js/bootstrap.js'],
my_code);
Wait for the window to load, then initialise the post searching
code. Detect and support loading if we are using a version of
Microsoft Internet Explorer that does not support the standard
addEventListener method:
if (window.addEventListener) {
window.addEventListener('load', function () {
gsJsLoader.with_module(
'/++resource++gs-search-base-js-20121217.js',
init_post_search);
}, false);
} else {
window.attachEvent('onload', function () {
gsJsLoader.with_module(
'/++resource++gs-search-base-js-20121217.js',
init_post_search);
});
}
The same call as above, but using jQuery to attach to the
load event:
jQuery(window).load(function () {
gsJsLoader.with_module(
'/++resource++gs-search-base-js-20121217.js',
init_post_search);
});
(This module is devoid of jQuery code, so it can be used to load jQuery.)