티스토리 뷰
2015/09/15
현재, Summernote 최신 버전으로 업데이트 하면서, 변경된 점을 기록합니다.
버전업이 되면서 실제로는 이미지를 insert 하기 더 쉬워 졌다고 볼 수 있습니다.
Summernote 에디터를 초기화 한 후에 아래와 같이 코드를 작성하면, 에디터에 이미지가 쉽게 삽입이 됩니다.
insertImage Function에 이미지 Url을 인자값으로 가집니다.
$('#summernote').summernote("insertImage", image.url);
summernote 옵션 설정에서 onImageUpload 에서 바로 ajax를 통해 file 을 업로드하고, 이미지 url을 리턴 받아서 $('#summernote').summernote("insertImage", image.url); 를 사용하면 바로 적용할 수 있겠습니다.
하지만, 중요한 점은 에디터가 하나만 존재해야 한다는 점입니다.
저같은 경우 문제점이....한 화면에 다수의 서머노트(Summernote) 에디터를 필요로 했습니다.
그래서 위의 방법 처럼 insertImage 기능을 사용할 수 없었어요.
그래서 summernote.js 파일을 직접 뜯어서 분석하여(이미지 업로드 부분만..ㅎㅎ)
약간 수정한 후 아래의 코드 처럼 변경하였습니다.
기존 summernote. 코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | this.insertImages = function (layoutInfo, files) { var $editor = layoutInfo.editor(), $editable = layoutInfo.editable(), $holder = layoutInfo.holder(); var callbacks = $editable.data('callbacks'); var options = $editor.data('options'); // If onImageUpload options setted if (callbacks.onImageUpload) { bindCustomEvent($holder, callbacks, 'image.upload')(files); // else insert Image as dataURL } else { $.each(files, function (idx, file) { var filename = file.name; if (options.maximumImageFileSize && options.maximumImageFileSize < file.size) { bindCustomEvent($holder, callbacks, 'image.upload.error')(options.langInfo.image.maximumFileSizeError); } else { async.readFileAsDataURL(file).then(function (sDataURL) { modules.editor.insertImage($editable, sDataURL, filename); }).fail(function () { bindCustomEvent($holder, callbacks, 'image.upload.error')(options.langInfo.image.maximumFileSizeError); }); } }); } }; | cs |
변경된 summernote.js 코드
위 소스 callbacks.onImageUplaod의 true 부분에서
bindCustomEvent 부분을 아래와 같이 변경하였습니다.
1 2 | bindCustomEvent($holder, callbacks, 'image.upload')(files, modules, $editable); | cs |
이렇게 변경하면, summernote option 설정에서 인자값을 아래와 같이 두개 더 설정하시고 사용할 수 있습니다.
- summernote 초기화
1 2 3 4 5 6 | $('.summernote').summernote({ onImageUpload : function(files, modules, editable) { sendFile(files, modules, editable); }, lang : 'ko-KR' }); | cs |
- 이미지 업로드 Function
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | function sendFile(files, modules, editable) { for(var i=0; i < files.length; i++){ (function(i) { var data = new FormData(); data.append("uploadFile", files[i]); $.ajax({ data : data, type : "POST", url : "/imageUpload", success : function(data) { modules.editor.insertImage(editable, data.url, files[i].name); } }); })(i); } } | cs |
이렇게 하니, 다중 Summernote 사용 시에서 각자 Summernote에 이미지 업로드 후 입력이 가능해졌습니다.
버전업이 되면 더 편리하게 수정이 되겠지만^^ 일단은 당분간은 이렇게 사용해야겠네욥.
github에 comment를 달아야하나... 영어를 못해서 킁...(한국분이 메인이신것같긴하던데 ㅎㅎㅎㅎ)
summernote를 개발해주시는 분께 무한한 감사를 드리며, 이 글을 마칩니다.
'생활코딩 > JQUERY' 카테고리의 다른 글
Page Loading Icon JS/CSS (0) | 2017.05.18 |
---|
- Total
- Today
- Yesterday
- summernote
- learning javascript
- 브라우저 콘솔
- GO1104 LED
- @Access
- jsonify
- AngularJS
- telegram bot
- 초대장
- java
- 쿼리 로그
- offline.js
- RollingFileAppender
- jQuery 삽입
- AOP
- @Temporal
- Spring Boot
- Spring
- 자바스크립트
- 한성키보드
- log4jdbc
- static resources
- 정적 파일
- bootstrap
- 스프링 부트
- mybatipse
- WYSIWYG
- 오프라인 확인
- spring jpa
- Excel
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |