bucklescript-tea
Version:
TEA for Bucklescript
129 lines (114 loc) • 3.59 kB
JavaScript
// Generated by BUCKLESCRIPT, PLEASE EDIT WITH CARE
;
var Block = require("bs-platform/lib/js/block.js");
var Curry = require("bs-platform/lib/js/curry.js");
var Tea_app = require("./tea_app.js");
var Tea_sub = require("./tea_sub.js");
var Web_window = require("./web_window.js");
var Web_location = require("./web_location.js");
var Web_window_history = require("./web_window_history.js");
function getLocation(param) {
return Web_location.asRecord(document.location);
}
var notifier = {
contents: undefined
};
function notifyUrlChange(param) {
var match = notifier.contents;
if (match !== undefined) {
var $$location = Web_location.asRecord(document.location);
Curry._1(match, $$location);
return /* () */0;
} else {
return /* () */0;
}
}
function subscribe(tagger) {
var enableCall = function (callbacks) {
var notifyHandler = function ($$location) {
return Curry._1(callbacks.enqueue, Curry._1(tagger, $$location));
};
notifier.contents = notifyHandler;
var handler = function (_event) {
return notifyUrlChange(/* () */0);
};
Web_window.addEventListener("popstate", handler, false);
return (function (param) {
return Web_window.removeEventListener("popstate", handler, false);
});
};
return Tea_sub.registration("navigation", enableCall);
}
function replaceState(url) {
Web_window_history.replaceState(window, JSON.parse("{}"), "", url);
return /* () */0;
}
function pushState(url) {
Web_window_history.pushState(window, JSON.parse("{}"), "", url);
return /* () */0;
}
function modifyUrl(url) {
return /* EnqueueCall */Block.__(2, [(function (_enqueue) {
replaceState(url);
notifyUrlChange(/* () */0);
return /* () */0;
})]);
}
function newUrl(url) {
return /* EnqueueCall */Block.__(2, [(function (_enqueue) {
pushState(url);
notifyUrlChange(/* () */0);
return /* () */0;
})]);
}
function go(step) {
return /* EnqueueCall */Block.__(2, [(function (_enqueue) {
Web_window_history.go(window, step);
notifyUrlChange(/* () */0);
return /* () */0;
})]);
}
function back(step) {
return go(-step | 0);
}
var forward = go;
function navigationProgram(locationToMessage, stuff) {
var init = function (flag) {
return Curry._2(stuff.init, flag, Web_location.asRecord(document.location));
};
var subscriptions = function (model) {
return /* Batch */Block.__(0, [/* :: */[
subscribe(locationToMessage),
/* :: */[
Curry._1(stuff.subscriptions, model),
/* [] */0
]
]]);
};
var partial_arg_update = stuff.update;
var partial_arg_view = stuff.view;
var partial_arg_shutdown = stuff.shutdown;
var partial_arg = {
init: init,
update: partial_arg_update,
view: partial_arg_view,
subscriptions: subscriptions,
shutdown: partial_arg_shutdown
};
return (function (param, param$1) {
return Tea_app.program(partial_arg, param, param$1);
});
}
exports.getLocation = getLocation;
exports.notifier = notifier;
exports.notifyUrlChange = notifyUrlChange;
exports.subscribe = subscribe;
exports.replaceState = replaceState;
exports.pushState = pushState;
exports.modifyUrl = modifyUrl;
exports.newUrl = newUrl;
exports.go = go;
exports.back = back;
exports.forward = forward;
exports.navigationProgram = navigationProgram;
/* No side effect */