/* * DEMO HELPERS */ /** * debugData * * Pass me a data structure {} and I'll output all the key/value pairs - recursively * * @example var HTML = debugData( oElem.style, "Element.style", { keys: "top,left,width,height", recurse: true, sort: true, display: true, returnHTML: true }); * * @param Object o_Data A JSON-style data structure * @param String s_Title Title for dialog (optional) * @param Hash options Pass additional options in a hash */ function debugData (o_Data, s_Title, options) { options = options || {}; var str=(s_Title||s_Title==='' ? s_Title : 'DATA') // maintain backward compatibility with OLD 'recurseData' param , recurse=(typeof options=='boolean' ? options : options.recurse !==false) , keys=(options.keys?','+options.keys+',':false) , display=options.display !==false , html=options.returnHTML !==false , sort=options.sort !==false , D=[], i=0 // Array to hold data, i=counter , hasSubKeys = false , k, t, skip, x // loop vars ; if (typeof o_Data != 'object') { alert( (s_Title ? s_Title +': ' : '')+ o_Data ); return; } if (o_Data.jquery) { str=s_Title+'jQuery Collection ('+ o_Data.length +')\n context="'+ o_Data.context +'"'; } else if (o_Data.tagName && typeof o_Data.style == 'object') { str=s_Title+o_Data.tagName; var id = o_Data.id, cls=o_Data.className, src=o_Data.src, hrf=o_Data.href; if (id) str+='\n id="'+ id+'"'; if (cls) str+='\n class="'+ cls+'"'; if (src) str+='\n src="'+ src+'"'; if (hrf) str+='\n href="'+ hrf+'"'; } else { parse(o_Data,''); // recursive parsing if (sort && !hasSubKeys) D.sort(); // sort by keyName - but NOT if has subKeys! if (str) str += '\n***'+ '****************************'.substr(0,str.length) +'\n'; str += D.join('\n'); // add line-breaks } if (display) alert(str); // display data if (html) str=str.replace(/\n/g, '
').replace(/ /g, '  '); // format as HTML return str; function parse ( data, prefix ) { if (typeof prefix=='undefined') prefix=''; try { $.each( data, function (key, val) { k = prefix+key+': '; skip = (keys && keys.indexOf(','+key+',') == -1); if (typeof val==='function') { // FUNCTION if (!skip) D[i++] = k +'function()'; } else if (typeof val==='string') { // STRING if (!skip) D[i++] = k +'"'+ val +'"'; } else if (val===null || val===undefined || typeof val !=='object') { // NULL, UNDEFINED, NUMBER or BOOLEAN if (!skip) D[i++] = k + val; } else if (debugIsArray(val)) { // ARRAY if (!skip) { if (val.length && typeof val[0] == "object") { // array of objects (hashs or arrays) D[i++] = k +'{'; parse( val, prefix+' '); // RECURSE D[i++] = prefix +'}'; } else D[i++] = k +'[ '+ val.toString() +' ]'; // output delimited array } } else if (val.jquery) { if (!skip) D[i++] = k +'jQuery ('+ val.length +') context="'+ val.context +'"'; } else if (val.tagName && typeof val.style == 'object') { var id = val.id, cls=val.className, src=val.src, hrf=val.href; if (skip) D[i++] = k +' '+ id ? 'id="'+ id+'"' : src ? 'src="'+ src+'"' : hrf ? 'href="'+ hrf+'"' : cls ? 'class="'+cls+'"' : ''; } else { // Object or JSON if (!recurse || !hasKeys(val)) { // show an empty hash if (!skip) D[i++] = k +'{ }'; } else { // recurse into JSON hash - indent output D[i++] = k +'{'; parse( val, prefix+' '); // RECURSE D[i++] = prefix +'}'; } } }); } catch (e) {} function hasKeys(o) { var c=0; for (x in o) c++; if (!hasSubKeys) hasSubKeys = !!c; return !!c; } } }; function debugIsArray(o) { return (o && typeof o==='object' && !o.propertyIsEnumerable('length') && typeof o.length==='number'); }; function debugStackTrace (s_Title, options) { var callstack = [] , isCallstackPopulated = false ; try { i.dont.exist += 0; // doesn't exist- that's the point } catch(e) { if (e.stack) { // Firefox var lines = e.stack.split('\n'); for (var i=0, len=lines.length; i') .css( $.extend( pos, position ) ) .appendTo( container || 'body') .themeswitcher() ; }; /** * removeUITheme * * Remove the cookie set by the UI Themeswitcher to reset a page to default styles */ function removeUITheme ( cookieName, removeCookie ) { $('link.ui-theme').remove(); $('.jquery-ui-themeswitcher-title').text( 'Switch Theme' ); if (removeCookie !== false) $.cookie( cookieName || 'jquery-ui-theme', null ); }; function debugWindow ( content, options ) { var defaults = { css: { position: 'fixed' , top: 0 } }; $.extend( true, (options || {}), defaults ); var $W = $('
') .html( content.replace(/\n/g, '
').replace(/ /g, '  ') ) // format as HTML .css( options.css ) ; };