Nextleaf Solutions Supplies Rapid Emulsion to Cannabis-Infused Beverage Manufacturer BevCanna


 Nextleaf Solutions Ltd. (CSE: OILS) (OTCQB: OILFF) (FSE: L0MA) (“Nextleaf”, “OILS”, or the “Company”), the world’s most innovative cannabis processor, is pleased to announce the initial order of Nextleaf’s Rapid Emulsion Technology by OILS™ (“Rapid”) THC and CBD to cannabis-infused beverage manufacturer, BevCanna Enterprises Inc. (“BevCanna”).

With this initial order, Nextleaf’s Rapid concentrate becomes one of BevCanna’s preferred ingredients, available for use in both their brands and their partner brands. Rapid is Nextleaf’s patent pending delivery technology.


Cannot view this video? Visit:
https://www.youtube.com/watch?v=nX20nljmrDA

BevCanna develops and manufactures a range of cannabis-infused beverages for both in-house brands and white-label clients, and is the exclusive Canadian licensee for the award winning, #1 selling brand in the U.S., Keef Brands. Additionally, via its wholly-owned subsidiary Naturo Group’s TRACE plant-based mineral beverages and supplements, BevCanna has a sales and distribution network of over 3,000 points of retail and online across Canada. The Company anticipates that in addition to BevCanna’s licensed points of distribution, BevCanna will eventually distribute cannabinoid beverages through their existing traditional retail channels should Health Canada regulate the sale of CBD products under the new proposed Cannabis Health Product category.

“Nextleaf and BevCanna have a long-standing relationship, and our inaugural order of Rapid reflects nearly two years of working together,” said Nextleaf Solutions CEO, Paul Pedersen. “With a predictable onset and offset time, Rapid Emulsion Technology by OILS provides a significant differentiator for BevCanna to develop a wide range of infused beverages.”

Made with Nextleaf’s high purity cannabis distillate, Rapid’s unique structure and composition allows the final ingredient to achieve optical transparency with neutral characteristics ideal for formulating. Ten years of prior R&D has resulted in a patent pending emulsion technology adapted to cannabinoids, to deliver rapid onset of THC and CBD.

Rapid extends Nextleaf’s capabilities along the value-added product spectrum. Complementing the Company’s demonstrated excellence in efficiently producing high purity distillate, Rapid solves an industry need for cannabis-infused products with predictable and reliable outcomes.

BevCanna owns and operates one of the highest-capacity cannabis beverage manufacturing facilities in Canada, located near Osoyoos, B.C., which was granted a Standard Processing Licence by Health Canada on February 12, 2021.

About BevCanna Enterprises Inc.

BevCanna Enterprises Inc. (CSE: BEV) (OTCQB: BVNNF) (FSE: 7BC) is a diversified health & wellness beverage and natural products company. BevCanna develops and manufactures a range of plant-based and cannabinoid beverages and supplements for both in-house brands and white-label clients.

With decades of experience creating, manufacturing and distributing iconic brands that resonate with consumers on a global scale, the team demonstrates an expertise unmatched in the nutraceutical and cannabis-infused beverage categories. Based in British Columbia, Canada, BevCanna owns a pristine alkaline spring water aquifer and a world-class 40,000-square-foot, HACCP certified manufacturing facility, with a bottling capacity of up to 210M bottles annually. BevCanna’s extensive distribution network includes more than 3,000 points of retail distribution through its market-leading TRACE brand, its Pure Therapy natural health and wellness e-commerce platform, its fully licensed Canadian cannabis manufacturing and distribution network, and a partnership with #1 U.S. cannabis beverage company Keef Brands.

About Nextleaf®
Nextleaf Solutions is an innovative cannabis processor that owns one of the largest portfolios of U.S. patents for the extraction, distillation, and delivery of cannabinoids. Through its wholly-owned subsidiary Nextleaf Labs Ltd, a licensed processor, the Company is a low-cost producer of cannabis distillate and private label THC & CBD oils. Nextleaf’s proprietary closed-loop automated extraction plant in Metro Vancouver has a design capacity to process 600 kilos of dried cannabis into oil per day. The Company owns 12 U.S. patents and has been issued over 70 patents globally. Nextleaf is developing delivery technology through its Health Canada research licence with sensory evaluation of cannabis via human testing. The Company’s patent pending Rapid Emulsion Technology by OILS™ powers differentiated ingestible cannabis products. Nextleaf is commercializing its issued and pending patents through licensing of intellectual property, extraction services, and supplying cannabis oils to qualified Canadian and international business-to-business partners under their own brand.

