ShortCuts.js
上传用户:z100004
上传日期:2020-03-27
资源大小:1084k
文件大小:5k
源码类别:

TAPI编程

开发平台:

Visual Basic

  1. /* Acknowledgments: Josh Heyer / David Stone for initial versions. Bradml for stripdown and package */
  2. var keyMapping = [];
  3. keyMapping['13'] = "ENTER";
  4. keyMapping['37'] = "LEFT";
  5. keyMapping['38'] = "UP";
  6. keyMapping['39'] = "RIGHT";
  7. keyMapping['40'] = "DOWN";
  8. keyMapping['16'] = "SHIFT";
  9. keyMapping['17'] = "CTRL";
  10. keyMapping['33'] = "PGUP";
  11. keyMapping['34'] = "PGDOWN";
  12. var commandMapping = {
  13. Combinations: {
  14. "CTRL+ENTER" : function() {Submit();},
  15. "CTRL+LEFT" : function() {MoveToPost(false, false);},
  16. "CTRL+RIGHT" : function() {MoveToPost(true, false);},
  17. "CTRL+UP" : function() {MoveToPost(false, true);},
  18. "CTRL+DOWN" : function() {MoveToPost(true, true);},
  19. "CTRL+PGUP" : function() {MoveToPage(true);},
  20. "CTRL+PGDOWN" : function() {MoveToPage(false);}
  21. }
  22. };
  23. document.onkeydown = function(e) {
  24. return shortcutEventHandler(e, commandMapping, keyMapping);
  25. };
  26. function getControlKeys(e) {
  27. var controls = "";
  28. if (e.ctrlKey)controls += "CTRL+";
  29. if (e.shiftKey)controls += "SHIFT+";
  30. if (e.altKey)controls += "ALT+";
  31. return controls;
  32. }
  33. // return: false == handled, true == keep looking
  34. function shortcutEventHandler(KeyEvent, commandMapping, keyMapping) {
  35. if (!KeyEvent) KeyEvent = event;
  36. //Because IE knows better
  37. var eventKeyValue = (KeyEvent.keyCode) ? KeyEvent.keyCode: KeyEvent.charCode;
  38. var eventKeyName = "";
  39. if (keyMapping[eventKeyValue]) eventKeyName = keyMapping[eventKeyValue];
  40. var controlValue = getControlKeys(KeyEvent);
  41. eventKeyName = controlValue + eventKeyName;
  42. if (commandMapping.Combinations[eventKeyName])  {
  43. commandMapping.Combinations[eventKeyName]();
  44. // Stop propogation if we've found it
  45. if (KeyEvent.preventDefault) KeyEvent.preventDefault();
  46. else KeyEvent.returnValue = false;
  47. if (KeyEvent.stopPropagation) KeyEvent.stopPropagation();
  48. else KeyEvent.cancelBubble = true;
  49. return false;
  50. return true;
  51. }
  52. function Submit() {
  53. var theForm = document.forms['aspnetForm'];
  54. if (!theForm) theForm = document.aspnetForm;
  55. if (theForm) theForm.submit();
  56. }
  57. function MoveToPage(pageUp) {
  58. var elm = document.getElementById(pageUp?'_mbpUrl':'_mbnUrl');
  59. if (elm) location.href=elm.value;
  60. }
  61. function MoveToPost(next, thread) {
  62. if (Selected=="" || isNaN(Selected)) return;
  63. var ForumTable = document.getElementById("ForumTable");
  64. if (!ForumTable) return;
  65. var elems = getElementsByClass("MsgHd",ForumTable,"tr");
  66. if (!elems) return;
  67. var moveTo = null;
  68. var selectedId = parseInt(Selected);
  69. var selectedIndex = 0;
  70. var selectedThreadIndex = 0;
  71. for (var i=0; i<elems.length; ++i)  {
  72. var id = elems[i].id.substring(1, elems[i].id.length-3);
  73. id = parseInt(id);
  74. if (IsThreadHead(elems[i]))
  75. selectedThreadIndex = i;
  76. if (id == selectedId) {
  77. selectedIndex = i;
  78. break;
  79. }
  80. }
  81. var nextId = null;
  82. for (var i=selectedIndex + (next ? 1 : -1); i<elems.length && i >= 0; next ? ++i : --i) {
  83. if ((thread && IsThreadHead(elems[i])) || !thread) {
  84. nextId = elems[i].id.substring(1, elems[i].id.length-3);
  85. nextId = parseInt(nextId);
  86. break;
  87. }
  88. }
  89. if (nextId && nextId != parseInt(Selected)) {
  90. SwitchMessage(null,nextId);
  91. //EnsureMessageVisible(Selected, true);
  92. }
  93. }
  94. function IsThreadHead(elem) {
  95. return elem.className.indexOf("Rt") >= 0;
  96. }
  97. function EnsureMessageVisible(msgID, bShowTop) {
  98. var msgHeader = document.getElementById("F" + msgID + "_h0");
  99. var msgBody = document.getElementById("F" + msgID + "_h1");
  100. if (!msgBody || !msgHeader) return;
  101. // determine scroll position of top and bottom
  102. var scrollContainer = document.documentElement;
  103. var top = getRealPos(msgHeader, 'Top');
  104. var bottom = getRealPos(msgBody, 'Top') + msgBody.offsetHeight;
  105. // if not already visible, scroll to make it so
  106. var scrollTop = scrollContainer.scrollTop;
  107. if (scrollTop > top && !bShowTop)
  108. scrollTop = top - scrollContainer.clientHeight / 10;
  109. if (scrollTop + scrollContainer.clientHeight < bottom)
  110. scrollTop = bottom - scrollContainer.clientHeight;
  111. if (scrollTop > top && bShowTop)
  112. scrollTop = top - scrollContainer.clientHeight / 10;
  113. // apply corrections
  114. scrollContainer.scrollTop = scrollTop;
  115. //$(scrollContainer).stop().animate({'scrollTop' : scrollTop}, 400);
  116. }
  117. function getRealPos(i,which) {
  118. iPos = 0
  119. while (i!=null)  {
  120. iPos += i["offset" + which];
  121. i = i.offsetParent;
  122. }
  123. return iPos
  124. }
  125. function getElementsByClass(className,node,tag) {
  126.   var found = new Array();
  127.   if (node == null)node = document;
  128.   if (tag == null)tag = '*';
  129.   var elms = node.getElementsByTagName(tag);
  130.   var length = elms.length;
  131.   var pattern = new RegExp("(^|\s)"+className+"(\s|$)");
  132.   for (i=0, j=0; i<length; i++) {
  133.  if (pattern.test(elms[i].className) ) {
  134. found[j] = elms[i];
  135. j++;
  136.  }
  137.   }
  138.   return found;
  139. }