/**
* @file modules/widget/js/widget.js
* @author NHN (developers@xpressengine.com)
* @brief 위젯 관리용 자바스크립트
**/
/* DOM 속성을 구하기 위한 몇가지 함수들.. */
// style의 값을 구하는게 IE랑 그외가 다름.
function getStyle(obj) {
var style = obj.getAttribute("style");
if(!style)
{
style = obj.style;
}
if(typeof(style)=="object") style = style["cssText"];
style = style.replace(/\burl\s*\(\s*"(.*?)"\s*\)/i, "url('$1')");
return style;
}
// float: 값을 구하는게 IE랑 그외가 다름
function getFloat(obj) {
return jQuery(obj).css('float');
}
function setFloat(obj, fl) {
jQuery(obj).css('float', 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 = get_by_id(zoneID);
zoneModuleSrl = module_srl;
// 위젯 크기/여백 조절 레이어를 가장 밖으로 뺌
jQuery('#tmpPageSizeLayer')
.appendTo('body')
.hide()
.attr('id', 'pageSizeLayer')
.css({position:'fixed'})
.before('
')
.find('>form')
.submit(function(){ doApplyWidgetSize(this); return false; });
// 모든 위젯들의 크기를 정해진 크기로 맞춤
doFitBorderSize();
// 드래그와 리사이즈와 관련된 이벤트 리스너 생성
xAddEventListener(document.getElementById('zonePageContent'), "click",doCheckWidget);
xAddEventListener(document.getElementById('zonePageContent'), "mousedown",doCheckWidgetDrag);
xAddEventListener(document.getElementById('zonePageContent'), 'mouseover',widgetSetup);
}
// 내용 모두 삭제
function removeAllWidget() {
if(!confirm(confirm_delete_msg)) return;
restoreWidgetButtons();
jQuery(zonePageObj).html('');
}
/**
* 특정 영역에 편집된 위젯들을 약속된 태그로 변환하여 return
**/
function getWidgetContent(obj) {
var html = "";
if(typeof(obj)=='undefined' || !obj) obj = zonePageObj;
var widget = null;
jQuery('div.widgetOutput',obj).each(function(){
if(jQuery(this).parent().get(0) != obj) return;
widget = jQuery(this).attr('widget');
switch(widget) {
case 'widgetBox' :
html += getWidgetBoxCode(this, widget);
break;
case 'widgetContent' :
html += getContentWidgetCode(this, widget);
break;
default :
html += getWidgetCode(this, widget);
break;
}
});
return html;
}
// 컨텐츠 위젯 코드 구함
function getContentWidgetCode(childObj, widget) {
var cobj = childObj.firstChild;
var widgetContent = jQuery('div.widgetContent',childObj);
var body = '', attrs = '', code = '', name;
var document_srl = 0;
var toIgnore = 'contenteditable,id,style,src,widget,body,class,widget_width,widget_width_type,xdpx,xdpy,height,document_srl,widget_padding_left,widget_padding_right,widget_padding_top,widget_padding_bottom,hascontent';
if(widgetContent.size() > 0){
document_srl = jQuery(childObj).attr('document_srl');
if(document_srl>0){
body = '';
}else{
body = widgetContent.html();
}
var reIgnore = new RegExp('^('+toIgnore.replace(/,/g, '|')+')$','i');
var value;
for(var i=0;i';
}else{
return '';
}
return code;
}
// 위젯 박스 코드 구함
function getWidgetBoxCode(childObj, widget) {
var attrs = "";
for(var i=0;i0){
o = jQuery('.widget_inner',childObj);
o = o.get(0);
}else{
o = jQuery('.nullWidget',childObj).get(0);
}
var body = getWidgetContent(o);
return '
'+body+'
';
}
// 일반 위젯 컨텐츠 코드 구함
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).setQuery('mid',mid);
popopen(url, "addContent");
}
// 직접 내용을 입력하기 위한 에디터 활성화 작업 및 form 데이터 입력
function doSyncPageContent() {
if(opener && opener.selectedWidget) {
var fo_obj = get_by_id("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.document_srl || fo_obj.document_srl.value == 0) {
try {
var content = Base64.decode(xInnerHtml(obj));
content = editorReplacePath(content);
get_by_id("content_fo").content.value = content;
xe.Editors["1"].exec("SET_IR", [content]);
}
catch(e)
{
}
}
}
}
if(typeof(editorStart)!='undefined') 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 params = {
editor_sequence : editor_sequence,
content : content,
module_srl : module_srl,
document_srl : document_srl
};
// issue 979
if(/^\s*
.*<\/p>\s*$/i.test(params.content)) {
// get count of paragraphs
var lowerContent = params.content.toLowerCase();
var idx = lowerContent.indexOf('