테이블 편집기능 추가

git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6116 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
taggon 2009-04-15 08:11:20 +00:00
parent 9e20111ca9
commit 47fc1bff85
6 changed files with 954 additions and 901 deletions

View file

@ -18,7 +18,7 @@
.xpress-editor li{list-style:none;} .xpress-editor li{list-style:none;}
/* Layout Selector */ /* Layout Selector */
.xpress-editor{ position:relative; background-color:transparent;} .xpress-editor{ position:relative; background:#fff;}
.xpress-editor #smart_content{ position:relative; clear:both; margin:0 0 10px 0; border:1px solid #c2c2c2; *zoom:1;} .xpress-editor #smart_content{ position:relative; clear:both; margin:0 0 10px 0; border:1px solid #c2c2c2; *zoom:1;}
.xpress-editor #smart_footer{ position:relative; text-align:center; padding:10px 0;} .xpress-editor #smart_footer{ position:relative; text-align:center; padding:10px 0;}
@ -51,18 +51,18 @@
.xpress-editor.black .tool{ background:#111 url(../img/bg_tool.black.gif) repeat-x left bottom; } .xpress-editor.black .tool{ background:#111 url(../img/bg_tool.black.gif) repeat-x left bottom; }
.xpress-editor .tool:after{ content:""; display:block; clear:both;} .xpress-editor .tool:after{ content:""; display:block; clear:both;}
.xpress-editor .tool ul{ position:relative; overflow:visible; float:left; margin:0 5px 4px 0; z-index:2;} .xpress-editor .tool ul{ position:relative; overflow:visible; float:left; margin:0 5px 2px 0; z-index:2;}
.xpress-editor .tool ul.action{ width:43px;} .xpress-editor .tool ul.action{ width:43px;}
.xpress-editor .tool ul.type{ width:auto; white-space:nowrap;} .xpress-editor .tool ul.type{ width:auto; white-space:nowrap;}
.xpress-editor .tool ul.style{ width:169px; z-index:5;} .xpress-editor .tool ul.style{ width:169px; z-index:6;}
.xpress-editor .tool ul.paragraph{ width:169px; z-index:4;} .xpress-editor .tool ul.paragraph{ width:169px; z-index:5;}
.xpress-editor .tool ul.extra1{ width:111px; z-index:3;} .xpress-editor .tool ul.extra1{ width:90px; z-index:4;}
.xpress-editor .tool ul.table{ width:85px; z-index:3;}
.xpress-editor .tool ul.extra2{ width:auto; z-index:2;} .xpress-editor .tool ul.extra2{ width:auto; z-index:2;}
.xpress-editor .tool ul.extra3{ float:right; width:auto; z-index:1; margin-right:1px;} .xpress-editor .tool ul.extra3{ float:right; width:auto; z-index:1; margin-right:1px;}
.xpress-editor .tool ul.extra3 li{ margin-right:4px;} .xpress-editor .tool ul.extra3 li{ margin-right:4px;}
.xpress-editor .tool li{ position:relative; float:left;} .xpress-editor .tool li{ position:relative; float:left;}
.xpress-editor .tool li button{ width:21px; height:21px; background:url(../img/btn_set.gif) no-repeat 0 0; vertical-align:top;} .xpress-editor .tool li button{ width:21px; height:21px; background:url(../img/btn_set.gif) no-repeat 0 0; vertical-align:top;}
.xpress-editor.black .tool li button{ width:21px; height:21px; background:url(../img/btn_set.black.gif) no-repeat 0 0; vertical-align:top;}
.xpress-editor .tool li button span{ position:absolute; top:0; left:0; width:0; height:0; overflow:hidden; visibility:hidden;} .xpress-editor .tool li button span{ position:absolute; top:0; left:0; width:0; height:0; overflow:hidden; visibility:hidden;}
.xpress-editor .tool li.extensions span.exButton, .xpress-editor .tool li.extensions span.exButton,
@ -111,9 +111,12 @@
.xpress-editor .tool li.indent button{ background-position:-360px 0;} .xpress-editor .tool li.indent button{ background-position:-360px 0;}
.xpress-editor .tool li.blockquote button{ width:22px; background-position:-381px 0;} .xpress-editor .tool li.blockquote button{ width:22px; background-position:-381px 0;}
.xpress-editor .tool li.url button{ width:26px; background-position:-403px 0;} .xpress-editor .tool li.url button{ width:26px; background-position:-403px 0;}
.xpress-editor .tool li.table button{ background-position:-429px 0;} .xpress-editor .tool li.character button{ background-position:-429px 0;}
.xpress-editor .tool li.character button{ background-position:-450px 0;} .xpress-editor .tool li.find button{ background-position:-450px 0;}
.xpress-editor .tool li.find button{ background-position:-471px 0;} .xpress-editor .tool li.table button{ width:22px; background-position:-471px 0;}
.xpress-editor .tool li.merge button{ background-position:-493px 0;}
.xpress-editor .tool li.splitCol button{ background-position:-514px 0;}
.xpress-editor .tool li.splitRow button{ background-position:-535px 0;}
.xpress-editor .tool li.extensions span{ background-position:0 0;} .xpress-editor .tool li.extensions span{ background-position:0 0;}
.xpress-editor .tool li.extensions span button{ background-position:right 0;} .xpress-editor .tool li.extensions span button{ background-position:right 0;}
.xpress-editor .tool li.html span{ background-position:0 0;} .xpress-editor .tool li.html span{ background-position:0 0;}
@ -142,9 +145,12 @@
.xpress-editor .tool li.indent button.hover{ background-position:-360px -21px;} .xpress-editor .tool li.indent button.hover{ background-position:-360px -21px;}
.xpress-editor .tool li.blockquote button.hover{ width:22px; background-position:-381px -21px;} .xpress-editor .tool li.blockquote button.hover{ width:22px; background-position:-381px -21px;}
.xpress-editor .tool li.url button.hover{ width:26px; background-position:-403px -21px;} .xpress-editor .tool li.url button.hover{ width:26px; background-position:-403px -21px;}
.xpress-editor .tool li.table button.hover{ background-position:-429px -21px;} .xpress-editor .tool li.character button.hover{ background-position:-429px -21px;}
.xpress-editor .tool li.character button.hover{ background-position:-450px -21px;} .xpress-editor .tool li.find button.hover{ background-position:-450px -21px;}
.xpress-editor .tool li.find button.hover{ background-position:-471px -21px;} .xpress-editor .tool li.table button.hover{ width:22px; background-position:-471px -21px;}
.xpress-editor .tool li.merge button.hover{ background-position:-493px -21px;}
.xpress-editor .tool li.splitCol button.hover{ background-position:-514px -21px;}
.xpress-editor .tool li.splitRow button.hover{ background-position:-535px -21px;}
.xpress-editor .tool li.extensions span.hover{ background-position:0 -21px;} .xpress-editor .tool li.extensions span.hover{ background-position:0 -21px;}
.xpress-editor .tool li.extensions span.hover button{ background-position:right -21px;} .xpress-editor .tool li.extensions span.hover button{ background-position:right -21px;}
.xpress-editor .tool li.html span.hover{ background-position:0 -21px;} .xpress-editor .tool li.html span.hover{ background-position:0 -21px;}
@ -173,9 +179,12 @@
.xpress-editor .tool li.indent button.active{ background-position:-360px -42px;} .xpress-editor .tool li.indent button.active{ background-position:-360px -42px;}
.xpress-editor .tool li.blockquote button.active{ width:22px; background-position:-381px -42px;} .xpress-editor .tool li.blockquote button.active{ width:22px; background-position:-381px -42px;}
.xpress-editor .tool li.url button.active{ width:26px; background-position:-403px -42px;} .xpress-editor .tool li.url button.active{ width:26px; background-position:-403px -42px;}
.xpress-editor .tool li.table button.active{ background-position:-429px -42px;} .xpress-editor .tool li.character button.active{ background-position:-429px -42px;}
.xpress-editor .tool li.character button.active{ background-position:-450px -42px;} .xpress-editor .tool li.find button.active{ background-position:-450px -42px;}
.xpress-editor .tool li.find button.active{ background-position:-471px -42px;} .xpress-editor .tool li.table button.active{ width:22px; background-position:-471px -42px;}
.xpress-editor .tool li.merge button.active{ background-position:-493px -42px;}
.xpress-editor .tool li.splitCol button.active{ background-position:-514px -42px;}
.xpress-editor .tool li.splitRow button.active{ background-position:-535px -42px;}
.xpress-editor .tool li.extensions span.active{ background-position:0 -42px;} .xpress-editor .tool li.extensions span.active{ background-position:0 -42px;}
.xpress-editor .tool li.extensions span.active button{ background-position:right -42px;} .xpress-editor .tool li.extensions span.active button{ background-position:right -42px;}
.xpress-editor .tool li.html span.active{ background-position:0 -42px;} .xpress-editor .tool li.html span.active{ background-position:0 -42px;}
@ -206,9 +215,15 @@
.xpress-editor .tool.off li.indent button{ background-position:-360px -63px;} .xpress-editor .tool.off li.indent button{ background-position:-360px -63px;}
.xpress-editor .tool.off li.blockquote button{ width:22px; background-position:-381px -63px;} .xpress-editor .tool.off li.blockquote button{ width:22px; background-position:-381px -63px;}
.xpress-editor .tool.off li.url button{ width:26px; background-position:-403px -63px;} .xpress-editor .tool.off li.url button{ width:26px; background-position:-403px -63px;}
.xpress-editor .tool.off li.table button{ background-position:-429px -63px;} .xpress-editor .tool.off li.character button{ background-position:-429px -63px;}
.xpress-editor .tool.off li.character button{ background-position:-450px -63px;} .xpress-editor .tool.off li.find button{ background-position:-450px -63px;}
.xpress-editor .tool.off li.find button{ background-position:-471px -63px;} .xpress-editor .tool.off li.table button{ width:22px; background-position:-471px -63px;}
.xpress-editor .tool.off li.merge button,
.xpress-editor .tool li.merge button.off{ background-position:-493px -63px;}
.xpress-editor .tool.off li.splitCol button,
.xpress-editor .tool li.splitCol button.off{ background-position:-514px -63px;}
.xpress-editor .tool.off li.splitRow button,
.xpress-editor .tool li.splitRow button.off{ background-position:-535px -63px;}
.xpress-editor .tool.off li.extensions span{ background-position:0 -63px;} .xpress-editor .tool.off li.extensions span{ background-position:0 -63px;}
.xpress-editor .tool.off li.extensions span button{ background-position:right -63px; color:#bcbcbc;} .xpress-editor .tool.off li.extensions span button{ background-position:right -63px; color:#bcbcbc;}
.xpress-editor .tool.off li button{ cursor:default;} .xpress-editor .tool.off li button{ cursor:default;}
@ -240,7 +255,6 @@
.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{ 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{ 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{ 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 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;} .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;}
@ -285,7 +299,7 @@
.xpress-editor .tool li.table .layer fieldset dd button.del{ top:9px; background-position:0 -8px;} .xpress-editor .tool li.table .layer fieldset dd button.del{ top:9px; background-position:0 -8px;}
.xpress-editor .tool li.table .layer fieldset dd .preview_palette{ display:block; float:left; margin:0 3px 0 0; padding:2px; position:relative; border:1px solid #c8c9c6; width:14px; height:14px; overflow:hidden;} .xpress-editor .tool li.table .layer fieldset dd .preview_palette{ display:block; float:left; margin:0 3px 0 0; padding:2px; position:relative; border:1px solid #c8c9c6; width:14px; height:14px; overflow:hidden;}
.xpress-editor .tool li.table .layer fieldset dd .preview_palette button{ width:14px; height:14px; font-size:500px; line-height:0;} .xpress-editor .tool li.table .layer fieldset dd .preview_palette button{ width:14px; height:14px; font-size:500px; line-height:0;}
.xpress-editor .tool li.table .layer fieldset dd .find_palette{ width:21px; height:20px; background:url(../img/btn_search.gif) no-repeat;} .xpress-editor .tool li.table .layer fieldset dd .find_palette{ width:33px; height:20px; background:url(../img/btn_search.gif) no-repeat;}
.xpress-editor .tool li.table .layer fieldset.num{ top:14px;} .xpress-editor .tool li.table .layer fieldset.num{ top:14px;}
.xpress-editor .tool li.table .layer fieldset.num dl{ top:18px; width:60px;} .xpress-editor .tool li.table .layer fieldset.num dl{ top:18px; width:60px;}

View file

@ -28,3 +28,5 @@ body{ height:100%; background-color:transparent;}
.xpressOutput sup{ font:10px Tahoma;} .xpressOutput sup{ font:10px Tahoma;}
.xpressOutput sub{ font:10px Tahoma;} .xpressOutput sub{ font:10px Tahoma;}
.xpressOutput table td{ padding:4px;} .xpressOutput table td{ padding:4px;}
.xpressOutput table .xe_selected_cell{ background-color: #d6e9ff}

View file

@ -26,6 +26,7 @@
<!--%import("js/xe_interface.js",optimized=false)--> <!--%import("js/xe_interface.js",optimized=false)-->
<!-- 자동저장용 폼 --> <!-- 자동저장용 폼 -->
<!--@if($enable_autosave)--> <!--@if($enable_autosave)-->
<input type="hidden" name="_saved_doc_title" value="{htmlspecialchars($saved_doc->title)}" /> <input type="hidden" name="_saved_doc_title" value="{htmlspecialchars($saved_doc->title)}" />
<input type="hidden" name="_saved_doc_content" value="{htmlspecialchars($saved_doc->content)}" /> <input type="hidden" name="_saved_doc_content" value="{htmlspecialchars($saved_doc->content)}" />
@ -33,7 +34,7 @@
<!--@end--> <!--@end-->
<!-- 에디터 --> <!-- 에디터 -->
<div class="xpress-editor {$colorset}"> <div class="xpress-editor">
<div id="smart_content"> <a href="#xe_iframe" class="skip">&raquo; {$lang->edit->jumptoedit}</a> <div id="smart_content"> <a href="#xe_iframe" class="skip">&raquo; {$lang->edit->jumptoedit}</a>
<!-- 편집 컴포넌트 --> <!-- 편집 컴포넌트 -->
@ -271,6 +272,78 @@
</div> </div>
<!-- /URL 레이어 --> <!-- /URL 레이어 -->
</li> </li>
<li class="character xpress_xeditor_ui_sCharacter">
<button type="button" title="{$lang->edit->special_character}"><span>{$lang->edit->special_character}</span></button>
<!-- 특수문자 레이어 -->
<div class="layer xpress_xeditor_sCharacter_layer" style="display:none">
<h3>{$lang->edit->insert_special_character}</h3>
<button type="button" class="close" title="{$lang->edit->close_special_character}"><span>{$lang->edit->close_special_character}</span></button>
<ul class="nav">
<li><a href="#character1" class="on">{$lang->edit->symbol}</a></li>
<li><a href="#character2">{$lang->edit->number_unit}</a></li>
<li><a href="#character3">{$lang->edit->circle_bracket}</a></li>
<li><a href="#character4">{$lang->edit->korean}</a></li>
<li><a href="#character5">{$lang->edit->greece},{$lang->edit->Latin}</a></li>
<li><a href="#character6">{$lang->edit->japan}</a></li>
</ul>
<ul style="display: block;" id="character1" class="list"></ul>
<ul style="display: none;" id="character2" class="list"></ul>
<ul style="display: none;" id="character3" class="list"></ul>
<ul style="display: none;" id="character4" class="list"></ul>
<ul style="display: none;" id="character5" class="list"></ul>
<ul style="display: none;" id="character6" class="list"></ul>
<p>
<label for="preview">{$lang->edit->selected_symbol}</label>
<input id="preview" name="" type="text" />
<button type="button" title="{$lang->confirm}"><span>{$lang->confirm}</span></button>
</p>
<button type="button" class="close" title="{$lang->edit->close_special_character}"><span>{$lang->edit->close_special_character}</span></button>
</div>
<!-- /특수문자 레이어 -->
</li>
<li class="find xpress_xeditor_ui_findAndReplace">
<button type="button" title="{$lang->cmd_find}"><span>{$lang->cmd_find}</span></button>
<!-- 찾기 바꾸기 레이어 -->
<div class="layer find xpress_xeditor_findAndReplace_layer" style="display:none">
<!-- class="layer find" | class="layer replace"-->
<h3>{$lang->edit->search_replace}</h3>
<button type="button" class="close" title="{$lang->edit->close_search_replace}"><span>{$lang->edit->close_search_replace}</span></button>
<div class="menu_tab">
<ul class="layer_tab">
<li class="tab1"><a href="#find" onclick="return false">{$lang->cmd_find}</a></li>
<li class="tab2"><a href="#replace" onclick="return false">{$lang->cmd_replace}</a></li>
</ul>
</div>
<div class="container">
<div class="bx" id="find">
<fieldset>
<label for="keyword1">{$lang->edit->search_words}</label>
<input id="keyword1" name="" type="text" />
</fieldset>
<span class="cap"></span> </div>
<div class="bx" id="replace">
<fieldset>
<label for="keyword2">{$lang->edit->search_words}</label>
<input id="keyword2" name="" type="text" />
<br />
<label for="keyword3">{$lang->edit->replace_words}</label>
<input id="keyword3" name="" type="text" />
</fieldset>
</div>
</div>
<div class="btn_area">
<button type="button" class="find_next" title="{$lang->edit->next_search_words}"><span>{$lang->edit->next_search_words}</span></button>
<button type="button" class="replace" title="{$lang->cmd_replace}"><span>{$lang->cmd_replace}</span></button>
<button type="button" class="replace_all" title="{$lang->edit->replace_all}"><span>{$lang->edit->replace_all}</span></button>
</div>
<button type="button" class="close" title="{$lang->edit->close_search_replace}"><span>{$lang->edit->close_search_replace}</span></button>
</div>
<!-- /찾기 바꾸기 레이어 -->
</li>
</ul>
<!--@end-->
<ul class="table">
<li class="table xpress_xeditor_ui_table"> <li class="table xpress_xeditor_ui_table">
<button type="button" title="{$lang->edit->table}"><span>{$lang->edit->table}</span></button> <button type="button" title="{$lang->edit->table}"><span>{$lang->edit->table}</span></button>
<!-- 표 레이어 --> <!-- 표 레이어 -->
@ -358,76 +431,10 @@
</div> </div>
<!-- /표 레이어 --> <!-- /표 레이어 -->
</li> </li>
<li class="character xpress_xeditor_ui_sCharacter"> <li class="merge xpress_xeditor_ui_merge_cells"><button type="button" title="{$lang->edit->merge_cells}"><span>{$lang->edit->merge_cells}</span></button></li>
<button type="button" title="{$lang->edit->special_character}"><span>{$lang->edit->special_character}</span></button> <li class="splitCol xpress_xeditor_ui_split_col"><button type="button" title="{$lang->edit->split_col}"><span>{$lang->edit->split_col}</span></button></li>
<!-- 특수문자 레이어 --> <li class="splitRow xpress_xeditor_ui_split_row"><button type="button" title="{$lang->edit->split_row}"><span>{$lang->edit->split_row}</span></button></li>
<div class="layer xpress_xeditor_sCharacter_layer" style="display:none">
<h3>{$lang->edit->insert_special_character}</h3>
<button type="button" class="close" title="{$lang->edit->close_special_character}"><span>{$lang->edit->close_special_character}</span></button>
<ul class="nav">
<li><a href="#character1" class="on">{$lang->edit->symbol}</a></li>
<li><a href="#character2">{$lang->edit->number_unit}</a></li>
<li><a href="#character3">{$lang->edit->circle_bracket}</a></li>
<li><a href="#character4">{$lang->edit->korean}</a></li>
<li><a href="#character5">{$lang->edit->greece},{$lang->edit->Latin}</a></li>
<li><a href="#character6">{$lang->edit->japan}</a></li>
</ul> </ul>
<ul style="display: block;" id="character1" class="list"></ul>
<ul style="display: none;" id="character2" class="list"></ul>
<ul style="display: none;" id="character3" class="list"></ul>
<ul style="display: none;" id="character4" class="list"></ul>
<ul style="display: none;" id="character5" class="list"></ul>
<ul style="display: none;" id="character6" class="list"></ul>
<p>
<label for="preview">{$lang->edit->selected_symbol}</label>
<input id="preview" name="" type="text" />
<button type="button" title="{$lang->confirm}"><span>{$lang->confirm}</span></button>
</p>
<button type="button" class="close" title="{$lang->edit->close_special_character}"><span>{$lang->edit->close_special_character}</span></button>
</div>
<!-- /특수문자 레이어 -->
</li>
<li class="find xpress_xeditor_ui_findAndReplace">
<button type="button" title="{$lang->cmd_find}"><span>{$lang->cmd_find}</span></button>
<!-- 찾기 바꾸기 레이어 -->
<div class="layer find xpress_xeditor_findAndReplace_layer" style="display:none">
<!-- class="layer find" | class="layer replace"-->
<h3>{$lang->edit->search_replace}</h3>
<button type="button" class="close" title="{$lang->edit->close_search_replace}"><span>{$lang->edit->close_search_replace}</span></button>
<div class="menu_tab">
<ul class="layer_tab">
<li class="tab1"><a href="#find" onclick="return false">{$lang->cmd_find}</a></li>
<li class="tab2"><a href="#replace" onclick="return false">{$lang->cmd_replace}</a></li>
</ul>
</div>
<div class="container">
<div class="bx" id="find">
<fieldset>
<label for="keyword1">{$lang->edit->search_words}</label>
<input id="keyword1" name="" type="text" />
</fieldset>
<span class="cap"></span> </div>
<div class="bx" id="replace">
<fieldset>
<label for="keyword2">{$lang->edit->search_words}</label>
<input id="keyword2" name="" type="text" />
<br />
<label for="keyword3">{$lang->edit->replace_words}</label>
<input id="keyword3" name="" type="text" />
</fieldset>
</div>
</div>
<div class="btn_area">
<button type="button" class="find_next" title="{$lang->edit->next_search_words}"><span>{$lang->edit->next_search_words}</span></button>
<button type="button" class="replace" title="{$lang->cmd_replace}"><span>{$lang->cmd_replace}</span></button>
<button type="button" class="replace_all" title="{$lang->edit->replace_all}"><span>{$lang->edit->replace_all}</span></button>
</div>
<button type="button" class="close" title="{$lang->edit->close_search_replace}"><span>{$lang->edit->close_search_replace}</span></button>
</div>
<!-- /찾기 바꾸기 레이어 -->
</li>
</ul>
<!--@end-->
<!--@if($enable_component)--> <!--@if($enable_component)-->
<ul class="extra2"> <ul class="extra2">
@ -437,7 +444,7 @@
<div class="layer extension2 xpress_xeditor_extension_layer" id="editorExtension_{$editor_sequence}"> <div class="layer extension2 xpress_xeditor_extension_layer" id="editorExtension_{$editor_sequence}">
<ul id="editor_component_{$editor_sequence}" class="editorComponent"> <ul id="editor_component_{$editor_sequence}" class="editorComponent">
<!--@foreach($component_list as $component_name => $component)--> <!--@foreach($component_list as $component_name => $component)-->
<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> <li><a href="#" onclick="return false;" id="component_{$editor_sequence}_{$component_name}">{$component->title}</a></li>
<!--@end--> <!--@end-->
</ul> </ul>
</div> </div>
@ -448,7 +455,7 @@
<!--@if($html_mode)--> <!--@if($html_mode)-->
<ul class="extra3"> <ul class="extra3">
<!-- HTML 모드 사용 --> <!-- HTML 모드 사용 -->
<li class="html"><span><button class="xpress_xeditor_mode_toggle_button" type="button" title="{$lang->edit->html_editor}">HTML</button></span></li> <li class="html"><span><button class="xpress_xeditor_mode_toggle_button" type="button" title="{$lang->edit->html_editor}">{$lang->edit->html_editor}</button></span></li>
<!--li class="preview"><span><button type="button" class="xpress_xeditor_preview_button" title="{$lang->cmd_preview}">{$lang->cmd_preview}</button></span></li--> <!--li class="preview"><span><button type="button" class="xpress_xeditor_preview_button" title="{$lang->cmd_preview}">{$lang->cmd_preview}</button></span></li-->
</ul> </ul>
<!--@end--> <!--@end-->
@ -508,7 +515,7 @@
<script type="text/javascript">//<![CDATA[ <script type="text/javascript">//<![CDATA[
var editor_path = "{$editor_path}"; var editor_path = "{$editor_path}";
var auto_saved_msg = "{$lang->msg_auto_saved}"; var auto_saved_msg = "{$lang->msg_auto_saved}";
var oEditor = editorStart_xe("{$editor_sequence}", "{$editor_primary_key_name}", "{$editor_content_key_name}", "{$editor_height}","{$colorset}"); var oEditor = editorStart_xe("{$editor_sequence}", "{$editor_primary_key_name}", "{$editor_content_key_name}", "{$editor_height}");
//]]></script> //]]></script>
<!--@end--> <!--@end-->

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Before After
Before After

View file

@ -2406,7 +2406,7 @@ xe.DialogLayerManager = jQuery.Class({
bModal = jQuery.$(bModal) || false; bModal = jQuery.$(bModal) || false;
if(!oLayer) return; if(!oLayer) return;
//if(jQuery.inArray(oLayer, this.aOpenedLayers)) return; if(jQuery.inArray(oLayer, this.aOpenedLayers)) return;
this.oApp.exec("POSITION_DIALOG_LAYER", [oLayer]); this.oApp.exec("POSITION_DIALOG_LAYER", [oLayer]);
@ -4819,13 +4819,13 @@ xe.XE_FindReplacePlugin = jQuery.Class({
this.oReplaceInput_Replacement = oTmp[1]; this.oReplaceInput_Replacement = oTmp[1];
this.oFindNextButton = jQuery("BUTTON.find_next", this.oUILayer).get(0); this.oFindNextButton = jQuery("BUTTON.find_next", this.oUILayer).get(0);
//this.oCancelButton = jQuery("BUTTON.cancel", this.oUILayer).get(0); this.oCancelButton = jQuery("BUTTON.cancel", this.oUILayer).get(0);
this.oReplaceButton = jQuery("BUTTON.replace", this.oUILayer).get(0); this.oReplaceButton = jQuery("BUTTON.replace", this.oUILayer).get(0);
this.oReplaceAllButton = jQuery("BUTTON.replace_all", this.oUILayer).get(0); this.oReplaceAllButton = jQuery("BUTTON.replace_all", this.oUILayer).get(0);
this.aCloseButtons = jQuery("BUTTON.close", this.oUILayer).get(); this.aCloseButtons = jQuery("BUTTON.close", this.oUILayer).get();
//this.aCloseButtons[this.aCloseButtons.length] = this.oCancelButton; this.aCloseButtons[this.aCloseButtons.length] = this.oCancelButton;
}, },
$ON_MSG_APP_READY : function(){ $ON_MSG_APP_READY : function(){
@ -5424,7 +5424,9 @@ var
regex_style = /style\s*=\s*(?:\s*"(.*?)"|\s*'(.*?)'|([^\s>]+))/i, regex_style = /style\s*=\s*(?:\s*"(.*?)"|\s*'(.*?)'|([^\s>]+))/i,
regex_font_weight = /font-weight\s*:\s*([a-z]+);?/i, regex_font_weight = /font-weight\s*:\s*([a-z]+);?/i,
regex_font_style = /font-style\s*:\s*italic;?/i, regex_font_style = /font-style\s*:\s*italic;?/i,
regex_font_decoration = /text-decoration\s*:\s*([a-z -]+);?/i; regex_font_decoration = /text-decoration\s*:\s*([a-z -]+);?/i,
regex_jquery = /jQuery\d+\s*=(\s*"\d+"|\d+)/g,
regex_quote_attr = /([\w-]+)=([\w-]+)/g;
var var
allow_tags = 'a,abbr,acronym,address,area,blockquote,br,caption,center,cite,code,col,colgroup,dd,del,dfn,div,dl,dt,em,embed,h1,h2,h3,h4,h5,h6,hr,img,ins,kbd,li,map,object,ol,p,param,pre,q,samp,span,strong,sub,sup,table,tbody,td,tfoot,th,thead,tr,tt,u,ul,var'.split(','), allow_tags = 'a,abbr,acronym,address,area,blockquote,br,caption,center,cite,code,col,colgroup,dd,del,dfn,div,dl,dt,em,embed,h1,h2,h3,h4,h5,h6,hr,img,ins,kbd,li,map,object,ol,p,param,pre,q,samp,span,strong,sub,sup,table,tbody,td,tfoot,th,thead,tr,tt,u,ul,var'.split(','),
@ -5470,6 +5472,14 @@ xe.XE_XHTMLFormatter = $.Class({
// remove all scripts // remove all scripts
sContent = sContent.replace(regex_script, ''); sContent = sContent.replace(regex_script, '');
if (jQuery.browser.msie) {
// remove jQuery attributes
sContent = sContent.replace(regex_jquery, '');
// quote all attrs
sContent = sContent.replace(regex_quote_attr, '$1="$2"');
}
// remove all useless tag and enclose tags // remove all useless tag and enclose tags
regex = /<(\/)?([:\w\/-]+)(.*?)>/ig; regex = /<(\/)?([:\w\/-]+)(.*?)>/ig;
sContent = sContent.replace(regex, function(m0,m1,m2,m3){ sContent = sContent.replace(regex, function(m0,m1,m2,m3){
@ -5828,7 +5838,7 @@ xe.XE_Table = jQuery.Class({
var rowspan = all_rows.index(end_tr.get(0)) - all_rows.index(start_tr.get(0)) + this._getSpan(cell.eq(cell.length-1), 'row'); var rowspan = all_rows.index(end_tr.get(0)) - all_rows.index(start_tr.get(0)) + this._getSpan(cell.eq(cell.length-1), 'row');
// 첫번째 셀 colspan, rowspan 속성 지정 // 첫번째 셀 colspan, rowspan 속성 지정
cell.eq(0).attr('colspan', colspan).attr('rowspan', rowspan); cell.eq(0).attr('colSpan', colspan).attr('rowSpan', rowspan);
// 첫번째 셀을 제외한 다른 모든 셀 제거 // 첫번째 셀을 제외한 다른 모든 셀 제거
cell.slice(1).remove(); cell.slice(1).remove();
@ -5865,14 +5875,15 @@ xe.XE_Table = jQuery.Class({
// rowspan > 1이면 현재 셀의 rowspan을 절반으로 분할한다. // rowspan > 1이면 현재 셀의 rowspan을 절반으로 분할한다.
if (rowspan > 1) { if (rowspan > 1) {
topspan = Math.ceil(rowspan/2); topspan = Math.ceil(rowspan/2);
botspan = rowspan - topspan; botspan = rowspan - topspan;
queue.push(function(){ queue.push(function(){
(topspan > 1)?t.attr('rowspan', topspan):t.removeAttr('rowspan'); t.attr('rowSpan', topspan);
}); });
(botspan > 1)?clone.attr('rowspan', botspan):clone.removeAttr('rowspan'); clone.attr('rowSpan', botspan);
} else { } else {
// rowspan이 없으면 현재 셀과 영역이 겹치는 모든 셀에 rowspan을 추가 // rowspan이 없으면 현재 셀과 영역이 겹치는 모든 셀에 rowspan을 추가
cell.filter(function(){ cell.filter(function(){
@ -5891,14 +5902,17 @@ xe.XE_Table = jQuery.Class({
// rowspan 1 추가 // rowspan 1 추가
queue.push(function(){ queue.push(function(){
tt.attr('rowspan', sp); tt.attr('rowSpan', sp);
}); });
}); });
// 새 줄을 추가한다. // 새 줄을 추가한다.
if (jQuery.browser.msie) {
// Fix bug for IE
row.after(row.clone().empty().get(0).outerHTML);
} else {
row.after(row.clone().empty()); row.after(row.clone().empty());
}
clone.removeAttr('rowspan');
} }
var rows = row.nextAll('tr'); var rows = row.nextAll('tr');
@ -5911,18 +5925,28 @@ xe.XE_Table = jQuery.Class({
return ( self._getRect(jQuery(this)).left > rect.left ); return ( self._getRect(jQuery(this)).left > rect.left );
}); });
next_sib.length?next_sib.eq(0).before(clone):rows.eq(topspan-1).append(clone); if (jQuery.browser.msie) {
next_sib.length?
next_sib.eq(0).before(clone.get(0).outerHTML):
rows.eq(topspan-1).append(clone.get(0).outerHTML);
} else {
next_sib.length?
next_sib.slice(0,1).before(clone):
rows.slice(topspan-1,1).append(clone);
}
} }
// 함수를 바로 실행하면 좌표가 틀어지므로, 큐에 넣은 후 실행 // 함수를 바로 실행하면 좌표가 틀어지므로, 큐에 넣은 후 실행
jQuery.each(queue, function(){ this(); }); jQuery.each(queue, function(){ this(); });
}); });
}, },
$ON_CELL_SPLIT_BY_COL : function(many) { $ON_CELL_SPLIT_BY_COL : function(many) {
var cell = jQuery('.xe_selected_cell', this.oApp.getWYSIWYGDocument()).filter('td,th'); var cell = jQuery('.xe_selected_cell', this.oApp.getWYSIWYGDocument()).filter('td,th');
var table = cell.parents('table').eq(0); var table = cell.parents('table').slice(0,1);
var self = this; var self = this;
var ie_bug = [], tmpId = (new Date).getTime(), tmpStr = '';
// 선택된 셀이 없으면 종료 // 선택된 셀이 없으면 종료
if (!cell.length) return; if (!cell.length) return;
@ -5940,7 +5964,7 @@ xe.XE_Table = jQuery.Class({
var rect = self._getRect(jQuery(this)); var rect = self._getRect(jQuery(this));
return !(rect.right <= _left || rect.left >= _right); return !(rect.right <= _left || rect.left >= _right);
})).filter('.xe_selected_cell').each(function(){ })).filter('.xe_selected_cell').each(function(idx){
var t = jQuery(this); var t = jQuery(this);
var colspan = self._getSpan(t, 'col'); var colspan = self._getSpan(t, 'col');
var clone = t.clone().html('<br />'); var clone = t.clone().html('<br />');
@ -5950,8 +5974,8 @@ xe.XE_Table = jQuery.Class({
var leftspan = Math.ceil(colspan/2); var leftspan = Math.ceil(colspan/2);
var rightspan = colspan - leftspan; var rightspan = colspan - leftspan;
(leftspan > 1)?t.attr('colspan', leftspan):t.removeAttr('colspan'); t.attr('colSpan', leftspan);
(rightspan > 1)?clone.attr('colspan', rightspan):clone.removeAttr('colspan'); clone.attr('colSpan', rightspan);
} else { } else {
// colspan이 없으면 현재 셀과 영역이 겹치는 모든 셀에 colspan을 추가 // colspan이 없으면 현재 셀과 영역이 겹치는 모든 셀에 colspan을 추가
var rect = self._getRect(t); var rect = self._getRect(t);
@ -5970,13 +5994,18 @@ xe.XE_Table = jQuery.Class({
var tt = jQuery(this); var tt = jQuery(this);
// colspan 1 추가 // colspan 1 추가
tt.attr('colspan', self._getSpan(tt, 'col')+1); tt.attr('colSpan', self._getSpan(tt, 'col')+1);
}); });
clone.removeAttr('colspan'); clone.attr('colSpan', 1);
} }
if (jQuery.browser.msie) {
// Fix for IE bug
t.after(clone.get(0).outerHTML);
} else {
t.after(clone); t.after(clone);
}
}); });
}, },

View file

@ -21,7 +21,7 @@ function editorStart_xe(editor_sequence, primary_key, content_key, editor_height
jQuery("#xpress-editor-"+editor_sequence).val(saved_content); jQuery("#xpress-editor-"+editor_sequence).val(saved_content);
} }
/* /*
// remove procFilter // remove procFilter
if(form.comment_srl){ if(form.comment_srl){
form.onsubmit=function(){ form.onsubmit=function(){
@ -53,8 +53,8 @@ function editorStart_xe(editor_sequence, primary_key, content_key, editor_height
oEditor.getFrame = function(){ return oWYSIWYGIFrame;} oEditor.getFrame = function(){ return oWYSIWYGIFrame;}
var content = form[content_key].value; var content = form[content_key].value;
var srcPathRegx = /src=("|\'){1}(\.\/)?(files\/attach|files\/cache|files\/faceOff|files\/member_extra_info|modules|common|widgets|widgetstyle|layouts|addons)\/([^"\']+)\.(jpg|jpeg|png|gif)("|\'){1}/g; var srcPathRegx = /src=("|\'){1}(\.\/)?(files\/attach|files\/cache|files\/faceOff|files\/member_extra_info|modules|common|widgets|widgetstyle|layouts|addons)\/([^"\']+)\.(jpg|jpeg|png|gif)("|\'){1}/g; //'
var hrefPathRegx = /href=("|\'){1}(\.\/)?\?([^"\']+)("|\'){1}/g; var hrefPathRegx = /href=("|\'){1}(\.\/)?\?([^"\']+)("|\'){1}/g; //'
content = content.replace(srcPathRegx, 'src="'+request_uri+'$3/$4.$5"'); content = content.replace(srcPathRegx, 'src="'+request_uri+'$3/$4.$5"');
content = content.replace(hrefPathRegx, 'href="'+request_uri+'?$3"'); content = content.replace(hrefPathRegx, 'href="'+request_uri+'?$3"');
form[content_key].value = content; form[content_key].value = content;
@ -86,6 +86,7 @@ function editorStart_xe(editor_sequence, primary_key, content_key, editor_height
oEditor.registerPlugin(new xe.XE_WYSIWYGStyleGetter()); oEditor.registerPlugin(new xe.XE_WYSIWYGStyleGetter());
oEditor.registerPlugin(new xe.MessageManager(oMessageMap)); oEditor.registerPlugin(new xe.MessageManager(oMessageMap));
oEditor.registerPlugin(new xe.XE_Toolbar(elAppContainer)); oEditor.registerPlugin(new xe.XE_Toolbar(elAppContainer));
oEditor.registerPlugin(new xe.XE_XHTMLFormatter); oEditor.registerPlugin(new xe.XE_XHTMLFormatter);
oEditor.registerPlugin(new xe.XE_GET_WYSYWYG_MODE(editor_sequence)); oEditor.registerPlugin(new xe.XE_GET_WYSYWYG_MODE(editor_sequence));
oEditor.registerPlugin(new xe.XE_GET_WYSYWYG_CONTENT()); oEditor.registerPlugin(new xe.XE_GET_WYSYWYG_CONTENT());
@ -165,11 +166,11 @@ function editorGetIframe(srl) {
function editorReplaceHTML(iframe_obj, text) { function editorReplaceHTML(iframe_obj, text) {
// 이미지 경로 재지정 (rewrite mod) // 이미지 경로 재지정 (rewrite mod)
var srcPathRegx = /src=("|\'){1}(\.\/)?(files\/attach|files\/cache|files\/faceOff|files\/member_extra_info|modules|common|widgets|widgetstyle|layouts|addons)\/([^"\']+)\.(jpg|jpeg|png|gif)("|\'){1}/g; var srcPathRegx = /src=("|\'){1}(\.\/)?(files\/attach|files\/cache|files\/faceOff|files\/member_extra_info|modules|common|widgets|widgetstyle|layouts|addons)\/([^"\']+)\.(jpg|jpeg|png|gif)("|\'){1}/g;//'
text = text.replace(srcPathRegx, 'src="'+request_uri+'$3/$4.$5"'); text = text.replace(srcPathRegx, 'src="'+request_uri+'$3/$4.$5"');
// href 경로 재지정 (rewrite mod) // href 경로 재지정 (rewrite mod)
var hrefPathRegx = /href=("|\'){1}(\.\/)?\?([^"\']+)("|\'){1}/g; var hrefPathRegx = /href=("|\'){1}(\.\/)?\?([^"\']+)("|\'){1}/g;//'
text = text.replace(hrefPathRegx, 'href="'+request_uri+'?$3"'); text = text.replace(hrefPathRegx, 'href="'+request_uri+'?$3"');
var srl = parseInt(iframe_obj.id.replace(/^.*_/,''),10); var srl = parseInt(iframe_obj.id.replace(/^.*_/,''),10);
@ -198,8 +199,8 @@ xe.XE_GET_WYSYWYG_CONTENT = jQuery.Class({
}, },
TO_WYSIWYG_SET : function(content) { TO_WYSIWYG_SET : function(content) {
var srcPathRegx = /src=("|\'){1}(\.\/)?(files\/attach|files\/cache|files\/faceOff|files\/member_extra_info|modules|common|widgets|widgetstyle|layouts|addons)\/([^"\']+)\.(jpg|jpeg|png|gif)("|\'){1}/g; var srcPathRegx = /src=("|\'){1}(\.\/)?(files\/attach|files\/cache|files\/faceOff|files\/member_extra_info|modules|common|widgets|widgetstyle|layouts|addons)\/([^"\']+)\.(jpg|jpeg|png|gif)("|\'){1}/g;//'
var hrefPathRegx = /href=("|\'){1}(\.\/)?\?([^"\']+)("|\'){1}/g; var hrefPathRegx = /href=("|\'){1}(\.\/)?\?([^"\']+)("|\'){1}/g;//'
content = content.replace(srcPathRegx, 'src="'+request_uri+'$3/$4.$5"'); content = content.replace(srcPathRegx, 'src="'+request_uri+'$3/$4.$5"');
content = content.replace(hrefPathRegx, 'href="'+request_uri+'?$3"'); content = content.replace(hrefPathRegx, 'href="'+request_uri+'?$3"');
return content; return content;