diff options
author | Barak Korren <[email protected]> | 2013-04-02 20:38:07 +0300 |
---|---|---|
committer | Barak Korren <[email protected]> | 2013-04-02 20:38:07 +0300 |
commit | 58a2577d48790c79adfd44bcfd662c980ce6cfe4 (patch) | |
tree | 523d814ea0b7b6f617fe515b186099c6e83fed72 /lib/dojo/_base/connect.js.uncompressed.js | |
parent | e470a273cf09562fb2f9c0c899002303f19c8d16 (diff) | |
parent | cc332603431102a682feda22b9cf0093a29f0176 (diff) |
Merge branch 'master' of https://github.com/gothfox/Tiny-Tiny-RSS.git
Diffstat (limited to 'lib/dojo/_base/connect.js.uncompressed.js')
-rw-r--r-- | lib/dojo/_base/connect.js.uncompressed.js | 374 |
1 files changed, 0 insertions, 374 deletions
diff --git a/lib/dojo/_base/connect.js.uncompressed.js b/lib/dojo/_base/connect.js.uncompressed.js deleted file mode 100644 index 233d20bcc..000000000 --- a/lib/dojo/_base/connect.js.uncompressed.js +++ /dev/null @@ -1,374 +0,0 @@ -define("dojo/_base/connect", ["./kernel", "../on", "../topic", "../aspect", "./event", "../mouse", "./sniff", "./lang", "../keys"], function(dojo, on, hub, aspect, eventModule, mouse, has, lang){ -// module: -// dojo/_base/connect - -has.add("events-keypress-typed", function(){ // keypresses should only occur a printable character is hit - var testKeyEvent = {charCode: 0}; - try{ - testKeyEvent = document.createEvent("KeyboardEvent"); - (testKeyEvent.initKeyboardEvent || testKeyEvent.initKeyEvent).call(testKeyEvent, "keypress", true, true, null, false, false, false, false, 9, 3); - }catch(e){} - return testKeyEvent.charCode == 0 && !has("opera"); -}); - -function connect_(obj, event, context, method, dontFix){ - method = lang.hitch(context, method); - if(!obj || !(obj.addEventListener || obj.attachEvent)){ - // it is a not a DOM node and we are using the dojo.connect style of treating a - // method like an event, must go right to aspect - return aspect.after(obj || dojo.global, event, method, true); - } - if(typeof event == "string" && event.substring(0, 2) == "on"){ - event = event.substring(2); - } - if(!obj){ - obj = dojo.global; - } - if(!dontFix){ - switch(event){ - // dojo.connect has special handling for these event types - case "keypress": - event = keypress; - break; - case "mouseenter": - event = mouse.enter; - break; - case "mouseleave": - event = mouse.leave; - break; - } - } - return on(obj, event, method, dontFix); -} - -var _punctMap = { - 106:42, - 111:47, - 186:59, - 187:43, - 188:44, - 189:45, - 190:46, - 191:47, - 192:96, - 219:91, - 220:92, - 221:93, - 222:39, - 229:113 -}; -var evtCopyKey = has("mac") ? "metaKey" : "ctrlKey"; - - -var _synthesizeEvent = function(evt, props){ - var faux = lang.mixin({}, evt, props); - setKeyChar(faux); - // FIXME: would prefer to use lang.hitch: lang.hitch(evt, evt.preventDefault); - // but it throws an error when preventDefault is invoked on Safari - // does Event.preventDefault not support "apply" on Safari? - faux.preventDefault = function(){ evt.preventDefault(); }; - faux.stopPropagation = function(){ evt.stopPropagation(); }; - return faux; -}; -function setKeyChar(evt){ - evt.keyChar = evt.charCode ? String.fromCharCode(evt.charCode) : ''; - evt.charOrCode = evt.keyChar || evt.keyCode; -} -var keypress; -if(has("events-keypress-typed")){ - // this emulates Firefox's keypress behavior where every keydown can correspond to a keypress - var _trySetKeyCode = function(e, code){ - try{ - // squelch errors when keyCode is read-only - // (e.g. if keyCode is ctrl or shift) - return (e.keyCode = code); - }catch(e){ - return 0; - } - }; - keypress = function(object, listener){ - var keydownSignal = on(object, "keydown", function(evt){ - // munge key/charCode - var k=evt.keyCode; - // These are Windows Virtual Key Codes - // http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/WinUI/WindowsUserInterface/UserInput/VirtualKeyCodes.asp - var unprintable = (k!=13) && k!=32 && (k!=27||!has("ie")) && (k<48||k>90) && (k<96||k>111) && (k<186||k>192) && (k<219||k>222) && k!=229; - // synthesize keypress for most unprintables and CTRL-keys - if(unprintable||evt.ctrlKey){ - var c = unprintable ? 0 : k; - if(evt.ctrlKey){ - if(k==3 || k==13){ - return listener.call(evt.currentTarget, evt); // IE will post CTRL-BREAK, CTRL-ENTER as keypress natively - }else if(c>95 && c<106){ - c -= 48; // map CTRL-[numpad 0-9] to ASCII - }else if((!evt.shiftKey)&&(c>=65&&c<=90)){ - c += 32; // map CTRL-[A-Z] to lowercase - }else{ - c = _punctMap[c] || c; // map other problematic CTRL combinations to ASCII - } - } - // simulate a keypress event - var faux = _synthesizeEvent(evt, {type: 'keypress', faux: true, charCode: c}); - listener.call(evt.currentTarget, faux); - if(has("ie")){ - _trySetKeyCode(evt, faux.keyCode); - } - } - }); - var keypressSignal = on(object, "keypress", function(evt){ - var c = evt.charCode; - c = c>=32 ? c : 0; - evt = _synthesizeEvent(evt, {charCode: c, faux: true}); - return listener.call(this, evt); - }); - return { - remove: function(){ - keydownSignal.remove(); - keypressSignal.remove(); - } - }; - }; -}else{ - if(has("opera")){ - keypress = function(object, listener){ - return on(object, "keypress", function(evt){ - var c = evt.which; - if(c==3){ - c=99; // Mozilla maps CTRL-BREAK to CTRL-c - } - // can't trap some keys at all, like INSERT and DELETE - // there is no differentiating info between DELETE and ".", or INSERT and "-" - c = c<32 && !evt.shiftKey ? 0 : c; - if(evt.ctrlKey && !evt.shiftKey && c>=65 && c<=90){ - // lowercase CTRL-[A-Z] keys - c += 32; - } - return listener.call(this, _synthesizeEvent(evt, { charCode: c })); - }); - }; - }else{ - keypress = function(object, listener){ - return on(object, "keypress", function(evt){ - setKeyChar(evt); - return listener.call(this, evt); - }); - }; - } -} - -var connect = { - // summary: - // This module defines the dojo.connect API. - // This modules also provides keyboard event handling helpers. - // This module exports an extension event for emulating Firefox's keypress handling. - // However, this extension event exists primarily for backwards compatibility and - // is not recommended. WebKit and IE uses an alternate keypress handling (only - // firing for printable characters, to distinguish from keydown events), and most - // consider the WebKit/IE behavior more desirable. - - _keypress:keypress, - - connect:function(obj, event, context, method, dontFix){ - // summary: - // `dojo.connect` is a deprecated event handling and delegation method in - // Dojo. It allows one function to "listen in" on the execution of - // any other, triggering the second whenever the first is called. Many - // listeners may be attached to a function, and source functions may - // be either regular function calls or DOM events. - // - // description: - // Connects listeners to actions, so that after event fires, a - // listener is called with the same arguments passed to the original - // function. - // - // Since `dojo.connect` allows the source of events to be either a - // "regular" JavaScript function or a DOM event, it provides a uniform - // interface for listening to all the types of events that an - // application is likely to deal with though a single, unified - // interface. DOM programmers may want to think of it as - // "addEventListener for everything and anything". - // - // When setting up a connection, the `event` parameter must be a - // string that is the name of the method/event to be listened for. If - // `obj` is null, `kernel.global` is assumed, meaning that connections - // to global methods are supported but also that you may inadvertently - // connect to a global by passing an incorrect object name or invalid - // reference. - // - // `dojo.connect` generally is forgiving. If you pass the name of a - // function or method that does not yet exist on `obj`, connect will - // not fail, but will instead set up a stub method. Similarly, null - // arguments may simply be omitted such that fewer than 4 arguments - // may be required to set up a connection See the examples for details. - // - // The return value is a handle that is needed to - // remove this connection with `dojo.disconnect`. - // - // obj: Object? - // The source object for the event function. - // Defaults to `kernel.global` if null. - // If obj is a DOM node, the connection is delegated - // to the DOM event manager (unless dontFix is true). - // - // event: String - // String name of the event function in obj. - // I.e. identifies a property `obj[event]`. - // - // context: Object|null - // The object that method will receive as "this". - // - // If context is null and method is a function, then method - // inherits the context of event. - // - // If method is a string then context must be the source - // object object for method (context[method]). If context is null, - // kernel.global is used. - // - // method: String|Function - // A function reference, or name of a function in context. - // The function identified by method fires after event does. - // method receives the same arguments as the event. - // See context argument comments for information on method's scope. - // - // dontFix: Boolean? - // If obj is a DOM node, set dontFix to true to prevent delegation - // of this connection to the DOM event manager. - // - // example: - // When obj.onchange(), do ui.update(): - // | dojo.connect(obj, "onchange", ui, "update"); - // | dojo.connect(obj, "onchange", ui, ui.update); // same - // - // example: - // Using return value for disconnect: - // | var link = dojo.connect(obj, "onchange", ui, "update"); - // | ... - // | dojo.disconnect(link); - // - // example: - // When onglobalevent executes, watcher.handler is invoked: - // | dojo.connect(null, "onglobalevent", watcher, "handler"); - // - // example: - // When ob.onCustomEvent executes, customEventHandler is invoked: - // | dojo.connect(ob, "onCustomEvent", null, "customEventHandler"); - // | dojo.connect(ob, "onCustomEvent", "customEventHandler"); // same - // - // example: - // When ob.onCustomEvent executes, customEventHandler is invoked - // with the same scope (this): - // | dojo.connect(ob, "onCustomEvent", null, customEventHandler); - // | dojo.connect(ob, "onCustomEvent", customEventHandler); // same - // - // example: - // When globalEvent executes, globalHandler is invoked - // with the same scope (this): - // | dojo.connect(null, "globalEvent", null, globalHandler); - // | dojo.connect("globalEvent", globalHandler); // same - - // normalize arguments - var a=arguments, args=[], i=0; - // if a[0] is a String, obj was omitted - args.push(typeof a[0] == "string" ? null : a[i++], a[i++]); - // if the arg-after-next is a String or Function, context was NOT omitted - var a1 = a[i+1]; - args.push(typeof a1 == "string" || typeof a1 == "function" ? a[i++] : null, a[i++]); - // absorb any additional arguments - for(var l=a.length; i<l; i++){ args.push(a[i]); } - return connect_.apply(this, args); - }, - - disconnect:function(handle){ - // summary: - // Remove a link created by dojo.connect. - // description: - // Removes the connection between event and the method referenced by handle. - // handle: Handle - // the return value of the dojo.connect call that created the connection. - - if(handle){ - handle.remove(); - } - }, - - subscribe:function(topic, context, method){ - // summary: - // Attach a listener to a named topic. The listener function is invoked whenever the - // named topic is published (see: dojo.publish). - // Returns a handle which is needed to unsubscribe this listener. - // topic: String - // The topic to which to subscribe. - // context: Object? - // Scope in which method will be invoked, or null for default scope. - // method: String|Function - // The name of a function in context, or a function reference. This is the function that - // is invoked when topic is published. - // example: - // | dojo.subscribe("alerts", null, function(caption, message){ alert(caption + "\n" + message); }); - // | dojo.publish("alerts", [ "read this", "hello world" ]); - return hub.subscribe(topic, lang.hitch(context, method)); - }, - - publish:function(topic, args){ - // summary: - // Invoke all listener method subscribed to topic. - // topic: String - // The name of the topic to publish. - // args: Array? - // An array of arguments. The arguments will be applied - // to each topic subscriber (as first class parameters, via apply). - // example: - // | dojo.subscribe("alerts", null, function(caption, message){ alert(caption + "\n" + message); }; - // | dojo.publish("alerts", [ "read this", "hello world" ]); - return hub.publish.apply(hub, [topic].concat(args)); - }, - - connectPublisher:function(topic, obj, event){ - // summary: - // Ensure that every time obj.event() is called, a message is published - // on the topic. Returns a handle which can be passed to - // dojo.disconnect() to disable subsequent automatic publication on - // the topic. - // topic: String - // The name of the topic to publish. - // obj: Object? - // The source object for the event function. Defaults to kernel.global - // if null. - // event: String - // The name of the event function in obj. - // I.e. identifies a property obj[event]. - // example: - // | dojo.connectPublisher("/ajax/start", dojo, "xhrGet"); - var pf = function(){ connect.publish(topic, arguments); }; - return event ? connect.connect(obj, event, pf) : connect.connect(obj, pf); //Handle - }, - - isCopyKey: function(e){ - // summary: - // Checks an event for the copy key (meta on Mac, and ctrl anywhere else) - // e: Event - // Event object to examine - return e[evtCopyKey]; // Boolean - } -}; - -connect.unsubscribe = connect.disconnect; -/*===== - connect.unsubscribe = function(handle){ - // summary: - // Remove a topic listener. - // handle: Handle - // The handle returned from a call to subscribe. - // example: - // | var alerter = dojo.subscribe("alerts", null, function(caption, message){ alert(caption + "\n" + message); }; - // | ... - // | dojo.unsubscribe(alerter); - }; - =====*/ - - 1 && lang.mixin(dojo, connect); -return connect; - -}); - - |