dojo
Version:
Dojo core is a powerful, lightweight library that makes common tasks quicker and easier. Animate elements, manipulate the DOM, and query with easy CSS syntax, all without sacrificing performance.
112 lines (102 loc) • 2.27 kB
JavaScript
define([
'../util',
'intern/dojo/node!querystring'
], function (util, qs) {
function xml() {
return {
status: 200,
headers: {
'Content-Type': 'text/xml'
},
body: [
'<?xml version="1.0" encoding="UTF-8"?>\n',
'<Envelope title="Test of dojo.io.iframe xml test">\n',
'<Children>\n',
'<child>FOO</child>\n',
'<child>BAR</child>\n',
'<child>BAZ</child>\n',
'<child>BAT</child>\n',
'</Children>\n',
'<![CDATA[\n',
'function(){\n',
'for(var i=0; i<somethign; i++){\n',
'if(foo>bar){ /* whatever */ }\n',
'}\n',
'}\n',
']]>\n',
'<a href="something">something else</a>\n',
'</Envelope>'
]
};
}
function html(data) {
return {
status: 200,
headers: {
'Content-Type': 'text/html'
},
body: [
'<html>',
'<head></head>',
'<body>',
data,
'</body>',
'</html>'
]
};
}
function textarea(data) {
return '<textarea style="width:100%; height: 100px;">' + data + '</textarea>';
}
return function (request) {
var promise = new util.Promise(function (resolve) {
function respond(data) {
if (request.query.type === 'html') {
data = '<h1>SUCCESSFUL HTML response</h1>';
}
else {
if (request.query.type === 'json') {
data = JSON.stringify({
method: request.method,
query: request.query,
payload: data
});
}
else if (request.query.type === 'javascript') {
data = 'window.iframeTestingFunction = function(){ return 42; };';
}
else if (request.query.text) {
data = request.query.text;
}
else {
data = 'iframe succeeded';
}
data = textarea(data);
}
resolve(html(data));
}
if (request.query.type === 'xml') {
resolve(xml());
return;
}
if (request.data) {
request.data.then(respond);
return;
}
if (request.method !== 'GET') {
request.body.join().then(function (data) {
data = qs.parse(data);
respond(data);
});
return;
}
respond();
});
var milliseconds = request.query.delay;
if (milliseconds) {
milliseconds = parseInt(milliseconds, 10);
promise = util.delay(promise, milliseconds);
}
return promise;
};
});