Nextleaf Solutions trades as OILS on the Canadian Securities Exchange, OILFF on the OTCQB Market in the United States, and L0MA on the Frankfurt Stock Exchange.

Follow OILS across social media platforms: Twitter, LinkedIn, Facebook, and Instagram.

www.nextleafsolutions.com

For more information please contact:
Jason McBride
604-283-2301 (ext. 219)
investors@nextleafsolutions.com

On behalf of the Board of Directors of the Company,

Paul Pedersen, CEO

Certain statements contained in this press release constitute “forward-looking statements”. All statements other than statements of historical fact contained in this press release, including, without limitation, those regarding the Company’s ability to capitalize on its IP portfolio, the Company’s strategy, plans, objectives, goals and targets, and any statements preceded by, followed by or that include the words “believe”, “expect”, “aim”, “intend”, “plan”, “continue”, “will”, “may”, “would”, “anticipate”, “estimate”, “forecast”, “predict”, “project”, “seek”, “should” or similar expressions or the negative thereof, are forward-looking statements. These statements are not historical facts but instead represent only the Company’s expectations, estimates and projections regarding future events. These statements are not guarantees of future performance and involve assumptions, risks and uncertainties that are difficult to predict. Therefore, actual results may differ materially from what is expressed, implied or forecasted in such forward-looking statements. Additional factors that could cause actual results, performance or achievements to differ materially include, but are not limited to the risk factors discussed in the Company’s MD&A for the most recent fiscal period. Management provides forward-looking statements because it believes they provide useful information to investors when considering their investment objectives and cautions investors not to place undue reliance on forward-looking information. Consequently, all of the forward-looking statements made in this press release are qualified by these cautionary statements and other cautionary statements or factors contained herein, and there can be no assurance that the actual results or developments will be realized or, even if substantially realized, that they will have the expected consequences to, or effects on, the Company. These forward-looking statements are made as of the date of this press release and the Company assumes no obligation to update or revise them to reflect subsequent information, events or circumstances or otherwise, except as required by law. The CSE has not reviewed or approved the contents of this press release.

To view the source version of this press release, please visit https://www.newsfilecorp.com/release/76051

News Provided by Newsfile via QuoteMedia


‘;
return thumb.replace(“ID”, id) + play;
}

function labnolIframe() {
var iframe = document.createElement(“iframe”);
var embed = “https://www.youtube.com/embed/ID?autoplay=1”;
iframe.setAttribute(“src”, embed.replace(“ID”, this.dataset.id));
iframe.setAttribute(“frameborder”, “0”);
iframe.setAttribute(“allowfullscreen”, “1”);
this.parentNode.replaceChild(iframe, this);
}

});

window.REBELMOUSE_LOWEST_TASKS_QUEUE.push(function(){

(function(i,s,o,g,r,a,m,n){i.moengage_object=r;t={};q=function(f){return function(){(i.moengage_q=i.moengage_q||[]).push({f:f,a:arguments})}};f=[‘track_event’,’add_user_attribute’,’add_first_name’,’add_last_name’,’add_email’,’add_mobile’,’add_user_name’,’add_gender’,’add_birthday’,’destroy_session’,’add_unique_user_id’,’moe_events’,’call_web_push’,’track’,’location_type_attribute’],h={onsite:[“getData”,”registerCallback”]};for(k in f){t[f[k]]=q(f[k])}for(k in h)for(l in h[k]){null==t[k]&&(t[k]={}),t[k][h[k][l]]=q(k+”.”+h[k][l])}a=s.createElement(o);m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m);i.moe=i.moe||function(){n=arguments[0];return t};a.onload=function(){if(n){i[r]=moe(n)}}})(window,document,’script’,’https://cdn.moengage.com/webpush/moe_webSdk.min.latest.js’,’Moengage’)

Moengage = moe({
app_id:”U7Y039491ZYXCXSKH3BF5IX7″,
debug_logs: 0,
swPath: “/sp-push-worker.js”
});

});

