UNPKG

bucklescript-tea

Version:
129 lines (114 loc) 3.59 kB
// Generated by BUCKLESCRIPT, PLEASE EDIT WITH CARE 'use strict'; 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 */