Tumult Hype

Tumult Hype is an HTML5 creation app for macOS.

Tumult Hype allows you to create rich media banners for desktop and mobile platforms.

DELFI has provided detailed instructions on how to implement clicktag, how to create a responsive banner and how to configure your banner for optimized publishing.


How to add Clicktag in Tumult Hype

Best practice would be to use DELFI provided template where clicktag has already been implemented and set up for you. When publishing, please use Advanced Export like described in the Publishing section.

Example Template: DELFI Tumult Hype 300x600 Template
Example (responsive) Mobile Template: DELFI Tumult Hype 600x500 Template

Example Banner: DELFI Tumult Hype 300x600 Example Banner
Example (responsive) Mobile Banner: DELFI Tumult Hype 600x500 Example Banner

Note: Example templates and banners are created for Hype 3 but also work in Hype 4 - just click "Upgrade" when opening for the first time.

Add clicktag code:

1. Edit HTML and insert the code to Head HTML

<script>
      (function(funcName, baseObj) {
      // The public function name defaults to window.docReady
      // but you can pass in your own object and own function name and those will be used
      // if you want to put them in a different namespace
      funcName = funcName || "docReady";
      baseObj = baseObj || window;
      var readyList = [];
      var readyFired = false;
      var readyEventHandlersInstalled = false;

      // call this when the document is ready
      // this function protects itself against being called more than once
      function ready() {
          if (!readyFired) {
              // this must be set to true before we start calling callbacks
              readyFired = true;
              for (var i = 0; i < readyList.length; i++) {
                  // if a callback here happens to add new ready handlers,
                  // the docReady() function will see that it already fired
                  // and will schedule the callback to run right after
                  // this event loop finishes so all handlers will still execute
                  // in order and no new ones will be added to the readyList
                  // while we are processing the list
                  readyList[i].fn.call(window, readyList[i].ctx);
              }
              // allow any closures held by these functions to free
              readyList = [];
          }
      }

      function readyStateChange() {
          if ( document.readyState === "complete" ) {
              ready();
          }
      }

      // This is the one public interface
      // docReady(fn, context);
      // the context argument is optional - if present, it will be passed
      // as an argument to the callback
      baseObj[funcName] = function(callback, context) {
          if (typeof callback !== "function") {
              throw new TypeError("callback for docReady(fn) must be a function");
          }
          // if ready has already fired, then just schedule the callback
          // to fire asynchronously, but right away
          if (readyFired) {
              setTimeout(function() {callback(context);}, 1);
              return;
          } else {
              // add the function and context to the list
              readyList.push({fn: callback, ctx: context});
          }
          // if document already ready to go, schedule the ready function to run
          if (document.readyState === "complete") {
              setTimeout(ready, 1);
          } else if (!readyEventHandlersInstalled) {
              // otherwise if we don't have event handlers installed, install them
              if (document.addEventListener) {
                  // first choice is DOMContentLoaded event
                  document.addEventListener("DOMContentLoaded", ready, false);
                  // backup is window load event
                  window.addEventListener("load", ready, false);
              } else {
                  // must be IE
                  document.attachEvent("onreadystatechange", readyStateChange);
                  window.attachEvent("onload", ready);
              }
              readyEventHandlersInstalled = true;
          }
      }
  })("docReady", window);
  docReady(function() {
      window.document.body.style.cursor = 'pointer';
  });
  document.write(' <script src="'+ (window.API_URL || 'https://s1.adform.net/banners/scripts/rmb/Adform.DHTML.js?bv='+ Math.random()) +'"> </script>');

</script>

2. Add dhtml.external.resize code to docReady function if banner has to be responsive

docReady(function() {
    if (dhtml.external && dhtml.external.resize) dhtml.external.resize ('100%', '100%');
    window.document.body.style.cursor = 'pointer';
  });

3. Add a Symbol and Action to that symbol

4. Add clicktag code to that function

var clickTAGvalue = dhtml.getVar('clickTAG', 'http://www.example.com');
  var landingpagetarget = dhtml.getVar('landingPageTarget', '_blank');

  window.open(clickTAGvalue,landingpagetarget);

Testing locally should open http://www.example.com url that is just a fallback. Actual url will be provided by ad server.

Read more about Adform clicktag here.


How to publish banner for Delfi in Tumult Hype

Try and set the settings as displayed on the Publish Settings picture below.

  1. Go to File > Advanced Export...
  2. Remove chekmark from Support Internet Explorer 6-9
  3. Add a checkmark in front of Use external runtime URL
  4. Add https://g1.nh.ee/m/rmb/s/ in the input field
  5. Compress the exported file
  6. Send the ZIP file to DELFI

How to create a responsive banner in Tumult Hype

To make Tumult Hype banner responsive make sure that when creating a new banner, the Scene Size Scale checkboxes are checked.