comparison default/node_modules/shoestring/src/util/tracker.js @ 0:1d038bc9b3d2 default tip

Up:default
author Liny <dev@neowd.com>
date Sat, 31 May 2025 09:21:51 +0800
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:1d038bc9b3d2
1 //>>excludeStart("exclude", pragmas.exclude);
2 define([ "shoestring" ], function(){
3 //>>excludeEnd("exclude");
4
5 (function() {
6 shoestring.trackedMethodsKey = "shoestringMethods";
7
8 // simple check for localStorage from Modernizr - https://github.com/Modernizr/Modernizr/blob/master/feature-detects/storage/localstorage.js
9 function supportsStorage() {
10 var mod = "modernizr";
11 try {
12 localStorage.setItem(mod, mod);
13 localStorage.removeItem(mod);
14 return true;
15 } catch(e) {
16 return false;
17 }
18 }
19
20 // return a new function closed over the old implementation
21 function recordProxy( old, name ) {
22 return function() {
23 var tracked;
24 try {
25 tracked = JSON.parse(win.localStorage.getItem( shoestring.trackedMethodsKey ) || "{}");
26 } catch (e) {
27 if( e instanceof SyntaxError) {
28 tracked = {};
29 }
30 }
31
32 tracked[ name ] = true;
33 win.localStorage.setItem( shoestring.trackedMethodsKey, JSON.stringify(tracked) );
34
35 return old.apply(this, arguments);
36 };
37 }
38
39 // proxy each of the methods defined on fn
40 if( supportsStorage() ){
41 for( var method in shoestring.fn ){
42 if( shoestring.fn.hasOwnProperty(method) ) {
43 shoestring.fn[ method ] = recordProxy(shoestring.fn[ method ], method);
44 }
45 }
46 }
47 })();
48
49 //>>excludeStart("exclude", pragmas.exclude);
50 });
51 //>>excludeEnd("exclude");