mirror of
https://github.com/Lastorder-DC/rhymix.git
synced 2026-01-31 00:59:58 +09:00
git-svn-id: http://xe-core.googlecode.com/svn/sandbox@4871 201d5d3c-b55e-5fd7-737f-ddc643e51545
579 lines
18 KiB
JavaScript
579 lines
18 KiB
JavaScript
var max_menu_depth = 1;
|
|
var menuList = new Array();
|
|
var mousePos = {x:0,y:0}
|
|
|
|
function chkMousePosition(evt) {
|
|
var e = new xEvent(evt);
|
|
mousePos = {x:e.pageX, y:e.pageY};
|
|
|
|
var pobj = e.target;
|
|
while(pobj) {
|
|
pobj = pobj.parentNode;
|
|
if(pobj && pobj.id == 'menuItem') return;
|
|
}
|
|
|
|
hideMenuItem();
|
|
}
|
|
|
|
function homepageLoadMenuInfo(xml_file) {
|
|
var oXml = new xml_handler();
|
|
oXml.reset();
|
|
oXml.xml_path = xml_file;
|
|
oXml.request(completeHomepageLoadMenuInfo, oXml);
|
|
}
|
|
|
|
function completeHomepageLoadMenuInfo(oXml) {
|
|
var waiting_obj = xGetElementById("waitingforserverresponse");
|
|
if(waiting_obj) waiting_obj.style.visibility = "hidden";
|
|
|
|
var xmlDoc = oXml.getResponseXml();
|
|
if(!xmlDoc) return null;
|
|
|
|
// node 태그에 해당하는 값들을 가져와서 html을 작성
|
|
var node_list = xmlDoc.getElementsByTagName("node");
|
|
if(node_list.length<1) return;
|
|
|
|
// select 내용 없앰
|
|
xInnerHtml('menu','');
|
|
|
|
var root = xmlDoc.getElementsByTagName("root")[0];
|
|
root.setAttribute('node_srl',0);
|
|
root.setAttribute('parent_srl',0);
|
|
xGetElementById('menu').appendChild(getGabItem(0,0,0));
|
|
homepageInsertMenuObject(xGetElementById('menu'), root, 0);
|
|
|
|
}
|
|
|
|
function getGabItem(parent_srl, up_srl, depth) {
|
|
if(typeof(parent_srl)=='undefined' || !parent_srl) parent_srl = 0;
|
|
if(typeof(up_srl)=='undefined' || !up_srl) up_srl = 0;
|
|
if(typeof(depth)=='undefined' || !depth) depth = 0;
|
|
|
|
var gabObj = xCreateElement('div');
|
|
gabObj.id = 'gab_'+parent_srl+'_'+up_srl;
|
|
gabObj.style.cursor = "pointer";
|
|
gabObj.style.width = '100%';
|
|
gabObj.style.height = '1px';
|
|
gabObj.style.marign = '5px 0 0 0';
|
|
gabObj.style.padding = '0 0 5px 0';
|
|
gabObj.style.overflow = "hidden";
|
|
gabObj.style.whitespace = "nowrap";
|
|
return gabObj;
|
|
}
|
|
|
|
// root부터 시작해서 recursive하게 노드를 표혐
|
|
function homepageInsertMenuObject(drawObj, parent_node, depth) {
|
|
|
|
for (var i=0; i< parent_node.childNodes.length; i++) {
|
|
|
|
var html = "";
|
|
|
|
var node = parent_node.childNodes.item(i);
|
|
if(node.nodeName!="node") continue;
|
|
|
|
var node_srl = node.getAttribute("node_srl");
|
|
var parent_srl = node.getAttribute("parent_srl");
|
|
var text = node.getAttribute("text");
|
|
var url = node.getAttribute("url");
|
|
|
|
if(!text) continue;
|
|
|
|
var itemObj = xCreateElement('div');
|
|
itemObj.style.margin = "0 0 0 "+(depth*20)+"px";
|
|
|
|
if(parent_srl>0 && i<1) itemObj.appendChild(getGabItem(parent_srl, 0, depth));
|
|
|
|
var textObj = xCreateElement('div');
|
|
textObj.className = "page";
|
|
textObj.style.cursor = "pointer";
|
|
textObj.id = "node_"+node_srl;
|
|
textObj.style.padding = "5px 0 5px 20px";
|
|
xInnerHtml(textObj, text);
|
|
|
|
if(depth < max_menu_depth-1)
|
|
xInnerHtml(textObj, xInnerHtml(textObj) + '<a href="#" onclick="homepageAddMenu('+node_srl+'); return false;" class="insert"><img src="./common/tpl/images/blank.gif" alt="" /></a> ');
|
|
|
|
xInnerHtml(textObj, xInnerHtml(textObj) + '<a href="#" onclick="homepageModifyMenu('+node_srl+'); return false;" class="modify"><img src="./common/tpl/images/blank.gif" alt="" /></a> ');
|
|
|
|
if(!node.hasChildNodes()) {
|
|
xInnerHtml(textObj, xInnerHtml(textObj) + '<a href="#" onclick="homepageDeleteMenu('+node_srl+'); return false;" class="delete"><img src="./common/tpl/images/blank.gif" alt="" /></a> ');
|
|
}
|
|
itemObj.appendChild(textObj);
|
|
|
|
if(node.hasChildNodes()) homepageInsertMenuObject(itemObj, node, depth+1);
|
|
itemObj.appendChild(getGabItem(parent_srl, node_srl, depth));
|
|
|
|
drawObj.appendChild(itemObj);
|
|
}
|
|
|
|
}
|
|
|
|
function homepageAddMenu(node_srl) {
|
|
menuFormReset();
|
|
var obj = new Array();
|
|
obj['mode'] = 'insert';
|
|
if(typeof(node_srl)!='undefined' && node_srl > 0) {
|
|
obj['parent_srl'] = node_srl;
|
|
}
|
|
menuFormInsert(obj)
|
|
showMenuItem();
|
|
}
|
|
|
|
function homepageModifyMenu(node_srl) {
|
|
var params = new Array();
|
|
params['node_srl'] = node_srl;
|
|
var response_tags = new Array('error','message','menu_info');
|
|
exec_xml('homepage','getHomepageMenuItem', params, completeModifyMenu, response_tags);
|
|
}
|
|
|
|
function completeModifyMenu(ret_obj) {
|
|
var menu_info = ret_obj['menu_info'];
|
|
menu_info['mode'] = 'update';
|
|
menuFormInsert(menu_info)
|
|
showMenuItem();
|
|
showMenuButton();
|
|
}
|
|
|
|
function homepageDeleteMenu(node_srl) {
|
|
var fo_obj = xGetElementById('menu_item_form');
|
|
fo_obj.menu_item_srl.value = node_srl;
|
|
|
|
procFilter(fo_obj, delete_menu_item);
|
|
}
|
|
|
|
function completeChangeLayout(ret_obj) {
|
|
location.reload();
|
|
}
|
|
|
|
function hideMenuItem() {
|
|
xGetElementById('menuItem').style.visibility = 'hidden';
|
|
menuFormReset();
|
|
}
|
|
|
|
function showMenuButton() {
|
|
xGetElementById('itemAttr4').style.display = 'block';
|
|
}
|
|
|
|
function showMenuItem() {
|
|
var obj = xGetElementById('menuItem');
|
|
xLeft(obj, mousePos.x - xWidth('navigation') - 40);
|
|
xTop(obj, mousePos.y - xHeight('header') - 70 );
|
|
obj.style.visibility = 'visible';
|
|
}
|
|
|
|
function menuFormReset() {
|
|
var fo_obj = xGetElementById("fo_menu");
|
|
|
|
fo_obj.parent_srl.value = '';
|
|
fo_obj.menu_item_srl.value = '';
|
|
fo_obj.mode.value = '';
|
|
|
|
var names = xGetElementsByClassName("menu_names");
|
|
for(var i in names) names[i].value = "";
|
|
|
|
fo_obj.browser_title.value = '';
|
|
|
|
fo_obj.menu_open_window.checked = false;
|
|
fo_obj.menu_expand.checked = false;
|
|
|
|
for(var i=0; i<fo_obj.group_srls.length;i++) fo_obj.group_srls[i].checked = false;
|
|
|
|
fo_obj.module_type.selectedIndex = 0;
|
|
fo_obj.module_type.disabled = "";
|
|
|
|
fo_obj.module_id.value = '';
|
|
fo_obj.url.value = '';
|
|
xGetElementById('itemAttr3').style.display = "none";
|
|
|
|
xGetElementById("menu_normal_btn_zone").style.display = "none";
|
|
xGetElementById('menu_normal_btn_img').src = "";
|
|
xGetElementById("menu_hover_btn_zone").style.display = "none";
|
|
xGetElementById('menu_hover_btn_img').src = "";
|
|
xGetElementById("menu_active_btn_zone").style.display = "none";
|
|
xGetElementById('menu_active_btn_img').src = "";
|
|
|
|
xGetElementById('itemAttr4').style.display = 'none';
|
|
|
|
fo_obj.reset();
|
|
}
|
|
|
|
function menuFormInsert(obj) {
|
|
if(typeof(obj)=='undefined') return;
|
|
|
|
var fo_obj = xGetElementById("fo_menu");
|
|
|
|
if(typeof(obj.parent_srl)!='undefined') fo_obj.parent_srl.value = obj.parent_srl;
|
|
if(typeof(obj.menu_item_srl)!='undefined') fo_obj.menu_item_srl.value = obj.menu_item_srl;
|
|
if(typeof(obj.mode)!='undefined') fo_obj.mode.value = obj.mode;
|
|
|
|
if(typeof(obj.name)!='undefined') {
|
|
for(var i in obj.name) {
|
|
var o = fo_obj['menu_name_'+i];
|
|
if(!o) continue;
|
|
o.value = obj.name[i];
|
|
}
|
|
}
|
|
|
|
if(typeof(obj.browser_title)!='undefined') fo_obj.browser_title.value = obj.browser_title;
|
|
|
|
if(typeof(obj.open_window)!='undefined' && obj.open_window=='Y') fo_obj.menu_open_window.checked = true;
|
|
if(typeof(obj.expand)!='undefined' && obj.expand=='Y') fo_obj.menu_expand.checked = true;
|
|
|
|
if(typeof(obj.group_srls)!='undefined' && obj.group_srls && typeof(obj.group_srls.item)!='undefined' && obj.group_srls.item) {
|
|
for(var j in obj.group_srls.item) {
|
|
for(var i=0; i<fo_obj.group_srls.length;i++) {
|
|
if(obj.group_srls.item[j]==fo_obj.group_srls[i].value) fo_obj.group_srls[i].checked = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
if(typeof(obj.module_type)!='undefined') {
|
|
if(obj.module_type == 'url') {
|
|
fo_obj.module_type.selectedIndex = 2;
|
|
if(typeof(obj.url)!='undefined') fo_obj.url.value = obj.url;
|
|
fo_obj.module_type.disabled = "disabled";
|
|
xGetElementById('itemAttr2').style.display = 'none';
|
|
xGetElementById('itemAttr3').style.display = 'block';
|
|
} else {
|
|
if(obj.module_type == 'page') fo_obj.module_type.selectedIndex = 1;
|
|
else fo_obj.module_type.selectedIndex = 1;
|
|
if(typeof(obj.module_id)!='undefined') fo_obj.module_id.value = obj.module_id;
|
|
fo_obj.module_type.disabled = "disabled";
|
|
xGetElementById('itemAttr2').style.display = 'block';
|
|
xGetElementById('itemAttr3').style.display = 'none';
|
|
}
|
|
}
|
|
|
|
if(typeof(obj.normal_btn)!='undefined' && obj.normal_btn) {
|
|
xGetElementById('menu_normal_btn_img').src = obj.normal_btn;
|
|
xGetElementById('menu_normal_btn_zone').style.display = "block";
|
|
xGetElementById('itemAttr4').style.display = 'block';
|
|
fo_obj.normal_btn.value = obj.normal_btn;
|
|
}
|
|
if(typeof(obj.hover_btn)!='undefined' && obj.hover_btn) {
|
|
xGetElementById('menu_hover_btn_img').src = obj.hover_btn;
|
|
xGetElementById('menu_hover_btn_zone').style.display = "block";
|
|
xGetElementById('itemAttr4').style.display = 'block';
|
|
fo_obj.hover_btn.value = obj.hover_btn;
|
|
}
|
|
if(typeof(obj.active_btn)!='undefined' && obj.active_btn) {
|
|
xGetElementById('menu_active_btn_img').src = obj.active_btn;
|
|
xGetElementById('menu_active_btn_zone').style.display = "block";
|
|
xGetElementById('itemAttr4').style.display = 'block';
|
|
fo_obj.active_btn.value = obj.active_btn;
|
|
}
|
|
}
|
|
|
|
function changeMenuType(obj) {
|
|
if(obj.selectedIndex == 2) {
|
|
xGetElementById('itemAttr2').style.display = 'none';
|
|
xGetElementById('itemAttr3').style.display = 'block';
|
|
return;
|
|
}
|
|
|
|
xGetElementById('itemAttr2').style.display = 'block';
|
|
xGetElementById('itemAttr3').style.display = 'none';
|
|
|
|
}
|
|
|
|
function completeInsertMenuItem(ret_obj) {
|
|
var xml_file = ret_obj['xml_file'];
|
|
if(!xml_file) return;
|
|
|
|
hideMenuItem();
|
|
homepageLoadMenuInfo(xml_file);
|
|
}
|
|
|
|
function doHomepageMenuUploadButton(obj) {
|
|
// 이미지인지 체크
|
|
if(!/\.(gif|jpg|jpeg|png)$/i.test(obj.value)) return alert(alertImageOnly);
|
|
|
|
var fo_obj = xGetElementById("fo_menu");
|
|
var act = fo_obj.act.value;
|
|
fo_obj.act.value = "procHomepageMenuUploadButton";
|
|
fo_obj.target.value = obj.name;
|
|
fo_obj.submit();
|
|
fo_obj.act.value = act;
|
|
fo_obj.target.value = "";
|
|
}
|
|
|
|
/* 메뉴 이미지 업로드 후처리 */
|
|
function completeMenuUploadButton(target, filename) {
|
|
var column_name = target.replace(/^menu_/,'');
|
|
var fo_obj = xGetElementById("fo_menu");
|
|
var zone_obj = xGetElementById(target+'_zone');
|
|
var img_obj = xGetElementById(target+'_img');
|
|
|
|
fo_obj[column_name].value = filename;
|
|
|
|
var img = new Image();
|
|
img.src = filename;
|
|
img_obj.src = img.src;
|
|
zone_obj.style.display = "block";
|
|
}
|
|
|
|
function doDeleteButton(target) {
|
|
var fo_obj = xGetElementById("fo_menu");
|
|
|
|
var col_name = target.replace(/^menu_/,'');
|
|
|
|
var params = new Array();
|
|
params['target'] = target;
|
|
params['menu_srl'] = fo_obj.menu_srl.value;
|
|
params['menu_item_srl'] = fo_obj.menu_item_srl.value;
|
|
params['filename'] = fo_obj[col_name].value;
|
|
|
|
var response_tags = new Array('error','message', 'target');
|
|
|
|
exec_xml('homepage','procHomepageDeleteButton', params, completeDeleteButton, response_tags);
|
|
}
|
|
|
|
function completeDeleteButton(ret_obj) {
|
|
var target = ret_obj['target'];
|
|
|
|
var column_name = target.replace(/^menu_/,'');
|
|
var fo_obj = xGetElementById("fo_menu");
|
|
var zone_obj = xGetElementById(target+'_zone');
|
|
var img_obj = xGetElementById(target+'_img');
|
|
fo_obj[column_name].value = "";
|
|
img_obj.src = "";
|
|
zone_obj.style.display = "none";
|
|
}
|
|
|
|
/* drag item */
|
|
xAddEventListener(document, 'mousedown', dragItem);
|
|
|
|
var dragObj = null;
|
|
var dragTarget = null;
|
|
var dragTmpObjectect = new Array();
|
|
var dragDisappear = 0;
|
|
|
|
function dragItem(evt) {
|
|
var e = new xEvent(evt);
|
|
if(!e.target) return;
|
|
var obj = e.target;
|
|
while(obj) {
|
|
if(obj && obj.nodeName == 'DIV' && typeof(obj.id)!='undefined' && obj.id.indexOf('node_')>-1) {
|
|
dragEnable(obj, evt);
|
|
return;
|
|
}
|
|
obj = obj.parentNode;
|
|
}
|
|
}
|
|
|
|
function getDragTmpObject(obj) {
|
|
if(!dragTmpObjectect[obj.id]) {
|
|
tmpObj = xCreateElement('div');
|
|
tmpObj.id = obj.id + '_tmp';
|
|
tmpObj.style.display = 'none';
|
|
tmpObj.style.position = 'absolute';
|
|
tmpObj.style.opacity = 0.5;
|
|
tmpObj.style.filter = 'alpha(opacity=50)';
|
|
tmpObj.style.cursor = "pointer";
|
|
|
|
xInnerHtml(tmpObj,xInnerHtml(obj));
|
|
|
|
document.body.appendChild(tmpObj);
|
|
dragTmpObjectect[obj.id] = tmpObj;
|
|
}
|
|
return dragTmpObjectect[obj.id];
|
|
}
|
|
|
|
function removeDragTmpObject(obj) {
|
|
if(!dragTmpObjectect[obj.id]) return;
|
|
dragTmpObjectect[obj.id] = null;
|
|
}
|
|
|
|
function dragEnable(obj, evt) {
|
|
if(obj.id.indexOf('node_')<0) return;
|
|
obj.draggable = true;
|
|
|
|
dragObj = obj;
|
|
dragObj.id = obj.id;
|
|
|
|
var e = new xEvent(evt);
|
|
xPreventDefault(evt);
|
|
obj.xDPX = e.pageX;
|
|
obj.xDPY = e.pageY;
|
|
|
|
xAddEventListener(document, 'mouseup', dragUp, false);
|
|
xAddEventListener(document, 'mousemove', dragMove, false);
|
|
|
|
var tmpObj = getDragTmpObject(obj);
|
|
xLeft(tmpObj, e.pageX+1);
|
|
xTop(tmpObj, e.pageY+1);
|
|
xWidth(tmpObj, xWidth(obj));
|
|
xHeight(tmpObj, xHeight(obj));
|
|
xDisplay(tmpObj, 'block');
|
|
}
|
|
|
|
function dragMove(evt) {
|
|
if(!dragObj) return;
|
|
|
|
var e = new xEvent(evt);
|
|
var target = e.target;
|
|
var obj = dragObj;
|
|
var tobj = getDragTmpObject(obj);
|
|
xLeft(tobj, e.pageX+1);
|
|
xTop(tobj, e.pageY+1);
|
|
|
|
if(target && target.nodeName == "DIV" && typeof(target.id)!='undefined' && (target.id.indexOf('gab_')>-1||target.id.indexOf('node_')>-1)) {
|
|
var isChilds = false;
|
|
var pObj = target.parentNode;
|
|
while(pObj) {
|
|
if(pObj.firstChild && typeof(pObj.firstChild.id)!='undefined' && pObj.firstChild.id == dragObj.id) {
|
|
isChilds = true;
|
|
break;
|
|
}
|
|
pObj = pObj.parentNode;
|
|
}
|
|
if(dragTarget) {
|
|
dragTarget.style.backgroundColor = '';
|
|
dragTarget.style.borderTop = '0px solid #000';
|
|
dragTarget = null;
|
|
}
|
|
|
|
if(!isChilds) {
|
|
dragTarget = target;
|
|
if(target.id.indexOf('gab_')>-1) {
|
|
dragTarget.style.borderTop = '1px solid #000';
|
|
} else {
|
|
dragTarget.style.backgroundColor = '#DDDDDD';
|
|
}
|
|
}
|
|
} else if(dragTarget) {
|
|
dragTarget.style.backgroundColor = '';
|
|
dragTarget.style.borderTop = '0px solid #000';
|
|
dragTarget = null;
|
|
}
|
|
|
|
xPreventDefault(evt);
|
|
}
|
|
|
|
function dragUp(evt) {
|
|
if(!dragObj) return;
|
|
|
|
if(dragTarget && dragTarget.id != dragObj.id && confirm(confirmMenuMove)) {
|
|
var mode = null;
|
|
if(dragTarget.id.indexOf('gab_')>-1) mode = 'move';
|
|
else mode = 'insert';
|
|
|
|
var tmpArr = dragTarget.id.split('_');
|
|
var parent_srl = tmpArr[1];
|
|
var source_srl = mode=='move'?tmpArr[2]:0;
|
|
|
|
var tmpArr = dragObj.id.split('_');
|
|
var target_srl = tmpArr[1];
|
|
|
|
var params = new Array();
|
|
params['menu_srl'] = xGetElementById('fo_menu').menu_srl.value;
|
|
params['mode'] = mode;
|
|
params['parent_srl'] = parent_srl;
|
|
params['source_srl'] = source_srl;
|
|
params['target_srl'] = target_srl;
|
|
var response_tags = new Array('error','message','xml_file');
|
|
exec_xml('homepage','procHomepageMenuItemMove', params, completeInsertMenuItem, response_tags);
|
|
}
|
|
|
|
var tobj = getDragTmpObject(dragObj);
|
|
|
|
xRemoveEventListener(document, 'mouseup', dragUp, false);
|
|
xRemoveEventListener(document, 'mousemove', dragMove, false);
|
|
|
|
dragDisappear = dragDisapearObject(tobj, dragObj);
|
|
|
|
var e = new xEvent(evt);
|
|
xPreventDefault(evt);
|
|
dragObj = null;
|
|
|
|
if(dragTarget) {
|
|
dragTarget.style.backgroundColor = '';
|
|
dragTarget.style.borderTop = '0px solid #000';
|
|
dragTarget = null;
|
|
}
|
|
}
|
|
|
|
|
|
// 스르르 사라지게 함;;
|
|
function dragDisapearObject(obj, tobj) {
|
|
var it = 20;
|
|
var ib = 20;
|
|
|
|
var x = parseInt(xPageX(obj),10);
|
|
var y = parseInt(xPageY(obj),10);
|
|
var ldt = (x - parseInt(xPageX(tobj),10)) / ib;
|
|
var tdt = (y - parseInt(xPageY(tobj),10)) / ib;
|
|
|
|
return setInterval(function() {
|
|
if(ib < 1) {
|
|
clearInterval(dragDisappear);
|
|
xDisplay(obj, 'none');
|
|
removeDragTmpObject(tobj);
|
|
return;
|
|
}
|
|
ib -= 3;
|
|
x-=ldt;
|
|
y-=tdt;
|
|
xLeft(obj, x);
|
|
xTop(obj, y);
|
|
}, it/ib);
|
|
}
|
|
|
|
function completeInsertBoard(ret_obj) {
|
|
alert(ret_obj['message']);
|
|
location.reload();
|
|
}
|
|
|
|
function completeInsertPage(ret_obj) {
|
|
alert(ret_obj['message']);
|
|
location.reload();
|
|
}
|
|
|
|
function doDeleteGroup(group_srl) {
|
|
var fo_obj = xGetElementById('fo_group');
|
|
fo_obj.group_srl.value = group_srl;
|
|
procFilter(fo_obj, delete_group);
|
|
}
|
|
|
|
function completeInsertGroup(ret_obj) {
|
|
location.href = current_url.setQuery('group_srl','');
|
|
}
|
|
|
|
function completeDeleteGroup(ret_obj) {
|
|
location.href = current_url.setQuery('group_srl','');
|
|
|
|
}
|
|
|
|
function doSelectAll(obj, key) {
|
|
var fo_obj = obj.parentNode;
|
|
while(fo_obj.nodeName != 'FORM') {
|
|
fo_obj = fo_obj.parentNode;
|
|
}
|
|
|
|
for(var i=0;i<fo_obj.length;i++) {
|
|
var tobj = fo_obj[i];
|
|
if(tobj.name == key) tobj.checked=true;
|
|
}
|
|
}
|
|
|
|
function doUnSelectAll(obj, key) {
|
|
var fo_obj = obj.parentNode;
|
|
while(fo_obj.nodeName != 'FORM') {
|
|
fo_obj = fo_obj.parentNode;
|
|
}
|
|
|
|
for(var i=0;i<fo_obj.length;i++) {
|
|
var tobj = fo_obj[i];
|
|
if(tobj.name == key) tobj.checked = false;
|
|
}
|
|
}
|
|
|
|
function completeInsertGrant(ret_obj) {
|
|
var error = ret_obj['error'];
|
|
var message = ret_obj['message'];
|
|
var page = ret_obj['page'];
|
|
var module_srl = ret_obj['module_srl'];
|
|
|
|
alert(message);
|
|
}
|
|
|