/**
PWS library - movable popup window
@class
*/
$pws.popup=
{
m_lasterr: "",
/**
Get component version
@return
string containing version/revision information
*/
version: function()
{
return "$Revision: 6478 $";
},
/**
Initialize component
@param data
initialization data (not used currently)
@return
true for success, false for error (error string is available using initErr() function in that case)
*/
init: function(data)
{
$pws.setModuleInitialized("popup");
return true;
},
/**
Get initialization error
@return
string with init error message
*/
initErr: function()
{
return "";
},
/**
Get last error
@return
string with last error message
*/
getLastErr: function()
{
return this.m_lasterr;
},
/**
Create popup context
@param data
initialization data:
- class_cont - default CSS class for popup content windows in this context
- autohide - true for automatic hiding of other popup windows upon showing new one
- automove - true for automatic popup move handling
- movelimitobj - if not null, specifies object limiting the movement of popup window
- movexmin - min. x coord for popup movement
- movexmax - max. x coord for popup movement
- moveymin - min. y coord for popup movement
- moveymax - max. y coord for popup movement
- func_show - function called upon showing the popup
- func_hide - function called upon hiding the popup
@return
context object or null for error
*/
createContext: function(data)
{
var $context=$();
$context.class_cont="";
$context.autohide=false;
$context.automove=false;
$context.movelimitobj=null;
$context.movexmin=-Number.MAX_VALUE;
$context.movexmax=Number.MAX_VALUE;
$context.moveymin=-Number.MAX_VALUE;
$context.moveymax=Number.MAX_VALUE;
$context.func_show=null;
$context.func_hide=null;
if (data)
{
if (data.class_cont) $context.class_cont=data.class_cont;
if (data.autohide) $context.autohide=true;
if (data.automove) $context.automove=true;
if (data.movelimitobj) $context.movelimitobj=data.movelimitobj;
if (data.movexmin!=undefined) $context.movexmin=data.movexmin;
if (data.movexmax!=undefined) $context.movexmax=data.movexmax;
if (data.moveymin!=undefined) $context.moveymin=data.moveymin;
if (data.moveymax!=undefined) $context.moveymax=data.moveymax;
if (data.func_show) $context.func_show=data.func_show;
if (data.func_hide) $context.func_hide=data.func_hide;
}
$context.popups=new Array();
return $context;
},
/**
Create popup window
@param data
initialization data:
- content - popup content - either string of jQuery object
- class_cont - default CSS class for popup content windows in this context
- autohide - true for automatic hiding of other popup windows upon showing new one
- automove - true for automatic popup move handling
- movelimitobj - if not null, specifies object limiting the movement of popup window
- movexmin - min. x coord for popup movement
- movexmax - max. x coord for popup movement
- moveymin - min. y coord for popup movement
- moveymax - max. y coord for popup movement
- func_show - function called upon showing the popup
- func_hide - function called upon hiding the popup
@param context
context object (null for no-context popup)
@return
popup object or null for error
*/
createPopup: function(data,$context)
{
if (!data)
{
this.m_lasterr="No data specified";
return false;
}
if (!data.content)
{
this.m_lasterr="No content specified";
return false;
}
$popup=$();
$popup.userdata={};
$popup.class_cont="";
$popup.automove=false;
$popup.movelimitobj=null;
$popup.movexmin=-Number.MAX_VALUE;
$popup.movexmax=Number.MAX_VALUE;
$popup.moveymin=-Number.MAX_VALUE;
$popup.moveymax=Number.MAX_VALUE;
$popup.func_show=null;
$popup.func_hide=null;
if ($context)
{
if ($context.class_cont) $popup.class_cont=$context.class_cont;
if ($context.automove) $popup.automove=$context.automove;
if ($context.func_show) $popup.func_show=$context.func_show;
if ($context.func_hide) $popup.func_hide=$context.func_hide;
$popup.movelimitobj=data.movelimitobj;
$popup.movexmin=data.movexmin;
$popup.movexmax=data.movexmax;
$popup.moveymin=data.moveymin;
$popup.moveymax=data.moveymax;
}
if (data.class_cont)
{
$popup.class_cont=data.class_cont;
}
if (data.automove)
{
$popup.automove=true;
}
if (data.movelimitobj) $popup.movelimitobj=data.movelimitobj;
if (data.movexmin!=undefined) $popup.movexmin=data.movexmin;
if (data.movexmax!=undefined) $popup.movexmax=data.movexmax;
if (data.moveymin!=undefined) $popup.moveymin=data.moveymin;
if (data.moveymax!=undefined) $popup.moveymax=data.moveymax;
if (data.func_show) $popup.func_show=data.func_show;
if (data.func_hide) $popup.func_hide=data.func_hide;
$cont=$("");
if ($.type(data.content)=="string"||$.type(data.content))
{
$cont.html(data.content);
}
else
{
$cont.append(data.content);
}
$cont.data("popup",$popup);
//@debug
//console.log("*** createpopup automove="+data.automove);
if (data.automove)
{
$cont.mousedown(function(e)
{
$pws.popup.handlePopupMove($(this).data("popup"),e);
});
}
$cont.hide();
$popup.contdiv=$cont;
$popup.isvisible=false;
if ($context)
{
$popup.context=$context;
$context.popups.push($popup);
}
return $popup;
},
/**
Get popup content div
@param $popup
popup object
@return
content div object
*/
getPopupDiv: function($popup)
{
return $popup.contdiv;
},
/**
Show popup div
@param $popup
popup object
*/
showPopupDiv: function($popup)
{
var $context=$popup.context;
if ($context)
{
if ($context.autohide)
{
var ii;
for (ii=0;ii<$context.popups.length;ii++)
{
if ($context.popups[ii]!=$popup)
{
$pws.popup.hidePopupDiv($context.popups[ii]);
}
}
}
}
$popup.isvisible=true;
$popup.contdiv.show();
if ($popup.func_show) $popup.func_show($popup.context,$popup);
},
/**
Hide popup div
@param $popup
popup object
*/
hidePopupDiv: function($popup)
{
if ($popup.isvisible)
{
$popup.isvisible=false;
$popup.contdiv.hide();
if ($popup.func_hide) $popup.func_hide($popup.context,$popup);
}
},
/**
Return popup visibility status
@param $popup
popup object
@return
true if popup is visible, false if popup is not visible
*/
isPopupVisible: function($popup)
{
return $popup.isvisible;
},
/**
Hide all popups from the context
@param $context
popup context
*/
hideContextPopups: function($context)
{
var ii;
for (ii=0;ii<$context.popups.length;ii++)
{
$pws.popup.hidePopupDiv($context.popups[ii]);
}
},
/**
Handle start of popup move (mousedown on "move handle")
@param $popup
popup object
@param e
event object
*/
handlePopupMove: function($popup,e)
{
var pos=$popup.contdiv.position();
$popup.basex=pos.left;
$popup.basey=pos.top;
$popup.mousex=e.pageX;
$popup.mousey=e.pageY;
$(window).mousemove(function(e)
{
var dx=e.pageX-$popup.mousex;
var dy=e.pageY-$popup.mousey;
var newx=$popup.basex+dx;
var newy=$popup.basey+dy;
var cw=$popup.contdiv.outerWidth();
var ch=$popup.contdiv.outerHeight();
if (newx<$popup.movexmin) newx=$popup.movexmin;
if (newy<$popup.moveymin) newy=$popup.moveymin;
if (newx>$popup.movexmax-cw) newx=$popup.movexmax-cw;
if (newy>$popup.moveymax-ch) newy=$popup.moveymax-ch;
if ($popup.movelimitobj)
{
var lpos=$popup.movelimitobj.position();
if (newxlpos.left+$popup.movelimitobj.width()-cw) newx=lpos.left+$popup.movelimitobj.width()-cw;
if (newy>lpos.top+$popup.movelimitobj.height()-ch) newy=lpos.top+$popup.movelimitobj.height()-ch;
}
$popup.contdiv.css("left",newx+"px");
$popup.contdiv.css("top",newy+"px");
});
$(window).mouseup(function(e)
{
$(window).unbind("mousemove");
$(window).unbind("mouseup");
});
},
/**
Set user data for the popup
@param $popup
popup object
@param name
user data item name
@param value
item value
*/
setUserData: function($popup,name,value)
{
$popup.userdata[name]=value;
},
/**
Get user data for the popup
@param $popup
popup object
@param name
user data item name
@return
item value
*/
getUserData: function($popup,name)
{
return $popup.userdata[name];
}
};