Use lzw_encode instead of LZString.compress
This commit is contained in:
parent
ca250fa60a
commit
d837ab1120
@ -2679,7 +2679,7 @@ actions.prototype.onupPaint = function () {
|
||||
core.status.event.data.x = null;
|
||||
core.status.event.data.y = null;
|
||||
// 保存
|
||||
core.paint[core.status.floorId] = LZString.compress(core.utils.encodeCanvas(core.dymCanvas.paint).join(","));
|
||||
core.paint[core.status.floorId] = lzw_encode(core.utils.encodeCanvas(core.dymCanvas.paint).join(","));
|
||||
}
|
||||
|
||||
actions.prototype.setPaintMode = function (mode) {
|
||||
@ -2700,7 +2700,7 @@ actions.prototype.savePaint = function () {
|
||||
var data = {};
|
||||
for (var floorId in core.paint) {
|
||||
if (core.isset(core.paint[floorId]))
|
||||
data[floorId] = LZString.decompress(core.paint[floorId]);
|
||||
data[floorId] = lzw_decode(core.paint[floorId]);
|
||||
}
|
||||
core.download(core.firstData.name+".h5paint", JSON.stringify({
|
||||
'name': core.firstData.name,
|
||||
@ -2721,12 +2721,12 @@ actions.prototype.loadPaint = function () {
|
||||
core.paint = {};
|
||||
for (var floorId in obj.paint) {
|
||||
if (core.isset(obj.paint[floorId]))
|
||||
core.paint[floorId] = LZString.compress(obj.paint[floorId]);
|
||||
core.paint[floorId] = lzw_encode(obj.paint[floorId]);
|
||||
}
|
||||
|
||||
core.clearMap('paint');
|
||||
var value = core.paint[core.status.floorId];
|
||||
if (core.isset(value)) value = LZString.decompress(value).split(",");
|
||||
if (core.isset(value)) value = lzw_decode(value).split(",");
|
||||
core.utils.decodeCanvas(value, 32*core.bigmap.width, 32*core.bigmap.height);
|
||||
core.drawImage('paint', core.bigmap.tempCanvas.canvas, 0, 0);
|
||||
|
||||
|
||||
@ -276,11 +276,11 @@ core.prototype.init = function (coreData, callback) {
|
||||
core.platform.useLocalForage = core.getLocalStorage('useLocalForage', !core.platform.isIOS);
|
||||
if (core.platform.useLocalForage) {
|
||||
try {
|
||||
core.setLocalForage("__test__", LZString.compress("__test__"), function() {
|
||||
core.setLocalForage("__test__", lzw_encode("__test__"), function() {
|
||||
try {
|
||||
core.getLocalForage("__test__", null, function(data) {
|
||||
try {
|
||||
if (LZString.decompress(data)!="__test__") {
|
||||
if (lzw_decode(data)!="__test__") {
|
||||
console.log("localForage unsupported!");
|
||||
core.platform.useLocalForage=false;
|
||||
}
|
||||
|
||||
@ -1690,7 +1690,7 @@ ui.prototype.drawMaps = function (index, x, y) {
|
||||
if (core.status.event.data.paint) {
|
||||
var offsetX = core.clamp(x-6, 0, mw-13), offsetY = core.clamp(y-6, 0, mh-13);
|
||||
var value = core.paint[floorId];
|
||||
if (core.isset(value)) value = LZString.decompress(value).split(",");
|
||||
if (core.isset(value)) value = lzw_decode(value).split(",");
|
||||
core.utils.decodeCanvas(value, 32*mw, 32*mh);
|
||||
core.drawImage('ui', core.bigmap.tempCanvas.canvas, offsetX*32, offsetY*32, 416, 416, 0, 0, 416, 416);
|
||||
}
|
||||
@ -2582,7 +2582,7 @@ ui.prototype.drawPaint = function () {
|
||||
|
||||
// 将已有的内容绘制到route上
|
||||
var value = core.paint[core.status.floorId];
|
||||
if (core.isset(value)) value = LZString.decompress(value).split(",");
|
||||
if (core.isset(value)) value = lzw_decode(value).split(",");
|
||||
core.utils.decodeCanvas(value, 32*core.bigmap.width, 32*core.bigmap.height);
|
||||
core.drawImage('paint', core.bigmap.tempCanvas.canvas, 0, 0);
|
||||
|
||||
|
||||
@ -136,12 +136,14 @@ utils.prototype.setLocalStorage = function(key, value) {
|
||||
return;
|
||||
}
|
||||
|
||||
var str = JSON.stringify(value);
|
||||
var compressed = LZString.compress(str);
|
||||
var str = JSON.stringify(value).replace(/[\u007F-\uFFFF]/g, function(chr) {
|
||||
return "\\u" + ("0000" + chr.charCodeAt(0).toString(16)).substr(-4)
|
||||
});
|
||||
var compressed = lzw_encode(str);
|
||||
|
||||
// test if we can save to localStorage
|
||||
localStorage.setItem("__tmp__", compressed);
|
||||
if (LZString.decompress(localStorage.getItem("__tmp__"))==str) {
|
||||
if (lzw_decode(localStorage.getItem("__tmp__"))==str) {
|
||||
localStorage.setItem(core.firstData.name + "_" + key, compressed);
|
||||
}
|
||||
else {
|
||||
@ -166,7 +168,7 @@ utils.prototype.getLocalStorage = function(key, defaultValue) {
|
||||
try {
|
||||
var value = localStorage.getItem(core.firstData.name+"_"+key);
|
||||
if (core.isset(value)) {
|
||||
var output = LZString.decompress(value);
|
||||
var output = lzw_decode(value);
|
||||
if (core.isset(output) && output.length>0) {
|
||||
try {
|
||||
return JSON.parse(output);
|
||||
@ -210,7 +212,9 @@ utils.prototype.setLocalForage = function (key, value, successCallback, errorCal
|
||||
}
|
||||
|
||||
// Save to localforage
|
||||
var compressed = LZString.compress(JSON.stringify(value));
|
||||
var compressed = lzw_encode(JSON.stringify(value).replace(/[\u007F-\uFFFF]/g, function(chr) {
|
||||
return "\\u" + ("0000" + chr.charCodeAt(0).toString(16)).substr(-4)
|
||||
}));
|
||||
localforage.setItem(core.firstData.name+"_"+key, compressed, function (err) {
|
||||
if (core.isset(err)) {
|
||||
if (core.isset(errorCallback)) errorCallback(err);
|
||||
@ -241,7 +245,7 @@ utils.prototype.getLocalForage = function (key, defaultValue, successCallback, e
|
||||
if (!core.isset(successCallback)) return;
|
||||
if (core.isset(value)) {
|
||||
try {
|
||||
var output = LZString.decompress(value);
|
||||
var output = lzw_decode(value);
|
||||
if (core.isset(output) && output.length>0) {
|
||||
try {
|
||||
successCallback(JSON.parse(output));
|
||||
@ -1043,3 +1047,57 @@ utils.prototype.http = function (type, url, formData, success, error, mimeType,
|
||||
xhr.send(formData);
|
||||
else xhr.send();
|
||||
}
|
||||
|
||||
// LZW-compress
|
||||
// https://gist.github.com/revolunet/843889
|
||||
function lzw_encode(s) {
|
||||
var dict = {};
|
||||
var data = (s + "").split("");
|
||||
var out = [];
|
||||
var currChar;
|
||||
var phrase = data[0];
|
||||
var code = 256;
|
||||
for (var i=1; i<data.length; i++) {
|
||||
currChar=data[i];
|
||||
if (dict[phrase + currChar] != null) {
|
||||
phrase += currChar;
|
||||
}
|
||||
else {
|
||||
out.push(phrase.length > 1 ? dict[phrase] : phrase.charCodeAt(0));
|
||||
dict[phrase + currChar] = code;
|
||||
code++;
|
||||
phrase=currChar;
|
||||
}
|
||||
}
|
||||
out.push(phrase.length > 1 ? dict[phrase] : phrase.charCodeAt(0));
|
||||
for (var i=0; i<out.length; i++) {
|
||||
out[i] = String.fromCharCode(out[i]);
|
||||
}
|
||||
return out.join("");
|
||||
}
|
||||
|
||||
// Decompress an LZW-encoded string
|
||||
function lzw_decode(s) {
|
||||
var dict = {};
|
||||
var data = (s + "").split("");
|
||||
var currChar = data[0];
|
||||
var oldPhrase = currChar;
|
||||
var out = [currChar];
|
||||
var code = 256;
|
||||
var phrase;
|
||||
for (var i=1; i<data.length; i++) {
|
||||
var currCode = data[i].charCodeAt(0);
|
||||
if (currCode < 256) {
|
||||
phrase = data[i];
|
||||
}
|
||||
else {
|
||||
phrase = dict[currCode] ? dict[currCode] : (oldPhrase + currChar);
|
||||
}
|
||||
out.push(phrase);
|
||||
currChar = phrase.charAt(0);
|
||||
dict[code] = oldPhrase + currChar;
|
||||
code++;
|
||||
oldPhrase = phrase;
|
||||
}
|
||||
return out.join("");
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user