소스 파일 : /ex_run/navi_more.js (2020-10-22)     소스 설명 : (구현항목) Navigation 노드별 상세 보여주기
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
// (2020.10.19, 차재복, Cha Jae Bok, cjbword@gmailcom)
// more 요소, div 생성, 상세 (code:1,manual:2,run:3,comp:4) 보여주기 

// more 상세 보여주기 (이벤트처리기)
function moreShow (e) {
    // <- ex_run/navi_testing.js, reform/reform_editor.js

    // liLineSpan
    let liLineSpan = this;

    // data 추출 및 JSON parse 후 object화
    let data = JSON.parse(liLineSpan.dataset.dataObject);
        // data : reform 및 reform_more 테이블 내 해당 레코드 (parent,id,sub_seq,title,yoyak,path2node,more_ptr,...)

    // 상세 출력용 display Box
    let detailBox;
    
        detailBox = document.getElementById('detail_'+data.id);
        // 기존에 요소 펼쳐 있으면 숨김
        if (detailBox) {
            itemShowHide(detailBox, liLineSpan);      // base_utils/common_utils.js
        // 기존에 요소 없으면 새로 생성 후 출력
        } else {
        
            if(data.more_type=='1' || data.more_type=='2') {        // 1: code, 2 : manual

                // liLineSpan 직후에 table 생성
            	detailBox = document.createElement('table');
                detailBox.id = 'detail_'+data.id;
                embed_display(data, liLineSpan, detailBox);         // ex_run/embed_display.js

                insertAfter(liLineSpan, detailBox);

            } else if(data.more_type=='3') {        // 3 : run (구현보기)

                // liLineSpan 직후에 div 생성
                detailBox = run_div_create(data, liLineSpan);   // ex_run/navi_more.js
                detailBox.id = 'detail_'+data.id;

                // 정해진 함수 실행
                window[data.func](detailBox);  
                        // reform_more.func 값 => language/language_testing/keyword() => language/language.php 

            } else  if(data.more_type=='4') {        // 4 : comp

                // liLineSpan 직후에 div 생성
                detailBox = run_div_create(data, liLineSpan);   // ex_run/navi_more.js
                detailBox.id = 'detail_'+data.id;
                embed_display(data, liLineSpan, detailBox);

                insertAfter(liLineSpan, detailBox);
            }
        }

}


// 실행 결과 보여주기 위한, div 요소 생성
function run_div_create(data, afterIt) {
    // div 요소 생성
    let div = document.createElement("div");
    div.id = 'div_'+data.id;

    // div style
    div.style.border = '1px gray dotted';
    div.style.margin = '5px';
    div.style.padding = '10px';

    // div 요소를 실제 DOM 트리에 적용 (화면에 실제 보임)
    return insertAfter(afterIt, div);
}

JS 키워드 : createElement, dataset, getElementById, item, JSON.parse, window

Copyrightⓒ written by 차재복 (Cha Jae Bok)     (소액후원)

   소스 이력    소스 폴더    소스 언어