smart_editor 0.0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/MIT-LICENSE +20 -0
- data/README.rdoc +3 -0
- data/Rakefile +40 -0
- data/app/assets/javascripts/smart_editor/application.js +15 -0
- data/app/assets/javascripts/smart_editor/editor_images.js +1 -0
- data/app/assets/stylesheets/smart_editor/application.css +13 -0
- data/app/assets/stylesheets/smart_editor/editor_images.css +4 -0
- data/app/controllers/smart_editor/application_controller.rb +4 -0
- data/app/controllers/smart_editor/editor_images_controller.rb +41 -0
- data/app/helpers/smart_editor/application_helper.rb +4 -0
- data/app/helpers/smart_editor/editor_images_helper.rb +4 -0
- data/app/models/smart_editor/editor_image.rb +7 -0
- data/app/uploaders/file_uploader.rb +55 -0
- data/app/views/layouts/smart_editor/application.html.erb +14 -0
- data/app/views/smart_editor/editor_images/index.html.erb +4 -0
- data/config/routes.rb +7 -0
- data/db/migrate/20130101074444_create_smart_editor_editor_images.rb +10 -0
- data/lib/generators/smart_editor/smart_editor_generator.rb +18 -0
- data/lib/generators/smart_editor/templates/public/smart_editor/SmartEditor2Skin.html +635 -0
- data/lib/generators/smart_editor/templates/public/smart_editor/popup/quick_photo/FileUploader.php +22 -0
- data/lib/generators/smart_editor/templates/public/smart_editor/popup/quick_photo/FileUploader_html5.php +25 -0
- data/lib/generators/smart_editor/templates/public/smart_editor/popup/quick_photo/Photo_Quick_UploadPopup.html +100 -0
- data/lib/generators/smart_editor/templates/public/smart_editor/popup/quick_photo/QuickPhotoPopup.js +675 -0
- data/lib/generators/smart_editor/templates/public/smart_editor/popup/quick_photo/callback.html +32 -0
- data/lib/generators/smart_editor/templates/public/smart_editor/popup/quick_photo/jindo.min.js +12686 -0
- data/lib/generators/smart_editor/templates/public/smart_editor/popup/quick_photo/jindo_fileUpload.js +390 -0
- data/lib/generators/smart_editor/templates/public/smart_editor/smart_editor2_inputarea.html +9 -0
- data/lib/generators/smart_editor/templates/public/smart_editor/smart_editor2_inputarea_ie8.html +10 -0
- data/lib/smart_editor/class_methods.rb +10 -0
- data/lib/smart_editor/engine.rb +5 -0
- data/lib/smart_editor/form_builder.rb +11 -0
- data/lib/smart_editor/version.rb +3 -0
- data/lib/smart_editor.rb +18 -0
- data/lib/tasks/smart_editor_tasks.rake +4 -0
- data/test/dummy/README.rdoc +261 -0
- data/test/dummy/Rakefile +7 -0
- data/test/dummy/app/assets/javascripts/application.js +16 -0
- data/test/dummy/app/assets/javascripts/posts.js +2 -0
- data/test/dummy/app/assets/stylesheets/application.css +13 -0
- data/test/dummy/app/assets/stylesheets/posts.css +4 -0
- data/test/dummy/app/assets/stylesheets/scaffold.css +56 -0
- data/test/dummy/app/controllers/application_controller.rb +3 -0
- data/test/dummy/app/controllers/posts_controller.rb +85 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/helpers/posts_helper.rb +2 -0
- data/test/dummy/app/models/post.rb +4 -0
- data/test/dummy/app/views/layouts/application.html.erb +14 -0
- data/test/dummy/app/views/posts/_form.html.erb +30 -0
- data/test/dummy/app/views/posts/edit.html.erb +6 -0
- data/test/dummy/app/views/posts/index.html.erb +27 -0
- data/test/dummy/app/views/posts/new.html.erb +5 -0
- data/test/dummy/app/views/posts/show.html.erb +20 -0
- data/test/dummy/config/application.rb +59 -0
- data/test/dummy/config/boot.rb +10 -0
- data/test/dummy/config/database.yml +25 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +37 -0
- data/test/dummy/config/environments/production.rb +67 -0
- data/test/dummy/config/environments/test.rb +37 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/inflections.rb +15 -0
- data/test/dummy/config/initializers/mime_types.rb +5 -0
- data/test/dummy/config/initializers/secret_token.rb +7 -0
- data/test/dummy/config/initializers/session_store.rb +8 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +5 -0
- data/test/dummy/config/routes.rb +7 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/db/development.sqlite3 +0 -0
- data/test/dummy/db/migrate/20130103085542_create_posts.rb +11 -0
- data/test/dummy/db/migrate/20130103090021_create_smart_editor_editor_images.smart_editor.rb +11 -0
- data/test/dummy/db/schema.rb +32 -0
- data/test/dummy/log/development.log +713 -0
- data/test/dummy/public/404.html +26 -0
- data/test/dummy/public/422.html +26 -0
- data/test/dummy/public/500.html +25 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/dummy/public/smart_editor/SmartEditor2Skin.html +635 -0
- data/test/dummy/public/smart_editor/popup/quick_photo/FileUploader.php +22 -0
- data/test/dummy/public/smart_editor/popup/quick_photo/FileUploader_html5.php +25 -0
- data/test/dummy/public/smart_editor/popup/quick_photo/Photo_Quick_UploadPopup.html +100 -0
- data/test/dummy/public/smart_editor/popup/quick_photo/QuickPhotoPopup.js +675 -0
- data/test/dummy/public/smart_editor/popup/quick_photo/callback.html +32 -0
- data/test/dummy/public/smart_editor/popup/quick_photo/jindo.min.js +12686 -0
- data/test/dummy/public/smart_editor/popup/quick_photo/jindo_fileUpload.js +390 -0
- data/test/dummy/public/smart_editor/smart_editor2_inputarea.html +9 -0
- data/test/dummy/public/smart_editor/smart_editor2_inputarea_ie8.html +10 -0
- data/test/dummy/script/rails +6 -0
- data/test/dummy/test/fixtures/posts.yml +11 -0
- data/test/dummy/test/functional/posts_controller_test.rb +49 -0
- data/test/dummy/test/unit/helpers/posts_helper_test.rb +4 -0
- data/test/dummy/test/unit/post_test.rb +7 -0
- data/test/dummy/tmp/cache/assets/C39/A20/sprockets%2Fd75302feb7958c52568020a888775667 +0 -0
- data/test/dummy/tmp/cache/assets/C8B/9F0/sprockets%2F42090f88c5061f72460d7c83a9bc8990 +0 -0
- data/test/dummy/tmp/cache/assets/C8E/A60/sprockets%2F74b1945f4d4a322ab567f73798c32838 +0 -0
- data/test/dummy/tmp/cache/assets/CD4/040/sprockets%2F7c241e3470f7210ab843c109c9d68a4b +0 -0
- data/test/dummy/tmp/cache/assets/CE3/740/sprockets%2F200278c67b4dde839345d7b018fed561 +0 -0
- data/test/dummy/tmp/cache/assets/CEE/680/sprockets%2F6d653ad72aed952816dd79e63c761417 +0 -0
- data/test/dummy/tmp/cache/assets/D12/CA0/sprockets%2Fcd507925f6bb1f62170d028ca668ad98 +0 -0
- data/test/dummy/tmp/cache/assets/D13/8A0/sprockets%2Fec89fa303e9609b18f50b6de2831433e +0 -0
- data/test/dummy/tmp/cache/assets/D6F/A80/sprockets%2F8893ca0d5d16eb3d85c0964bdbbe3381 +0 -0
- data/test/dummy/tmp/cache/assets/D86/AF0/sprockets%2Fcfa5f1244012fcd263cee551afe412b2 +0 -0
- data/test/dummy/tmp/cache/assets/D92/5A0/sprockets%2Fb0e45a13b900ecbf7011b78bdff2595e +0 -0
- data/test/dummy/tmp/cache/assets/D9D/950/sprockets%2F65093fff17b1aa3bed7e0dda53563b79 +0 -0
- data/test/dummy/tmp/cache/assets/DF9/8C0/sprockets%2Fc27a71cbee6a5dffdc2534b267b2fa66 +0 -0
- data/test/dummy/tmp/cache/assets/E54/F60/sprockets%2Ff1bba5cc065ebbb83addfbba59f82059 +0 -0
- data/test/fixtures/smart_editor/editor_images.yml +11 -0
- data/test/functional/smart_editor/editor_images_controller_test.rb +9 -0
- data/test/integration/navigation_test.rb +10 -0
- data/test/smart_editor_test.rb +7 -0
- data/test/test_helper.rb +15 -0
- data/test/unit/helpers/smart_editor/editor_images_helper_test.rb +6 -0
- data/test/unit/smart_editor/editor_image_test.rb +9 -0
- data/vendor/assets/images/smart_editor/bg_b1.png +0 -0
- data/vendor/assets/images/smart_editor/bg_find_h3.gif +0 -0
- data/vendor/assets/images/smart_editor/bg_line1.gif +0 -0
- data/vendor/assets/images/smart_editor/bg_quote2.gif +0 -0
- data/vendor/assets/images/smart_editor/bg_set.gif +0 -0
- data/vendor/assets/images/smart_editor/bg_tool2.gif +0 -0
- data/vendor/assets/images/smart_editor/btn_set.png +0 -0
- data/vendor/assets/images/smart_editor/bx_set_110302.gif +0 -0
- data/vendor/assets/images/smart_editor/editor_guideline_698.gif +0 -0
- data/vendor/assets/images/smart_editor/editor_guideline_890.gif +0 -0
- data/vendor/assets/images/smart_editor/icon_set.gif +0 -0
- data/vendor/assets/images/smart_editor/photoQuickPopup/bg_drag_image.png +0 -0
- data/vendor/assets/images/smart_editor/photoQuickPopup/btn_cancel.png +0 -0
- data/vendor/assets/images/smart_editor/photoQuickPopup/btn_confirm.png +0 -0
- data/vendor/assets/images/smart_editor/photoQuickPopup/btn_confirm2.png +0 -0
- data/vendor/assets/images/smart_editor/photoQuickPopup/btn_del.png +0 -0
- data/vendor/assets/images/smart_editor/photoQuickPopup/btn_find.png +0 -0
- data/vendor/assets/images/smart_editor/text_tool_set.png +0 -0
- data/vendor/assets/images/smart_editor/text_tool_set2.png +0 -0
- data/vendor/assets/javascripts/smart_editor/HuskyEZCreator.js +133 -0
- data/vendor/assets/javascripts/smart_editor/SE2B_Configuration.js +77 -0
- data/vendor/assets/javascripts/smart_editor/SE2BasicCreator.js +85 -0
- data/vendor/assets/javascripts/smart_editor/hp_SE2M_AttachQuickPhoto.js +106 -0
- data/vendor/assets/javascripts/smart_editor/jindo.min.js +12699 -0
- data/vendor/assets/javascripts/smart_editor/jindo_component.js +279 -0
- data/vendor/assets/javascripts/smart_editor/loader-min.js +120 -0
- data/vendor/assets/javascripts/smart_editor.js +21 -0
- data/vendor/assets/stylesheets/smart_editor/smart_editor2.css +262 -0
- data/vendor/assets/stylesheets/smart_editor/smart_editor2_in.css +20 -0
- data/vendor/assets/stylesheets/smart_editor/smart_editor2_items.css +454 -0
- data/vendor/assets/stylesheets/smart_editor/smart_editor2_out.css +24 -0
- metadata +331 -0
data/lib/generators/smart_editor/templates/public/smart_editor/popup/quick_photo/QuickPhotoPopup.js
ADDED
|
@@ -0,0 +1,675 @@
|
|
|
1
|
+
//변수 선언 및 초기화
|
|
2
|
+
var nImageInfoCnt = 0;
|
|
3
|
+
var htImageInfo = []; //image file정보 저장
|
|
4
|
+
var aResult = [];
|
|
5
|
+
|
|
6
|
+
var rFilter = /^(image\/bmp|image\/gif|image\/jpg|image\/jpeg|image\/png)$/i;
|
|
7
|
+
var rFilter2 = /^(bmp|gif|jpg|jpeg|png)$/i;
|
|
8
|
+
var nTotalSize = 0;
|
|
9
|
+
var nMaxImageSize = 10*1024*1024;
|
|
10
|
+
var nMaxTotalImageSize = 50*1024*1024;
|
|
11
|
+
var nMaxImageCount = 10;
|
|
12
|
+
var nImageFileCount = 0;
|
|
13
|
+
var bSupportDragAndDropAPI = false;
|
|
14
|
+
var oFileUploader;
|
|
15
|
+
var bAttachEvent = false;
|
|
16
|
+
|
|
17
|
+
//마크업에 따른 할당
|
|
18
|
+
var elContent= $("pop_content");
|
|
19
|
+
var elDropArea = jindo.$$.getSingle(".drag_area",elContent);
|
|
20
|
+
var elDropAreaUL = jindo.$$.getSingle(".lst_type",elContent);
|
|
21
|
+
var elCountTxtTxt = jindo.$$.getSingle("#imageCountTxt",elContent);
|
|
22
|
+
var elTotalSizeTxt = jindo.$$.getSingle("#totalSizeTxt",elContent);
|
|
23
|
+
var elTextGuide = $("guide_text");
|
|
24
|
+
var welUploadInputBox = $Element("uploadInputBox");
|
|
25
|
+
var oNavigator = jindo.$Agent().navigator();
|
|
26
|
+
|
|
27
|
+
//마크업-공통
|
|
28
|
+
var welBtnConfirm = $Element("btn_confirm"); //확인 버튼
|
|
29
|
+
var welBtnCancel= $Element("btn_cancel"); //취소 버튼
|
|
30
|
+
|
|
31
|
+
//진도로 랩핑된 element
|
|
32
|
+
var welTextGuide = $Element(elTextGuide);
|
|
33
|
+
var welDropArea = $Element(elDropArea);
|
|
34
|
+
var welDropAreaUL = $Element(elDropAreaUL);
|
|
35
|
+
var fnUploadImage = null;
|
|
36
|
+
|
|
37
|
+
//File API 지원 여부로 결정
|
|
38
|
+
function checkDragAndDropAPI(){
|
|
39
|
+
try{
|
|
40
|
+
if( !oNavigator.ie ){
|
|
41
|
+
if(!!oNavigator.safari && oNavigator.version <= 5){
|
|
42
|
+
bSupportDragAndDropAPI = false;
|
|
43
|
+
}else{
|
|
44
|
+
bSupportDragAndDropAPI = true;
|
|
45
|
+
}
|
|
46
|
+
} else {
|
|
47
|
+
bSupportDragAndDropAPI = false;
|
|
48
|
+
}
|
|
49
|
+
}catch(e){
|
|
50
|
+
bSupportDragAndDropAPI = false;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
//--------------- html5 미지원 브라우저에서 (IE9 이하) ---------------
|
|
55
|
+
/**
|
|
56
|
+
* 이미지를 첨부 후 활성화된 버튼 상태
|
|
57
|
+
*/
|
|
58
|
+
function goStartMode(){
|
|
59
|
+
var sSrc = welBtnConfirm.attr("src")|| "";
|
|
60
|
+
if(sSrc.indexOf("btn_confirm2.png") < 0 ){
|
|
61
|
+
welBtnConfirm.attr("src","/assets/smart_editor/photoQuickPopup/btn_confirm2.png");
|
|
62
|
+
fnUploadImage.attach(welBtnConfirm.$value(), "click");
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* 이미지를 첨부 전 비활성화된 버튼 상태
|
|
67
|
+
* @return
|
|
68
|
+
*/
|
|
69
|
+
function goReadyMode(){
|
|
70
|
+
var sSrc = welBtnConfirm.attr("src")|| "";
|
|
71
|
+
if(sSrc.indexOf("btn_confirm2.png") >= 0 ){
|
|
72
|
+
fnUploadImage.detach(welBtnConfirm.$value(), "click");
|
|
73
|
+
welBtnConfirm.attr("src","/assets/smart_editor/photoQuickPopup/btn_confirm.png");
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* 일반 업로드
|
|
79
|
+
* @desc oFileUploader의 upload함수를 호출함.
|
|
80
|
+
function generalUpload(){
|
|
81
|
+
oFileUploader.upload();
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* 이미지 첨부 전 안내 텍스트가 나오는 배경으로 '설정'하는 함수.
|
|
86
|
+
* @return
|
|
87
|
+
*/
|
|
88
|
+
function readyModeBG (){
|
|
89
|
+
var sClass = welTextGuide.className();
|
|
90
|
+
if(sClass.indexOf('nobg') >= 0){
|
|
91
|
+
welTextGuide.removeClass('nobg');
|
|
92
|
+
welTextGuide.className('bg');
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* 이미지 첨부 전 안내 텍스트가 나오는 배경을 '제거'하는 함수.
|
|
98
|
+
* @return
|
|
99
|
+
*/
|
|
100
|
+
function startModeBG (){
|
|
101
|
+
var sClass = welTextGuide.className();
|
|
102
|
+
if(sClass.indexOf('nobg') < 0){
|
|
103
|
+
welTextGuide.removeClass('bg');
|
|
104
|
+
welTextGuide.className('nobg');
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
//--------------------- html5 지원되는 브라우저에서 사용하는 함수 --------------------------
|
|
109
|
+
/**
|
|
110
|
+
* 팝업에 노출될 업로드 예정 사진의 수.
|
|
111
|
+
* @param {Object} nCount 현재 업로드 예정인 사진 장수
|
|
112
|
+
* @param {Object} nVariable 삭제되는 수
|
|
113
|
+
*/
|
|
114
|
+
function updateViewCount (nCount, nVariable){
|
|
115
|
+
var nCnt = nCount + nVariable;
|
|
116
|
+
elCountTxtTxt.innerHTML = nCnt +"장";
|
|
117
|
+
nImageFileCount = nCnt;
|
|
118
|
+
return nCnt;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* 팝업에 노출될 업로드될 사진 총 용량
|
|
123
|
+
*/
|
|
124
|
+
function updateViewTotalSize(){
|
|
125
|
+
var nViewTotalSize = Number(parseInt((nTotalSize || 0), 10) / (1024*1024));
|
|
126
|
+
elTotalSizeTxt.innerHTML = nViewTotalSize.toFixed(2) +"MB";
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* 이미지 전체 용량 재계산.
|
|
131
|
+
* @param {Object} sParentId
|
|
132
|
+
*/
|
|
133
|
+
function refreshTotalImageSize(sParentId){
|
|
134
|
+
var nDelImgSize = htImageInfo[sParentId].size;
|
|
135
|
+
if(nTotalSize - nDelImgSize > -1 ){
|
|
136
|
+
nTotalSize = nTotalSize - nDelImgSize;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* hash table에서 이미지 정보 초기화.
|
|
142
|
+
* @param {Object} sParentId
|
|
143
|
+
*/
|
|
144
|
+
function removeImageInfo (sParentId){
|
|
145
|
+
//삭제된 이미지의 공간을 초기화 한다.
|
|
146
|
+
htImageInfo[sParentId] = null;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* byte로 받은 이미지 용량을 화면에 표시를 위해 포맷팅
|
|
152
|
+
* @param {Object} nByte
|
|
153
|
+
*/
|
|
154
|
+
function setUnitString (nByte) {
|
|
155
|
+
var nImageSize;
|
|
156
|
+
var sUnit;
|
|
157
|
+
|
|
158
|
+
if(nByte < 0 ){
|
|
159
|
+
nByte = 0;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
if( nByte < 1024) {
|
|
163
|
+
nImageSize = Number(nByte);
|
|
164
|
+
sUnit = 'B';
|
|
165
|
+
return nImageSize + sUnit;
|
|
166
|
+
} else if( nByte > (1024*1024)) {
|
|
167
|
+
nImageSize = Number(parseInt((nByte || 0), 10) / (1024*1024));
|
|
168
|
+
sUnit = 'MB';
|
|
169
|
+
return nImageSize.toFixed(2) + sUnit;
|
|
170
|
+
} else {
|
|
171
|
+
nImageSize = Number(parseInt((nByte || 0), 10) / 1024);
|
|
172
|
+
sUnit = 'KB';
|
|
173
|
+
return nImageSize.toFixed(0) + sUnit;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* 화면 목록에 적당하게 이름을 잘라서 표시.
|
|
179
|
+
* @param {Object} sName 파일명
|
|
180
|
+
* @param {Object} nMaxLng 최대 길이
|
|
181
|
+
*/
|
|
182
|
+
function cuttingNameByLength (sName, nMaxLng) {
|
|
183
|
+
var sTemp, nIndex;
|
|
184
|
+
if(sName.length > nMaxLng){
|
|
185
|
+
nIndex = sName.indexOf(".");
|
|
186
|
+
sTemp = sName.substring(0,nMaxLng) + "..." + sName.substring(nIndex,sName.length) ;
|
|
187
|
+
} else {
|
|
188
|
+
sTemp = sName;
|
|
189
|
+
}
|
|
190
|
+
return sTemp;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* Total Image Size를 체크해서 추가로 이미지를 넣을지 말지를 결정함.
|
|
195
|
+
* @param {Object} nByte
|
|
196
|
+
*/
|
|
197
|
+
function checkTotalImageSize(nByte){
|
|
198
|
+
if( nTotalSize + nByte < nMaxTotalImageSize){
|
|
199
|
+
nTotalSize = nTotalSize + nByte;
|
|
200
|
+
return false;
|
|
201
|
+
} else {
|
|
202
|
+
return true;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
// 이벤트 핸들러 할당
|
|
207
|
+
function dragEnter(ev) {
|
|
208
|
+
ev.stopPropagation();
|
|
209
|
+
ev.preventDefault();
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
function dragExit(ev) {
|
|
213
|
+
ev.stopPropagation();
|
|
214
|
+
ev.preventDefault();
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
function dragOver(ev) {
|
|
218
|
+
ev.stopPropagation();
|
|
219
|
+
ev.preventDefault();
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
/**
|
|
223
|
+
* 드랍 영역에 사진을 떨구는 순간 발생하는 이벤트
|
|
224
|
+
* @param {Object} ev
|
|
225
|
+
*/
|
|
226
|
+
function drop(ev) {
|
|
227
|
+
ev.stopPropagation();
|
|
228
|
+
ev.preventDefault();
|
|
229
|
+
|
|
230
|
+
if (nImageFileCount >= 10){
|
|
231
|
+
alert("최대 10장까지만 등록할 수 있습니다.");
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
if(typeof ev.dataTransfer.files == 'undefined'){
|
|
236
|
+
alert("HTML5 지원이 정상적으로 이루어지지 않는 브라우저입니다.");
|
|
237
|
+
}else{
|
|
238
|
+
//변수 선언
|
|
239
|
+
var wel,
|
|
240
|
+
files,
|
|
241
|
+
nCount,
|
|
242
|
+
sListTag = '';
|
|
243
|
+
|
|
244
|
+
//초기화
|
|
245
|
+
files = ev.dataTransfer.files;
|
|
246
|
+
nCount = files.length;
|
|
247
|
+
|
|
248
|
+
if (!!files && nCount === 0){
|
|
249
|
+
//파일이 아닌, 웹페이지에서 이미지를 드래서 놓는 경우.
|
|
250
|
+
alert("정상적인 첨부방식이 아닙니다.");
|
|
251
|
+
return ;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
for (var i = 0, j = nImageFileCount ; i < nCount ; i++){
|
|
255
|
+
if (!rFilter.test(files[i].type)) {
|
|
256
|
+
alert("이미지파일 (jpg,gif,png,bmp)만 업로드 가능합니다.");
|
|
257
|
+
} else if(files[i].size > nMaxImageSize){
|
|
258
|
+
alert("이미지 용량이 10MB를 초과하여 등록할 수 없습니다.");
|
|
259
|
+
} else {
|
|
260
|
+
//제한된 수만 업로드 가능.
|
|
261
|
+
if ( j < nMaxImageCount ){
|
|
262
|
+
sListTag += addImage(files[i]);
|
|
263
|
+
|
|
264
|
+
//다음 사진을위한 셋팅
|
|
265
|
+
j = j+1;
|
|
266
|
+
nImageInfoCnt = nImageInfoCnt+1;
|
|
267
|
+
} else {
|
|
268
|
+
alert("최대 10장까지만 등록할 수 있습니다.");
|
|
269
|
+
break;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
if(j > 0){
|
|
274
|
+
//배경 이미지 변경
|
|
275
|
+
startModeBG();
|
|
276
|
+
if ( sListTag.length > 1){
|
|
277
|
+
welDropAreaUL.prependHTML(sListTag);
|
|
278
|
+
}
|
|
279
|
+
//이미지 총사이즈 view update
|
|
280
|
+
updateViewTotalSize();
|
|
281
|
+
//이미치 총 수 view update
|
|
282
|
+
nImageFileCount = j;
|
|
283
|
+
updateViewCount(nImageFileCount, 0);
|
|
284
|
+
// 저장 버튼 활성화
|
|
285
|
+
goStartMode();
|
|
286
|
+
}else{
|
|
287
|
+
readyModeBG();
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
/**
|
|
293
|
+
* 이미지를 추가하기 위해서 file을 저장하고, 목록에 보여주기 위해서 string을 만드는 함수.
|
|
294
|
+
* @param ofile 한개의 이미지 파일
|
|
295
|
+
* @return
|
|
296
|
+
*/
|
|
297
|
+
function addImage(ofile){
|
|
298
|
+
//파일 사이즈
|
|
299
|
+
var ofile = ofile,
|
|
300
|
+
sFileSize = 0,
|
|
301
|
+
sFileName = "",
|
|
302
|
+
sLiTag = "",
|
|
303
|
+
bExceedLimitTotalSize = false,
|
|
304
|
+
aFileList = [];
|
|
305
|
+
|
|
306
|
+
sFileSize = setUnitString(ofile.size);
|
|
307
|
+
sFileName = cuttingNameByLength(ofile.name, 15);
|
|
308
|
+
bExceedLimitTotalSize = checkTotalImageSize(ofile.size);
|
|
309
|
+
|
|
310
|
+
if( !!bExceedLimitTotalSize ){
|
|
311
|
+
alert("전체 이미지 용량이 50MB를 초과하여 등록할 수 없습니다. \n\n (파일명 : "+sFileName+", 사이즈 : "+sFileSize+")");
|
|
312
|
+
} else {
|
|
313
|
+
//이미지 정보 저장
|
|
314
|
+
htImageInfo['img'+nImageInfoCnt] = ofile;
|
|
315
|
+
|
|
316
|
+
//List 마크업 생성하기
|
|
317
|
+
aFileList.push(' <li id="img'+nImageInfoCnt+'" class="imgLi"><span>'+ sFileName +'</span>');
|
|
318
|
+
aFileList.push(' <em>'+ sFileSize +'</em>');
|
|
319
|
+
aFileList.push(' <a onclick="delImage(\'img'+nImageInfoCnt+'\')"><img class="del_button" src="/assets/smart_editor/photoQuickPopup/btn_del.png" width="14" height="13" alt="첨부 사진 삭제"></a>');
|
|
320
|
+
aFileList.push(' </li> ');
|
|
321
|
+
|
|
322
|
+
sLiTag = aFileList.join(" ");
|
|
323
|
+
aFileList = [];
|
|
324
|
+
}
|
|
325
|
+
return sLiTag;
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
/**
|
|
329
|
+
* HTML5 DragAndDrop으로 사진을 추가하고, 확인버튼을 누른 경우에 동작한다.
|
|
330
|
+
* @return
|
|
331
|
+
*/
|
|
332
|
+
function html5Upload() {
|
|
333
|
+
var tempFile,
|
|
334
|
+
sUploadURL;
|
|
335
|
+
|
|
336
|
+
sUploadURL = '/smart_editor/editor_images/create_for_html5'; //upload URL
|
|
337
|
+
|
|
338
|
+
//파일을 하나씩 보내고, 결과를 받음.
|
|
339
|
+
for(var j=0, k=0; j < nImageInfoCnt; j++) {
|
|
340
|
+
tempFile = htImageInfo['img'+j];
|
|
341
|
+
try{
|
|
342
|
+
if(!!tempFile){
|
|
343
|
+
//Ajax통신하는 부분. 파일과 업로더할 url을 전달한다.
|
|
344
|
+
callAjaxForHTML5(tempFile,sUploadURL);
|
|
345
|
+
k += 1;
|
|
346
|
+
}
|
|
347
|
+
}catch(e){}
|
|
348
|
+
tempFile = null;
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
function callAjaxForHTML5 (tempFile, sUploadURL){
|
|
353
|
+
var oAjax = jindo.$Ajax(sUploadURL, {
|
|
354
|
+
type: 'xhr',
|
|
355
|
+
method : "post",
|
|
356
|
+
onload : function(res){ // 요청이 완료되면 실행될 콜백 함수
|
|
357
|
+
if (res.readyState() == 4) {
|
|
358
|
+
//성공 시에 responseText를 가지고 array로 만드는 부분.
|
|
359
|
+
makeArrayFromString(res._response.responseText);
|
|
360
|
+
}
|
|
361
|
+
},
|
|
362
|
+
timeout : 3,
|
|
363
|
+
onerror : jindo.$Fn(onAjaxError, this).bind()
|
|
364
|
+
});
|
|
365
|
+
oAjax.header("Content-Type","multipart");
|
|
366
|
+
oAjax.header("file-name",encodeURIComponent(tempFile.name));
|
|
367
|
+
oAjax.header("file-size",tempFile.size);
|
|
368
|
+
oAjax.header("file-type",tempFile.type);
|
|
369
|
+
oAjax.request(tempFile);
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
function makeArrayFromString(sResString){
|
|
373
|
+
var aTemp = [],
|
|
374
|
+
aSubTemp = [],
|
|
375
|
+
htTemp = {}
|
|
376
|
+
aResultleng = 0;
|
|
377
|
+
|
|
378
|
+
try{
|
|
379
|
+
if(!sResString || sResString.indexOf("sFileURL") < 0){
|
|
380
|
+
return ;
|
|
381
|
+
}
|
|
382
|
+
aTemp = sResString.split("&");
|
|
383
|
+
for (var i = 0; i < aTemp.length ; i++){
|
|
384
|
+
if( !!aTemp[i] && aTemp[i] != "" && aTemp[i].indexOf("=") > 0){
|
|
385
|
+
aSubTemp = aTemp[i].split("=");
|
|
386
|
+
htTemp[aSubTemp[0]] = aSubTemp[1];
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
}catch(e){}
|
|
390
|
+
|
|
391
|
+
aResultleng = aResult.length;
|
|
392
|
+
aResult[aResultleng] = htTemp;
|
|
393
|
+
|
|
394
|
+
if(aResult.length == nImageFileCount){
|
|
395
|
+
setPhotoToEditor(aResult);
|
|
396
|
+
aResult = null;
|
|
397
|
+
window.close();
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
/**
|
|
402
|
+
* 사진 삭제 시에 호출되는 함수
|
|
403
|
+
* @param {Object} sParentId
|
|
404
|
+
*/
|
|
405
|
+
function delImage (sParentId){
|
|
406
|
+
var elLi = jindo.$$.getSingle("#"+sParentId);
|
|
407
|
+
|
|
408
|
+
refreshTotalImageSize(sParentId);
|
|
409
|
+
|
|
410
|
+
updateViewTotalSize();
|
|
411
|
+
updateViewCount(nImageFileCount,-1);
|
|
412
|
+
//사진 file array에서 정보 삭제.
|
|
413
|
+
removeImageInfo(sParentId);
|
|
414
|
+
//해당 li삭제
|
|
415
|
+
$Element(elLi).leave();
|
|
416
|
+
|
|
417
|
+
//마지막 이미지인경우.
|
|
418
|
+
if(nImageFileCount === 0){
|
|
419
|
+
readyModeBG();
|
|
420
|
+
//사진 추가 버튼 비활성화
|
|
421
|
+
goReadyMode();
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
// drop 영역 이벤트 다시 활성화.
|
|
425
|
+
if(!bAttachEvent){
|
|
426
|
+
addEvent();
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
/**
|
|
431
|
+
* 이벤트 할당
|
|
432
|
+
*/
|
|
433
|
+
function addEvent() {
|
|
434
|
+
bAttachEvent = true;
|
|
435
|
+
elDropArea.addEventListener("dragenter", dragEnter, false);
|
|
436
|
+
elDropArea.addEventListener("dragexit", dragExit, false);
|
|
437
|
+
elDropArea.addEventListener("dragover", dragOver, false);
|
|
438
|
+
elDropArea.addEventListener("drop", drop, false);
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
function removeEvent(){
|
|
442
|
+
bAttachEvent = false;
|
|
443
|
+
elDropArea.removeEventListener("dragenter", dragEnter, false);
|
|
444
|
+
elDropArea.removeEventListener("dragexit", dragExit, false);
|
|
445
|
+
elDropArea.removeEventListener("dragover", dragOver, false);
|
|
446
|
+
elDropArea.removeEventListener("drop", drop, false);
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
/**
|
|
450
|
+
* Ajax 통신 시 error가 발생할 때 처리하는 함수입니다.
|
|
451
|
+
* @return
|
|
452
|
+
*/
|
|
453
|
+
function onAjaxError (){
|
|
454
|
+
alert("사진 업로드 실패. 잠시후 다시 시도해 주세요."); //설치 가이드 안내 문구임. 실 서비스에서는 삭제.
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
/**
|
|
458
|
+
* 이미지 업로드 시작
|
|
459
|
+
* 확인 버튼 클릭하면 호출되는 msg
|
|
460
|
+
*/
|
|
461
|
+
function uploadImage (e){
|
|
462
|
+
if(!bSupportDragAndDropAPI){
|
|
463
|
+
generalUpload();
|
|
464
|
+
}else{
|
|
465
|
+
html5Upload();
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
/**
|
|
470
|
+
* jindo에 파일 업로드 사용.(iframe에 Form을 Submit하여 리프레시없이 파일을 업로드하는 컴포넌트)
|
|
471
|
+
*/
|
|
472
|
+
function callFileUploader (){
|
|
473
|
+
oFileUploader = new jindo.FileUploader(jindo.$("editor_image_file"),{
|
|
474
|
+
sUrl : '/smart_editor/editor_images/create_without_html5', //샘플 URL입니다.
|
|
475
|
+
sCallback : location.href.replace(/\/[^\/]*$/, '') + '/callback.html', //업로드 이후에 iframe이 redirect될 콜백페이지의 주소
|
|
476
|
+
sFiletype : "*.jpg;*.png;*.bmp;*.gif", //허용할 파일의 형식. ex) "*", "*.*", "*.jpg", 구분자(;)
|
|
477
|
+
sMsgNotAllowedExt : 'JPG, GIF, PNG, BMP 확장자만 가능합니다', //허용할 파일의 형식이 아닌경우에 띄워주는 경고창의 문구
|
|
478
|
+
bAutoUpload : true, //파일이 선택됨과 동시에 자동으로 업로드를 수행할지 여부 (upload 메소드 수행)
|
|
479
|
+
bAutoReset : true // 업로드한 직후에 파일폼을 리셋 시킬지 여부 (reset 메소드 수행)
|
|
480
|
+
}).attach({
|
|
481
|
+
select : function(oCustomEvent) {
|
|
482
|
+
//파일 선택이 완료되었을 때 발생
|
|
483
|
+
// oCustomEvent (이벤트 객체) = {
|
|
484
|
+
// sValue (String) 선택된 File Input의 값
|
|
485
|
+
// bAllowed (Boolean) 선택된 파일의 형식이 허용되는 형식인지 여부
|
|
486
|
+
// sMsgNotAllowedExt (String) 허용되지 않는 파일 형식인 경우 띄워줄 경고메세지
|
|
487
|
+
// }
|
|
488
|
+
// 선택된 파일의 형식이 허용되는 경우만 처리
|
|
489
|
+
if(oCustomEvent.bAllowed === true){
|
|
490
|
+
goStartMode();
|
|
491
|
+
}else{
|
|
492
|
+
goReadyMode();
|
|
493
|
+
oFileUploader.reset();
|
|
494
|
+
}
|
|
495
|
+
// bAllowed 값이 false인 경우 경고문구와 함께 alert 수행
|
|
496
|
+
// oCustomEvent.stop(); 수행시 bAllowed 가 false이더라도 alert이 수행되지 않음
|
|
497
|
+
},
|
|
498
|
+
success : function(oCustomEvent) {
|
|
499
|
+
// alert("success");
|
|
500
|
+
// 업로드가 성공적으로 완료되었을 때 발생
|
|
501
|
+
// oCustomEvent(이벤트 객체) = {
|
|
502
|
+
// htResult (Object) 서버에서 전달해주는 결과 객체 (서버 설정에 따라 유동적으로 선택가능)
|
|
503
|
+
// }
|
|
504
|
+
var aResult = [];
|
|
505
|
+
aResult[0] = oCustomEvent.htResult;
|
|
506
|
+
setPhotoToEditor(aResult);
|
|
507
|
+
//버튼 비활성화
|
|
508
|
+
goReadyMode();
|
|
509
|
+
oFileUploader.reset();
|
|
510
|
+
//window.close();
|
|
511
|
+
},
|
|
512
|
+
error : function(oCustomEvent) {
|
|
513
|
+
//업로드가 실패했을 때 발생
|
|
514
|
+
//oCustomEvent(이벤트 객체) = {
|
|
515
|
+
// htResult : { (Object) 서버에서 전달해주는 결과 객체. 에러발생시 errstr 프로퍼티를 반드시 포함하도록 서버 응답을 설정하여야한다.
|
|
516
|
+
// errstr : (String) 에러메시지
|
|
517
|
+
// }
|
|
518
|
+
//}
|
|
519
|
+
//var wel = jindo.$Element("info");
|
|
520
|
+
//wel.html(oCustomEvent.htResult.errstr);
|
|
521
|
+
alert(oCustomEvent.htResult.errstr);
|
|
522
|
+
}
|
|
523
|
+
});
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
/**
|
|
527
|
+
* 페이지 닫기 버튼 클릭
|
|
528
|
+
*/
|
|
529
|
+
function closeWindow(){
|
|
530
|
+
if(bSupportDragAndDropAPI){
|
|
531
|
+
removeEvent();
|
|
532
|
+
}
|
|
533
|
+
// window.close();
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
window.onload = function(){
|
|
537
|
+
checkDragAndDropAPI();
|
|
538
|
+
|
|
539
|
+
|
|
540
|
+
if(bSupportDragAndDropAPI){
|
|
541
|
+
$Element("pop_container2").hide();
|
|
542
|
+
$Element("pop_container").show();
|
|
543
|
+
|
|
544
|
+
welTextGuide.removeClass("nobg");
|
|
545
|
+
welTextGuide.className("bg");
|
|
546
|
+
|
|
547
|
+
addEvent();
|
|
548
|
+
} else {
|
|
549
|
+
$Element("pop_container").hide();
|
|
550
|
+
$Element("pop_container2").show();
|
|
551
|
+
callFileUploader();
|
|
552
|
+
}
|
|
553
|
+
fnUploadImage = $Fn(uploadImage,this);
|
|
554
|
+
$Fn(closeWindow,this).attach(welBtnCancel.$value(), "click");
|
|
555
|
+
};
|
|
556
|
+
|
|
557
|
+
/**
|
|
558
|
+
* 서버로부터 받은 데이타를 에디터에 전달하고 창을 닫음.
|
|
559
|
+
* @parameter aFileInfo [{},{},...]
|
|
560
|
+
* @ex aFileInfo = [
|
|
561
|
+
* {
|
|
562
|
+
sFileName : "nmms_215646753.gif",
|
|
563
|
+
sFileURL :"http://static.naver.net/www/u/2010/0611/nmms_215646753.gif",
|
|
564
|
+
bNewLine : true
|
|
565
|
+
},
|
|
566
|
+
{
|
|
567
|
+
sFileName : "btn_sch_over.gif",
|
|
568
|
+
sFileURL :"http://static1.naver.net/w9/btn_sch_over.gif",
|
|
569
|
+
bNewLine : true
|
|
570
|
+
}
|
|
571
|
+
* ]
|
|
572
|
+
*/
|
|
573
|
+
function setPhotoToEditor(oFileInfo){
|
|
574
|
+
if (!!opener && !!opener.nhn && !!opener.nhn.husky && !!opener.nhn.husky.PopUpManager) {
|
|
575
|
+
//스마트 에디터 플러그인을 통해서 넣는 방법 (oFileInfo는 Array)
|
|
576
|
+
opener.nhn.husky.PopUpManager.setCallback(window, 'SET_PHOTO', [oFileInfo]);
|
|
577
|
+
//본문에 바로 tag를 넣는 방법 (oFileInfo는 String으로 <img src=....> )
|
|
578
|
+
//opener.nhn.husky.PopUpManager.setCallback(window, 'PASTE_HTML', [oFileInfo]);
|
|
579
|
+
}
|
|
580
|
+
}
|
|
581
|
+
|
|
582
|
+
// 2012.05 현재] jindo.$Ajax.prototype.request에서 file과 form을 지원하지 안함.
|
|
583
|
+
jindo.$Ajax.prototype.request = function(oData) {
|
|
584
|
+
this._status++;
|
|
585
|
+
var t = this;
|
|
586
|
+
var req = this._request;
|
|
587
|
+
var opt = this._options;
|
|
588
|
+
var data, v,a = [], data = "";
|
|
589
|
+
var _timer = null;
|
|
590
|
+
var url = this._url;
|
|
591
|
+
this._is_abort = false;
|
|
592
|
+
|
|
593
|
+
if( opt.postBody && opt.type.toUpperCase()=="XHR" && opt.method.toUpperCase()!="GET"){
|
|
594
|
+
if(typeof oData == 'string'){
|
|
595
|
+
data = oData;
|
|
596
|
+
}else{
|
|
597
|
+
data = jindo.$Json(oData).toString();
|
|
598
|
+
}
|
|
599
|
+
}else if (typeof oData == "undefined" || !oData) {
|
|
600
|
+
data = null;
|
|
601
|
+
} else {
|
|
602
|
+
data = oData;
|
|
603
|
+
}
|
|
604
|
+
|
|
605
|
+
req.open(opt.method.toUpperCase(), url, opt.async);
|
|
606
|
+
if (opt.sendheader) {
|
|
607
|
+
if(!this._headers["Content-Type"]){
|
|
608
|
+
req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
|
|
609
|
+
}
|
|
610
|
+
req.setRequestHeader("charset", "utf-8");
|
|
611
|
+
for (var x in this._headers) {
|
|
612
|
+
if(this._headers.hasOwnProperty(x)){
|
|
613
|
+
if (typeof this._headers[x] == "function")
|
|
614
|
+
continue;
|
|
615
|
+
req.setRequestHeader(x, String(this._headers[x]));
|
|
616
|
+
}
|
|
617
|
+
}
|
|
618
|
+
}
|
|
619
|
+
var navi = navigator.userAgent;
|
|
620
|
+
if(req.addEventListener&&!(navi.indexOf("Opera") > -1)&&!(navi.indexOf("MSIE") > -1)){
|
|
621
|
+
/*
|
|
622
|
+
* opera 10.60에서 XMLHttpRequest에 addEventListener기 추가되었지만 정상적으로 동작하지 않아 opera는 무조건 dom1방식으로 지원함.
|
|
623
|
+
* IE9에서도 opera와 같은 문제가 있음.
|
|
624
|
+
*/
|
|
625
|
+
if(this._loadFunc){ req.removeEventListener("load", this._loadFunc, false); }
|
|
626
|
+
this._loadFunc = function(rq){
|
|
627
|
+
clearTimeout(_timer);
|
|
628
|
+
_timer = undefined;
|
|
629
|
+
t._onload(rq);
|
|
630
|
+
}
|
|
631
|
+
req.addEventListener("load", this._loadFunc, false);
|
|
632
|
+
}else{
|
|
633
|
+
if (typeof req.onload != "undefined") {
|
|
634
|
+
req.onload = function(rq){
|
|
635
|
+
if(req.readyState == 4 && !t._is_abort){
|
|
636
|
+
clearTimeout(_timer);
|
|
637
|
+
_timer = undefined;
|
|
638
|
+
t._onload(rq);
|
|
639
|
+
}
|
|
640
|
+
};
|
|
641
|
+
} else {
|
|
642
|
+
/*
|
|
643
|
+
* IE6에서는 onreadystatechange가 동기적으로 실행되어 timeout이벤트가 발생안됨.
|
|
644
|
+
* 그래서 interval로 체크하여 timeout이벤트가 정상적으로 발생되도록 수정. 비동기 방식일때만
|
|
645
|
+
|
|
646
|
+
*/
|
|
647
|
+
if(window.navigator.userAgent.match(/(?:MSIE) ([0-9.]+)/)[1]==6&&opt.async){
|
|
648
|
+
var onreadystatechange = function(rq){
|
|
649
|
+
if(req.readyState == 4 && !t._is_abort){
|
|
650
|
+
if(_timer){
|
|
651
|
+
clearTimeout(_timer);
|
|
652
|
+
_timer = undefined;
|
|
653
|
+
}
|
|
654
|
+
t._onload(rq);
|
|
655
|
+
clearInterval(t._interval);
|
|
656
|
+
t._interval = undefined;
|
|
657
|
+
}
|
|
658
|
+
};
|
|
659
|
+
this._interval = setInterval(onreadystatechange,300);
|
|
660
|
+
|
|
661
|
+
}else{
|
|
662
|
+
req.onreadystatechange = function(rq){
|
|
663
|
+
if(req.readyState == 4){
|
|
664
|
+
clearTimeout(_timer);
|
|
665
|
+
_timer = undefined;
|
|
666
|
+
t._onload(rq);
|
|
667
|
+
}
|
|
668
|
+
};
|
|
669
|
+
}
|
|
670
|
+
}
|
|
671
|
+
}
|
|
672
|
+
|
|
673
|
+
req.send(data);
|
|
674
|
+
return this;
|
|
675
|
+
};
|
data/lib/generators/smart_editor/templates/public/smart_editor/popup/quick_photo/callback.html
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
|
2
|
+
<html lang="ko">
|
|
3
|
+
<head>
|
|
4
|
+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
5
|
+
<title>FileUploader Callback</title>
|
|
6
|
+
</head>
|
|
7
|
+
<body>
|
|
8
|
+
<script type="text/javascript">
|
|
9
|
+
// alert("callback");
|
|
10
|
+
// document.domain 설정
|
|
11
|
+
try { document.domain = "http://*.naver.com"; } catch(e) {}
|
|
12
|
+
|
|
13
|
+
// execute callback script
|
|
14
|
+
var sUrl = document.location.search.substr(1);
|
|
15
|
+
if (sUrl != "blank") {
|
|
16
|
+
var oParameter = {}; // query array
|
|
17
|
+
|
|
18
|
+
sUrl.replace(/([^=]+)=([^&]*)(&|$)/g, function(){
|
|
19
|
+
oParameter[arguments[1]] = arguments[2];
|
|
20
|
+
return "";
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
if ((oParameter.errstr || '').length) { // on error
|
|
24
|
+
(parent.jindo.FileUploader._oCallback[oParameter.callback_func+'_error'])(oParameter);
|
|
25
|
+
} else {
|
|
26
|
+
(parent.jindo.FileUploader._oCallback[oParameter.callback_func+'_success'])(oParameter);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
</script>
|
|
30
|
+
</body>
|
|
31
|
+
</html>
|
|
32
|
+
|