mirror of
https://github.com/Lastorder-DC/rhymix.git
synced 2026-01-14 00:39:57 +09:00
XE 코드 고도화
1. 위젯/ 에디터컴포넌트의 코드 컴파일을 Context가 아닌 각 모듈이 trigger로 동작하게 개선 : 관리자 페이지에서 모듈 업데이트 필요 2. IE7에서 버튼 이미지가 어긋나는 문제 수정 3. 페이지 모듈의 캐싱 기능 추가 : 페이지 자체 캐시 가능하도록 함 4. 에디터에서 파일업로드시 파일 크기가 제대로 적용되지 않던 문제 수정 및 파일을 올리는 중에 남은 용량을 체크하여 미리 파일 업로드가 되지 않도록 함 git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6103 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
parent
1ee64389ab
commit
32c3e86b1b
42 changed files with 838 additions and 810 deletions
BIN
modules/editor/components/emoticon/component_icon.gif
Executable file
BIN
modules/editor/components/emoticon/component_icon.gif
Executable file
Binary file not shown.
|
After Width: | Height: | Size: 573 B |
BIN
modules/editor/components/multimedia_link/component_icon.gif
Executable file
BIN
modules/editor/components/multimedia_link/component_icon.gif
Executable file
Binary file not shown.
|
After Width: | Height: | Size: 334 B |
BIN
modules/editor/components/quotation/component_icon.gif
Executable file
BIN
modules/editor/components/quotation/component_icon.gif
Executable file
Binary file not shown.
|
After Width: | Height: | Size: 94 B |
|
|
@ -37,6 +37,9 @@
|
|||
// 2007. 10. 23 모듈의 추가 설정에서 에디터 trigger 추가
|
||||
$oModuleController->insertTrigger('module.dispAdditionSetup', 'editor', 'view', 'triggerDispEditorAdditionSetup', 'before');
|
||||
|
||||
// 2009. 04. 14 editor component 변환 코드를 trigger로 독립
|
||||
$oModuleController->insertTrigger('display', 'editor', 'controller', 'triggerEditorComponentCompile', 'before');
|
||||
|
||||
return new Object();
|
||||
}
|
||||
|
||||
|
|
@ -53,6 +56,9 @@
|
|||
// 2007. 10. 23 모듈의 추가 설정에서 에디터 trigger 추가
|
||||
if(!$oModuleModel->getTrigger('module.dispAdditionSetup', 'editor', 'view', 'triggerDispEditorAdditionSetup', 'before')) return true;
|
||||
|
||||
// 2009. 04. 14 editor component 변환 코드를 trigger로 독립
|
||||
if(!$oModuleModel->getTrigger('display', 'editor', 'controller', 'triggerEditorComponentCompile', 'before')) return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -73,6 +79,10 @@
|
|||
if(!$oModuleModel->getTrigger('module.dispAdditionSetup', 'editor', 'view', 'triggerDispEditorAdditionSetup', 'before'))
|
||||
$oModuleController->insertTrigger('module.dispAdditionSetup', 'editor', 'view', 'triggerDispEditorAdditionSetup', 'before');
|
||||
|
||||
// 2009. 04. 14 editor component 변환 코드를 trigger로 독립
|
||||
if(!$oModuleModel->getTrigger('display', 'editor', 'controller', 'triggerEditorComponentCompile', 'before'))
|
||||
$oModuleController->insertTrigger('display', 'editor', 'controller', 'triggerEditorComponentCompile', 'before');
|
||||
|
||||
return new Object(0, 'success_updated');
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -28,19 +28,6 @@
|
|||
$this->setMessage('msg_auto_saved');
|
||||
}
|
||||
|
||||
function doSaveDoc($args) {
|
||||
|
||||
if(Context::get('is_logged')) {
|
||||
$logged_info = Context::get('logged_info');
|
||||
$args->member_srl = $logged_info->member_srl;
|
||||
} else {
|
||||
$args->ipaddress = $_SERVER['REMOTE_ADDR'];
|
||||
}
|
||||
|
||||
// 저장
|
||||
return executeQuery('editor.insertSavedDoc', $args);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 자동저장된 문서 삭제
|
||||
**/
|
||||
|
|
@ -79,30 +66,6 @@
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 게시글의 입력/수정이 일어났을 경우 자동 저장문서를 제거하는 trigger
|
||||
**/
|
||||
function triggerDeleteSavedDoc(&$obj) {
|
||||
$this->deleteSavedDoc();
|
||||
return new Object();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 자동 저장된 글을 삭제
|
||||
* 현재 접속한 사용자를 기준
|
||||
**/
|
||||
function deleteSavedDoc() {
|
||||
if(Context::get('is_logged')) {
|
||||
$logged_info = Context::get('logged_info');
|
||||
$args->member_srl = $logged_info->member_srl;
|
||||
} else {
|
||||
$args->ipaddress = $_SERVER['REMOTE_ADDR'];
|
||||
}
|
||||
|
||||
// 일단 이전 저장본 삭제
|
||||
return executeQuery('editor.deleteSavedDoc', $args);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 에디터의 모듈별 추가 확장 폼을 저장
|
||||
**/
|
||||
|
|
@ -171,6 +134,93 @@
|
|||
$this->setMessage('success_updated');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 에디터컴포넌트의 코드를 결과물로 변환
|
||||
**/
|
||||
function triggerEditorComponentCompile(&$content) {
|
||||
$content = $this->transComponent($content);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 에디터 컴포넌트코드를 결과물로 변환
|
||||
**/
|
||||
function transComponent($content) {
|
||||
$content = preg_replace_callback('!<div([^\>]*)editor_component=([^\>]*)>(.*?)\<\/div\>!is', array($this,'transEditorComponent'), $content);
|
||||
$content = preg_replace_callback('!<img([^\>]*)editor_component=([^\>]*?)\>!is', array($this,'transEditorComponent'), $content);
|
||||
return $content;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 내용의 에디터 컴포넌트 코드를 변환
|
||||
**/
|
||||
function transEditorComponent($matches) {
|
||||
// IE에서는 태그의 특성중에서 " 를 빼어 버리는 경우가 있기에 정규표현식으로 추가해줌
|
||||
$buff = $matches[0];
|
||||
$buff = preg_replace_callback('/([^=^"^ ]*)=([^ ^>]*)/i', fixQuotation, $buff);
|
||||
$buff = str_replace("&","&",$buff);
|
||||
|
||||
// 에디터 컴포넌트에서 생성된 코드
|
||||
$oXmlParser = new XmlParser();
|
||||
$xml_doc = $oXmlParser->parse($buff);
|
||||
if($xml_doc->div) $xml_doc = $xml_doc->div;
|
||||
else if($xml_doc->img) $xml_doc = $xml_doc->img;
|
||||
|
||||
$xml_doc->body = $matches[3];
|
||||
|
||||
// attribute가 없으면 return
|
||||
$editor_component = $xml_doc->attrs->editor_component;
|
||||
if(!$editor_component) return $matches[0];
|
||||
|
||||
// component::transHTML() 을 이용하여 변환된 코드를 받음
|
||||
$oEditorModel = &getModel('editor');
|
||||
$oComponent = &$oEditorModel->getComponentObject($editor_component, 0);
|
||||
if(!is_object($oComponent)||!method_exists($oComponent, 'transHTML')) return $matches[0];
|
||||
|
||||
return $oComponent->transHTML($xml_doc);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief 자동 저장
|
||||
**/
|
||||
function doSaveDoc($args) {
|
||||
|
||||
if(Context::get('is_logged')) {
|
||||
$logged_info = Context::get('logged_info');
|
||||
$args->member_srl = $logged_info->member_srl;
|
||||
} else {
|
||||
$args->ipaddress = $_SERVER['REMOTE_ADDR'];
|
||||
}
|
||||
|
||||
// 저장
|
||||
return executeQuery('editor.insertSavedDoc', $args);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief 게시글의 입력/수정이 일어났을 경우 자동 저장문서를 제거하는 trigger
|
||||
**/
|
||||
function triggerDeleteSavedDoc(&$obj) {
|
||||
$this->deleteSavedDoc();
|
||||
return new Object();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 자동 저장된 글을 삭제
|
||||
* 현재 접속한 사용자를 기준
|
||||
**/
|
||||
function deleteSavedDoc() {
|
||||
if(Context::get('is_logged')) {
|
||||
$logged_info = Context::get('logged_info');
|
||||
$args->member_srl = $logged_info->member_srl;
|
||||
} else {
|
||||
$args->ipaddress = $_SERVER['REMOTE_ADDR'];
|
||||
}
|
||||
|
||||
// 일단 이전 저장본 삭제
|
||||
return executeQuery('editor.deleteSavedDoc', $args);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 가상 사이트에서 사용된 에디터 컴포넌트 정보를 제거
|
||||
**/
|
||||
|
|
@ -256,6 +306,12 @@
|
|||
}
|
||||
|
||||
$component_list->{$component_name} = $xml_info;
|
||||
|
||||
// 버튼, 아이콘 이미지 구함
|
||||
$icon_file = _XE_PATH_.'modules/editor/components/'.$component_name.'/icon.gif';
|
||||
$component_icon_file = _XE_PATH_.'modules/editor/components/'.$component_name.'/component_icon.gif';
|
||||
if(file_exists($icon_file)) $component_list->{$component_name}->icon = true;
|
||||
if(file_exists($component_icon_file)) $component_list->{$component_name}->component_icon = true;
|
||||
}
|
||||
|
||||
// enabled만 체크하도록 하였으면 그냥 return
|
||||
|
|
|
|||
|
|
@ -122,7 +122,7 @@
|
|||
|
||||
// SWFUploader에 세팅할 업로드 설정 구함
|
||||
$file_config = $oFileModel->getUploadConfig();
|
||||
$file_config->attached_size = $file_config->allowed_attach_size*1024*1024;
|
||||
$file_config->allowed_attach_size = $file_config->allowed_attach_size*1024*1024;
|
||||
$file_config->allowed_filesize = $file_config->allowed_filesize*1024*1024;
|
||||
|
||||
Context::set('file_config',$file_config);
|
||||
|
|
@ -404,8 +404,18 @@
|
|||
}
|
||||
|
||||
if(!file_exists($cache_file)) return;
|
||||
|
||||
@include($cache_file);
|
||||
|
||||
if(count($component_list)) {
|
||||
foreach($component_list as $key => $val) {
|
||||
if(!trim($key)) continue;
|
||||
if(!is_dir(_XE_PATH_.'modules/editor/components/'.$key)) {
|
||||
FileHandler::removeFile($cache_file);
|
||||
return $this->getComponentList($filter_enabled, $site_srl);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
return $component_list;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -31,9 +31,7 @@
|
|||
<div style="display:none" id="editorExtension_{$editor_sequence}">
|
||||
<ul id="editor_component_{$editor_sequence}" class="editorComponent">
|
||||
<!--@foreach($component_list as $component_name => $component)-->
|
||||
<!--@if(!in_array($component_name,array('colorpicker_bg','colorpicker_text','emoticon','image_link','multimedia_link','quotation','table_maker','url_link')))-->
|
||||
<li><a href="#" onclick="return false;" id="component_{$editor_sequence}_{$component_name}"><img src="../../components/{$component_name}/component_icon.gif" alt="" /> {$component->title}</a></li>
|
||||
<!--@end-->
|
||||
<li><!--@if($component->component_icon)--><img src="../../components/{$component_name}/component_icon.gif" alt="" width="13" height="12"/><!--@end--> <a href="#" onclick="return false;" id="component_{$editor_sequence}_{$component_name}"> {$component->title}</a></li>
|
||||
<!--@end-->
|
||||
</ul>
|
||||
</div>
|
||||
|
|
@ -96,4 +94,4 @@
|
|||
<div class="file_attach_info" id="uploader_status_{$editor_sequence}">{$upload_status}</div>
|
||||
</div>
|
||||
<!--@end-->
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -223,6 +223,7 @@
|
|||
|
||||
.xpress-editor .tool li.style .layer{ padding:4px 2px; _overflow:hidden; filter:progid:DXImageTransform.Microsoft.Shadow(color=#dddddd,direction=135,strength=2);}
|
||||
.xpress-editor .tool li.style .layer li{ position:relative; background:#fbfbfb;}
|
||||
.xpress-editor .tool li.style .layer li img.component { width:13px; height:12px; }
|
||||
.xpress-editor .tool li.style .layer li button{ display:block; width:134px; position:relative;}
|
||||
.xpress-editor .tool li.style .layer li button span{ display:block; width:130px; text-align:left; letter-spacing:normal;}
|
||||
.xpress-editor .tool li.style .layer li.h3 button span{ padding:3px 0 1px 4px; height:15px; _height /**/:19px; font-size:16px; font-weight:bold;}
|
||||
|
|
|
|||
|
|
@ -419,7 +419,7 @@
|
|||
<div class="layer extension2 xpress_xeditor_extension_layer" id="editorExtension_{$editor_sequence}">
|
||||
<ul id="editor_component_{$editor_sequence}" class="editorComponent">
|
||||
<!--@foreach($component_list as $component_name => $component)-->
|
||||
<li><a href="#" onclick="return false;" id="component_{$editor_sequence}_{$component_name}">{$component->title}</a></li>
|
||||
<li><!--@if($component->component_icon)--><img src="../../components/{$component_name}/component_icon.gif" alt="" width="13" height="12"/> <!--@end--><a href="#" onclick="return false;" id="component_{$editor_sequence}_{$component_name}">{$component->title}</a></li>
|
||||
<!--@end-->
|
||||
</ul>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@
|
|||
var uploadedFiles = new Array();
|
||||
var uploaderSettings = new Array();
|
||||
var loaded_images = new Array();
|
||||
var swfUploadObjs = new Array();
|
||||
|
||||
/**
|
||||
* 업로드를 하기 위한 준비 시작
|
||||
|
|
@ -15,7 +16,7 @@ var loaded_images = new Array();
|
|||
function editorUploadInit(obj) {
|
||||
if(typeof(obj["editorSequence"])=="undefined") return;
|
||||
if(typeof(obj["sessionName"])=="undefined") obj["sessionName"]= "PHPSESSID";
|
||||
if(typeof(obj["allowedFileSize"])=="undefined") obj["allowdFileSize"]= "2MB";
|
||||
if(typeof(obj["allowedFileSize"])=="undefined") obj["allowedFileSize"]= 2*1024*1024;
|
||||
if(typeof(obj["allowedFileTypes"])=="undefined") obj["allowedFileTypes"]= "*.*";
|
||||
if(typeof(obj["allowedFileTypesDescription"])=="undefined") obj["allowedFileTypesDescription"]= "All Files";
|
||||
if(typeof(obj["replaceButtonID"])=="undefined") obj["replaceButtonID"] = "swfUploadButton"+obj["editorSequence"];
|
||||
|
|
@ -44,11 +45,11 @@ function XEUploaderStart(obj) {
|
|||
"act" : "procFileUpload",
|
||||
"editor_sequence" : obj["editorSequence"]
|
||||
},
|
||||
file_size_limit : obj["allowedFileSize"],
|
||||
file_size_limit : parseInt(parseInt(obj["allowedFileSize"],10)/1024,10),
|
||||
file_queue_limit : 0,
|
||||
file_upload_limit : 0,
|
||||
file_types : obj["allowedFileTypes"],
|
||||
file_types_description : obj["allowedFileTypesDescription"],
|
||||
file_upload_limit : 0,
|
||||
file_queue_limit : 0,
|
||||
custom_settings : {
|
||||
progressTarget : null,
|
||||
cancelButtonId : null
|
||||
|
|
@ -88,6 +89,7 @@ function XEUploaderStart(obj) {
|
|||
|
||||
var swfu = new SWFUpload(settings);
|
||||
var swfObj = xGetElementById(swfu.movieName);
|
||||
swfUploadObjs[obj["editorSequence"]] = swfu.movieName;
|
||||
if(!swfObj) return;
|
||||
|
||||
swfObj.style.display = "block";
|
||||
|
|
@ -224,7 +226,7 @@ function reloadFileList(settings) {
|
|||
params["file_list_area_id"] = settings["fileListAreaID"];
|
||||
params["editor_sequence"] = settings["editorSequence"];
|
||||
params["mid"] = current_mid;
|
||||
var response_tags = new Array("error","message","files","upload_status","upload_target_srl","editor_sequence");
|
||||
var response_tags = new Array("error","message","files","upload_status","upload_target_srl","editor_sequence","left_size");
|
||||
exec_xml("file","getFileList", params, completeReloadFileList, response_tags, settings);
|
||||
}
|
||||
|
||||
|
|
@ -235,6 +237,7 @@ function completeReloadFileList(ret_obj, response_tags, settings) {
|
|||
var files = ret_obj['files'];
|
||||
var file_list_area_id = settings["fileListAreaID"];
|
||||
var listObj = xGetElementById(file_list_area_id);
|
||||
var left_size = parseInt(parseInt(ret_obj["left_size"],10)/1024,10);
|
||||
while(listObj.options.length) {
|
||||
listObj.remove(0);
|
||||
}
|
||||
|
|
@ -269,7 +272,9 @@ function completeReloadFileList(ret_obj, response_tags, settings) {
|
|||
previewFiles('', item[item.length-1].file_srl);
|
||||
}
|
||||
}
|
||||
//listObj.selectedIndex = listObj.options.length-1;
|
||||
|
||||
var swfu = SWFUpload.instances[swfUploadObjs[editor_sequence]].setFileSizeLimit(left_size);
|
||||
|
||||
xAddEventListener(listObj,'click',previewFiles);
|
||||
}
|
||||
|
||||
|
|
@ -380,7 +385,7 @@ function insertUploadedFile(editorSequence) {
|
|||
obj.src = file.download_url;
|
||||
}
|
||||
temp_code = '';
|
||||
temp_code += "<img editor_component=\"image_link\" src=\""+request_uri+file.download_url+"\" alt=\""+file.source_filename+"\"";
|
||||
temp_code += "<img src=\""+request_uri+file.download_url+"\" alt=\""+file.source_filename+"\"";
|
||||
if(obj.complete == true) { temp_code += " width=\""+obj.width+"\" height=\""+obj.height+"\""; }
|
||||
temp_code += " />\r\n";
|
||||
text.push(temp_code);
|
||||
|
|
@ -410,4 +415,4 @@ function insertUploadedFile(editorSequence) {
|
|||
if(text.length>0) editorReplaceHTML(iframe_obj, text.join(''));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue