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.x = null;
|
||||||
core.status.event.data.y = 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) {
|
actions.prototype.setPaintMode = function (mode) {
|
||||||
@ -2700,7 +2700,7 @@ actions.prototype.savePaint = function () {
|
|||||||
var data = {};
|
var data = {};
|
||||||
for (var floorId in core.paint) {
|
for (var floorId in core.paint) {
|
||||||
if (core.isset(core.paint[floorId]))
|
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({
|
core.download(core.firstData.name+".h5paint", JSON.stringify({
|
||||||
'name': core.firstData.name,
|
'name': core.firstData.name,
|
||||||
@ -2721,12 +2721,12 @@ actions.prototype.loadPaint = function () {
|
|||||||
core.paint = {};
|
core.paint = {};
|
||||||
for (var floorId in obj.paint) {
|
for (var floorId in obj.paint) {
|
||||||
if (core.isset(obj.paint[floorId]))
|
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');
|
core.clearMap('paint');
|
||||||
var value = core.paint[core.status.floorId];
|
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.utils.decodeCanvas(value, 32*core.bigmap.width, 32*core.bigmap.height);
|
||||||
core.drawImage('paint', core.bigmap.tempCanvas.canvas, 0, 0);
|
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);
|
core.platform.useLocalForage = core.getLocalStorage('useLocalForage', !core.platform.isIOS);
|
||||||
if (core.platform.useLocalForage) {
|
if (core.platform.useLocalForage) {
|
||||||
try {
|
try {
|
||||||
core.setLocalForage("__test__", LZString.compress("__test__"), function() {
|
core.setLocalForage("__test__", lzw_encode("__test__"), function() {
|
||||||
try {
|
try {
|
||||||
core.getLocalForage("__test__", null, function(data) {
|
core.getLocalForage("__test__", null, function(data) {
|
||||||
try {
|
try {
|
||||||
if (LZString.decompress(data)!="__test__") {
|
if (lzw_decode(data)!="__test__") {
|
||||||
console.log("localForage unsupported!");
|
console.log("localForage unsupported!");
|
||||||
core.platform.useLocalForage=false;
|
core.platform.useLocalForage=false;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1690,7 +1690,7 @@ ui.prototype.drawMaps = function (index, x, y) {
|
|||||||
if (core.status.event.data.paint) {
|
if (core.status.event.data.paint) {
|
||||||
var offsetX = core.clamp(x-6, 0, mw-13), offsetY = core.clamp(y-6, 0, mh-13);
|
var offsetX = core.clamp(x-6, 0, mw-13), offsetY = core.clamp(y-6, 0, mh-13);
|
||||||
var value = core.paint[floorId];
|
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.utils.decodeCanvas(value, 32*mw, 32*mh);
|
||||||
core.drawImage('ui', core.bigmap.tempCanvas.canvas, offsetX*32, offsetY*32, 416, 416, 0, 0, 416, 416);
|
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上
|
// 将已有的内容绘制到route上
|
||||||
var value = core.paint[core.status.floorId];
|
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.utils.decodeCanvas(value, 32*core.bigmap.width, 32*core.bigmap.height);
|
||||||
core.drawImage('paint', core.bigmap.tempCanvas.canvas, 0, 0);
|
core.drawImage('paint', core.bigmap.tempCanvas.canvas, 0, 0);
|
||||||
|
|
||||||
|
|||||||
@ -136,12 +136,14 @@ utils.prototype.setLocalStorage = function(key, value) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var str = JSON.stringify(value);
|
var str = JSON.stringify(value).replace(/[\u007F-\uFFFF]/g, function(chr) {
|
||||||
var compressed = LZString.compress(str);
|
return "\\u" + ("0000" + chr.charCodeAt(0).toString(16)).substr(-4)
|
||||||
|
});
|
||||||
|
var compressed = lzw_encode(str);
|
||||||
|
|
||||||
// test if we can save to localStorage
|
// test if we can save to localStorage
|
||||||
localStorage.setItem("__tmp__", compressed);
|
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);
|
localStorage.setItem(core.firstData.name + "_" + key, compressed);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -166,7 +168,7 @@ utils.prototype.getLocalStorage = function(key, defaultValue) {
|
|||||||
try {
|
try {
|
||||||
var value = localStorage.getItem(core.firstData.name+"_"+key);
|
var value = localStorage.getItem(core.firstData.name+"_"+key);
|
||||||
if (core.isset(value)) {
|
if (core.isset(value)) {
|
||||||
var output = LZString.decompress(value);
|
var output = lzw_decode(value);
|
||||||
if (core.isset(output) && output.length>0) {
|
if (core.isset(output) && output.length>0) {
|
||||||
try {
|
try {
|
||||||
return JSON.parse(output);
|
return JSON.parse(output);
|
||||||
@ -210,7 +212,9 @@ utils.prototype.setLocalForage = function (key, value, successCallback, errorCal
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Save to localforage
|
// 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) {
|
localforage.setItem(core.firstData.name+"_"+key, compressed, function (err) {
|
||||||
if (core.isset(err)) {
|
if (core.isset(err)) {
|
||||||
if (core.isset(errorCallback)) errorCallback(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(successCallback)) return;
|
||||||
if (core.isset(value)) {
|
if (core.isset(value)) {
|
||||||
try {
|
try {
|
||||||
var output = LZString.decompress(value);
|
var output = lzw_decode(value);
|
||||||
if (core.isset(output) && output.length>0) {
|
if (core.isset(output) && output.length>0) {
|
||||||
try {
|
try {
|
||||||
successCallback(JSON.parse(output));
|
successCallback(JSON.parse(output));
|
||||||
@ -1043,3 +1047,57 @@ utils.prototype.http = function (type, url, formData, success, error, mimeType,
|
|||||||
xhr.send(formData);
|
xhr.send(formData);
|
||||||
else xhr.send();
|
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