This repo is archived. You can view files and clone it, but cannot push or open issues or pull requests.
SXS20240115/SRC/iMES_PDA/JSplugins/ng-persist/ng-persist.js
2024-01-24 16:47:50 +08:00

248 lines
10 KiB
JavaScript

"use strict";
var _createClass = (function () { function defineProperties(target, props) { for (var key in props) { var prop = props[key]; prop.configurable = true; if (prop.value) prop.writable = true; } Object.defineProperties(target, props); } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } };
(function () {
"use strict";
angular.module("ng-persist", []);
var $persist = function ($q, $localStorage) {
var isBrowser = false;
var isIos = false;
var isAndroid = false;
if (!window.cordova && !window.device && (typeof Keychain === 'undefined')) {
isBrowser = true;
} else {
isAndroid = window.device.platform === "Android";
isIos = window.device.platform === "iOS";
}
var LocalStorageAdapter = (function () {
function LocalStorageAdapter() {
_classCallCheck(this, LocalStorageAdapter);
}
_createClass(LocalStorageAdapter, {
read: {
value: function read(namespace, key) {
var deferred = $q.defer();
var val = $localStorage["" + namespace + "_" + key];
deferred.resolve(val);
return deferred.promise;
}
},
write: {
value: function write(namespace, key, val) {
var deferred = $q.defer();
$localStorage["" + namespace + "_" + key] = val;
deferred.resolve();
return deferred.promise;
}
},
remove: {
value: function remove(namespace, key) {
var deferred = $q.defer();
delete $localStorage["" + namespace + "_" + key];
deferred.resolve();
return deferred.promise;
}
}
});
return LocalStorageAdapter;
})();
var IosKeychainAdapter = (function () {
function IosKeychainAdapter() {
_classCallCheck(this, IosKeychainAdapter);
}
_createClass(IosKeychainAdapter, {
read: {
value: function read(namespace, key) {
var deferred = $q.defer();
Keychain.get(function (val) {
if (val !== "") {
val = JSON.parse(val);
} else {
val = null;
}
deferred.resolve(val);
}, function (err) {
deferred.reject(err);
}, key, '');
return deferred.promise;
}
},
write: {
value: function write(namespace, key, val) {
var deferred = $q.defer();
val = JSON.stringify(val);
Keychain.set(function () {
deferred.resolve();
}, function (err) {
deferred.reject(err);
}, key, val, false);
return deferred.promise;
}
},
remove: {
value: function remove(namespace, key) {
var deferred = $q.defer();
Keychain.remove(function () {
deferred.resolve();
}, function (err) {
deferred.reject(err);
}, key);
return deferred.promise;
}
}
});
return IosKeychainAdapter;
})();
var AndroidExternalStorageAdapter = (function () {
function AndroidExternalStorageAdapter() {
_classCallCheck(this, AndroidExternalStorageAdapter);
}
_createClass(AndroidExternalStorageAdapter, {
read: {
value: function read(namespace, key) {
var deferred = $q.defer();
var filename = "" + namespace + "_" + key;
window.resolveLocalFileSystemURL(cordova.file.externalRootDirectory + filename, function (fileEntry) {
fileEntry.file(function (file) {
var reader = new FileReader();
reader.onloadend = function (evt) {
var res = evt.target.result;
if (res !== "") {
res = JSON.parse(res);
} else {
res = null;
}
deferred.resolve(res);
};
reader.readAsText(file);
});
}, function (err) {
deferred.reject(err);
});
return deferred.promise;
}
},
write: {
value: function write(namespace, key, val) {
var deferred = $q.defer();
window.resolveLocalFileSystemURL(cordova.file.externalRootDirectory, function (dir) {
var filename = "" + namespace + "_" + key;
dir.getFile(filename, { create: true }, function (file) {
if (!file) {
deferred.reject();
}
file.createWriter(function (fileWriter) {
// fileWriter.seek(fileWriter.length);
var blob = new Blob([JSON.stringify(val)], { type: "text/plain" });
fileWriter.write(blob);
deferred.resolve();
}, function (err) {
deferred.reject(err);
});
});
});
return deferred.promise;
}
},
remove: {
value: function remove(namespace, key) {
var deferred = $q.defer();
window.resolveLocalFileSystemURL(cordova.file.externalRootDirectory, function (dir) {
var filename = "" + namespace + "_" + key;
dir.getFile(filename, { create: true }, function (file) {
if (!file) {
deferred.reject();
}
file.createWriter(function (fileWriter) {
// fileWriter.seek(fileWriter.length);
var blob = new Blob([""], { type: "text/plain" });
fileWriter.write(blob);
deferred.resolve();
}, function (err) {
deferred.reject(err);
});
});
});
return deferred.promise;
}
}
});
return AndroidExternalStorageAdapter;
})();
var getAdapter = function () {
if (isBrowser) {
return new LocalStorageAdapter();
} else if (isIos) {
return new IosKeychainAdapter();
} else if (isAndroid) {
return new AndroidExternalStorageAdapter();
}
};
return {
set: function set() {
var namespace = arguments[0] === undefined ? "" : arguments[0];
var key = arguments[1] === undefined ? null : arguments[1];
var val = arguments[2] === undefined ? "" : arguments[2];
var deferred = $q.defer();
var adapter = getAdapter();
adapter.write(namespace, key, val).then(function () {
deferred.resolve(val);
})["catch"](function (err) {
// if not browser, write to local storage
// otherwise reject
if (!isBrowser) {
var localStorageAdapter = new LocalStorageAdapter();
return localStorageAdapter.write(namespace, key, val);
} else {
deferred.reject(err);
}
});
return deferred.promise;
},
get: function get() {
var namespace = arguments[0] === undefined ? "" : arguments[0];
var key = arguments[1] === undefined ? null : arguments[1];
var fallback = arguments[2] === undefined ? "" : arguments[2];
var deferred = $q.defer();
var adapter = getAdapter();
adapter.read(namespace, key).then(function (val) {
if (val) {
deferred.resolve(val);
} else {
deferred.resolve(fallback);
}
})["catch"](function () {
// always resolve with the fallback value
deferred.resolve(fallback);
});
return deferred.promise;
},
remove: function remove(namespace, key) {
var adapter = getAdapter();
return adapter.remove(namespace, key);
} };
};
$persist.$inject = ["$q", "$localStorage"];
angular.module("ng-persist").factory("$persist", $persist);
})();