/**
* @file modules/widget/js/widget.js
* @author zero (zero@nzeo.com)
* @brief 위젯 관리용 자바스크립트
**/
/* 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.className=obj.className;
dummy.style.visibility = "hidden";
dummy.style.display = "block";
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);
xAddEventListener(document,'mouseover',widgetSetup);
}
// 내용 모두 삭제
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() { restoreWidgetButtons(); 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;
var widgetContent = jQuery('div.widgetContent',childObj);
var body = '';
var document_srl = 0;
var attrs ='';
if(widgetContent.size() > 0){
document_srl = jQuery(childObj).attr('document_srl');
if(document_srl>0){
body = '';
}else{
body = widgetContent.html();
}
for(var i=0;i';
}else{
return '';
}
}
// 위젯 박스 코드 구함
function getWidgetBoxCode(childObj, widget) {
var cobj = childObj.firstChild;
while(cobj) {
if(cobj.className == "widgetBorder" || cobj.className == "widgetBoxBorder") {
var c2obj = cobj.firstChild;
while(c2obj) {
if(c2obj.className == "nullWidget") {
var body = getWidgetContent(c2obj);
return '
';
}
c2obj = c2obj.nextSibling;
}
}
cobj = cobj.nextSibling;
}
}
// 일반 위젯 컨텐츠 코드 구함
function getWidgetCode(childObj, widget) {
var attrs = "";
var code = "";
for(var i=0;i';
}
/**
* 직접 내용을 입력하는 위젯을 추가
**/
// 팝업 띄움
function doAddContent(mid) {
var url = request_uri.setQuery('module','widget').setQuery('act','dispWidgetAdminAddContent').setQuery('module_srl',zoneModuleSrl);
popopen(url, "addContent");
}
// 직접 내용을 입력하기 위한 에디터 활성화 작업 및 form 데이터 입력
function doSyncPageContent() {
if(opener && opener.selectedWidget) {
var fo_obj = xGetElementById("content_fo");
var sel_obj = opener.selectedWidget;
fo_obj.style.value = getStyle(opener.selectedWidget);
fo_obj.widget_padding_left.value = getPadding(sel_obj, 'left');
fo_obj.widget_padding_right.value = getPadding(sel_obj,'right');
fo_obj.widget_padding_bottom.value = getPadding(sel_obj,'bottom');
fo_obj.widget_padding_top.value = getPadding(sel_obj,'top');
var obj = sel_obj.firstChild;
while(obj && obj.className != "widgetContent") obj = obj.nextSibling;
if(obj && obj.className == "widgetContent") {
if(!fo_obj.content.value) {
var content = Base64.decode(xInnerHtml(obj));
xGetElementById("content_fo").content.value = content;
}
}
}
editorStart(1, "module_srl", "content", false, 400 );
//editor_upload_start(1);
setFixedPopupSize();
}
// 부모창에 위젯을 추가
function addContentWidget(fo_obj) {
var editor_sequence = fo_obj.getAttribute('editor_sequence');
var mid = fo_obj.mid.value;
var module_srl = fo_obj.module_srl.value;
var document_srl = fo_obj.document_srl.value;
var content = editorGetContent(editor_sequence);
var response_tags = new Array('error','message','document_srl');
var params = new Array();
params['editor_sequence'] = editor_sequence;
params['content'] = content;
params['module_srl'] = module_srl;
params['document_srl'] = document_srl;
exec_xml('widget',"procWidgetInsertDocument",params,completeAddContent,response_tags,params,fo_obj);
return false;
}
function completeAddContent(ret_obj, response_tags, params, fo_obj) {
var document_srl = ret_obj['document_srl'];
var contentWidget = opener.jQuery('div.widgetOutput[widget=widgetContent][document_srl='+document_srl+']');
var attr = null;
if(contentWidget.size()>0) {
attr = contentWidget.get(0).attributes;
}
var editor_sequence = params['editor_sequence'];
var content = editorGetContent(editor_sequence);
var tpl = ''+
'';
var oTpl = jQuery(tpl);
if(attr) {
jQuery.each(attr,function(i){
if(!oTpl.attr(attr[i].name)){
oTpl.attr(attr[i].name,attr[i].value);
}
});
}
oTpl = jQuery('').append(oTpl);
tpl = oTpl.html();
opener.doAddWidgetCode(tpl);
window.close();
}
/* 박스 위젯 추가 */
function doAddWidgetBox() {
var tpl = ''+
'
';
xInnerHtml(zonePageObj, xInnerHtml(zonePageObj)+tpl);
doFitBorderSize();
}
/* 일반 위젯을 추가하기 위해 위젯 팝업창을 띄움 */
function doAddWidget(fo) {
var sel = fo.widget_list;
var idx = sel.selectedIndex;
var val = sel.options[idx].value;
var module_srl = fo.module_srl.value;
var url = request_uri.setQuery('module','widget').setQuery('act','dispWidgetGenerateCodeInPage').setQuery('selected_widget', val).setQuery('module_srl', module_srl);
popopen(url,'GenerateWidgetCode');
}
// widgetBorder에 height를 widgetOutput와 맞춰줌
function doFitBorderSize() {
var obj_list = xGetElementsByClassName('widgetBorder', zonePageObj);
for(var i=0;i
-1) {
var pos = tmp.indexOf("");
var cssfile = tmp.substr(9,eos-9);
if(cssfile.indexOf('.js')>-1) {
tmp = tmp.substr(eos);
continue;
}
if(!cssfile) break;
tmp = tmp.substr(eos);
var cssfile = request_uri+'/'+cssfile;
if(typeof(document.createStyleSheet)=='undefined') {
var css ='';
var dummy = xCreateElement("DIV");
xInnerHtml(dummy , css);
document.body.appendChild(dummy);
} else {
document.createStyleSheet(cssfile,0);
}
}
// widget 코드에서 javascript 부분을 빼서 eval후 결과값을 대체함
checkDocumentWrite = true; ///< document.write(ln)등의 함수값을 바로 사용하기 위한 check flag
// widget_code의 javascript 부분 수정
var tmp = widget_code.toLowerCase();
while(tmp.indexOf("")+9;
var script = widget_code.substr(pos,length);
script = script.replace(/^