1
|
/*
|
2
|
* $Id: FlickrRest2Wfs.js 3883 2008-02-27 15:42:01Z gjvoosten $
|
3
|
*/
|
4
|
|
5
|
// Ensure this object's dependancies are loaded.
|
6
|
mapbuilder.loadScript(baseDir+"/tool/ToolBase.js");
|
7
|
|
8
|
/**
|
9
|
* ad-hoc tool to load flickr rest feed with a single xsl transformation.
|
10
|
* this tool populates its model on init.
|
11
|
* @constructor
|
12
|
* @param toolNode config node for this tool
|
13
|
* @param model model that contains this tool
|
14
|
*/
|
15
|
function FlickrRest2Wfs(toolNode, model) {
|
16
|
ToolBase.apply(this, new Array(toolNode, model));
|
17
|
|
18
|
this.url = this.getProperty('mb:url');
|
19
|
this.stylesheet = this.getProperty('mb:stylesheet');
|
20
|
|
21
|
model.addListener('init', this.safeTransform, this);
|
22
|
}
|
23
|
|
24
|
/**
|
25
|
* XSL transformation, works also on IE with external documents and proxy.
|
26
|
* @param objRef reference to this tool
|
27
|
*/
|
28
|
FlickrRest2Wfs.prototype.safeTransform = function(objRef) {
|
29
|
var url = config.proxyUrl+"?url="+escape(objRef.url);
|
30
|
if (MB_IS_MOZ) {
|
31
|
var xmlHttp = new XMLHttpRequest();
|
32
|
xmlHttp.open("GET", url, false);
|
33
|
xmlHttp.send('');
|
34
|
var doc = xmlHttp.responseXML;
|
35
|
var stylesheet = new XslProcessor(objRef.stylesheet, objRef.model.namespace);
|
36
|
stylesheet.setParameter('proxyUrl', config.proxyUrl);
|
37
|
objRef.model.doc = stylesheet.transformNodeToObject(doc);
|
38
|
} else {
|
39
|
var progids = {domdoc: ['Msxml2.DOMDocument.3.0', 'Msxml2.DOMDocument.6.0'],
|
40
|
freethreaded: ['Msxml2.FreeThreadedDOMDocument.3.0', 'Msxml2.FreeThreadedDOMDocument.6.0'],
|
41
|
xsltpl: ['MSXML2.XSLTemplate.3.0', 'MSXML2.XSLTemplate.6.0'],
|
42
|
xmlhttp: ['Msxml2.XMLHTTP.3.0', 'Msxml2.XMLHTTP.6.0']};
|
43
|
var xml;
|
44
|
for (var i in progids.domdoc) {
|
45
|
try {
|
46
|
xml = new ActiveXObject(progids.domdoc[i]);
|
47
|
break;
|
48
|
} catch (e) {}
|
49
|
}
|
50
|
var xsl = new ActiveXObject(progids.freethreaded[i]);
|
51
|
var docCache = new ActiveXObject(progids.xsltpl[i]);
|
52
|
|
53
|
var xmlHttp = new ActiveXObject(progids.xmlhttp[i]);
|
54
|
xmlHttp.open('GET', objRef.stylesheet, false);
|
55
|
xmlHttp.send(null);
|
56
|
var xslText = xmlHttp.responseText;
|
57
|
|
58
|
// replace url-encoded "%"s in urls to %25, so they get
|
59
|
// double-escaped. Ugly hack, but IE needs that.
|
60
|
var regex = new RegExp("/\?url=(.[^']*)'/g");
|
61
|
var toReplace = xslText.match(/\?url=(.[^']*)'/g);
|
62
|
for (var i=0; i<toReplace.length; i++) {
|
63
|
xslText = xslText.replace(toReplace[i], toReplace[i].replace(/%/g,'%25'));
|
64
|
}
|
65
|
|
66
|
xml.validateOnParse = false;
|
67
|
xsl.validateOnParse = false;
|
68
|
xsl.resolveExternals = true;
|
69
|
xsl.setProperty("AllowDocumentFunction",true);
|
70
|
xsl.async = false;
|
71
|
xml.async = false;
|
72
|
xsl.loadXML(xslText);
|
73
|
xml.load(url);
|
74
|
docCache.stylesheet = xsl;
|
75
|
var docProcessor = docCache.createProcessor();
|
76
|
docProcessor.input = xml;
|
77
|
docProcessor.addParameter('proxyUrl', config.proxyUrl, '');
|
78
|
docProcessor.transform();
|
79
|
objRef.model.doc = (new DOMParser()).parseFromString(docProcessor.output, "text/xml");
|
80
|
}
|
81
|
objRef.model.callListeners('refresh');
|
82
|
}
|
83
|
|