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