X-Git-Url: http://juplo.de/gitweb/?a=blobdiff_plain;f=jquery.openx.js;h=d687dfad87cfa2a89c808c34ccfae52df7d43257;hb=8bf0530c43be94c835d313b572da3569a4c878b8;hp=582559358ee33d9ee8b31ea02bedbe0d585996c1;hpb=4691d2c97d4c3154c20020487dcd916a2b81abf2;p=openx diff --git a/jquery.openx.js b/jquery.openx.js index 5825593..d687dfa 100644 --- a/jquery.openx.js +++ b/jquery.openx.js @@ -25,28 +25,115 @@ var - domain, id, node, + settings, _options, domain, id, node, count = 0, slots = {}, queue = [], - ads = [], output = []; - $.openx = function( server, zones, options ) { + /* + * Configuration-Options for jQuery.openx + * + * Since the domain-name of the ad-server is the only required parameter, + * jQuery.openx for convenience can be configured with only that one + * parameter. For example: "jQuery.openx('openx.example.org');". If more + * configuration-options are needed, they must be specified as an object. + * For example: "jQuery.openx({'server': 'openx.example.org', ... });". + * + * + * Server-Settings: + * + * server: string Name of the server, without protocol or port. For + * example "openx.example.org". This option is + * REQUIRED. + * protocol: Optional parameter. + * http: All connections to the ad-server are made via HTTP. + * https: All connections to the ad-server are made via HTTPS. + * If empty, document.location.protocol will be used. + * http_port: number Port-Number for HTTP-connections to the ad-server + * (only needed, when it is not the default-value 80). + * https_port: Port-Number for HTTPS-connections to the ad-server + * (only needed, when it is not the default-value 443). + * + * + * Seldom needed special Server-Settings (these parameters are only needed, + * if the default delivery-configration of the OpenX-Server was changed): + * + * path: string Path to delivery-scripts. DEFAULT: "/www/delivery". + * fl: string Flash-Include-Script. DEFAULT: "fl.js". + * + * + * Delivery-Options (for details and explanations see the see: + * http://www.openx.com/docs/2.8/userguide/single%20page%20call): + * + * block: 1 Don't show the banner again on the same page. + * 0 A Banner might be shown multiple times on the same + * page (DEFAULT). + * blockcampaign: 1 Don't show a banner from the same campaign again on + * the same page. + * 0 A Banner from the same campaign might be shown + * muliple times on the same page (DEFAULT). + * target: string The value is addes as the HTML TARGET attribute in + * the ad code. Examples for sensible values: "_blank", + * "_top". + * withtext: 1 Show text below banner. Enter this text in the + * Banner properties page. + * 0 Ignore the text-field from the banner-properties + (DEFAULT). + * charset: string Charset used, when delivering the banner-codes. + * If empty, the charset is guessed by OpenX. Examples + * for sensible values: "UTF-8", "ISO-8859-1". + * + * + * Other settings: + * + * selector: string A selector for selecting the DOM-elements, that + * should display ad-banners. DEFAULT: ".oa". + * See: http://api.jquery.com/category/selectors/ + */ + $.openx = function( options ) { if (domain) { - if (console.error) + if (console.error) { console.error('jQuery.openx was already initialized!'); + console.log('Configured options: ', _options); + } return; } - domain = document.location.protocol == 'https:' ? 'https://' + server + ':8443':'http://' + server; + /** Enable convenient-configuration */ + if (typeof(options) == 'string') + options = { 'server': options }; + + _options = options; + + if (!options.server) { + if (console.error) { + console.error('Required option "server" is missing!'); + console.log('options: ', options); + } + return; + } - var - name, - src = domain; + settings = $.extend( + { + 'protocol': document.location.protocol, + 'delivery': '/www/delivery', + 'fl': 'fl.js', + 'selector': '.oa', + 'cache': true + }, + options + ); + + domain = settings.protocol + '//'; + domain += settings.server; + if (settings.protocol === 'http:' && settings.http_port) + domain += ':' + settings.http_port; + if (settings.protocol === 'https:' && settings.https_port) + domain += ':' + settings.https_port; /** * Without this option, jQuery appends an timestamp to every URL, that @@ -54,51 +141,86 @@ * third-party-ad-scripts, that assume that the called URL's are not * altered. */ - $.ajaxSetup({ cache: true }); + $.ajaxSetup({ 'cache': true }); - src += "/www/delivery/spc.php?zones="; - - /** Only fetch banners, that are really included in this page */ - for(name in zones) { - $('.oa').each(function() { + /** + * jQuery.openx only works with "named zones", because it does not know, + * which zones belong to which website. For mor informations about + * "named zones" see: + * http://www.openx.com/docs/2.8/userguide/single%20page%20call + * + * For convenience, jQuery.openx only fetches banners, that are really + * included in the actual page. This way, you can configure jQuery.openx + * with all zones available for your website - for example in a central + * template - and does not have to worry about performance penalties due + * to unnecessarily fetched banners. + */ + for(name in OA_zones) { + $(settings.selector).each(function() { var - node = $(this), id; - if (node.hasClass(name)) { + if (this.id === name) { id = 'oa_' + ++count; - slots[id] = node; - queue.push(id); - src += escape(id + '=' + zones[name] + "|"); + slots[id] = this; } }); } - if (typeof OA_source !== 'undefined') - src += "&source=" + escape(OA_source); - src += "&nz=1&r=" + Math.floor(Math.random()*99999999); - src += "&block=1&charset=UTF-8"; + /** Fetch the JavaScript for Flash and schedule the initial fetch */ + $.getScript(domain + settings.delivery + '/' + settings.fl, fetch_ads); - if (window.location) src += "&loc=" + escape(window.location); - if (document.referrer) src += "&referer=" + escape(document.referrer); + } - $.getScript(src, load_flash); + function fetch_ads() { - } + var name, src = domain + settings.delivery + '/spc.php'; + + /** Order banners for all zones that were found on the page */ + src += '?zones='; + for(id in slots) { + queue.push(id); + src += escape(id + '=' + OA_zones[slots[id].id] + "|"); + } + src += '&nz=1'; // << We want to fetch named zones! + + /** + * These are some additions to the URL of spc.php, that are originally + * made in spcjs.php + */ + src += '&r=' + Math.floor(Math.random()*99999999); + if (window.location) src += "&loc=" + escape(window.location); + if (document.referrer) src += "&referer=" + escape(document.referrer); - function load_flash() { + /** Add the configured options */ + if (settings.block === 1) + src += '&block=1'; + if (settings.blockcampaign === 1) + src += '&blockcampaign=1'; + if (settings.target) + src += '&target=' + settings.target; + if (settings.withtext === 1) + src += '&withtext=1'; + if (settings.charset) + src += '&charset=' + settings.charset; + + /** Add the source-code - if present */ + if (typeof OA_source !== 'undefined') + src += "&source=" + escape(OA_source); - $.getScript(domain + '/www/delivery/fl.js', 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]); node.slideDown(); @@ -157,7 +279,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; @@ -184,7 +306,7 @@ for (var i=0; i