"use strict"; //requires SubmitConfirm //requires SubmitPrompt //requires SubmitChange $(function () { $.ajaxSetup({ cache: false, xhrFields: { withCredentials: true } }); if (!ModernJs.isDefined(ModernJs.Linker)) { ModernJs.Linker = {}; ModernJs.Linker.responseDone = function () {}; ModernJs.Linker.responseParser = function (obj) { return obj; }; ModernJs.Linker.config = function (link, config) { if (arguments.length < 2) { config = link; if (ModernJs.isDefined(config.done)) { ModernJs.Linker.responseDone = config.done; } if (ModernJs.isDefined(config.parser)) { ModernJs.Linker.responseParser = config.parser; } } else { if (ModernJs.isDefined(config.done)) { link.data("AjaxLinkDone", config.done); } if (ModernJs.isDefined(config.parser)) { link.data("AjaxLinkParser", config.parser); } } }; ModernJs.Linker.activateLink = function (event) { var target = $(this); var href = target.attr("modernjs-link"); var targetAttr = target.attr("target"); var parser = target.data("AjaxLinkParser") || ModernJs.Linker.responseParser; href = parser.call(target[0], href, event); if (!ModernJs.isDefined(href)) return; var link = $(""); link.attr("target", targetAttr); link.attr("href", href); link.css("display", "none"); $("body").append(link); if (href.indexOf("#") == 0 && href == location.hash) { location.hash = ""; } if (event.button == 1) { link.attr("target", "_blank"); } link[0].click(); link.detach(); }; ModernJs.Linker.activateAjaxLink = function (event) { var target = $(this); var href = target.attr("ajax-link") || target.attr("modernjs-ajax-link") || target.attr("submit-self"); var dataString = target.attr("data") || "{}"; var method = target.attr("method") || "GET"; var done = target.data("AjaxLinkDone") || ModernJs.Linker.responseDone; var parser = target.data("AjaxLinkParser") || ModernJs.Linker.responseParser; var data = dataString; try { data = JSON.parse(dataString); if (target.is("[content-child]")) { var child = target.find(target.attr("content-child")); data.__value = child.val(); if (target.is("[contenteditable], [submit-html]")) { data.__value = child.html(); } if (target.is("[submit-text]")) { data.__value = child.text(); } } else if (target.is("[submit-self]")) { data.__value = target.val(); if (target.is("[contenteditable], [submit-html]")) { data.__value = target.html(); } if (target.is("[submit-text]")) { data.__value = target.text(); } } } catch (e) {} if (method == "GET") { href = parser.call(target[0], href); } else { data = parser.call(target[0], data, dataString); } if ((href || href === "") && (data || data === "")) { $.ajax({ method: method, url: href, data: data }).done(function (data) { done.call(target[0], data); target.triggerHandler("response", data); }); } }; ModernJs.Linker.submit = function (event) { var target = $(this); if (target.is("[disabled-link], [disabled-ajax-link], [disabled-modernjs-link]")) { return; } if (target.is("[ajax-link], [modernjs-ajax-link], [submit-self]")) { if (target.is("[link-confirm]")) { ModernJs.SubmitConfirm.dialog.call(this, ModernJs.Linker.activateAjaxLink); return; } if (target.is("[link-prompt]")) { ModernJs.SubmitPrompt.dialog.call(this, ModernJs.Linker.activateAjaxLink); return; } ModernJs.Linker.activateAjaxLink.call(this); } else if (target.is("[modernjs-link]")) { if (target.is("[link-confirm]")) { ModernJs.SubmitConfirm.dialog.call(this, ModernJs.Linker.activateLink.bind(this, event)); return; } if (target.is("[link-prompt]")) { ModernJs.SubmitPrompt.dialog.call(this, ModernJs.Linker.activateLink.bind(this, event)); return; } ModernJs.Linker.activateLink.call(this, event); } }; ModernJs.Linker.click = function (node) { var button = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; ModernJs.Linker.submit.call(node[0], { button: button }); }; ModernJs.Linker.loadMain = function () { $("body").on("mouseup", "[modernjs-link], [ajax-link], [modernjs-ajax-link]", ModernJs.Linker.submit); }; $(ModernJs.Linker.loadMain); } });