chronosjs
Version:
JS Channels Mechanism
202 lines (188 loc) • 6.88 kB
HTML
<html>
<head>
<meta charset="utf-8">
<title>Courier Tests</title>
<script type="text/javascript" src="../../src/util/EventsUtil.js"></script>
<script type="text/javascript" src="../../src/Events.js"></script>
<script type="text/javascript" src="../../src/util/CommandsUtil.js"></script>
<script type="text/javascript" src="../../src/Commands.js"></script>
<script type="text/javascript" src="../../src/Reqres.js"></script>
<script type="text/javascript" src="../../src/Channels.js"></script>
<script type="text/javascript" src="../../node_modules/cacherjs/src/cacher.js"></script>
<script type="text/javascript" src="../../node_modules/circuit-breakerjs/src/CircuitBreaker.js"></script>
<script type="text/javascript" src="../../src/courier/PostMessageUtilities.js"></script>
<script type="text/javascript" src="../../src/courier/PostMessagePromise.js"></script>
<script type="text/javascript" src="../../src/courier/PostMessageMapper.js"></script>
<script type="text/javascript" src="../../src/courier/PostMessageChannelPolyfill.js"></script>
<script type="text/javascript" src="../../src/courier/PostMessageChannel.js"></script>
<script type="text/javascript" src="../../src/courier/PostMessageCourier.js"></script>
<script type="text/javascript">
var courier = new Chronos.PostMessageCourier();
///// ---- BINDINGS ------ ////
courier.bind({
appName: "host",
eventName: "multiply",
func: multiply
});
courier.comply({
appName: "host",
cmdName: "square",
func: square
});
courier.comply({
appName: "host",
cmdName: "command",
func: command
});
courier.reply({
appName: "host",
reqName: "divide",
func: divide
});
courier.bind({
appName: "host",
eventName: "Ma Shlomha?",
func: function(data) {
courier.trigger({
appName: "iframe",
eventName: "HAKOL TOV!",
data: {
text: (data && data.text || "")
}
});
}
});
courier.comply({
appName: "host",
cmdName: "Ma Shlomha?",
func: function(data) {
if (data && data.text) {
return data.text;
}
}
});
courier.reply({
appName: "host",
reqName: "Ma Shlomha?",
func: function(data) {
return data && data.text;
}
});
courier.reply({
appName: "host",
reqName: "Async Ma Shlomha?",
func: function(data) {
return new Chronos.PostMessagePromise(function(resolve, reject) {
setTimeout(function() {
resolve(data && data.text);
}, 1000);
});
}
});
courier.reply({
appName: "host",
reqName: "Ask Async Ma Shlomha?",
func: function(data) {
return new Chronos.PostMessagePromise(function(resolve, reject) {
courier.request({
appName: "iframe",
reqName: "Ma Shlomha?",
data: data
}, function(err, data) {
resolve(data && data.text);
});
});
}
});
courier.reply({
appName: "host",
reqName: "Redirect",
func: function(data, callback) {
setTimeout(function() {
callback(null, "Going to Redirect...");
setTimeout(function() {
redirect();
}, 100);
}, 0);
}
});
///// ---- TRIGGERS ------ ////
function multiply(data) {
courier.trigger({
appName: "frame",
eventName: "got_it",
data: data * 2
});
}
function square(data) {
if (data && data.num) {
data.num *= data.num;
courier.command({
appName: "frame",
cmdName: "expect",
data: data
});
}
else if (data[0]) {
data[0] *= data[0];
courier.command({
appName: "frame",
cmdName: "expect",
data: data
});
} else if (data && data.error) {
throw new Error("Expected error to be thrown");
}
}
function divide(data, callback) {
if (data && data.num) {
data.num = 1;
courier.request({
appName: "frame",
reqName: "askBack",
data: data
}, callback);
}
}
function command(data, callback) {
if (true === data.success) {
callback();
}
else {
throw new Error("Error in command");
}
}
function redirect() {
var page = document.location.pathname.split("/").pop();
var lpHost = getQueryVariable('lpHost');
var bust = getQueryVariable('bust');
var polyfill = getQueryVariable('lpPMCPolyfill');
if (bust) {
bust = (new Date()).getTime();
}
var redirect = page + ((bust || lpHost || polyfill) ? "?" : "") + (bust ? "bust=" + bust : "") + (lpHost ? (bust ? "&" : "") + "lpHost=" + lpHost : "") + (polyfill ? (bust || lpHost ? "&" : "") + "lpPMCPolyfill=" + polyfill : "");
document.location.href = redirect;
}
function getQueryVariable(variable) {
var query = window.location.search.substring(1);
var vars = query.split('&');
for (var i = 0; i < vars.length; i++) {
var pair = vars[i].split('=');
if (decodeURIComponent(pair[0]) === variable) {
return decodeURIComponent(pair[1]);
}
}
console.log('Query variable ' + variable + ' not found');
}
if ("true" === Chronos.PostMessageUtilities.getURLParameter("syncTrigger")) {
courier.trigger({
appName: "frame",
eventName: "loaded"
});
}
</script>
</head>
<body>
</body>
</html>