tvheadend/vendor/ext-3.4.1/docs/source/ScrollManager.html
Adam Sutton bafcfff42d webui: restructure webui/extjs source files
I want to keep the 3rd-party packages away from the main source
where possible.
2013-06-03 17:11:01 +01:00

226 lines
8 KiB
HTML

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>The source code</title>
<link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />
<script type="text/javascript" src="../resources/prettify/prettify.js"></script>
<style type="text/css">
.highlight { display: block; background-color: #ddd; }
</style>
<script type="text/javascript">
function highlight() {
document.getElementById(location.hash.replace(/#/, "")).className = "highlight";
}
</script>
</head>
<body onload="prettyPrint(); highlight();">
<pre class="prettyprint lang-js"><span id='Ext-dd-ScrollManager'>/**
</span> * @class Ext.dd.ScrollManager
* &lt;p&gt;Provides automatic scrolling of overflow regions in the page during drag operations.&lt;/p&gt;
* &lt;p&gt;The ScrollManager configs will be used as the defaults for any scroll container registered with it,
* but you can also override most of the configs per scroll container by adding a
* &lt;tt&gt;ddScrollConfig&lt;/tt&gt; object to the target element that contains these properties: {@link #hthresh},
* {@link #vthresh}, {@link #increment} and {@link #frequency}. Example usage:
* &lt;pre&gt;&lt;code&gt;
var el = Ext.get('scroll-ct');
el.ddScrollConfig = {
vthresh: 50,
hthresh: -1,
frequency: 100,
increment: 200
};
Ext.dd.ScrollManager.register(el);
&lt;/code&gt;&lt;/pre&gt;
* &lt;b&gt;Note: This class uses &quot;Point Mode&quot; and is untested in &quot;Intersect Mode&quot;.&lt;/b&gt;
* @singleton
*/
Ext.dd.ScrollManager = function(){
var ddm = Ext.dd.DragDropMgr;
var els = {};
var dragEl = null;
var proc = {};
var onStop = function(e){
dragEl = null;
clearProc();
};
var triggerRefresh = function(){
if(ddm.dragCurrent){
ddm.refreshCache(ddm.dragCurrent.groups);
}
};
var doScroll = function(){
if(ddm.dragCurrent){
var dds = Ext.dd.ScrollManager;
var inc = proc.el.ddScrollConfig ?
proc.el.ddScrollConfig.increment : dds.increment;
if(!dds.animate){
if(proc.el.scroll(proc.dir, inc)){
triggerRefresh();
}
}else{
proc.el.scroll(proc.dir, inc, true, dds.animDuration, triggerRefresh);
}
}
};
var clearProc = function(){
if(proc.id){
clearInterval(proc.id);
}
proc.id = 0;
proc.el = null;
proc.dir = &quot;&quot;;
};
var startProc = function(el, dir){
clearProc();
proc.el = el;
proc.dir = dir;
var group = el.ddScrollConfig ? el.ddScrollConfig.ddGroup : undefined,
freq = (el.ddScrollConfig &amp;&amp; el.ddScrollConfig.frequency)
? el.ddScrollConfig.frequency
: Ext.dd.ScrollManager.frequency;
if (group === undefined || ddm.dragCurrent.ddGroup == group) {
proc.id = setInterval(doScroll, freq);
}
};
var onFire = function(e, isDrop){
if(isDrop || !ddm.dragCurrent){ return; }
var dds = Ext.dd.ScrollManager;
if(!dragEl || dragEl != ddm.dragCurrent){
dragEl = ddm.dragCurrent;
// refresh regions on drag start
dds.refreshCache();
}
var xy = Ext.lib.Event.getXY(e);
var pt = new Ext.lib.Point(xy[0], xy[1]);
for(var id in els){
var el = els[id], r = el._region;
var c = el.ddScrollConfig ? el.ddScrollConfig : dds;
if(r &amp;&amp; r.contains(pt) &amp;&amp; el.isScrollable()){
if(r.bottom - pt.y &lt;= c.vthresh){
if(proc.el != el){
startProc(el, &quot;down&quot;);
}
return;
}else if(r.right - pt.x &lt;= c.hthresh){
if(proc.el != el){
startProc(el, &quot;left&quot;);
}
return;
}else if(pt.y - r.top &lt;= c.vthresh){
if(proc.el != el){
startProc(el, &quot;up&quot;);
}
return;
}else if(pt.x - r.left &lt;= c.hthresh){
if(proc.el != el){
startProc(el, &quot;right&quot;);
}
return;
}
}
}
clearProc();
};
ddm.fireEvents = ddm.fireEvents.createSequence(onFire, ddm);
ddm.stopDrag = ddm.stopDrag.createSequence(onStop, ddm);
return {
<span id='Ext-dd-ScrollManager-method-register'> /**
</span> * Registers new overflow element(s) to auto scroll
* @param {Mixed/Array} el The id of or the element to be scrolled or an array of either
*/
register : function(el){
if(Ext.isArray(el)){
for(var i = 0, len = el.length; i &lt; len; i++) {
this.register(el[i]);
}
}else{
el = Ext.get(el);
els[el.id] = el;
}
},
<span id='Ext-dd-ScrollManager-method-unregister'> /**
</span> * Unregisters overflow element(s) so they are no longer scrolled
* @param {Mixed/Array} el The id of or the element to be removed or an array of either
*/
unregister : function(el){
if(Ext.isArray(el)){
for(var i = 0, len = el.length; i &lt; len; i++) {
this.unregister(el[i]);
}
}else{
el = Ext.get(el);
delete els[el.id];
}
},
<span id='Ext-dd-ScrollManager-property-vthresh'> /**
</span> * The number of pixels from the top or bottom edge of a container the pointer needs to be to
* trigger scrolling (defaults to 25)
* @type Number
*/
vthresh : 25,
<span id='Ext-dd-ScrollManager-property-hthresh'> /**
</span> * The number of pixels from the right or left edge of a container the pointer needs to be to
* trigger scrolling (defaults to 25)
* @type Number
*/
hthresh : 25,
<span id='Ext-dd-ScrollManager-property-increment'> /**
</span> * The number of pixels to scroll in each scroll increment (defaults to 100)
* @type Number
*/
increment : 100,
<span id='Ext-dd-ScrollManager-property-frequency'> /**
</span> * The frequency of scrolls in milliseconds (defaults to 500)
* @type Number
*/
frequency : 500,
<span id='Ext-dd-ScrollManager-property-animate'> /**
</span> * True to animate the scroll (defaults to true)
* @type Boolean
*/
animate: true,
<span id='Ext-dd-ScrollManager-property-animDuration'> /**
</span> * The animation duration in seconds -
* MUST BE less than Ext.dd.ScrollManager.frequency! (defaults to .4)
* @type Number
*/
animDuration: .4,
<span id='Ext-dd-ScrollManager-property-ddGroup'> /**
</span> * The named drag drop {@link Ext.dd.DragSource#ddGroup group} to which this container belongs (defaults to undefined).
* If a ddGroup is specified, then container scrolling will only occur when a dragged object is in the same ddGroup.
* @type String
*/
ddGroup: undefined,
<span id='Ext-dd-ScrollManager-method-refreshCache'> /**
</span> * Manually trigger a cache refresh.
*/
refreshCache : function(){
for(var id in els){
if(typeof els[id] == 'object'){ // for people extending the object prototype
els[id]._region = els[id].getRegion();
}
}
}
};
}();</pre>
</body>
</html>