formiojs
Version:
Common js library for client side interaction with <form.io>
64 lines (51 loc) • 2.09 kB
JavaScript
;
require("core-js/modules/es6.regexp.match");
require("core-js/modules/web.dom.iterable");
require("core-js/modules/es6.regexp.replace");
require("core-js/modules/es6.regexp.split");
var scripts = document.getElementsByTagName('script');
var thisScript = null;
var i = scripts.length;
while (i--) {
if (scripts[i].src && scripts[i].src.indexOf('formio.embed') !== -1) {
thisScript = scripts[i];
break;
}
}
if (thisScript) {
var Form = require('./formio.form').Form;
var query = {};
var scriptSrc = thisScript.src.replace(/^([^?]+).*/, '$1').split('/');
scriptSrc.pop();
scriptSrc = scriptSrc.join('/');
var queryString = thisScript.src.replace(/^[^?]+\??/, '');
queryString.replace(/\?/g, '&').split('&').forEach(function (item) {
query[item.split('=')[0]] = item.split('=')[1] && decodeURIComponent(item.split('=')[1]);
});
query.styles = query.styles || "".concat(scriptSrc, "/formio.full.min.css");
Form.embed(query).then(function (instance) {
instance.on('submit', function (submission) {
var returnUrl = query.return || query.redirect; // Allow form based configuration for return url.
if (!returnUrl && instance._form && instance._form.settings && (instance._form.settings.returnUrl || instance._form.settings.redirect)) {
returnUrl = instance._form.settings.returnUrl || instance._form.settings.redirect;
}
if (returnUrl) {
var formSrc = instance.formio ? instance.formio.formUrl : '';
var hasQuery = !!returnUrl.match(/\?/);
var isOrigin = returnUrl.indexOf(location.origin) === 0;
returnUrl += hasQuery ? '&' : '?';
returnUrl += "sub=".concat(submission._id);
if (!isOrigin && formSrc) {
returnUrl += "&form=".concat(encodeURIComponent(formSrc));
}
window.location.href = returnUrl;
if (isOrigin) {
window.location.reload();
}
}
});
});
} else {
// Show an error if the script cannot be found.
document.write('<span>Could not locate the Embedded form.</span>');
}