====== Combining JavaScript Modules ======
When combining two or more JavaScript modules together, the first thing to consider is the use of CF.userMain function.\\
This function can only be implemented once in your entire project - see [[http://commandfusion.com/docs/scripting/startup.html#startup_sequence|here]] for more details on this.
As an example, lets say we have two scripts in our project, but both have defined their own CF.userMain() function, like so:
''Script1.js''
CF.userMain = function() {
// iViewer initialization is now complete and the CF environment is fully available
// Watch for page flips
CF.watch(CF.PageFlipEvent, onPageFlip);
// Watch for network status, get initial status
CF.watch(CF.NetworkStatusChangeEvent, onNetworkStatusChange);
// Watch for important system connects and disconnects
CF.watch(CF.ConnectionStatusChangeEvent, "TEST-SYSTEM", onTestSystemConnectionStatusChange, true);
CF.watch(CF.ConnectionStatusChangeEvent, "SERVER SYSTEM", onServerSystemConnectionStatusChange, true);
// Watch for some crucial join changes
CF.watch(CF.JoinChangeEvent, ["d10", "d11", "d12", "a50"], onImportantJoinChange);
};
''Script2.js''
CF.userMain = function() {
// Create interlock group for buttons
Interlock.create("buttons", "d1","d2","d3","d4");
// Create an interlock group for subpages
Interlock.create("subpages", ["d100", "d200", "d300", "d400"]);
// Setup a watch callback to display the current selection
Interlock.watch("buttons", function(group, currentSelection, previousSelection) {
CF.setJoin("s1", "Current selection in group 1 is " + currentSelection);
// show the subpage associated with interlock group 1
// do it the lazy way - d1 becomes d100, d2 becomes d200 etc
// when we show one of the subpages, the subpages interlock group kicks in and hides the others
Interlock.select("subpages", currentSelection+"00");
});
// Set the group initial values
Interlock.select("buttons", "d2");
};
The first thing you should do is create a single ''main.js'' file, and create a single CF.userMain function within it.\\
Then merge the contents of both CF.userMain functions (as defined in the two scripts above) into one like so:
''main.js''
CF.userMain = function() {
// iViewer initialization is now complete and the CF environment is fully available
// Watch for page flips
CF.watch(CF.PageFlipEvent, onPageFlip);
// Watch for network status, get initial status
CF.watch(CF.NetworkStatusChangeEvent, onNetworkStatusChange);
// Watch for important system connects and disconnects
CF.watch(CF.ConnectionStatusChangeEvent, "TEST-SYSTEM", onTestSystemConnectionStatusChange, true);
CF.watch(CF.ConnectionStatusChangeEvent, "SERVER SYSTEM", onServerSystemConnectionStatusChange, true);
// Watch for some crucial join changes
CF.watch(CF.JoinChangeEvent, ["d10", "d11", "d12", "a50"], onImportantJoinChange);
// Create interlock group for buttons
Interlock.create("buttons", "d1","d2","d3","d4");
// Create an interlock group for subpages
Interlock.create("subpages", ["d100", "d200", "d300", "d400"]);
// Setup a watch callback to display the current selection
Interlock.watch("buttons", function(group, currentSelection, previousSelection) {
CF.setJoin("s1", "Current selection in group 1 is " + currentSelection);
// show the subpage associated with interlock group 1
// do it the lazy way - d1 becomes d100, d2 becomes d200 etc
// when we show one of the subpages, the subpages interlock group kicks in and hides the others
Interlock.select("subpages", currentSelection+"00");
});
// Set the group initial values
Interlock.select("buttons", "d2");
};
Next step is to remove the CF.userMain functions completely from your other scripts. Only one JavaScript file in your entire guiDesigner project should mention CF.userMain (use find tools in your text editor to ensure they are completely removed from your original scripts).
Last step is to add the ''main.js'' script to your guiDesigner project by adding it to your project using the Script Manager (accessible via the main toolbar or via your project properties in guiDesigner).
It is a good idea to have ''main.js'' as the last script in your Script Manager - this just ensures that it is the last code run (but iViewer itself will make sure any content within CF.userMain is always the last thing to be run once the JavaScript API is running).