1 /*
  2  * Timemap.js Copyright 2010 Nick Rabinowitz.
  3  * Licensed under the MIT License (see LICENSE.txt)
  4  */
  5  
  6 /**
  7  * @fileOverview
  8  * XML Loader
  9  *
 10  * @author Nick Rabinowitz (www.nickrabinowitz.com)
 11  */
 12  
 13 /*globals TimeMap */
 14 
 15  /**
 16  * @class
 17  * This is a base loader class for XML files.
 18  *
 19  * @augments TimeMap.loaders.remote
 20  * @requires param.js
 21  *
 22  * @param {Object} options          All options for the loader
 23  * @param {String} options.url              URL of XML file to load (NB: must be local address)
 24  * @parem {String[]} [options.extraTags]    Array of names for extra tag elements to load
 25  * @param {Object} [options.tagMap]         Map of tagName:paramName pairs, if you want to load
 26  *                                          data into a differently-named elements
 27  * @param {mixed} [options[...]]            Other options (see {@link TimeMap.loaders.remote})
 28  * @return {TimeMap.loaders.remote} Remote loader configured for XML
 29  */
 30 TimeMap.loaders.xml = function(options) {
 31     var loader = new TimeMap.loaders.remote(options),
 32         tagMap = options.tagMap || {},
 33         extraTags = options.extraTags || [],
 34         params = loader.params, 
 35         paramName, tagName, x;
 36     
 37     /**
 38      * Additional parameters to load
 39      * @name TimeMap.loaders.xml#extraParams
 40      * @type TimeMap.params.OptionParam[]
 41      */
 42     loader.extraParams = [];
 43     
 44     // set up extra params
 45     for (x=0; x < extraTags.length; x++) {
 46         tagName = extraTags[x];
 47         loader.extraParams.push(
 48             new TimeMap.params.OptionParam(tagMap[tagName] || tagName, {
 49                 sourceName: tagName
 50             })
 51         );
 52     }
 53     
 54     /**
 55      * Parse any extra tags that have been specified into the config object
 56      * @name TimeMap.loaders.xml#parseExtra
 57      * @function
 58      *
 59      * @param {Object} config       Config object to modify
 60      * @param {XML NodeList} node   Parent node to look for tags in
 61      */
 62     loader.parseExtra = function(config, node) {
 63         var extraParams = loader.extraParams, x;
 64         for (x=0; x<extraParams.length; x++) {
 65             extraParams[x].setConfigXML(config, node);
 66         }
 67         node = null;
 68     };
 69     
 70     return loader;
 71 };
 72