git-svn-id: http://xe-core.googlecode.com/svn/trunk@293 201d5d3c-b55e-5fd7-737f-ddc643e51545
|
|
@ -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
|
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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 = '불가능';
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
|
||||||
BIN
common/tpl/images/folder.gif
Normal file
|
After Width: | Height: | Size: 372 B |
BIN
common/tpl/images/imgfolder.gif
Normal file
|
After Width: | Height: | Size: 622 B |
BIN
common/tpl/images/join.gif
Normal file
|
After Width: | Height: | Size: 69 B |
BIN
common/tpl/images/joinbottom.gif
Normal file
|
After Width: | Height: | Size: 66 B |
BIN
common/tpl/images/line.gif
Normal file
|
After Width: | Height: | Size: 66 B |
BIN
common/tpl/images/minus.gif
Normal file
|
After Width: | Height: | Size: 86 B |
BIN
common/tpl/images/minusbottom.gif
Normal file
|
After Width: | Height: | Size: 85 B |
BIN
common/tpl/images/page.gif
Normal file
|
After Width: | Height: | Size: 582 B |
BIN
common/tpl/images/plus.gif
Normal file
|
After Width: | Height: | Size: 89 B |
BIN
common/tpl/images/plusbottom.gif
Normal file
|
After Width: | Height: | Size: 88 B |
|
|
@ -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-->
|
||||||
|
|
|
||||||
|
|
@ -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';
|
|
||||||
}
|
|
||||||