지난 릴리즈 후에 당분간 건드리지 않으려고 했는데 AngularJS 1.3.0이 나오면서 오류가 생기는 부분이 있어서 패치를 했다.(1.3.0이 이렇게 금방 나올 줄이야...)
일단 오류를 수정하기 전에 Karma 테스트를 정리해야 할 필요가 있었다. 테스트를 꽤 충실이 작성했는데 AngularJS의 새 버전이 나온 관계로 angular-summernote를 1.2.x와 1.3.x을 모두 테스트해야 했다. 새 버전을 쓰는 사람도 있지만, 기존의 1.2.x를 그대로 사용하는 사람도 당연히 있을 테니까... 어떻게 할까 고민하다가 Angular.js의 Karma 설정을 참고해서 공통부분과 의존성 부분을 따로 분리해서 버전별로 의존성을 관리해서 테스트가 동작하도록 만들었다.
일단 하나로 되어 있던 karma.conf.js
파일에서 공통 부분은 karma-shared.conf.js
로 분리하고 karma.conf.js
에서 karma-shared.conf.js
를 불러온 뒤 의존성 파일만 추가로 지정하는 방식을 취했다. 같은 방식으로 karma-angular-1-2.x.conf.js
를 만들어서 AngularJS 1.2.x에 대한 의존성을 갖게 만들자 Grunt 명령어만으로 두 가지 버전을 테스트할 수 있었다. 이제 1.3에 맞춰서 개발할 때마다 틈틈이 1.2.x도 한 번씩 확인해 보면 될 것 같다.(귀찮아서 아직 Travis CI에는 연결하지 않았다.)
이번에 발생한 오류는 error:isecdom Referencing a DOM node in Expression에 관련된 오류인데 보안 문제로 Angular 표현식에서 DOM을 반환하지 못하도록 변경된 부분 때문에 발생했다. summernote의 콜백과 angualr-summernote의 콜백을 연결해 주는 부분이 있는데 이때 summernote에 콜백을 실행하면서 DOM 객체는 인자로 전달하는 부분이 문제가 되었다.
원인은 파악했지만 어떻게 수정해야 할지가 좀 어려웠다. summernote 콜백에서 DOM을 사용해야 하니 넘겨주기는 해야 하는데 어떤 식으로 전달해 주는 것이 좋은지 몰라서 여러 가지를 시도하다가 사용자가 바인딩할 수 있도록 추가하고 이 바인딩 객체에 넘겨주는 방식을 취했다. 전에는 DOM 객체($editable
)가 필요한 콜백을 사용하는 경우 인자로 받았지만 0.3.0부터는 editable="bindingObject"
같은 식으로 지정해서 이 객체로 전달받게 된다. 구현하고 나서도 좋은 해결책인지 좀 고민되지만 일단 동작은 정상적으로 하므로 사용자가 피드백 주면 그때 다시 고민해 보기로.. ㅎ
수정내용 자체는 많지 않지만 AngularJS 1.3.0을 지원하는 버전이므로 v0.3.0으로 간만에 마이너 버전을 올려서 릴리즈했다.
Comments