Statistiques
| Révision :

root / tei / js / debug.js @ 2

Historique | Voir | Annoter | Télécharger (7,84 ko)

1 2 mingarao
/*
2 2 mingarao
 *        DEMO HELPERS
3 2 mingarao
 */
4 2 mingarao
5 2 mingarao
6 2 mingarao
/**
7 2 mingarao
 *        debugData
8 2 mingarao
 *
9 2 mingarao
 *        Pass me a data structure {} and I'll output all the key/value pairs - recursively
10 2 mingarao
 *
11 2 mingarao
 *        @example var HTML = debugData( oElem.style, "Element.style", { keys: "top,left,width,height", recurse: true, sort: true, display: true, returnHTML: true });
12 2 mingarao
 *
13 2 mingarao
 *        @param Object        o_Data   A JSON-style data structure
14 2 mingarao
 *        @param String        s_Title  Title for dialog (optional)
15 2 mingarao
 *        @param Hash        options  Pass additional options in a hash
16 2 mingarao
 */
17 2 mingarao
function debugData (o_Data, s_Title, options) {
18 2 mingarao
        options = options || {};
19 2 mingarao
        var
20 2 mingarao
                str=(s_Title || 'DATA')
21 2 mingarao
        //        maintain backward compatibility with OLD 'recurseData' param
22 2 mingarao
        ,        recurse=(typeof options=='boolean' ? options : options.recurse !==false)
23 2 mingarao
        ,        keys=(options.keys?','+options.keys+',':false)
24 2 mingarao
        ,        display=options.display !==false
25 2 mingarao
        ,        html=options.returnHTML !==false
26 2 mingarao
        ,        sort=options.sort !==false
27 2 mingarao
        ,        D=[], i=0 // Array to hold data, i=counter
28 2 mingarao
        ,        hasSubKeys = false
29 2 mingarao
        ,        k, t, skip, x        // loop vars
30 2 mingarao
        ;
31 2 mingarao
        s_Title=s_Title ? s_Title+'\n':'';
32 2 mingarao
33 2 mingarao
        if (typeof o_Data != 'object') {
34 2 mingarao
                alert( s_Title + o_Data );
35 2 mingarao
                return;
36 2 mingarao
        }
37 2 mingarao
        if (o_Data.jquery) {
38 2 mingarao
                str=s_Title+'jQuery Collection ('+ o_Data.length +')\n    context="'+ o_Data.context +'"';
39 2 mingarao
        }
40 2 mingarao
        else if (o_Data.tagName && typeof o_Data.style == 'object') {
41 2 mingarao
                str=s_Title+o_Data.tagName;
42 2 mingarao
                var id = o_Data.id, cls=o_Data.className, src=o_Data.src, hrf=o_Data.href;
43 2 mingarao
                if (id)  str+='\n    id="'+                id+'"';
44 2 mingarao
                if (cls) str+='\n    class="'+        cls+'"';
45 2 mingarao
                if (src) str+='\n    src="'+        src+'"';
46 2 mingarao
                if (hrf) str+='\n    href="'+        hrf+'"';
47 2 mingarao
        }
48 2 mingarao
        else {
49 2 mingarao
                parse(o_Data,''); // recursive parsing
50 2 mingarao
                if (sort && !hasSubKeys) D.sort(); // sort by keyName - but NOT if has subKeys!
51 2 mingarao
                str+='\n***'+'****************************'.substr(0,str.length);
52 2 mingarao
                str+='\n'+ D.join('\n'); // add line-breaks
53 2 mingarao
        }
54 2 mingarao
55 2 mingarao
        if (display) alert(str); // display data
56 2 mingarao
        if (html) str=str.replace(/\n/g, ' <br>').replace(/  /g, ' &nbsp;'); // format as HTML
57 2 mingarao
        return str;
58 2 mingarao
59 2 mingarao
        function parse ( data, prefix ) {
60 2 mingarao
                if (typeof prefix=='undefined') prefix='';
61 2 mingarao
                try {
62 2 mingarao
                        $.each( data, function (key, val) {
63 2 mingarao
                                k = prefix+key+':  ';
64 2 mingarao
                                skip = (keys && keys.indexOf(','+key+',') == -1);
65 2 mingarao
                                if (typeof val=='function') { // FUNCTION
66 2 mingarao
                                        if (!skip) D[i++] = k +'function()';
67 2 mingarao
                                }
68 2 mingarao
                                else if (typeof val=='string') { // STRING
69 2 mingarao
                                        if (!skip) D[i++] = k +'"'+ val +'"';
70 2 mingarao
                                }
71 2 mingarao
                                else if (typeof val !='object') { // NUMBER or BOOLEAN
72 2 mingarao
                                        if (!skip) D[i++] = k + val;
73 2 mingarao
                                }
74 2 mingarao
                                else if (isArray(val)) { // ARRAY
75 2 mingarao
                                        if (!skip) {
76 2 mingarao
                                                if (val.length && typeof val[0] == "object") { // array of objects (hashs or arrays)
77 2 mingarao
                                                        D[i++] = k +'{';
78 2 mingarao
                                                        parse( val, prefix+'    '); // RECURSE
79 2 mingarao
                                                        D[i++] = prefix +'}';
80 2 mingarao
                                                }
81 2 mingarao
                                                else
82 2 mingarao
                                                        D[i++] = k +'[ '+ val.toString() +' ]'; // output delimited array
83 2 mingarao
                                        }
84 2 mingarao
                                }
85 2 mingarao
                                else if (val.jquery) {
86 2 mingarao
                                        if (!skip) D[i++] = k +'jQuery ('+ val.length +') context="'+ val.context +'"';
87 2 mingarao
                                }
88 2 mingarao
                                else if (val.tagName && typeof val.style == 'object') {
89 2 mingarao
                                        var id = val.id, cls=val.className, src=val.src, hrf=val.href;
90 2 mingarao
                                        if (skip) D[i++] = k +' '+
91 2 mingarao
                                                id  ? 'id="'+        id+'"' :
92 2 mingarao
                                                src ? 'src="'+        src+'"' :
93 2 mingarao
                                                hrf ? 'href="'+        hrf+'"' :
94 2 mingarao
                                                cls ? 'class="'+cls+'"' :
95 2 mingarao
                                                '';
96 2 mingarao
                                }
97 2 mingarao
                                else { // Object or JSON
98 2 mingarao
                                        if (!recurse || !hasKeys(val)) { // show an empty hash
99 2 mingarao
                                                if (!skip) D[i++] = k +'{ }';
100 2 mingarao
                                        }
101 2 mingarao
                                        else { // recurse into JSON hash - indent output
102 2 mingarao
                                                D[i++] = k +'{';
103 2 mingarao
                                                parse( val, prefix+'    '); // RECURSE
104 2 mingarao
                                                D[i++] = prefix +'}';
105 2 mingarao
                                        }
106 2 mingarao
                                }
107 2 mingarao
                        });
108 2 mingarao
                } catch (e) {}
109 2 mingarao
                function isArray(o) {
110 2 mingarao
                        return (o && typeof o==='object' && !o.propertyIsEnumerable('length') && typeof o.length==='number');
111 2 mingarao
                }
112 2 mingarao
                function hasKeys(o) {
113 2 mingarao
                        var c=0;
114 2 mingarao
                        for (x in o) c++;
115 2 mingarao
                        if (!hasSubKeys) hasSubKeys = !!c;
116 2 mingarao
                        return !!c;
117 2 mingarao
                }
118 2 mingarao
        }
119 2 mingarao
};
120 2 mingarao
121 2 mingarao
if (!window.console) window.console = { log: debugData };
122 2 mingarao
123 2 mingarao
124 2 mingarao
/**
125 2 mingarao
 *        timer
126 2 mingarao
 *
127 2 mingarao
 *        Utility for debug timing of events
128 2 mingarao
 *        Can track multiple timers and returns either a total time or interval from last event
129 2 mingarao
 *        @param String        timerName        Name of the timer - defaults to debugTimer
130 2 mingarao
 *        @param String        action                Keyword for action or return-value...
131 2 mingarao
 *        action: 'reset' = reset; 'clear' = delete; 'total' = ms since init; 'step' or '' = ms since last event
132 2 mingarao
 */
133 2 mingarao
/**
134 2 mingarao
 *        timer
135 2 mingarao
 *
136 2 mingarao
 *        Utility method for timing performance
137 2 mingarao
 *        Can track multiple timers and returns either a total time or interval from last event
138 2 mingarao
 *
139 2 mingarao
 *        returns time-data: {
140 2 mingarao
 *                start:        Date Object
141 2 mingarao
 *        ,        last:        Date Object
142 2 mingarao
 *         ,        step:        99 // time since 'last'
143 2 mingarao
 *        ,        total:        99 // time since 'start'
144 2 mingarao
 *        }
145 2 mingarao
 *
146 2 mingarao
 *        USAGE SAMPLES
147 2 mingarao
 *        =============
148 2 mingarao
 *        timer('name'); // create/init timer
149 2 mingarao
 *        timer('name', 'reset'); // re-init timer
150 2 mingarao
 *        timer('name', 'clear'); // clear/remove timer
151 2 mingarao
 *        var i = timer('name');  // how long since last timer request?
152 2 mingarao
 *        var i = timer('name', 'total'); // how long since timer started?
153 2 mingarao
 *
154 2 mingarao
 *        @param String        timerName        Name of the timer - defaults to debugTimer
155 2 mingarao
 *        @param String        action                Keyword for action or return-value...
156 2 mingarao
 *        @param Hash                options                Options to customize return data
157 2 mingarao
 *        action: 'reset' = reset; 'clear' = delete; 'total' = ms since init; 'step' or '' = ms since last event
158 2 mingarao
 */
159 2 mingarao
function timer (timerName, action, options) {
160 2 mingarao
        var
161 2 mingarao
                name        = timerName || 'debugTimer'
162 2 mingarao
        ,        Timer        = window[ name ]
163 2 mingarao
        ,        defaults = {
164 2 mingarao
                        returnString:        true
165 2 mingarao
                ,        padNumbers:                true
166 2 mingarao
                ,        timePrefix:                ''
167 2 mingarao
                ,        timeSuffix:                ''
168 2 mingarao
                }
169 2 mingarao
        ;
170 2 mingarao
171 2 mingarao
        // init the timer first time called
172 2 mingarao
        if (!Timer || action == 'reset') { // init timer
173 2 mingarao
                Timer = window[ name ] = {
174 2 mingarao
                        start:        new Date()
175 2 mingarao
                ,        last:        new Date()
176 2 mingarao
                ,        step:        0 // time since 'last'
177 2 mingarao
                ,        total:        0 // time since 'start'
178 2 mingarao
                ,        options: $.extend({}, defaults, options)
179 2 mingarao
                };
180 2 mingarao
        }
181 2 mingarao
        else if (action == 'clear') { // remove timer
182 2 mingarao
                window[ name ] = null;
183 2 mingarao
                return null;
184 2 mingarao
        }
185 2 mingarao
        else { // update existing timer
186 2 mingarao
                Timer.step        = (new Date()) - Timer.last;  // time since 'last'
187 2 mingarao
                Timer.total        = (new Date()) - Timer.start; // time since 'start'
188 2 mingarao
                Timer.last        = new Date();
189 2 mingarao
        }
190 2 mingarao
191 2 mingarao
        var
192 2 mingarao
                time = (action == 'total') ? Timer.total : Timer.step
193 2 mingarao
        ,        o = Timer.options // alias
194 2 mingarao
        ;
195 2 mingarao
196 2 mingarao
        if (o.returnString || o.padNumbers || o.timePrefix || o.timeSuffix)
197 2 mingarao
                time += ""; // convert integer to string
198 2 mingarao
199 2 mingarao
        // pad time to 4 chars with underscores
200 2 mingarao
        if (o.padNumbers)
201 2 mingarao
                switch (time.length) {
202 2 mingarao
                        case 1:        time = "&ensp;&ensp;&ensp;"+ time;        break;
203 2 mingarao
                        case 2:        time = "&ensp;&ensp;"+ time;        break;
204 2 mingarao
                        case 3:        time = "&ensp;"+ time;        break;
205 2 mingarao
                }
206 2 mingarao
207 2 mingarao
        // add prefix and suffix
208 2 mingarao
        if (o.timePrefix || o.timeSuffix)
209 2 mingarao
                time = o.timePrefix + time + o.timeSuffix;
210 2 mingarao
211 2 mingarao
        return time;
212 2 mingarao
};
213 2 mingarao
214 2 mingarao
215 2 mingarao
/**
216 2 mingarao
 *        showOptions
217 2 mingarao
 *
218 2 mingarao
 *        Pass a layout-options object, and the pane/key you want to display
219 2 mingarao
 */
220 2 mingarao
function showOptions (o_Settings, key, options) {
221 2 mingarao
        var data = o_Settings.options;
222 2 mingarao
        $.each(key.split("."), function() {
223 2 mingarao
                data = data[this]; // resurse through multiple levels
224 2 mingarao
        });
225 2 mingarao
        debugData( data, 'options.'+key, options );
226 2 mingarao
};
227 2 mingarao
228 2 mingarao
/**
229 2 mingarao
 *        showState
230 2 mingarao
 *
231 2 mingarao
 *        Pass a layout-options object, and the pane/key you want to display
232 2 mingarao
 */
233 2 mingarao
function showState (o_Settings, key) {
234 2 mingarao
        debugData( o_Settings.state[key], 'state.'+key );
235 2 mingarao
};
236 2 mingarao
237 2 mingarao
238 2 mingarao
/**
239 2 mingarao
 *        addThemeSwitcher
240 2 mingarao
 *
241 2 mingarao
 *        Remove the cookie set by the UI Themeswitcher to reset a page to default styles
242 2 mingarao
 *
243 2 mingarao
 *        Dependancies: /lib/js/themeswitchertool.js
244 2 mingarao
 */
245 2 mingarao
function addThemeSwitcher ( container, position ) {
246 2 mingarao
        var pos = { top: '10px', right: '10px', zIndex: 10 };
247 2 mingarao
        $('<div id="themeContainer" style="position: absolute; overflow-x: hidden;"></div>')
248 2 mingarao
                .css( $.extend( pos, position ) )
249 2 mingarao
                .appendTo( container || 'body')
250 2 mingarao
                .themeswitcher()
251 2 mingarao
        ;
252 2 mingarao
};
253 2 mingarao
254 2 mingarao
/**
255 2 mingarao
 *        removeUITheme
256 2 mingarao
 *
257 2 mingarao
 *        Remove the cookie set by the UI Themeswitcher to reset a page to default styles
258 2 mingarao
 */
259 2 mingarao
function removeUITheme ( cookieName, removeCookie ) {
260 2 mingarao
        $('link.ui-theme').remove();
261 2 mingarao
        $('.jquery-ui-themeswitcher-title').text( 'Switch Theme' );
262 2 mingarao
        if (removeCookie !== false)
263 2 mingarao
                $.cookie( cookieName || 'jquery-ui-theme', null );
264 2 mingarao
};