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
            (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" ) {
            // 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);
                } 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>');
  2. Add dhtml.external.resize code to docReady function if banner has to be responsive
  3.     docReady(function() {
    		if (dhtml.external && dhtml.external.resize) dhtml.external.resize ('100%', '100%');
            window.document.body.style.cursor = 'pointer';
  4. Add a Symbol and Action to that symbol
  5. Add clicktag code to that function
  6. var clickTAGvalue = dhtml.getVar('clickTAG', 'http://www.example.com');
    var landingpagetarget = dhtml.getVar('landingPageTarget', '_blank');

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://g.delfi.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.