When a company is about to be listed on the stock market the process for this is called IPO (Initial Public Offering), which means that the company offers their shares to the public for new investors.
On the company's website there is usually an IPO page which holds information and documents regarding the offer.
During the IPO-process there are certain rules and regulations, where one of them is that they are obligated to put certain information behind a Disclaimer wall on the website to prevent the information to directly be accessed. This falls into the MFN press releases, where certain press releases must be behind a wall.
Disclaimer wall
The disclaimer is a simple HTML form, often containing two dropdown menus where the user selects the country they reside in and the country that they're currently in.
After they've selected the country and continue, the next step will show important information which the user needs to confirm to be able to then be obligated to access the release.
When the user has confirmed they are either redirected to the IPO-page (which holds the release PDF) or directly to the single press release page.
Disclaimer information and structure
How the disclaimer is structured and which options and information it includes can differ depending on the project. We do not provide this information as this is maintained by the IR-representative of the company.
Technical implementation
There are no specific "has too's" regarding the technical implementation so there's no need for any complicated logic, just that the data needs to be hidden from view on the website until the user has clicked through and confirmed the Disclaimer.
To simplify the implementation of the disclaimer, we ask the customer to add a custom "disclaimer"-tag to the releases that needs to be behind a disclaimer (In the MFN API the custom tag is called cus:disclaimer).By doing this it is possible to pick up the tag in the integration and to show the disclaimer for the certain releases that has the tag, but still allow direct access to regular releases.
Additionally, we've added logic to some of our integration methods to support the disclaimer tag and redirect to a specified disclaimer url depending on the custom tag - For example we've added support in our MFN Loader. However for pure API integrations the disclaimer "redirect logic" needs to be built and managed outside of MFN.
MFN Loader redirect-configuration for Disclaimer
We've added two parameters to the MFN Loader config.
disclaimer_redirect_tag: 'cus:disclaimer',
disclaimer_redirect_url: 'disclaimer.html'
In the MFN Loader-package we provide an example disclaimer HTML-form (disclaimer.html) that shows how the disclaimer could be implemented, to make it easier to getting started.
Summary
So when it comes to the integration of the disclaimer we do not have a complete solution as it differs from integration to integration. However we try to make the process as smooth as possible and we provide help and guidance on how it works and should be implemented.
Example IPO page behind disclaimer
If a disclaimer wall is required to be added to a specific page, for example related to an IPO, inspiration can be taken from the basic and plain javascript implementation below. It covers the important parts regarding a disclaimer wall.
/**
* Below is a variable list with corresponding examples from the basic
MFN-loader setup
* <single-page-item-path>: slug
* <item-disclaimer-tag>: cus:disclaimer
* <disclaimer-page>: disclaimer.html
* <single-page>: single.html
* <list-page>: list.html
* <disclaimer-accept-button-id>: id of your disclaimer accept button
* <disclaimer-disclaimer-button-id>: id of your disclaimer decline button
*/
function disclaimer_check() {
var disclaimerAccepted = localStorage.getItem("disclaimer-ipo-page")
if (!disclaimerAccepted) {
window.location.href = "mock-ipo-disclaimer.html"
}
}
function disclaimer_approve() {
document.getElementById("mfn-accept-disclaimer-button").addEventListener("click", () => {
localStorage.setItem("disclaimer-ipo-page", "accepted")
window.location.href = "mock-ipo-page.html"
})
document.getElementById("mfn-decline-disclaimer-button").addEventListener("click", () => {
localStorage.removeItem("disclaimer-ipo-page")
// note that this is not part of the example, but should route to some place where the user should end up if the disclaimer is denied
window.location.href = "landing-page.html"
})
}
The disclaimer_check() function should be inserted on your sensitive page in a way that it always runs on load and before the information is shown.
The disclaimer_approve() function should be inserted into your disclaimer html so that the click listeners correctly attach to whatever element handles the accept/decline actions.
To further illustrate the implementation, we have provided a very minimal mock of a sensitive page together with a disclaimer page.
Disclaimer page
mock-disclaimer.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Disclaimer page</title>
</head>
<body>
<div id="disclaimer-step-one">
<h1>Disclaimer</h1>
<p>Your disclaimer text goes here</p>
<select id="disclaimer-country">
<option selected="" disabled="" value="">Choose</option>
<option value="AU">Australia</option>
<option value="CA">Canada</option>
<option value="NZ">New Zealand</option>
<option value="EEAQI">EEA (Qualified Investor)</option>
<option value="EEANQI">EEA (not a Qualified Investor)</option>
<option value="HK">Hong Kong</option>
<option value="JP">Japan</option>
<option value="UKQIRP">United Kingdom (Qualified Investor and Relevant Person)</option>
<option value="UKNQIRP">United Kingdom (not a Qualified Investor or not a Relevant Person)</option>
<option value="US">United States of America</option>
<option value="SE">Sweden</option>
<option value="OTHER">Other countries</option>
</select>
<button id="mfn-submit-step-one" type="submit" disabled>Continue</button>
</div>
<div id="disclaimer-step-error" style="display: none">
<h1>Disclaimer – Important</h1>
<p>Due to applicable legal restrictions, the information contained in this section of the website is restricted and is not for release,
publication or distribution, directly or indirectly, in whole or in part, in or into the United States of America
(including its territories and possessions, any state of the United States and the District of Columbia), Australia,
Canada, New Zealand, Hong Kong or Japan, or any other jurisdiction in which such release, publication or distribution might constitute
a violation of the local securities laws or regulations of such jurisdiction.</p>
</div>
<div id="disclaimer-step-two" style="display: none">
<h1>Disclaimer part 2</h1>
<p>Your disclaimer text goes here</p>
<div id="wrapper">
<!-- The container where the content will end up -->
<button id="mfn-accept-disclaimer-button">Accept</button>
<button id="mfn-decline-disclaimer-button">Decline</button>
</div>
</div>
</body>
<script type="application/javascript">
var country = document.getElementById("disclaimer-country");
var btn1 = document.getElementById("mfn-submit-step-one");
country.addEventListener('click', () => {
if (country.value !== "") {
btn1.removeAttribute('disabled')
}
})
function disclaimer_approve() {
document.getElementById("mfn-accept-disclaimer-button").addEventListener("click", () => {
localStorage.setItem("disclaimer-ipo-page", "accepted")
window.location.href = "mock-ipo-page.html"
})
document.getElementById("mfn-decline-disclaimer-button").addEventListener("click", () => {
localStorage.removeItem("mock-IPO-page.html")
// note that this is not part of the example, but should route to some place where the user should end up if the disclaimer is denied
window.location.href = "landing-page.html"
})
}
btn1.onclick = function() {
if (["US","AU","CA","HK","JP","NZ","EEANQI","UKNQIRP"].filter(function (x) {return x === country.value}).length === 0) {
document.getElementById("disclaimer-step-one").style.display = 'none';
document.getElementById("disclaimer-step-two").style.display = 'block';
disclaimer_approve()
} else {
document.getElementById("disclaimer-step-one").style.display = 'none';
document.getElementById("disclaimer-step-error").style.display = 'block';
}
};
</script>
</html>
Page behind disclaimer
mock-IPO-page.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>IPO Information</title>
</head>
<body>
<div>
<h3 id="ipo-title"></h3>
<p id="ipo-info"></p>
</div>
<script>
function check_disclaimer() {
var disclaimerAccepted = localStorage.getItem("disclaimer-ipo-page")
if (!disclaimerAccepted) {
window.location.href = "mock-disclaimer.html"
}
}
check_disclaimer()
// mock fetching content here
const contentFromServer = {
title: "IPO information page",
info: "Sensitive information that must be behind disclaimer wall"
}
document.getElementById("ipo-title").innerHTML = contentFromServer.title
document.getElementById("ipo-info").innerHTML = contentFromServer.info
</script>
</body>
</html>