MFN Integration Guide
  • What is MFN
  • Overview
    • Getting started
    • Integration methods
    • Disclaimer / IPO
    • Caching
    • Checklist after integration
  • Integration methods
    • On-Demand API
    • Synced API
    • MFN Loader
    • IFrame Widget
  • Wordpress Plugin
  • MFN Widgets
    • Report archive
    • Email Subscription Widget
    • Media collection
  • API
    • Feed
    • Model
      • Tags
    • Demo Data
    • WebSub
      • Endpoint
      • Subscribe (optional)
      • Ping Extension (optional)
      • Code samples
      • Misc
    • Archive
    • Email Subscription Guide
Powered by GitBook
On this page
  • Disclaimer
  • IPO
  • Disclaimer wall
  • Disclaimer information and structure
  • Technical implementation
  • MFN Loader redirect-configuration for Disclaimer
  • Summary
  • Example IPO page behind disclaimer
  • Disclaimer page
  • Page behind disclaimer

Was this helpful?

  1. Overview

Disclaimer / IPO

PreviousIntegration methodsNextCaching

Last updated 4 months ago

Was this helpful?

Disclaimer

IPO

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>
Disclaimer - Step 1
Disclaimer - Step 2
Disclaimer - Step 3