/******************************************************** 파일명 : pagenavigator.js 설 명 : 시군구 행정종합정보시스템 공통개발1팀 JavaScript 작성자 : 이광진 작성일 : 2006.04.24 수정일 : 2006.04.24 *********************************************************/ var DEFAULT_PAGEUNIT = 20; var DEFAULT_PAGESIZE = 20; var PAGE_GROUP_ID = "grp_pagenavigator"; var PAGE_ROOT = "/root/pagenavInfo/"; var SEMICOLON = ";"; var cnt = 0; var PAGE_MSG = "해당페이지에 goPage()가 구현되지 않았습니다.\n확인해 주시기 바랍니다."; String.prototype.trim = function() { var pattern = !arguments[0] ? /^\s+|\s+$/g : new RegExp('^['+arguments[0]+']+|['+arguments[0]+']+$', 'g') return this.replace(pattern, '') } function CMMPageNavigator(id){ var pageIndex = model.getValue(PAGE_ROOT + "pageIndex")=='' ? "1" : model.getValue(PAGE_ROOT + "pageIndex"); var totalSize = model.getValue(PAGE_ROOT + "totalSize")=='' ? "0" : model.getValue(PAGE_ROOT + "totalSize"); var pageUnit = model.getValue(PAGE_ROOT + "pageUnit")=='' ? DEFAULT_PAGEUNIT : model.getValue(PAGE_ROOT + "pageUnit"); var pageSize = model.getValue(PAGE_ROOT + "pageSize")=='' ? DEFAULT_PAGESIZE : model.getValue(PAGE_ROOT + "pageSize"); // alert(pageIndex+"/"+totalSize+"/"+pageUnit+"/"+pageSize); if(id!=null) { id.text= pageIndex + "/" + (parseInt((totalSize - 1) / pageSize) + 1) + " (총 " + totalSize + "건)"; id.attribute("text-align") = "right"; id.attribute("vertical-align") = "middle"; id.attribute("class") = "page_info"; } CMMRemoveNavigator(); CMMMakeNavigator(new Page(pageIndex, totalSize, pageUnit, pageSize)); } function CMMRemoveNavigator() { model.removeNode(PAGE_ROOT + "pageIndex"); model.removeNode(PAGE_ROOT + "totalSize"); model.removeNode(PAGE_ROOT + "pageUnit"); model.removeNode(PAGE_ROOT + "pageSize"); // body.removeChild(PAGE_GROUP_ID); if( null != document.controls(PAGE_GROUP_ID + cnt)){ eval(PAGE_GROUP_ID + cnt).visible = "false"; eval(PAGE_GROUP_ID + cnt).disabled = "true"; } } function CMMMakeNavigator(pages){ var fName = "goPage"; var grpTag = "xforms:group"; var btnTag = "xforms:button"; var capTag = "xforms:caption"; var pageCtl = document.controls("pagenavigator"); var topLoc = pageCtl.attribute("top"); var leftLoc = pageCtl.attribute("left"); var width = pageCtl.attribute("width"); var height = pageCtl.attribute("height"); cnt++; var grpStyle = ""; grpStyle += "class:group_pagenav;" grpStyle += "id:" + PAGE_GROUP_ID + cnt + SEMICOLON; grpStyle += "top:" + topLoc + SEMICOLON; grpStyle += "left:" + leftLoc + SEMICOLON; grpStyle += "width:" + width + SEMICOLON; grpStyle += "height:" + height + SEMICOLON; var grpCtl = body.createChild(grpTag, grpStyle); var current = 0; var imgSize = 13; var capSize = 10; var btnSize = 22; var unitSize = btnSize + capSize; var panelSize = 430; // 페이지네이게이터 최대넓이 var gap = 4; width = parseInt(width.trim("px")); var start = (width - panelSize == 0) ? 0 : parseInt((width - panelSize) / 2); start += (DEFAULT_PAGEUNIT - (pages.getEndListPage() - pages.getBeginUnitPage())) * parseInt(unitSize / 2); var prevEndStyle = ""; current += start; prevEndStyle += "class:page_prevend;"; prevEndStyle += "left:" + current + SEMICOLON; prevEndStyle += "onclick:" + fName + "(" + pages.getPageOfPreviousPageUnit() + ")" + SEMICOLON; if(pages.hasPreviousPageUnit()) { grpCtl.createChild(btnTag, prevEndStyle); } else { grpCtl.createChild(btnTag, prevEndStyle + "disabled:true;"); } var prevStyle = ""; current += imgSize + gap; prevStyle += "class:page_prev;"; prevStyle += "left:" + current + SEMICOLON; prevStyle += "onclick:" + fName + "(" + pages.getStartOfPreviousPage() + ")" + SEMICOLON; if(pages.hasPreviousPage()) { grpCtl.createChild(btnTag, prevStyle); } else { grpCtl.createChild(btnTag, prevStyle + "disabled:true;"); } var capStyle = ""; capStyle += "class:page_sep;"; capStyle += "text:|;"; var pageStyle = ""; current += imgSize + gap; var sep = current - (unitSize); var page = sep + gap; for(i = pages.getBeginUnitPage(); i <= pages.getEndListPage(); i++) { sep += unitSize; page += unitSize; pageStyle = "class:page_no; onclick:" + fName + "(" + i + ")" + SEMICOLON; if(i == pages.getCurrentPage()) { grpCtl.createChild(capTag, capStyle + "left:" + sep + SEMICOLON); grpCtl.createChild(btnTag, pageStyle + "font-weight:bold; left:" + page + "; text:" + i + SEMICOLON); } else { grpCtl.createChild(capTag, capStyle + "left:" + sep + SEMICOLON); grpCtl.createChild(btnTag, pageStyle + "left:" + page + "; text:" + i + SEMICOLON); } } sep += unitSize; grpCtl.createChild(capTag, capStyle + "left:" + sep); var nextStyle = ""; current = sep + imgSize + gap; nextStyle += "class:page_next;"; nextStyle += "left:" + current + SEMICOLON; nextStyle += "onclick:" + fName + "(" + pages.getStartOfNextPage() + ")" + SEMICOLON; if(pages.hasNextPage()) { grpCtl.createChild(btnTag, nextStyle); } else { grpCtl.createChild(btnTag, nextStyle + "disabled:true;"); } var nextStyle = ""; current += imgSize + gap; nextStyle += "class:page_nextend;"; nextStyle += "left:" + current + SEMICOLON; nextStyle += "onclick:" + fName + "(" + pages.getPageOfNextPageUnit() + ")" + SEMICOLON; if(pages.hasNextPageUnit()) { grpCtl.createChild(btnTag, nextStyle); } else { grpCtl.createChild(btnTag, nextStyle + "disabled:true;"); } } function Page(pageIndex, totalSize, pageUnit, pageSize) { this.currentPageIndex = parseInt(pageIndex); this.totalSize = parseInt(totalSize); this.pageUnit = parseInt(pageUnit); this.pageSize = parseInt(pageSize); this.maxPage = parseInt((this.totalSize - 1) / this.pageSize) + 1; this.beginUnitPage = parseInt((this.currentPageIndex - 1) / this.pageUnit) * this.pageUnit + 1; this.endUnitPage = this.beginUnitPage + (this.pageUnit - 1); /* var tmp = "currentPageIndex:"+this.currentPageIndex+"\n"; tmp += "totalSize:"+this.totalSize+"\n"; tmp += "pageUnit:"+this.pageUnit+"\n"; tmp += "pageSize:"+this.pageSize+"\n"; tmp += "maxPage:"+this.maxPage+"\n"; tmp += "beginUnitPage:"+this.beginUnitPage+"\n"; tmp += "endUnitPage:"+this.endUnitPage+"\n"; alert(tmp); */ // setter this.setCurrentPageIndex = function setCurrentPageIndex(value) { this.currentPageIndex = value; } this.setTotalSize = function setTotalSize(value) { this.totalSize = value; } this.setPageUnit = function setPageUnit(value) { this.pageUnit = value; } this.setPageSize = function setPageSize(value) { this.pageSize = value; } // getter this.getStartOfNextPage = function getStartOfNextPage() { return this.currentPageIndex + 1; } this.getStartOfPreviousPage = function getStartOfPreviousPage() { return this.currentPageIndex - 1; } this.getStartOfNextPageUnit = function getStartOfNextPageUnit() { return this.endUnitPage + 1; } this.getStartOfPreviousPageUnit = function getStartOfPreviousPageUnit() { return this.beginUnitPage - 1; } this.getPageOfNextPageUnit = function getPageOfNextPageUnit() { return this.currentPageIndex + this.pageUnit < this.maxPage ? this.currentPageIndex + this.pageUnit : this.maxPage; } this.getPageOfPreviousPageUnit = function getPageOfPreviousPageUnit() { return this.currentPageIndex - this.pageUnit > 1 ? this.currentPageIndex - this.pageUnit : 1; } this.getCurrentPage = function getCurrentPage() { return this.currentPageIndex; } this.getBeginUnitPage = function getBeginUnitPage() { return this.beginUnitPage; } this.getEndListPage = function getEndListPage() { return this.endUnitPage > this.maxPage ? this.maxPage : this.endUnitPage; } this.getTotal = function getTotal() { return this.totalSize; } // info this.hasPreviousPageUnit = function hasPreviousPageUnit() { return this.currentPageIndex >= this.pageUnit + 1; } this.hasPreviousPage = function hasPreviousPage() { return this.currentPageIndex > 1; } this.hasNextPage = function hasNextPage() { return this.currentPageIndex < this.maxPage; } this.hasNextPageUnit = function hasNextPageUnit() { return this.endUnitPage < this.maxPage; } this.isEmptyPage = function isEmptyPage() { return this.totalSize==0 ? true : false; } } function goPage() { alert(PAGE_MSG); }