diff --git a/classes/optimizer/Optimizer.class.php b/classes/optimizer/Optimizer.class.php index fd8d460c9..2ff8ab3ca 100644 --- a/classes/optimizer/Optimizer.class.php +++ b/classes/optimizer/Optimizer.class.php @@ -121,9 +121,6 @@ header("Content-Type: {$content_type}; charset=UTF-8"); header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); -header("Cache-Control: no-store, no-cache, must-revalidate"); -header("Cache-Control: post-check=0, pre-check=0", false); -header("Pragma: no-cache"); header("Content-Length: ".filesize('{$content_filename}')); {$gzip_header} if(@file_exists("{$content_filename}")) { diff --git a/common/css/default.css b/common/css/default.css index f9667221b..f526befd6 100644 --- a/common/css/default.css +++ b/common/css/default.css @@ -27,7 +27,7 @@ IE7 & IE6 & Below html { width:100%; } body { margin:0; font-size:.75em; font-family:sans-serif;} img { border:none; } -label { cursor:pointer; } +label { cursor:pointer; position:relative; left:5px; } form { margin:0; padding:0; } .iePngFix { behavior:url(./common/js/iePngFix.htc); } diff --git a/common/js/x.js b/common/js/x.js index dc2f90356..fa6df72d3 100644 --- a/common/js/x.js +++ b/common/js/x.js @@ -21,6 +21,7 @@ else if(navigator.vendor!='KDE' && document.all && xUA.indexOf('msie')!=-1){ } else if(document.layers){xNN4=true;} var xMac=xUA.indexOf('mac')!=-1; +var xFF=xUA.indexOf('firefox')!=-1; // (element, event(without 'on'), event listener(function name)[, caption]) function xAddEventListener(e,eT,eL,cap) diff --git a/common/js/xml_js_filter.js b/common/js/xml_js_filter.js index 0844dc418..bb9c3fcf9 100644 --- a/common/js/xml_js_filter.js +++ b/common/js/xml_js_filter.js @@ -300,6 +300,13 @@ function XmlJsFilterProc(confirm_msg) { // form proc function procFilter(fo_obj, filter_func) { + // form문 안에 위지윅 에디터가 세팅되어 있을 경우 에디터의 값과 지정된 content field를 sync + var editor_sequence = fo_obj.getAttribute('editor_sequence'); + if(typeof(editor_sequence)!='undefined' && editor_sequence && typeof(editorRelKeys)!='undefined' && typeof(editorGetContent)=='function') { + var content = editorGetContent(editor_sequence); + editorRelKeys[editor_sequence]['content'].value = content; + } + filter_func(fo_obj); return false; } diff --git a/config/config.inc.php b/config/config.inc.php index 02abfd2b7..9ec50bf5f 100644 --- a/config/config.inc.php +++ b/config/config.inc.php @@ -14,7 +14,7 @@ * 이 내용은 제로보드XE의 버전을 관리자 페이지에 표시하기 위한 용도이며 * config.inc.php의 수정이 없더라도 공식 릴리즈시에 수정되어 함께 배포되어야 함 **/ - define('__ZBXE_VERSION__', '0.2.2'); + define('__ZBXE_VERSION__', '0.2.3'); /** * @brief 디버깅 메세지 출력 diff --git a/layouts/xe_official/layout.html b/layouts/xe_official/layout.html index b1bbcdce6..6ede0e1f2 100644 --- a/layouts/xe_official/layout.html +++ b/layouts/xe_official/layout.html @@ -16,6 +16,10 @@ + + {@$layout_info->colorset = "default"} + +

| {$lang->mid} | -{$lang->browser_title} | +{$lang->browser_title} / {$lang->mid} | {$lang->is_default} | {$lang->skin} | {$lang->admin_id} | @@ -62,8 +60,10 @@ {$module_category[$val->module_category_srl]->title} -- | {htmlspecialchars($val->browser_title)} |
+
+ {htmlspecialchars($val->browser_title)} + {$val->mid} + |
{$val->is_default} | {$val->skin} | {$val->admin_id} | diff --git a/modules/board/tpl/board_insert.html b/modules/board/tpl/board_insert.html index 9955e470c..dacab7139 100644 --- a/modules/board/tpl/board_insert.html +++ b/modules/board/tpl/board_insert.html @@ -75,8 +75,8 @@||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| {$lang->use_category} | - use_category=='Y')-->checked="checked" class="checkbox" /> - {$lang->about_use_category} + use_category=='Y')-->checked="checked" class="checkbox" id="fld_for_category" /> + | ||||||||||||||||||||||||
| {$lang->mid} | -{$lang->browser_title} | +{$lang->browser_title} / {$lang->mid} | {$lang->is_default} | {$lang->skin} | {$lang->admin_id} | @@ -60,14 +58,16 @@ {$module_category[$val->module_category_srl]->title} -- | {htmlspecialchars($val->browser_title)} |
+
+ {htmlspecialchars($val->browser_title)} + {$val->mid} + |
{$val->is_default} | {$val->skin} | {$val->admin_id} | {zdate($val->regdate,"Y-m-d")} | {$lang->cmd_view} | -{$lang->cmd_copy} | +{$lang->cmd_copy} | {$lang->cmd_delete} | diff --git a/modules/document/tpl/document_list.html b/modules/document/tpl/document_list.html index 4d1d8d60c..d5dfd9bfd 100644 --- a/modules/document/tpl/document_list.html +++ b/modules/document/tpl/document_list.html @@ -16,7 +16,6 @@{$lang->title} | {$lang->user_name} | {$lang->readed_count} | {$lang->voted_count} | @@ -46,8 +44,8 @@
|---|---|---|---|---|
| {$no} | isCarted())-->checked="checked"/> | -{htmlspecialchars($module_list[$oDocument->get('module_srl')]->browser_title)} | -+ |
+ [{htmlspecialchars($module_list[$oDocument->get('module_srl')]->browser_title)}] {$oDocument->getTitleText()} diff --git a/modules/editor/components/url_link/tpl/popup.js b/modules/editor/components/url_link/tpl/popup.js index 316560528..220315f3b 100644 --- a/modules/editor/components/url_link/tpl/popup.js +++ b/modules/editor/components/url_link/tpl/popup.js @@ -15,7 +15,7 @@ function getText() { if(node.nodeName == "A") { var url = node.getAttribute("HREF"); - var text = node.text.replace(/</ig,'<').replace(/>/ig,'>').replace(/&/ig,'&'); + var text = node.innerHTML.replace(/</ig,'<').replace(/>/ig,'>').replace(/&/ig,'&'); var open_window = false; var bold = false; diff --git a/modules/editor/tpl/js/editor.js b/modules/editor/tpl/js/editor.js index 5b3a3f676..80d7c9dbc 100755 --- a/modules/editor/tpl/js/editor.js +++ b/modules/editor/tpl/js/editor.js @@ -2,21 +2,22 @@ * @author zero (zero@nzeo.com) * @version 0.1 * @brief 에디터 관련 스크립트 - **/ + */ /** - * 에디터에서 사용하는 iframe, textarea의 prefix + * 에디터에서 사용하기 위한 변수 **/ -var editor_mode = new Array(); ///<< 에디터의 html편집 모드 flag 세팅 변수 -var _editorSyncList = new Array(); ///< 에디터와 form 동기화를 위한 동기화 대상 목록 -var _autoSaveObj = {fo_obj:null, editor_sequence:0, title:'', content:'', locked:false} ///< 자동저장을 위한 정보를 가진 object -var editor_rel_keys = new Array(); ///< 에디터와 각 모듈과의 연동을 위한 key 값을 보관하는 변수 +var editorMode = new Array(); ///<< 에디터의 html편집 모드 flag 세팅 변수 (html or null) +var editorAutoSaveObj = {fo_obj:null, editor_sequence:0, title:'', content:'', locked:false} ///< 자동저장을 위한 정보를 가진 object +var editorRelKeys = new Array(); ///< 에디터와 각 모듈과의 연동을 위한 key 값을 보관하는 변수 +var editorDragObj = {isDrag:false, y:0, obj:null, id:'', det:0, source_height:0} /** * 에디터 사용시 사용되는 이벤트 연결 함수 호출 **/ -xAddEventListener(window, 'load', _editorSync); ///< 에디터의 동기화를 하는 함수를 window.load시 실행 - +xAddEventListener(document, 'mousedown', editorDragStart); +xAddEventListener(document, 'mouseup', editorDragStop); +xAddEventListener(document, 'mouseup', editorEventCheck); /** * 에디터의 상태나 객체를 구하기 위한 함수 @@ -24,41 +25,37 @@ xAddEventListener(window, 'load', _editorSync); ///< 에디터의 동기화를 // editor_sequence값에 해당하는 iframe의 object를 return function editorGetIFrame(editor_sequence) { - var obj_id = 'editor_iframe_'+ editor_sequence; - return xGetElementById(obj_id); + return xGetElementById( 'editor_iframe_'+ editor_sequence ); } // editor_sequence값에 해당하는 textarea object를 return function editorGetTextArea(editor_sequence) { - var obj_id = 'editor_textarea_' + editor_sequence; - return xGetElementById(obj_id); + return xGetElementById( 'editor_textarea_' + editor_sequence ); } // editor_sequence에 해당하는 form문 구함 function editorGetForm(editor_sequence) { var iframe_obj = editorGetIFrame(editor_sequence); if(!iframe_obj) return; + var fo_obj = iframe_obj.parentNode; while(fo_obj.nodeName != 'FORM') { fo_obj = fo_obj.parentNode; } if(fo_obj.nodeName == 'FORM') return fo_obj; return; } -// 에디터의 전체 내용 return, HTML 편집모드일 경우에 데이터를 이전후 값 return +// 에디터의 전체 내용 return function editorGetContent(editor_sequence) { - var iframe_obj = editorGetIFrame(editor_sequence); - if(!iframe_obj) return null; - - var html = null; - if(editor_mode[editor_sequence]=='html') { + var html = ""; + if(editorMode[editor_sequence]=='html') { var textarea_obj = editorGetTextArea(editor_sequence); - var html = textarea_obj.value; - var contentDocument = iframe_obj.contentWindow.document; - contentDocument.body.innerHTML = html; + if(!textarea_obj) return ""; + html = textarea_obj.value; + } else { + var iframe_obj = editorGetIFrame(editor_sequence); + if(!iframe_obj) return ""; + html = xInnerHtml(iframe_obj.contentWindow.document.body).replace(/^ ]*)>$/i,''); } - - html = xInnerHtml(iframe_obj.contentWindow.document.body); - if(html) html = html.replace(/^ ]*)>$/i,''); return html; } @@ -68,7 +65,6 @@ function editorGetSelectedHtml(editor_sequence) { if(xIE4Up) { var range = iframe_obj.contentWindow.document.selection.createRange(); var html = range.htmlText; - //range.select(); return html; } else { var range = iframe_obj.contentWindow.getSelection().getRangeAt(0); @@ -96,12 +92,9 @@ function editorGetSelectedNode(editor_sequence) { } } - /** * editor 시작 (editor_sequence로 iframe객체를 얻어서 쓰기 모드로 전환) **/ -var editor_is_started = new Array(); -var editor_start_func = new Array(); function editorStart(editor_sequence, primary_key, content_key, resizable, editor_height) { // resize 가/불가에 대한 체크 if(typeof(resizable)=="undefined"||!resizable) resizable = false; @@ -112,14 +105,17 @@ function editorStart(editor_sequence, primary_key, content_key, resizable, edito if(!iframe_obj) return; xWidth(iframe_obj, xWidth(iframe_obj.parentNode)-20); - // 현 에디터를 감싸고 있는 form문을 찾아서 content object를 찾아서 내용 sync + // 현 에디터를 감싸고 있는 form문을 찾음 var fo_obj = editorGetForm(editor_sequence); if(!fo_obj) return; + // fo_obj에 editor_sequence 값 지정 + fo_obj.setAttribute('editor_sequence', editor_sequence); + // 모듈 연관 키 값을 세팅 - editor_rel_keys[editor_sequence] = new Array(); - editor_rel_keys[editor_sequence]["primary"] = fo_obj[primary_key]; - editor_rel_keys[editor_sequence]["content"] = fo_obj[content_key]; + editorRelKeys[editor_sequence] = new Array(); + editorRelKeys[editor_sequence]["primary"] = fo_obj[primary_key]; + editorRelKeys[editor_sequence]["content"] = fo_obj[content_key]; // saved document(자동저장 문서)에 대한 확인 if(typeof(fo_obj._saved_doc_title)!="undefined" ) { ///<< _saved_doc_title field가 없으면 자동저장 하지 않음 @@ -131,7 +127,7 @@ function editorStart(editor_sequence, primary_key, content_key, resizable, edito // 자동저장된 문서 활용여부를 물은 후 사용하지 않는다면 자동저장된 문서 삭제 if(confirm(fo_obj._saved_doc_message.value)) { if(typeof(fo_obj.title)!='undefined') fo_obj.title.value = saved_title; - editor_rel_keys[editor_sequence]['content'].value = saved_content; + editorRelKeys[editor_sequence]['content'].value = saved_content; } else { editorRemoveSavedDoc(); } @@ -139,7 +135,7 @@ function editorStart(editor_sequence, primary_key, content_key, resizable, edito } // 대상 form의 content element에서 데이터를 구함 - var content = editor_rel_keys[editor_sequence]['content'].value; + var content = editorRelKeys[editor_sequence]['content'].value; // IE가 아니고 내용이 없으면 추가 (FF등에서 iframe 선택시 focus를 주기 위한 꽁수) if(!content && !xIE4Up) content = " "; @@ -148,20 +144,26 @@ function editorStart(editor_sequence, primary_key, content_key, resizable, edito var contentDocument = iframe_obj.contentWindow.document; // 크기 변경 불가일 경우 드래그바 숨김 - if(resizable == false) xGetElementById("editor_drag_bar_"+editor_sequence).style.display = "none"; - else xGetElementById("editor_drag_bar_"+editor_sequence).style.display = "block"; - - // IE일 경우 ctrl-Enter 안내 문구를 노출 - if(xIE4Up && xGetElementById('for_ie_help_'+editor_sequence)) { - xGetElementById('for_ie_help_'+editor_sequence).style.display = "block"; + var dragObj = xGetElementById("editor_drag_bar_"+editor_sequence); + if(dragObj) { + if(resizable == false) dragObj.style.display = "none"; + else dragObj.style.display = "block"; } + // IE일 경우 ctrl-Enter 안내 문구를 노출 + var ieHelpObj = xGetElementById("for_ie_help_"+editor_sequence); + if(xIE4Up && ieHelpObj) { + ieHelpObj.style.display = "block"; + } + + // content 생성 + editor_path = editor_path.replace(/^\.\//ig, ''); var contentHtml = ''+ ''+ ' | '+
'