From 26425a6d2b7e5cfc2e33b834490e95a25970b918 Mon Sep 17 00:00:00 2001 From: zero Date: Tue, 24 Apr 2007 04:19:59 +0000 Subject: [PATCH] git-svn-id: http://xe-core.googlecode.com/svn/trunk@1297 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- common/tpl/common_layout.html | 1 - modules/blog/blog.view.php | 1 + .../skins/default/images/tree_menu/folder.gif | Bin 0 -> 372 bytes .../skins/default/images/tree_menu/join.gif | Bin 0 -> 69 bytes .../default/images/tree_menu/joinbottom.gif | Bin 0 -> 66 bytes .../skins/default/images/tree_menu/line.gif | Bin 0 -> 66 bytes .../skins/default/images/tree_menu/minus.gif | Bin 0 -> 86 bytes .../default/images/tree_menu/minusbottom.gif | Bin 0 -> 85 bytes .../skins/default/images/tree_menu/page.gif | Bin 0 -> 582 bytes .../default/images/tree_menu/page_folder.gif | Bin 0 -> 622 bytes .../skins/default/images/tree_menu/plus.gif | Bin 0 -> 89 bytes .../default/images/tree_menu/plusbottom.gif | Bin 0 -> 88 bytes .../blog/skins/default/js/blog_tree_menu.js | 460 +++--------------- modules/blog/skins/default/layout.html | 1 + modules/menu/menu.view.php | 1 + 15 files changed, 79 insertions(+), 385 deletions(-) create mode 100644 modules/blog/skins/default/images/tree_menu/folder.gif create mode 100644 modules/blog/skins/default/images/tree_menu/join.gif create mode 100644 modules/blog/skins/default/images/tree_menu/joinbottom.gif create mode 100644 modules/blog/skins/default/images/tree_menu/line.gif create mode 100644 modules/blog/skins/default/images/tree_menu/minus.gif create mode 100644 modules/blog/skins/default/images/tree_menu/minusbottom.gif create mode 100644 modules/blog/skins/default/images/tree_menu/page.gif create mode 100644 modules/blog/skins/default/images/tree_menu/page_folder.gif create mode 100644 modules/blog/skins/default/images/tree_menu/plus.gif create mode 100644 modules/blog/skins/default/images/tree_menu/plusbottom.gif diff --git a/common/tpl/common_layout.html b/common/tpl/common_layout.html index 649aa82a8..5aa69a9cc 100644 --- a/common/tpl/common_layout.html +++ b/common/tpl/common_layout.html @@ -13,7 +13,6 @@ - diff --git a/modules/blog/blog.view.php b/modules/blog/blog.view.php index 55739dd64..6a67ebfa2 100644 --- a/modules/blog/blog.view.php +++ b/modules/blog/blog.view.php @@ -527,6 +527,7 @@ $category_info = $oBlogModel->getCategory($module_srl); Context::set('category_info', $category_info); + Context::addJsFile('./common/js/tree_menu.js'); $this->setTemplateFile('category_list'); } diff --git a/modules/blog/skins/default/images/tree_menu/folder.gif b/modules/blog/skins/default/images/tree_menu/folder.gif new file mode 100644 index 0000000000000000000000000000000000000000..eb129763dcea0dc1916b7e934fdce2fd8770c380 GIT binary patch literal 372 zcmZ?wbhEHb6k-r!xXQrr`}gnn@893v9&~1=$&)8f4jw$XxRCo$zt;Bc+vnx5?P^z= zlf`m!n&I9q)y<94Gt(JwZ!g^1B)cGw zMSgXq@QJAg2YNM*9XqzJMr>9F(~2^IHB}=2ujK##G5PiD*Z=>|`G33g|C9Rv?>o0` z+x8y>W-^ck6o0ZXGBD^d=zw&C{KUXE(P4UlhmKVLi6xgzC4402GB{W!L~2f9POOq~ zU`a4ovhaqB%+vz~Nx8dkFFrrvqSej!Kd!MF9@+A*p|PG#+gVIkwX>^RSE$vAT~}-J zl&QL${d#h`nsevP*X5qctE;hW`3hadnOwRm>o;uF<*#vKOczy ZVbwl)>NG2h3j?FtrOQ`>yuBP5tO0@?i&Ovr literal 0 HcmV?d00001 diff --git a/modules/blog/skins/default/images/tree_menu/join.gif b/modules/blog/skins/default/images/tree_menu/join.gif new file mode 100644 index 0000000000000000000000000000000000000000..34dd47610a5d7c3580dedc342683559bf77abce2 GIT binary patch literal 69 zcmZ?wbhEHb6k-r!XkcV$XlVHV|G(l-7DfgJMg|=QAOOiQFv;}DH=KUEdfpt3ORshA Wx&LIzk};W<vKC_i literal 0 HcmV?d00001 diff --git a/modules/blog/skins/default/images/tree_menu/joinbottom.gif b/modules/blog/skins/default/images/tree_menu/joinbottom.gif new file mode 100644 index 0000000000000000000000000000000000000000..48b81c80a9e25f6f29e2614aaa33bdf4a4d2881b GIT binary patch literal 66 zcmZ?wbhEHb6k-r!XkcV$XlVHV|G(l-7DfgJMg|=QAOOiQFiG~vH=KUEdfpt3ORshA Tx&LIzy5lkJS?4l0Mh0sDgH;v` literal 0 HcmV?d00001 diff --git a/modules/blog/skins/default/images/tree_menu/line.gif b/modules/blog/skins/default/images/tree_menu/line.gif new file mode 100644 index 0000000000000000000000000000000000000000..1a259eea00c330eee85fb18aa64e2e232d5410b1 GIT binary patch literal 66 zcmZ?wbhEHb6k-r!XkcV$XlVHV|G(l-7DfgJMg|=QAOOiQFiG~vH=KUEdfpt3ORshA Txqp6J8?ND(@^elGBZD;ng_;%{ literal 0 HcmV?d00001 diff --git a/modules/blog/skins/default/images/tree_menu/minus.gif b/modules/blog/skins/default/images/tree_menu/minus.gif new file mode 100644 index 0000000000000000000000000000000000000000..3d212a97ae0d8f83aa39836c5a85d442f8602553 GIT binary patch literal 86 zcmZ?wbhEHb6k-r!n8?h~)YR0_(7?dJ@c;jR#h)yU3=GT+IzTQ^R)~RtNqvreafzu-gC3m_gnAtsyGG)YXIxA8@>Pl literal 0 HcmV?d00001 diff --git a/modules/blog/skins/default/images/tree_menu/page.gif b/modules/blog/skins/default/images/tree_menu/page.gif new file mode 100644 index 0000000000000000000000000000000000000000..42d7318c5d928a2033cb42c72598a131ea6de64d GIT binary patch literal 582 zcmZ?wbhEHb6k-r!c*el+`}gnn@8AFU{r~N^{|65qeDdVU-@kuvy#9aS{{Mgf|9}4Z z|M0{AU%q_(`SWMv)Wg{&OV2(3AD1{GbotxKt1eYFZ#Zz^|ILSQTV|i?T5|Ba{La?4kwX3c6}c&WZ`PygnpJ?rkDyZry# zum9<}^Zxw(U)#BD%KlHsjvf2=@89j`-!lsq`N~Rn2+cXw3F)`cNXo|{M zwn^yh*lA;L&u+56RaJ{?r=8t#bK_Gj;^%BG95Yu?zS_*U>z2K_g$4ipCbgRvpFHC> zdg-Vu`PTd?H;48ok#7ReIGiR-xW0J7!Dc}Y2`z_&_QUOboFWD+3JrbT68dFMM=k~^ HFjxZso}Jb2 literal 0 HcmV?d00001 diff --git a/modules/blog/skins/default/images/tree_menu/page_folder.gif b/modules/blog/skins/default/images/tree_menu/page_folder.gif new file mode 100644 index 0000000000000000000000000000000000000000..e6d880347f518bbd1239f2af3e3059ccb1e674e3 GIT binary patch literal 622 zcmZ?wbhEHb6k-r!c*el+{{8!<#k_3u{{L^wI(YEl_U+q$|Ni~|@MghDua+)ZG%JH? z-TL((7IrU~Kj+DlCo5O3lwA7%*s)`qHgDa!eb@j0OBdvEG*;)$$zqw8!`56^^k}p5 z_Ya-7_UFu)+TYb$+uz;v|9Z=kBA(5S(&rbc{eRsuGoA72{gy`u15VE{KDj_~ajDeg z37uzVnk*{dIyud7L!HE&S<`mx+V>;JX-$>L)2C0b?{GLaORBB0{O{F*<)!?K3%Nf$ zsam#d+5aDt|39h!f4lVm`_9*|U#E2~`~QE=wr$&f|N3)mmgIjBn8`2{fZ|UUMg|5? z1|5)NL2<&se!9W4skx=K)lgW7o1c@{KvtWf%~RNQ+VpAif|G?@nV2{@=DW(VPUdzM za9Zso;A-yDro->*#N*D+IV1gO z@j_>Lk*uD81ih2?D)vTMXLcNRa$tCI39M1!eiVTiL RukLUjIIv`XD-$DwH2~IF)06-J literal 0 HcmV?d00001 diff --git a/modules/blog/skins/default/images/tree_menu/plus.gif b/modules/blog/skins/default/images/tree_menu/plus.gif new file mode 100644 index 0000000000000000000000000000000000000000..b2c997233b3f7b0fd56c4637c2c20aaf0d47bae7 GIT binary patch literal 89 zcmZ?wbhEHb6k-r!n8?J?(9poZ!0`Y7e;}#&lZBCifr&u}$Og&^0ohtp^czmUT|IBk qf~en0XVhiRX3S&EJ6Nf'+title+''; - + // 받아온 xml내용을 이용하여 트리 메뉴 그림 var xmlDoc = oXml.getResponseXml(); if(!xmlDoc) { xInnerHtml(zone, html); return null; } - blog_tree_menu_folder_list[menu_id] = new Array(); - // node 태그에 해당하는 값들을 가져와서 html을 작성 var node_list = xmlDoc.getElementsByTagName("node"); if(node_list.length>0) { var root = xmlDoc.getElementsByTagName("root")[0]; - var output = drawNode(root, menu_id); + var output = blogDrawNode(root); html += output.html; } + // 제목 지정 + var title_class = "selected"; + if(blog_menu_selected) title_class = "unselected"; + html = '
'+title+'
'+html; + // 출력하려는 zone이 없다면 load후에 출력하도록 함 if(!zone) { - xAddEventListener(window, 'load', function() { drawTeeMenu(zone_id, menu_id, html); }); + xAddEventListener(window, 'load', function() { blogDrawTeeMenu(html); }); // 출력하려는 zone을 찾아졌다면 바로 출력 } else { xInnerHtml(zone, html); - if(manual_select_node_srl) manualSelectNode(menu_id, manual_select_node_srl); } return null; } // 페이지 랜더링 중에 메뉴의 html이 완성되었을때 window.onload event 후에 그리기 재시도를 하게 될 함수 -function drawTeeMenu(zone_id, menu_id, html) { - xInnerHtml(zone_id, html); - if(manual_select_node_srl) manualSelectNode(menu_id, manual_select_node_srl); +function blogDrawTeeMenu(html) { + xInnerHtml("blog_category", html); } // root부터 시작해서 recursive하게 노드를 표혐 -function drawNode(parent_node, menu_id) { +function blogDrawNode(parent_node) { var output = {html:"", expand:"N"} for (var i=0; i< parent_node.childNodes.length; i++) { var html = ""; + var selected = false; // nodeName이 node가 아니면 패스~ var node = parent_node.childNodes.item(i); @@ -115,99 +112,100 @@ function drawNode(parent_node, menu_id) { if(i==parent_node.childNodes.length-1) hasNextSibling = true; // 후에 사용하기 위해 blog_node_info_list에 node_srl을 값으로 하여 node object 추가 - blog_node_info_list[menu_id][node_srl] = node; + blog_node_info_list[node_srl] = node; // zone_id 값을 세팅 - var zone_id = "menu_"+menu_id+"_"+node_srl; - blog_tree_menu_folder_list[menu_id][blog_tree_menu_folder_list[menu_id].length] = zone_id; + var zone_id = "blog_category_"+node_srl; + blog_tree_menu_folder_list[blog_tree_menu_folder_list.length] = zone_id; - // url을 확인하여 현재의 url과 동일하다고 판단되면 manual_select_node_srl 에 값을 추가 (관리자페이지일 경우는 무시함) - if(node_callback_func[menu_id] == moveTreeMenu && url && typeof(zbxe_url)!="undefined" && zbxe_url == url) manual_select_node_srl = node_srl; + if(url && typeof(zbxe_url)!="undefined" && zbxe_url == url) { + selected = true; + blog_menu_selected = true; + } - // manual_select_node_srl이 node_srl과 같으면 펼침으로 처리 - if(manual_select_node_srl == node_srl) expand = "Y"; + // blog_selected_node이 node_srl과 같으면 펼침으로 처리 + if(selected) expand = "Y"; // 아이콘 설정 - var line_icon = null; - var folder_icon = null; + var line_class = null; + var folder_class = null; // 자식 노드가 있을 경우 자식 노드의 html을 구해옴 var child_output = null; var child_html = ""; + if(hasChild) { // 자식 노드의 zone id를 세팅 var child_zone_id = zone_id+"_child"; - blog_tree_menu_folder_list[menu_id][blog_tree_menu_folder_list[menu_id].length] = child_zone_id; + blog_tree_menu_folder_list[blog_tree_menu_folder_list.length] = child_zone_id; // html을 받아옴 - child_output = drawNode(node, menu_id); + child_output = blogDrawNode(node); var chtml = child_output.html; var cexpand = child_output.expand; if(cexpand == "Y") expand = "Y"; // 무조건 펼침이 아닐 경우 if(expand!="Y") { - if(!hasNextSibling) child_html += ''; - else child_html += ''; + if(!hasNextSibling) child_html += '
'+chtml+'
'; + else child_html += '
'+chtml+'
'; + // 무조건 펼침일 경우 } else { - if(!hasNextSibling) child_html += '
'+chtml+'
'; - else child_html += '
'+chtml+'
'; + if(!hasNextSibling) child_html += '
'+chtml+'
'; + else child_html += '
'+chtml+'
'; } } // 자식 노드가 있는지 확인하여 있으면 아이콘을 바꿈 if(hasChild) { + // 무조건 펼침이 아닐 경우 if(expand != "Y") { if(!hasNextSibling) { - line_icon = "minus"; - folder_icon = "page"; + line_class = "minus"; + folder_class = "folder_close"; } else { - line_icon = "minusbottom"; - folder_icon = "page"; + line_class = "minus_bottom"; + folder_class = "folder_close"; } // 무조건 펼침일 경우 } else { if(!hasNextSibling) { - line_icon = "plus"; - folder_icon = "page"; + line_class = "plus"; + folder_class = "folder_open"; } else { - line_icon = "plusbottom"; - folder_icon = "page"; + line_class = "plus_bottom"; + folder_class = "folder_open"; } } // 자식 노드가 없을 경우 } else { if(hasNextSibling) { - line_icon = "joinbottom"; - folder_icon = "page"; + line_class = "join_bottom"; + folder_class = "page"; } else { - line_icon = "join"; - folder_icon = "page"; + line_class = "join"; + folder_class = "page"; } } // html 작성 - html += '
'; + var click_str = ' class="'+folder_class+'"' ; + if(hasChild) click_str += ' onclick="blogToggleFolder(\''+zone_id+'\');return false;" '; - if(hasChild) html+= ''; - else html+= ''; + var text_class = "unselected"; + if(selected) text_class = "selected"; - html += 'linefolder'; + html += '
'+ + '
'+ + ''+ + ''+text+''+ + '
'; - var chk_enable = xGetElementById(menu_id+"_enable_move"); - if(chk_enable) { - html += ''; - } else { - html += ''; - } - - html += text+''; - - html += child_html; + if(hasChild && child_html) html += child_html; html += '
'; @@ -218,123 +216,39 @@ function drawNode(parent_node, menu_id) { return output; } -// 관리자 모드일 경우 *_enable_move 의 값에 따라 메뉴 이동을 시키거나 정보를 보여주도록 변경 -function doNodeFunc(obj, menu_id, node_srl, zone_id) { - var chk_enable = xGetElementById(menu_id+"_enable_move"); - if(!chk_enable || chk_enable.checked!=true || !obj) { - selectNode(menu_id,node_srl,zone_id); - return; - } - - deSelectNode(); - tree_drag_enable(obj,tree_drag_start,tree_drag,tree_drag_end); -} - -// 수동으로 메뉴를 선택하도록 함 -function manualSelectNode(menu_id, node_srl) { - var zone_id = "menu_"+menu_id+"_"+node_srl; - selectNode(menu_id,node_srl,zone_id,false); - return; -} - // 노드의 폴더 아이콘 클릭시 -function toggleFolder(zone_id) { +function blogToggleFolder(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'); + var line_obj = xGetElementById(zone_id+'_line'); + var folder_obj = xGetElementById(zone_id+'_folder'); // 대상의 자식 노드들이 숨겨져 있다면 열고 아니면 닫기 - if(child_zone.style.display == "block") { + if(folder_obj.className == "folder_open") { 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; + if(line_obj.className.indexOf('bottom')>0) line_obj.className = 'minus_bottom'; + else line_obj.className = 'minus'; + + folder_obj.className = 'folder_close' } 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"; + + if(line_obj.className.indexOf('bottom')>0) line_obj.className = 'plus_bottom'; + else line_obj.className = 'plus'; + + folder_obj.className = 'folder_open'; } } -// 노드의 글자 선택시 -var prev_selected_node = null; -function selectNode(menu_id, node_srl, zone_id, move_url) { - // 선택된 노드를 찾아봄 - var node_zone = xGetElementById(zone_id+'_node'); - if(!node_zone) return; - - // 이전에 선택된 노드가 있었다면 원래데로 돌림 - if(prev_selected_node) { - var prev_zone = xGetElementById(prev_selected_node.id); - if(prev_zone) { - prev_zone.style.backgroundColor = "#ffffff"; - prev_zone.style.fontWeight = "normal"; - prev_zone.style.color = "#000000"; - } - } - - // 선택된 노드의 글자를 변경 - prev_selected_node = node_zone; - node_zone.style.backgroundColor = "#0e078f"; - node_zone.style.fontWeight = "bold"; - node_zone.style.color = "#FFFFFF"; - - // 함수 실행 - if(typeof(move_url)=="undefined"||move_url==true) { - var func = node_callback_func[menu_id]; - func(menu_id, blog_node_info_list[menu_id][node_srl]); - //toggleFolder(zone_id); - } -} - -// 선택된 노드의 표시를 없앰 -function deSelectNode() { - // 이전에 선택된 노드가 있었다면 원래데로 돌림 - if(!prev_selected_node) return; - prev_selected_node.style.backgroundColor = "#ffffff"; - prev_selected_node.style.fontWeight = "normal"; - prev_selected_node.style.color = "#000000"; -} - - -// 모두 닫기 -function closeAllTreeMenu(menu_id) { - for(var i in blog_tree_menu_folder_list[menu_id]) { - var zone_id = blog_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 blog_tree_menu_folder_list[menu_id]) { - var zone_id = blog_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); - } -} - -// 메뉴 클릭시 기본으로 동작할 함수 (사용자 임의 함수로 대체될 수 있음) -function moveTreeMenu(menu_id, node) { +// 노드 클릭시 +function blogSelectNode(node_srl) { // url과 open_window값을 구함 - var node_srl = node.getAttribute("node_srl"); + var node = blog_node_info_list[node_srl]; + if(!node) return; + var url = node.getAttribute("url"); var open_window = node.getAttribute("open_window"); var hasChild = false; @@ -342,8 +256,8 @@ function moveTreeMenu(menu_id, node) { // url이 없고 child가 있으면 해당 폴더 토글한다 if(!url && hasChild) { - var zone_id = "menu_"+menu_id+"_"+node_srl; - toggleFolder(zone_id); + var zone_id = "menu_blog_category_"+node_srl; + blogToggleFolder(zone_id); return; } @@ -360,225 +274,3 @@ function moveTreeMenu(menu_id, node) { } } } - -// 메뉴 드래그 중이라는 상황을 간직할 변수 -var tree_drag_manager = {obj:null, isDrag:false} -var tree_tmp_object = new Array(); -var tree_disappear = 0; - -/** - * 메뉴 드래깅을 위한 함수들 - **/ -// 드래깅시 보여줄 임시 object를 생성하는 함수 -function tree_create_tmp_object(obj) { - var tmp_obj = tree_tmp_object[obj.id]; - if(tmp_obj) return tmp_obj; - - tmp_obj = xCreateElement('DIV'); - tmp_obj.id = obj.id + '_tmp'; - tmp_obj.style.display = 'none'; - tmp_obj.style.position = 'absolute'; - tmp_obj.style.backgroundColor = obj.style.backgroundColor; - tmp_obj.style.fontSize = obj.style.fontSize; - tmp_obj.style.fontFamlily = obj.style.fontFamlily; - tmp_obj.style.color = "#5277ff"; - tmp_obj.style.opacity = 1; - tmp_obj.style.filter = 'alpha(opacity=100)'; - - document.body.appendChild(tmp_obj); - tree_tmp_object[obj.id] = tmp_obj; - return tmp_obj; -} - -// 기생성된 임시 object를 찾아서 return, 없으면 만들어서 return -function tree_get_tmp_object(obj) { - var tmp_obj = tree_tmp_object[obj.id]; - if(!tmp_obj) tmp_obj = tree_create_tmp_object(obj); - return tmp_obj; -} - -// 메뉴에 마우스 클릭이 일어난 시점에 드래그를 위한 제일 첫 동작 (해당 object에 각종 함수나 상태변수 설정) -function tree_drag_enable(child_obj, funcDragStart, funcDrag, funcDragEnd) { - // 클릭이 일어난 메뉴의 상위 object를 찾음 - var obj = child_obj.parentNode.parentNode; - - // 상위 object에 드래그 가능하다는 상태와 각 드래그 관련 함수를 설정 - obj.draggable = true; - obj.drag_start = funcDragStart; - obj.drag = funcDrag; - obj.drag_end = funcDragEnd; - obj.target_id = null; - - // 드래그 가능하지 않다면 드래그 가능하도록 상태 지정하고 mousemove이벤트 등록 - if (!tree_drag_manager.isDrag) { - tree_drag_manager.isDrag = true; - xAddEventListener(document, 'mousemove', tree_drag_mouse_move, false); - } - - // mousedown이벤트 값을 지정 - xAddEventListener(obj, 'mousedown', tree_mouse_down, false); -} - -// 드래그를 시작할때 호출되는 함수 (이동되는 형태를 보여주기 위한 작업을 함) -function tree_drag_start(tobj, px, py) { - var obj = tree_get_tmp_object(tobj); - - xInnerHtml(obj, xInnerHtml(tobj)); - - tobj.source_color = tobj.style.color; - tobj.style.color = "#BBBBBB"; - - xLeft(obj, xPageX(tobj)); - xTop(obj, xPageY(tobj)); - xWidth(obj, xWidth(tobj)); - xHeight(obj, xHeight(tobj)); - - xDisplay(obj, 'block'); -} - -// 드래그 시작후 마우스를 이동할때 발생되는 이벤트에 의해 실행되는 함수 -function tree_drag(tobj, dx, dy) { - var obj = tree_get_tmp_object(tobj); - xLeft(obj, parseInt(xPageX(obj),10) + parseInt(dx,10)); - xTop(obj, parseInt(xPageY(obj),10) + parseInt(dy,10)); - - var menu_id = tobj.id.replace(/menu_/,''); - menu_id = menu_id.replace(/_([0-9]+)$/,''); - if(!menu_id) return; - - for(var node_srl in blog_node_info_list[menu_id]) { - var zone_id = "menu_"+menu_id+"_"+node_srl; - var target_obj = xGetElementById(zone_id); - - var hh = parseInt(xHeight(target_obj),10); - var h = parseInt(parseInt(xHeight(target_obj),10)/2,10); - - var l = xPageX(target_obj); - var t = xPageY(target_obj); - var ll = parseInt(l,10) + parseInt(xWidth(target_obj),10); - var tt = parseInt(t,10) + hh; - - if( tobj != target_obj && tobj.xDPX >= l && tobj.xDPX <= ll) { - if(tobj.xDPY >= t && tobj.xDPY < tt-h) { - try { - target_obj.parentNode.insertBefore(tobj, target_obj); - tobj.target_id = target_obj.id; - } catch(e) { - } - } - } - } -} - -// 드래그 종료 (이동되는 object가 이동할 곳에 서서히 이동되는 것처럼 보이는 효과) -function tree_drag_end(tobj, px, py) { - var obj = tree_get_tmp_object(tobj); - tree_disappear = tree_disapear_object(obj, tobj); - tree_drag_disable(tobj.id); -} - -// 스르르 사라지게 함;; -function tree_disapear_object(obj, tobj) { - var it = 150; - var ib = 15; - - 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(tree_disappear); - xInnerHtml(tobj,xInnerHtml(obj)); - xInnerHtml(obj,''); - xDisplay(obj, 'none'); - return; - } - ib -= 5; - x-=ldt; - y-=tdt; - xLeft(obj, x); - xTop(obj, y); - }, it/ib); -} - -// 마우스다운 이벤트 발생시 호출됨 -function tree_mouse_down(e) { - var evt = new xEvent(e); - var obj = evt.target; - - while(obj && !obj.draggable) { - obj = xParent(obj, true); - } - - if(obj) { - xPreventDefault(e); - obj.xDPX = evt.pageX; - obj.xDPY = evt.pageY; - tree_drag_manager.obj = obj; - xAddEventListener(document, 'mouseup', tree_mouse_up, false); - if (obj.drag_start) obj.drag_start(obj, evt.pageX, evt.pageY); - } -} - -// 마우스 버튼을 놓았을때 동작될 함수 (각종 이벤트 해제 및 변수 설정 초기화) -function tree_mouse_up(e) { - if (tree_drag_manager.obj) { - xPreventDefault(e); - xRemoveEventListener(document, 'mouseup', tree_mouse_up, false); - - if (tree_drag_manager.obj.drag_end) { - var evt = new xEvent(e); - tree_drag_manager.obj.drag_end(tree_drag_manager.obj, evt.pageX, evt.pageY); - } - - tree_drag_manager.obj = null; - tree_drag_manager.isDrag = false; - } -} - -// 드래그할때의 object이동등을 담당 -function tree_drag_mouse_move(e) { - var evt = new xEvent(e); - - if (tree_drag_manager.obj) { - xPreventDefault(e); - - var obj = tree_drag_manager.obj; - var dx = evt.pageX - obj.xDPX; - var dy = evt.pageY - obj.xDPY; - - obj.xDPX = evt.pageX; - obj.xDPY = evt.pageY; - - if (obj.drag) { - obj.drag(obj, dx, dy); - } else { - xMoveTo(obj, xLeft(obj) + dx, xTop(obj) + dy); - } - } -} - -// 해당 object 에 더 이상 drag가 되지 않도록 설정 -function tree_drag_disable(id) { - if (!tree_drag_manager) return; - var obj = xGetElementById(id); - obj.draggable = false; - obj.drag_start = null; - obj.drag = null; - obj.drag_end = null; - obj.style.color = obj.source_color; - - xRemoveEventListener(obj, 'mousedown', tree_mouse_down, false); - - if(obj.id && obj.target_id && obj.id!=obj.target_id) { - var menu_id = obj.id.replace(/menu_/,''); - menu_id = menu_id.replace(/_([0-9]+)$/,''); - if(menu_id) { - var callback_move_func = node_move_callback_func[menu_id]; - if(callback_move_func) callback_move_func(menu_id, obj.id, obj.target_id); - } - } - obj.target_id = null; -} diff --git a/modules/blog/skins/default/layout.html b/modules/blog/skins/default/layout.html index 7c9970571..d29f50739 100644 --- a/modules/blog/skins/default/layout.html +++ b/modules/blog/skins/default/layout.html @@ -1,5 +1,6 @@ + diff --git a/modules/menu/menu.view.php b/modules/menu/menu.view.php index 0c3e3c719..191f48d5a 100644 --- a/modules/menu/menu.view.php +++ b/modules/menu/menu.view.php @@ -12,6 +12,7 @@ **/ function init() { $this->setTemplatePath($this->module_path.'tpl'); + Context::addJsFile('./common/js/tree_menu.js'); } /**