// intercept.html // 2009-08-21 // This file makes it possible for JSLint to run as an ADsafe widget by // adding lib features. // It provides a JSON cookie facility. Each widget is allowed to create a // single JSON cookie. // It also provides a way for the widget to call JSLint. The widget cannot // call JSLint directly because it is loaded as a global variable. I don't // want to change that because other versions of JSLint depend on that. /*jslint nomen: false */ /*global ADSAFE, document, JSLINT */ /*members ___nodes___, _intercept, cookie, edition, get, getTime, indexOf, innerHTML, jslint, length, parse, replace, report, set, setTime, slice, stringify, toGMTString */ "use strict"; ADSAFE._intercept(function (id, dom, lib, bunch) { // Give every widget access to a cookie. The name of the cookie will be the // same as the id of the widget. lib.cookie = { get: function () { // Get the raw cookie. Extract this widget's cookie, and parse it. var c = ' ' + document.cookie + ';', s = c.indexOf((' ' + id + '=')), v; try { if (s >= 0) { s += id.length + 2; v = JSON.parse(c.slice(s, c.indexOf(';', s))); } } catch (ignore) {} return v; }, set: function (value) { // Set a cookie. It must be under 2000 in length. Escapify equal sign // and semicolon if necessary. var d, text = JSON.stringify(value) .replace(/[=]/g, '\\u003d') .replace(/[;]/g, '\\u003b'); if (text.length < 2000) { d = new Date(); d.setTime(d.getTime() + 1e9); document.cookie = id + "=" + text + ';expires=' + d.toGMTString(); } } }; }); ADSAFE._intercept(function (id, dom, lib, bunch) { // Give only the JSLINT_ widget access to the JSLINT function. // We add a jslint function to its lib that calls JSLINT and // then calls JSLINT.report, and stuffs the html result into // a node provided by the widget. A widget does not get direct // access to nodes. // We also add an edition function to the lib that gives the // widget access to the current edition string. if (id === 'JSLINT_') { lib.jslint = function (source, options, output) { JSLINT(source, options); output.___nodes___[0].innerHTML = JSLINT.report(); }; lib.edition = function () { return JSLINT.edition; }; } });