/*
内容:列构造系列类
创建时间:2006-11-29
创建人:吴少刚
项目组:商格里拉项目组
外部引用类库:1.JS/comjs/prototype1.4.js 作者:Sam Stephenson
2.global.js 作者:吴少刚
3.Drag.js 作者:吴少刚
*/
//-----------------------------------------------Columns---------------------------------------------------------//
/*
名称:列集合对象构造类
功能及构成描述:用于构造各列容器,列中可以容纳各个Feed对象
并有集合对象,以便可以更快的查找和操作Feed对象
初始化参数:Count=列数, aryWidth=各列宽度数组,条件:Count==aryWidth.length;
*/
Columns = Class.create();
Columns.prototype = {
initialize: function(Count,aryClassName)
{
var frame = document.createElement("div");
frame.id = "LastDivFrame";//最后一个容纳所有对象的框架,这个框架最后加载到页面上
frame.className = G.Style.LastFrame.lastframe;
this.LastFrame = frame;
//列集合
this.aryCols = new Array();
this.CreateCols(Count,aryClassName);
this.RI = new RequestInterval(2);
},
dispose:function(){
if(this.aryCols.length > 0)
{
for(var i=0;i {
this.aryCols[i].dispose();
}
this.aryCols = null;
this.LastFrame.removeNode(true);
this.LastFrame = null;
}
},
//私有方法,初始化地创造一个列对象
CreateCols: function(Count,aryClassName)
{
for(var i=1; i {
var col = new Column("divCol"+i,aryClassName[i-1]);
this.aryCols.push(col);
}
},
//公共方法 根椐ID,获得列对象,如果没有得到则返回空
getColObjByID: function(divObjID)
{
if(this.aryCols.length >0)
{
var colObj = null;
for(var i=0;i {
colObj = this.aryCols[i];
if(colObj.ID == divObjID)
return colObj;
}
}
return null;
},
//清除指定的Feed,也是出现在点击关闭按钮后的操作
//操作步骤:1.发送异步指令从用户的配置文件中删除一个指定的Feed
// 2.从页面中删除指定的Feed
// 3.更新各Feed的索引号和序号
// 4.更新关联菜单的状态,设置为可用。
//传入参数:当前指定的Feed
clearSpeFeed: function(Feed)
{
var param = null;
//删除服务器上用户的Feed
var FileURL = G.ActionURL.PageDataURL, parames = "";
parames ="Type=Feed&Action=Del&Code=" + Feed.objFBaseInfo.Code;
parames = "module=xml&action=" + G.ActionURL.SaveData + "&" + parames;
G_RequestObj.send(FileURL,parames,null,"get");
//G_BLLFeed.SaveData(param);
//更新各序号
var curCol = this.aryCols[Feed.objFBaseInfo.Column-1];
//删除Feed并更新在数组中的序号和索引
curCol.RemoveFeed(Feed);
//更新关联菜单的状态,如果代号不为空说明和菜单有一对一的关系
if(Feed.objFBaseInfo.MenuCode != null&&Feed.objFBaseInfo.MenuCode != "")
{
//还要再增加一个逻辑,就是检查各菜单下有Feed的代号是否一样,如果一样则也改变过来.
G_LoginM.navBar.ChangeMenuSubPartStateByMenuCode(Feed.objFBaseInfo.MenuCode);
}
else
{
G_LoginM.navBar.ChangeMenuSubPartStateByFeedCode(Feed.objFBaseInfo.Code);
}
},
//排序Feed在数组中的顺序
FeedSortByMpos:function(aryFeeds){
return aryFeeds.sortBy(function(value,index){return aryFeeds[index].MPos;});
},
//增加一个Feed到页面的列上
//传入参数:Feed = 一个feed对象,IsAddToPageNow=是否附加到页面上显示出来
AddFeed: function(Feed,IsAddToPageNow)
{
if(this.aryCols.length != 0&&typeof(Feed) != "undefined")
{
var colObj = this.aryCols[parseInt(Feed.objFBaseInfo.Column)-1];
colObj.AddFeed(Feed,IsAddToPageNow);
}
},
//请求页面Feed的事件处理
LoadFeedEventHandler: function(response){
var rootNode = G_XML.XmlDom.createDomFromResponse(response);
var FeedNodes = rootNode.getElementsByTagName("Feed");
for(var i=0; i {
var FBInfo = G_BLLFeed.CreateAllFeedBaseInfo(FeedNodes[i]);
var feed = new Feed(FBInfo,true);
this.AddFeed(feed);
}
G_LoginM.LoadSuccessSign.ColFeed = true;
G_LoginM.AddToPage();
},
//创建页面Feed
CreateFeed:function(){
this.RI.Stop1();
var FileURL = "",parames = "";
FileURL = G.ActionURL.PageDataURL;
parames = "Type=Feed&Action=all";
parames = "module=xml&action=" + G.ActionURL.GetData + "&" + parames;
FileURL = "XML/DefaultFeed.xml"; //paramCancelPosition
G_RequestObj.send(FileURL,parames,this.LoadFeedEventHandler.bind(this),"get");
//URL,params,SuccessFunc,Method
},
Start:function(){
this.RI.SetInterval(this.CreateFeed.bind(this) ,0.1);
}
}
//-----------------------------------------------Column---------------------------------------------------------//
/*
名称:单一列构造类
功能及构成描述:列中有各种自有的方法
初始化方法:id=构造列的ID
*/
Column = Class.create();
Column.prototype = {
initialize: function(id,className)
{
this.aryFeeds = new Array();
var col1 = document.createElement("div");
col1.id = id;
col1.className = className;
this.Frame = col1;
this.ID = id;
this.FeedsCount = this.aryFeeds.length;
},
dispose:function(){
if(this.aryFeeds.length >0)
{
for(var i=0;i {
this.aryFeeds[i].dispose();
}
this.aryFeeds = null;
}
},
AddFeedToFrame:function(){
for(var i=0;i {
//给Feed赋索引值,这是在Feed在数组中的位置
this.aryFeeds[i].FeedIndexInColumn = i;
this.Frame.appendChild(this.aryFeeds[i].Frame);
}
},
//增加一个提要对象,如果成功则返会true
//传入参数:Feed=Feed对象 IsAddToPageNow=是否直接增加到页面上,它是从菜单上增加Feed需要的参数
AddFeed: function(Feed,IsAddToPageNow)
{
if(this.aryFeeds.length > 0)
{
for(var i=0;i {
if(this.aryFeeds[i] == Feed)//如果有相同的对象则不能加入
{
return false;
}
}
}
if(IsAddToPageNow)
{
//给定所在的索引号
if(this.aryFeeds.length != 0)
{
Feed.FeedIndexInColumn = this.aryFeeds.length;
Feed.MPos = parseInt(this.aryFeeds[this.aryFeeds.length-1].MPos) + 1;
}
else
{
Feed.FeedIndexInColumn = 0;
Feed.MPos = 1;
}
//增加到页面上
this.Frame.appendChild(Feed.Frame);
}
this.aryFeeds.push(Feed);
return true;
},
//删除一个提要对象,删除成功则返回true
//传入参数:Feed=一个信息提要对象
RemoveFeed: function(Feed)
{
if(this.aryFeeds.length > 0)
{
for(var i=0;i {
if(this.aryFeeds[i].Code == Feed.Code)
{
this.aryFeeds[i].Frame.removeNode(true);
this.aryFeeds[i] = null;
this.ChangePosAndIndex();
//移除指定元素
this.aryFeeds.splice(i,1);
// //异步保存各序号
// var param = "";
// param = "Type=Feed&Action=MPos&MPos=";
//
// var menuPara = "";
// for(var j=0;j // {
// var feed = this.aryFeeds[j];
// menuPara += feed.Code + ":" + feed.MPos + "|";
// }
// param += menuPara;
// G_BLLFeed.SaveData(param);
return true;
}
}
}
return false;
},
//根据模Feed的代号来查找其在列中的位置,其位置是用索引来表示的
//也就是其编号,因为编号决定其在列中上下的位置
//返回值:如果找到返回在列中的索引,否则返回-1;
getPositionByCode: function(FeedCode)
{
if(this.aryFeeds.length >0)
{
var Feed = null;
for(var i=0;i {
Feed = this.aryFeeds[i];
if(Feed.objFBaseInfo.Code == FeedCode)
return i;
}
}
return -1;
},
//根据排列序号访问一个Feed对象,如果未找到则返回空
getFeedByMPos: function(MPos)
{
if(this.aryFeeds.length >0)
{
for(var i=0;i {
if(this.aryFeeds[i].MPos == MPos)
return this.aryFeeds[i];
}
}
return null;
},
//改变列中各Feed的的序号和索引号
ChangePosAndIndex: function(){
var startIndex = this.aryFeeds.length -1;
for(var i=0;i {
var Feed = this.aryFeeds[i];
if(Feed == null)
{
startIndex = i;
}
//从i开始更新序号和各Feed的索引号
if(i>startIndex)
{
Feed.MPosSubOne();
Feed.FeedIndexInColumn = i-1;
}
}
},
// //为两个指定的Feed交换序号
// //传入参数:oFeed=第一个Feed tFeed=第二个Feed
// ExchangeMPosForFeed: function(oFeed,tFeed)
// {
// var a = oFeed.MPos;
// var b = tFeed.MPos;
// oFeed.MPos = b;
// tFeed.MPos = a;
//
// // future Ajax 这里调用方法去把用户模块的序号提交到服务器 1.保存序号
//
//
// },
//保存本列中各Feed的序号,当移动结束后,得到当前操作列,然后调用方法即可
SaveAllFeedMPos:function(){
var FileURL = G.ActionURL.PageDataURL, parames = "";
for(var j=0;j {
var feed = this.aryFeeds[j];
parames += feed.Code + ":" + (j+1).toString() + "|";
}
parames = "module=xml&action=" + G.ActionURL.SaveData + "&Type=Feed&Action=MPos&MPos=" + encodeURIComponent(parames);
G_RequestObj.send(FileURL,parames,null,"get");
//URL,params,SuccessFunc,Method
}
}