www.gusucode.com > ShopEx481 & PHPWind 整合版码程序 > shopadmin/shopWidgets.js

    var widgetsSet={};
var shopEffect={};
var shopWidgets;
window.onerror=function(){
  return false;
}

/*shopAdmin Widgets
    Extends by   JS/coms/DragDropPlus.js
*/

var Widgets=DragDropPlus.extend({
   options:{
   handle:function(d){return $E('.drag_handle',$(d));}
   },
   initialize:function(drags,drops,options){
 
	  this.setOptions(options);
	  
	  //to do
	  this.mce={};
	  this.ifrm=0;
	  if(window.quickHtml){
			var insHtml = $ES('.insHtml').addEvent('click',function(e){
			    var btn=e.target;
				var wp=$E('.shopWidgets_panel',btn.getParent());
				this.htmlarea(wp);
			}.bind(this));

			var insWidget = $ES('.insWidget').addEvent('click',function(e){
			    var btn=e.target;
				var wp=$E('.shopWidgets_panel',btn.getParent());
				this.newWidget(wp);
			}.bind(this));

		}	
		drags.each(function(drag){
			   if(drag.getProperty('ishtml')){
					var mce_id = drag.getProperty('widgets_id');
					this.mce['svmce_'+mce_id] = new mceInstance('set_'+mce_id,{autoHeight:true});
					window.quickHtml(this.mce['svmce_'+mce_id]);
			}
		}.bind(this));
	 
	  this.addEvent('onInitDrags',function(drag,drags){
			var h=$E('.widgets_handle',drag);
			var b=$E('.shopWidgets_body',drag);
			if($chk(h)&&$chk(b)){
			drag.addEvents({
			  'mousemove':function(e){
			     b.setStyles({'border':'2px #191e75 dotted','padding':0});
				 h.setStyle('display','block').setOpacity(.9);
			     
			  },
			  'mouseleave':function(e){
			    e=new Event(e);
				if(e.relatedTarget==h)return;
				 b.setStyles({'border':'none','padding':2});
				 h.setStyle('display','none');
				
			  }
			});
			h.addEvent('mouseleave',function(e){
			e=new Event(e);if(e.relatedTarget==b)return;
				 b.setStyles({'border':'none','padding':2});
				 h.setStyle('display','none');}
				 );
			}
	  });
	  
	 // this.addEvent('onInitDrops',function(drop,drops){
	     //drop.setStyle('border','2px dashed transparent');
//	  });
	  
      this.parent(drags,drops,options);
	  
	
   },
   inject:function(widget,theme){
		this.addWidget(this.curEl,widget,theme?theme:this.theme);
	},
	newWidget:function(el){
		this.curDrop = el;
		//this.curdialog = new window.top.Dialog('index.php?ctl=content/pages&act=widgets',{modal:true,width:770,height:500});
		this.curdialog=new parent.Dialog('index.php?ctl=content/pages&act=widgets',{width:770,height:500,title:'增加页面版块',modal:true,resizeable:true,onShow:function(e){
	   this.dialog_body.id='dialogContent';
	}});
	},
	htmlarea:function(el){
			this.ifrm++;
			var mceID='mce_'+this.ifrm;
			var wgID='wghtml_'+this.ifrm;
			var html="";
			html+='<div class="shopWidgets_body" style="position: relative;padding:2px;">';
			html+='<div class="widgets_handle" style="border: 1px solid rgb(204, 204, 204); padding: 1px; background: rgb(0, 6, 102) none repeat scroll 0% 0%; position: absolute; display: none; left: 3px; top: 3px; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; font-weight: bold; font-size: 12px; color: rgb(255, 255, 255); z-index: 65535; clear: both; visibility: visible; opacity: 0.9;"">';
			html+='<span class="drag_handle" style="cursor: move;">移动</span><span class="remove" onclick="shopWidgets.remove(this.parentNode.parentNode.parentNode)" style="cursor: pointer;">删除</span></div>';
			html+='<div id="mce_body_{0}" ><textarea style="display:none">在此输入文本..</textarea><iframe name="mce_body_{0}_frm" style="height:70px;width:100%;" frameborder="0" allowtransparency="true" id="mce_body_{0}_frm"></iframe></div>'.format(wgID);
			html+='</div></div>';
			html+='<div class="resize" style="height:5px;background:#ccc;cursor:row-resize">&nbsp;</div>';
			new Element('div',{'class':'shopWidgets_box','id':mceID}).setProperties(
			              {'ishtml':'true',
			                'base_file':el.getProperty('base_file'),
							'base_solt':el.getProperty('base_slot'),
							'base_id':el.getProperty('base_id'),
							'widgets_id':mceID,
							'mce_id':mceID
						  }).set('html',html).injectBottom(el);
			
			var iframe_resize=$E('iframe',mceID).makeResizable({
				   handle:$E('.resize',mceID),
				   limit:{
				      x:[$E('.shopWidgets_body',mceID).getSize().x,$E('.shopWidgets_body',mceID).getSize().x],
					  y:[68,400]
				   }
				});
		     $E('.resize',mceID).addEvent('mouseup',iframe_resize.stop.bind(iframe_resize));
		    
			this.mce[mceID] = new mceInstance(wgID);
			window.quickHtml(this.mce[mceID]);
			
			this.drags.include($(mceID));
			this.initDrags([$(mceID)]);
	},
	ghostDrop:function(widget,theme){
		$('tempDropBox')?$('tempDropBox').empty().remove():'';
		parent._showWidgets_tip('在您需要放入版块的蓝色区域点击鼠标左键即可添加版块。点击鼠标右键则取消添加版块操作。');
		this.tempDropBox=new Element('div',{'id':'tempDropBox'}).inject(document.body);
		this.drops.each(function(item,index){
			var cis=item.getCis();
			cis.height-=5;
			cis.width-=5;
			var dropghost=new Element('div',{'styles':cis})
			.setStyles({'position':'absolute','opacity':0.5,'border':'1px #333 dotted','cursor':'pointer','background':'#66CCFF','zIndex':65535,'font-size':14,'color':'#ff0000'})
			.setText('['+(index+1)+']')
			.setProperty('title','点击此处,将['+widget.name+']版块添加到此区域')
			.addEvent('click',function(){
			this.base.tempDropBox.empty();
			this.base.addWidget(this.source,widget,theme);
			parent._hideWidgets_tip();
			}.bind({'source':item,'base':this})).inject(this.tempDropBox);
		},this);
		
		self.document.body.addEvent('contextmenu',function(e){
		   e=new Event(e);
		   e.stop();
		   $('tempDropBox')?$('tempDropBox').empty().remove():'';
		   parent._hideWidgets_tip();
		   document.body.removeEvent('contextmenu',arguments.callee);
		});
	},
	copyWidgets:function(el){
		  var elsource=el.source;
		     new Ajax('index.php?ctl=system/template&act=copyWg&p[0]='+elsource.getProperty('id')+'&p[1]='+elsource.getProperty('widgets_id'),{onComplete:function(re){
			 	//console.info(re);
				var widgets_id=Json.evaluate(re).widgetid;
				elsource.setProperty('widgets_id',widgets_id);
			 }}).request();
			 elsource.setStyle('border','1px dashed #333');
	},
	addWidget:function(drop,widget,theme){
		var dialogSetting={
			modal:true,
			title:'增加版块:['+widget.name+']',
			ajaksable:false
		};
		this.curdialog=new top.Dialog('index.php?ctl=system/template&act=doAddWidgets&p[0]='+widget.name+'&p[1]='+theme,dialogSetting);
		this.curDrop=drop;
	},
	remove:function(widget){
	    if(!confirm('确认移除此版块?'))return;
		$(widget).remove()
		this.drags.remove(widget);
	},
	edit:function(o,theme){
		var dialogSetting={
		modal:true,
		title:'修改版块:['+o.title+']',
		ajaksable:false
		};
		this.curdialog=new top.Dialog('index.php?ctl=system/template&act=editWidgets&p[0]='+o.getProperty('widgets_id')+'&p[1]='+theme,dialogSetting);
		this.curWidget=$(o);
	},
	saveWidgets:function(){
		var params=[];
		var wpanels=this.drops;
		var file={};
		wpanels.each(function(item,index){
			var widgets =$ES('.shopWidgets_box',item);
			widgets.each(function(widgetbox){
				params.push(("widgets[{3}]={0}:{1}:{2}").format(this.bf,this.bs,this.bi,widgetbox.getProperty('widgets_id')));
				//to do
			 if(widgetbox.getProperty('ishtml')){
					var mce_id = widgetbox.getProperty('mce_id');
					params.push(('html[{0}]={1}').format(widgetbox.getProperty('widgets_id'),encodeURIComponent(this.mce[mce_id].getValue.bind(this.mce[mce_id])())));
				}
				
			},{mce:this.mce,bf:item.getProperty('base_file'),bs:item.getProperty('base_slot'),bi:item.getProperty('base_id')});
			file[item.getProperty('base_file')]=1;
		  }.bind(this));
		
		
		for(f in file){params.push(("files[]={0}").format(f));}
	
		new Ajax('index.php?ctl=system/template&act=widgetsSave',{data:params.join('&'),method:'post',
		onComplete:function(re){
			try{
				var re=Json.evaluate(re);
				for (dom in re) {
						if($chk($(dom))&&$chk(re[dom]))
						$(dom).setProperty('widgets_id', re[dom]);
					}
				alert('保存成功!');
			}catch(e){
				alert(re);
			}
		}
		}).request();
	}
})




//这是模板编辑页面初始化后调用的。
var shopWidgets;
window.addEvent('domready',function(){
	shopWidgets=new Widgets($$('.shopWidgets_box'),$$('.shopWidgets_panel'));
});