100 lines
2.4 KiB
JavaScript
100 lines
2.4 KiB
JavaScript
wpj.serializer = {
|
|
serializeHash: function(values) {
|
|
var value,
|
|
serValue,
|
|
result = [],
|
|
enc = encodeURIComponent;
|
|
|
|
for (var index in values) {
|
|
value = values[index];
|
|
if ($.isArray(value)) {
|
|
serValue = enc(JSON.stringify(value));
|
|
} else if (typeof value === 'boolean') {
|
|
serValue = value ? 1 : 0;
|
|
} else {
|
|
serValue = enc(JSON.stringify(value));
|
|
}
|
|
|
|
result.push([index, serValue].join('='));
|
|
}
|
|
|
|
return result.join('&');
|
|
},
|
|
deserializeHash: function(hash) {
|
|
// Normalize hash
|
|
if (hash[0] == '#') {
|
|
hash = hash.substr(1);
|
|
}
|
|
|
|
var values = hash.split('&'),
|
|
result = {},
|
|
parts,
|
|
dec = decodeURIComponent;
|
|
|
|
for (var index in values) {
|
|
parts = values[index].split('=');
|
|
if (parts.length == 2) {
|
|
result[parts[0]] = JSON.parse(dec(parts[1]));
|
|
}
|
|
}
|
|
|
|
return result;
|
|
},
|
|
serializeUrl: function(values, name) {
|
|
var value,
|
|
serValue,
|
|
result = [];
|
|
|
|
for (var index in values) {
|
|
value = values[index];
|
|
if ($.isArray(value)) {
|
|
result.push(wpj.serializer.serializeUrl(value, index));
|
|
} else {
|
|
serValue = encodeURIComponent(value);
|
|
result.push([name || index, serValue].join('='));
|
|
}
|
|
}
|
|
|
|
return result.join('&');
|
|
},
|
|
unserializeUrl: function(url) {
|
|
var parts = url.split('&'),
|
|
pair,
|
|
values = [];
|
|
|
|
$.each(parts, function(index, value) {
|
|
pair = value.split('=');
|
|
if (pair.length == 2) {
|
|
values.push({
|
|
name: pair[0],
|
|
value: decodeURIComponent(pair[1].replace(/\+/g, ' '))
|
|
});
|
|
}
|
|
});
|
|
|
|
return wpj.serializer.arrayToDict(values);
|
|
},
|
|
arrayToDict: function(values) {
|
|
var result = {},
|
|
index,
|
|
key,
|
|
value;
|
|
|
|
for (index in values) {
|
|
key = values[index]['name'];
|
|
value = values[index]['value'];
|
|
|
|
if (result[key] != undefined) {
|
|
if (typeof result[key] != 'object') {
|
|
result[key] = [result[key]];
|
|
}
|
|
result[key].push(value);
|
|
} else {
|
|
result[key] = value;
|
|
}
|
|
}
|
|
|
|
return result;
|
|
}
|
|
};
|