/lib/AXGrid.js
https://github.com/qnotes/axisj · JavaScript · 5901 lines · 4830 code · 596 blank · 475 comment · 1954 complexity · d0c9e6b5b68a6b1fcf7cf76c261b08b1 MD5 · raw file
Large files are truncated click here to view the full file
- /**
- * AXGrid
- * @class AXGrid
- * @extends AXJ
- * @version v1.65
- * @author tom@axisj.com
- * @logs
- "2012-12-24 오전 11:51:26",
- "2013-01-08 오전 10:53:46 50% 진행중 - tom",
- "2013-01-22 오후 10:20:01 99% 완료 - tom",
- "2013-02-11 오후 12:21:55 editor value function 구문 적용 - tom",
- "2013-02-15 오후 7:04:03 list length 가 1일때 setEditor 버그 수정 - tom",
- "2013-02-16 오후 1:12:17 휠 스크롤 제어 예외 처리 - tom",
- "2013-02-16 오후 10:37:55 reloadList 추가 - tom",
- "2013-04-08 오후 9:48:53 getCheckedListWithIndex 추가 - tom",
- "2013-05-09 오후 1:56:53 setFocus 추가 - tom",
- "2013-06-17 오후 12:52:04 setFocus 스크롤 자동이동 기능 보강 / focusMove 추가 - tom ",
- "2013-06-21 오전 10:34:04 fitToWidth 속성 추가 & marker bugfix - tom",
- "2013-06-25 오후 5:23:29 getSelectedItem 추가 / 버그픽스 - tom",
- "2013-06-28 오전 11:32:33 wheel 버그픽스 - tom",
- "2013-07-04 오후 1:12:34 tooltip 속성 추가 - tom",
- "2013-07-17 오후 4:27:34 페이지 변경시 서버 2중 호출 버그 픽스",
- "2013-07-21 오후 10:15:09 wheel 버그픽스 - tom",
- "2013-07-24 오전 10:17:05 page 선언안함 버그픽스 - tom",
- "2013-09-04 오후 2:49:54 AXConfig에서 설정값 바인딩 구조로 변경 처리 - tom",
- "2013-09-23 오후 4:07:58 printList에서 리스트가 없을때 this.redrawGrid() 호출 추가 - root",
- "2013-09-24 오전 12:49:34 setList 선언전에 append 안되는 문제와 목록없음 표시 처리 문제 보강 / body > onscrollend 함수 지원 - tom",
- "2013-09-29 오전 12:41:29 colGroup width:'*' 옵션추가 / colHeadAlign 우선순위 조정 - tom",
- "2013-09-30 오전 1:40:22 colMap 함수정리 - tom",
- "2013-10-18 오전 8:30:50 dblclick 이벤트 개선 / click(index) 메서드 추가 - tom",
- "2013-10-23 오후 2:48:24 formatter radio 지원 - tom",
- "2013-10-24 오후 10:01:27 colGroup formatter - displayLabel:true 옵션추가 - tom",
- "2013-10-28 오전 9:37:26 page count 버그 픽스 / $ 키워드 제거 - tom",
- "2013-11-13 오전 10:09:14 tom : fitToWidth 창 최대화 최소화 버그 픽스",
- "2013-11-18 오후 1:34:35 tom : grid owidth 버그 픽스",
- "2013-12-09 오후 4:26:45 tom : setList 후 그리드 스크롤포지션 문제 해결",
- "2013-12-11 오후 9:31:45 tom : ajax setList 그리드 스크롤포지션 문제 해결",
- "2013-12-19 오후 3:30 tom : height=auto 일 경우 scrollTop 되는 현상 해결",
- "2013-12-24 오후 2:30:25 tom : 버그픽스",
- "2013-12-27 오전 11:56:44 tom marker bugfix",
- "2013-12-30 오후 11:00:00 tom : colGroup sort:false 기능 추가 및 버그 픽스",
- "2014-01-01 오후 8:55:17 tom : editor validate 액션버그 픽스",
- "2014-01-03 오후 3:31:09 tom : gridBodyClick 이벤트함수 수정",
- "2014-01-10 오후 5:08:30 tom : listCountMSG 설정 기능 추가",
- "2014-02-04 오전 10:13:38 tom : setList 메소드 호출 할 때 pageNo : 1 로 변경 기능 추가",
- "2014-02-06 오후 7:59:54 tom : jQuery 독립 우회 코드 변경",
- "2014-02-12 오전 11:31:41 tom : 불필요한 node 제거, * 설정시 헤드 너비 오차 문제 해결",
- "2014-02-14 오전 11:10:45 tom : setEditor 후 selector 키컨트롤 이벤트 방지, editor 안에 onkeyup 메소드 추가",
- "2014-02-14 오후 12:42:32 tom : appendList메소드 index를 지정 하지 않으면 맨 마지막으로 추가 되도록 변경",
- "2014-02-25 오전 11:24:29 tom : formatter 함수 this에 .value, .key 속성 추가",
- "2014-03-05 오후 12:17:26 tom : editor.response 에서 validate 후 editor 사라지도록 기능 변경, editorForm Item 중복되지 않도록 수정",
- "2014-03-05 오후 5:13:45 tom : 열 리사이즈했을 때 스크롤 위치 버그픽스",
- "2014-03-06 오후 8:22:00 tom : 열 리사이즈 후 컬럼 숨기기 표시 하시 액션 너비 변경 버그픽스",
- "2014-03-12 오후 3:04:11 root : 그리드 헤드 체크 박스 클릭시 disable 된 row 는 체크 하지않도록 변경",
- "2014-03-20 오전 11:16:51 tom : printList 실행 할 때 editor 활성화 되었으면 에디터 비 활성화",
- "2014-03-28 오전 8:18:54 tom : click 메소드 호출시 callBack 버그 픽스",
- "2014-03-31 오전 2:07:24 tom : init 에서 printList 호출 제거 / body.marker.addClass 속성 추가",
- "2014-03-31 오후 4:14:34 tom : scroll 영역 조정 ",
- "2014-04-01 오후 7:10:34 tom : .each for 로 변경/ changeGridView 메소드 추가",
- "2014-04-20 tom : listLoadingDisplay 실행할 때 가능하면 스크롤바의 위치를 맨위로 이동 시키기",
- "2014-04-22 tom : setList 호출시 onError 속성 추가",
- "2014-04-25 tom : setData 메소드 추가",
- "2014-04-28 tom : mobile 에서 터치무브 버그 픽스",
- "2014-04-28 tom : config.emptyListMSG 에서 설정가능",
- "2014-04-29 tom : AXConfig.AXGrid.pageCountMsg 설정기능 추가"
-
- * @description
- *
- ```js
- var myGrid = new AXGrid();
- myGrid.setConfig(classConfig:JSObject);
- ```
- *
- */
-
- var AXGrid;
- AXGrid = Class.create(AXJ, {
- initialize: function (AXJ_super) {
- AXJ_super();
- this.Observer = null;
- this.list = [];
- this.removedList = [];
- this.pageActive = false;
- this.page = { pageNo: 0, pageSize: 100, pageCount: "", listCount: 0 };
-
- this.moveSens = 0;
- this.config.viewMode = "grid"; // icon, mobile
- this.config.moveSens = 1;
- this.config.formPaddingRight = "11px";
- this.config.sort = true;
- this.config.xscroll = true;
- this.config.fitToWidth = (AXConfig.AXGrid.fitToWidth || false);
- this.config.fitToWidthRightMargin = (AXConfig.AXGrid.fitToWidthRightMargin || 10);
- this.config.passiveMode = AXConfig.AXGrid.passiveMode;
- this.config.passiveRemoveHide = AXConfig.AXGrid.passiveRemoveHide;
-
- this.selectedCells = [];
- this.selectedRow = [];
-
- var browser = AXUtil.browser;
- this.isMobile = browser.mobile;
- },
- /* 공통 영역 */
- defineConfig: function (rewrite) {
- var cfg = this.config;
- if (cfg.colGroup.length == 0) {
- trace("colGrpup is empty)");
- return;
- }
-
- /* col너비 합계 구하기 */
- var colWidth = 0;
- var hasHiddenCell = false;
- var showColLen = 0;
- if (!rewrite) this.fixedColSeq = cfg.fixedColSeq;
- var bodyWidth = this.body.width();
- var astricCount = 0;
-
- for (var CG, cidx = 0, __arr = cfg.colGroup; (cidx < __arr.length && (CG = __arr[cidx])); cidx++) {
- if (CG.colSeq == undefined) CG.colSeq = cidx;
- if (CG.display == undefined) CG.display = true;
- if (CG.display) {
- if (!rewrite) {
- if (CG.width == "*") {
- CG.width = 0;
- CG.widthAstric = true;
- astricCount++;
- }
- CG._owidth = CG.width;
- /* 최초의 너비값 기억 하기 */
- } else {
- if (CG.widthAstric) {
- CG.width = 0;
- CG._owidth = CG.width;
- astricCount++;
- }
- }
-
- colWidth += (CG._owidth || 0).number();
- showColLen += 1;
- } else {
- hasHiddenCell = true;
- }
- }
-
- if (!cfg.fitToWidth) {
- /* width * 예외처리 구문 ------------ s */
- if ((bodyWidth - cfg.fitToWidthRightMargin) > (colWidth + 100 * astricCount)) {
- var remainsWidth = (bodyWidth - cfg.fitToWidthRightMargin) - colWidth;
- for (var CG, cidx = 0, __arr = cfg.colGroup; (cidx < __arr.length && (CG = __arr[cidx])); cidx++) {
- if (CG.display && CG.widthAstric) {
- CG._owidth = (remainsWidth / astricCount).ceil();
- CG.width = CG._owidth;
- colWidth += (CG._owidth || 0).number();
- }
- }
- } else {
- for (var CG, cidx = 0, __arr = cfg.colGroup; (cidx < __arr.length && (CG = __arr[cidx])); cidx++) {
- if (CG.display && CG.widthAstric) {
- CG._owidth = 100;
- CG.width = 100;
- colWidth += (CG._owidth || 0).number();
- }
- }
- }
- /* width * 예외처리 구문 ------------ e */
- } else {
- for (var CG, cidx = 0, __arr = cfg.colGroup; (cidx < __arr.length && (CG = __arr[cidx])); cidx++) {
- if (CG.display && CG.widthAstric) {
- CG.width = 100;
- CG._owidth = 100;
- colWidth += (CG._owidth || 0).number();
- }
- }
- }
- this.colWidth = colWidth;
-
- if (cfg.fitToWidth) { /*너비 자동 맞춤버전의 경우 */
- if (bodyWidth > this.colWidth) {
- var _bodyWidth = bodyWidth - cfg.fitToWidthRightMargin;
- var zoomRatio = bodyWidth / this.colWidth;
- colWidth = 0;
- for (var CG, cidx = 0, __arr = cfg.colGroup; (cidx < __arr.length && (CG = __arr[cidx])); cidx++) {
- CG.width = (CG._owidth * zoomRatio).ceil();
- if (_bodyWidth > CG.width) _bodyWidth -= CG.width;
- else CG.width = _bodyWidth;
- if (CG.display) colWidth += CG.width.number();
- }
- this.colWidth = colWidth;
- } else {
- colWidth = 0;
- for (var CG, cidx = 0, __arr = cfg.colGroup; (cidx < __arr.length && (CG = __arr[cidx])); cidx++) {
- if (CG._owidth == undefined) CG._owidth = (CG.width || 0).number();
- CG.width = CG._owidth.number();
- if (CG.display) colWidth += CG.width.number();
- }
- this.colWidth = colWidth;
- }
- }
-
- this.showColLen = showColLen;
- /* col너비 합계 구하기 ~~~~~~~~~~~~~~ 구해진 너비합은 그리드 head, body 의 너비로 지정됨. */
-
- if (!cfg.colHead) cfg.colHead = {};
- if (!cfg.body) cfg.body = {};
- if (!cfg.page) cfg.page = { display: false, paging: false, status: { formatter: null } };
- if (cfg.colHead.rowsEmpty) cfg.colHead.rows = undefined;
- if (cfg.body.rowsEmpty) cfg.body.rows = undefined;
-
- /* colHead rows ----------------------------------------------------------------------------------------------------- */
- if (cfg.colHead.rows) {
- /* colHeadRow 정해진 경우 */
- cfg.colHead._maps = new Array(cfg.colHead.rows.length);
- var colMaxLen = 0;
- for (var r = 0; r < cfg.colHead.rows.length; r++) {
- var colLen = 0;
- for (var CH, CHidx = 0, __arr = cfg.colHead.rows[r]; (CHidx < __arr.length && (CH = __arr[CHidx])); CHidx++) {
- if (CH.rowspan == undefined || CH.rowspan == null) CH.rowspan = 1;
- if (CH.colspan == undefined || CH.colspan == null) {
- CH.colspan = 1;
- CH._colspan = 1;
- } else {
- if (!rewrite) {
- CH._colspan = CH.colspan;
- } else {
- CH.colspan = CH._colspan;
- }
- }
- if (CH.valign == undefined || CH.valign == null) CH.valign = "bottom";
- if (cfg.colHeadAlign) CH.align = "center";
- colLen += CH.colspan.number();
- }
- if (colMaxLen < colLen) colMaxLen = colLen;
- }
- for (var _m = 0; _m < cfg.colHead._maps.length; _m++) {
- cfg.colHead._maps[_m] = new Array(colMaxLen);
- }
- /* colEndPosition 관련 처리 함수 */
- var appendPosToColHeadMap = function (r, c, posR, position) {
- var nC = position.c;
- /*시작 컬럼 위치 */
- var startPosition = null;
- for (var rr = posR; rr < (posR + r); rr++) {
- if (r > 1) if (rr > 0 && startPosition != null) nC = startPosition;
- var tC = c;
- /*컬럼 루프횟수 */
- var isWhile = true;
- /* 루프유지변수 */
- while (isWhile) {
- try {
- if (tC == 0) {
- isWhile = false;
- } else {
- if (cfg.colHead._maps[rr][nC] == undefined) {
- cfg.colHead._maps[rr][nC] = position;
- if (startPosition == null) startPosition = nC;
- tC--;
- } else {
- nC++;
- }
- }
- } catch (e) {
- isWhile = false;
- }
- }
- }
- return startPosition;
- };
- for (var r = 0; r < cfg.colHead.rows.length; r++) {
- //var startPosition = null;
- //var isMultiRow = false;
- for (var CH, CHidx = 0, __arr = cfg.colHead.rows[r]; (CHidx < __arr.length && (CH = __arr[CHidx])); CHidx++) {
- if (CH.colSeq != undefined) {
- var myCG = cfg.colGroup.getToSeq(CH.colSeq);
- } else {
- var myCG = cfg.colGroup.searchObject(function () {
- return CH.key == this.item.key;
- }).first();
- }
- if (myCG != null) {
- if (rewrite) AXUtil.overwriteObject(CH, myCG, true);
- else AXUtil.overwriteObject(CH, myCG, false);
- } else {
- AXUtil.overwriteObject(CH, { align: "left", valign: "bottom", display: true, rowspan: 1, colspan: 1 }, false);
- }
- appendPosToColHeadMap(CH.rowspan, CH.colspan, r, { r: r, c: CHidx });
- }
- }
- /*colHead._maps 마지막 줄에 해당하는 cfg.colHead.rows 에 속성부여 */
- for (var m, midx = 0, __arr = cfg.colHead._maps.last(); (midx < __arr.length && (m = __arr[midx])); midx++) {
- if (m) cfg.colHead.rows[m.r][m.c].isLastCell = true;
- }
-
- if (hasHiddenCell) { /* colGroup 중에 숨겨진 col 이 존재하는 경우 */
- /* colspan 감소 시키기 */
- for (var CG, cidx = 0, __arr = cfg.colGroup; (cidx < __arr.length && (CG = __arr[cidx])); cidx++) {
- if (!CG.display) {
- var rowPosition = null;
- for (var a = 0; a < cfg.colHead._maps.length; a++) {
- if (rowPosition != cfg.colHead._maps[a][cidx]) {
- rowPosition = cfg.colHead._maps[a][cidx];
- cfg.colHead.rows[rowPosition.r][rowPosition.c].colspan--;
- }
- }
- }
- }
- }
- /*trace(cfg.colHead._maps); //_maps check */
-
- /* colHeadRow 정해진 경우 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- } else {
- /* colHeadRow 정해지지 않은 경우 */
-
- cfg.colHead._maps = [
- []
- ];
- var colHeadRows = [
- []
- ];
- for (var CG, cidx = 0, __arr = cfg.colGroup; (cidx < __arr.length && (CG = __arr[cidx])); cidx++) {
- var adder = {
- key: CG.key,
- colSeq: CG.colSeq,
- label: CG.label,
- align: (cfg.colHeadAlign || CG.align || "left"),
- rowspan: 1, colspan: 1,
- valign: "bottom", isLastCell: true, display: CG.display, formatter: CG.formatter, checked: CG.checked, disabled: CG.disabled,
- sort: CG.sort,
- tooltip: CG.tooltip,
- displayLabel: (CG.displayLabel || false)
- };
- colHeadRows[0].push(adder);
- cfg.colHead._maps[0].push({ r: 0, c: cidx });
- }
- cfg.colHead.rows = colHeadRows;
- cfg.colHead.rowsEmpty = true;
- /* colHeadRow 정해지지 않은 경우 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- }
- /* colHead rows ----------------------------------------------------------------------------------------------------- */
-
- /* body rows ------------------------------------------------------------------------------------------------------- */
- if (cfg.body.rows) {
- /* bodyRow 정해진 경우 */
- cfg.body._maps = new Array(cfg.body.rows.length);
- var colMaxLen = 0;
- for (var r = 0; r < cfg.body.rows.length; r++) {
- var colLen = 0;
- for (var CH, CHidx = 0, __arr = cfg.body.rows[r]; (CHidx < __arr.length && (CH = __arr[CHidx])); CHidx++) {
- if (CH.colspan == undefined || CH.colspan == null) {
- CH.colspan = 1;
- CH._colspan = 1;
- } else {
- if (!rewrite) CH._colspan = CH.colspan;
- else CH.colspan = CH._colspan;
- }
- if (CH.rowspan == undefined || CH.rowspan == null) CH.rowspan = 1;
- if (CH.valign == undefined || CH.valign == null) CH.valign = "middle";
- /* if(CH.align == undefined || CH.align == null) CH.align = "left"; */
- colLen += CH.colspan.number();
- }
- if (colMaxLen < colLen) colMaxLen = colLen;
- }
- for (var _m = 0; _m < cfg.body._maps.length; _m++) {
- cfg.body._maps[_m] = new Array(colMaxLen);
- }
- /* colEndPosition 관련 처리 함수 */
- var appendPosToBodyMap = function (r, c, posR, position) {
- var nC = position.c;
- /*시작 컬럼 위치 */
- var startPosition = null;
- for (var rr = posR; rr < (posR + r); rr++) {
- if (r > 1) if (rr > 0 && startPosition != null) nC = startPosition;
- var tC = c;
- /*컬럼 루프횟수 */
- var isWhile = true;
- /* 루프유지변수 */
- while (isWhile) {
- try {
- if (tC == 0) {
- isWhile = false;
- } else {
- if (cfg.body._maps[rr][nC] == undefined) {
- cfg.body._maps[rr][nC] = position;
- if (startPosition == null) startPosition = nC;
- tC--;
- } else {
- nC++;
- }
- }
- } catch (e) {
- isWhile = false;
- }
- }
- }
- };
- for (var r = 0; r < cfg.body.rows.length; r++) {
- for (var CH, CHidx = 0, __arr = cfg.body.rows[r]; (CHidx < __arr.length && (CH = __arr[CHidx])); CHidx++) {
- if (CH.colSeq != undefined) {
- var myCG = cfg.colGroup.getToSeq(CH.colSeq);
- } else {
- var myCG = cfg.colGroup.searchObject(function () {
- return this.item.key == CH.key;
- }).first();
- }
-
- if (myCG != null) {
- AXUtil.overwriteObject(CH, myCG, false);
- } else {
- AXUtil.overwriteObject(CH, { align: "left", valign: "bottom", display: true, rowspan: 1, colspan: 1 }, false);
- }
- appendPosToBodyMap(CH.rowspan, CH.colspan, r, { r: r, c: CHidx });
- }
- }
- /*body._maps 마지막 줄에 해당하는 cfg.body.rows 에 속성부여 */
- for (var m, midx = 0, __arr = cfg.body._maps.last(); (midx < __arr.length && (m = __arr[midx])); midx++) {
- if (m) cfg.body.rows[m.r][m.c].isLastCell = true;
- }
-
- if (hasHiddenCell) { /* colGroup 중에 숨겨진 col 이 존재하는 경우 */
- /* colspan 감소 시키기 */
- for (var CG, cidx = 0, __arr = cfg.colGroup; (cidx < __arr.length && (CG = __arr[cidx])); cidx++) {
- if (!CG.display) {
- for (var a = 0; a < cfg.body._maps.length; a++) {
- var rowPosition = cfg.body._maps[a][cidx];
- cfg.body.rows[rowPosition.r][rowPosition.c].colspan--;
- }
- }
- }
- }
-
- /* bodyRow 정해진 경우 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- } else {
- /* bodyRow 정해지지 않은 경우 */
- cfg.body._maps = [
- []
- ];
- var bodyRows = [
- []
- ];
- for (var CG, cidx = 0, __arr = cfg.colGroup; (cidx < __arr.length && (CG = __arr[cidx])); cidx++) {
- var adder = {
- key: CG.key, colSeq: CG.colSeq, label: CG.label, align: (CG.align || "left"), rowspan: 1, colspan: 1, valign: "middle", isLastCell: true,
- display: CG.display, checked: CG.checked, disabled: CG.disabled, formatter: CG.formatter,
- tooltip: CG.tooltip
- };
- bodyRows[0].push(adder);
- cfg.body._maps[0].push({ r: 0, c: cidx });
- }
- cfg.body.rows = bodyRows;
- cfg.body.rowsEmpty = true;
- /* bodyRow 정해지지 않은 경우 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- }
- /* body rows ------------------------------------------------------------------------------------------------------- */
-
- /*marker 관련 데이터 정리 */
- if (cfg.body.marker) {
- if (cfg.body.marker.rows) {
- this.bodyHasMarker = true;
- cfg.body.marker._maps = new Array(cfg.body.marker.rows.length);
- colMaxLen = 0;
- for (var r = 0; r < cfg.body.marker.rows.length; r++) {
- var colLen = 0;
- for (var CH, CHidx = 0, __arr = cfg.body.marker.rows[r]; (CHidx < __arr.length && (CH = __arr[CHidx])); CHidx++) {
- if (CH.rowspan == undefined || CH.rowspan == null) CH.rowspan = 1;
- if (CH.colspan == undefined || CH.colspan == null) {
- CH.colspan = 1;
- CH._colspan = 1;
- } else {
- if (!rewrite) CH._colspan = CH.colspan;
- else CH.colspan = CH._colspan;
- }
- if (CH.valign == undefined || CH.valign == null) CH.valign = "bottom";
- colLen += CH.colspan.number();
- }
- if (colMaxLen < colLen) colMaxLen = colLen;
- }
- for (var _m = 0; _m < cfg.body.marker._maps.length; _m++) {
- cfg.body.marker._maps[_m] = new Array(colMaxLen);
- }
- /* colEndPosition 관련 처리 함수 */
- var appendPosToMarkerMap = function (r, c, posR, position) {
- var nC = position.c;
- /*시작 컬럼 위치 */
- var startPosition = null;
- for (var rr = posR; rr < (posR + r); rr++) {
- if (r > 1) if (rr > 0 && startPosition != null) nC = startPosition;
- var tC = c;
- /*컬럼 루프횟수 */
- var isWhile = true;
- /* 루프유지변수 */
- while (isWhile) {
- try {
- if (tC == 0) {
- isWhile = false;
- } else {
- if (cfg.body.marker._maps[rr][nC] == undefined) {
- cfg.body.marker._maps[rr][nC] = position;
- if (startPosition == null) startPosition = nC;
- tC--;
- } else {
- nC++;
- }
- }
- } catch (e) {
- isWhile = false;
- }
- }
- }
- };
- for (var r = 0; r < cfg.body.marker.rows.length; r++) {
- for (var CH, CHidx = 0, __arr = cfg.body.marker.rows[r]; (CHidx < __arr.length && (CH = __arr[CHidx])); CHidx++) {
- if (CH.colSeq != undefined) {
- var myCG = cfg.colGroup.getToSeq(CH.colSeq);
- } else {
- var myCG = cfg.colGroup.searchObject(function () {
- return this.item.key == CH.key;
- }).first();
- }
-
- if (myCG != null) {
- AXUtil.overwriteObject(CH, myCG, false);
- } else {
- AXUtil.overwriteObject(CH, { align: "left", valign: "bottom", display: true, rowspan: 1, colspan: 1 }, false);
- }
- appendPosToMarkerMap(CH.rowspan, CH.colspan, r, { r: r, c: CHidx });
- }
-
- }
- /*colHead._maps 마지막 줄에 해당하는 cfg.colHead.rows 에 속성부여 */
- for (var m, midx = 0, __arr = cfg.body.marker._maps.last(); (midx < __arr.length && (m = __arr[midx])); midx++) {
- if (m) cfg.body.marker.rows[m.r][m.c].isLastCell = true;
- }
-
-
- if (hasHiddenCell) { /* colGroup 중에 숨겨진 col 이 존재하는 경우 */
- /* colspan 감소 시키기 */
- for (var CG, cidx = 0, __arr = cfg.colGroup; (cidx < __arr.length && (CG = __arr[cidx])); cidx++) {
- if (!CG.display) {
- for (var a = 0; a < cfg.body.marker._maps.length; a++) {
- var rowPosition = cfg.body.marker._maps[a][cidx];
- cfg.body.marker.rows[rowPosition.r][rowPosition.c].colspan--;
- }
- }
- }
-
- }
- }
- }
- /*marker 관련 데이터 정리 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
-
-
- /*head 관련 데이터 정리 */
- if (cfg.head) {
- cfg.head._maps = new Array(cfg.head.rows.length);
- colMaxLen = 0;
- for (var r = 0; r < cfg.head.rows.length; r++) {
- var colLen = 0;
- for (var CH, CHidx = 0, __arr = cfg.head.rows[r]; (CHidx < __arr.length && (CH = __arr[CHidx])); CHidx++) {
- if (CH.rowspan == undefined || CH.rowspan == null) CH.rowspan = 1;
- if (CH.colspan == undefined || CH.colspan == null) {
- CH.colspan = 1;
- CH._colspan = 1;
- } else {
- if (!rewrite) CH._colspan = CH.colspan;
- else CH.colspan = CH._colspan;
- }
- if (CH.valign == undefined || CH.valign == null) CH.valign = "bottom";
- /*if(CH.align == undefined || CH.align == null) CH.align = "left"; */
- colLen += CH.colspan.number();
- }
-
- if (colMaxLen < colLen) colMaxLen = colLen;
- }
- for (var _m = 0; _m < cfg.head._maps.length; _m++) {
- cfg.head._maps[_m] = new Array(colMaxLen);
- }
- /* colEndPosition 관련 처리 함수 */
- var appendPosToHeadMap = function (r, c, posR, position) {
- var nC = position.c;
- /*시작 컬럼 위치 */
- var startPosition = null;
- for (var rr = posR; rr < (posR + r); rr++) {
- if (r > 1) if (rr > 0 && startPosition != null) nC = startPosition;
- var tC = c;
- /*컬럼 루프횟수 */
- var isWhile = true;
- /* 루프유지변수 */
- while (isWhile) {
- try {
- if (tC == 0) {
- isWhile = false;
- } else {
- if (cfg.head._maps[rr][nC] == undefined) {
- cfg.head._maps[rr][nC] = position;
- if (startPosition == null) startPosition = nC;
- tC--;
- } else {
- nC++;
- }
- }
- } catch (e) {
- isWhile = false;
- }
- }
- }
- };
- for (var r = 0; r < cfg.head.rows.length; r++) {
- for (var CH, CHidx = 0, __arr = cfg.head.rows[r]; (CHidx < __arr.length && (CH = __arr[CHidx])); CHidx++) {
- if (CH.colSeq != undefined) {
- var myCG = cfg.colGroup.getToSeq(CH.colSeq);
- } else {
- var myCG = cfg.colGroup.searchObject(function () {
- return this.item.key == CH.key;
- }).first();
- }
-
- if (myCG != null) {
- AXUtil.overwriteObject(CH, myCG, false);
- } else {
- AXUtil.overwriteObject(CH, { align: "left", valign: "bottom", display: true, rowspan: 1, colspan: 1 }, false);
- }
- appendPosToHeadMap(CH.rowspan, CH.colspan, r, { r: r, c: CHidx });
- }
-
- }
-
- /*colHead._maps 마지막 줄에 해당하는 cfg.colHead.rows 에 속성부여 */
- for (var m, midx = 0, __arr = cfg.head._maps.last(); (midx < __arr.length && (m = __arr[midx])); midx++) {
- if (m) cfg.head.rows[m.r][m.c].isLastCell = true;
- }
-
-
- if (hasHiddenCell) { /* colGroup 중에 숨겨진 col 이 존재하는 경우 */
- /* colspan 감소 시키기 */
- for (var CG, cidx = 0, __arr = cfg.colGroup; (cidx < __arr.length && (CG = __arr[cidx])); cidx++) {
- if (!CG.display) {
- for (var a = 0; a < cfg.head._maps.length; a++) {
- var rowPosition = cfg.head._maps[a][cidx];
- cfg.head.rows[rowPosition.r][rowPosition.c].colspan--;
- }
- }
- }
- }
- }
- /*head 관련 데이터 정리 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
-
- /*foot 관련 데이터 정리 */
- if (cfg.foot) {
- cfg.foot._maps = new Array(cfg.foot.rows.length);
- colMaxLen = 0;
- for (var r = 0; r < cfg.foot.rows.length; r++) {
- var colLen = 0;
- for (var CH, CHidx = 0, __arr = cfg.foot.rows[r]; (CHidx < __arr.length && (CH = __arr[CHidx])); CHidx++) {
- if (CH.rowspan == undefined || CH.rowspan == null) CH.rowspan = 1;
- if (CH.colspan == undefined || CH.colspan == null) {
- CH.colspan = 1;
- CH._colspan = 1;
- } else {
- if (!rewrite) CH._colspan = CH.colspan;
- else CH.colspan = CH._colspan;
- }
- if (CH.valign == undefined || CH.valign == null) CH.valign = "bottom";
- colLen += CH.colspan.number();
- }
-
- if (colMaxLen < colLen) colMaxLen = colLen;
- }
- for (var _m = 0; _m < cfg.foot._maps.length; _m++) {
- cfg.foot._maps[_m] = new Array(colMaxLen);
- }
- /* colEndPosition 관련 처리 함수 */
- var appendPosToFootMap = function (r, c, posR, position) {
- var nC = position.c;
- /*시작 컬럼 위치 */
- var startPosition = null;
- for (var rr = posR; rr < (posR + r); rr++) {
- if (r > 1) if (rr > 0 && startPosition != null) nC = startPosition;
- var tC = c;
- var isWhile = true;
- while (isWhile) {
- try {
- if (tC == 0) {
- isWhile = false;
- } else {
- if (cfg.foot._maps[rr][nC] == undefined) {
- cfg.foot._maps[rr][nC] = position;
- if (startPosition == null) startPosition = nC;
- tC--;
- } else {
- nC++;
- }
- }
- } catch (e) {
- isWhile = false;
- }
- }
- }
- };
- for (var r = 0; r < cfg.foot.rows.length; r++) {
- for (var CH, CHidx = 0, __arr = cfg.foot.rows[r]; (CHidx < __arr.length && (CH = __arr[CHidx])); CHidx++) {
- if (CH.colSeq != undefined) {
- var myCG = cfg.colGroup.getToSeq(CH.colSeq);
- } else {
- var myCG = cfg.colGroup.searchObject(function () {
- return this.item.key == CH.key;
- }).first();
- }
-
- if (myCG != null) {
- AXUtil.overwriteObject(CH, myCG, false);
- } else {
- AXUtil.overwriteObject(CH, { align: "left", valign: "bottom", display: true, rowspan: 1, colspan: 1 }, false);
- }
- appendPosToFootMap(CH.rowspan, CH.colspan, r, { r: r, c: CHidx });
- }
-
- }
- /*colHead._maps 마지막 줄에 해당하는 cfg.colHead.rows 에 속성부여 */
- for (var m, midx = 0, __arr = cfg.foot._maps.last(); (midx < __arr.length && (m = __arr[midx])); midx++) {
- if (m) cfg.foot.rows[m.r][m.c].isLastCell = true;
- }
-
-
- if (hasHiddenCell) { /* colGroup 중에 숨겨진 col 이 존재하는 경우 */
- for (var CG, cidx = 0, __arr = cfg.colGroup; (cidx < __arr.length && (CG = __arr[cidx])); cidx++) {
- if (!CG.display) {
- for (var a = 0; a < cfg.foot._maps.length; a++) {
- var rowPosition = cfg.foot._maps[a][cidx];
- cfg.foot.rows[rowPosition.r][rowPosition.c].colspan--;
- }
- }
- }
-
- }
- }
- /*foot 관련 데이터 정리 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
-
- /*editor 관련 데이터 정리 */
- if (cfg.editor) {
- if (cfg.editor.rows) {
- this.hasEditor = true;
- cfg.editor._maps = new Array(cfg.editor.rows.length);
- colMaxLen = 0;
- for (var r = 0; r < cfg.editor.rows.length; r++) {
- var colLen = 0;
- for (var CH, CHidx = 0, __arr = cfg.editor.rows[r]; (CHidx < __arr.length && (CH = __arr[CHidx])); CHidx++) {
- if (CH) {
- if (CH.rowspan == undefined || CH.rowspan == null) CH.rowspan = 1;
- if (CH.colspan == undefined || CH.colspan == null) {
- CH.colspan = 1;
- CH._colspan = 1;
- } else {
- if (!rewrite) CH._colspan = CH.colspan;
- else CH.colspan = CH._colspan;
- }
- if (CH.valign == undefined || CH.valign == null) CH.valign = "bottom";
- colLen += CH.colspan.number();
- }
- }
-
- if (colMaxLen < colLen) colMaxLen = colLen;
- }
- for (var _m = 0; _m < cfg.editor._maps.length; _m++) {
- cfg.editor._maps[_m] = new Array(colMaxLen);
- }
- /* colEndPosition 관련 처리 함수 */
- var appendPosToEditorMap = function (r, c, posR, position) {
- var nC = position.c;
- var startPosition = null;
- for (var rr = posR; rr < (posR + r); rr++) {
- var tC = c;
- var isWhile = true;
- while (isWhile) {
- try {
- if (tC == 0) {
- isWhile = false;
- } else {
- if (cfg.editor._maps[rr][nC] == undefined) {
- cfg.editor._maps[rr][nC] = position;
- if (startPosition == null) startPosition = nC;
- tC--;
- } else {
- nC++;
- }
- }
- } catch (e) {
- isWhile = false;
- }
- }
- }
- };
- for (var r = 0; r < cfg.editor.rows.length; r++) {
- for (var CH, CHidx = 0, __arr = cfg.editor.rows[r]; (CHidx < __arr.length && (CH = __arr[CHidx])); CHidx++) {
- if (CH) {
- if (CH.colSeq != undefined) {
- var myCG = cfg.colGroup.getToSeq(CH.colSeq);
- } else {
- var myCG = cfg.colGroup.searchObject(function () {
- return this.item.key == CH.key;
- }).first();
- }
- if (myCG != null) {
- AXUtil.overwriteObject(CH, myCG, false);
- } else {
- AXUtil.overwriteObject(CH, { align: "left", valign: "bottom", display: true, rowspan: 1, colspan: 1 }, false);
- }
- appendPosToEditorMap(CH.rowspan, CH.colspan, r, { r: r, c: CHidx });
- }
- }
-
- }
-
- for (var m, midx = 0, __arr = cfg.editor._maps.last(); (midx < __arr.length && (m = __arr[midx])); midx++) {
- if (m) cfg.editor.rows[m.r][m.c].isLastCell = true;
- }
-
-
- if (hasHiddenCell) {
- for (var CG, cidx = 0, __arr = cfg.colGroup; (cidx < __arr.length && (CG = __arr[cidx])); cidx++) {
- if (!CG.display) {
- for (var a = 0; a < cfg.editor._maps.length; a++) {
- var rowPosition = cfg.editor._maps[a][cidx];
- cfg.editor.rows[rowPosition.r][rowPosition.c].colspan--;
- }
- }
- }
-
- }
- }
- }
-
- /*editor 관련 데이터 정리 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
-
- /*fixedColSeq가 설정된 경우 */
- if (cfg.fixedColSeq != undefined && cfg.fixedColSeq != null) {
-
- var fixedColSeq = this.fixedColSeq;
-
- for (var m, midx = 0, __arr = cfg.colHead._maps; (midx < __arr.length && (m = __arr[midx])); midx++) {
- for (var c, cidx = 0, __arr2 = m; (cidx < __arr2.length && (c = __arr2[cidx])); cidx++) {
- if (c) {
- if ((fixedColSeq + 1) > cidx) cfg.colHead.rows[c.r][c.c].isFixedCell = true;
- }
- }
-
- }
-
-
- for (var m, midx = 0, __arr = cfg.body._maps; (midx < __arr.length && (m = __arr[midx])); midx++) {
- for (var c, cidx = 0, __arr2 = m; (cidx < __arr2.length && (c = __arr2[cidx])); cidx++) {
- if (c) {
- if (fixedColSeq == cidx) cfg.body.rows[c.r][c.c].isFixedEndCell = true;
- if ((fixedColSeq + 1) > cidx) cfg.body.rows[c.r][c.c].isFixedCell = true;
- }
- }
-
- }
-
- if (cfg.head) {
- for (var m, midx = 0, __arr = cfg.head._maps; (midx < __arr.length && (m = __arr[midx])); midx++) {
- for (var c, cidx = 0, __arr2 = m; (cidx < __arr2.length && (c = __arr2[cidx])); cidx++) {
- if (c) {
- if (fixedColSeq == cidx) cfg.head.rows[c.r][c.c].isFixedEndCell = true;
- if ((fixedColSeq + 1) > cidx) cfg.head.rows[c.r][c.c].isFixedCell = true;
- }
- }
-
- }
-
- }
- if (cfg.foot) {
- for (var m, midx = 0, __arr = cfg.foot._maps; (midx < __arr.length && (m = __arr[midx])); midx++) {
- for (var c, cidx = 0, __arr2 = m; (cidx < __arr2.length && (c = __arr2[cidx])); cidx++) {
- if (c) {
- if (fixedColSeq == cidx) cfg.foot.rows[c.r][c.c].isFixedEndCell = true;
- if ((fixedColSeq + 1) > cidx) cfg.foot.rows[c.r][c.c].isFixedCell = true;
- }
- }
-
- }
-
- }
-
- if (cfg.body.marker) {
- if (cfg.body.marker.rows) {
- for (var m, midx = 0, __arr = cfg.body.marker._maps; (midx < __arr.length && (m = __arr[midx])); midx++) {
- for (var c, cidx = 0, __arr2 = m; (cidx < __arr2.length && (c = __arr2[cidx])); cidx++) {
- if (c) {
- if (fixedColSeq == cidx) cfg.body.marker.rows[c.r][c.c].isFixedEndCell = true;
- if ((fixedColSeq + 1) > cidx) cfg.body.marker.rows[c.r][c.c].isFixedCell = true;
- }
- }
-
- }
-
- }
- }
-
- if (cfg.editor) {
- if (cfg.editor.rows) {
- for (var m, midx = 0, __arr = cfg.editor._maps; (midx < __arr.length && (m = __arr[midx])); midx++) {
- for (var c, cidx = 0, __arr2 = m; (cidx < __arr2.length && (c = __arr2[cidx])); cidx++) {
- if (c) {
- if (fixedColSeq == cidx) cfg.editor.rows[c.r][c.c].isFixedEndCell = true;
- if ((fixedColSeq + 1) > cidx) cfg.editor.rows[c.r][c.c].isFixedCell = true;
- }
- }
-
- }
-
- }
- }
- this.hasFixed = true;
- if (hasHiddenCell) {
- var minusFixedCol = 0;
- var fixedColSeq = this.fixedColSeq;
- for (var CG, cidx = 0, __arr = cfg.colGroup; (cidx < __arr.length && (CG = __arr[cidx])); cidx++) {
- if (!CG.display) {
- if ((fixedColSeq + 1) > cidx) minusFixedCol++;
- }
- }
-
- cfg.fixedColSeq = this.fixedColSeq - minusFixedCol;
- } else {
- cfg.fixedColSeq = this.fixedColSeq;
- }
-
- if (cfg.fixedColSeq == -1) {
- /*fixed 제거*/
- this.hasFixed = false;
- }
-
- var fixedColSeq = this.fixedColSeq, fixedColWidth = 0;
- for (var CG, cidx = 0, __arr = cfg.colGroup; (cidx < __arr.length && (CG = __arr[cidx])); cidx++) {
- if (CG.display && cidx < (fixedColSeq + 1)) {
- fixedColWidth += CG.width.number();
- }
- }
-
- this.fixedColWidth = fixedColWidth;
- }
- },
- init: function () {
- var cfg = this.config;
-
- if (Object.isUndefined(cfg.targetID)) {
- trace("need targetID - setConfig({targetID:''})");
- return;
- }
- if (!cfg.colGroup) {
- trace("need colGroup - setConfig({colGroup:[]})");
- return;
- }
-
- cfg.emptyListMSG = cfg.emptyListMSG || AXConfig.AXGrid.emptyListMSG;
- cfg.listCountMSG = cfg.listCountMSG || AXConfig.AXGrid.listCountMSG || "전체 <b>{listCount}</b>개의 목록이 있습니다.";
- cfg.pageCountMSG = cfg.pageCountMSG || AXConfig.AXGrid.pageCountMSG;
-
- /*
- cfg.viewMode 결정 구간.
- */
-
- if (cfg.mediaQuery) {
- var _viewMode = "", clientWidth = axf.clientWidth();
- axf.each(cfg.mediaQuery, function (k, v) {
- if (Object.isObject(v)) {
-
- if(v.min != undefined && v.max != undefined){
- if (v.min <= clientWidth && clientWidth <= v.max) {
- _viewMode = (k == "dx") ? "grid" : "mobile";
- return false;
- }
- }else{
- if (v.min <= clientWidth) {
- _viewMode = (k == "dx") ? "grid" : "mobile";
- return false;
- }
- }
- }
- });
- if (_viewMode != "") {
- cfg.viewMode = _viewMode;
- }
- }
-
-
- if (Object.isObject(cfg.colGroup)) {
- var newColGroup = cfg.colGroup.concat();
- cfg.colGroup = newColGroup;
- }
-
- this.target = axdom("#" + cfg.targetID);
-
- var targetInnerHeight = this.target.innerHeight();
- if (targetInnerHeight == 0) targetInnerHeight = (AXConfig.AXGrid.pageHeight || 400);
- this.theme = (cfg.theme) ? cfg.theme : "AXGrid";
- /* 테마기본값 지정*/
- cfg.height = (cfg.height) ? cfg.height : targetInnerHeight + "px";
- /* 그리드 높이 지정 */
-
-
- var theme = this.theme;
- var gridCss = [];
- if (cfg.width) gridCss.push("width:" + cfg.width + ";");
- if (cfg.height) gridCss.push("height:" + cfg.height + ";");
-
- /* grid 뼈대 그리기 ----------------------------------------------------------------------------------------------------- */
- var ol = [];
- ol.push("<div class=\"" + theme + "\" id=\"" + cfg.targetID + "_AX_grid\" style=\"" + gridCss.join('') + "\">");
- ol.push(" <div class=\"AXgridScrollBody\" id=\"" + cfg.targetID + "_AX_gridScrollBody\" style=\"z-index:2;\">");
- ol.push(" <div class=\"AXGridColHead AXUserSelectNone\" id=\"" + cfg.targetID + "_AX_gridColHead\" onselectstart=\"return false;\"></div>");
- ol.push(" <div class=\"AXGridToolGroup top\" id=\"" + cfg.targetID + "_AX_gridToolGroupTop\"></div>");
- ol.push(" <div class=\"AXGridBody\" id=\"" + cfg.targetID + "_AX_gridBody\"></div>");
- ol.push(" <div cla…