1. 회원/게시글/댓글 팝업메뉴를 controller의 method를 이용하여 손쉽게 추가할 수 있도록 변경

2. 게시글/ 댓글 팝업메뉴에 아이콘 추가
3. 쪽지 발송/ 친구 관련 메뉴의 on/off를 member_communication 애드온으로 활성/비활성 할 수 있도록 변경
4. IE에서 페이지를 찾을 수 없다는 오류가 발생하는 window onload이전에 DOM을 건드리는 코드에 대한 보완책 적용
5. XML RPC 결과 출력시 1depth이상의 배열 또는 오브젝트 데이터를 Simple XML 형식으로 출력할 수 있도록 하고 Javascript에서 이를 다차원 배열로 
parsing하도록 코드 변경


git-svn-id: http://xe-core.googlecode.com/svn/sandbox@4230 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
zero 2008-06-02 10:50:58 +00:00
parent bc963aa72f
commit 4cdce7e4cf
26 changed files with 422 additions and 115 deletions

View file

@ -309,18 +309,27 @@ function setFixedPopupSize() {
/**
* @brief 이름, 게시글등을 클릭하였을 경우 팝업 메뉴를 보여주는 함수
**/
xAddEventListener(window, 'load', createPopupMenu);
xAddEventListener(document, 'click', chkPopupMenu);
var loaded_popup_menu_list = new Array();
var loaded_popup_menus = new Array();
/* 멤버 팝업 메뉴 레이어를 생성하는 함수 (문서 출력이 완료되었을때 동작) */
function createPopupMenu(evt) {
var area = xGetElementById("popup_menu_area");
if(area) return;
area = xCreateElement("div");
area.id = "popup_menu_area";
area.style.visibility = 'hidden';
document.body.appendChild(area);
}
/* 클릭 이벤트 발생시 이벤트가 일어난 대상을 검사하여 적절한 규칙에 맞으면 처리 */
function chkPopupMenu(evt) {
// 이전에 호출되었을지 모르는 팝업메뉴 숨김
var area = xGetElementById("popup_menu_area");
if(!area) {
area = xCreateElement("div");
area.id = "popup_menu_area";
document.body.appendChild(area);
}
if(!area) return;
if(area.style.visibility!="hidden") area.style.visibility="hidden";
// 이벤트 대상이 없으면 무시
@ -332,9 +341,7 @@ function chkPopupMenu(evt) {
if(!obj) return;
// obj의 nodeName이 div나 span이 아니면 나올대까지 상위를 찾음
if(obj && obj.nodeName != 'DIV' && obj.nodeName != 'SPAN') {
obj = obj.parentNode;
}
if(obj && obj.nodeName != 'DIV' && obj.nodeName != 'SPAN') obj = obj.parentNode;
if(!obj || (obj.nodeName != 'DIV' && obj.nodeName != 'SPAN')) return;
// 객체의 className값을 구함
@ -371,10 +378,9 @@ function chkPopupMenu(evt) {
params["page_x"] = e.pageX;
params["page_y"] = e.pageY;
var response_tags = new Array("error","message","menu_list");
var response_tags = new Array("error","message","menus");
if(loaded_popup_menu_list[menu_id]) {
params["menu_list"] = loaded_popup_menu_list[menu_id];
if(loaded_popup_menus[menu_id]) {
displayPopupMenu(params, response_tags, params);
return;
}
@ -385,44 +391,50 @@ function chkPopupMenu(evt) {
}
function displayPopupMenu(ret_obj, response_tags, params) {
var area = xGetElementById("popup_menu_area");
var menu_list = ret_obj['menu_list'];
var target_srl = params["target_srl"];
var menu_id = params["menu_id"];
var menus = ret_obj['menus'];
var html = "";
if(loaded_popup_menu_list[menu_id]) {
html = loaded_popup_menu_list[menu_id];
if(loaded_popup_menus[menu_id]) {
html = loaded_popup_menus[menu_id];
} else {
var infos = menu_list.split("\n");
if(infos.length) {
for(var i=0;i<infos.length;i++) {
var info_str = infos[i];
var pos = info_str.indexOf(",");
var icon = info_str.substr(0,pos).trim();
var item = menus['item'];
if(item.length) {
for(var i=0;i<item.length;i++) {
var url = item[i].url;
var str = item[i].str;
var icon = item[i].icon;
var target = item[i].target;
info_str = info_str.substr(pos+1, info_str.length).trim();
var pos = info_str.indexOf(",");
var str = info_str.substr(0,pos).trim();
var func = info_str.substr(pos+1, info_str.length).trim();
var styleText = "";
var className = "item";
if(icon) styleText = " style=\"background:url('"+icon+"') no-repeat left center; padding-left:18px; \"";
switch(target) {
case "popup" :
click_str = " onclick=\"popopen('"+url+"','"+target+"')\"; return false;";
break;
case "self" :
click_str = " onclick=\"location.href='"+url+"'\"; return false;";
break;
case "javascript" :
click_str = " onclick=\""+url+"\"; return false;";
break;
default :
click_str = " onclick=\"window.open('"+url+"')\"; return false;";
break;
}
if(!str || !func) continue;
if(icon) html += "<div class=\""+className+"\" onmouseover=\"this.className='"+className+"_on'\" onmouseout=\"this.className='"+className+"'\" style=\"background:url("+icon+") no-repeat left center; padding-left:18px;\" onclick=\""+func+"\">"+str+"</div>";
else html += "<div class=\""+className+"\" onmouseover=\"this.className='"+className+"_on'\" onmouseout=\"this.className='"+className+"'\" onclick=\""+func+"\">"+str+"</div>";
html += '<div class="item" onmouseover="this.className=\'item_on\'" onmouseout="this.className=\'item\'"'+styleText+click_str+'>'+str+'</div> ';
}
}
loaded_popup_menu_list[menu_id] = html;
}
loaded_popup_menus[menu_id] = html;
}
// 레이어 출력
if(html) {
// 레이어 출력
xInnerHtml('popup_menu_area', "<div class=\"box\">"+html+"</div>");
var area = xGetElementById("popup_menu_area");
xInnerHtml(area, "<div class=\"box\">"+html+"</div>");
xLeft(area, params["page_x"]);
xTop(area, params["page_y"]);
if(xWidth(area)+xLeft(area)>xClientWidth()+xScrollLeft()) xLeft(area, xClientWidth()-xWidth(area)+xScrollLeft());