<commit_before>/**
 * @file   modules/widget/js/widget.js
 * @author zero (<EMAIL>)
 * @brief  위젯 관리용 자바스크립트
 **/

/* document.write(ln)의 경우 ajax로 처리시 가로채기 위한 함수 */
document.write = document.writeln = function(str){
	if ( str.match(/^<\//) ) return;
	if ( !window.opera ) str = str.replace(/&(?![#a-z0-9]+;)/g, "&");
    str = str.replace(/(<[a-z]+)/g, "$1 xmlns='http://www.w3.org/1999/xhtml'");
    var div = null;
    if(document.createElementNS) div = document.createElementNS("http://www.w3.org/1999/xhtml","div");
    else div = xCreateElement('div');
    xInnerHtml(div, str);
	var pos;
    pos = document.getElementsByTagName("*");
    pos = pos[pos.length - 1];
	var nodes = div.childNodes;
	while ( nodes.length ) {
		pos.parentNode.appendChild( nodes[0] );
    }
};

/* DOM 속성을 구하기 위한 몇가지 함수들.. */
// style의 값을 구하는게 IE랑 그외가 다름.
function getStyle(obj) {
    var style = obj.getAttribute("style");
    if(typeof(style)=="object") style = style["cssText"];
    return style;
}

// float: 값을 구하는게 IE랑 그외가 다름
function getFloat(obj) {
    var cssFloat = xIE4Up?obj.style.styleFloat:obj.style.cssFloat;
    if(!cssFloat) cssFloat = 'left';
    return cssFloat;
}
function setFloat(obj, fl) {
    if(xIE4Up) obj.style.styleFloat = fl;
    else obj.style.cssFloat = fl;
}

// padding값을 구하는 함수 (없을 경우 0으로 세팅), zbxe의 위젯에서만 사용
function getPadding(obj, direct) {
    var padding = obj.getAttribute("widget_padding_"+direct);
    if(!padding || padding == null) padding = 0;
    return padding;
}


/* 위젯 핸들링 시작 */
var zonePageObj = null;
var zoneModuleSrl = 0;
function doStartPageModify(zoneID, module_srl) {
    zonePageObj = xGetElementById(zoneID);
    zoneModuleSrl = module_srl;

    // 위젯 크기/여백 조절 레이어를 가장 밖으로 뺌
    var obj = xGetElementById("tmpPageSizeLayer");
    var dummy = xCreateElement("div");
    xInnerHtml(dummy, xInnerHtml(obj));
    dummy.id="pageSizeLayer";
    dummy.style.visibility = "hidden";
    dummy.style.position = "absolute";
    dummy.style.left = 0;
    dummy.style.top = 0;
    document.body.appendChild(dummy);
    obj.parentNode.removeChild(obj);


    // 모든 위젯들의 크기를 정해진 크기로 맞춤
    doFitBorderSize();

    // 드래그와 리사이즈와 관련된 이벤트 리스너 생성
    xAddEventListener(document,"click",doCheckWidget);
    xAddEventListener(document,"mousedown",doCheckWidgetDrag);
}


// 내용 모두 삭제
function removeAllWidget() {
    if(!confirm(confirm_delete_msg)) return;
    var response_tags = new Array('error','message');
    var params = new Array();
    params['module_srl'] = xGetElementById('pageFo').module_srl.value;
    exec_xml('widget',"procWidgetRemoveContents",params,function() { xInnerHtml(zonePageObj,'') });
}

/** 
 * 특정 영역에 편집된 위젯들을 약속된 태그로 변환하여 return
 **/
function getWidgetContent(obj) {
    var html = "";
    if(typeof(obj)=='undefined' || !obj) obj = zonePageObj;
    var childObj = obj.firstChild;

    while(childObj) {
        if(childObj.nodeName == "DIV" && childObj.getAttribute("widget"))  {
            var widget = childObj.getAttribute("widget");
            if(widget) {
                switch(widget) {
                    case 'widgetBox' :
                            html += getWidgetBoxCode(childObj, widget);
                        break;
                    case 'widgetContent' :
                            html += getContentWidgetCode(childObj, widget);
                        break;
                    default :
                            html += getWidgetCode(childObj, widget);
                        break;
                }
            }
        }
        childObj = childObj.nextSibling;
    }

    return html;
}

// 컨텐츠 위젯 코드 구함
function getContentWidgetCode(childObj, widget) {
    var cobj = childObj.firstChild;
    while(cobj) {
        if(cobj.nodeName == "DIV" && cobj.className == "widgetContent") {
            var document_srl = childObj.getAttribute('document_srl');
            return '<img src="./common/tpl/images/widget_bg.jpg" class="zbxe_widget_output" widget="widgetContent" style="'+getStyle(childObj)+'" document_srl="'+document_srl+'" widget_padding_left="'+getPadding(childObj,'left')+'" widget_padding_right="'+getPadding(childObj, 'right')+'" widget_padding_top="'+getPadding(childObj, 'top')+'" widget_padding_bottom="'+getPadding(childObj,'bottom')+'" />';<commit_msg>페이지 수정시 기존의 문서DB에 저장되지 않은 위젯 내용이 사라지는 문제 해결<commit_after>/**
 * @file   modules/widget/js/widget.js
 * @author zero (<EMAIL>)
 * @brief  위젯 관리용 자바스크립트
 **/

/* document.write(ln)의 경우 ajax로 처리시 가로채기 위한 함수 */
document.write = document.writeln = function(str){
	if ( str.match(/^<\//) ) return;
	if ( !window.opera ) str = str.replace(/&(?![#a-z0-9]+;)/g, "&");
    str = str.replace(/(<[a-z]+)/g, "$1 xmlns='http://www.w3.org/1999/xhtml'");
    var div = null;
    if(document.createElementNS) div = document.createElementNS("http://www.w3.org/1999/xhtml","div");
    else div = xCreateElement('div');
    xInnerHtml(div, str);
	var pos;
    pos = document.getElementsByTagName("*");
    pos = pos[pos.length - 1];
	var nodes = div.childNodes;
	while ( nodes.length ) {
		pos.parentNode.appendChild( nodes[0] );
    }
};

/* DOM 속성을 구하기 위한 몇가지 함수들.. */
// style의 값을 구하는게 IE랑 그외가 다름.
function getStyle(obj) {
    var style = obj.getAttribute("style");
    if(typeof(style)=="object") style = style["cssText"];
    return style;
}

// float: 값을 구하는게 IE랑 그외가 다름
function getFloat(obj) {
    var cssFloat = xIE4Up?obj.style.styleFloat:obj.style.cssFloat;
    if(!cssFloat) cssFloat = 'left';
    return cssFloat;
}
function setFloat(obj, fl) {
    if(xIE4Up) obj.style.styleFloat = fl;
    else obj.style.cssFloat = fl;
}

// padding값을 구하는 함수 (없을 경우 0으로 세팅), zbxe의 위젯에서만 사용
function getPadding(obj, direct) {
    var padding = obj.getAttribute("widget_padding_"+direct);
    if(!padding || padding == null) padding = 0;
    return padding;
}


/* 위젯 핸들링 시작 */
var zonePageObj = null;
var zoneModuleSrl = 0;
function doStartPageModify(zoneID, module_srl) {
    zonePageObj = xGetElementById(zoneID);
    zoneModuleSrl = module_srl;

    // 위젯 크기/여백 조절 레이어를 가장 밖으로 뺌
    var obj = xGetElementById("tmpPageSizeLayer");
    var dummy = xCreateElement("div");
    xInnerHtml(dummy, xInnerHtml(obj));
    dummy.id="pageSizeLayer";
    dummy.style.visibility = "hidden";
    dummy.style.position = "absolute";
    dummy.style.left = 0;
    dummy.style.top = 0;
    document.body.appendChild(dummy);
    obj.parentNode.removeChild(obj);


    // 모든 위젯들의 크기를 정해진 크기로 맞춤
    doFitBorderSize();

    // 드래그와 리사이즈와 관련된 이벤트 리스너 생성
    xAddEventListener(document,"click",doCheckWidget);
    xAddEventListener(document,"mousedown",doCheckWidgetDrag);
}


// 내용 모두 삭제
function removeAllWidget() {
    if(!confirm(confirm_delete_msg)) return;
    var response_tags = new Array('error','message');
    var params = new Array();
    params['module_srl'] = xGetElementById('pageFo').module_srl.value;
    exec_xml('widget',"procWidgetRemoveContents",params,function() { xInnerHtml(zonePageObj,'') });
}

/** 
 * 특정 영역에 편집된 위젯들을 약속된 태그로 변환하여 return
 **/
function getWidgetContent(obj) {
    var html = "";
    if(typeof(obj)=='undefined' || !obj) obj = zonePageObj;
    var childObj = obj.firstChild;

    while(childObj) {
        if(childObj.nodeName == "DIV" && childObj.getAttribute("widget"))  {
            var widget = childObj.getAttribute("widget");
            if(widget) {
                switch(widget) {
                    case 'widgetBox' :
                            html += getWidgetBoxCode(childObj, widget);
                        break;
                    case 'widgetContent' :
                            html += getContentWidgetCode(childObj, widget);
                        break;
                    default :
                            html += getWidgetCode(childObj, widget);
                        break;
                }
            }
        }
        childObj = childObj.nextSibling;
    }

    return html;
}

// 컨텐츠 위젯 코드 구함
function getContentWidgetCode(childObj, widget) {
    var cobj = childObj.firstChild;
    while(cobj) {
        if(cobj.nodeName == "DIV" && cobj.className == "widgetContent") {
            var body = xInnerHtml(cobj);
            var document_srl = childObj.getAttribute('document_srl');
            return '<img src="./common/tpl/images/widget_bg.jpg" class="zbxe_widget_output" widget="widgetContent" style="'+getStyle(childObj)+'" body="'+body+'" document_srl="'+document_srl+'" widget_padding_left="'+getPadding(childObj,'left')+'" widget_padding_right="'+getPadding(childObj, 'right')+'" widget_padding_top="'+getPadding(childObj, 'top')+'" widget_padding_bottom="'+getPadding(childObj,'bottom')+'" />';
{'fraction_non_alphanumeric': 0.14952945277100035, 'fraction_numerical': 0.005112118043453003, 'mean_word_length': 2.9234275296262533, 'pattern_counts': {'":': 0, '<': 11, '<?xml version=': 0, '>': 7, 'https://': 0, 'lorem ipsum': 0, 'www.': 4, 'xml': 4}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6178101', 'n_tokens_mistral': 3208, 'n_tokens_neox': 3391, 'n_words': 578}