@egjs/persist
Version:
Provide cache interface to handle persisted data among history navigation.
110 lines (90 loc) • 3.96 kB
JavaScript
/*
Copyright (c) 2017 NAVER Corp.
@egjs/persist project is licensed under the MIT license
@egjs/persist JavaScript library
@version 2.6.0
*/
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
typeof define === 'function' && define.amd ? define(factory) :
(global.eg = global.eg || {}, global.eg.Persist = factory());
}(this, (function () { 'use strict';
var win = typeof window !== "undefined" && window || {};
var console = win.console;
var document = win.document;
var history = win.history;
var location = win.location;
var navigator = win.navigator;
var parseFloat = win.parseFloat;
var performance = win.performance;
var localStorage = null;
var sessionStorage = null;
try {
localStorage = win.localStorage;
sessionStorage = win.sessionStorage;
} catch (e) {}
var CONST_PERSIST = "___persist___";
var navigation = performance && performance.navigation;
var TYPE_NAVIGATE = navigation && navigation.TYPE_NAVIGATE || 0;
var TYPE_RELOAD = navigation && navigation.TYPE_RELOAD || 1;
var TYPE_BACK_FORWARD = navigation && navigation.TYPE_BACK_FORWARD || 2;
var userAgent = navigator ? navigator.userAgent : "";
var IS_PERSIST_NEEDED = function () {
var isIOS = new RegExp("iPhone|iPad", "i").test(userAgent);
var isMacSafari = new RegExp("Mac", "i").test(userAgent) && !new RegExp("Chrome", "i").test(userAgent) && new RegExp("Apple", "i").test(userAgent);
var isAndroid = new RegExp("Android ", "i").test(userAgent);
var isWebview = new RegExp("wv; |inapp;", "i").test(userAgent);
var androidVersion = isAndroid ? parseFloat(new RegExp("(Android)\\s([\\d_\\.]+|\\d_0)", "i").exec(userAgent)[2]) : undefined;
return !(isIOS || isMacSafari || isAndroid && (androidVersion <= 4.3 && isWebview || androidVersion < 3));
}();
var userAgent$1 = navigator ? navigator.userAgent : "";
var isNeeded = function () {
var isIOS = new RegExp("iPhone|iPad", "i").test(userAgent$1);
var isMacSafari = new RegExp("Mac", "i").test(userAgent$1) && !new RegExp("Chrome", "i").test(userAgent$1) && new RegExp("Apple", "i").test(userAgent$1);
var isAndroid = new RegExp("Android ", "i").test(userAgent$1);
var isWebview = new RegExp("wv; |inapp;", "i").test(userAgent$1);
var androidVersion = isAndroid ? parseFloat(new RegExp("(Android)\\s([\\d_\\.]+|\\d_0)", "i").exec(userAgent$1)[2]) : undefined;
return !(isIOS || isMacSafari || isAndroid && (androidVersion <= 4.3 && isWebview || androidVersion < 3));
}(); // In case of IE8, TYPE_BACK_FORWARD is undefined.
function getUrl() {
return location ? location.href.split("#")[0] : "";
}
function getStorageKey(name) {
return name + CONST_PERSIST;
}
/* eslint-disable */
var persistMigrate = (function (eg) {
if (!eg || !eg.Persist) {
return;
}
var GLOBAL_KEY = "KEY___persist___";
var oldConstructor = eg.Persist.prototype;
var isNeeded$$1 = eg.Persist.isNeeded;
var StorageManager = eg.Persist.StorageManager;
eg.Persist = function Persist(key, value) {
var urlKey = getStorageKey(getUrl()); // when called as plain method
if (!(this instanceof Persist)) {
if (arguments.length === 0) {
return StorageManager.getStateByKey(urlKey, GLOBAL_KEY);
}
if (arguments.length === 1 && typeof key !== "string") {
var value_ = key;
StorageManager.setStateByKey(urlKey, GLOBAL_KEY, value_);
return undefined;
}
if (arguments.length === 2) {
StorageManager.setStateByKey(urlKey, key, value);
}
return StorageManager.getStateByKey(urlKey, key);
} // when called as constructer
this.key = key;
return undefined;
};
eg.Persist.isNeeded = isNeeded$$1;
eg.Persist.prototype = oldConstructor;
return eg.Persist;
})(win.eg);
/* eslint-enable */
return persistMigrate;
})));
//# sourceMappingURL=persist-migrate.js.map