]>
git.wh0rd.org - tt-rss.git/blob - lib/dijit/typematic.js.uncompressed.js
1 define("dijit/typematic", [
2 "dojo/_base/array", // array.forEach
3 "dojo/_base/connect", // connect.connect
4 "dojo/_base/event", // event.stop
5 "dojo/_base/kernel", // kernel.deprecated
6 "dojo/_base/lang", // lang.mixin, lang.hitch
8 "dojo/sniff", // has("ie")
9 "./main" // setting dijit.typematic global
10 ], function(array
, connect
, event
, kernel
, lang
, on
, has
, dijit
){
15 var typematic
= (dijit
.typematic
= {
17 // These functions are used to repetitively call a user specified callback
18 // method when a specific key or mouse click over a specific DOM node is
19 // held down for a specific amount of time.
20 // Only 1 such event is allowed to occur on the browser page at 1 time.
22 _fireEventAndReload: function(){
24 this._callback(++this._count
, this._node
, this._evt
);
26 // Schedule next event, timer is at most minDelay (default 10ms) to avoid
27 // browser overload (particularly avoiding starving DOH robot so it never gets to send a mouseup)
28 this._currentTimeout
= Math
.max(
29 this._currentTimeout
< 0 ? this._initialDelay
:
30 (this._subsequentDelay
> 1 ? this._subsequentDelay
: Math
.round(this._currentTimeout
* this._subsequentDelay
)),
32 this._timer
= setTimeout(lang
.hitch(this, "_fireEventAndReload"), this._currentTimeout
);
35 trigger: function(/*Event*/ evt
, /*Object*/ _this
, /*DOMNode*/ node
, /*Function*/ callback
, /*Object*/ obj
, /*Number?*/ subsequentDelay
, /*Number?*/ initialDelay
, /*Number?*/ minDelay
){
37 // Start a timed, repeating callback sequence.
38 // If already started, the function call is ignored.
39 // This method is not normally called by the user but can be
40 // when the normal listener code is insufficient.
42 // key or mouse event object to pass to the user callback
44 // pointer to the user's widget space.
46 // the DOM node object to pass the the callback function
48 // function to call until the sequence is stopped called with 3 parameters:
50 // integer representing number of repeated calls (0..n) with -1 indicating the iteration has stopped
52 // the DOM node object passed in
54 // key or mouse event object
56 // user space object used to uniquely identify each typematic sequence
58 // if > 1, the number of milliseconds until the 3->n events occur
59 // or else the fractional time multiplier for the next event's delay, default=0.9
61 // the number of milliseconds until the 2nd event occurs, default=500ms
63 // the maximum delay in milliseconds for event to fire, default=10ms
66 this._initialDelay
= initialDelay
|| 500;
67 this._subsequentDelay
= subsequentDelay
|| 0.90;
68 this._minDelay
= minDelay
|| 10;
71 this._currentTimeout
= -1;
73 this._callback
= lang
.hitch(_this
, callback
);
74 this._evt
= { faux
: true };
76 if(attr
!= "layerX" && attr
!= "layerY"){ // prevent WebKit warnings
78 if(typeof v
!= "function" && typeof v
!= "undefined"){ this._evt
[attr
] = v
}
81 this._fireEventAndReload();
87 // Stop an ongoing timed, repeating callback sequence.
89 clearTimeout(this._timer
);
93 this._callback(-1, this._node
, this._evt
);
98 addKeyListener: function(/*DOMNode*/ node
, /*Object*/ keyObject
, /*Object*/ _this
, /*Function*/ callback
, /*Number*/ subsequentDelay
, /*Number*/ initialDelay
, /*Number?*/ minDelay
){
100 // Start listening for a specific typematic key.
101 // See also the trigger method for other parameters.
103 // an object defining the key to listen for:
105 // - charOrCode: the printable character (string) or keyCode (number) to listen for.
106 // - keyCode: (deprecated - use charOrCode) the keyCode (number) to listen for (implies charCode = 0).
107 // - charCode: (deprecated - use charOrCode) the charCode (number) to listen for.
108 // - ctrlKey: desired ctrl key state to initiate the callback sequence:
110 // - released (false)
111 // - either (unspecified)
112 // - altKey: same as ctrlKey but for the alt key
113 // - shiftKey: same as ctrlKey but for the shift key
115 // a connection handle
117 if(keyObject
.keyCode
){
118 keyObject
.charOrCode
= keyObject
.keyCode
;
119 kernel
.deprecated("keyCode attribute parameter for dijit.typematic.addKeyListener is deprecated. Use charOrCode instead.", "", "2.0");
120 }else if(keyObject
.charCode
){
121 keyObject
.charOrCode
= String
.fromCharCode(keyObject
.charCode
);
122 kernel
.deprecated("charCode attribute parameter for dijit.typematic.addKeyListener is deprecated. Use charOrCode instead.", "", "2.0");
125 on(node
, connect
._keypress
, lang
.hitch(this, function(evt
){
126 if(evt
.charOrCode
== keyObject
.charOrCode
&&
127 (keyObject
.ctrlKey
=== undefined || keyObject
.ctrlKey
== evt
.ctrlKey
) &&
128 (keyObject
.altKey
=== undefined || keyObject
.altKey
== evt
.altKey
) &&
129 (keyObject
.metaKey
=== undefined || keyObject
.metaKey
== (evt
.metaKey
|| false)) && // IE doesn't even set metaKey
130 (keyObject
.shiftKey
=== undefined || keyObject
.shiftKey
== evt
.shiftKey
)){
132 typematic
.trigger(evt
, _this
, node
, callback
, keyObject
, subsequentDelay
, initialDelay
, minDelay
);
133 }else if(typematic
._obj
== keyObject
){
137 on(node
, "keyup", lang
.hitch(this, function(){
138 if(typematic
._obj
== keyObject
){
143 return { remove: function(){ array
.forEach(handles
, function(h
){ h
.remove(); }); } };
146 addMouseListener: function(/*DOMNode*/ node
, /*Object*/ _this
, /*Function*/ callback
, /*Number*/ subsequentDelay
, /*Number*/ initialDelay
, /*Number?*/ minDelay
){
148 // Start listening for a typematic mouse click.
149 // See the trigger method for other parameters.
151 // a connection handle
153 on(node
, "mousedown", lang
.hitch(this, function(evt
){
154 evt
.preventDefault();
155 typematic
.trigger(evt
, _this
, node
, callback
, node
, subsequentDelay
, initialDelay
, minDelay
);
157 on(node
, "mouseup", lang
.hitch(this, function(evt
){
159 evt
.preventDefault();
163 on(node
, "mouseout", lang
.hitch(this, function(evt
){
165 evt
.preventDefault();
169 on(node
, "dblclick", lang
.hitch(this, function(evt
){
170 evt
.preventDefault();
172 typematic
.trigger(evt
, _this
, node
, callback
, node
, subsequentDelay
, initialDelay
, minDelay
);
173 setTimeout(lang
.hitch(this, typematic
.stop
), 50);
177 return { remove: function(){ array
.forEach(handles
, function(h
){ h
.remove(); }); } };
180 addListener: function(/*Node*/ mouseNode
, /*Node*/ keyNode
, /*Object*/ keyObject
, /*Object*/ _this
, /*Function*/ callback
, /*Number*/ subsequentDelay
, /*Number*/ initialDelay
, /*Number?*/ minDelay
){
182 // Start listening for a specific typematic key and mouseclick.
183 // This is a thin wrapper to addKeyListener and addMouseListener.
184 // See the addMouseListener and addKeyListener methods for other parameters.
186 // the DOM node object to listen on for mouse events.
188 // the DOM node object to listen on for key events.
190 // a connection handle
192 this.addKeyListener(keyNode
, keyObject
, _this
, callback
, subsequentDelay
, initialDelay
, minDelay
),
193 this.addMouseListener(mouseNode
, _this
, callback
, subsequentDelay
, initialDelay
, minDelay
)
195 return { remove: function(){ array
.forEach(handles
, function(h
){ h
.remove(); }); } };