// 히스토리(history)
let h = {
p:null,
v:null,
hs:[],
i:0,
limit:40,
'save':function(){
console.log('h.save');
this._push(this.v.toJson(this.v.elements[0]));
},
'_push':function(str){
if(this.i != this.hs.length-1){
this.hs = this.hs.splice(0,this.i+1);
}
this.hs.push(str);
if(this.hs.length > this.limit){
this.hs = this.hs.splice(1);
}
this.i = this.hs.length-1;
},
'reset':function(){
console.log('h.reset');
this.i=-1;
this.hs=[];
this.save();
},
'undo':function(){
console.log('h.undo',this.i);
if((this.i-1)<0){ console.warn('undo',(this.i-1)); return false;}
// console.log(this.hs[this.i]);
this.i--;
this.v.replaceJson(this.v.elements[0],this.hs[this.i]);
this.v.$forceUpdate();
this.v.selectedEl = null
},
'redo':function(){
console.log('h.redo',this.i);
if((this.i+1)>=this.hs.length){ console.warn('redo',(this.i+1));return false;}
// console.log(this.hs[this.i]);
this.i++;
this.v.replaceJson(this.v.elements[0],this.hs[this.i]);
this.v.$forceUpdate();
this.v.selectedEl = null
},
};
exec:function(){
let args = [...arguments];
let cmd = args.shift();
if(!this[cmd] && typeof this[cmd] !='function' ){console.error(cmd+'라는 메소드가 존재하지 않음');}
let r = this[cmd].apply(this,args);
if(cmd =='load' || cmd =='reset'){
h.reset();
}else if(cmd =='toHtml' || cmd =='toJson' || cmd=='selectEl' || cmd=='createEl'){
h.reset();
}else{
h.save();
}
return r;
}
----=-------
xxx.aaa(1,2,3)
->
xxx.exec('aaa',1,2,3);
처럼 바꿔 호출하면 동작(cmd)에 따라서 h.save() 등으로 히스토리 저장을 함.