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