/** * @file modules/widget/js/widget.js * @author NHN (developers@xpressengine.com) * @brief 위젯 관리용 자바스크립트 **/ 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} function getFloat(obj){return jQuery(obj).css('float')} function setFloat(obj,fl){jQuery(obj).css('float',fl)} function getPadding(obj,direct){var padding=obj.getAttribute("widget_padding_"+direct);if(!padding||padding==null)padding=0;return padding};var zonePageObj=null,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});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('')} 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,widgetContent=jQuery('div.widgetContent',childObj),body='',attrs='',code='',name,document_srl=0,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'),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="",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")} function doSyncPageContent(){if(opener&&opener.selectedWidget){var fo_obj=get_by_id("content_fo"),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)} function addContentWidget(fo_obj){var editor_sequence=fo_obj.getAttribute('editor_sequence'),mid=fo_obj.mid.value,module_srl=fo_obj.module_srl.value,document_srl=fo_obj.document_srl.value,content=editorGetContent(editor_sequence),params={editor_sequence:editor_sequence,content:content,module_srl:module_srl,document_srl:document_srl};if(/^\s*

.*<\/p>\s*$/i.test(params.content)){var lowerContent=params.content.toLowerCase(),idx=lowerContent.indexOf('

'),last_idx=lowerContent.lastIndexOf('

');if(idx>0&&last_idx>0&&idx==last_idx)params.content=content=params.content.replace(/^\s*

|<\/p>\s*$/ig,'')};exec_xml('widget','procWidgetInsertDocument',params,function(ret_obj,response_tags){if(!ret_obj||ret_obj.error!='0')return;var document_srl=ret_obj.document_srl,contentWidget=opener.jQuery('div.widgetOutput[widget=widgetContent][document_srl='+document_srl+']'),attr=[];if(contentWidget.size()>0)attr=contentWidget.get(0).attributes;var tpl='

'+content+'
',$tpl=jQuery(tpl);for(var i=0,l=attr.length;i').append($tpl).html();opener.doAddWidgetCode(tpl);window.close()},'document_srl'.split(','));return false} function doAddWidgetBox(){var tpl='
';zonePageObj.innerHTML+=tpl} function doAddWidget(fo){var sel=fo.widget_list,idx=sel.selectedIndex,val=sel.options[idx].value,module_srl=fo.module_srl.value,url=request_uri.setQuery('module','widget').setQuery('act','dispWidgetGenerateCodeInPage').setQuery('selected_widget',val).setQuery('module_srl',module_srl);popopen(url,'GenerateWidgetCode')};var selectedWidget=null,writedText=null,checkDocumentWrite=false;window.document.write=window.document.writeln=function(str){if(checkDocumentWrite){writedText=str;return};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=jQuery('
').html(str)[0],pos;pos=document.getElementsByTagName("*");pos=pos[pos.length-1];var nodes=div.childNodes;while(nodes.length)pos.parentNode.appendChild(nodes[0])} function doAddWidgetCode(widget_code){restoreWidgetButtons();var tmp=widget_code;while(tmp.indexOf(""),cssfile=tmp.substr(10,eos-10);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='',dummy=xCreateElement("DIV");xInnerHtml(dummy,css);document.body.appendChild(dummy)}else document.createStyleSheet(cssfile,0)};checkDocumentWrite=true;var tmp=widget_code.toLowerCase();while(tmp.indexOf("-1){var pos=tmp.indexOf("")+9,script=widget_code.substr(pos,length);script=script.replace(/^]*)>/i,'').replace(/<\/script>$/i,'');writedText=null;try{eval(script)}catch(e){};widget_code=widget_code.substr(0,pos)+writedText+widget_code.substr(pos+length);tmp=widget_code.toLowerCase()};var dummy=xCreateElement('div');xInnerHtml(dummy,widget_code);var obj=dummy.childNodes[0];if(selectedWidget&&selectedWidget.getAttribute("widget")){var o=jQuery('div.widget_inner',selectedWidget),n=jQuery('div.widget_inner',obj);if(n.size()==0)n=jQuery('div.nullWidget',obj);if(o.size()==0)o=jQuery('div.nullWidget',selectedWidget);n.html(o.html());selectedWidget.parentNode.insertBefore(obj,selectedWidget);selectedWidget.parentNode.removeChild(selectedWidget)}else get_by_id('zonePageContent').appendChild(obj);checkDocumentWrite=false;selectedWidget=null} function doCheckWidget(e){var evt=new xEvent(e);if(!evt.target)return;var obj=evt.target;selectedWidget=null;var pObj=obj.parentNode;while(pObj){if(pObj.id=="pageSizeLayer")return;pObj=pObj.parentNode};doHideWidgetSizeSetup();if(obj.className=='widgetSetup'){var p_obj=obj.parentNode.parentNode,widget=p_obj.getAttribute("widget");if(!widget)return;selectedWidget=p_obj;if(widget=='widgetContent'){popopen(request_uri+"?module=widget&act=dispWidgetAdminAddContent&module_srl="+zoneModuleSrl+"&document_srl="+p_obj.getAttribute("document_srl"),"addContent")}else popopen(request_uri+"?module=widget&act=dispWidgetGenerateCodeInPage&selected_widget="+widget+"&widgetstyle="+widgetstyle,'GenerateCodeInPage');return}else if(obj.className=='widgetStyle'){var p_obj=obj.parentNode.parentNode,widget=p_obj.getAttribute("widget"),widgetstyle=p_obj.getAttribute("widgetstyle");if(!widget)return;selectedWidget=p_obj;popopen(request_uri+"?module=widget&act=dispWidgetStyleGenerateCodeInPage&selected_widget="+widget+"&widgetstyle="+widgetstyle,'GenerateCodeInPage');return}else if(obj.className=='widgetCopy'&&obj.parentNode.parentNode.className=='widgetOutput'){p_obj=obj.parentNode.parentNode;restoreWidgetButtons();if(p_obj.getAttribute('widget')=='widgetContent'&&p_obj.getAttribute('document_srl')){var response_tags=new Array('error','message','document_srl'),params=new Array();params.document_srl=p_obj.getAttribute('document_srl');exec_xml('widget','procWidgetCopyDocument',params,completeCopyWidgetContent,response_tags,params,p_obj);return}else{var dummy=xCreateElement("DIV");xInnerHtml(dummy,xInnerHtml(p_obj));dummy.widget_sequence='';dummy.className="widgetOutput";for(var i=0;i0)return;doHideWidgetSizeSetup();if(obj.className=='widgetSetup'||obj.className=='widgetStyle'||obj.className=='widgetCopy'||obj.className=='widgetBoxCopy'||obj.className=='widgetSize'||obj.className=='widgetBoxSize'||obj.className=='widgetRemove'||obj.className=='widgetBoxRemove')return;p_obj=obj;while(p_obj){if(p_obj.className=='widgetOutput'||p_obj.className=='widgetResize'||p_obj.className=='widgetResizeLeft'||p_obj.className=='widgetBoxResize'||p_obj.className=='widgetBoxResizeLeft'){widgetDragEnable(p_obj,widgetDragStart,widgetDrag,widgetDragEnd);widgetMouseDown(e);return};p_obj=p_obj.parentNode}} function _getInt(val){if(!val||val=="null")return 0;if(parseInt(val,10)==NaN)return 0;return parseInt(val,10)};var selectedSizeWidget=null function doShowWidgetSizeSetup(px,py,obj){var layer=jQuery('#pageSizeLayer'),form=layer.find('>form:first'),obj=jQuery(obj);if(!form.length)return;selectedSizeWidget=obj[0];var opts={widget_align:obj.css('float'),width:obj[0].style.width,height:obj[0].style.height,padding_left:_getInt(obj.attr('widget_padding_left')),padding_right:_getInt(obj.attr('widget_padding_right')),padding_top:_getInt(obj.attr('widget_padding_top')),padding_bottom:_getInt(obj.attr('widget_padding_bottom')),margin_left:_getInt(obj[0].style.marginLeft),margin_right:_getInt(obj[0].style.marginRight),margin_top:_getInt(obj[0].style.marginTop),margin_bottom:_getInt(obj[0].style.marginBottom),border_top_color:transRGB2Hex(obj[0].style.borderTopColor),border_top_thick:obj[0].style.borderTopWidth.replace(/px$/i,''),border_top_type:obj[0].style.borderTopStyle,border_bottom_color:transRGB2Hex(obj[0].style.borderBottomColor),border_bottom_thick:obj[0].style.borderBottomWidth.replace(/px$/i,''),border_bottom_type:obj[0].style.borderBottomStyle,border_right_color:transRGB2Hex(obj[0].style.borderRightColor),border_right_thick:obj[0].style.borderRightWidth.replace(/px$/i,''),border_right_type:obj[0].style.borderRightStyle,border_left_color:transRGB2Hex(obj[0].style.borderLeftColor),border_left_thick:obj[0].style.borderLeftWidth.replace(/px$/i,''),border_left_type:obj[0].style.borderLeftStyle,background_color:transRGB2Hex(obj[0].style.backgroundColor),background_image_url:obj[0].style.backgroundImage.replace(/^url\(/i,'').replace(/\)$/i,''),background_x:0,background_y:0,background_repeat:obj[0].style.backgroundRepeat},pos=obj[0].style.backgroundPosition;if(pos){pos=pos.split(' ');if(pos.length==2){opts.background_x=pos[0];opts.background_y=pos[1]}};layer.show();jQuery(function($){var $psLayer=$('#pageSizeLayer'),$backdrop=$('.x_modal-backdrop'),ww=$(window).width(),wh=$(window).height(),pw=$psLayer.width(),ph=$psLayer.height();if(ww>pw&&wh>ph){$backdrop.show();$psLayer.css({position:'fixed',top:wh/2-ph/2+'px',left:ww/2-pw/2+'px',width:'700px'})}else{$backdrop.hide();$psLayer.css({position:'static',top:'auto',left:'auto',width:'auto'})}});jQuery.each(opts,function(key,val){var el=form[0].elements[key];if(el){el.value=val;if(el.className.match(/\bcolor-indicator\b/))el.style.background=el.value='#'+el.value};if(el.tagName.toLowerCase()=="select")if(el.selectedIndex==-1)el.selectedIndex=0});try{form[0].elements[0].focus()}catch(e){}} function doHideWidgetSizeSetup(){jQuery('#pageSizeLayer, .x_modal-backdrop, .jPicker.Container').hide()};jQuery(function($){$(document).keydown(function(e){var $jpicker=$('.jPicker.Container:visible');if(e.which==27&&!$jpicker.length){doHideWidgetSizeSetup();return false}else if(e.which==27&&$jpicker.length){$jpicker.hide();return false}else return true})}) function _getSize(value){if(!value)return 0;var type="px";if(value.lastIndexOf("%")>=0)type="%";var num=parseInt(value,10);if(num<1)return 0;if(type=="%"&&num>100)num=100;return""+num+type} function _getBorderStyle(fld_color,fld_thick,fld_type){var color=fld_color.value;color=color.replace(/^#/,'');if(!color){color='#FFFFFF'}else color='#'+color;var width=fld_thick.value;if(!width){width='0px'}else width=parseInt(width,10)+'px';var style=fld_type.options[fld_type.selectedIndex].value;if(!style)style='solid';var str=color+' '+width+' '+style;return str} function _getBGColorStyle(fld_color){var color=fld_color.replace(/^#/,'');if(!color){color='#FFFFFF'}else color='#'+color;return color} function doApplyWidgetSize(fo_obj){if(selectedSizeWidget){if(fo_obj.widget_align.selectedIndex==1){setFloat(selectedSizeWidget,'right')}else setFloat(selectedSizeWidget,'left');var width=_getSize(fo_obj.width.value);if(width)selectedSizeWidget.style.width=width;var height=_getSize(fo_obj.height.value);if(height&&height!="100%"){selectedSizeWidget.style.height=height}else{selectedSizeWidget.style.height='';var widgetBorder=xGetElementsByClassName('widgetBorder',selectedSizeWidget);for(var i=0;i0)return;if(jQuery(obj).is('.buttonBox')||jQuery(obj).parents('.buttonBox').size()>0)return;var o=jQuery(obj).parents('.widgetOutput');if(o.size()==0){restoreWidgetButtons();return};obj=o.get(0);var widget=o.attr('widget');if(!widget)return;if(widget=='widgetBox'){restoreWidgetButtons();showWidgetButton('widgetBoxButton',obj)}else{restoreWidgetButtons();showWidgetButton('widgetButton',obj);var p_obj=obj.parentNode;if(p_obj)while(p_obj){if(p_obj.nodeName=='DIV'&&p_obj.getAttribute('widget')=='widgetBox'){showWidgetButton('widgetBoxButton',p_obj);break};p_obj=p_obj.parentNode}}};var widgetDragManager={obj:null,isDrag:false},widgetTmpObject=new Array(),widgetDisappear=0 function widgetCreateTmpObject(obj){var id=obj.getAttribute('id');tmpObj=xCreateElement('DIV');tmpObj.id=id+'_tmp';tmpObj.className=obj.className;tmpObj.style.overflow='hidden';tmpObj.style.margin='0px';tmpObj.style.padding='0px';tmpObj.style.width=obj.style.width;tmpObj.style.display='none';tmpObj.style.position='absolute';tmpObj.style.opacity=1;tmpObj.style.filter='alpha(opacity=100)';xLeft(tmpObj,xPageX(obj));xTop(tmpObj,xPageY(obj));document.body.appendChild(tmpObj);widgetTmpObject[obj.id]=tmpObj;return tmpObj};var idStep=0 function widgetGetTmpObject(obj){if(!obj.id)obj.id='widget_'+ idStep++;var tmpObj=widgetTmpObject[obj.id];if(!tmpObj)tmpObj=widgetCreateTmpObject(obj);return tmpObj} function widgetDragEnable(obj,funcDragStart,funcDrag,funcDragEnd){obj.draggable=true;obj.dragStart=funcDragStart;obj.drag=funcDrag;obj.dragEnd=funcDragEnd;if(!widgetDragManager.isDrag){widgetDragManager.isDrag=true;xAddEventListener(document,'mousemove',widgetDragMouseMove,false)}} function widgetDragStart(tobj,px,py){if(tobj.className=='widgetResize'||tobj.className=='widgetResizeLeft'||tobj.className=='widgetBoxResize'||tobj.className=='widgetBoxResizeLeft')return;var obj=widgetGetTmpObject(tobj);xInnerHtml(obj,xInnerHtml(tobj));xLeft(obj,xPageX(tobj));xTop(obj,xPageY(tobj));xWidth(obj,xWidth(tobj));xHeight(obj,xHeight(tobj));xDisplay(obj,'block')} function widgetDrag(tobj,dx,dy){var minWidth=40,minHeight=10,sx=xPageX(tobj.parentNode),sy=xPageY(tobj.parentNode),nx=tobj.xDPX,ny=tobj.xDPY,zoneWidth=xWidth(zonePageObj),zoneLeft=xPageX(zonePageObj),zoneRight=zoneLeft+zoneWidth,pWidth=xWidth(tobj.parentNode),cssFloat=getFloat(tobj.parentNode);if(!cssFloat)cssFloat='left';if(tobj.className=='widgetResize'||tobj.className=='widgetBoxResize'){if(nxzoneRight)nx=zoneRight;if(cssFloat=='right')nx=sx+pWidth;var new_width=nx-sx;if(new_width=l&&tobj.xDPX<=ll&&tobj.xDPY>=t&&tobj.xDPY<=tt&&tobj.parentNode==target_obj.parentNode){var next1=target_obj.nextSibling;if(!next1){next1=xCreateElement("DIV");target_obj.parentNode.appendChild(next1)};var next2=tobj.nextSibling;if(!next2){next2=xCreateElement("DIV");tobj.parentNode.appendChild(next2)};if(next1)next1.parentNode.insertBefore(tobj,next1);if(next2)next2.parentNode.insertBefore(target_obj,next2);widgetList=null;return}};widgetList=null;var p_tobj=jQuery(tobj).parents('div.nullWidget').get(0),l=xPageX(p_tobj),t=xPageY(p_tobj),ll=parseInt(l,10)+parseInt(xWidth(p_tobj),10),tt=parseInt(t,10)+parseInt(xHeight(p_tobj),10);if((tobj.xDPXll)||(tobj.xDPYtt)){zonePageObj.insertBefore(tobj,jQuery(tobj).parents('div.widgetOutput[widget=widgetBox]').get(0));return}}else{if(tobj.getAttribute("widget")!="widgetBox"){var boxList=xGetElementsByClassName("nullWidget",zonePageObj);for(var i=0;i=l&&tobj.xDPX<=ll&&tobj.xDPY>=t&&tobj.xDPY<=tt)if(target_obj.className=="nullWidget"){var wb_ws=jQuery('div.widget_inner',jQuery(target_obj));if(wb_ws.size()==0){target_obj.appendChild(tobj)}else wb_ws.get(0).appendChild(tobj);widgetManualEnd();boxList=null;return}};boxList=null};var widgetList=xGetElementsByClassName("widgetOutput",zonePageObj);for(var i=0;i=l&&tobj.xDPX<=ll&&tobj.xDPY>=t&&tobj.xDPY<=tt&&tobj.parentNode==target_obj.parentNode){var next1=target_obj.nextSibling;if(!next1)next1=target_obj.parentNode.lastChild;if(!next1){next1=xCreateElement("DIV");target_obj.parentNode.appendChild(next1)};var next2=tobj.nextSibling;if(!next2){next2=xCreateElement("DIV");tobj.parentNode.appendChild(next2)};if(next1)next1.parentNode.insertBefore(tobj,next1);if(next2)next2.parentNode.insertBefore(target_obj,next2);widgetList=null;return}};widgetList=null}}} function widgetDragEnd(tobj,px,py){var obj=widgetGetTmpObject(tobj);widgetDisapear=widgetDisapearObject(obj,tobj);widgetDragDisable(tobj.getAttribute('id'))} function widgetDisapearObject(obj,tobj){xInnerHtml(tobj,xInnerHtml(obj));xInnerHtml(obj,'');xDisplay(obj,'none');obj.parentNode.removeChild(obj);widgetTmpObject[tobj.id]=null;return} function widgetMouseDown(e){var evt=new xEvent(e),obj=evt.target;while(obj&&!obj.draggable)obj=xParent(obj,true);if(obj){xPreventDefault(e);obj.xDPX=evt.pageX;obj.xDPY=evt.pageY;widgetDragManager.obj=obj;xAddEventListener(document,'mouseup',widgetMouseUp,false);if(obj.dragStart)obj.dragStart(obj,evt.pageX,evt.pageY)}} function widgetMouseUp(e){if(widgetDragManager.obj){xPreventDefault(e);xRemoveEventListener(document,'mouseup',widgetMouseUp,false);if(widgetDragManager.obj.dragEnd){var evt=new xEvent(e);widgetDragManager.obj.dragEnd(widgetDragManager.obj,evt.pageX,evt.pageY)};widgetDragManager.obj=null;widgetDragManager.isDrag=false}} function widgetDragMouseMove(e){var evt=new xEvent(e);if(widgetDragManager.obj){xPreventDefault(e);var obj=widgetDragManager.obj,dx=evt.pageX-obj.xDPX,dy=evt.pageY-obj.xDPY;obj.xDPX=evt.pageX;obj.xDPY=evt.pageY;if(obj.drag){obj.drag(obj,dx,dy)}else xMoveTo(obj,xLeft(obj)+dx,xTop(obj)+dy)}} function widgetDragDisable(id){if(!widgetDragManager)return;var obj=get_by_id(id);obj.draggable=false;obj.dragStart=null;obj.drag=null;obj.dragEnd=null;xRemoveEventListener(obj,'mousedown',widgetMouseDown,false);return} function widgetManualEnd(){var tobj=widgetDragManager.obj;if(!tobj)return;xRemoveEventListener(document,'mouseup',widgetMouseUp,false);xAddEventListener(document,'mousemove',widgetDragMouseMove,false);var obj=widgetGetTmpObject(tobj);widgetDisapear=widgetDisapearObject(obj,tobj);widgetDragDisable(tobj.getAttribute('id'));widgetDragManager.obj=null;widgetDragManager.isDrag=false}