[텍스트큐브] 임시 자동저장이 너무 자주 되지 않게 하기

  텍스트큐브 1.10.10판을 기준으로 보면, 텍스트큐브에서 편집하는 글이 자동으로 저장되는 때는 다음과 같다.

  • 5분마다
  • 편집기에서 글쇠를 누르거나 마우스를 딸깍하고 나서 5초 뒤에

  5분(300초)마다 저장하는 것은 모든 편집기에 공통으로 적용되고 있는 것 같다. 텍스트큐브에서 쓰는 tinyMCE 편집기는 글쇠를 누르거나 마우스를 딸깍하면 5초 뒤에 onkeyup이나 onclick 이벤트로 자동저장하는 기능이 작동한다.

텍스트큐브에서 임시로 저장된 글을 꺼내기 (임시 저장본을 보시겠습니까?)
텍스트큐브에서 임시로 저장된 글을 꺼내기

  그런데 어느 때부터였는지는 몰라도 텍스트큐브의 자동저장 기능이 너무 자주 작동하고 있다. 글 내용이 바뀐 것이 없는데도, 아주 잠깐 동안에 화살표 글쇠를 누르거나 마우스를 딸깍하는 것으로도 자동으로 저장된 글이 남곤 한다. 글을 열고 아무런 일을 하지 않아도 5분마다 임시 저장된 글이 남는다.

  살펴 보니 텍스트큐브에 기록된 글과 새로 기록할 글을 견주어서 내용이 같으면 저장하지 않는 기능이 이미 있는데, 그 기능이 어긋나게 돌아가고 있었다.

/interface/owner/entry/edit/index.php에 보면 아래와 같은 내용을 담은 getData 함수가 있다.

self.getData = function (check) {
…(줄임)…
var latitudeValue = "";
try {
latitudeValue = jQuery('input[name=latitude]').val()
} catch(e) {}
if(latitudeValue == undefined) {
latitudeValue = null;
}
var longitudeValue = "";
try {
longitudeValue = jQuery('input[name=longitude]').val()
} catch(e) {}
if(longitudeValue == undefined) {
latitudeValue = null;
}
…(줄임)…
}

  편집기의 글 내용을 저장하는 일은 getData 함수와 같은 파일에 있는 saveentry 함수가 맡고 있다. saveentry 함수에는 getData 함수에서 저장할 글 내용을 받아서 이미 기록된 내용과 견주어 서로 같으면 저장하지 않고 거르는 기능이 있다.

  위에 보이는 getData 함수에서는 경도(longitude)와 위도(longitude) 값을 얻지 못했을 때에 latitudeValue와 longitudeValue에 null을 넣는다. 그러나 이미 저장한 글에서는 따로 지정하지 않은 경도와 위도 값을 부르면 빈 문자열("")로 나온다. 두 변수가 null 값인지 빈 문자열 값("")인지에 따라 getData 함수의 출력 결과가 달라져서 글 내용이 같은지를 거르는 기능이 잘 돌지 않고 같은 글을 자꾸 임시로 저장하고 있었다.

  이 문제는 아래처럼 경도와 위도 값을 얻지 못했을 때에 두 변수에 빈 문자열 값을 넣게 하여 풀 수 있다.

self.getData = function (check) {
…(줄임)…
var latitudeValue = "";
try {
latitudeValue = jQuery('input[name=latitude]').val()
} catch(e) {}
if(latitudeValue == undefined) {
latitudeValue = "";
}
var longitudeValue = "";
try {
longitudeValue = jQuery('input[name=longitude]').val()
} catch(e) {}
if(longitudeValue == undefined) {
longitudeValue = "";
}
…(줄임)…
}

  임시로 자동저장하는 기능을 맡은 saveDraft 함수에도 끼워 넣을 내용이 있다.

self.saveDraft = function () {
…(줄임)…
if (self.changeEditor != true && self.delay) {
…(줄임)…
return;
}
self.saveEntry();
…(줄임)…
}

  ↓

self.saveDraft = function () {
…(줄임)…
if (self.changeEditor != true && self.delay && self.getData(true) == self.savedData) {
…(줄임)…
return;
}
self.saveEntry();
…(줄임)…
}

  여기까지 고치면 tinyMCE 편집기의 커서가 그림을 그냥 오갈 때에 일어나는 자동저장까지 막을 수 있다.

2022/05/02 20:45 2022/05/02 20:45
글 걸기 주소 : 이 글에 다른 글을 걸 수 없습니다

덧글을 달아 주세요