browser.js
上传用户:kimgenplus
上传日期:2016-06-05
资源大小:20877k
文件大小:13k
源码类别:

OA系统

开发平台:

Java

  1. /*
  2. Copyright (c) 2004-2006, The Dojo Foundation
  3. All Rights Reserved.
  4. Licensed under the Academic Free License version 2.1 or above OR the
  5. modified BSD license. For more information on Dojo licensing, see:
  6. http://dojotoolkit.org/community/licensing.shtml
  7. */
  8. dojo.provide("dojo.event.browser");
  9. dojo.require("dojo.event.common");
  10. dojo._ie_clobber = new function () {
  11. this.clobberNodes = [];
  12. function nukeProp(node, prop) {
  13. try {
  14. node[prop] = null;
  15. }
  16. catch (e) {
  17. }
  18. try {
  19. delete node[prop];
  20. }
  21. catch (e) {
  22. }
  23. try {
  24. node.removeAttribute(prop);
  25. }
  26. catch (e) {
  27. }
  28. }
  29. this.clobber = function (nodeRef) {
  30. var na;
  31. var tna;
  32. if (nodeRef) {
  33. tna = nodeRef.all || nodeRef.getElementsByTagName("*");
  34. na = [nodeRef];
  35. for (var x = 0; x < tna.length; x++) {
  36. if (tna[x]["__doClobber__"]) {
  37. na.push(tna[x]);
  38. }
  39. }
  40. } else {
  41. try {
  42. window.onload = null;
  43. }
  44. catch (e) {
  45. }
  46. na = (this.clobberNodes.length) ? this.clobberNodes : document.all;
  47. }
  48. tna = null;
  49. var basis = {};
  50. for (var i = na.length - 1; i >= 0; i = i - 1) {
  51. var el = na[i];
  52. try {
  53. if (el && el["__clobberAttrs__"]) {
  54. for (var j = 0; j < el.__clobberAttrs__.length; j++) {
  55. nukeProp(el, el.__clobberAttrs__[j]);
  56. }
  57. nukeProp(el, "__clobberAttrs__");
  58. nukeProp(el, "__doClobber__");
  59. }
  60. }
  61. catch (e) {
  62. }
  63. }
  64. na = null;
  65. };
  66. };
  67. if (dojo.render.html.ie) {
  68. dojo.addOnUnload(function () {
  69. dojo._ie_clobber.clobber();
  70. try {
  71. if ((dojo["widget"]) && (dojo.widget["manager"])) {
  72. dojo.widget.manager.destroyAll();
  73. }
  74. }
  75. catch (e) {
  76. }
  77. if (dojo.widget) {
  78. for (var name in dojo.widget._templateCache) {
  79. if (dojo.widget._templateCache[name].node) {
  80. dojo.dom.destroyNode(dojo.widget._templateCache[name].node);
  81. dojo.widget._templateCache[name].node = null;
  82. delete dojo.widget._templateCache[name].node;
  83. }
  84. }
  85. }
  86. try {
  87. window.onload = null;
  88. }
  89. catch (e) {
  90. }
  91. try {
  92. window.onunload = null;
  93. }
  94. catch (e) {
  95. }
  96. dojo._ie_clobber.clobberNodes = [];
  97. });
  98. }
  99. dojo.event.browser = new function () {
  100. var clobberIdx = 0;
  101. this.normalizedEventName = function (eventName) {
  102. switch (eventName) {
  103.   case "CheckboxStateChange":
  104.   case "DOMAttrModified":
  105.   case "DOMMenuItemActive":
  106.   case "DOMMenuItemInactive":
  107.   case "DOMMouseScroll":
  108.   case "DOMNodeInserted":
  109.   case "DOMNodeRemoved":
  110.   case "RadioStateChange":
  111. return eventName;
  112. break;
  113.   default:
  114. var lcn = eventName.toLowerCase();
  115. return (lcn.indexOf("on") == 0) ? lcn.substr(2) : lcn;
  116. break;
  117. }
  118. };
  119. this.clean = function (node) {
  120. if (dojo.render.html.ie) {
  121. dojo._ie_clobber.clobber(node);
  122. }
  123. };
  124. this.addClobberNode = function (node) {
  125. if (!dojo.render.html.ie) {
  126. return;
  127. }
  128. if (!node["__doClobber__"]) {
  129. node.__doClobber__ = true;
  130. dojo._ie_clobber.clobberNodes.push(node);
  131. node.__clobberAttrs__ = [];
  132. }
  133. };
  134. this.addClobberNodeAttrs = function (node, props) {
  135. if (!dojo.render.html.ie) {
  136. return;
  137. }
  138. this.addClobberNode(node);
  139. for (var x = 0; x < props.length; x++) {
  140. node.__clobberAttrs__.push(props[x]);
  141. }
  142. };
  143. this.removeListener = function (node, evtName, fp, capture) {
  144. if (!capture) {
  145. var capture = false;
  146. }
  147. evtName = dojo.event.browser.normalizedEventName(evtName);
  148. if (evtName == "key") {
  149. if (dojo.render.html.ie) {
  150. this.removeListener(node, "onkeydown", fp, capture);
  151. }
  152. evtName = "keypress";
  153. }
  154. if (node.removeEventListener) {
  155. node.removeEventListener(evtName, fp, capture);
  156. }
  157. };
  158. this.addListener = function (node, evtName, fp, capture, dontFix) {
  159. if (!node) {
  160. return;
  161. }
  162. if (!capture) {
  163. var capture = false;
  164. }
  165. evtName = dojo.event.browser.normalizedEventName(evtName);
  166. if (evtName == "key") {
  167. if (dojo.render.html.ie) {
  168. this.addListener(node, "onkeydown", fp, capture, dontFix);
  169. }
  170. evtName = "keypress";
  171. }
  172. if (!dontFix) {
  173. var newfp = function (evt) {
  174. if (!evt) {
  175. evt = window.event;
  176. }
  177. var ret = fp(dojo.event.browser.fixEvent(evt, this));
  178. if (capture) {
  179. dojo.event.browser.stopEvent(evt);
  180. }
  181. return ret;
  182. };
  183. } else {
  184. newfp = fp;
  185. }
  186. if (node.addEventListener) {
  187. node.addEventListener(evtName, newfp, capture);
  188. return newfp;
  189. } else {
  190. evtName = "on" + evtName;
  191. if (typeof node[evtName] == "function") {
  192. var oldEvt = node[evtName];
  193. node[evtName] = function (e) {
  194. oldEvt(e);
  195. return newfp(e);
  196. };
  197. } else {
  198. node[evtName] = newfp;
  199. }
  200. if (dojo.render.html.ie) {
  201. this.addClobberNodeAttrs(node, [evtName]);
  202. }
  203. return newfp;
  204. }
  205. };
  206. this.isEvent = function (obj) {
  207. return (typeof obj != "undefined") && (obj) && (typeof Event != "undefined") && (obj.eventPhase);
  208. };
  209. this.currentEvent = null;
  210. this.callListener = function (listener, curTarget) {
  211. if (typeof listener != "function") {
  212. dojo.raise("listener not a function: " + listener);
  213. }
  214. dojo.event.browser.currentEvent.currentTarget = curTarget;
  215. return listener.call(curTarget, dojo.event.browser.currentEvent);
  216. };
  217. this._stopPropagation = function () {
  218. dojo.event.browser.currentEvent.cancelBubble = true;
  219. };
  220. this._preventDefault = function () {
  221. dojo.event.browser.currentEvent.returnValue = false;
  222. };
  223. this.keys = {KEY_BACKSPACE:8, KEY_TAB:9, KEY_CLEAR:12, KEY_ENTER:13, KEY_SHIFT:16, KEY_CTRL:17, KEY_ALT:18, KEY_PAUSE:19, KEY_CAPS_LOCK:20, KEY_ESCAPE:27, KEY_SPACE:32, KEY_PAGE_UP:33, KEY_PAGE_DOWN:34, KEY_END:35, KEY_HOME:36, KEY_LEFT_ARROW:37, KEY_UP_ARROW:38, KEY_RIGHT_ARROW:39, KEY_DOWN_ARROW:40, KEY_INSERT:45, KEY_DELETE:46, KEY_HELP:47, KEY_LEFT_WINDOW:91, KEY_RIGHT_WINDOW:92, KEY_SELECT:93, KEY_NUMPAD_0:96, KEY_NUMPAD_1:97, KEY_NUMPAD_2:98, KEY_NUMPAD_3:99, KEY_NUMPAD_4:100, KEY_NUMPAD_5:101, KEY_NUMPAD_6:102, KEY_NUMPAD_7:103, KEY_NUMPAD_8:104, KEY_NUMPAD_9:105, KEY_NUMPAD_MULTIPLY:106, KEY_NUMPAD_PLUS:107, KEY_NUMPAD_ENTER:108, KEY_NUMPAD_MINUS:109, KEY_NUMPAD_PERIOD:110, KEY_NUMPAD_DIVIDE:111, KEY_F1:112, KEY_F2:113, KEY_F3:114, KEY_F4:115, KEY_F5:116, KEY_F6:117, KEY_F7:118, KEY_F8:119, KEY_F9:120, KEY_F10:121, KEY_F11:122, KEY_F12:123, KEY_F13:124, KEY_F14:125, KEY_F15:126, KEY_NUM_LOCK:144, KEY_SCROLL_LOCK:145};
  224. this.revKeys = [];
  225. for (var key in this.keys) {
  226. this.revKeys[this.keys[key]] = key;
  227. }
  228. this.fixEvent = function (evt, sender) {
  229. if (!evt) {
  230. if (window["event"]) {
  231. evt = window.event;
  232. }
  233. }
  234. if ((evt["type"]) && (evt["type"].indexOf("key") == 0)) {
  235. evt.keys = this.revKeys;
  236. for (var key in this.keys) {
  237. evt[key] = this.keys[key];
  238. }
  239. if (evt["type"] == "keydown" && dojo.render.html.ie) {
  240. switch (evt.keyCode) {
  241.   case evt.KEY_SHIFT:
  242.   case evt.KEY_CTRL:
  243.   case evt.KEY_ALT:
  244.   case evt.KEY_CAPS_LOCK:
  245.   case evt.KEY_LEFT_WINDOW:
  246.   case evt.KEY_RIGHT_WINDOW:
  247.   case evt.KEY_SELECT:
  248.   case evt.KEY_NUM_LOCK:
  249.   case evt.KEY_SCROLL_LOCK:
  250.   case evt.KEY_NUMPAD_0:
  251.   case evt.KEY_NUMPAD_1:
  252.   case evt.KEY_NUMPAD_2:
  253.   case evt.KEY_NUMPAD_3:
  254.   case evt.KEY_NUMPAD_4:
  255.   case evt.KEY_NUMPAD_5:
  256.   case evt.KEY_NUMPAD_6:
  257.   case evt.KEY_NUMPAD_7:
  258.   case evt.KEY_NUMPAD_8:
  259.   case evt.KEY_NUMPAD_9:
  260.   case evt.KEY_NUMPAD_PERIOD:
  261. break;
  262.   case evt.KEY_NUMPAD_MULTIPLY:
  263.   case evt.KEY_NUMPAD_PLUS:
  264.   case evt.KEY_NUMPAD_ENTER:
  265.   case evt.KEY_NUMPAD_MINUS:
  266.   case evt.KEY_NUMPAD_DIVIDE:
  267. break;
  268.   case evt.KEY_PAUSE:
  269.   case evt.KEY_TAB:
  270.   case evt.KEY_BACKSPACE:
  271.   case evt.KEY_ENTER:
  272.   case evt.KEY_ESCAPE:
  273.   case evt.KEY_PAGE_UP:
  274.   case evt.KEY_PAGE_DOWN:
  275.   case evt.KEY_END:
  276.   case evt.KEY_HOME:
  277.   case evt.KEY_LEFT_ARROW:
  278.   case evt.KEY_UP_ARROW:
  279.   case evt.KEY_RIGHT_ARROW:
  280.   case evt.KEY_DOWN_ARROW:
  281.   case evt.KEY_INSERT:
  282.   case evt.KEY_DELETE:
  283.   case evt.KEY_F1:
  284.   case evt.KEY_F2:
  285.   case evt.KEY_F3:
  286.   case evt.KEY_F4:
  287.   case evt.KEY_F5:
  288.   case evt.KEY_F6:
  289.   case evt.KEY_F7:
  290.   case evt.KEY_F8:
  291.   case evt.KEY_F9:
  292.   case evt.KEY_F10:
  293.   case evt.KEY_F11:
  294.   case evt.KEY_F12:
  295.   case evt.KEY_F12:
  296.   case evt.KEY_F13:
  297.   case evt.KEY_F14:
  298.   case evt.KEY_F15:
  299.   case evt.KEY_CLEAR:
  300.   case evt.KEY_HELP:
  301. evt.key = evt.keyCode;
  302. break;
  303.   default:
  304. if (evt.ctrlKey || evt.altKey) {
  305. var unifiedCharCode = evt.keyCode;
  306. if (unifiedCharCode >= 65 && unifiedCharCode <= 90 && evt.shiftKey == false) {
  307. unifiedCharCode += 32;
  308. }
  309. if (unifiedCharCode >= 1 && unifiedCharCode <= 26 && evt.ctrlKey) {
  310. unifiedCharCode += 96;
  311. }
  312. evt.key = String.fromCharCode(unifiedCharCode);
  313. }
  314. }
  315. } else {
  316. if (evt["type"] == "keypress") {
  317. if (dojo.render.html.opera) {
  318. if (evt.which == 0) {
  319. evt.key = evt.keyCode;
  320. } else {
  321. if (evt.which > 0) {
  322. switch (evt.which) {
  323.   case evt.KEY_SHIFT:
  324.   case evt.KEY_CTRL:
  325.   case evt.KEY_ALT:
  326.   case evt.KEY_CAPS_LOCK:
  327.   case evt.KEY_NUM_LOCK:
  328.   case evt.KEY_SCROLL_LOCK:
  329. break;
  330.   case evt.KEY_PAUSE:
  331.   case evt.KEY_TAB:
  332.   case evt.KEY_BACKSPACE:
  333.   case evt.KEY_ENTER:
  334.   case evt.KEY_ESCAPE:
  335. evt.key = evt.which;
  336. break;
  337.   default:
  338. var unifiedCharCode = evt.which;
  339. if ((evt.ctrlKey || evt.altKey || evt.metaKey) && (evt.which >= 65 && evt.which <= 90 && evt.shiftKey == false)) {
  340. unifiedCharCode += 32;
  341. }
  342. evt.key = String.fromCharCode(unifiedCharCode);
  343. }
  344. }
  345. }
  346. } else {
  347. if (dojo.render.html.ie) {
  348. if (!evt.ctrlKey && !evt.altKey && evt.keyCode >= evt.KEY_SPACE) {
  349. evt.key = String.fromCharCode(evt.keyCode);
  350. }
  351. } else {
  352. if (dojo.render.html.safari) {
  353. switch (evt.keyCode) {
  354.   case 25:
  355. evt.key = evt.KEY_TAB;
  356. evt.shift = true;
  357. break;
  358.   case 63232:
  359. evt.key = evt.KEY_UP_ARROW;
  360. break;
  361.   case 63233:
  362. evt.key = evt.KEY_DOWN_ARROW;
  363. break;
  364.   case 63234:
  365. evt.key = evt.KEY_LEFT_ARROW;
  366. break;
  367.   case 63235:
  368. evt.key = evt.KEY_RIGHT_ARROW;
  369. break;
  370.   case 63236:
  371. evt.key = evt.KEY_F1;
  372. break;
  373.   case 63237:
  374. evt.key = evt.KEY_F2;
  375. break;
  376.   case 63238:
  377. evt.key = evt.KEY_F3;
  378. break;
  379.   case 63239:
  380. evt.key = evt.KEY_F4;
  381. break;
  382.   case 63240:
  383. evt.key = evt.KEY_F5;
  384. break;
  385.   case 63241:
  386. evt.key = evt.KEY_F6;
  387. break;
  388.   case 63242:
  389. evt.key = evt.KEY_F7;
  390. break;
  391.   case 63243:
  392. evt.key = evt.KEY_F8;
  393. break;
  394.   case 63244:
  395. evt.key = evt.KEY_F9;
  396. break;
  397.   case 63245:
  398. evt.key = evt.KEY_F10;
  399. break;
  400.   case 63246:
  401. evt.key = evt.KEY_F11;
  402. break;
  403.   case 63247:
  404. evt.key = evt.KEY_F12;
  405. break;
  406.   case 63250:
  407. evt.key = evt.KEY_PAUSE;
  408. break;
  409.   case 63272:
  410. evt.key = evt.KEY_DELETE;
  411. break;
  412.   case 63273:
  413. evt.key = evt.KEY_HOME;
  414. break;
  415.   case 63275:
  416. evt.key = evt.KEY_END;
  417. break;
  418.   case 63276:
  419. evt.key = evt.KEY_PAGE_UP;
  420. break;
  421.   case 63277:
  422. evt.key = evt.KEY_PAGE_DOWN;
  423. break;
  424.   case 63302:
  425. evt.key = evt.KEY_INSERT;
  426. break;
  427.   case 63248:
  428.   case 63249:
  429.   case 63289:
  430. break;
  431.   default:
  432. evt.key = evt.charCode >= evt.KEY_SPACE ? String.fromCharCode(evt.charCode) : evt.keyCode;
  433. }
  434. } else {
  435. evt.key = evt.charCode > 0 ? String.fromCharCode(evt.charCode) : evt.keyCode;
  436. }
  437. }
  438. }
  439. }
  440. }
  441. }
  442. if (dojo.render.html.ie) {
  443. if (!evt.target) {
  444. evt.target = evt.srcElement;
  445. }
  446. if (!evt.currentTarget) {
  447. evt.currentTarget = (sender ? sender : evt.srcElement);
  448. }
  449. if (!evt.layerX) {
  450. evt.layerX = evt.offsetX;
  451. }
  452. if (!evt.layerY) {
  453. evt.layerY = evt.offsetY;
  454. }
  455. var doc = (evt.srcElement && evt.srcElement.ownerDocument) ? evt.srcElement.ownerDocument : document;
  456. var docBody = ((dojo.render.html.ie55) || (doc["compatMode"] == "BackCompat")) ? doc.body : doc.documentElement;
  457. if (!evt.pageX) {
  458. evt.pageX = evt.clientX + (docBody.scrollLeft || 0);
  459. }
  460. if (!evt.pageY) {
  461. evt.pageY = evt.clientY + (docBody.scrollTop || 0);
  462. }
  463. if (evt.type == "mouseover") {
  464. evt.relatedTarget = evt.fromElement;
  465. }
  466. if (evt.type == "mouseout") {
  467. evt.relatedTarget = evt.toElement;
  468. }
  469. this.currentEvent = evt;
  470. evt.callListener = this.callListener;
  471. evt.stopPropagation = this._stopPropagation;
  472. evt.preventDefault = this._preventDefault;
  473. }
  474. return evt;
  475. };
  476. this.stopEvent = function (evt) {
  477. if (window.event) {
  478. evt.cancelBubble = true;
  479. evt.returnValue = false;
  480. } else {
  481. evt.preventDefault();
  482. evt.stopPropagation();
  483. }
  484. };
  485. };