window.REBELMOUSE_LOWEST_TASKS_QUEUE.push(function(){

window.REBELMOUSE_STDLIB.loadExternalScript(“https://api.youneeq.ca/Content/scripts/dist/youneeq.js”, function() {

});

});

window.REBELMOUSE_LOWEST_TASKS_QUEUE.push(function(){

window.REBELMOUSE_STDLIB.loadExternalScript(“https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js”, function() {

/*!
* jQuery DFP v2.4.2
* http://github.com/coop182/jquery.dfp.js
*
* Copyright 2016 Matt Cooper
* Released under the MIT license
*/

(function (window, undefined) {
“use strict”;

/**
* Make plugin UMD compatible
* Uses CommonJS, AMD or browser globals to create plugin.
*/
(function (factory) {
if (typeof define === ‘function’ && define.amd) {
// AMD. Register as an anonymous module.
define([‘jquery’], factory);
} else if (typeof exports === ‘object’) {
// Node/CommonJS
factory(require(‘jquery’));
} else {
// Browser globals
factory(window.jQuery || window.Zepto);
}
}(function ($) {

var

// Save Scope
dfpScript = this || {};

var
// DFP account ID
dfpID = ”,

// Init counters
count = 0,
uid = 0,
rendered = 0,

// Default DFP selector
dfpSelector = ‘.adunit’,

adsCouldNeverBeInitilized = false,

// Keep track of if we’ve already tried to load gpt.js before
dfpIsLoaded = false,

// Store adunit on div as:
storeAs = ‘googleAdUnit’,

/**
* Init function sets required params and loads Google’s DFP script
* @param String id The DFP account ID
* @param String selector The adunit selector
* @param Object options Custom options to apply
*/
init = function (id, selector, options) {
var $adCollection;

// Reset counters on each call
count = 0;
rendered = 0;

dfpID = id;
$adCollection = $(selector);

/**
* @returns {boolean}
*/
dfpScript.shouldCheckForAdBlockers = function(){
return options ? typeof options.afterAdBlocked === ‘function’ : false;
};

// explicitly wait for loader to be completed, otherwise the googletag might not be available
dfpLoader(options, $adCollection).then(function(){
options = setOptions(options);
dfpScript.dfpOptions = options;

$(function () {
createAds(options, $adCollection);
displayAds(options, $adCollection);
});
});

},

/**
* Set the options for DFP
* @param Object options Custom options to apply
* @return Object extended options
*/
setOptions = function (options) {

// Set default options
var dfpOptions = {
setTargeting: {},
setCategoryExclusion: ”,
setLocation: ”,
enableSingleRequest: true,
collapseEmptyDivs: ‘original’,
refreshExisting: true,
disablePublisherConsole: false,
disableInitialLoad: false,
setCentering: false,
noFetch: false,
namespace: undefined,
sizeMapping: {}
};

if (typeof options.setUrlTargeting === ‘undefined’ || options.setUrlTargeting) {
// Get URL Targeting
var urlTargeting = getUrlTargeting(options.url);
$.extend(true, dfpOptions.setTargeting, {
UrlHost: urlTargeting.Host,
UrlPath: urlTargeting.Path,
UrlQuery: urlTargeting.Query
});
}

// Merge options objects
$.extend(true, dfpOptions, options);

// If a custom googletag is specified, use it.
if (dfpOptions.googletag) {
window.googletag.cmd.push(function () {
$.extend(true, window.googletag, dfpOptions.googletag);
});
}

return dfpOptions;
},

/**
* Find and create all Ads
* @param Object dfpOptions options related to ad instantiation
* @param jQuery $adCollection collection of ads
* @return Array an array of ad units that have been created.
*/
createAds = function (dfpOptions, $adCollection) {
var googletag = window.googletag;
// Loops through on page Ad units and gets ads for them.
$adCollection.each(function () {
var $adUnit = $(this);

count++;

// adUnit name
var adUnitName = getName($adUnit, dfpOptions);

// adUnit id – this will use an existing id or an auto generated one.
var adUnitID = getID($adUnit, adUnitName);

// get dimensions of the adUnit
var dimensions = getDimensions($adUnit);

// set existing content
$adUnit.data(‘existingContent’, $adUnit.html());

// wipe html clean ready for ad and set the default display class.
$adUnit.html(”).addClass(‘display-none’);

// Push commands to DFP to create ads
googletag.cmd.push(function () {

var googleAdUnit,
$adUnitData = $adUnit.data(storeAs);

if ($adUnitData) {

// Get existing ad unit
googleAdUnit = $adUnitData;

} else {

// Build slotName for loading
var slotName;
if (dfpID === ”) {
slotName = adUnitName;
} else {
slotName = ‘/’ + dfpID + ‘/’ + adUnitName;
}

// Create the ad – out of page or normal
if ($adUnit.data(‘outofpage’)) {
googleAdUnit = googletag.defineOutOfPageSlot(slotName, adUnitID);
} else {
googleAdUnit = googletag.defineSlot(slotName, dimensions, adUnitID);
if ($adUnit.data(‘companion’)) {
googleAdUnit = googleAdUnit.addService(googletag.companionAds());
}
}

googleAdUnit = googleAdUnit.addService(googletag.pubads());

}

// Sets custom targeting for just THIS ad unit if it has been specified
var targeting = $adUnit.data(‘targeting’);
if (targeting) {
$.each(targeting, function (k, v) {
googleAdUnit.setTargeting(k, v);
});
}

// Sets custom exclusions for just THIS ad unit if it has been specified
var exclusions = $adUnit.data(‘exclusions’);
if (exclusions) {
var exclusionsGroup = exclusions.split(‘,’);
var valueTrimmed;
$.each(exclusionsGroup, function (k, v) {
valueTrimmed = $.trim(v);
if (valueTrimmed.length > 0) {
googleAdUnit.setCategoryExclusion(valueTrimmed);
}
});
}

// Sets responsive size mapping for just THIS ad unit if it has been specified
var mapping = $adUnit.data(‘size-mapping’);
if (mapping && dfpOptions.sizeMapping[mapping]) {
// Convert verbose to DFP format
var map = googletag.sizeMapping();
$.each(dfpOptions.sizeMapping[mapping], function (k, v) {
map.addSize(v.browser, v.ad_sizes);
});
googleAdUnit.defineSizeMapping(map.build());
}

// Store googleAdUnit reference
$adUnit.data(storeAs, googleAdUnit);

// Allow altering of the ad slot before ad load
if (typeof dfpOptions.beforeEachAdLoaded === ‘function’) {
dfpOptions.beforeEachAdLoaded.call(this, $adUnit);
}
});

});

// Push DFP config options
googletag.cmd.push(function () {

var pubadsService = googletag.pubads();

if (dfpOptions.enableSingleRequest) {
pubadsService.enableSingleRequest();
}

$.each(dfpOptions.setTargeting, function (k, v) {
pubadsService.setTargeting(k, v);
});

var setLocation = dfpOptions.setLocation;
if (typeof setLocation === ‘object’) {
if (typeof setLocation.latitude === ‘number’ && typeof setLocation.longitude === ‘number’ &&
typeof setLocation.precision === ‘number’) {
pubadsService.setLocation(setLocation.latitude, setLocation.longitude, setLocation.precision);
} else if (typeof setLocation.latitude === ‘number’ && typeof setLocation.longitude === ‘number’) {
pubadsService.setLocation(setLocation.latitude, setLocation.longitude);
}
}

if (dfpOptions.setCategoryExclusion.length > 0) {
var exclusionsGroup = dfpOptions.setCategoryExclusion.split(‘,’);
var valueTrimmed;

$.each(exclusionsGroup, function (k, v) {
valueTrimmed = $.trim(v);
if (valueTrimmed.length > 0) {
pubadsService.setCategoryExclusion(valueTrimmed);
}
});
}

if (dfpOptions.collapseEmptyDivs) {
pubadsService.collapseEmptyDivs();
}

if (dfpOptions.disablePublisherConsole) {
pubadsService.disablePublisherConsole();
}

if (dfpOptions.companionAds) {
googletag.companionAds().setRefreshUnfilledSlots(true);

if (!dfpOptions.disableInitialLoad) {
pubadsService.enableVideoAds();
}
}

if (dfpOptions.disableInitialLoad) {
pubadsService.disableInitialLoad();
}

if (dfpOptions.noFetch) {
pubadsService.noFetch();
}

if (dfpOptions.setCentering) {
pubadsService.setCentering(true);
}

pubadsService.enableLazyLoad({
fetchMarginPercent: 500, // Fetch slots within 5 viewports.
renderMarginPercent: 200, // Render slots within 2 viewports.
mobileScaling: 2.0 // Double the above values on mobile.
});

// Setup event listener to listen for renderEnded event and fire callbacks.
pubadsService.addEventListener(‘slotRenderEnded’, function (event) {

rendered++;

var $adUnit = $(‘#’ + event.slot.getSlotId().getDomId());

var display = event.isEmpty ? ‘none’ : ‘block’;

// if the div has been collapsed but there was existing content expand the
// div and reinsert the existing content.
var $existingContent = $adUnit.data(‘existingContent’);
if (display === ‘none’ && $.trim($existingContent).length > 0 &&
dfpOptions.collapseEmptyDivs === ‘original’) {
$adUnit.show().html($existingContent);
display = ‘block display-original’;
}

$adUnit.removeClass(‘display-none’).addClass(‘display-‘ + display);

// Excute afterEachAdLoaded callback if provided
if (typeof dfpOptions.afterEachAdLoaded === ‘function’) {
dfpOptions.afterEachAdLoaded.call(this, $adUnit, event);
}

// Excute afterAllAdsLoaded callback if provided
if (typeof dfpOptions.afterAllAdsLoaded === ‘function’ && rendered === count) {
dfpOptions.afterAllAdsLoaded.call(this, $adCollection);
}

});

// this will work with AdblockPlus
if(dfpScript.shouldCheckForAdBlockers() && !googletag._adBlocked_) {
setTimeout(function () {
var slots = pubadsService.getSlots ? pubadsService.getSlots() : [];
if (slots.length > 0) {
$.get(slots[0].getContentUrl()).always(function (r) {
if (r.status !== 200) {
$.each(slots, function () {
var $adUnit = $(‘#’ + this.getSlotId().getDomId());
dfpOptions.afterAdBlocked.call(dfpScript, $adUnit, this);
});
}
});
}
}, 0);
}

googletag.enableServices();

});

},

/**
* Display all created Ads
* @param {Object} dfpOptions options related to ad instantiation
* @param {jQuery} $adCollection collection of ads
*/
displayAds = function (dfpOptions, $adCollection) {

var googletag = window.googletag;
// Check if google adLoader can be loaded, this will work with AdBlock
if(dfpScript.shouldCheckForAdBlockers() && !googletag._adBlocked_) {
if (googletag.getVersion) {
var script = ‘//partner.googleadservices.com/gpt/pubads_impl_’ +
googletag.getVersion() + ‘.js’;
$.getScript(script).always(function (r) {
if (r && r.statusText === ‘error’) {
$.each($adCollection, function () {
dfpOptions.afterAdBlocked.call(dfpScript, $(this));
});
}
});
}

}

$adCollection.each(function () {

var $adUnit = $(this),
$adUnitData = $adUnit.data(storeAs);

if (googletag._adBlocked_) {
if(dfpScript.shouldCheckForAdBlockers()) {
dfpOptions.afterAdBlocked.call(dfpScript, $adUnit);
}
}
if (dfpOptions.refreshExisting && $adUnitData && $adUnit.hasClass(‘display-block’)) {

googletag.cmd.push(function () { googletag.pubads().refresh([$adUnitData]); });

} else {
googletag.cmd.push(function () { googletag.display($adUnit.attr(‘id’)); });
}

});

},

/**
* Create an array of paths so that we can target DFP ads to Page URI’s
* @return Array an array of URL parts that can be targeted.
*/
getUrlTargeting = function (url) {

// Get the url and parse it to its component parts using regex from RFC2396 Appendix-B (https://tools.ietf.org/html/rfc2396#appendix-B)
var urlMatches = (url || window.location.toString()).match(/^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(?([^#]*))?(#(.*))?/);
var matchedAuthority = urlMatches[4] || ”;
var matchedPath = (urlMatches[5] || ”).replace(/(.)/$/, ‘$1’);
var matchedQuery = urlMatches[7] || ”;

// Get the query params for targeting against
var params = matchedQuery.replace(/=/ig, ‘:’).split(‘&’);

return {
Host: matchedAuthority,
Path: matchedPath,
Query: params
};

},

/**
* Get the id of the adUnit div or generate a unique one.
* @param Object $adUnit The adunit to work with
* @param String adUnitName The name of the adunit
* @return String The ID of the adunit or a unique autogenerated ID
*/
getID = function ($adUnit, adUnitName) {

uid++;
return $adUnit.attr(‘id’) || $adUnit.attr(‘id’, adUnitName.replace(/[^A-z0-9]/g, ‘_’) + ‘-auto-gen-id-‘ + uid).attr(‘id’);

},

/**
* Get the name of the Ad unit, either use the div id or
* check for the optional attribute data-adunit
* @param Object $adUnit The adunit to work with
* @param Object dfpOptions options related to ad instantiation
* @return String The name of the adunit, will be the same as inside DFP
*/
getName = function ($adUnit, dfpOptions) {

var adUnitName = $adUnit.data(‘adunit’) || dfpOptions.namespace || $adUnit.attr(‘id’) || ”;
if (typeof dfpOptions.alterAdUnitName === ‘function’) {
adUnitName = dfpOptions.alterAdUnitName.call(this, adUnitName, $adUnit);
}
return adUnitName;

},

/**
* Get the dimensions of the ad unit using the container div dimensions or
* check for the optional attribute data-dimensions
* @param Object $adUnit The adunit to work with
* @return Array The dimensions of the adunit (width, height)
*/
getDimensions = function ($adUnit) {

var dimensions = [],
dimensionsData = $adUnit.data(‘dimensions’);

// Check if data-dimensions are specified. If they aren’t, use the dimensions of the ad unit div.
if (dimensionsData) {

var dimensionGroups = dimensionsData.split(‘,’);

$.each(dimensionGroups, function (k, v) {

var dimensionSet = v.split(‘x’);
dimensions.push([parseInt(dimensionSet[0], 10), parseInt(dimensionSet[1], 10)]);

});

} else {

dimensions.push([$adUnit.width(), $adUnit.height()]);

}

return dimensions;

},

/**
* Call the google DFP script – there is a little bit of error detection in here to detect
* if the dfp script has failed to load either through an error or it being blocked by an ad
* blocker… if it does not load we execute a dummy script to replace the real DFP.
*
* @param {Object} options
* @param {Array} $adCollection
*/
dfpLoader = function (options, $adCollection) {

function execBlockEvents() {
if(dfpScript.shouldCheckForAdBlockers()) {
$.each($adCollection, function () {
options.afterAdBlocked.call(dfpScript, $(this));
});
}
}

// make sure we don’t load gpt.js multiple times
dfpIsLoaded = dfpIsLoaded || $(‘script[src*=”googletagservices.com/tag/js/gpt.js”]’).length;
if (dfpIsLoaded) {
if(adsCouldNeverBeInitilized) {
execBlockEvents();
}
return $.Deferred().resolve();
}

var loaded = $.Deferred();

window.googletag = window.googletag || {};
window.googletag.cmd = window.googletag.cmd || [];

var gads = document.createElement(‘script’);
gads.async = true;
gads.type = ‘text/javascript’;

// Adblock blocks the load of Ad scripts… so we check for that
gads.onerror = function () {
dfpBlocked();
loaded.resolve();
adsCouldNeverBeInitilized = true;
execBlockEvents();
};

gads.onload = function() {
// this will work with ghostery:
if (!googletag._loadStarted_) {
googletag._adBlocked_ = true;
execBlockEvents();
}
loaded.resolve();
};

var useSSL = ‘https:’ === document.location.protocol;
gads.src = (useSSL ? ‘https:’ : ‘http:’) +
‘//www.googletagservices.com/tag/js/gpt.js’;
var node = document.getElementsByTagName(‘script’)[0];
node.parentNode.insertBefore(gads, node);

// Adblock plus seems to hide blocked scripts… so we check for that
if (gads.style.display === ‘none’) {
dfpBlocked();
}

return loaded;

},

/**
* This function gets called if DFP has been blocked by an adblocker
* it implements a dummy version of the dfp object and allows the script to excute its callbacks
* regardless of whether DFP is actually loaded or not… it is basically only useful for situations
* where you are laying DFP over existing content and need to init things like slide shows after the loading
* is completed.
*/
dfpBlocked = function () {
var googletag = window.googletag;
// Get the stored dfp commands
var commands = googletag.cmd;

var _defineSlot = function (name, dimensions, id, oop) {
googletag.ads.push(id);
googletag.ads[id] = {
renderEnded: function () { },
addService: function () { return this; }
};

return googletag.ads[id];
};

// overwrite the dfp object – replacing the command array with a function and defining missing functions
googletag = {
cmd: {
push: function (callback) {
callback.call(dfpScript);
}
},
ads: [],
pubads: function () { return this; },
noFetch: function () { return this; },
disableInitialLoad: function () { return this; },
disablePublisherConsole: function () { return this; },
enableSingleRequest: function () { return this; },
setTargeting: function () { return this; },
collapseEmptyDivs: function () { return this; },
enableServices: function () { return this; },
defineSlot: function (name, dimensions, id) {
return _defineSlot(name, dimensions, id, false);
},
defineOutOfPageSlot: function (name, id) {
return _defineSlot(name, [], id, true);
},
display: function (id) {
googletag.ads[id].renderEnded.call(dfpScript);
return this;
}

};

// Execute any stored commands
$.each(commands, function (k, v) {
googletag.cmd.push(v);
});

};

/**
* Add function to the jQuery / Zepto namespace
* @param String id (Optional) The DFP account ID
* @param Object options (Optional) Custom options to apply
*/
$.dfp = $.fn.dfp = function (id, options) {

options = options || {};

if (id === undefined) {
id = dfpID;
}

if (typeof id === ‘object’) {
options = id;
id = options.dfpID || dfpID;
}

var selector = this;

if (typeof this === ‘function’) {
selector = dfpSelector;
}

init(id, selector, options);

return this;

};

}));

})(window);
jQuery(document).ready(function($) {

$.dfp({
dfpID: ‘3404235’,
sizeMapping: {
‘my-default’: [
{browser: [1024, 768], ad_sizes: [[720, 540], [750, 300], [728, 90], [300, 600], [300, 250]]},
{browser: [ 980, 600], ad_sizes: [[720, 540], [750, 300], [728, 90], [300, 600], [300, 250]]},
{browser: [ 640, 480], ad_sizes: [[300, 600], [300, 250]]},
{browser: [ 0, 0], ad_sizes: [300, 37]}
],
}
});

});

});

});

window.REBELMOUSE_LOWEST_TASKS_QUEUE.push(function(){

let rebelbar = document.querySelector(‘.rebelbar-wrapper’);

// checking if add loaded to top spot
googletag.cmd.push(function () {

googletag.pubads().addEventListener(‘slotRenderEnded’, function (evnt) {

let adElement = rebelbar.querySelector(‘.htl-ad > div’);

if (evnt.slot.getSlotElementId() === adElement.id && !evnt.isEmpty) {

rebelbar.classList.add(‘locked-ad’);

// show ads as min 3 sec
setTimeout(function(){
rebelbar.classList.remove(‘locked-ad’);
}, 3000);

}

})
});

});



Source link Weed Feed

Be the first to comment

Leave a Reply

Your email address will not be published.


*