forked from brianleroux/lawnchair
/
ie-userdata.js
75 lines (70 loc) · 1.64 KB
/
ie-userdata.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
/**
* ie userdata adaptor
*
*/
Lawnchair.adapter('ie-userdata', {
valid: function () {
return typeof(document.body.addBehavior) != 'undefined';
},
init:function(){
var s = document.createElement('span');
s.style.behavior = 'url(\'#default#userData\')';
s.style.position = 'absolute';
s.style.left = 10000;
document.body.appendChild(s);
this.storage = s;
this.storage.load('lawnchair');
},
get:function(key, callback){
var obj = JSON.parse(this.storage.getAttribute(key) || 'null');
if (obj) {
obj.key = key;
}
if (callback)
callback(obj);
},
save:function(obj, callback){
var id = obj.key || 'lc' + this.uuid();
delete obj.key;
this.storage.setAttribute(id, JSON.stringify(obj));
this.storage.save('lawnchair');
if (callback){
obj.key = id;
callback(obj);
}
},
all:function(callback){
var ca = this.storage.XMLDocument.firstChild.attributes;
var yar = [];
var v,o;
// yo ho yo ho a pirates life for me
for (var i = 0, l = ca.length; i < l; i++) {
v = ca[i];
o = JSON.parse(v.nodeValue || 'null');
if (o) {
o.key = v.nodeName;
yar.push(o);
}
}
if (callback)
callback(yar);
},
remove:function(keyOrObj,callback) {
var key = (typeof keyOrObj == 'string') ? keyOrObj : keyOrObj.key;
this.storage.removeAttribute(key);
this.storage.save('lawnchair');
if(callback)
callback();
},
nuke:function(callback) {
var that = this;
this.all(function(r){
for (var i = 0, l = r.length; i < l; i++) {
if (r[i].key)
that.remove(r[i].key);
}
if(callback)
callback();
});
}
});