You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
113 lines
3.1 KiB
JavaScript
113 lines
3.1 KiB
JavaScript
var STORAGE = null;
|
|
var VueSession = {
|
|
key: 'vue-session-key',
|
|
flash_key: 'vue-session-flash-key',
|
|
setAll: function(all){
|
|
STORAGE.setItem(VueSession.key,JSON.stringify(all));
|
|
}
|
|
}
|
|
|
|
VueSession.install = function(Vue, options) {
|
|
if(options && 'persist' in options && options.persist) STORAGE = window.localStorage;
|
|
else STORAGE = window.sessionStorage;
|
|
Vue.prototype.$session = {
|
|
flash: {
|
|
parent: function(){
|
|
return Vue.prototype.$session;
|
|
},
|
|
get: function(key){
|
|
var all = this.parent().getAll();
|
|
var all_flash = all[VueSession.flash_key] || {};
|
|
|
|
var flash_value = all_flash[key];
|
|
|
|
this.remove(key);
|
|
|
|
return flash_value;
|
|
},
|
|
set: function(key, value){
|
|
var all = this.parent().getAll();
|
|
var all_flash = all[VueSession.flash_key] || {};
|
|
|
|
all_flash[key] = value;
|
|
all[VueSession.flash_key] = all_flash;
|
|
|
|
VueSession.setAll(all);
|
|
},
|
|
remove: function(key){
|
|
var all = this.parent().getAll();
|
|
var all_flash = all[VueSession.flash_key] || {};
|
|
|
|
delete all_flash[key];
|
|
|
|
all[VueSession.flash_key] = all_flash;
|
|
VueSession.setAll(all);
|
|
}
|
|
},
|
|
getAll: function(){
|
|
var all = JSON.parse(STORAGE.getItem(VueSession.key));
|
|
return all || {};
|
|
},
|
|
set: function(key,value){
|
|
if(key == 'session-id') return false;
|
|
var all = this.getAll();
|
|
|
|
if(!('session-id' in all)){
|
|
this.start();
|
|
all = this.getAll();
|
|
}
|
|
|
|
all[key] = value;
|
|
|
|
VueSession.setAll(all);
|
|
},
|
|
get: function(key){
|
|
var all = this.getAll();
|
|
return all[key];
|
|
},
|
|
start: function(){
|
|
var all = this.getAll();
|
|
all['session-id'] = 'sess:'+Date.now();
|
|
|
|
VueSession.setAll(all);
|
|
},
|
|
renew: function(sessionId){
|
|
var all = this.getAll();
|
|
all['session-id'] = 'sess:' + sessionId;
|
|
VueSession.setAll(all);
|
|
},
|
|
exists: function(){
|
|
var all = this.getAll();
|
|
return 'session-id' in all;
|
|
},
|
|
has: function(key){
|
|
var all = this.getAll();
|
|
return key in all;
|
|
},
|
|
remove: function(key){
|
|
var all = this.getAll();
|
|
delete all[key];
|
|
|
|
VueSession.setAll(all);
|
|
},
|
|
clear: function(){
|
|
var all = this.getAll();
|
|
|
|
VueSession.setAll({'session-id': all['session-id']});
|
|
},
|
|
destroy: function(){
|
|
VueSession.setAll({});
|
|
},
|
|
id: function(){
|
|
return this.get('session-id');
|
|
}
|
|
}
|
|
};
|
|
|
|
if(typeof window !== 'undefined' && window.Vue){
|
|
window.VueSession = VueSession;
|
|
window.Vue.use(VueSession);
|
|
}
|
|
|
|
export default VueSession;
|