X-Git-Url: http://juplo.de/gitweb/?a=blobdiff_plain;f=jquery.openx.js;h=5029248deace1695ce6aff2db2e03865293417ef;hb=1a5c6ae43875f7a234fae919f9fd85b9574c3d8c;hp=352d0acf6a5c3f1ef9f71d3ffd6e3031321cab62;hpb=b2876e052926a1045ac059023e51919c3f29b196;p=openx diff --git a/jquery.openx.js b/jquery.openx.js index 352d0ac..5029248 100644 --- a/jquery.openx.js +++ b/jquery.openx.js @@ -29,8 +29,15 @@ count = 0, slots = {}, + min_width = {}, + max_width = {}, + is_pagewidth = {}, + pagewidth, + rendered = {}, + visible = {}, + rendering = false, + resize_timer, queue = [], - ads = [], output = []; @@ -93,11 +100,21 @@ * selector: string A selector for selecting the DOM-elements, that * should display ad-banners. DEFAULT: ".oa". * See: http://api.jquery.com/category/selectors/ + * min_prefix: string Prefix for the encoding of the minmal width as + * CSS-class. DEFAULT: "min_". + * max_prefix: string Prefix for the encoding of the maximal width as + * CSS-class. DEFAULT: "max_". + * pw_marker: string CSS-class, that marks the encoded maximal and minmal + * width as page width. DEFAULT: "pw". + * resize_delay: number Number of milliseconds to wait, before a + * recalculation of the visible ads is scheduled. + * If the value is choosen to small, a recalculation + * might be scheduled, while resizing is still in + * progress. DEFAULT: 200. + * debug: boolean Turn on/off console-debugging. DEFAULT: false. */ $.openx = function( options ) { - var name, src, errors = [], i; - if (domain) { if (console.error) { console.error('jQuery.openx was already initialized!'); @@ -112,12 +129,9 @@ _options = options; - if (!options.server) - errors.push('Required option "server" is missing!'); - if (errors.length > 0) { + if (!options.server) { if (console.error) { - for (i=0; i= min_width[id] && width <= max_width[id]; + if (visible[id]) { + if (!rendered[id]) { + queue.push(id); + src += escape(id + '=' + OA_zones[slots[id].id] + "|"); + rendered[id] = true; + if (settings.debug && console.debug) + console.debug('Fetching banner ' + slots[id].id); + } + else { + /** Unhide already fetched visible banners */ + if (settings.debug && console.debug) + console.debug('Unhiding already fetched banner ' + slots[id].id); + $(slots[id]).slideDown(); + } + } + else { + /** Hide unvisible banners */ + if (settings.debug && console.debug) + console.debug('Hiding banner ' + slots[id].id); + $(slots[id]).hide(); + } + } src += '&nz=1'; // << We want to fetch named zones! /** @@ -204,25 +307,23 @@ if (typeof OA_source !== 'undefined') src += "&source=" + escape(OA_source); - /** Chain-load the scripts (next script to load is fl.js */ - $.getScript(src, load_flash); - - } - - function load_flash() { + /** Signal, that this task is done / in progress */ + pagewidth = undefined; - $.getScript(domain + settings.delivery + '/' + settings.fl, init_ads); + /** Fetch data from OpenX and schedule the render-preparation */ + $.getScript(src, init_ads); } function init_ads() { - var i, id; + var i, id, ads = []; for (i=0; i 0) { + while (queue.length > 0) { var result, src, inline; - id = ads.shift(); - node = slots[id]; + id = queue.shift(); + node = $(slots[id]); + + if (settings.debug && console.debug) + console.debug('Rendering banner ' + slots[id].id); node.slideDown(); @@ -281,7 +385,7 @@ /** script-tag with src-URL! */ if (OA_output[id].length > 0) /** The banner-code was not rendered completely yet! */ - ads.unshift(id); + queue.unshift(id); /** Load the script and halt all work until the script is loaded and executed... */ $.getScript(result[1], render_ads); // << jQuery.getScript() generates onload-Handler for _all_ browsers ;) return; @@ -297,6 +401,15 @@ id = undefined; node = undefined; + rendering = false; + + if (settings.debug && console.debug) + console.debug('Recalculation of visible banners done!'); + + /** Restart rendering, if new task was queued */ + if (pagewidth) + fetch_ads(); + } /** This function is used to overwrite document.write and document.writeln */ @@ -308,7 +421,7 @@ for (var i=0; i