git-svn-id: http://xe-core.googlecode.com/svn/trunk@293 201d5d3c-b55e-5fd7-737f-ddc643e51545

This commit is contained in:
zero 2007-03-07 06:49:24 +00:00
parent af50e40164
commit 2aebd5960f
17 changed files with 303 additions and 215 deletions

View file

@ -10,7 +10,7 @@ String.prototype.trim = function() {
// 주어진 인자가 하나라도 defined되어 있지 않으면 false return // 주어진 인자가 하나라도 defined되어 있지 않으면 false return
function isDef() { function isDef() {
for(var i=0; i<arguments.length; ++i) { for(var i=0; i<arguments.length; ++i) {
if(typeof(arguments[i])=='undefined') return false; if(typeof(arguments[i])=="undefined") return false;
} }
return true; return true;
} }
@ -18,31 +18,31 @@ function isDef() {
// 특정 div(or span...)의 display옵션 토글 // 특정 div(or span...)의 display옵션 토글
function toggleDisplay(obj, opt) { function toggleDisplay(obj, opt) {
obj = xGetElementById(obj); obj = xGetElementById(obj);
if(typeof(opt)=='undefined') opt = 'inline'; if(typeof(opt)=="undefined") opt = "inline";
if(obj.style.display == 'none') obj.style.display = opt; if(obj.style.display == "none") obj.style.display = opt;
else obj.style.display = 'none'; else obj.style.display = "none";
} }
// 멀티미디어 출력용 (IE에서 플래쉬/동영상 주변에 점선 생김 방지용) // 멀티미디어 출력용 (IE에서 플래쉬/동영상 주변에 점선 생김 방지용)
function displayMultimedia(type, src, style) { function displayMultimedia(type, src, style) {
var clsid = ''; var clsid = "";
var codebase = ''; var codebase = "";
var html = ''; var html = "";
switch(type) { switch(type) {
case 'flv' : case "flv" :
case 'swf' : case "swf" :
clsid = 'clsid:D27CDB6E-AE6D-11cf-96B8-444553540000'; clsid = "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000";
codebase = 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.c-ab#version=6,0,29,0'; codebase = "http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.c-ab#version=6,0,29,0";
html = ""+ html = ""+
"<object classid='"+clsid+"' codebase='"+codebase+"' "+style+">"+ "<object classid=\""+clsid+"\" codebase=\""+codebase+"\" "+style+">"+
"<param name='movie' value='"+src+"' />"+ "<param name=\"movie\" value=\""+src+"\" />"+
"<param name='quality' value='high' />"+ "<param name=\"quality\" value=\"high\" />"+
"<embed src='"+src+"' autostart='0' "+style+"></embed>"+ "<embed src=\""+src+"\" autostart=\"0\" "+style+"></embed>"+
"<\/object>"; "<\/object>";
break; break;
default : default :
html = ""+ html = ""+
"<embed src='"+src+"' autostart='0' "+style+"></embed>"; "<embed src=\""+src+"\" autostart=\"0\" "+style+"></embed>";
break; break;
} }
@ -51,7 +51,7 @@ function displayMultimedia(type, src, style) {
// 화면내에서 이미지 리사이즈 및 클릭할 수 있도록 // 화면내에서 이미지 리사이즈 및 클릭할 수 있도록
function resizeImageContents() { function resizeImageContents() {
var objs = xGetElementsByTagName('img'); var objs = xGetElementsByTagName("img");
for(var i in objs) { for(var i in objs) {
var obj = objs[i]; var obj = objs[i];
var parent = xParent(obj); var parent = xParent(obj);
@ -61,15 +61,15 @@ function resizeImageContents() {
var obj_width = xWidth(obj); var obj_width = xWidth(obj);
if(parent_width>=obj_width) continue; if(parent_width>=obj_width) continue;
obj.style.cursor = 'pointer'; obj.style.cursor = "pointer";
obj.source_width = obj_width; obj.source_width = obj_width;
obj.source_height = xHeight(obj); obj.source_height = xHeight(obj);
xWidth(obj, xWidth(parent)-1); xWidth(obj, xWidth(parent)-1);
xAddEventListener(obj,'click', resizeImagePopup); xAddEventListener(obj,"click", resizeImagePopup);
} }
} }
xAddEventListener(window, 'load', resizeImageContents); xAddEventListener(window, "load", resizeImageContents);
function resizeImagePopup(evt) { function resizeImagePopup(evt) {
var e = new xEvent(evt); var e = new xEvent(evt);
@ -129,7 +129,7 @@ function setFixedPopupSize() {
if(xIE4Up) { if(xIE4Up) {
var i=0; var i=0;
while(i<2) { while(i<2) {
var height = xHeight(xGetElementById('popup_content')); var height = xHeight(xGetElementById("popup_content"));
if(xGetBodyHeight()!=height) window.resizeBy(0, height-xGetBodyHeight()); if(xGetBodyHeight()!=height) window.resizeBy(0, height-xGetBodyHeight());
i++; i++;
} }

231
common/js/tree_menu.js Normal file
View file

@ -0,0 +1,231 @@
/**
* @file tree_menu.js
* @author zero (zero@nzeo.com)
* @brief xml파일을 읽어서 트리 메뉴를 그려줌
*
* 일단 이것 저것 꽁수가 들어간 것이긴 한데 속도나 기타 면에서 쓸만함...
* 언제나 그렇듯 필요하신 분은 가져가서 쓰세요.
* 다만 제로보드에 특화되어 있어서....
**/
// 아이콘을 미리 생성해 놓음
var tree_folder_icon = new Image();
tree_folder_icon.src = "./common/tpl/images/folder.gif";
var tree_open_folder_icon = new Image();
tree_open_folder_icon.src = "./common/tpl/images/imgfolder.gif";
var tree_minus_icon = new Image();
tree_minus_icon.src = "./common/tpl/images/minus.gif";
var tree_minus_bottom_icon = new Image();
tree_minus_bottom_icon.src = "./common/tpl/images/minusbottom.gif";
var tree_plus_icon = new Image();
tree_plus_icon.src = "./common/tpl/images/plus.gif";
var tree_plus_bottom_icon = new Image();
tree_plus_bottom_icon.src = "./common/tpl/images/plusbottom.gif";
// 폴더를 모두 열고/닫기 위한 변수 설정
var tree_menu_folder_list = new Array();
// 트리메뉴의 정보를 담고 있는 xml파일을 읽고 drawTreeMenu()를 호출하는 함수
function loadTreeMenu(url, menu_id, zone_id, title) {
// 일단 그릴 곳을 찾아서 사전 작업을 함 (그릴 곳이 없다면 아예 시도를 안함)
var zone = xGetElementById(zone_id);
if(typeof(zone)=="undefined") return;
// 노드 추가를 위한 빈 div하나 입력해 넣음
xInnerHtml(zone, "");
// xml_handler를 이용해서 직접 메뉴 xml파일(layout module에서 생성)을 읽음
var oXml = new xml_handler();
oXml.reset();
oXml.xml_path = url;
// menu_id, zone_id는 계속 달고 다녀야함
var param = {menu_id:menu_id, zone_id:zone_id, title:title}
// 요청후 drawTreeMenu()함수를 호출
oXml.request(drawTreeMenu, oXml, null, null, param);
}
// 트리메뉴 XML정보를 이용해서 정해진 zone에 출력
function drawTreeMenu(oXml, callback_func, resopnse_tags, param) {
// 그리기 위한 object를 찾아 놓음
var menu_id = param.menu_id;
var zone_id = param.zone_id;
var title = param.title;
var zone = xGetElementById(zone_id);
var html = "";
html = '<div style="height:20px;"><img src="./common/tpl/images/folder.gif" alt="root" align="top" />'+title+'</div>';
tree_menu_folder_list[menu_id] = new Array();
// xml 정보가 들어올때까지 대기 (async)
var xmlDoc = oXml.getResponseXml();
if(xmlDoc) {
// node 태그에 해당하는 값들을 가져옴
var node_list = xmlDoc.getElementsByTagName("node");
if(node_list.length>0) {
var root = xmlDoc.getElementsByTagName("root")[0];
html += drawNode(root, menu_id);
}
}
xInnerHtml(zone, html);
}
// root부터 시작해서 recursive하게 노트를 표혐
function drawNode(parent_node, menu_id) {
var html = '';
for (var i=0; i< parent_node.childNodes.length; i++) {
var node = parent_node.childNodes.item(i);
if(node.nodeName!="node") continue;
// 자식 노드가 있는지 확인
var hasChild = false;
if(node.hasChildNodes()) hasChild = true;
// nextSibling가 있는지 확인
var hasNextSibling = false;
if(i==parent_node.childNodes.length-1) hasNextSibling = true;
// 아이콘 설정
var line_icon = null;
var folder_icon = null;
// 자식 노드가 있는지 확인하여 있으면 아이콘을 바꿈
if(hasChild) {
if(!hasNextSibling) {
line_icon = "minus";
folder_icon = "folder";
} else {
line_icon = "minusbottom";
folder_icon = "folder";
}
} else {
if(hasNextSibling) {
line_icon = "joinbottom";
folder_icon = "page";
} else {
line_icon = "join";
folder_icon = "page";
}
}
var node_srl = node.getAttribute("node_srl");
var text = node.getAttribute("text");
var zone_id = "menu_"+menu_id+"_"+node_srl;
tree_menu_folder_list[menu_id][tree_menu_folder_list[menu_id].length] = zone_id;
html += ''+
'<div id="'+zone_id+'" style="margin:0px;font-size:9pt;">'+
'';
if(hasChild)
html+= ''+
'<span style="cursor:pointer;" onclick="toggleFolder(\''+zone_id+'\');return false;">'+
'';
else
html+= ''+
'<span>'+
'';
html += ''+
'<img id="'+zone_id+'_line_icon" src="./common/tpl/images/'+line_icon+'.gif" alt="line" align="top" />'+
'<img id="'+zone_id+'_folder_icon" src="./common/tpl/images/'+folder_icon+'.gif" alt="folder" align="top" />'+
'</span>'+
'<span id="'+zone_id+'_node" style="padding:1px 2px 1px 2px;margin-top:1px;cursor:pointer;" onclick="selectNode(\''+zone_id+'\')">'+
text+
'</span>'+
'';
if(node.childNodes.length) {
zone_id = zone_id+"_child";
tree_menu_folder_list[menu_id][tree_menu_folder_list[menu_id].length] = zone_id;
if(!hasNextSibling) html += '<div id="'+zone_id+'"style="display:none;padding-left:18px;background:url(./common/tpl/images/line.gif) repeat-y left;">'+drawNode(node, menu_id)+'</div>';
else html += '<div id="'+zone_id+'" style="display:none;padding-left:18px;">'+drawNode(node, menu_id)+'</div>';
}
html += ''+
'</div>'
'';
}
return html;
}
// 노드의 폴더 아이콘 클릭시
function toggleFolder(zone_id) {
// 아이콘을 클릭한 대상을 찾아봄
var child_zone = xGetElementById(zone_id+"_child");
if(!child_zone) return;
// 대상의 아이콘들 찾음
var line_icon = xGetElementById(zone_id+'_line_icon');
var folder_icon = xGetElementById(zone_id+'_folder_icon');
// 대상의 자식 노드들이 숨겨져 있다면 열고 아니면 닫기
if(child_zone.style.display == "block") {
child_zone.style.display = "none";
if(line_icon.src.indexOf('bottom')>0) line_icon.src = tree_minus_bottom_icon.src;
else line_icon.src = tree_minus_icon.src;
folder_icon.src = tree_folder_icon.src;
} else {
if(line_icon.src.indexOf('bottom')>0) line_icon.src = tree_plus_bottom_icon.src;
else line_icon.src = tree_plus_icon.src;
folder_icon.src = tree_open_folder_icon.src;
child_zone.style.display = "block";
}
}
// 노드의 글자 선택시
var prev_selected_node = null;
function selectNode(zone_id) {
// 이전에 선택된 노드가 있었다면 원래데로 돌림
if(prev_selected_node) {
prev_selected_node.style.backgroundColor = "#ffffff";
prev_selected_node.style.fontWeight = "normal";
prev_selected_node.style.color = "#000000";
}
// 선택된 노드를 찾아봄
var node_zone = xGetElementById(zone_id+'_node');
if(!node_zone) return;
// 선택된 노드의 글자를 변경
node_zone.style.backgroundColor = "#000000";
node_zone.style.fontWeight = "bold";
node_zone.style.color = "#FFFFFF";
prev_selected_node = node_zone;
}
// 모두 닫기
function closeAllTreeMenu(menu_id) {
for(var i in tree_menu_folder_list[menu_id]) {
var zone_id = tree_menu_folder_list[menu_id][i];
var zone = xGetElementById(zone_id);
if(!zone) continue;
var child_zone = xGetElementById(zone_id+"_child");
if(!child_zone) continue;
child_zone.style.display = "block";
toggleFolder(zone_id);
}
}
// 모두 열기
function openAllTreeMenu(menu_id) {
for(var i in tree_menu_folder_list[menu_id]) {
var zone_id = tree_menu_folder_list[menu_id][i];
var zone = xGetElementById(zone_id);
if(!zone) continue;
var child_zone = xGetElementById(zone_id+"_child");
if(!child_zone) continue;
child_zone.style.display = "none";
toggleFolder(zone_id);
}
}

View file

@ -1,49 +1,49 @@
/** /**
* @file : common/js/xml_handler.js * @file common/js/xml_handler.js
* @author : zero <zero@nzeo.com> * @author zero <zero@nzeo.com>
* @desc : ajax 사용을 위한 기본 js * @brief ajax 사용을 위한 기본 js
**/ **/
// xml handler을 이용하는 user function // xml handler을 이용하는 user function
function exec_xml(module, act, params, callback_func, response_tags, callback_func_arg, fo_obj) { function exec_xml(module, act, params, callback_func, response_tags, callback_func_arg, fo_obj) {
var oXml = new xml_handler(); var oXml = new xml_handler();
oXml.reset(); oXml.reset();
for(var key in params) { for(var key in params) {
var val = params[key]; var val = params[key];
oXml.addParam(key, val); oXml.addParam(key, val);
} }
oXml.addParam('module', module); oXml.addParam("module", module);
oXml.addParam('act', act); oXml.addParam("act", act);
response_tags[response_tags.length] = 'redirect_url'; response_tags[response_tags.length] = "redirect_url";
var waiting_obj = document.getElementById('waitingforserverresponse'); var waiting_obj = document.getElementById("waitingforserverresponse");
waiting_obj.style.visibility = 'visible'; waiting_obj.style.visibility = "visible";
oXml.request(xml_response_filter, oXml, callback_func, response_tags, callback_func_arg, fo_obj); oXml.request(xml_response_filter, oXml, callback_func, response_tags, callback_func_arg, fo_obj);
} }
// 결과 처리 후 callback_func에 넘겨줌 // 결과 처리 후 callback_func에 넘겨줌
function xml_response_filter(oXml, callback_func, response_tags, callback_func_arg, fo_obj) { function xml_response_filter(oXml, callback_func, response_tags, callback_func_arg, fo_obj) {
var xmlDoc = oXml.getResponseXml(); var xmlDoc = oXml.getResponseXml();
if(!xmlDoc) return; if(!xmlDoc) return null;
var waiting_obj = document.getElementById('waitingforserverresponse'); var waiting_obj = document.getElementById("waitingforserverresponse");
waiting_obj.style.visibility = 'hidden'; waiting_obj.style.visibility = "hidden";
var ret_obj = oXml.toZMsgObject(xmlDoc, response_tags);
if(ret_obj['error']!=0) {
alert(ret_obj['message']);
return;
}
callback_func(ret_obj, response_tags, callback_func_arg, fo_obj); var ret_obj = oXml.toZMsgObject(xmlDoc, response_tags);
if(ret_obj["error"]!=0) {
alert(ret_obj["message"]);
return;
}
callback_func(ret_obj, response_tags, callback_func_arg, fo_obj);
} }
// xml handler // xml handler
function xml_handler() { function xml_handler() {
this.obj_xmlHttp = null; this.obj_xmlHttp = null;
this.method_name = null; this.method_name = null;
if(location.href.indexOf('admin.php')>0) this.xml_path = "./admin.php"; this.xml_path = "./index.php";
else this.xml_path = "./index.php";
this.params = new Array(); this.params = new Array();
@ -71,25 +71,25 @@ function zGetXmlHttp() {
} }
function xml_handlerRequest(callBackFunc, xmlObj, callBackFunc2, response_tags, callback_func_arg, fo_obj) { function xml_handlerRequest(callBackFunc, xmlObj, callBackFunc2, response_tags, callback_func_arg, fo_obj) {
var rd = ""; var rd = "";
rd += "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n" rd += "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n"
+ "<methodCall>\n" + "<methodCall>\n"
+ "<params>\n" + "<params>\n"
for (var key in this.params) { for (var key in this.params) {
var val = this.params[key]; var val = this.params[key];
rd += "<"+key+"><![CDATA["+val+"]]></"+key+">\n"; rd += "<"+key+"><![CDATA["+val+"]]></"+key+">\n";
} }
rd += "</params>\n" rd += "</params>\n"
+ "</methodCall>\n"; + "</methodCall>\n";
if(this.obj_xmlHttp.readyState!=0) { if(this.obj_xmlHttp.readyState!=0) {
this.obj_xmlHttp.abort(); this.obj_xmlHttp.abort();
this.obj_xmlHttp = this.getXmlHttp(); this.obj_xmlHttp = this.getXmlHttp();
} }
this.obj_xmlHttp.onreadystatechange = function () {callBackFunc(xmlObj, callBackFunc2, response_tags, callback_func_arg, fo_obj)}; this.obj_xmlHttp.onreadystatechange = function () {callBackFunc(xmlObj, callBackFunc2, response_tags, callback_func_arg, fo_obj)};
this.obj_xmlHttp.open('POST', this.xml_path, true); this.obj_xmlHttp.open("POST", this.xml_path, true);
this.obj_xmlHttp.send(rd); this.obj_xmlHttp.send(rd);
} }
@ -119,14 +119,14 @@ function xml_handlerGetResponseXML() {
function xml_handlerToZMsgObject(xmlDoc, tags) { function xml_handlerToZMsgObject(xmlDoc, tags) {
if(!xmlDoc) return null; if(!xmlDoc) return null;
if(!tags) { if(!tags) {
tags = new Array('error','message'); tags = new Array("error","message");
} }
var obj_ret = new Array(); var obj_ret = new Array();
for(var i=0; i<tags.length; i++) { for(var i=0; i<tags.length; i++) {
try { try {
obj_ret[tags[i]] = xmlDoc.getElementsByTagName(tags[i])[0].firstChild.nodeValue; obj_ret[tags[i]] = xmlDoc.getElementsByTagName(tags[i])[0].firstChild.nodeValue;
} catch(e) { } catch(e) {
obj_ret[tags[i]] = ''; obj_ret[tags[i]] = "";
} }
} }
return obj_ret; return obj_ret;

View file

@ -37,6 +37,8 @@
$lang->cmd_select = "선택"; $lang->cmd_select = "선택";
$lang->cmd_select_all = "모두선택"; $lang->cmd_select_all = "모두선택";
$lang->cmd_unselect_all = "모두해제"; $lang->cmd_unselect_all = "모두해제";
$lang->cmd_close_all = "모두닫기";
$lang->cmd_open_all = "모두열기";
$lang->enable = '가능'; $lang->enable = '가능';
$lang->disable = '불가능'; $lang->disable = '불가능';

View file

@ -3,16 +3,17 @@
<head> <head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>{Context::getBrowserTitle()}</title> <title>{Context::getBrowserTitle()}</title>
<script type='text/javascript' src='./common/js/x.js'></script> <script type="text/javascript" src="./common/js/x.js"></script>
<script type='text/javascript' src='./common/js/common.js'></script> <script type="text/javascript" src="./common/js/common.js"></script>
<script type='text/javascript' src='./common/js/xml_handler.js'></script> <script type="text/javascript" src="./common/js/xml_handler.js"></script>
<script type='text/javascript' src='./common/js/xml_js_filter.js'></script> <script type="text/javascript" src="./common/js/xml_js_filter.js"></script>
<script type="text/javascript" src="./common/js/tree_menu.js"></script>
<!--@foreach(Context::getJsFile() as $key => $js_file)--> <!--@foreach(Context::getJsFile() as $key => $js_file)-->
<script type='text/javascript' src='{$js_file}'></script> <script type="text/javascript" src="{$js_file}"></script>
<!--@end--> <!--@end-->
<link rel='stylesheet' HREF='./common/css/default.css' type='text/css' /> <link rel="stylesheet" HREF="./common/css/default.css" type="text/css" />
<!--@foreach(Context::getCssFile() as $key => $css_file)--> <!--@foreach(Context::getCssFile() as $key => $css_file)-->
<link rel='stylesheet' HREF='{$css_file}' type='text/css' /> <link rel="stylesheet" HREF="{$css_file}" type="text/css" />
<!--@end--> <!--@end-->
{Context::getHtmlHeader()} {Context::getHtmlHeader()}
</head> </head>

Binary file not shown.

After

Width:  |  Height:  |  Size: 372 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 622 B

BIN
common/tpl/images/join.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 B

BIN
common/tpl/images/line.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 B

BIN
common/tpl/images/minus.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 B

BIN
common/tpl/images/page.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 582 B

BIN
common/tpl/images/plus.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 89 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 B

View file

@ -41,21 +41,15 @@
({$val->maxdepth} {$lang->depth}) ({$val->maxdepth} {$lang->depth})
</th> </th>
<td> <td>
<div> <div id="menu_zone_{$val->id}">
<select name="{$val->id}" size="15" style="width:500px;" id="default_value_listup_{$val->id}" ondblclick="doEditMenuInfo(this)" >
</select>
</div> </div>
<div> <div>
<input type="text" name="default_value_item_{$val->id}" id="default_value_item_{$val->id}" /> <input type="button" value="{$lang->cmd_open_all}" onclick="openAllTreeMenu('{$val->id}');return false;" />
<input type="button" value="{$lang->cmd_insert}" onclick="doEditInsertMenu('{$val->id}');return false;" /> <input type="button" value="{$lang->cmd_close_all}" onclick="closeAllTreeMenu('{$val->id}');return false;" />
</div>
<div>
<input type="button" value="{$lang->cmd_move_up}" onclick="doEditMenu('up', '{$val->id}');return false;" />
<input type="button" value="{$lang->cmd_move_down}" onclick="doEditMenu('down', '{$val->id}');return false;" />
<input type="button" value="{$lang->cmd_add_indent}" onclick="doEditMenu('add_indent', '{$val->id}',{$val->maxdepth});return false;" />
<input type="button" value="{$lang->cmd_remove_indent}" onclick="doEditMenu('remove_indent', '{$val->id}');return false;" />
<input type="button" value="{$lang->cmd_delete}" onclick="doEditMenu('delete', '{$val->id}');return false;" />
</div> </div>
<script type="text/javascript">
xAddEventListener(window,'load', function() { loadTreeMenu("/tree_menu/a.xml", "{$val->id}", "menu_zone_{$val->id}", "{$val->name}"); });
</script>
</td> </td>
</tr> </tr>
<!--@end--> <!--@end-->

View file

@ -1,140 +0,0 @@
function doEditMenuInfo(sel_obj) {
var idx = sel_obj.selectedIndex;
var obj = sel_obj.options[idx];
if(typeof(obj)=='undefined'||!obj) return;
var menu_srl = obj.value;
var url = "./?module=layout&act=dispLayoutMenuInfo&menu_srl="+menu_srl;
var win = window.open(url,"_LayoutMenu","toolbars=no,status=no,resizable=no,width=10,height=10");
win.focus();
}
function completeGetLayoutMenuSrl(ret_obj, response_tags) {
var menu_srl = ret_obj['menu_srl'];
var menu_id = ret_obj['menu_id'];
doEditInsertMenu(menu_id, menu_srl);
}
function doEditInsertMenu(menu_id, menu_srl) {
var item_obj = xGetElementById('default_value_item_'+menu_id);
var listup_obj = xGetElementById('default_value_listup_'+menu_id);
var text = item_obj.value;
if(!text) return;
if(typeof(menu_srl)=='undefined'||!menu_srl) {
var params = new Array();
params['text'] = text;
params['menu_id'] = menu_id;
var response_tags = new Array('error','message','menu_id','menu_srl');
exec_xml('layout', 'getLayoutMenuSrl', params, completeGetLayoutMenuSrl, response_tags);
return;
}
var opt = new Option(text, menu_srl, false, true);
listup_obj.options[listup_obj.length] = opt;
setDepth(listup_obj.options[listup_obj.length-1],0);
item_obj.value = '';
item_obj.focus();
}
function doEditMenu(cmd, menu_id, max_depth) {
var listup_obj = xGetElementById('default_value_listup_'+menu_id);
var idx = listup_obj.selectedIndex;
var lng = listup_obj.options.length;
switch(cmd) {
case 'up' :
if(lng < 2 || idx<1) return;
var value1 = listup_obj.options[idx].value;
var text1 = listup_obj.options[idx].text;
var depth1 = getDepth(listup_obj.options[idx]);
var value2 = listup_obj.options[idx-1].value;
var text2 = listup_obj.options[idx-1].text;
var depth2 = getDepth(listup_obj.options[idx-1]);
listup_obj.options[idx] = new Option(text2,value2,false,false);
setDepth(listup_obj.options[idx], depth1);
listup_obj.options[idx-1] = new Option(text1,value1,false,true);
setDepth(listup_obj.options[idx-1], depth2);
break;
case 'down' :
if(lng < 2 || idx == lng-1) return;
var value1 = listup_obj.options[idx].value;
var text1 = listup_obj.options[idx].text;
var depth1 = getDepth(listup_obj.options[idx]);
var value2 = listup_obj.options[idx+1].value;
var text2 = listup_obj.options[idx+1].text;
var depth2 = getDepth(listup_obj.options[idx+1]);
listup_obj.options[idx] = new Option(text2,value2,false,false);
setDepth(listup_obj.options[idx], depth1);
listup_obj.options[idx+1] = new Option(text1,value1,false,true);
setDepth(listup_obj.options[idx+1], depth2);
break;
case 'delete' :
if(idx<lng-1) {
var below_depth = getDepth(listup_obj.options[idx+1]);
var cur_depth = getDepth(listup_obj.options[idx]);
if(below_depth>cur_depth) return;
}
listup_obj.remove(idx);
if(idx==0) listup_obj.selectedIndex = 0;
else listup_obj.selectedIndex = idx-1;
break;
case 'add_indent' :
if(lng<2||idx<1) return;
var opt_cur = listup_obj.options[idx];
var opt_up = listup_obj.options[idx-1];
var cur_depth = getDepth(opt_cur);
var up_depth = getDepth(opt_up);
if(up_depth >= cur_depth) addDepth(opt_cur, max_depth);
break;
case 'remove_indent' :
var opt_cur = listup_obj.options[idx];
removeDepth(opt_cur);
break;
}
var value_list = new Array();
for(var i=0;i<listup_obj.options.length;i++) {
value_list[value_list.length] = listup_obj.options[i].value;
}
}
function getDepth(obj) {
var pl = obj.style.paddingLeft;
if(!pl) return 0;
var depth = parseInt(pl,10);
return depth/20;
}
function setDepth(obj, depth) {
obj.style.paddingLeft = (depth*20)+'px';
}
function addDepth(obj, max_depth) {
var depth = getDepth(obj);
var depth = depth + 1;
if(depth>=max_depth) return;
obj.style.paddingLeft = (depth*20)+'px';
}
function removeDepth(obj) {
var depth = getDepth(obj);
var depth = depth - 1;
if(depth<0) return;
obj.style.paddingLeft = (depth*20)+'px';
}