PageRenderTime 26ms CodeModel.GetById 25ms RepoModel.GetById 1ms app.codeStats 0ms

/ajax/libs/yui/3.8.0pr2/event-key/event-key-coverage.js

https://gitlab.com/Mirros/cdnjs
JavaScript | 243 lines | 160 code | 24 blank | 59 comment | 25 complexity | 6b444df88d328506f145720c8ffe9f3c MD5 | raw file
  1. if (typeof _yuitest_coverage == "undefined"){
  2. _yuitest_coverage = {};
  3. _yuitest_coverline = function(src, line){
  4. var coverage = _yuitest_coverage[src];
  5. if (!coverage.lines[line]){
  6. coverage.calledLines++;
  7. }
  8. coverage.lines[line]++;
  9. };
  10. _yuitest_coverfunc = function(src, name, line){
  11. var coverage = _yuitest_coverage[src],
  12. funcId = name + ":" + line;
  13. if (!coverage.functions[funcId]){
  14. coverage.calledFunctions++;
  15. }
  16. coverage.functions[funcId]++;
  17. };
  18. }
  19. _yuitest_coverage["build/event-key/event-key.js"] = {
  20. lines: {},
  21. functions: {},
  22. coveredLines: 0,
  23. calledLines: 0,
  24. coveredFunctions: 0,
  25. calledFunctions: 0,
  26. path: "build/event-key/event-key.js",
  27. code: []
  28. };
  29. _yuitest_coverage["build/event-key/event-key.js"].code=["YUI.add('event-key', function (Y, NAME) {","","/**"," * Functionality to listen for one or more specific key combinations."," * @module event"," * @submodule event-key"," */","","var ALT = \"+alt\","," CTRL = \"+ctrl\","," META = \"+meta\","," SHIFT = \"+shift\",",""," trim = Y.Lang.trim,",""," eventDef = {"," KEY_MAP: {"," enter : 13,"," esc : 27,"," backspace: 8,"," tab : 9,"," pageup : 33,"," pagedown : 34"," },",""," _typeRE: /^(up|down|press):/,"," _keysRE: /^(?:up|down|press):|\\+(alt|ctrl|meta|shift)/g,",""," processArgs: function (args) {"," var spec = args.splice(3,1)[0],"," mods = Y.Array.hash(spec.match(/\\+(?:alt|ctrl|meta|shift)\\b/g) || []),"," config = {"," type: this._typeRE.test(spec) ? RegExp.$1 : null,"," mods: mods,"," keys: null"," },"," // strip type and modifiers from spec, leaving only keyCodes"," bits = spec.replace(this._keysRE, ''),"," chr, uc, lc, i;",""," if (bits) {"," bits = bits.split(',');",""," config.keys = {};",""," // FIXME: need to support '65,esc' => keypress, keydown"," for (i = bits.length - 1; i >= 0; --i) {"," chr = trim(bits[i]);",""," // catch sloppy filters, trailing commas, etc 'a,,'"," if (!chr) {"," continue;"," }",""," // non-numerics are single characters or key names"," if (+chr == chr) {"," config.keys[chr] = mods;"," } else {"," lc = chr.toLowerCase();",""," if (this.KEY_MAP[lc]) {"," config.keys[this.KEY_MAP[lc]] = mods;"," // FIXME: '65,enter' defaults keydown for both"," if (!config.type) {"," config.type = \"down\"; // safest"," }"," } else {"," // FIXME: Character mapping only works for keypress"," // events. Otherwise, it uses String.fromCharCode()"," // from the keyCode, which is wrong."," chr = chr.charAt(0);"," uc = chr.toUpperCase();",""," if (mods[\"+shift\"]) {"," chr = uc;"," }",""," // FIXME: stupid assumption that"," // the keycode of the lower case == the"," // charCode of the upper case"," // a (key:65,char:97), A (key:65,char:65)"," config.keys[chr.charCodeAt(0)] ="," (chr === uc) ?"," // upper case chars get +shift free"," Y.merge(mods, { \"+shift\": true }) :"," mods;"," }"," }"," }"," }",""," if (!config.type) {"," config.type = \"press\";"," }",""," return config;"," },",""," on: function (node, sub, notifier, filter) {"," var spec = sub._extra,"," type = \"key\" + spec.type,"," keys = spec.keys,"," method = (filter) ? \"delegate\" : \"on\";",""," // Note: without specifying any keyCodes, this becomes a"," // horribly inefficient alias for 'keydown' (et al), but I"," // can't abort this subscription for a simple"," // Y.on('keypress', ...);"," // Please use keyCodes or just subscribe directly to keydown,"," // keyup, or keypress"," sub._detach = node[method](type, function (e) {"," var key = keys ? keys[e.which] : spec.mods;",""," if (key &&"," (!key[ALT] || (key[ALT] && e.altKey)) &&"," (!key[CTRL] || (key[CTRL] && e.ctrlKey)) &&"," (!key[META] || (key[META] && e.metaKey)) &&"," (!key[SHIFT] || (key[SHIFT] && e.shiftKey)))"," {"," notifier.fire(e);"," }"," }, filter);"," },",""," detach: function (node, sub, notifier) {"," sub._detach.detach();"," }"," };","","eventDef.delegate = eventDef.on;","eventDef.detachDelegate = eventDef.detach;","","/**"," * <p>Add a key listener. The listener will only be notified if the"," * keystroke detected meets the supplied specification. The"," * specification is a string that is defined as:</p>"," * "," * <dl>"," * <dt>spec</dt>"," * <dd><code>[{type}:]{code}[,{code}]*</code></dd>"," * <dt>type</dt>"," * <dd><code>\"down\", \"up\", or \"press\"</code></dd>"," * <dt>code</dt>"," * <dd><code>{keyCode|character|keyName}[+{modifier}]*</code></dd>"," * <dt>modifier</dt>"," * <dd><code>\"shift\", \"ctrl\", \"alt\", or \"meta\"</code></dd>"," * <dt>keyName</dt>"," * <dd><code>\"enter\", \"backspace\", \"esc\", \"tab\", \"pageup\", or \"pagedown\"</code></dd>"," * </dl>"," *"," * <p>Examples:</p>"," * <ul>"," * <li><code>Y.on(\"key\", callback, \"press:12,65+shift+ctrl\", \"#my-input\");</code></li>"," * <li><code>Y.delegate(\"key\", preventSubmit, \"enter\", \"#forms\", \"input[type=text]\");</code></li>"," * <li><code>Y.one(\"doc\").on(\"key\", viNav, \"j,k,l,;\");</code></li>"," * </ul>"," * "," * @event key"," * @for YUI"," * @param type {string} 'key'"," * @param fn {function} the function to execute"," * @param id {string|HTMLElement|collection} the element(s) to bind"," * @param spec {string} the keyCode and modifier specification"," * @param o optional context object"," * @param args 0..n additional arguments to provide to the listener."," * @return {Event.Handle} the detach handle"," */","Y.Event.define('key', eventDef, true);","","","}, '@VERSION@', {\"requires\": [\"event-synthetic\"]});"];
  30. _yuitest_coverage["build/event-key/event-key.js"].lines = {"1":0,"9":0,"30":0,"41":0,"42":0,"44":0,"47":0,"48":0,"51":0,"52":0,"56":0,"57":0,"59":0,"61":0,"62":0,"64":0,"65":0,"71":0,"72":0,"74":0,"75":0,"82":0,"92":0,"93":0,"96":0,"100":0,"111":0,"112":0,"114":0,"120":0,"126":0,"130":0,"131":0,"168":0};
  31. _yuitest_coverage["build/event-key/event-key.js"].functions = {"processArgs:29":0,"(anonymous 2):111":0,"on:99":0,"detach:125":0,"(anonymous 1):1":0};
  32. _yuitest_coverage["build/event-key/event-key.js"].coveredLines = 34;
  33. _yuitest_coverage["build/event-key/event-key.js"].coveredFunctions = 5;
  34. _yuitest_coverline("build/event-key/event-key.js", 1);
  35. YUI.add('event-key', function (Y, NAME) {
  36. /**
  37. * Functionality to listen for one or more specific key combinations.
  38. * @module event
  39. * @submodule event-key
  40. */
  41. _yuitest_coverfunc("build/event-key/event-key.js", "(anonymous 1)", 1);
  42. _yuitest_coverline("build/event-key/event-key.js", 9);
  43. var ALT = "+alt",
  44. CTRL = "+ctrl",
  45. META = "+meta",
  46. SHIFT = "+shift",
  47. trim = Y.Lang.trim,
  48. eventDef = {
  49. KEY_MAP: {
  50. enter : 13,
  51. esc : 27,
  52. backspace: 8,
  53. tab : 9,
  54. pageup : 33,
  55. pagedown : 34
  56. },
  57. _typeRE: /^(up|down|press):/,
  58. _keysRE: /^(?:up|down|press):|\+(alt|ctrl|meta|shift)/g,
  59. processArgs: function (args) {
  60. _yuitest_coverfunc("build/event-key/event-key.js", "processArgs", 29);
  61. _yuitest_coverline("build/event-key/event-key.js", 30);
  62. var spec = args.splice(3,1)[0],
  63. mods = Y.Array.hash(spec.match(/\+(?:alt|ctrl|meta|shift)\b/g) || []),
  64. config = {
  65. type: this._typeRE.test(spec) ? RegExp.$1 : null,
  66. mods: mods,
  67. keys: null
  68. },
  69. // strip type and modifiers from spec, leaving only keyCodes
  70. bits = spec.replace(this._keysRE, ''),
  71. chr, uc, lc, i;
  72. _yuitest_coverline("build/event-key/event-key.js", 41);
  73. if (bits) {
  74. _yuitest_coverline("build/event-key/event-key.js", 42);
  75. bits = bits.split(',');
  76. _yuitest_coverline("build/event-key/event-key.js", 44);
  77. config.keys = {};
  78. // FIXME: need to support '65,esc' => keypress, keydown
  79. _yuitest_coverline("build/event-key/event-key.js", 47);
  80. for (i = bits.length - 1; i >= 0; --i) {
  81. _yuitest_coverline("build/event-key/event-key.js", 48);
  82. chr = trim(bits[i]);
  83. // catch sloppy filters, trailing commas, etc 'a,,'
  84. _yuitest_coverline("build/event-key/event-key.js", 51);
  85. if (!chr) {
  86. _yuitest_coverline("build/event-key/event-key.js", 52);
  87. continue;
  88. }
  89. // non-numerics are single characters or key names
  90. _yuitest_coverline("build/event-key/event-key.js", 56);
  91. if (+chr == chr) {
  92. _yuitest_coverline("build/event-key/event-key.js", 57);
  93. config.keys[chr] = mods;
  94. } else {
  95. _yuitest_coverline("build/event-key/event-key.js", 59);
  96. lc = chr.toLowerCase();
  97. _yuitest_coverline("build/event-key/event-key.js", 61);
  98. if (this.KEY_MAP[lc]) {
  99. _yuitest_coverline("build/event-key/event-key.js", 62);
  100. config.keys[this.KEY_MAP[lc]] = mods;
  101. // FIXME: '65,enter' defaults keydown for both
  102. _yuitest_coverline("build/event-key/event-key.js", 64);
  103. if (!config.type) {
  104. _yuitest_coverline("build/event-key/event-key.js", 65);
  105. config.type = "down"; // safest
  106. }
  107. } else {
  108. // FIXME: Character mapping only works for keypress
  109. // events. Otherwise, it uses String.fromCharCode()
  110. // from the keyCode, which is wrong.
  111. _yuitest_coverline("build/event-key/event-key.js", 71);
  112. chr = chr.charAt(0);
  113. _yuitest_coverline("build/event-key/event-key.js", 72);
  114. uc = chr.toUpperCase();
  115. _yuitest_coverline("build/event-key/event-key.js", 74);
  116. if (mods["+shift"]) {
  117. _yuitest_coverline("build/event-key/event-key.js", 75);
  118. chr = uc;
  119. }
  120. // FIXME: stupid assumption that
  121. // the keycode of the lower case == the
  122. // charCode of the upper case
  123. // a (key:65,char:97), A (key:65,char:65)
  124. _yuitest_coverline("build/event-key/event-key.js", 82);
  125. config.keys[chr.charCodeAt(0)] =
  126. (chr === uc) ?
  127. // upper case chars get +shift free
  128. Y.merge(mods, { "+shift": true }) :
  129. mods;
  130. }
  131. }
  132. }
  133. }
  134. _yuitest_coverline("build/event-key/event-key.js", 92);
  135. if (!config.type) {
  136. _yuitest_coverline("build/event-key/event-key.js", 93);
  137. config.type = "press";
  138. }
  139. _yuitest_coverline("build/event-key/event-key.js", 96);
  140. return config;
  141. },
  142. on: function (node, sub, notifier, filter) {
  143. _yuitest_coverfunc("build/event-key/event-key.js", "on", 99);
  144. _yuitest_coverline("build/event-key/event-key.js", 100);
  145. var spec = sub._extra,
  146. type = "key" + spec.type,
  147. keys = spec.keys,
  148. method = (filter) ? "delegate" : "on";
  149. // Note: without specifying any keyCodes, this becomes a
  150. // horribly inefficient alias for 'keydown' (et al), but I
  151. // can't abort this subscription for a simple
  152. // Y.on('keypress', ...);
  153. // Please use keyCodes or just subscribe directly to keydown,
  154. // keyup, or keypress
  155. _yuitest_coverline("build/event-key/event-key.js", 111);
  156. sub._detach = node[method](type, function (e) {
  157. _yuitest_coverfunc("build/event-key/event-key.js", "(anonymous 2)", 111);
  158. _yuitest_coverline("build/event-key/event-key.js", 112);
  159. var key = keys ? keys[e.which] : spec.mods;
  160. _yuitest_coverline("build/event-key/event-key.js", 114);
  161. if (key &&
  162. (!key[ALT] || (key[ALT] && e.altKey)) &&
  163. (!key[CTRL] || (key[CTRL] && e.ctrlKey)) &&
  164. (!key[META] || (key[META] && e.metaKey)) &&
  165. (!key[SHIFT] || (key[SHIFT] && e.shiftKey)))
  166. {
  167. _yuitest_coverline("build/event-key/event-key.js", 120);
  168. notifier.fire(e);
  169. }
  170. }, filter);
  171. },
  172. detach: function (node, sub, notifier) {
  173. _yuitest_coverfunc("build/event-key/event-key.js", "detach", 125);
  174. _yuitest_coverline("build/event-key/event-key.js", 126);
  175. sub._detach.detach();
  176. }
  177. };
  178. _yuitest_coverline("build/event-key/event-key.js", 130);
  179. eventDef.delegate = eventDef.on;
  180. _yuitest_coverline("build/event-key/event-key.js", 131);
  181. eventDef.detachDelegate = eventDef.detach;
  182. /**
  183. * <p>Add a key listener. The listener will only be notified if the
  184. * keystroke detected meets the supplied specification. The
  185. * specification is a string that is defined as:</p>
  186. *
  187. * <dl>
  188. * <dt>spec</dt>
  189. * <dd><code>[{type}:]{code}[,{code}]*</code></dd>
  190. * <dt>type</dt>
  191. * <dd><code>"down", "up", or "press"</code></dd>
  192. * <dt>code</dt>
  193. * <dd><code>{keyCode|character|keyName}[+{modifier}]*</code></dd>
  194. * <dt>modifier</dt>
  195. * <dd><code>"shift", "ctrl", "alt", or "meta"</code></dd>
  196. * <dt>keyName</dt>
  197. * <dd><code>"enter", "backspace", "esc", "tab", "pageup", or "pagedown"</code></dd>
  198. * </dl>
  199. *
  200. * <p>Examples:</p>
  201. * <ul>
  202. * <li><code>Y.on("key", callback, "press:12,65+shift+ctrl", "#my-input");</code></li>
  203. * <li><code>Y.delegate("key", preventSubmit, "enter", "#forms", "input[type=text]");</code></li>
  204. * <li><code>Y.one("doc").on("key", viNav, "j,k,l,;");</code></li>
  205. * </ul>
  206. *
  207. * @event key
  208. * @for YUI
  209. * @param type {string} 'key'
  210. * @param fn {function} the function to execute
  211. * @param id {string|HTMLElement|collection} the element(s) to bind
  212. * @param spec {string} the keyCode and modifier specification
  213. * @param o optional context object
  214. * @param args 0..n additional arguments to provide to the listener.
  215. * @return {Event.Handle} the detach handle
  216. */
  217. _yuitest_coverline("build/event-key/event-key.js", 168);
  218. Y.Event.define('key', eventDef, true);
  219. }, '@VERSION@', {"requires": ["event-synthetic"]});