git-svn-id: http://xe-core.googlecode.com/svn/sandbox@2327 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
zero 2007-08-12 03:59:52 +00:00
commit 8326004cb2
2773 changed files with 91485 additions and 0 deletions

167
common/css/button.css Normal file
View file

@ -0,0 +1,167 @@
/*
http://www.hedgerwow.com/360/dhtml/css-round-button/demo.php
*/
a.button, span.button, del.button {
display:-moz-inline-box;
display:inline-block;
cursor:pointer;
border:none;
font-size:0;
line-height:0;
/*
for Safari, read this first
http://creativebits.org/webdev/safari_background_repeat_bug_fix
*/
background-position:0 -3px;
background-repeat:no-repeat;
height:24px;
text-decoration:none;
color:#2e523b;
font-style:normal;
margin:0 6px 0px 0;
padding:0 10px 0 0;
vertical-align:middle;
padding-top:-2px;
position:relative;
_width:10px;
_overflow-y:hidden;
}
a.button, span.button, del.button, a.button span, span.button button, span.button input, del.button span {
background-image:url(../tpl/images/form_buttons.png);
_background-image:url(../tpl/images/form_buttons.gif);
}
a.button span, span.button button, span.button input, del.button span {
white-space:nowrap;
cursor:pointer;
color:#222;
display:-moz-inline-box;
display:inline-block;
line-height:1;
letter-spacing:0 !important;
font-size:12px !important;
font-style:normal;
background-color:transparent;
background-position:100% -3px;
background-repeat:no-repeat;
height:24px;
padding:4px 11px 0 7px;
margin:0 -18px 0 6px;
border:none;
vertical-align:text-top;
zoom:1;
_position:relative;
_padding:3px 13px 0 4px;
_margin:0 -10px 0 4px;
_display:block;
_top:0;
_right:-5px;
}
*:first-child+html a.button span, span.button button, span.button input, del.button span { padding-top:6px; }
span.button button {
line-height:2.5;/*Opera need this*/
}
html.safari a.button span, html.safari del.button span {
line-height:1.3;
}
html.safari span.button button {
line-height:2.6;
}
html.safari a.button:focus, html.safari span.button button:focus {
outline:none;
}
del.button{
/* cursor:not-allowed; */
background-position:0 -123px;
}
del.button span {
cursor:default;
color:#aaa !important;
background-position:100% -123px;
}
a.button span {
_padding-top:7px;
}
*:first-child+html a.button span { padding-top:7px; }
span.button button, span.button input {
padding:0 6px 0 0;
line-height:2.5;/*Opera need this*/
}
/** optional **/
/*
a.button:visited{
color:#aaa;
}
*/
/*Hover Style*/
a.button:hover, span.button:hover, a.button:focus, a.dom-button-focus, span.button-behavior-hover {
background-position:0 -63px;
color:#222;
text-decoration:none;
}
a.button:hover span, span.button:hover input, span.button:hover button, a.button:focus span, span.button-behavior-hover button, span.button-behavior-hover input {
background-position:100% -63px;
}
a.button:active, a.button:focus span {
color:#444;
}
del.button-behavior-hover, del.button:hover {
background-position:0 -183px;
/* cursor:not-allowed; */
}
del.button-behavior-hover span, del.button:hover span {
background-position:100% -183px;
/* cursor:not-allowed; */
}
/*Optional hack for IE6 to simulate :hover selector*/
span.button button, del.button span, span.button input {
_behavior:expression(
(function(el){
if( typeof( behavior_onMouseEnter) == 'undefined'){
behavior_onMouseEnter = function(el) {
var dEl = this.parentNode;
var sClass = dEl.className ;
dEl.__defaultClassName = sClass ;
dEl.className = sClass + ' button-behavior-hover';
this.setCapture();
};
behavior_onMouseLeave = function(el) {
var dEl = this.parentNode;
dEl.className = dEl.__defaultClassName ;
dEl.__defaultClassName = undefined;
this.releaseCapture();
};
};
el.runtimeStyle.behavior = 'none';
el.onmouseenter = behavior_onMouseEnter;
el.onmouseleave = behavior_onMouseLeave;
}
)(this));
}

79
common/css/default.css Normal file
View file

@ -0,0 +1,79 @@
@charset "utf-8";
/*
Used Hack
IE6 & Below
{ property:value; _property:value; }
IE7 Only
*:first-child+html #selector
IE7 & IE6 & Below
*:first-child+html #selector,
* html #selector {}
*/
/* Special Class Selector */
.fr { float:right; }
.fl { float:left; }
.clear { clear:both; }
.fwB { font-weight:bold;}
.tCenter { text-align:center; }
.tRight { text-align:right; }
.tLeft { text-align:left; }
.gap1 { margin-top:.8em; }
/* default.css - Type Selector Definition */
* { margin:0; padding:0; }
html { width:100%; position:relative;}
body { margin:0; font-size:.75em; font-family:sans-serif;}
img { border:none; }
label { cursor:pointer; }
form { margin:0; padding:0; }
.iePngFix { behavior:url(./common/js/iePngFix.htc); }
.zbxe_info { vertical-align:middle; behavior:url(./common/js/iePngFix.htc); }
/* Input Style Definition */
.inputTypeText { border:1px solid; border-color:#a6a6a6 #d8d8d8 #d8d8d8 #a6a6a6; height:1.4em; padding:.2em 0 0 .3em; background:#ffffff; font-size:1em; }
.inputTypeText:hover,
.inputTypeText:focus { background:#f4f4f4; }
.inputTypeTextArea { border:1px solid !important; border-color:#a6a6a6 #d8d8d8 #d8d8d8 #a6a6a6 !important; background:#ffffff; font-size:1em;}
.w40 { width:40px; }
.w60 { width:60px; }
.w80 { width:80px; }
.w100 { width:100px; }
.w120 { width:120px; }
.w140 { width:140px; }
.w200 { width:200px; }
.w300 { width:300px; }
.w400 { width:400px; }
/* editor style */
a.bold { font-weight:bold; }
.editor_blue_text { color: #145ff9; text-decoration:underline; }
.editor_blue_text a { color: #145ff9; text-decoration:underline; }
.editor_red_text { color: #f42126; text-decoration:underline; }
.editor_red_text a { color: #f42126; text-decoration:underline; }
.editor_yellow_text { color: #c9bd00; text-decoration:underline; }
.editor_yellow_text a { color: #c9bd00; text-decoration:underline; }
.editor_green_text { color: #08830B; text-decoration:underline; }
.editor_green_text a { color: #08830B; text-decoration:underline; }
.folder_opener { display: block; }
.folder_closer { display: none; }
.folder_area { display: none; }
.zbxe_widget_output { background-image:url(../tpl/images/widget_text.gif) no-repeat center bottom; display:block;}
.member_signature { margin-top:10px; border:1px solid #DDDDDD; padding:10px; }
#waitingforserverresponse { display:inline; border:2px solid #444444; background-color:#FFFFFF; padding:15px 20px 13px 20px; font-weight:bold; color:#444444; top:40px; left:40px; position:absolute; z-index:100; visibility:hidden; }
#fororiginalimageareabg { z-index:1001; background-color:#FFFFFF; width:100%; height:100%; top:0px; left:0px; position:relative; padding:20px 10px 10px 10px; border:8px solid #DDDDDD; }
#fororiginalimagearea { visibility:hidden; padding:0px; margin:0px; width:100%; height:100%; top:0px; left:0px; position:absolute; z-index:1000; text-align:left; overflow:hidden; }
#fororiginalimage { z-index:1002; }
#closeOriginalImageBtn { position:absolute; right:8px; top:5px; cursor:pointer; width:50px; height:12px; z-index:1003; }
#membermenuarea { position:absolute; left:0px; top:0px; z-index:1003; visibility:hidden; border:2px solid #D9D9D9; background-color:#FFFFFF; padding:0; }
#membermenuarea .box { border:1px solid #CACACA; background-color:#FFFFFF; padding:7px; line-height:22px;}
#membermenuarea .item { color:#333333; cursor:pointer; margin:0; padding:3px 0 3px 18px; white-space:nowrap; height:22px;}
#membermenuarea .item_on { color:#333333; font-weight:bold; margin:0; cursor:pointer; padding:3px 0 3px 18px; height:22px; letter-spacing:-1px; white-space:nowrap;}

614
common/js/common.js Normal file
View file

@ -0,0 +1,614 @@
/**
* @file common.js
* @author zero (zero@nzeo.com)
* @brief 몇가지 유용한 & 기본적으로 자주 사용되는 자바스크립트 함수들 모음
**/
/**
* @brief location.href에서 특정 key의 값을 return
**/
String.prototype.getQuery = function(key) {
var idx = this.indexOf('?');
if(idx == -1) return null;
var query_string = this.substr(idx+1, this.length);
var args = {}
query_string.replace(/([^=]+)=([^&]*)(&|$)/g, function() { args[arguments[1]] = arguments[2]; });
var q = args[key];
if(typeof(q)=="undefined") q = "";
return q;
}
/**
* @brief location.href에서 특정 key의 값을 return
**/
String.prototype.setQuery = function(key, val) {
var idx = this.indexOf('?');
var uri = this;
uri = uri.replace(/#$/,'');
if(idx != -1) {
uri = this.substr(0, idx);
var query_string = this.substr(idx+1, this.length);
var args = new Array();
query_string.replace(/([^=]+)=([^&]*)(&|$)/g, function() { args[arguments[1]] = arguments[2]; });
args[key] = val;
var q_list = new Array();
for(var i in args) {
var arg = args[i];
if(!arg.toString().trim()) continue;
q_list[q_list.length] = i+'='+arg;
}
return uri+"?"+q_list.join("&");
} else {
if(val.toString().trim()) return uri+"?"+key+"="+val;
else return uri;
}
}
/**
* @brief string prototype으로 trim 함수 추가
**/
String.prototype.trim = function() {
return this.replace(/(^\s*)|(\s*$)/g, "");
}
/**
* @brief 주어진 인자가 하나라도 defined되어 있지 않으면 false return
**/
function isDef() {
for(var i=0; i<arguments.length; ++i) {
if(typeof(arguments[i])=="undefined") return false;
}
return true;
}
/**
* @brief 윈도우 오픈
* 열려진 윈도우의 관리를 통해 window.focus()등을 FF에서도 비슷하게 구현함
**/
var winopen_list = new Array();
function winopen(url, target, attribute) {
try {
if(target != "_blank" && winopen_list[target]) {
winopen_list[target].close();
winopen_list[target] = null;
}
} catch(e) {
}
if(typeof(target)=='undefined') target = '_blank';
if(typeof(attribute)=='undefined') attribute = '';
var win = window.open(url, target, attribute);
win.focus();
if(target != "_blank") winopen_list[target] = win;
}
/**
* @brief 팝업으로만 띄우기
* common/tpl/popup_layout.html이 요청되는 제로보드 XE내의 팝업일 경우에 사용
**/
function popopen(url, target) {
if(typeof(target)=="undefined") target = "_blank";
winopen(url, target, "left=10,top=10,width=10,height=10,scrollbars=no,resizable=no,toolbars=no");
}
/**
* @brief 메일 보내기용
**/
function sendMailTo(to) {
location.href="mailto:"+to;
}
/**
* @brief url이동 (open_window 값이 N 아니면 새창으로 띄움)
**/
function move_url(url, open_wnidow) {
if(!url) return false;
if(typeof(open_wnidow)=='undefined') open_wnidow = 'N';
if(open_wnidow=='N') open_wnidow = false;
else open_wnidow = true;
if(/^\./.test(url)) url = request_uri+url;
if(open_wnidow) {
winopen(url);
} else {
location.href=url;
}
return false;
}
/**
* @brief 특정 div(or span...) display옵션 토글
**/
function toggleDisplay(obj, opt) {
obj = xGetElementById(obj);
if(typeof(opt)=="undefined") opt = "inline";
if(obj.style.display == "none") obj.style.display = opt;
else obj.style.display = "none";
}
/**
* @brief 멀티미디어 출력용 (IE에서 플래쉬/동영상 주변에 점선 생김 방지용)
**/
function displayMultimedia(src, width, height, auto_start) {
if(src.indexOf('files')==0) src = request_uri+src;
if(auto_start) auto_start = "true";
else auto_start = "false";
var clsid = "";
var codebase = "";
var html = "";
if(/\.swf/i.test(src)) {
clsid = "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000";
codebase = "http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0";
html = ""+
"<object classid=\""+clsid+"\" codebase=\""+codebase+"\" width=\""+width+"\" height=\""+height+"\" >"+
"<param name=\"wmode\" value=\"transparent\" />"+
"<param name=\"allowScriptAccess\" value=\"always\" />"+
"<param name=\"movie\" value=\""+src+"\" />"+
"<param name=\"quality\" value=\"high\" />"+
"<embed src=\""+src+"\" autostart=\""+auto_start+"\" width=\""+width+"\" height=\""+height+"\"></embed>"+
"<\/object>";
} else if(/\.flv/i.test(src)) {
html = "<embed src=\""+request_uri+"common/tpl/images/flvplayer.swf?autoStart="+auto_start+"&file="+src+"\" width=\""+width+"\" height=\""+height+"\" type=\"application/x-shockwave-flash\"></embed>";
} else {
html = "<embed src=\""+src+"\" autostart=\""+auto_start+"\" width=\""+width+"\" height=\""+height+"\"></embed>";
}
document.writeln(html);
}
/**
* @brief 화면내에서 상위 영역보다 이미지가 크면 리사이즈를 하고 클릭시 원본을 보여줄수 있도록 변경
**/
function resizeImageContents() {
var objs = xGetElementsByTagName("IMG");
for(var i in objs) {
var obj = objs[i];
var parent = obj.parentNode;
if(!obj||!parent) continue;
while(parent.parentNode && parent.nodeName != "TD" && parent.nodeName != "DIV") {
parent = parent.parentNode;
}
if(parent.nodeName != "TD" && parent.nodeName != "DIV") continue;
if(obj.parentNode.nodeName =='A') continue;
if(/\/modules\//i.test(obj.src)) continue;
if(/\/layouts\//i.test(obj.src)) continue;
if(/\/widgets\//i.test(obj.src)) continue;
if(/\/classes\//i.test(obj.src)) continue;
if(/\/common\/tpl\//i.test(obj.src)) continue;
if(/\/member_extra_info\//i.test(obj.src)) continue;
var parent_width = xWidth(parent);
var obj_width = xWidth(obj);
var orig_img = new Image();
orig_img.src = obj.src;
if(parent_width<1 || obj_width <1) continue;
if(parent_width>=obj_width && orig_img.width <= obj_width) continue;
obj.style.cursor = "pointer";
obj.source_width = orig_img.width;
obj.source_height = orig_img.height;
if(obj_width >= parent_width) {
var per = parent_width/obj_width;
xWidth(obj, xWidth(parent)-1);
xHeight(obj, xHeight(obj)*per);
}
xAddEventListener(obj,"click", showOriginalImage);
}
}
xAddEventListener(window, "load", resizeImageContents);
/**
* @brief 에디터에서 사용되는 내용 여닫는 코드 (고정, zbxe용)
**/
function zbxe_folder_open(id) {
var open_text_obj = xGetElementById("folder_open_"+id);
var close_text_obj = xGetElementById("folder_close_"+id);
var folder_obj = xGetElementById("folder_"+id);
open_text_obj.style.display = "none";
close_text_obj.style.display = "block";
folder_obj.style.display = "block";
}
function zbxe_folder_close(id) {
var open_text_obj = xGetElementById("folder_open_"+id);
var close_text_obj = xGetElementById("folder_close_"+id);
var folder_obj = xGetElementById("folder_"+id);
open_text_obj.style.display = "block";
close_text_obj.style.display = "none";
folder_obj.style.display = "none";
}
/**
* @brief 에디터에서 사용하되 내용 여닫는 코드 (zb5beta beta 호환용으로 남겨 놓음)
**/
function svc_folder_open(id) {
var open_text_obj = xGetElementById("_folder_open_"+id);
var close_text_obj = xGetElementById("_folder_close_"+id);
var folder_obj = xGetElementById("_folder_"+id);
open_text_obj.style.display = "none";
close_text_obj.style.display = "block";
folder_obj.style.display = "block";
}
function svc_folder_close(id) {
var open_text_obj = xGetElementById("_folder_open_"+id);
var close_text_obj = xGetElementById("_folder_close_"+id);
var folder_obj = xGetElementById("_folder_"+id);
open_text_obj.style.display = "block";
close_text_obj.style.display = "none";
folder_obj.style.display = "none";
}
/**
* @brief 팝업의 경우 내용에 맞춰 윈도우의 크기를 조절해줌
* 팝업의 내용에 맞게 크기를 늘리는 것은... 쉽게 되지는 않음.. .
* popup_layout 에서 window.onload 자동 요청됨.
**/
function setFixedPopupSize() {
if(xGetElementById('popBody')) {
if(xHeight('popBody')>600) {
xGetElementById('popBody').style.overflowY = 'scroll';
xGetElementById('popBody').style.overflowX = 'hidden';
xHeight('popBody', 600);
}
}
var w = xWidth("popup_content");
var h = xHeight("popup_content");
var obj_list = xGetElementsByTagName('div');
for(i=0;i<obj_list.length;i++) {
var ww = xWidth(obj_list[i]);
var id = obj_list[i].id;
if(id == 'waitingforserverresponse' || id == 'fororiginalimagearea' || id == 'fororiginalimageareabg') continue;
if(ww>w) w = ww;
}
// 윈도우에서는 브라우저 상관없이 가로 픽셀이 조금 더 늘어나야 한다.
if(xUA.indexOf('windows')>0) {
if(xOp7Up) w += 10;
else if(xIE4Up) w += 10;
else w += 6;
}
window.resizeTo(w,h);
var h1 = xHeight(window.document.body);
window.resizeBy(0,h-h1);
window.scrollTo(0,0);
}
/**
* @brief 본문내에서 컨텐츠 영역보다 이미지의 경우 원본 크기를 보여줌
**/
function showOriginalImage(evt) {
var e = new xEvent(evt);
var obj = e.target;
var src = obj.src;
var orig_image = xGetElementById("fororiginalimage");
var tmp_image = new Image();
tmp_image.src = src;
var image_width = tmp_image.width;
var image_height = tmp_image.height;
orig_image.style.margin = "0px 0px 0px 0px";
orig_image.style.cursor = "move";
orig_image.src = src;
var areabg = xGetElementById("fororiginalimageareabg");
xWidth(areabg, image_width+36);
xHeight(areabg, image_height+46);
var area = xGetElementById("fororiginalimagearea");
xLeft(area, xScrollLeft());
xTop(area, xScrollTop());
xWidth(area, xWidth(document));
xHeight(area, xHeight(document));
area.style.visibility = "visible";
var area_width = xWidth(area);
var area_height = xHeight(area);
var x = parseInt((area_width-image_width)/2,10);
var y = parseInt((area_height-image_height)/2,10);
if(x<0) x = 0;
if(y<0) y = 0;
xLeft(areabg, x);
xTop(areabg, y);
var sel_list = xGetElementsByTagName("select");
for (var i = 0; i < sel_list.length; ++i) sel_list[i].style.visibility = "hidden";
xAddEventListener(orig_image, "mousedown", origImageDragEnable);
xAddEventListener(orig_image, "dblclick", closeOriginalImage);
xAddEventListener(window, "scroll", closeOriginalImage);
xAddEventListener(window, "resize", closeOriginalImage);
areabg.style.visibility = 'visible';
}
/**
* @brief 원본 이미지 보여준 닫는 함수
**/
function closeOriginalImage(evt) {
var area = xGetElementById("fororiginalimagearea");
if(area.style.visibility != "visible") return;
area.style.visibility = "hidden";
xGetElementById("fororiginalimageareabg").style.visibility = "hidden";
var sel_list = xGetElementsByTagName("select");
for (var i = 0; i < sel_list.length; ++i) sel_list[i].style.visibility = "visible";
xRemoveEventListener(area, "mousedown", closeOriginalImage);
xRemoveEventListener(window, "scroll", closeOriginalImage);
xRemoveEventListener(window, "resize", closeOriginalImage);
}
/**
* @brief 원본 이미지 드래그
**/
var origDragManager = {obj:null, isDrag:false}
function origImageDragEnable(evt) {
var e = new xEvent(evt);
var obj = e.target;
if(obj.id != "fororiginalimage") return;
obj.draggable = true;
obj.startX = e.pageX;
obj.startY = e.pageY;
if(!origDragManager.isDrag) {
origDragManager.isDrag = true;
xAddEventListener(document, "mousemove", origImageDragMouseMove, false);
}
xAddEventListener(document, "mousedown", origImageDragMouseDown, false);
}
function origImageDrag(obj, px, py) {
var x = px - obj.startX;
var y = py - obj.startY;
var areabg = xGetElementById("fororiginalimageareabg");
xLeft(areabg, xLeft(areabg)+x);
xTop(areabg, xTop(areabg)+y);
obj.startX = px;
obj.startY = py;
}
function origImageDragMouseDown(evt) {
var e = new xEvent(evt);
var obj = e.target;
if(obj.id != "fororiginalimage" || !obj.draggable) return;
if(obj) {
xPreventDefault(evt);
obj.startX = e.pageX;
obj.startY = e.pageY;
origDragManager.obj = obj;
xAddEventListener(document, 'mouseup', origImageDragMouseUp, false);
origImageDrag(obj, e.pageX, e.pageY);
}
}
function origImageDragMouseUp(evt) {
if(origDragManager.obj) {
xPreventDefault(evt);
xRemoveEventListener(document, 'mouseup', origImageDragMouseUp, false);
xRemoveEventListener(document, 'mousemove', origImageDragMouseMove, false);
xRemoveEventListener(document, 'mousemdown', origImageDragMouseDown, false);
origDragManager.obj.draggable = false;
origDragManager.obj = null;
origDragManager.isDrag = false;
}
}
function origImageDragMouseMove(evt) {
var e = new xEvent(evt);
var obj = e.target;
if(!obj) return;
if(obj.id != "fororiginalimage") {
xPreventDefault(evt);
xRemoveEventListener(document, 'mouseup', origImageDragMouseUp, false);
xRemoveEventListener(document, 'mousemove', origImageDragMouseMove, false);
xRemoveEventListener(document, 'mousemdown', origImageDragMouseDown, false);
origDragManager.obj.draggable = false;
origDragManager.obj = null;
origDragManager.isDrag = false;
return;
}
xPreventDefault(evt);
origDragManager.obj = obj;
xAddEventListener(document, 'mouseup', origImageDragMouseUp, false);
origImageDrag(obj, e.pageX, e.pageY);
}
/**
* @brief 이름을 클릭하였을 경우 메뉴를 보여주는 함수
* 이름 클릭시 MemberModel::getMemberMenu 호출하여 결과를 보여줌 (사용자의 속성에 따라 메뉴가 달라지고 애드온의 연결을 하기 위해서임)
**/
xAddEventListener(document, 'click', chkMemberMenu);
xAddEventListener(window, 'load', function() { setMemberMenuObjCursor(xGetElementsByTagName("div")); xGetElementsByTagName("span"); } );
var loaded_member_menu_list = new Array();
// className = "member_*" 일 경우의 object가 클릭되면 해당 회원의 메뉴를 출력함
function chkMemberMenu(evt) {
var area = xGetElementById("membermenuarea");
if(!area) return;
if(area.style.visibility!="hidden") area.style.visibility="hidden";
var e = new xEvent(evt);
if(!e) return;
var obj = e.target;
while(obj) {
if(obj && obj.className && obj.className.search("member_")!=-1) break;
obj = obj.parentNode;
}
if(!obj || !obj.className || obj.className.search("member_")==-1) return;
if(obj.className.indexOf('member_-1')>=0) return;
var member_srl = parseInt(obj.className.replace(/member_([0-9]+)/ig,'$1').replace(/([^0-9]*)/ig,''),10);
if(!member_srl) return;
// 현재 글의 mid, module를 구함
var mid = current_mid;
// 서버에 메뉴를 요청
var params = new Array();
params["member_srl"] = member_srl;
params["cur_mid"] = mid;
params["cur_act"] = current_url.getQuery('act');
params["page_x"] = e.pageX;
params["page_y"] = e.pageY;
var response_tags = new Array("error","message","menu_list");
if(loaded_member_menu_list[member_srl]) {
params["menu_list"] = loaded_member_menu_list[member_srl];
displayMemberMenu(params, response_tags, params);
return;
}
show_waiting_message = false;
exec_xml("member", "getMemberMenu", params, displayMemberMenu, response_tags, params);
show_waiting_message = true;
}
function displayMemberMenu(ret_obj, response_tags, params) {
var area = xGetElementById("membermenuarea");
var menu_list = ret_obj['menu_list'];
var member_srl = params["member_srl"];
var html = "";
if(loaded_member_menu_list[member_srl]) {
html = loaded_member_menu_list[member_srl];
} 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();
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 className = "item";
//if(i==infos.length-1) className = "item";
if(!str || !func) continue;
html += "<span class=\""+className+"\" onmouseover=\"this.className='"+className+"_on'\" onmouseout=\"this.className='"+className+"'\" style=\"background:url("+icon+") no-repeat left center;\" onclick=\""+func+"\">"+str+"</span><br />";
}
}
loaded_member_menu_list[member_srl] = html;
}
if(html) {
xInnerHtml('membermenuarea', "<div class=\"box\">"+html+"</div>");
xWidth(area, xWidth(area));
xLeft(area, params["page_x"]);
xTop(area, params["page_y"]);
if(xWidth(area)+xLeft(area)>xClientWidth()+xScrollLeft()) xLeft(area, xClientWidth()-xWidth(area)+xScrollLeft());
if(xHeight(area)+xTop(area)>xClientHeight()+xScrollTop()) xTop(area, xClientHeight()-xHeight(area)+xScrollTop());
area.style.visibility = "visible";
}
}
// className = "member_*" 의 object의 cursor를 pointer로 본경
function setMemberMenuObjCursor(obj) {
for (var i = 0; i < obj.length; ++i) {
var node = obj[i];
if(node.className && node.className.search(/member_([0-9]+)/ig)!=-1) {
var member_srl = parseInt(node.className.replace(/member_([0-9]+)/ig,'$1').replace(/([^0-9]*)/ig,''),10);
if(member_srl<1) continue;
node.style.cursor = "pointer";
}
}
}
// 날짜 선택 (달력 열기)
function open_calendar(fo_id, day_str, callback_func) {
if(typeof(day_str)=="undefined") day_str = "";
var url = "./common/tpl/calendar.php?";
if(fo_id) url+="fo_id="+fo_id;
if(day_str) url+="&day_str="+day_str;
if(callback_func) url+="&callback_func="+callback_func;
popopen(url, 'Calendar');
}
// 언어코드 (lang_type) 쿠키값 변경
function doChangeLangType(obj) {
if(typeof(obj)=="string") {
setLangType(obj);
} else {
var val = obj.options[obj.selectedIndex].value;
setLangType(val);
}
location.reload();
}
function setLangType(lang_type) {
var expire = new Date();
expire.setTime(expire.getTime()+ (7000 * 24 * 3600000));
xSetCookie('lang_type', lang_type, expire);
}
/* 미리보기 */
function doDocumentPreview(obj) {
var fo_obj = obj;
while(fo_obj.nodeName != "FORM") {
fo_obj = fo_obj.parentNode;
}
if(fo_obj.nodeName != "FORM") return;
var content = fo_obj.content.value;
var win = window.open("","previewDocument","toolbars=no,width=700px;height=800px,scrollbars=yes,resizable=yes");
var dummy_obj = xGetElementById("previewDocument");
if(!dummy_obj) {
var fo_code = '<form id="previewDocument" target="previewDocument" method="post" action="'+request_uri+'">'+
'<input type="hidden" name="module" value="document" />'+
'<input type="hidden" name="act" value="dispDocumentPreview" />'+
'<input type="hidden" name="content" />'+
'</form>';
var dummy = xCreateElement("DIV");
xInnerHtml(dummy, fo_code);
window.document.body.insertBefore(dummy,window.document.body.lastChild);
dummy_obj = xGetElementById("previewDocument");
}
if(dummy_obj) {
dummy_obj.content.value = content;
dummy_obj.submit();
}
}
/* 스킨 정보 */
function viewSkinInfo(module, skin) {
popopen("./?module=module&act=dispModuleSkinInfo&selected_module="+module+"&skin="+skin, 'SkinInfo');
}

64
common/js/iePngFix.htc Normal file
View file

@ -0,0 +1,64 @@
<public:component>
<public:attach event="onpropertychange" onevent="doFix()" />
<script type="text/javascript">
// IE5.5+ PNG Alpha Fix v1.0RC4
// (c) 2004-2005 Angus Turnbull http://www.twinhelix.com
// This is licensed under the CC-GNU LGPL, version 2.1 or later.
// For details, see: http://creativecommons.org/licenses/LGPL/2.1/
// This must be a path to a blank image. That's all the configuration you need.
if (typeof blankImg == 'undefined') var blankImg = './common/tpl/images/blank.gif'; // 1x1px 짜리 투명 이미지(blank.gif)의 경로를 변경.
var f = 'DXImageTransform.Microsoft.AlphaImageLoader';
function filt(s, m)
{
if (filters[f])
{
filters[f].enabled = s ? true : false;
if (s) with (filters[f]) { src = s; sizingMethod = m }
}
else if (s) style.filter = 'progid:'+f+'(src="'+s+'",sizingMethod="'+m+'")';
}
function doFix()
{
// Assume IE7 is OK.
if (!/MSIE (5\.5|6\.)/.test(navigator.userAgent) ||
(event && !/(background|src)/.test(event.propertyName))) return;
var bgImg = currentStyle.backgroundImage || style.backgroundImage;
if (tagName == 'IMG')
{
if ((/\.png$/i).test(src))
{
if (currentStyle.width == 'auto' && currentStyle.height == 'auto')
style.width = offsetWidth + 'px';
filt(src, 'image');
// 'scale' 을 'image' 으로 변경하면 padding 적용시 나타나는 이미지 크기의 변화(잘못된 렌더링)를 방지할 수 있다. 하지만 border 표현에 문제가 생긴다.
src = blankImg;
}
else if (src.indexOf(blankImg) < 0) filt();
}
else if (bgImg && bgImg != 'none')
{
if (bgImg.match(/^url[("']+(.*\.png)[)"']+$/i))
{
var s = RegExp.$1;
if (currentStyle.width == 'auto' && currentStyle.height == 'auto')
style.width = offsetWidth + 'px';
style.backgroundImage = 'none';
filt(s, 'crop');
// IE link fix.
for (var n = 0; n < childNodes.length; n++)
if (childNodes[n].style) childNodes[n].style.position = 'relative';
}
else filt();
}
}
doFix();
</script>
</public:component>

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

@ -0,0 +1,636 @@
/**
* @file tree_menu.js
* @author zero (zero@nzeo.com)
* @brief xml파일을 읽어서 트리 메뉴를 그려줌
*
* 일단 이것 저것 꽁수가 들어간 것이긴 한데 속도나 기타 면에서 쓸만함...\n
* 다만 제로보드에 특화되어 있어서....\n
* GPL License 따릅니당~~~\n
* 언제나 그렇듯 필요하신 분은 가져가서 쓰세요.\n
* 좋게 개량하시면 공유해주세요~\n
**/
// 트리메뉴에서 사용될 아이콘의 위치
var tree_menu_icon_path = "./common/tpl/images/";
// 아이콘을 미리 생성해 놓음
var tree_folder_icon = new Image();
tree_folder_icon.src = tree_menu_icon_path+"page.gif";
var tree_open_folder_icon = new Image();
tree_open_folder_icon.src = tree_menu_icon_path+"page.gif";
var tree_minus_icon = new Image();
tree_minus_icon.src = tree_menu_icon_path+"minus.gif";
var tree_minus_bottom_icon = new Image();
tree_minus_bottom_icon.src = tree_menu_icon_path+"minusbottom.gif";
var tree_plus_icon = new Image();
tree_plus_icon.src = tree_menu_icon_path+"plus.gif";
var tree_plus_bottom_icon = new Image();
tree_plus_bottom_icon.src = tree_menu_icon_path+"plusbottom.gif";
// 폴더를 모두 열고/닫기 위한 변수 설정
var tree_menu_folder_list = new Array();
// 노드의 정보를 가지고 있을 변수
var node_info_list = new Array();
// menu_id별로 요청된 클릭시 실행 될 callback_func
var node_callback_func = new Array();
// menu_id별로 요청된 드래그시 실행될 callback_func
var node_move_callback_func = new Array();
// 트리메뉴의 정보를 담고 있는 xml파일을 읽고 drawTreeMenu()를 호출하는 함수
function loadTreeMenu(url, menu_id, zone_id, title, index_url , callback_func, manual_select_node_srl, callback_move_func) {
// 일단 그릴 곳을 찾아서 사전 작업을 함 (그릴 곳이 없다면 아예 시도를 안함)
var zone = xGetElementById(zone_id);
if(typeof(zone)=="undefined") return;
// 관리가 아닌 사용일경우는 menu_id를 변경
if(typeof(callback_func)=='undefined') menu_id = 'display_'+menu_id;
// 노드 정보들을 담을 변수 세팅
node_info_list[menu_id] = new Array();
if(typeof(title)=='undefined') title = '';
// 사용자 정의 함수가 없다면 moveTreeMenu()라는 기본적인 동작을 하는 함수를 대입
if(typeof(callback_func)=='undefined') {
callback_func = moveTreeMenu;
}
if(typeof(callback_move_func)=='undefined') {
callback_move_func = null;
}
// 한 페이지에 다수의 menu_id가 있을 수 있으므로 menu_id별로 함수를 저장
node_callback_func[menu_id] = callback_func;
node_move_callback_func[menu_id] = callback_move_func;
// 직접 선택시키려는 메뉴 인자값이 없으면 초기화
if(typeof(manual_select_node_srl)=='undefined') manual_select_node_srl = '';
// xml_handler를 이용해서 직접 메뉴 xml파일(layout module에서 생성)을 읽음
if(!url) return;
var oXml = new xml_handler();
oXml.reset();
oXml.xml_path = url;
if(!index_url) index_url= "#";
// menu_id, zone_id는 계속 달고 다녀야함
var param = {"menu_id":menu_id, "zone_id":zone_id, "title":title, "index_url":index_url, "manual_select_node_srl":manual_select_node_srl}
// 요청후 drawTreeMenu()함수를 호출 (xml_handler.js에서 request method를 직접 이용)
oXml.request(drawTreeMenu, oXml, null, null, null, param);
}
// 트리메뉴 XML정보를 이용해서 정해진 zone에 출력
var manual_select_node_srl = '';
function drawTreeMenu(oXml, callback_func, resopnse_tags, null_func, param) {
// 그리기 위한 object를 찾아 놓음
var menu_id = param.menu_id;
var zone_id = param.zone_id;
var title = param.title;
var index_url = param.index_url;
if(param.manual_select_node_srl) manual_select_node_srl = param.manual_select_node_srl;
var zone = xGetElementById(zone_id);
var html = "";
if(title) html = '<div style="cursor:pointer;padding-left:18px;margin-bottom:5px;background:url('+tree_menu_icon_path+'folder.gif) no-repeat left;" onclick="location.href=\''+index_url+'\';return false;" >'+title+'</div>';
var xmlDoc = oXml.getResponseXml();
if(!xmlDoc) {
xInnerHtml(zone, html);
return null;
}
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);
html += output.html;
}
// 출력하려는 zone이 없다면 load후에 출력하도록 함
if(!zone) {
xAddEventListener(window, 'load', function() { drawTeeMenu(zone_id, menu_id, 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);
}
// root부터 시작해서 recursive하게 노드를 표혐
function drawNode(parent_node, menu_id) {
var output = {html:"", expand:"N"}
for (var i=0; i< parent_node.childNodes.length; i++) {
var html = "";
// nodeName이 node가 아니면 패스~
var node = parent_node.childNodes.item(i);
if(node.nodeName!="node") continue;
// node의 기본 변수들 체크
var node_srl = node.getAttribute("node_srl");
var text = node.getAttribute("text");
var url = node.getAttribute("url");
var expand = node.getAttribute("expand");
if(!text) continue;
// 자식 노드가 있는지 확인
var hasChild = false;
if(node.hasChildNodes()) hasChild = true;
// nextSibling가 있는지 확인
var hasNextSibling = false;
if(i==parent_node.childNodes.length-1) hasNextSibling = true;
// 후에 사용하기 위해 node_info_list에 node_srl을 값으로 하여 node object 추가
node_info_list[menu_id][node_srl] = node;
// zone_id 값을 세팅
var zone_id = "menu_"+menu_id+"_"+node_srl;
tree_menu_folder_list[menu_id][tree_menu_folder_list[menu_id].length] = zone_id;
// url을 확인하여 현재의 url과 동일하다고 판단되면 manual_select_node_srl 에 값을 추가 (관리자페이지일 경우는 무시함)
if(node_callback_func[menu_id] == moveTreeMenu && url && current_url.getQuery('mid') == url) manual_select_node_srl = node_srl;
// manual_select_node_srl이 node_srl과 같으면 펼침으로 처리
if(manual_select_node_srl == node_srl) expand = "Y";
// 아이콘 설정
var line_icon = null;
var folder_icon = null;
// 자식 노드가 있을 경우 자식 노드의 html을 구해옴
var child_output = null;
var child_html = "";
if(hasChild) {
// 자식 노드의 zone id를 세팅
var child_zone_id = zone_id+"_child";
tree_menu_folder_list[menu_id][tree_menu_folder_list[menu_id].length] = child_zone_id;
// html을 받아옴
child_output = drawNode(node, menu_id);
var chtml = child_output.html;
var cexpand = child_output.expand;
if(cexpand == "Y") expand = "Y";
// 무조건 펼침이 아닐 경우
if(expand!="Y") {
if(!hasNextSibling) child_html += '<div id="'+child_zone_id+'"style="display:none;padding-left:16px;background:url('+tree_menu_icon_path+'line.gif) repeat-y left;">'+chtml+'</div>';
else child_html += '<div id="'+child_zone_id+'" style="display:none;padding-left:16px;">'+chtml+'</div>';
// 무조건 펼침일 경우
} else {
if(!hasNextSibling) child_html += '<div id="'+child_zone_id+'"style="display:block;padding-left:16px;background:url('+tree_menu_icon_path+'line.gif) repeat-y left;">'+chtml+'</div>';
else child_html += '<div id="'+child_zone_id+'" style="display:block;padding-left:16px;">'+chtml+'</div>';
}
}
// 자식 노드가 있는지 확인하여 있으면 아이콘을 바꿈
if(hasChild) {
// 무조건 펼침이 아닐 경우
if(expand != "Y") {
if(!hasNextSibling) {
line_icon = "plus";
folder_icon = "page";
} else {
line_icon = "plusbottom";
folder_icon = "page";
}
// 무조건 펼침일 경우
} else {
if(!hasNextSibling) {
line_icon = "minus";
folder_icon = "page";
} else {
line_icon = "minusbottom";
folder_icon = "page";
}
}
// 자식 노드가 없을 경우
} else {
if(hasNextSibling) {
line_icon = "joinbottom";
folder_icon = "page";
} else {
line_icon = "join";
folder_icon = "page";
}
}
// html 작성
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="'+tree_menu_icon_path+line_icon+'.gif" alt="line" align="top" /><img id="'+zone_id+'_folder_icon" src="'+tree_menu_icon_path+folder_icon+'.gif" alt="folder" align="top" /></span>';
var chk_enable = xGetElementById(menu_id+"_enable_move");
if(chk_enable) {
html += '<span><span id="'+zone_id+'_node" style="cursor:move;padding:1px 2px 1px 2px;margin-top:1px;cursor:pointer;" onmousedown="doNodeFunc(this, \''+menu_id+'\','+node_srl+',\''+zone_id+'\');">';
} else {
html += '<span><span id="'+zone_id+'_node" style="cursor:move;padding:1px 2px 1px 2px;margin-top:1px;cursor:pointer;" onclick="selectNode(\''+menu_id+'\','+node_srl+',\''+zone_id+'\')" ondblclick="toggleFolder(\''+zone_id+'\')">';
}
html += text+'</span></span>';
html += child_html;
html += '</div>';
output.html += html;
if(expand=="Y") output.expand = "Y";
}
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) {
// 아이콘을 클릭한 대상을 찾아봄
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 height = 0;
// 대상의 자식 노드들이 숨겨져 있다면 열고 아니면 닫기
if(child_zone.style.display == "block") {
height = xHeight(child_zone)*-1;
child_zone.style.display = "none";
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_folder_icon.src;
} else {
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_open_folder_icon.src;
child_zone.style.display = "block";
height = xHeight(child_zone);
}
if(typeof(fixAdminLayoutFooter)=='function') fixAdminLayoutFooter( height );
}
// 노드의 글자 선택시
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, 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 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);
}
}
// 메뉴 클릭시 기본으로 동작할 함수 (사용자 임의 함수로 대체될 수 있음)
function moveTreeMenu(menu_id, node) {
// url과 open_window값을 구함
var node_srl = node.getAttribute("node_srl");
var url = node.getAttribute("url");
var open_window = node.getAttribute("open_window");
var hasChild = false;
if(node.hasChildNodes()) hasChild = true;
// url이 없고 child가 있으면 해당 폴더 토글한다
if(!url && hasChild) {
var zone_id = "menu_"+menu_id+"_"+node_srl;
toggleFolder(zone_id);
return;
}
// url이 있으면 url을 분석한다 (제로보드 특화된 부분. url이 http나 ftp등으로 시작하면 그냥 해당 url 열기)
if(url) {
// http, ftp등의 연결이 아닌 경우 제로보드용으로 처리
if(url.indexOf('://')==-1) url = "./?"+url;
// open_window에 따라서 처리
if(open_window != "Y") location.href=url;
else {
var win = window.open(url);
win.focus();
}
}
}
// 메뉴 드래그 중이라는 상황을 간직할 변수
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 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;
}

621
common/js/x.js Normal file
View file

@ -0,0 +1,621 @@
/**
* x.js compiled from X 4.0 with XC 0.27b.
* Distributed by GNU LGPL. For copyrights, license, documentation and more visit Cross-Browser.com
* Copyright 2001-2005 Michael Foster (Cross-Browser.com)
**/
var xOp7Up,xOp6Dn,xIE4Up,xIE4,xIE5,xIE6,xNN4,xUA=navigator.userAgent.toLowerCase();
if(window.opera){
var i=xUA.indexOf('opera');
if(i!=-1){
var v=parseInt(xUA.charAt(i+6));
xOp7Up=v>=7;
xOp6Dn=v<7;
}
}
else if(navigator.vendor!='KDE' && document.all && xUA.indexOf('msie')!=-1){
xIE4Up=parseFloat(navigator.appVersion)>=4;
xIE4=xUA.indexOf('msie 4')!=-1;
xIE5=xUA.indexOf('msie 5')!=-1;
xIE6=xUA.indexOf('msie 6')!=-1;
}
else if(document.layers){xNN4=true;}
var xMac=xUA.indexOf('mac')!=-1;
// (element, event(without 'on'), event listener(function name)[, caption])
function xAddEventListener(e,eT,eL,cap)
{
if(!(e=xGetElementById(e))) return;
eT=eT.toLowerCase();
if((!xIE4Up && !xOp7Up) && e==window) {
if(eT=='resize') { window.xPCW=xClientWidth(); window.xPCH=xClientHeight(); window.xREL=eL; xResizeEvent(); return; }
if(eT=='scroll') { window.xPSL=xScrollLeft(); window.xPST=xScrollTop(); window.xSEL=eL; xScrollEvent(); return; }
}
var eh='e.on'+eT+'=eL';
if(e.addEventListener) e.addEventListener(eT,eL,cap);
else if(e.attachEvent) e.attachEvent('on'+eT,eL);
else eval(eh);
}
// called only from the above
function xResizeEvent()
{
if (window.xREL) setTimeout('xResizeEvent()', 250);
var cw = xClientWidth(), ch = xClientHeight();
if (window.xPCW != cw || window.xPCH != ch) { window.xPCW = cw; window.xPCH = ch; if (window.xREL) window.xREL(); }
}
function xScrollEvent()
{
if (window.xSEL) setTimeout('xScrollEvent()', 250);
var sl = xScrollLeft(), st = xScrollTop();
if (window.xPSL != sl || window.xPST != st) { window.xPSL = sl; window.xPST = st; if (window.xSEL) window.xSEL(); }
}
function xAppendChild(oParent, oChild)
{
if (oParent.appendChild) return oParent.appendChild(oChild);
else return null;
}
function xClientHeight()
{
var h=0;
if(xOp6Dn) h=window.innerHeight;
else if(document.compatMode == 'CSS1Compat' && !window.opera && document.documentElement && document.documentElement.clientHeight)
h=document.documentElement.clientHeight;
else if(document.body && document.body.clientHeight)
h=document.body.clientHeight;
else if(xDef(window.innerWidth,window.innerHeight,document.width)) {
h=window.innerHeight;
if(document.width>window.innerWidth) h-=16;
}
return h;
}
function xClientWidth()
{
var w=0;
if(xOp6Dn) w=window.innerWidth;
else if(document.compatMode == 'CSS1Compat' && !window.opera && document.documentElement && document.documentElement.clientWidth)
w=document.documentElement.clientWidth;
else if(document.body && document.body.clientWidth)
w=document.body.clientWidth;
else if(xDef(window.innerWidth,window.innerHeight,document.height)) {
w=window.innerWidth;
if(document.height>window.innerHeight) w-=16;
}
return w;
}
function xCreateElement(sTag)
{
if (document.createElement) return document.createElement(sTag);
else return null;
}
function xDef()
{
for(var i=0; i<arguments.length; ++i){if(typeof(arguments[i])=='undefined') return false;}
return true;
}
function xDeleteCookie(name, path)
{
if (xGetCookie(name)) {
document.cookie = name + "=" +
"; path=" + ((!path) ? "/" : path) +
"; expires=" + new Date(0).toGMTString();
}
}
function xDisplay(e,s)
{
if(!(e=xGetElementById(e))) return null;
if(e.style && xDef(e.style.display)) {
if (xStr(s)) e.style.display = s;
return e.style.display;
}
return null;
}
function xEvent(evt) // object prototype
{
var e = evt || window.event;
if(!e) return;
if(e.type) this.type = e.type;
if(e.target) this.target = e.target;
else if(e.srcElement) this.target = e.srcElement;
// Section B
if (e.relatedTarget) this.relatedTarget = e.relatedTarget;
else if (e.type == 'mouseover' && e.fromElement) this.relatedTarget = e.fromElement;
else if (e.type == 'mouseout') this.relatedTarget = e.toElement;
// End Section B
if(xOp6Dn) { this.pageX = e.clientX; this.pageY = e.clientY; }
else if(xDef(e.pageX,e.pageY)) { this.pageX = e.pageX; this.pageY = e.pageY; }
else if(xDef(e.clientX,e.clientY)) { this.pageX = e.clientX + xScrollLeft(); this.pageY = e.clientY + xScrollTop(); }
// Section A
if (xDef(e.offsetX,e.offsetY)) {
this.offsetX = e.offsetX;
this.offsetY = e.offsetY;
}
else if (xDef(e.layerX,e.layerY)) {
this.offsetX = e.layerX;
this.offsetY = e.layerY;
}
else {
this.offsetX = this.pageX - xPageX(this.target);
this.offsetY = this.pageY - xPageY(this.target);
}
// End Section A
if (e.keyCode) { this.keyCode = e.keyCode; } // for moz/fb, if keyCode==0 use which
else if (xDef(e.which) && e.type.indexOf('key')!=-1) { this.keyCode = e.which; }
this.shiftKey = e.shiftKey;
this.ctrlKey = e.ctrlKey;
this.altKey = e.altKey;
}
function xFirstChild(e, t)
{
var c = e ? e.firstChild : null;
if (t) while (c && c.nodeName != t) { c = c.nextSibling; }
else while (c && c.nodeType != 1) { c = c.nextSibling; }
return c;
}
function xGetBodyWidth() {
var cw = xClientWidth();
var sw = window.document.body.scrollWidth;
return cw>sw?cw:sw;
}
function xGetBodyHeight() {
var cw = xClientHeight();
var sw = window.document.body.scrollHeight;
return cw>sw?cw:sw;
}
function xGetComputedStyle(oEle, sProp, bInt)
{
var s, p = 'undefined';
var dv = document.defaultView;
if(dv && dv.getComputedStyle){
s = dv.getComputedStyle(oEle,'');
if (s) p = s.getPropertyValue(sProp);
}
else if(oEle.currentStyle) {
// convert css property name to object property name for IE
var a = sProp.split('-');
sProp = a[0];
for (var i=1; i<a.length; ++i) {
c = a[i].charAt(0);
sProp += a[i].replace(c, c.toUpperCase());
}
p = oEle.currentStyle[sProp];
}
else return null;
return bInt ? (parseInt(p) || 0) : p;
}
function xGetCookie(name)
{
var value=null, search=name+"=";
if (document.cookie.length > 0) {
var offset = document.cookie.indexOf(search);
if (offset != -1) {
offset += search.length;
var end = document.cookie.indexOf(";", offset);
if (end == -1) end = document.cookie.length;
value = unescape(document.cookie.substring(offset, end));
}
}
return value;
}
function xGetElementById(e)
{
if(typeof(e)!='string') return e;
if(document.getElementById) e=document.getElementById(e);
else if(document.all) e=document.all[e];
else e=null;
return e;
}
function xGetElementsByAttribute(sTag, sAtt, sRE, fn)
{
var a, list, found = new Array(), re = new RegExp(sRE, 'i');
list = xGetElementsByTagName(sTag);
for (var i = 0; i < list.length; ++i) {
a = list[i].getAttribute(sAtt);
if (!a) {a = list[i][sAtt];}
if (typeof(a)=='string' && a.search(re) != -1) {
found[found.length] = list[i];
if (fn) fn(list[i]);
}
}
return found;
}
function xGetElementsByClassName(c,p,t,f)
{
var found = new Array();
var re = new RegExp('\\b'+c+'\\b', 'i');
var list = xGetElementsByTagName(t, p);
for (var i = 0; i < list.length; ++i) {
if (list[i].className && list[i].className.search(re) != -1) {
found[found.length] = list[i];
if (f) f(list[i]);
}
}
return found;
}
function xGetElementsByTagName(t,p)
{
var list = null;
t = t || '*';
p = p || document;
if (xIE4 || xIE5) {
if (t == '*') list = p.all;
else list = p.all.tags(t);
}
else if (p.getElementsByTagName) list = p.getElementsByTagName(t);
return list || new Array();
}
function xGetURLArguments()
{
var idx = location.href.indexOf('?');
var params = new Array();
if (idx != -1) {
var pairs = location.href.substring(idx+1, location.href.length).split('&');
for (var i=0; i<pairs.length; i++) {
nameVal = pairs[i].split('=');
params[i] = nameVal[1];
params[nameVal[0]] = nameVal[1];
}
}
return params;
}
function xHeight(e,h)
{
if(!(e=xGetElementById(e))) return 0;
if (xNum(h)) {
if (h<0) h = 0;
else h=Math.round(h);
}
else h=-1;
var css=xDef(e.style);
if (e == document || e.tagName.toLowerCase() == 'html' || e.tagName.toLowerCase() == 'body') {
h = xClientHeight();
}
else if(css && xDef(e.offsetHeight) && xStr(e.style.height)) {
if(h>=0) {
var pt=0,pb=0,bt=0,bb=0;
if (document.compatMode=='CSS1Compat') {
var gcs = xGetComputedStyle;
pt=gcs(e,'padding-top',1);
if (pt !== null) {
pb=gcs(e,'padding-bottom',1);
bt=gcs(e,'border-top-width',1);
bb=gcs(e,'border-bottom-width',1);
}
// Should we try this as a last resort?
// At this point getComputedStyle and currentStyle do not exist.
else if(xDef(e.offsetHeight,e.style.height)){
e.style.height=h+'px';
pt=e.offsetHeight-h;
}
}
h-=(pt+pb+bt+bb);
if(isNaN(h)||h<0) return null;
else e.style.height=h+'px';
}
h=e.offsetHeight;
}
else if(css && xDef(e.style.pixelHeight)) {
if(h>=0) e.style.pixelHeight=h;
h=e.style.pixelHeight;
}
return h;
}
function xHex(sn, digits, prefix)
{
var p = '';
var n = Math.ceil(sn);
if (prefix) p = prefix;
n = n.toString(16);
for (var i=0; i < digits - n.length; ++i) {
p += '0';
}
return p + n;
}
function xHide(e){return xVisibility(e,0);}
function xInnerHtml(e,h)
{
if(!(e=xGetElementById(e)) || !xStr(e.innerHTML)) return null;
var s = e.innerHTML;
if (xStr(h)) {e.innerHTML = h;}
return s;
}
function xLeft(e, iX)
{
if(!(e=xGetElementById(e))) return 0;
var css=xDef(e.style);
if (css && xStr(e.style.left)) {
if(xNum(iX)) e.style.left=iX+'px';
else {
iX=parseInt(e.style.left);
if(isNaN(iX)) iX=0;
}
}
else if(css && xDef(e.style.pixelLeft)) {
if(xNum(iX)) e.style.pixelLeft=iX;
else iX=e.style.pixelLeft;
}
return iX;
}
function xMoveTo(e,x,y)
{
xLeft(e,x);
xTop(e,y);
}
function xName(e)
{
if (!e) return e;
else if (e.id && e.id != "") return e.id;
else if (e.name && e.name != "") return e.name;
else if (e.nodeName && e.nodeName != "") return e.nodeName;
else if (e.tagName && e.tagName != "") return e.tagName;
else return e;
}
function xNextSib(e,t)
{
var s = e ? e.nextSibling : null;
if (t) while (s && s.nodeName != t) { s = s.nextSibling; }
else while (s && s.nodeType != 1) { s = s.nextSibling; }
return s;
}
function xNum()
{
for(var i=0; i<arguments.length; ++i){if(isNaN(arguments[i]) || typeof(arguments[i])!='number') return false;}
return true;
}
function xOffsetLeft(e)
{
if (!(e=xGetElementById(e))) return 0;
if (xDef(e.offsetLeft)) return e.offsetLeft;
else return 0;
}
function xOffsetTop(e)
{
if (!(e=xGetElementById(e))) return 0;
if (xDef(e.offsetTop)) return e.offsetTop;
else return 0;
}
function xPad(s,len,c,left)
{
if(typeof s != 'string') s=s+'';
if(left) {for(var i=s.length; i<len; ++i) s=c+s;}
else {for (i=s.length; i<len; ++i) s+=c;}
return s;
}
function xPageX(e)
{
if (!(e=xGetElementById(e))) return 0;
var x = 0;
while (e) {
if (xDef(e.offsetLeft)) x += e.offsetLeft;
e = xDef(e.offsetParent) ? e.offsetParent : null;
}
return x;
}
function xPageY(e)
{
if (!(e=xGetElementById(e))) return 0;
var y = 0;
while (e) {
if (xDef(e.offsetTop)) y += e.offsetTop;
e = xDef(e.offsetParent) ? e.offsetParent : null;
}
// if (xOp7Up) return y - document.body.offsetTop; // v3.14, temporary hack for opera bug 130324 (reported 1nov03)
return y;
}
function xParent(e, bNode)
{
if (!(e=xGetElementById(e))) return null;
var p=null;
if (!bNode && xDef(e.offsetParent)) p=e.offsetParent;
else if (xDef(e.parentNode)) p=e.parentNode;
else if (xDef(e.parentElement)) p=e.parentElement;
return p;
}
function xPreventDefault(e)
{
if (e && e.preventDefault) e.preventDefault()
else if (window.event) window.event.returnValue = false;
}
function xPrevSib(e,t)
{
var s = e ? e.previousSibling : null;
if (t) while(s && s.nodeName != t) {s=s.previousSibling;}
else while(s && s.nodeType != 1) {s=s.previousSibling;}
return s;
}
function xRemoveEventListener(e,eT,eL,cap)
{
if(!(e=xGetElementById(e))) return;
eT=eT.toLowerCase();
if((!xIE4Up && !xOp7Up) && e==window) {
if(eT=='resize') { window.xREL=null; return; }
if(eT=='scroll') { window.xSEL=null; return; }
}
var eh='e.on'+eT+'=null';
if(e.removeEventListener) e.removeEventListener(eT,eL,cap);
else if(e.detachEvent) e.detachEvent('on'+eT,eL);
else eval(eh);
}
function xResizeTo(e,w,h)
{
xWidth(e,w);
xHeight(e,h);
}
function xScrollLeft(e, bWin)
{
var offset=0;
if (!xDef(e) || bWin || e == document || e.tagName.toLowerCase() == 'html' || e.tagName.toLowerCase() == 'body') {
var w = window;
if (bWin && e) w = e;
if(w.document.documentElement && w.document.documentElement.scrollLeft) offset=w.document.documentElement.scrollLeft;
else if(w.document.body && xDef(w.document.body.scrollLeft)) offset=w.document.body.scrollLeft;
}
else {
e = xGetElementById(e);
if (e && xNum(e.scrollLeft)) offset = e.scrollLeft;
}
return offset;
}
function xScrollTop(e, bWin)
{
var offset=0;
if (!xDef(e) || bWin || e == document || e.tagName.toLowerCase() == 'html' || e.tagName.toLowerCase() == 'body') {
var w = window;
if (bWin && e) w = e;
if(w.document.documentElement && w.document.documentElement.scrollTop) offset=w.document.documentElement.scrollTop;
else if(w.document.body && xDef(w.document.body.scrollTop)) offset=w.document.body.scrollTop;
}
else {
e = xGetElementById(e);
if (e && xNum(e.scrollTop)) offset = e.scrollTop;
}
return offset;
}
function xSetCookie(name, value, expire, path)
{
document.cookie = name + "=" + escape(value) +
((!expire) ? "" : ("; expires=" + expire.toGMTString())) +
"; path=" + ((!path) ? "/" : path);
}
function xShow(e) {return xVisibility(e,1);}
function xStr(s)
{
for(var i=0; i<arguments.length; ++i){if(typeof(arguments[i])!='string') return false;}
return true;
}
function xTop(e, iY)
{
if(!(e=xGetElementById(e))) return 0;
var css=xDef(e.style);
if(css && xStr(e.style.top)) {
if(xNum(iY)) e.style.top=iY+'px';
else {
iY=parseInt(e.style.top);
if(isNaN(iY)) iY=0;
}
}
else if(css && xDef(e.style.pixelTop)) {
if(xNum(iY)) e.style.pixelTop=iY;
else iY=e.style.pixelTop;
}
return iY;
}
function xVisibility(e, bShow)
{
if(!(e=xGetElementById(e))) return null;
if(e.style && xDef(e.style.visibility)) {
if (xDef(bShow)) e.style.visibility = bShow ? 'visible' : 'hidden';
return e.style.visibility;
}
return null;
}
function xWidth(e,w)
{
if(!(e=xGetElementById(e))) return 0;
if (xNum(w)) {
if (w<0) w = 0;
else w=Math.round(w);
}
else w=-1;
var css=xDef(e.style);
if (e == document || e.tagName.toLowerCase() == 'html' || e.tagName.toLowerCase() == 'body') {
w = xClientWidth();
}
else if(css && xDef(e.offsetWidth) && xStr(e.style.width)) {
if(w>=0) {
var pl=0,pr=0,bl=0,br=0;
if (document.compatMode=='CSS1Compat') {
var gcs = xGetComputedStyle;
pl=gcs(e,'padding-left',1);
if (pl !== null) {
pr=gcs(e,'padding-right',1);
bl=gcs(e,'border-left-width',1);
br=gcs(e,'border-right-width',1);
}
// Should we try this as a last resort?
// At this point getComputedStyle and currentStyle do not exist.
else if(xDef(e.offsetWidth,e.style.width)){
e.style.width=w+'px';
pl=e.offsetWidth-w;
}
}
w-=(pl+pr+bl+br);
if(isNaN(w)||w<0) return null;
else e.style.width=w+'px';
}
w=e.offsetWidth;
}
else if(css && xDef(e.style.pixelWidth)) {
if(w>=0) e.style.pixelWidth=w;
w=e.style.pixelWidth;
}
return w;
}
function xZIndex(e,uZ)
{
if(!(e=xGetElementById(e))) return 0;
if(e.style && xDef(e.style.zIndex)) {
if(xNum(uZ)) e.style.zIndex=uZ;
uZ=parseInt(e.style.zIndex);
}
return uZ;
}
function xStopPropagation(evt)
{
if (evt && evt.stopPropagation) evt.stopPropagation();
else if (window.event) window.event.cancelBubble = true;
}

147
common/js/xml_handler.js Normal file
View file

@ -0,0 +1,147 @@
/**
* @file common/js/xml_handler.js
* @author zero <zero@nzeo.com>
* @brief zbxe내에서 ajax기능을 이용함에 있어 module, act를 사용하기 위한 자바스크립트
**/
// xml handler을 이용하는 user function
var show_waiting_message = true;
function exec_xml(module, act, params, callback_func, response_tags, callback_func_arg, fo_obj) {
var oXml = new xml_handler();
oXml.reset();
for(var key in params) {
var val = params[key];
oXml.addParam(key, val);
}
oXml.addParam("module", module);
oXml.addParam("act", act);
if(typeof(response_tags)=="undefined" || response_tags.length<1) response_tags = new Array('error','message');
var waiting_obj = xGetElementById("waitingforserverresponse");
if(show_waiting_message && waiting_obj) {
xInnerHtml(waiting_obj, wating_message);
xTop(waiting_obj, xScrollTop()+20);
xLeft(waiting_obj, xScrollLeft()+20);
waiting_obj.style.visibility = "visible";
}
oXml.request(xml_response_filter, oXml, callback_func, response_tags, callback_func_arg, fo_obj);
}
// 결과 처리 후 callback_func에 넘겨줌
function xml_response_filter(oXml, callback_func, response_tags, callback_func_arg, fo_obj) {
var xmlDoc = oXml.getResponseXml();
if(!xmlDoc) return null;
var waiting_obj = xGetElementById("waitingforserverresponse");
waiting_obj.style.visibility = "hidden";
xInnerHtml(waiting_obj, '');
var ret_obj = oXml.toZMsgObject(xmlDoc, response_tags);
if(ret_obj["error"]!=0) {
alert(ret_obj["message"]);
return null;
}
if(!callback_func) return null;
callback_func(ret_obj, response_tags, callback_func_arg, fo_obj);
return null;
}
// xml handler
function xml_handler() {
this.obj_xmlHttp = null;
this.method_name = null;
this.xml_path = request_uri+"index.php";
this.params = new Array();
this.reset = xml_handlerReset;
this.getXmlHttp = zGetXmlHttp;
this.request = xml_handlerRequest;
this.setPath = xml_handlerSetPath;
this.addParam = xml_handlerAddParam;
this.getResponseXml = xml_handlerGetResponseXML;
this.toZMsgObject = xml_handlerToZMsgObject;
this.obj_xmlHttp = this.getXmlHttp();
}
function zGetXmlHttp() {
if (window.XMLHttpRequest) return new XMLHttpRequest();
else if (window.ActiveXObject) {
try {
return new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
return new ActiveXObject("Microsoft.XMLHTTP");
}
}
return null;
}
function xml_handlerRequest(callBackFunc, xmlObj, callBackFunc2, response_tags, callback_func_arg, fo_obj) {
var rd = "";
rd += "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n"
+ "<methodCall>\n"
+ "<params>\n"
for (var key in this.params) {
var val = this.params[key];
rd += "<"+key+"><![CDATA["+val+"]]></"+key+">\n";
}
rd += "</params>\n"
+ "</methodCall>\n";
if(this.obj_xmlHttp.readyState!=0) {
this.obj_xmlHttp.abort();
this.obj_xmlHttp = this.getXmlHttp();
}
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.send(rd);
}
function xml_handlerSetPath(path) {
this.xml_path = "./"+path;
}
function xml_handlerReset() {
this.obj_xmlHttp = this.getXmlHttp();
this.params = new Array();
}
function xml_handlerAddParam(key, val) {
this.params[key] = val;
}
function xml_handlerGetResponseXML() {
if(this.obj_xmlHttp && this.obj_xmlHttp.readyState == 4 && isDef(this.obj_xmlHttp.responseXML)) {
var xmlDoc = this.obj_xmlHttp.responseXML;
this.reset();
return xmlDoc;
}
return null;
}
function xml_handlerToZMsgObject(xmlDoc, tags) {
if(!xmlDoc) return null;
if(!tags) tags = new Array("error","message");
tags[tags.length] = "redirect_url";
tags[tags.length] = "act";
var obj_ret = new Array();
for(var i=0; i<tags.length; i++) {
var key = tags[i];
if(obj_ret[key]) continue;
try {
obj_ret[key] = xmlDoc.getElementsByTagName(tags[i])[0].firstChild.nodeValue;
} catch(e) {
obj_ret[key] = "";
}
}
return obj_ret;
}

305
common/js/xml_js_filter.js Normal file
View file

@ -0,0 +1,305 @@
/**
* @file common/js/xml_js_filter.js
* @author zero (zero@nzeo.com)
* @brief xml filter에서 사용될 js
*
* zbxe 에서 form의 동작시 필수입력 여부등을 선처리하고 xml_handler.js의 exec_xml() 통해서
* 특정 모듈과의 ajax 통신을 통해 process를 진행시킴
**/
var alertMsg = new Array();
var target_type_list = new Array();
var notnull_list = new Array();
var extra_vars = new Array();
/**
* @function filterAlertMessage
* @brief ajax로 서버에 요청후 결과를 처리할 callback_function을 지정하지 않았을 호출되는 기본 함수
**/
function filterAlertMessage(ret_obj) {
var error = ret_obj["error"];
var message = ret_obj["message"];
var act = ret_obj["act"];
var redirect_url = ret_obj["redirect_url"];
var url = location.href;
if(url.substr(-1)=="#") url = url.substr(0,url.length-1);
if(typeof(message)!="undefined"&&message&&message!="success") alert(message);
if(typeof(act)!="undefined" && act) url = current_url.setQuery("act", act);
else if(typeof(redirect_url)!="undefined" && redirect_url) url = redirect_url;
location.href = url;
}
/**
* @class XmlJsFilter
* @authro zero (zero@nzeo.com)
* @brief form elements, module/act, callback_user_func을 이용하여 서버에 ajax로 form 데이터를 넘기고 결과를 받아오는 js class
**/
function XmlJsFilter(form_object, module, act, callback_user_func) {
this.field = new Array();
this.parameter = new Array();
this.response = new Array();
this.fo_obj = form_object;
this.module = module;
this.act = act;
this.user_func = callback_user_func;
this.setFocus = XmlJsFilterSetFocus;
this.addFieldItem = XmlJsFilterAddFieldItem;
this.addParameterItem = XmlJsFilterAddParameterItem;
this.addResponseItem = XmlJsFilterAddResponseItem;
this.getValue = XmlJsFilterGetValue;
this.executeFilter = XmlJsFilterExecuteFilter;
this.checkFieldItem = XmlJsFilterCheckFieldItem;
this.getParameterParam = XmlJsFilterGetParameterParam;
this.alertMsg = XmlJsFilterAlertMsg;
this.proc = XmlJsFilterProc;
}
function XmlJsFilterSetFocus(target_name) {
var obj = this.fo_obj[target_name];
if(typeof(obj)=='undefined' || !obj) return;
var length = obj.length;
try {
if(typeof(length)!='undefined') {
obj[0].focus();
} else {
obj.focus();
}
} catch(e) {
}
}
function XmlJsFilterAddFieldItem(target, required, minlength, maxlength, equalto, filter) {
var obj = new Array(target, required, minlength, maxlength, equalto, filter);
this.field[this.field.length] = obj;
}
function XmlJsFilterAddParameterItem(param, target) {
var obj = new Array(param, target);
this.parameter[this.parameter.length] = obj;
}
function XmlJsFilterAddResponseItem(name) {
this.response[this.response.length] = name;
}
function XmlJsFilterGetValue(target_name) {
var obj = this.fo_obj[target_name];
if(typeof(obj)=='undefined' || !obj) return '';
var value = '';
var length = obj.length;
var type = obj.type;
if((typeof(type)=='undefined'||!type) && typeof(length)!='undefined' && typeof(obj[0])!='undefined' && length>0) type = obj[0].type;
else length = 0;
switch(type) {
case 'checkbox' :
if(length>0) {
var value_list = new Array();
for(var i=0;i<length;i++) {
if(obj[i].checked) value_list[value_list.length] = obj[i].value;
}
value = value_list.join('|@|');
} else {
if(obj.checked) value = obj.value;
else value = '';
}
break;
case 'radio' :
if(length>0) {
for(var i=0;i<length;i++) {
if(obj[i].checked) value = obj[i].value;
}
} else {
if(obj.checked) value = obj.value;
else value = '';
}
break;
case 'select' :
case 'select-one' :
if(obj.selectedIndex>=0) value = obj.options[obj.selectedIndex].value;
break;
default :
if(length>0 && target_type_list[target_name]) {
switch(target_type_list[target_name]) {
case 'kr_zip' :
var val1 = obj[0].value;
var val2 = obj[1].value;
if(val1&&val2) {
value = val1+'|@|'+val2;
}
break;
case 'tel' :
var val1 = obj[0].value;
var val2 = obj[1].value;
var val3 = obj[2].value;
if(val1&&val2&&val3) {
value = val1+'|@|'+val2+'|@|'+val3;
}
break;
}
} else {
value = obj.value;
}
break;
}
if(typeof(value)=='undefined'||!value) return '';
return value.trim();
}
function XmlJsFilterExecuteFilter(filter, value) {
switch(filter) {
case "email" :
case "email_address" :
var regx = /^[_0-9a-zA-Z-]+(\.[_0-9a-zA-Z-]+)*@[0-9a-zA-Z-]+(\.[0-9a-zA-Z-]+)*$/;
return regx.test(value);
break;
case "userid" :
case "user_id" :
var regx = /^[a-zA-Z]+([_0-9a-zA-Z]+)*$/;
return regx.test(value);
break;
case "homepage" :
var regx = /^(http|https|ftp|mms):\/\/[0-9a-z-]+(\.[_0-9a-z-\/\~]+)+(:[0-9]{2,4})*$/;
return regx.test(value);
break;
case "korean" :
var regx = /^[가-힣]*$/;
return regx.test(value);
break;
case "korean_number" :
var regx = /^[가-힣0-9]*$/;
return regx.test(value);
break;
case "alpha" :
var regx = /^[a-zA-Z]*$/;
return regx.test(value);
break;
case "alpha_number" :
var regx = /^[a-zA-Z0-9\_]*$/;
return regx.test(value);
break;
case "number" :
return !isNaN(value);
break;
}
return null;
}
function XmlJsFilterAlertMsg(target, msg_code, minlength, maxlength) {
var target_msg = "";
if(alertMsg[target]!='undefined') target_msg = alertMsg[target];
else target_msg = target;
var msg = "";
if(typeof(alertMsg[msg_code])!='undefined') {
if(alertMsg[msg_code].indexOf('%s')>=0) msg = alertMsg[msg_code].replace('%s',target_msg);
else msg = target_msg+alertMsg[msg_code];
} else {
msg = msg_code;
}
if(typeof(minlength)!='undefined' && typeof(maxlength)!='undefined') msg += "("+minlength+"~"+maxlength+")";
alert(msg);
this.setFocus(target);
return false;
}
function XmlJsFilterCheckFieldItem() {
for(var i=0; i<extra_vars.length;i++) {
var name = extra_vars[i];
this.addFieldItem(name, false, 0, 0, "", "");
}
for(var i=0; i<this.field.length;i++) {
var item = this.field[i];
var target = item[0];
var required = item[1];
var minlength = item[2];
var maxlength = item[3];
var equalto = item[4];
var filter = item[5].split(",");
for(var j=0; j<notnull_list.length; j++) {
if(notnull_list[j]==target) required = true;
}
var value = this.getValue(target);
if(!required && !value) continue;
if(required && !value && this.fo_obj[target]) return this.alertMsg(target,'isnull');
if(minlength>0 && maxlength>0 && (value.length < minlength || value.length > maxlength)) return this.alertMsg(target, 'outofrange', minlength, maxlength);
if(equalto) {
var equalto_value = this.getValue(equalto);
if(equalto_value != value) return this.alertMsg(target, 'equalto');
}
if(filter.length && filter[0]) {
for(var j=0;j<filter.length;j++) {
var filter_item = filter[j];
if(!this.executeFilter(filter_item, value)) return this.alertMsg(target, "invalid_"+filter_item);
}
}
}
return true;
}
function XmlJsFilterGetParameterParam() {
if(!this.fo_obj) return new Array();
var prev_name = '';
if(this.parameter.length<1) {
for(var i=0;i<this.fo_obj.length;i++) {
var name = this.fo_obj[i].name;
if(typeof(name)=='undefined'||!name||name==prev_name) continue;
this.addParameterItem(name, name);
prev_name = name;
}
}
var params = new Array();
for(var i=0; i<this.parameter.length;i++) {
var item = this.parameter[i];
var param = item[0];
var target = item[1];
var value = this.getValue(target);
params[param] = value;
}
return params;
}
function XmlJsFilterProc(confirm_msg) {
var result = this.checkFieldItem();
if(!result) return false;
if(typeof(confirm_msg)=='undefined') confirm_msg = '';
var params = this.getParameterParam();
var response = this.response;
if(confirm_msg && !confirm(confirm_msg)) return false;
if(!this.act) {
this.user_func(this.fo_obj, params);
return true;
}
exec_xml(this.module, this.act, params, this.user_func, response, params, this.fo_obj);
return null;
}
// form proc
function procFilter(fo_obj, filter_func) {
filter_func(fo_obj);
return false;
}

221
common/lang/en.lang.php Normal file
View file

@ -0,0 +1,221 @@
<?php
/**
* @file common/lang/en.lang.php
* @author zero (zero@nzeo.com)
* @brief English Language Pack (Only basic words are included here)
**/
// words for action, which is basically used
$lang->cmd_write = 'Write';
$lang->cmd_reply = 'Reply';
$lang->cmd_delete = 'Delete';
$lang->cmd_modify = 'Modify';
$lang->cmd_edit = 'Edit';
$lang->cmd_view = 'View';
$lang->cmd_view_all = 'View All';
$lang->cmd_list = 'List';
$lang->cmd_prev = 'Prev';
$lang->cmd_next = 'Next';
$lang->cmd_send_trackback = 'Send Trackback';
$lang->cmd_registration = $lang->cmd_submit = 'Submit';
$lang->cmd_comment_registration = 'Add Comment';
$lang->cmd_insert = 'Insert';
$lang->cmd_save = 'Save';
$lang->cmd_input = 'Input';
$lang->cmd_search = 'Search';
$lang->cmd_cancel = 'Cancel';
$lang->cmd_back = 'Go Back';
$lang->cmd_vote = 'Vote';
$lang->cmd_move = 'Move';
$lang->cmd_move_up = 'Up';
$lang->cmd_move_down = 'Down';
$lang->cmd_add_indent = 'Indent';
$lang->cmd_remove_indent = 'Outdent';
$lang->cmd_management = 'Manage';
$lang->cmd_make = 'Create';
$lang->cmd_select = 'Select';
$lang->cmd_select_all = 'Select All';
$lang->cmd_unselect_all = 'Deselect All';
$lang->cmd_close_all = 'Close All';
$lang->cmd_open_all = 'Open All';
$lang->cmd_reload = 'Reload';
$lang->cmd_close = 'Close';
$lang->cmd_open = 'Open';
$lang->cmd_setup = 'Configure';
$lang->cmd_option = 'Option';
$lang->cmd_apply = 'Apply';
$lang->cmd_open_calendar = 'Select a Date';
$lang->cmd_send = 'Send';
$lang->cmd_print = 'Print';
$lang->cmd_scrap = 'Scrap';
$lang->cmd_preview = 'Preview';
$lang->cmd_reset = 'Reset';
$lang->cmd_remake_cache = "Re-create cache file";
$lang->enable = 'Enable';
$lang->disable = 'Disable';
// Essential Words
$lang->no = 'No.';
$lang->notice = 'Notice';
$lang->secret = 'Secret';
$lang->category = 'Category';
$lang->document_srl = 'Doc. No.';
$lang->user_id = 'User ID';
$lang->author = 'Developer';
$lang->password = 'Password';
$lang->password1 = 'Password';
$lang->password2 = 'Confirm Password';
$lang->admin_id = 'Admin ID';
$lang->writer = 'Author';
$lang->user_name = 'User Name';
$lang->nick_name = 'Nick Name';
$lang->email_address = 'Email';
$lang->homepage = 'Homepage';
$lang->blog = 'Blog';
$lang->birthday = 'Birthdate';
$lang->browser_title = 'Browser Title';
$lang->title = 'Subject';
$lang->title_content = 'Title+Content';
$lang->content = 'Content';
$lang->document = 'Article';
$lang->comment = 'Comment';
$lang->description = 'Description';
$lang->trackback = 'Trackback';
$lang->tag = 'Tag';
$lang->allow_comment = 'Allow Comment';
$lang->lock_comment = 'Block Comment';
$lang->allow_trackback = 'Allow Trackback';
$lang->uploaded_file = 'Attachment';
$lang->grant = 'Permission';
$lang->target = 'Target';
$lang->total = 'Total';
$lang->total_count = 'Count Total';
$lang->ipaddress = 'IP Address';
$lang->path = 'Path';
$lang->cart = 'Selected Item';
$lang->friend = 'Friends';
$lang->notify = 'Notification';
$lang->mid = 'Module Name';
$lang->layout = 'Layout';
$lang->widget = 'Widget';
$lang->module = 'Module';
$lang->skin = 'Theme';
$lang->colorset = 'Colorset';
$lang->extra_vars = 'Extra Vars';
$lang->document_url = 'Entry URL';
$lang->trackback_url = 'Trackback URL';
$lang->blog_name = 'Blog Title';
$lang->excerpt = 'Quotation';
$lang->document_count = 'Total Articles';
$lang->page_count = 'Page Count';
$lang->list_count = 'List Count';
$lang->readed_count = 'Hit';
$lang->voted_count = 'Votes';
$lang->member_count = 'Member Count';
$lang->date = 'Date';
$lang->regdate = 'Registered Date';
$lang->last_update = 'Latest Update';
$lang->signup_date = 'Join Date';
$lang->last_login = 'Latest Login';
$lang->first_page = 'First Page';
$lang->last_page = 'Last Page';
$lang->search_target = 'Searching Target';
$lang->search_keyword = 'Searching Keyword';
$lang->is_default = 'Default';
$lang->no_documents = 'No Articles';
$lang->board_manager = 'Board Settings';
$lang->member_manager = 'Member Settings';
$lang->layout_manager = 'Layout Settings';
$lang->use = 'Use';
$lang->notuse = 'Disuse';
$lang->not_exists = "Does not exist";
$lang->unit_sec = 'sec';
$lang->unit_min = 'min';
$lang->unit_hour = 'hr';
$lang->unit_day = 'day';
$lang->unit_week = 'week';
$lang->unit_month = 'month';
$lang->unit_year = 'year';
// Descriptions
$lang->about_tag = 'You can submit multiple tags by inserting comma(,) between each tags';
$lang->about_layout = 'Layouts decorate an appearance of your module. you could configure it from Layout menu on the top';
// Messages
$lang->msg_call_server = 'Requesting to the server, please wait';
$lang->msg_db_not_setted = 'DB configuration has not been set';
$lang->msg_invalid_queryid = 'Specified query ID value is invalid';
$lang->msg_not_permitted = 'You are not permitted to continue';
$lang->msg_input_password = 'Please enter your password';
$lang->msg_invalid_document = 'Invalid Article Number';
$lang->msg_invalid_request = 'Invalid Request';
$lang->msg_invalid_password = 'Invalid Password';
$lang->msg_error_occured = 'Error has occured';
$lang->msg_not_founded = 'Target could not be found';
$lang->msg_no_result = 'Nothing found';
$lang->msg_not_permitted_act = 'You are not permitted to execute requested action';
$lang->msg_module_is_not_exists = 'Requested module could not be found';
$lang->msg_module_is_not_standalone = 'Requested module cannot be executed independently';
$lang->success_registed = 'Registered successfully';
$lang->success_updated = 'Updated successfully';
$lang->success_deleted = 'Deleted successfully';
$lang->success_voted = 'Voted successfully';
$lang->success_moved = 'Moved successfully';
$lang->success_sended = 'Sent successfully';
$lang->success_reset = 'Reset successfully';
$lang->success_leaved = 'Seceded successfully';
$lang->fail_to_delete = 'Could not be deleted';
$lang->fail_to_move = 'Could not be moved';
$lang->failed_voted = 'Could not be voted';
$lang->fail_to_delete_have_children = 'Please try again after removing replies first';
$lang->confirm_submit = 'Are you sure to submit?';
$lang->confirm_logout = 'Are you sure to logout?';
$lang->confirm_vote = 'Are you sure to vote?';
$lang->confirm_delete = 'Are you sure to delete?';
$lang->confirm_move = 'Are you sure to move?';
$lang->confirm_reset = 'Are you sure to reset?';
$lang->confirm_leave = 'Are you sure to leave?';
$lang->column_type = 'Column Type';
$lang->column_type_list['text'] = 'one-line text';
$lang->column_type_list['homepage'] = 'url';
$lang->column_type_list['email_address'] = 'email';
$lang->column_type_list['tel'] = 'phone number';
$lang->column_type_list['textarea'] = 'multi-line textarea';
$lang->column_type_list['checkbox'] = 'checkbox (multiple selection)';
$lang->column_type_list['select'] = 'select box (single selection)';
$lang->column_type_list['kr_zip'] = 'zip code (Korean)';
$lang->column_type_list['date'] = 'date (yyyy/mm/dd)';
//$lang->column_type_list['jp_zip'] = 'zip code (Japanese)';
$lang->column_name = 'Column Name';
$lang->column_title = 'Column Title';
$lang->default_value = 'Default Value';
$lang->is_active = 'Active';
$lang->is_required = 'Required Field';
// Alert messages for Javascript using by XML filter
$lang->filter->isnull = 'Please input a value for %s';
$lang->filter->outofrange = 'Please align the text length of %s';
$lang->filter->equalto = "%s's value is invalid";
$lang->filter->invalid_email = "%s's format is invalid. ex) zbxe@zeroboard.com";
$lang->filter->invalid_user_id = $lang->filter->invalid_userid = "%s's format is invalid.\\nAll values should consist of alphabets, numbers or underscore(_) and the first letter should be English alphabet";
$lang->filter->invalid_homepage = "%s's format is invalid. ex) http://www.zeroboard.com";
$lang->filter->invalid_korean = "%s's format is invalid. Please input only Korean";
$lang->filter->invalid_korean_number = "%s's format is invalid. Please input Korean or numbers";
$lang->filter->invalid_alpha = "%s's format is invalid. Please input only alphabets";
$lang->filter->invalid_alpha_number = "%s's format is invalid. Please input alphabets or numbers";
$lang->filter->invalid_number = "%s's format is invalid. Please input only numbers";
?>

220
common/lang/es.lang.php Normal file
View file

@ -0,0 +1,220 @@
<?php
/**
* @file common/lang/en.lang.php
* @author zero (zero@nzeo.com)
* @brief English Language Pack (Only basic words are included here)
**/
// words for action, which is basically used
$lang->cmd_write = 'Escribir';
$lang->cmd_reply = 'Contestación';
$lang->cmd_delete = 'Cancelación';
$lang->cmd_modify = 'Modificar';
$lang->cmd_edit = 'Corregir';
$lang->cmd_view = 'Ver';
$lang->cmd_view_all = 'Ver Toda';
$lang->cmd_list = 'List';
$lang->cmd_prev = 'Prev';
$lang->cmd_next = 'Adelante';
$lang->cmd_send_trackback = 'Enviar Trackback';
$lang->cmd_registration = $lang->cmd_submit = 'Someter';
$lang->cmd_comment_registration = 'Agregar El Commentario';
$lang->cmd_insert = 'Insertar';
$lang->cmd_save = 'Guardar';
$lang->cmd_input = 'Entrdada';
$lang->cmd_search = 'Búsqueda';
$lang->cmd_cancel = 'Cancelar';
$lang->cmd_back = 'Ir Detrás';
$lang->cmd_vote = 'Votar';
$lang->cmd_move = 'Mover';
$lang->cmd_move_up = 'Arriba';
$lang->cmd_move_down = 'Abajo';
$lang->cmd_add_indent = 'Agregar Pedido';
$lang->cmd_remove_indent = 'Eliminar Pedido';
$lang->cmd_management = 'Manejar';
$lang->cmd_make = 'Crear';
$lang->cmd_select = 'Seleccionar';
$lang->cmd_select_all = 'Seleccionar Todos';
$lang->cmd_unselect_all = 'Deseleccionar Todos';
$lang->cmd_close_all = 'Cerrar Todos';
$lang->cmd_open_all = 'Abrir Todos';
$lang->cmd_reload = 'Actualizar';
$lang->cmd_close = 'Cerrar';
$lang->cmd_open = 'Abrir';
$lang->cmd_setup = 'Configuración';
$lang->cmd_option = 'Opción';
$lang->cmd_apply = 'Applicar';
$lang->cmd_open_calendar = 'Seleccionar la fecha';
$lang->cmd_send = 'Enviar';
$lang->cmd_print = 'Print';
$lang->cmd_scrap = 'Scrap';
$lang->cmd_preview = 'Preview';
$lang->cmd_reset = 'Reset';
$lang->enable = 'Enable';
$lang->disable = 'Disable';
// Essencial Words
$lang->no = 'No';
$lang->notice = 'Aviso';
$lang->secret = 'Secreto';
$lang->category = 'Categoría';
$lang->document_srl = 'Doc.Num';
$lang->user_id = 'Usuario';
$lang->author = 'Autor';
$lang->password = 'Contraseña';
$lang->password1 = 'Contraseña';
$lang->password2 = 'Confirmar la Contraseña';
$lang->admin_id = 'Identificación Del Admin';
$lang->writer = 'Escritor';
$lang->user_name = 'Nombre Del Usuario';
$lang->nick_name = 'Nombre De la Mella';
$lang->email_address = 'Correo Electrónico';
$lang->homepage = 'Página web';
$lang->blog = 'Blog';
$lang->birthday = 'Fecha de Nacimiento';
$lang->browser_title = 'Título del navegador';
$lang->title = 'Título';
$lang->title_content = 'Título+Contenido';
$lang->content = 'Contenido';
$lang->document = 'Entrada';
$lang->comment = 'Commentario';
$lang->description = 'Descripción';
$lang->trackback = 'Trackback';
$lang->tag = 'Etiqueta';
$lang->allow_comment = 'Permitir Commentarios';
$lang->lock_comment = 'Cerrar Commentarios';
$lang->allow_trackback = 'Permitir Trackback';
$lang->uploaded_file = 'Ajuntos';
$lang->grant = 'Autoridad';
$lang->target = 'Objetivo';
$lang->total = 'Total';
$lang->total_count = 'Visitos en Total';
$lang->ipaddress = 'Dirección IP';
$lang->path = 'Paso';
$lang->cart = 'Artículo Selecciónado';
$lang->friend = 'Amigos';
$lang->notify = 'Notify';
$lang->mid = 'Module Name';
$lang->layout = 'Layout';
$lang->widget = 'Widget';
$lang->module = 'Módulo';
$lang->skin = 'Tema';
$lang->colorset = 'Colección de colores';
$lang->extra_vars = 'Variables Extra';
$lang->document_url = 'Entrada URL';
$lang->trackback_url = 'Trackback URL';
$lang->blog_name = 'Titulo del Blog';
$lang->excerpt = 'Quotación';
$lang->document_count = 'Numeros de la Entradas';
$lang->page_count = 'Cuentas de las Pagínas';
$lang->list_count = 'Cuentas del Listos';
$lang->readed_count = 'Cuentas Referidos';
$lang->voted_count = 'Cuentas Votadas';
$lang->member_count = 'Cuentas de Miembros';
$lang->date = 'Fecha';
$lang->regdate = 'Fecha Publicado';
$lang->last_update = 'Última actualización';
$lang->signup_date = 'Fecha Inscribido';
$lang->last_login = 'Último Entrada';
$lang->first_page = 'Primera Pagína';
$lang->last_page = 'Última Pagína';
$lang->search_target = 'Buscando Objectivo';
$lang->search_keyword = 'Buscando Palabra Clave';
$lang->is_default = 'Prefijado';
$lang->no_documents = 'No Entradas!';
$lang->board_manager = 'Configuración Tablón';
$lang->member_manager = 'Configuración Miembros';
$lang->layout_manager = 'Configuración Diseño';
$lang->use = 'Usar';
$lang->notuse = 'Desusar';
$lang->not_exists = 'No existe';
$lang->unit_sec = 'sec';
$lang->unit_min = 'min';
$lang->unit_hour = 'hr';
$lang->unit_day = 'dia';
$lang->unit_week = 'semana';
$lang->unit_month = 'mes';
$lang->unit_year = 'año';
// Related to Description
$lang->about_tag = 'cuando mecanografiar las etiquetas, insertando un comma() entre cada etiqueta permite que usted entre las etiquetas múltiples';
$lang->about_layout = 'disposición adorna un aspecto de su módulo que usted podría configurarlo de menú de la disposición en la tapa';
// Related to Message
$lang->msg_call_server = 'Solicitando al servidor, espere por favor';
$lang->msg_db_not_setted = 'No tiene la Configuración del DB';
$lang->msg_invalid_queryid = 'El valor de Query ID especificado mal';
$lang->msg_not_permitted = 'Usted no tiene permiso';
$lang->msg_input_password = 'Por favor escribe sus contraseña';
$lang->msg_invalid_document = 'Numero de entrada invalido';
$lang->msg_invalid_request = 'Requesta Invalido';
$lang->msg_invalid_password = 'Contraseñn Invalido';
$lang->msg_error_occured = 'Occurrido Errores';
$lang->msg_not_founded = 'Objetivo no encontrado';
$lang->msg_no_result = 'Esta búsqueda no hay resultado';
$lang->msg_not_permitted_act = 'Usted no tiene permiso para ejecutar la action';
$lang->msg_module_is_not_exists = 'No podía encontrar el modulo que usted solicitado';
$lang->msg_module_is_not_standalone = 'El modulo usted solicitado no puede ejecutado independientemente';
$lang->success_registed = 'Registrado con Éxito';
$lang->success_updated = 'Actualizado con Éxito';
$lang->success_deleted = 'Boarrado con Éxito';
$lang->success_voted = 'Votado con Éxito';
$lang->success_moved = 'Movido con Éxito';
$lang->success_sended = 'Enviado con Éxito';
$lang->success_reset = 'Reajustado con Éxito';
$lang->success_leaved = 'Abandonó con Éxito';
$lang->fail_to_delete = 'Supresión Fallada';
$lang->fail_to_move = 'Mover Fallada';
$lang->failed_voted = 'No podía ser votado';
$lang->fail_to_delete_have_children = 'Supresión Fallda. Hay unas o más contestaciones';
$lang->confirm_submit = 'Confirmar para someter?';
$lang->confirm_logout = 'Confirmar para salir?';
$lang->confirm_vote = 'Confirmar para voto?';
$lang->confirm_delete = 'Confirmar de supresión?';
$lang->confirm_move = 'Confirmar para Movido?';
$lang->confirm_reset = 'Confirmar para reajustar?';
$lang->confirm_leave = 'Confirmar para Éxito?';
$lang->column_type = 'Tipo de la Columna';
$lang->column_type_list['text'] = 'Texto una linea';
$lang->column_type_list['homepage'] = 'url';
$lang->column_type_list['email_address'] = 'Correo Electrónico';
$lang->column_type_list['tel'] = 'Numero de fono';
$lang->column_type_list['textarea'] = 'Texto multi-linea';
$lang->column_type_list['checkbox'] = 'checkbox (selecciónes multiples)';
$lang->column_type_list['select'] = 'select box (selección singlar)';
//$lang->column_type_list['kr_zip'] = 'zip code (Korean)';
$lang->column_type_list['date'] = 'fecha (dd/mm/aaaa)';
//$lang->column_type_list['jp_zip'] = 'zip code (Japanese)';
$lang->column_name = 'Nombre de la Columna';
$lang->column_title = 'Título de la Columna';
$lang->default_value = 'Valor Prefijado';
$lang->is_active = 'Activado';
$lang->is_required = 'Entrada Necesario';
// Alert messages for Javascript using by XML filter
$lang->filter->isnull = 'Entrar un valor para %s';
$lang->filter->outofrange = 'Alinear el lenghth del texto de %s';
$lang->filter->equalto = 'Valor inválido asignado para %s';
$lang->filter->invalid_email = '%s es formateo inválido (eg. zbxe@zeroboard.com)';
$lang->filter->invalid_user_id = $lang->filter->invalid_userid = "%s es formeto inválido.\\nTomas letras, números, y el underbar(ingleses _) de cuál debe comenzar con las letras Alfabeto";
$lang->filter->invalid_homepage = '%s es formateo inválido. (?: http://www.zeroboard.com)';
$lang->filter->invalid_korean = '%s got an invalid format. Solo aceptan las letras Coreanas';
$lang->filter->invalid_korean_number = '%s es formateo inválido. Solamente combinación de letras y de números coreanos se acepta';
$lang->filter->invalid_alpha = '%s es formateo inválido. Solamente se aceptan las alfabeto';
$lang->filter->invalid_alpha_number = '%s es formateo inválido. Solamente se aceptan las alfabeto y números';
$lang->filter->invalid_number = '%s es formateo inválido. Solo aceptan los números.';
?>

216
common/lang/fr.lang.php Normal file
View file

@ -0,0 +1,216 @@
<?php
/**
* @file common/lang/fr.lang.php
* @author zero (zero@nzeo.com)
* @brief Paquet Francais de Langue (mots de base seulement)
**/
// verbes et mots de base decrivant des actions
$lang->cmd_write = 'Ecrire';
$lang->cmd_reply = 'Répondre';
$lang->cmd_delete = 'Supprimer';
$lang->cmd_modify = 'Modifier';
$lang->cmd_edit = 'Editer';
$lang->cmd_view = 'Regarder';
$lang->cmd_view_all = 'Regarder Tous';
$lang->cmd_list = 'Liste';
$lang->cmd_prev = 'Précédent ';
$lang->cmd_next = 'Après';
$lang->cmd_send_trackback = 'Envoyer Trackback';
$lang->cmd_registration = $lang->cmd_submit = 'Soumettre';
$lang->cmd_comment_registration = 'Ajouter le Commentaire';
$lang->cmd_insert = 'Insérer';
$lang->cmd_save = 'Economiser';
$lang->cmd_input = 'Entrer';
$lang->cmd_search = 'Rechercher';
$lang->cmd_cancel = 'Decommander';
$lang->cmd_back = 'Retour';
$lang->cmd_vote = 'Voter';
$lang->cmd_move = 'Deplacer';
$lang->cmd_move_up = 'Relever';
$lang->cmd_move_down = 'Abaisser';
$lang->cmd_add_indent = 'Ajouter le Creux';
$lang->cmd_remove_indent = 'Enlever le Creux';
$lang->cmd_management = 'Gestion';
$lang->cmd_make = 'Creer';
$lang->cmd_select = 'Choisir';
$lang->cmd_select_all = 'Choisir Tous';
$lang->cmd_unselect_all = 'Ne pas Selectionner Tous';
$lang->cmd_close_all = 'Cloturer Tous';
$lang->cmd_open_all = 'Ouvrir Tous';
$lang->cmd_reload = 'Recharger';
$lang->cmd_close = 'Fermer';
$lang->cmd_open = 'Cloturer';
$lang->cmd_setup = 'Configurer';
$lang->cmd_option = 'Option';
$lang->cmd_apply = 'Appliquer';
$lang->cmd_open_calendar = 'Choisir la Date';
$lang->cmd_send = 'Envoyer';
$lang->cmd_print = 'Imprimer';
$lang->enable = 'Permettre';
$lang->disable = 'Neutraliser';
// Mots essentiels
$lang->no = 'numéro';
$lang->notice = 'Notification';
$lang->secret = 'Secret';
$lang->category = 'Categorie';
$lang->document_srl = 'numéro du Document';
$lang->user_id = 'Pseudo';
$lang->author = 'Auteur';
$lang->password = 'Mot de Passe';
$lang->password1 = 'Mot de Passe';
$lang->password2 = 'Confirmer le Mot de Passe';
$lang->admin_id = 'Pseudo d\'Administrateur';
$lang->writer = 'Auteur';
$lang->user_name = 'Nom d\'utilisateur';
$lang->nick_name = 'Surnom';
$lang->email_address = 'E-mail';
$lang->homepage = 'Site Web';
$lang->blog = 'Blog';
$lang->birthday = 'Anniversaire';
$lang->browser_title = 'Titre de Navigateur';
$lang->title = 'Titre';
$lang->title_content = 'Titre + Contenu';
$lang->content = 'Contenu';
$lang->document = 'Article';
$lang->comment = 'Commentaire';
$lang->description = 'Description';
$lang->trackback = 'Trackback';
$lang->tag = 'Tag';
$lang->allow_comment = 'Permettre les Commentaires';
$lang->lock_comment = 'Rejeter les Commentaires';
$lang->allow_trackback = 'Permettre la Trackback';
$lang->uploaded_file = 'Dossier Téléchargé';
$lang->grant = 'Autorité';
$lang->target = 'Cible';
$lang->total = 'Total';
$lang->total_count = 'Comptage Total';
$lang->ipaddress = 'IP Address';
$lang->path = 'Chemin';
$lang->cart = 'Article Choisi';
$lang->friend = 'Les Amis';
$lang->mid = 'Titre de Module';
$lang->layout = 'Disposition';
$lang->widget = 'Widget';
$lang->module = 'Module';
$lang->skin = 'Thème';
$lang->colorset = 'Arrangement de couleur';
$lang->extra_vars = 'Variables Supplementaires';
$lang->document_url = 'URL du Document';
$lang->trackback_url = 'URL de la Trackback';
$lang->blog_name = 'Nom du Blog';
$lang->excerpt = 'Citation';
$lang->document_count = 'Nombre Total des Articles';
$lang->page_count = 'Nombre de Pages';
$lang->list_count = 'Nombre de Listes';
$lang->readed_count = 'Nombre de Fois Lues';
$lang->voted_count = 'Nombre de Voix';
$lang->member_count = 'Nombre de Membres';
$lang->date = 'Date';
$lang->regdate = 'Date d\'Enregistrement';
$lang->last_update = 'La Dernière Mise a Jour';
$lang->signup_date = 'Date d\'Enregistrement';
$lang->last_login = 'La Dernière Ouverture';
$lang->first_page = 'Première Page';
$lang->last_page = 'Dernière Page';
$lang->search_target = 'Cible de Recherche';
$lang->search_keyword = 'Mot-clé de Recherche';
$lang->is_default = 'défaut';
$lang->no_documents = 'Aucunes Entrées';
$lang->board_manager = 'Arrangements des Conseils';
$lang->member_manager = 'Arrangements des Membres';
$lang->layout_manager = 'Arrangements de Dispositions';
$lang->use = 'Utiliser';
$lang->notuse = 'Ne pas Utiliser';
$lang->not_exists = 'n\'Existe Pas';
$lang->unit_sec = 'sec';
$lang->unit_min = 'min';
$lang->unit_hour = 'heur';
$lang->unit_day = 'jour';
$lang->unit_week = 'semaine';
$lang->unit_month = 'mois';
$lang->unit_year = 'année';;
// Descriptions et information
$lang->about_tag = 'Quand l\'insertion des tags, insérent une virgule(,) entre chaque tags te permet d\'entrer les tags multiples.';
$lang->about_layout = 'es dispositions décorent l\'aspect d\'un module. Vous pouvez les configurer du menu de disposition ci-dessus.';
// Messages et alertes
$lang->msg_call_server = 'En demandant le serveur pour information, attendre svp.';
$lang->msg_db_not_setted = 'Les informations de DB n\'ont pas été placees.';
$lang->msg_invalid_queryid = 'La valeur indiquee d\'identification de question est inadmissi.';
$lang->msg_not_permitted = 'Vous n\'etes pas autorises a continuer.';
$lang->msg_input_password = 'Veuillez entrer votre mot de passe.';
$lang->msg_invalid_document = 'Vous avez demandé pour un article inadmissible.';
$lang->msg_invalid_request = 'Votre demande est inadmissible.';
$lang->msg_invalid_password = 'Vous avez entré un mot de passe inadmissible.';
$lang->msg_error_occured = 'Une erreur s\'est produite.';
$lang->msg_not_founded = 'La cible demandée n\'a pas pu être trouvée.';
$lang->msg_no_result = 'Aucun Resultat';
$lang->msg_not_permitted_act = 'Vous n\'êtes pas autorisés pour exécuter l\'action priée.';
$lang->msg_module_is_not_exists = 'Le module demandé n\'a pas pu être trouvé.';
$lang->msg_module_is_not_standalone = 'Le module demandé ne peut pas être exécuté indépendamment.';
$lang->success_registed = 'L\'enregistrement a été avec succès exécuté.';
$lang->success_updated = 'Avec succès mis a jour.';
$lang->success_deleted = 'Avec succès supprime';
$lang->success_voted = 'Avec succès voté';
$lang->success_moved = 'Avec succès deplacé';
$lang->success_sended = 'Avec succès envoyé';
$lang->success_reset = 'Avec succès remisé';
$lang->success_leaved = 'Avec succès fait cécession';
$lang->fail_to_delete = 'N\'a pas pu être supprimé.';
$lang->fail_to_move = 'N\'a pas pu être déplacé';
$lang->failed_voted = 'La demande de voter a échoué';
$lang->fail_to_delete_have_children = 'Une ou plusieurs reponses existent et ne pourraient pas être supprimees ainsi';
$lang->confirm_submit = 'Etes-vous sur vous voulez-vous soumettre?';
$lang->confirm_logout = 'Etes-vous sur vous voulez-vous se deconnecter?';
$lang->confirm_vote = 'Etes-vous sur vous voulez-vous voter?';
$lang->confirm_delete = 'Etes-vous sur vous voulez-vous supprimer?';
$lang->confirm_move = 'Etes-vous sur vous voulez-vous deplacer ceci?';
$lang->confirm_reset = 'Etes-vous sur vous voulez-vous remettre a zero ceci?';
$lang->confirm_leave = 'Etes-vous sur vous voulez-vous partir?';
$lang->column_type = 'Type de Colonne';
$lang->column_type_list['text'] = 'un-ligne texte';
$lang->column_type_list['homepage'] = 'url';
$lang->column_type_list['email_address'] = 'e-mail';
$lang->column_type_list['tel'] = 'numéro de telephone';
$lang->column_type_list['textarea'] = 'secteur multiligne des textes';
$lang->column_type_list['checkbox'] = 'boite de controle (choix multiple)';
$lang->column_type_list['select'] = 'boite choisie (choix simple)';
$lang->column_type_list['kr_zip'] = 'code postal (coréen)';
$lang->column_type_list['date'] = 'date (yyyy/mm/dd)';
//$lang->column_type_list['jp_zip'] = 'code postal (japonais)';
$lang->column_name = 'Nom de colonne';
$lang->column_title = 'Titre de colonne';
$lang->default_value = 'Valeur par défaut';
$lang->is_active = 'Actif';
$lang->is_required = 'Champ requis';
// Messages alertes pour le Javascript a l'aide des filtres de XML
$lang->filter->isnull = 'Entrer une valeur pour %s';
$lang->filter->outofrange = 'Aligner la longueur des textes de %s';
$lang->filter->equalto = "La valeur de %s est inadmissible.";
$lang->filter->invalid_email = "La format de %s est inadmissible. ex) zbxe@zeroboard.com";
$lang->filter->invalid_user_id = $lang->filter->invalid_userid = "La format de %s est inadmissible.\\nToutes les valeurs devraient se composer des alphabets, des nombres ou du soulignage (_) avec la premiere lettre etant un caractere de l'alphabet.";
$lang->filter->invalid_homepage = "La format de %s est inadmissible. ex) http://www.zeroboard.com";
$lang->filter->invalid_korean = "La format de %s est inadmissible. On permet seulement le coréen";
$lang->filter->invalid_korean_number = "La format de %s est inadmissible. Svp caracteres ou nombres coréens d'entrée seulement.";
$lang->filter->invalid_alpha = "La format de %s est inadmissible. Svp alphabets d'entrée seulement.";
$lang->filter->invalid_alpha_number = "La format de %s est inadmissible. Svp alphabets ou nombres d'entrée seulement.";
$lang->filter->invalid_number = "La format de %s est inadmissible. Svp l'entrée numérote seulement.";
?>

221
common/lang/jp.lang.php Normal file
View file

@ -0,0 +1,221 @@
<?php
/**
* @file common/lang/jp.lang.php
* @author zero (zero@nzeo.com) 翻訳RisaPapa
* @brief 日本語言語パッケージ(基本的な実行関連の用語がまとめられている)
**/
// 基本的な実行に用いる用語
$lang->cmd_write = '書き込む';
$lang->cmd_reply = '返信';
$lang->cmd_delete = '削除';
$lang->cmd_modify = '修正';
$lang->cmd_edit = '編集';
$lang->cmd_view = '表示';
$lang->cmd_view_all = 'すべて表示';
$lang->cmd_list = 'リスト';
$lang->cmd_prev = '前へ';
$lang->cmd_next = '次へ';
$lang->cmd_send_trackback = 'TB送信';
$lang->cmd_registration = $lang->cmd_submit = '登録';
$lang->cmd_comment_registration = 'コメント登録';
$lang->cmd_insert = '挿入';
$lang->cmd_save = '保存';
$lang->cmd_input = '入力';
$lang->cmd_search = '検索';
$lang->cmd_cancel = 'キャンセル';
$lang->cmd_back = '戻る';
$lang->cmd_vote = '推薦';
$lang->cmd_move = '移動';
$lang->cmd_move_up = '上へ';
$lang->cmd_move_down = '下へ';
$lang->cmd_add_indent = '字下げ';
$lang->cmd_remove_indent = '字下げ解除';
$lang->cmd_management = '管理';
$lang->cmd_make = '作成';
$lang->cmd_select = '選択';
$lang->cmd_select_all = 'すべて選択';
$lang->cmd_unselect_all = 'すべて解除';
$lang->cmd_close_all = 'すべて閉じる';
$lang->cmd_open_all = 'すべて開く';
$lang->cmd_reload = 'リロード';
$lang->cmd_close = '閉じる';
$lang->cmd_open = '開く';
$lang->cmd_setup = '設定';
$lang->cmd_apply = '適用';
$lang->cmd_option = 'オプション';
$lang->cmd_open_calendar = 'カレンダーを開く';
$lang->cmd_send = '送信';
$lang->cmd_print = '印刷';
$lang->cmd_scrap = 'スクラップ';
$lang->cmd_preview = 'プレビュー';
$lang->cmd_reset = '初期化';
$lang->cmd_remake_cache = "キャッシュファイル再生成";
$lang->enable = '可能';
$lang->disable = '不可';
// 基本用語
$lang->no = '番号';
$lang->notice = 'お知らせ';
$lang->secret = '非公開';
$lang->category = 'カテゴリ';
$lang->document_srl = '書き込み番号';
$lang->user_id = 'ユーザID';
$lang->author = '作者';
$lang->password = 'パスワード';
$lang->password1 = 'パスワード';
$lang->password2 = 'パスワード確認';
$lang->admin_id = '管理者ID';
$lang->writer = '投稿者';
$lang->user_name = '名前';
$lang->nick_name = 'ニックネーム';
$lang->email_address = 'メールアドレス';
$lang->homepage = 'ホームページ';
$lang->blog = 'ブログ';
$lang->birthday = '誕生日';
$lang->browser_title = 'ブラウザタイトル';
$lang->title = 'タイトル';
$lang->title_content = 'タイトル+内容';
$lang->content = '内容';
$lang->document = '書き込み';
$lang->comment = 'コメント';
$lang->description = '説明';
$lang->trackback = 'トラックバック';
$lang->tag = 'タグ';
$lang->allow_comment = 'コメント許可';
$lang->lock_comment = 'コメントロック';
$lang->allow_trackback = 'トラックバック許可';
$lang->uploaded_file = '添付';
$lang->grant = '権限';
$lang->target = '対象';
$lang->total = 'すべて';
$lang->total_count = 'トータル数';
$lang->ipaddress = 'IPアドレス';
$lang->path = 'パス';
$lang->cart = '選択項目';
$lang->friend = '友達';
$lang->notify = 'お知らせ';
$lang->mid = 'モジュール名';
$lang->layout = 'レイアウト';
$lang->widget = 'ウィジェット';
$lang->module = 'モジュール';
$lang->skin = 'スキン';
$lang->colorset = 'カラーセット';
$lang->extra_vars = '拡張変数';
$lang->document_url = '書き込みURL';
$lang->trackback_url = 'トラックバックURL';
$lang->blog_name = 'ブログ名';
$lang->excerpt = '要約';
$lang->document_count = '書き込み数';
$lang->page_count = 'ページ数';
$lang->list_count = 'リスト数';
$lang->readed_count = '照合数';
$lang->voted_count = '推薦数';
$lang->member_count = '会員数';
$lang->date = '年月日';
$lang->regdate = '登録日';
$lang->last_update = '最近修正日';
$lang->signup_date = '加入日';
$lang->last_login = '最近ログイン';
$lang->first_page = '最初のページ';
$lang->last_page = '最後のページ';
$lang->search_target = '検索対象';
$lang->search_keyword = 'キーワード';
$lang->is_default = 'デフォルト';
$lang->no_documents = '書き込みがありません。';
$lang->board_manager = '掲示板管理';
$lang->member_manager = '会員管理';
$lang->layout_manager = 'レイアウト';
$lang->use = '使用';
$lang->notuse = '未使用';
$lang->not_exists = 'なし';
$lang->unit_sec = '秒';
$lang->unit_min = '分';
$lang->unit_hour = '時';
$lang->unit_day = '日';
$lang->unit_week = '週';
$lang->unit_month = '月';
$lang->unit_year = '年';
// 説明関連
$lang->about_tag = 'タグを入力する時、「,」を使うと複数登録できます。';
$lang->about_layout = 'レイアウトでモジュールの枠をデザインします。上のレイアウトメニューで管理できます。';
// メッセージ関連
$lang->msg_call_server = 'サーバへ問合わせ中です。しばらくお待ちください。';
$lang->msg_db_not_setted = 'DBが設定されていません。';
$lang->msg_invalid_queryid = 'クエリIDの値が無効です。';
$lang->msg_not_permitted = '権限がありません。';
$lang->msg_input_password = 'パスワードを入力してください。';
$lang->msg_invalid_document = '無効な書き込み番号です。';
$lang->msg_invalid_request = '無効なリクエストです。';
$lang->msg_invalid_password = 'パスワードが正しくありません。';
$lang->msg_error_occured = 'エラーが発生しました。';
$lang->msg_not_founded = '見つかりません。';
$lang->msg_no_result = '検索結果がありません。';
$lang->msg_not_permitted_act = '現在の操作は実行する権限がありません。';
$lang->msg_module_is_not_exists = 'モジュールが見つかりません。';
$lang->msg_module_is_not_standalone = 'このモジュールはスタンドアローンでは作動しません。';
$lang->success_registed = '登録しました。';
$lang->success_updated = '修正しました。';
$lang->success_deleted = '削除しました。';
$lang->success_voted = '推薦しました。';
$lang->success_moved = '移動しました。';
$lang->success_sended = '送信しました。';
$lang->success_reset = '初期化しました。';
$lang->success_leaved = '脱会しました。';
$lang->fail_to_delete = '削除に失敗しました。';
$lang->fail_to_move = '移動に失敗しました。';
$lang->failed_voted = '推薦できません。';
$lang->fail_to_delete_have_children = '返信の書き込みがあり、削除できません。';
$lang->confirm_submit = '登録しますか?';
$lang->confirm_logout = 'ログアウトしますか?';
$lang->confirm_vote = '推薦しますか?';
$lang->confirm_delete = '削除しますか?';
$lang->confirm_move = '移動しますか?';
$lang->confirm_reset = '初期化しますか?';
$lang->confirm_leave = '脱会しますか?';
$lang->column_type = 'タイプ';
$lang->column_type_list['text'] = '入力フィールド(text)';
$lang->column_type_list['homepage'] = 'ホームページタイプ(url)';
$lang->column_type_list['email_address'] = 'メールタイプ(email)';
$lang->column_type_list['tel'] = '電話番号タイプ(phone)';
$lang->column_type_list['textarea'] = 'テキストエリア(textarea)';
$lang->column_type_list['checkbox'] = 'チェックボックス(checkbox)';
$lang->column_type_list['select'] = '選択(select)';
$lang->column_type_list['kr_zip'] = '韓国住所(zip)';
$lang->column_type_list['date'] = '年月日';
//$lang->column_type_list['jp_zip'] = '日本住所(zip)';
$lang->column_name = 'コラム名';
$lang->column_title = 'コラムタイトル';
$lang->default_value = 'デフォルト値';
$lang->is_active = '活性化';
$lang->is_required = '必須項目';
// xml filterで用いられているjavascript用のアラートメッセージ
$lang->filter->isnull = '%sを入力してください';
$lang->filter->outofrange = '%sの文字の長さを合わせてください';
$lang->filter->equalto = '%sが正しくありません';
$lang->filter->invalid_email = '%sのパターンが正しくありません (例: zbxe@zeroboard.com)';
$lang->filter->invalid_user_id = $lang->filter->invalid_userid = "%sの形式が正しくありません。\\n半角の英数と記号「_」を組み合わせて入力してください。最初の文字は半角英数でなければなりません。";
$lang->filter->invalid_homepage = '%sの形式が正しくありません (例: http://www.zeroboard.com)';
$lang->filter->invalid_korean = '%sの形式が正しくありません。ハングルのみ入力してください。';
$lang->filter->invalid_korean_number = '%sの形式が正しくありません。ハングルと半角数字で入力してください。';
$lang->filter->invalid_alpha = '%sの形式が正しくありません。半角英文字で入力してください。';
$lang->filter->invalid_alpha_number = '%sの形式が正しくありません。半角英数で入力してください。';
$lang->filter->invalid_number = '%sの形式が正しくありません。半角数字で入力してください。';
?>

221
common/lang/ko.lang.php Normal file
View file

@ -0,0 +1,221 @@
<?php
/**
* @file common/lang/ko.lang.php
* @author zero (zero@nzeo.com)
* @brief 한국어 언어팩 (기본적인 내용만 수록)
**/
// 기본적으로 사용되는 action 언어
$lang->cmd_write = '쓰기';
$lang->cmd_reply = '답글';
$lang->cmd_delete = '삭제';
$lang->cmd_modify = '수정';
$lang->cmd_edit = '편집';
$lang->cmd_view = '보기';
$lang->cmd_view_all = '전체 보기';
$lang->cmd_list = '목록';
$lang->cmd_prev = '이전';
$lang->cmd_next = '다음';
$lang->cmd_send_trackback = '엮인글발송';
$lang->cmd_registration = $lang->cmd_submit = '등록';
$lang->cmd_comment_registration = '댓글 등록';
$lang->cmd_insert = '추가';
$lang->cmd_save = '저장';
$lang->cmd_input = '입력';
$lang->cmd_search = '검색';
$lang->cmd_cancel = '취소';
$lang->cmd_back = '돌아가기';
$lang->cmd_vote = '추천';
$lang->cmd_move = '이동';
$lang->cmd_move_up = '위로';
$lang->cmd_move_down = '아래로';
$lang->cmd_add_indent = '들이기';
$lang->cmd_remove_indent = '빼내기';
$lang->cmd_management = '관리';
$lang->cmd_make = '생성';
$lang->cmd_select = '선택';
$lang->cmd_select_all = '모두선택';
$lang->cmd_unselect_all = '모두해제';
$lang->cmd_close_all = '모두닫기';
$lang->cmd_open_all = '모두열기';
$lang->cmd_reload = '다시읽기';
$lang->cmd_close = '닫기';
$lang->cmd_open = '열기';
$lang->cmd_setup = '설정';
$lang->cmd_option = '옵션';
$lang->cmd_apply = '적용';
$lang->cmd_open_calendar = '날짜 선택';
$lang->cmd_send = '발송';
$lang->cmd_print = '인쇄';
$lang->cmd_scrap = '스크랩';
$lang->cmd_preview = '미리 보기';
$lang->cmd_reset = '초기화';
$lang->cmd_remake_cache = "캐시파일 재생성";
$lang->enable = '가능';
$lang->disable = '불가능';
// 기본 단어
$lang->no = '번호';
$lang->notice = '공지';
$lang->secret = '비밀';
$lang->category = '분류';
$lang->document_srl = '문서번호';
$lang->user_id = '아이디';
$lang->author = '작성자';
$lang->password = '비밀번호';
$lang->password1 = '비밀번호';
$lang->password2 = '비밀번호 확인';
$lang->admin_id = '관리자ID';
$lang->writer = '글쓴이';
$lang->user_name = '이름';
$lang->nick_name = '닉네임';
$lang->email_address = '이메일 주소';
$lang->homepage = '홈페이지';
$lang->blog = '블로그';
$lang->birthday = '생일';
$lang->browser_title = '브라우저 제목';
$lang->title = '제목';
$lang->title_content = '제목+내용';
$lang->content = '내용';
$lang->document = '게시물';
$lang->comment = '댓글';
$lang->description = '설명';
$lang->trackback = '엮인글';
$lang->tag = '태그';
$lang->allow_comment = '댓글허용';
$lang->lock_comment = '댓글잠금';
$lang->allow_trackback = '엮인글허용';
$lang->uploaded_file = '첨부';
$lang->grant = '권한';
$lang->target = '대상';
$lang->total = '전체';
$lang->total_count = '전체개수';
$lang->ipaddress = 'IP 주소';
$lang->path = '경로';
$lang->cart = '선택항목';
$lang->friend = '친구';
$lang->notify = '알림';
$lang->mid = '모듈이름';
$lang->layout = '레이아웃';
$lang->widget = '위젯 ';
$lang->module = '모듈';
$lang->skin = '스킨';
$lang->colorset = '컬러셋';
$lang->extra_vars = '확장변수';
$lang->document_url = '게시글 주소';
$lang->trackback_url = '엮인글 주소';
$lang->blog_name = '블로그이름';
$lang->excerpt = '발췌';
$lang->document_count = '글수';
$lang->page_count = '페이지수';
$lang->list_count = '목록 수';
$lang->readed_count = '조회수';
$lang->voted_count = '추천수';
$lang->member_count = '회원수';
$lang->date = '날짜';
$lang->regdate = '등록일';
$lang->last_update = '최근수정일';
$lang->signup_date = '가입일';
$lang->last_login = '최근로그인';
$lang->first_page = '첫페이지';
$lang->last_page = '끝페이지';
$lang->search_target = '검색대상';
$lang->search_keyword = '검색어';
$lang->is_default = '기본';
$lang->no_documents = '등록된 글이 없습니다';
$lang->board_manager = '게시판 관리';
$lang->member_manager = '회원 관리';
$lang->layout_manager = '레이아웃 관리';
$lang->use = '사용';
$lang->notuse = '미사용';
$lang->not_exists = '없음';
$lang->unit_sec = '초';
$lang->unit_min = '분';
$lang->unit_hour = '시';
$lang->unit_day = '일';
$lang->unit_week = '주';
$lang->unit_month = '월';
$lang->unit_year = '년';
// 설명 관련
$lang->about_tag = '태그 입력시 , (쉼표)를 이용하시면 복수 등록이 가능합니다';
$lang->about_layout = '레이아웃은 모듈의 껍데기를 꾸며줍니다. 상단 레이아웃 메뉴에서 관리하실 수 있습니다';
// 메세지 관련
$lang->msg_call_server = '서버에 요청중입니다. 잠시만 기다려주세요.';
$lang->msg_db_not_setted = 'DB설정이 되어 있지 않습니다';
$lang->msg_invalid_queryid = 'Query ID값이 잘못 지정되었습니다';
$lang->msg_not_permitted = '권한이 없습니다';
$lang->msg_input_password = '비밀번호를 입력하여 주세요';
$lang->msg_invalid_document = '잘못된 문서번호입니다';
$lang->msg_invalid_request = '잘못된 요청입니다';
$lang->msg_invalid_password = '비밀번호가 올바르지 않습니다';
$lang->msg_error_occured = '오류가 발생하였습니다';
$lang->msg_not_founded = '대상을 찾을 수 없습니다';
$lang->msg_no_result = '검색 결과가 없습니다';
$lang->msg_not_permitted_act = '요청하신 action을 실행할 수 있는 권한이 없습니다';
$lang->msg_module_is_not_exists = '요청하신 모듈을 찾을 수 없습니다';
$lang->msg_module_is_not_standalone = '요청하신 모듈은 독립적으로 동작할 수가 없습니다';
$lang->success_registed = '등록되었습니다';
$lang->success_updated = '수정되었습니다';
$lang->success_deleted = '삭제되었습니다';
$lang->success_voted = '추천되었습니다';
$lang->success_moved = '이동되었습니다';
$lang->success_sended = '발송되었습니다';
$lang->success_reset = '초기화되었습니다';
$lang->success_leaved = '탈퇴되었습니다';
$lang->fail_to_delete = '삭제되었습니다';
$lang->fail_to_move = '이동되었습니다';
$lang->failed_voted = '추천하실 수 없습니다';
$lang->fail_to_delete_have_children = '답글이 있어서 삭제할 수 없습니다';
$lang->confirm_submit = '등록하시겠습니까?';
$lang->confirm_logout = '로그아웃하시겠습니까?';
$lang->confirm_vote = '추천하시겠습니까?';
$lang->confirm_delete = '삭제하시겠습니까?';
$lang->confirm_move = '이동하시겠습니까?';
$lang->confirm_reset = '초기화 하시겠습니까??';
$lang->confirm_leave = '탈퇴 하시겠습니까??';
$lang->column_type = '형식';
$lang->column_type_list['text'] = '한줄 입력칸 (text)';
$lang->column_type_list['homepage'] = '홈페이지 형식 (url)';
$lang->column_type_list['email_address'] = '이메일 형식 (email)';
$lang->column_type_list['tel'] = '전화번호 형식 (phone)';
$lang->column_type_list['textarea'] = '여러줄 입력칸 (textarea)';
$lang->column_type_list['checkbox'] = '다중 선택 (checkbox)';
$lang->column_type_list['select'] = '단일 선택 (select)';
$lang->column_type_list['kr_zip'] = '한국주소 (zip)';
$lang->column_type_list['date'] = '일자 (년월일)';
//$lang->column_type_list['jp_zip'] = '일본주소 (zip)';
$lang->column_name = '입력항목 이름';
$lang->column_title = '입력항목 제목';
$lang->default_value = '기본 값';
$lang->is_active = '활성';
$lang->is_required = '필수항목';
// xml filter에서 사용되는 javascript용 alert msg
$lang->filter->isnull = '%s의 값을 입력해주세요';
$lang->filter->outofrange = '%s의 글자 길이를 맞추어 주세요.';
$lang->filter->equalto = '%s의 값이 잘못 되었습니다.';
$lang->filter->invalid_email = '%s의 형식이 잘못되었습니다. (예: zbxe@zeroboard.com)';
$lang->filter->invalid_user_id = $lang->filter->invalid_userid = "%s의 형식이 잘못되었습니다.\\n영문,숫자와 _로 만드실 수 있으며 제일 앞은 영문이어야 합니다";
$lang->filter->invalid_homepage = '%s의 형식이 잘못되었습니다. (예: http://www.zeroboard.com)';
$lang->filter->invalid_korean = '%s의 형식이 잘못되었습니다. 한글로만 입력해주셔야 합니다';
$lang->filter->invalid_korean_number = '%s의 형식이 잘못되었습니다. 한글과 숫자로만 입력해주셔야 합니다';
$lang->filter->invalid_alpha = '%s의 형식이 잘못되었습니다. 영문으로만 입력해주셔야 합니다';
$lang->filter->invalid_alpha_number = '%s의 형식이 잘못되었습니다. 영문과 숫자로만 입력해주셔야 합니다';
$lang->filter->invalid_number = '%s의 형식이 잘못되었습니다. 숫자로만 입력해주셔야 합니다';
?>

221
common/lang/zh-CN.lang.php Normal file
View file

@ -0,0 +1,221 @@
<?php
/**
* @file common/lang/zh-CN.lang.php
* @author zero (zero@nzeo.com)
* @brief 简体中文语言包 (只收录基本内容)
**/
// 基本使用的 action 语言
$lang->cmd_write = '发表新帖';
$lang->cmd_reply = '回复';
$lang->cmd_delete = '删除';
$lang->cmd_modify = '修改';
$lang->cmd_edit = '编辑';
$lang->cmd_view = '查看';
$lang->cmd_view_all = '全部查看';
$lang->cmd_list = '目录';
$lang->cmd_prev = '上一页';
$lang->cmd_next = '下一页';
$lang->cmd_send_trackback = '发送引用';
$lang->cmd_registration = $lang->cmd_submit = '提交';
$lang->cmd_comment_registration = '提交评论';
$lang->cmd_insert = '添加';
$lang->cmd_save = '保存';
$lang->cmd_input = '输入';
$lang->cmd_search = '搜索';
$lang->cmd_cancel = '取消';
$lang->cmd_back = '返回';
$lang->cmd_vote = '推荐';
$lang->cmd_move = '查看';
$lang->cmd_move_up = '向上';
$lang->cmd_move_down = '向下';
$lang->cmd_add_indent = '拉长';
$lang->cmd_remove_indent = '缩短';
$lang->cmd_management = '管理';
$lang->cmd_make = '生成';
$lang->cmd_select = '选择';
$lang->cmd_select_all = '全部选择';
$lang->cmd_unselect_all = '全部解除';
$lang->cmd_close_all = '全部关闭';
$lang->cmd_open_all = '全部打开';
$lang->cmd_reload = '从新载入';
$lang->cmd_close = '关闭';
$lang->cmd_open = '打开';
$lang->cmd_setup = '设置';
$lang->cmd_option = '选项';
$lang->cmd_apply = '应用';
$lang->cmd_open_calendar = '选择日期';
$lang->cmd_send = '发送';
$lang->cmd_print = '打印';
$lang->cmd_scrap = '收藏';
$lang->cmd_preview = '预览';
$lang->cmd_reset = '初始化';
$lang->cmd_remake_cache = "重新生成缓冲文件";
$lang->enable = '可用';
$lang->disable = '禁用';
// 基本词语
$lang->no = '编号';
$lang->notice = '公告';
$lang->secret = '密帖';
$lang->category = '分类';
$lang->document_srl = '文章编号';
$lang->user_id = '用户名';
$lang->author = '制作';
$lang->password = '密码';
$lang->password1 = '密码';
$lang->password2 = '确认密码';
$lang->admin_id = '管理员ID';
$lang->writer = '作者';
$lang->user_name = '姓名';
$lang->nick_name = '昵称';
$lang->email_address = '电子邮件';
$lang->homepage = '主页';
$lang->blog = '博客';
$lang->birthday = '生日';
$lang->browser_title = '浏览器标题';
$lang->title = '标题';
$lang->title_content = '标题+内容';
$lang->content = '内容';
$lang->document = '文章';
$lang->comment = '评论';
$lang->description = '说明';
$lang->trackback = '引用';
$lang->tag = '标签';
$lang->allow_comment = '允许评论';
$lang->lock_comment = '关闭评论';
$lang->allow_trackback = '允许引用';
$lang->uploaded_file = '附件';
$lang->grant = '权限';
$lang->target = '目标';
$lang->total = '全部';
$lang->total_count = '总数';
$lang->ipaddress = 'IP地址';
$lang->path = '路径';
$lang->cart = '选择项目';
$lang->friend = '好友';
$lang->notify = '通告';
$lang->mid = '模块名称';
$lang->layout = '布局';
$lang->widget = '控件 ';
$lang->module = '模块';
$lang->skin = '皮肤';
$lang->colorset = '颜色设定';
$lang->extra_vars = '扩展变数';
$lang->document_url = '文章地址';
$lang->trackback_url = '引用地址';
$lang->blog_name = '博客名称';
$lang->excerpt = '载自';
$lang->document_count = '帖子数';
$lang->page_count = '页数';
$lang->list_count = '目录数';
$lang->readed_count = '查看';
$lang->voted_count = '推荐';
$lang->member_count = '会员数';
$lang->date = '日期';
$lang->regdate = '登录日期';
$lang->last_update = '最后更新';
$lang->signup_date = '注册日期';
$lang->last_login = '最近登陆';
$lang->first_page = '第一页';
$lang->last_page = '最后一页';
$lang->search_target = '搜索目标';
$lang->search_keyword = '关键字';
$lang->is_default = '默认';
$lang->no_documents = '现没有主题。';
$lang->board_manager = '版面管理';
$lang->member_manager = '会员管理';
$lang->layout_manager = '布局管理';
$lang->use = '使用';
$lang->notuse = '未使用';
$lang->not_exists = '无';
$lang->unit_sec = '秒';
$lang->unit_min = '分';
$lang->unit_hour = '时';
$lang->unit_day = '日';
$lang->unit_week = '周';
$lang->unit_month = '月';
$lang->unit_year = '年';
// 说明
$lang->about_tag = '用逗号分隔多个标签';
$lang->about_layout = '布局是布置模块的外观,在上端布局菜里单可以进行管理';
// 信息
$lang->msg_call_server = '系统正在链接服务器,请稍后。';
$lang->msg_db_not_setted = '还没有设定 DB';
$lang->msg_invalid_queryid = 'Query ID值指定错误';
$lang->msg_not_permitted = '没有权限';
$lang->msg_input_password = '请输入密码';
$lang->msg_invalid_document = '出错的文章编号';
$lang->msg_invalid_request = '出错的请求';
$lang->msg_invalid_password = '密码错误';
$lang->msg_error_occured = '发生错误';
$lang->msg_not_founded = '没有找到相关内容';
$lang->msg_no_result = '找不到和您查询的相符结果';
$lang->msg_not_permitted_act = '没有权限执行 action命令';
$lang->msg_module_is_not_exists = '找不到您查询的模块';
$lang->msg_module_is_not_standalone = '您请求的模块不能单独执行';
$lang->success_registed = '提交成功!';
$lang->success_updated = '修改成功!';
$lang->success_deleted = '删除成功!';
$lang->success_voted = '推荐成功!';
$lang->success_moved = '移动成功!';
$lang->success_sended = '发送成功!';
$lang->success_reset = '初始化成功';
$lang->success_leaved = '注销成功!';
$lang->fail_to_delete = '删除成功!';
$lang->fail_to_move = '移动成功!';
$lang->failed_voted = '您不能推荐!';
$lang->fail_to_delete_have_children = '不能删除有回复的评论!';
$lang->confirm_submit = '确定要提交吗?';
$lang->confirm_logout = '确定要退出吗?';
$lang->confirm_vote = '确定要推荐吗?';
$lang->confirm_delete = '确定要删除吗?';
$lang->confirm_move = '确定要移动吗?';
$lang->confirm_reset = '确定要初始化吗?';
$lang->confirm_leave = '确定要注销吗?';
$lang->column_type = '格式';
$lang->column_type_list['text'] = '单行文本输入区(text)';
$lang->column_type_list['homepage'] = '网址格式 (url)';
$lang->column_type_list['email_address'] = '邮件格式 (email)';
$lang->column_type_list['tel'] = '电话号码格式 (phone)';
$lang->column_type_list['textarea'] = '多行文本框 (textarea)';
$lang->column_type_list['checkbox'] = '复选框 (checkbox)';
$lang->column_type_list['select'] = '下拉列表框 (select)';
$lang->column_type_list['kr_zip'] = '韩国地址 (zip)';
$lang->column_type_list['date'] = '日期 (年月日)';
//$lang->column_type_list['jp_zip'] = '日本地址 (zip)';
$lang->column_name = '项目名';
$lang->column_title = '项目标题';
$lang->default_value = '缺省值';
$lang->is_active = '激活';
$lang->is_required = '必填';
// 在xml filter使用的 javascript用 alert msg
$lang->filter->isnull = '请输入%s';
$lang->filter->outofrange = '请确认%s字数';
$lang->filter->equalto = '%s值有误。';
$lang->filter->invalid_email = '%s格式有误。zbxe@zeroboard.com)';
$lang->filter->invalid_user_id = $lang->filter->invalid_userid = "%s只能用英文数字和 _首个字符必须是英文字母。";
$lang->filter->invalid_homepage = '%s格式有误。 http://www.zeroboard.com)';
$lang->filter->invalid_korean = '%s只能输入中文';
$lang->filter->invalid_korean_number = '%s只能输入中文或数字';
$lang->filter->invalid_alpha = '%s只能输入英文字母';
$lang->filter->invalid_alpha_number = '%s只能输入英文或数字';
$lang->filter->invalid_number = '%s只能输入数字';
?>

189
common/tpl/calendar.php Normal file
View file

@ -0,0 +1,189 @@
<?php
$year = sprintf("%04d",$_REQUEST['year']);
$month = sprintf("%02d",$_REQUEST['month']);
$method = $_REQUEST['method'];
$fo_id = $_REQUEST['fo_id'];
$callback_func = $_REQUEST['callback_func'];
$day_str = $_REQUEST['day_str'];
if($day_str && strlen($day_str)) {
$year = substr($day_str,0,4);
$month = substr($day_str,4,2);
}
if(!(int)$year) $year = date("Y");
if(!(int)$month) $month = date("m");
switch($method) {
case 'prev_year' :
$year = date("Y", mktime(0,0,0,1,1,$year)-60*60*24);
break;
case 'prev_month' :
$month --;
if($month < 1) {
$month = 12;
$year --;
}
break;
case 'next_month' :
$month ++;
if($month > 12) {
$month = 1;
$year ++;
}
break;
case 'next_year' :
$year = date("Y", mktime(0,0,0,12,31,$year)+60*60*24);
break;
}
$start_week = date("w", mktime(0,0,0,$month,1,$year));
$month_day = date("t", mktime(0,0,0,$month,1,$year));
$before_month_month_day = date("t", mktime(0,0,0,$month,1,$year)-60*60*24);
$next_year = date("m", mktime(0,0,0,12,31, $year)+60*60*24);
$next_month = date("m", mktime(0,0,0,$month,$month_day, $year)+60*60*24);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html lang="ko" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="imagetoolbar" content="no" />
<title>Calendar</title>
<script type="text/javascript" src="../js/x.js"></script>
<script type="text/javascript" src="../js/common.js"></script>
<script type="text/javascript" src="../js/xml_handler.js"></script>
<link rel="stylesheet" href="../css/default.css" type="text/css" />
<link rel="stylesheet" href="../css/button.css" type="text/css" />
<link rel="stylesheet" href="../../modules/admin/tpl/css/admin.css" type="text/css" />
<link rel="stylesheet" href="./css/calendar.css" type="text/css" />
<script type="text/javascript">
function selectDate(date_str, date_val, callback_func) {
if(!opener) {
window.close();
return;
}
var date_obj = opener.xGetElementById("date_<?=$fo_id?>");
var str_obj = opener.xGetElementById("str_<?=$fo_id?>");
if(date_obj) date_obj.value = date_val;
if(str_obj) xInnerHtml(str_obj, date_str);
if(callback_func) eval('opener.'+callback_func+'('+date_val+')');
window.close();
}
</script>
</head>
<body>
<div id="popup_content" >
<div id="popHeadder">
<h1>Calendar</h1>
</div>
<form action="./calendar.php" method="get">
<input type="hidden" name="fo_id" value="<?=$fo_id?>"/>
<input type="hidden" name="callback_func" value="<?=$callback_func?>"/>
<div id="popBody">
<div class="calendar">
<div class="yymm">
<div class="yy">
<a href="./calendar.php?fo_id=<?=$fo_id?>&amp;year=<?=$year?>&amp;month=<?=$month?>&amp;method=prev_year&amp;callback_func=<?=$callback_func?>" class="left"><img src="./images/buttonLeft2.gif" alt="prev" width="11" height="11" /></a><?=$year?><a href="./calendar.php?fo_id=<?=$fo_id?>&amp;year=<?=$year?>&amp;month=<?=$month?>&amp;method=next_year&amp;callback_func=<?=$callback_func?>" class="right"><img src="./images/buttonRight2.gif" alt="next" width="11" height="11" /></a>
</div>
<div class="mm">
<p><?=date("M", mktime(0,0,0,$month,1,$year))?></p>
<a href="./calendar.php?fo_id=<?=$fo_id?>&amp;year=<?=$year?>&amp;month=<?=$month?>&amp;method=prev_month&amp;callback_func=<?=$callback_func?>" class="left"><img src="./images/buttonLeft2.gif" alt="prev" width="11" height="11" /></a><span><?=$month?></span><a href="./calendar.php?fo_id=<?=$fo_id?>&amp;year=<?=$year?>&amp;month=<?=$month?>&amp;method=next_month&amp;callback_func=<?=$callback_func?>" class="right"><img src="./images/buttonRight2.gif" alt="next" width="11" height="11" /></a>
</div>
<div class="go">
<input type="text" name="year" class="inputTypeY" value="<?=$year?>" />
<input type="text" name="month" class="inputTypeM" value="<?=$month?>" />
<input type="image" src="./images/buttonGo.gif" alt="Go" />
</div>
</div>
<table cellspacing="0" class="dd">
<?php
for($i=0;$i<6;$i++) {
?>
<tr class="<?if($i==0){?>first<?}elseif($i==5){?>last<?}?>">
<?php
for($j=0;$j<7;$j++) {
$m = $month;
$y = $year;
$cell_no = $i*7 + $j;
if($cell_no < $start_week) {
$day = $before_month_month_day + $cell_no - $start_week + 1;
$m = $month - 1;
if($m<1) {
$m = 12;
$y = $year - 1;
}
} else {
$day = $cell_no - $start_week +1;
$m = $month;
if($day > $month_day) {
$day = $day - $month_day;
$m = $month + 1;
if($m>12) {
$m = 1;
$y = $year-1;
}
}
}
if($j==0) $class_name = "sun";
else $class_name= "";
$date = date("Y. m. d", mktime(0,0,0,$m, $day, $y));
$date_str = date("Ymd", mktime(0,0,0,$m, $day, $y));
?>
<td class="<?=$class_name?>">
<?if($m==$month){?>
<?if(date("Ymd")==$date_str){?><strong><?}?>
<?if($day){?><a href="#" onclick="selectDate('<?=$date?>','<?=$date_str?>','<?=$callback_func?>');return false;"><?=$day?></a><?}else{?>&nbsp;<?}?>
<?if(date("Ymd")==$date_str){?></strong><?}?>
<?}else{?>
<span class="disable"><?if($day){?><a href="#" onclick="selectDate('<?=$date?>','<?=$date_str?>','<?=$callback_func?>');return false;"><?=$day?></a><?}else{?>&nbsp;<?}?></span>
<?}?>
</td>
<?
}
?>
</tr>
<?
}
?>
</table>
</div>
</div>
</form>
<div id="popFooter" class="tCenter">
<a href="#" onclick="window.close();" class="button"><span>close</span></a>
</div>
</div>
<script type="text/javascript">
xAddEventListener(window,'load', setFixedPopupSize);
var _isPoped = true;
</script>
</body>
</html>

View file

@ -0,0 +1,47 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html lang="{Context::getLangType()}" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta name="generator" content="zeroboard xe (http://www.zeroboard.com)" />
<!--@if($module_info->module)--><meta name="module" content="{$module_info->module}" />
<!--@end--><!--@if($module_info->skin)--><meta name="module_skin" content="{$module_info->skin}" />
<!--@end--><!--@if($layout_info->title)--><meta name="layout" content="{$layout_info->title} ({$layout_info->layout})" />
<!--@end--><!--@if($layout->author)--><meta name="layout_maker" content="{$layout_info->author->name} ({$layout_info->author->homepage})" />
<!--@end--><meta http-equiv="imagetoolbar" content="no" />
<title>{Context::getBrowserTitle()}</title>
<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/xml_handler.js"></script>
<script type="text/javascript" src="./common/js/xml_js_filter.js"></script>
<!--@foreach(Context::getJsFile() as $key => $js_file)--><script type="text/javascript" src="{$js_file}"></script>
<!--@end--><!--@if($rss_url)--><link rel="alternate" type="application/rss+xml" title="RSS 2.0" href="{$rss_url}" />
<!--@end--><link rel="stylesheet" href="./common/css/default.css" type="text/css" />
<link rel="stylesheet" href="./common/css/button.css" type="text/css" />
<!--@foreach(Context::getCssFile() as $key => $css_file)--><link rel="stylesheet" href="{$css_file}" type="text/css" />
<!--@end--><!--@if($module=='admin' || strpos($act,'Admin')>0)--><link rel="stylesheet" href="./modules/admin/tpl/css/admin.css" type="text/css" />
<!--@end--><script type="text/javascript">//<![CDATA[
var current_url = "{$current_url}";
var request_uri = "{$request_uri}";
var current_mid = "{$mid}";
var wating_message = "{$lang->msg_call_server}";
//]]></script>
{Context::getHtmlHeader()}
</head>
<body>
{$zbxe_final_content}
{Context::getHtmlFooter()}
<div id="waitingforserverresponse" style="visibility:hidden"></div>
<div id="fororiginalimagearea" style="visibility:hidden">
<div id="fororiginalimageareabg">
<img src="./images/blank.gif" alt="original image" border="0" id="fororiginalimage" />
<img src="./images/original_image_box_close.gif" alt="close original image" border="0" onclick="closeOriginalImage()" id="closeOriginalImageBtn"/>
</div>
</div>
<div id="membermenuarea"></div>
</body>
</html>

View file

@ -0,0 +1,33 @@
@charset "utf-8";
body { margin:0; padding:0; }
#popup_content { width:370px; overflow:hidden;}
#popHeadder { width:370px; }
#popBody { width:350px; }
#popFooter { width:370px; }
#popBody .calendar { width:350px; border:1px solid #c1c0bd; border-left:none; border-right:none; background:#f5f5f5; overflow:hidden; position:relative;}
#popBody .calendar .yymm { width:143px; float:left;}
#popBody .calendar .yymm .yy { padding:9px 0 6px 0; text-align:center; border-bottom:1px solid #ededed; margin:0 15px; font:bold 1.2em Tahoma; color:#444444;}
#popBody .calendar .yymm .mm { margin:0 15px; border-top:1px solid #ffffff; border-bottom:1px solid #ededed; padding:10px 0 7px 0; text-align:center;}
#popBody .calendar .yymm .mm p { color:#969696; font:1.6em "Times New Roman";}
#popBody .calendar .yymm .mm span { font:4em "Times New Roman"; color:#158692; vertical-align:middle;}
#popBody .calendar .yymm .go { padding:7px 0 0 0; margin:0 15px; text-align:center; border-top:1px solid #ffffff;}
#popBody .calendar .yymm .go * { vertical-align:middle;}
#popBody .calendar .yymm .go .inputTypeY { border:1px solid #c9c9c9; text-align:center; font:.9em Tahoma; color:#282828; width:31px; height:16px;}
#popBody .calendar .yymm .go .inputTypeM { border:1px solid #c9c9c9; text-align:center; font:.9em Tahoma; color:#282828; width:20px; height:16px;}
#popBody .calendar .yymm .left { vertical-align:middle; margin-right:14px;}
#popBody .calendar .yymm .right { vertical-align:middle; margin-left:14px;}
#popBody .calendar .yymm .left img,
#popBody .calendar .yymm .right img { vertical-align:middle; position:relative; top:2px;}
#popBody .calendar .dd { float:left; width:207px; background:#ffffff; border-left:10px solid #ffffff;}
#popBody .calendar .dd td { border-bottom:1px solid #ededed; height:32px; text-align:center; color:#636363; font:.9em Tahoma;}
#popBody .calendar .dd td a { color:#636363; font:.9em Tahoma;}
#popBody .calendar .dd td strong { text-decoration:underline;}
#popBody .calendar .dd td strong a { text-decoration:underline;}
#popBody .calendar .dd td.sun { color:#c95b53;}
#popBody .calendar .dd td.sun a { color:#c95b53;}
#popBody .calendar .dd .first { height:35px;}
#popBody .calendar .dd .last td { height:35px; border-bottom:none;}
#popBody .calendar .dd td .disable a { color:#CCCCCC; }

View file

@ -0,0 +1 @@
{$content}

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 454 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 372 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 649 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 650 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 650 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 648 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 622 B

BIN
common/tpl/images/info.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 386 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 610 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

BIN
common/tpl/images/widget_bg.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

BIN
common/tpl/images/widget_text.gif Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 970 B

View file

@ -0,0 +1,7 @@
<!--%import("css/popup.css")-->
<div id="popup_content">{$content}</div>
<script type="text/javascript">
xAddEventListener(window, 'load', setFixedPopupSize);
var _isPoped = true;
</script>

3
common/tpl/refresh.html Normal file
View file

@ -0,0 +1,3 @@
<script type="text/javascript">
top.location.href = top.location.href;
</script>