/Frameworks/AppKit/rhino.platform/CPDOMWindowBridge.j

http://github.com/jfahrenkrug/MapKit-HelloWorld · Unknown · 590 lines · 590 code · 0 blank · 0 comment · 0 complexity · e244004459b31dbc69288591f1e68399 MD5 · raw file

  1. I;21;Foundation/CPObject.jI;22;Foundation/CPRunLoop.ji;9;CPEvent.ji;17;CPCompatibility.ji;18;CPDOMWindowLayer.jc;19391;
  2. CPSharedDOMWindowBridge=nil;
  3. var _1=[];
  4. var _2,_3,_4;
  5. var _5=objj_allocateClassPair(CPObject,"CPDOMWindowBridge"),_6=_5.isa;
  6. class_addIvars(_5,[new objj_ivar("_orderedWindows"),new objj_ivar("_mouseDownWindow"),new objj_ivar("_DOMWindow"),new objj_ivar("_DOMBodyElement"),new objj_ivar("_DOMFocusElement"),new objj_ivar("_windowLevels"),new objj_ivar("_windowLayers"),new objj_ivar("_frame"),new objj_ivar("_contentBounds"),new objj_ivar("_mouseIsDown"),new objj_ivar("_lastMouseUp"),new objj_ivar("_lastMouseDown"),new objj_ivar("_charCodes"),new objj_ivar("_keyCode"),new objj_ivar("_DOMEventMode"),new objj_ivar("_DOMPasteboardElement"),new objj_ivar("_pasteboardKeyDownEvent"),new objj_ivar("_overriddenEventType")]);
  7. objj_registerClassPair(_5);
  8. objj_addClassForBundle(_5,objj_getBundleWithPath(OBJJ_CURRENT_BUNDLE.path));
  9. class_addMethods(_5,[new objj_method(sel_getUid("initWithFrame:"),function(_7,_8,_9){
  10. with(_7){
  11. alert("unimplemented");
  12. }
  13. }),new objj_method(sel_getUid("_initWithDOMWindow:"),function(_a,_b,_c){
  14. with(_a){
  15. _a=objj_msgSendSuper({receiver:_a,super_class:objj_getClass("CPObject")},"init");
  16. if(_a){
  17. _DOMWindow=_c;
  18. _windowLevels=[];
  19. _windowLayers=objj_msgSend(CPDictionary,"dictionary");
  20. _DOMBodyElement=document.getElementsByTagName("body")[0];
  21. _DOMBodyElement.innerHTML="";
  22. _DOMBodyElement.style.overflow="hidden";
  23. _DOMBodyElement.style.webkitTouchCallout="none";
  24. objj_msgSend(CPString,"_resetSize");
  25. if(document.documentElement){
  26. document.documentElement.style.overflow="hidden";
  27. }
  28. _frame=_2(_DOMWindow);
  29. _contentBounds=CGRectMake(0,0,CPRectGetWidth(_frame),CPRectGetHeight(_frame));
  30. _DOMFocusElement=document.createElement("input");
  31. _DOMFocusElement.style.position="absolute";
  32. _DOMFocusElement.style.zIndex="-1000";
  33. _DOMFocusElement.style.opacity="0";
  34. _DOMFocusElement.style.filter="alpha(opacity=0)";
  35. _DOMBodyElement.appendChild(_DOMFocusElement);
  36. _DOMPasteboardElement=document.createElement("input");
  37. _DOMPasteboardElement.style.position="absolute";
  38. _DOMPasteboardElement.style.top="-10000px";
  39. _DOMPasteboardElement.style.zIndex="99";
  40. _DOMBodyElement.appendChild(_DOMPasteboardElement);
  41. _DOMPasteboardElement.blur();
  42. _charCodes={};
  43. var _d=objj_msgSend(_a,"class"),_e=sel_getUid("_bridgeKeyEvent:"),_f=class_getMethodImplementation(_d,_e),_10=function(_11){
  44. _f(_a,nil,_11);
  45. },_12=sel_getUid("_bridgeMouseEvent:"),_13=class_getMethodImplementation(_d,_12),_14=function(_15){
  46. _13(_a,nil,_15);
  47. },_16=sel_getUid("_bridgeScrollEvent:"),_17=class_getMethodImplementation(_d,_16),_18=function(_19){
  48. _17(_a,nil,_19);
  49. },_1a=sel_getUid("_bridgeResizeEvent:"),_1b=class_getMethodImplementation(_d,_1a),_1c=function(_1d){
  50. _1b(_a,nil,_1d);
  51. },_1e=sel_getUid("_bridgeTouchEvent:"),_1f=class_getMethodImplementation(_d,_1e),_20=function(_21){
  52. _1f(_a,nil,_21);
  53. },_22=_DOMWindow.document;
  54. if(document.addEventListener){
  55. _DOMWindow.addEventListener("resize",_1c,NO);
  56. _22.addEventListener(CPDOMEventMouseUp,_14,NO);
  57. _22.addEventListener(CPDOMEventMouseDown,_14,NO);
  58. _22.addEventListener(CPDOMEventMouseMoved,_14,NO);
  59. _22.addEventListener(CPDOMEventKeyUp,_10,NO);
  60. _22.addEventListener(CPDOMEventKeyDown,_10,NO);
  61. _22.addEventListener(CPDOMEventKeyPress,_10,NO);
  62. _22.addEventListener(CPDOMEventTouchStart,_20,NO);
  63. _22.addEventListener(CPDOMEventTouchEnd,_20,NO);
  64. _22.addEventListener(CPDOMEventTouchMove,_20,NO);
  65. _22.addEventListener(CPDOMEventTouchCancel,_20,NO);
  66. _DOMWindow.addEventListener("DOMMouseScroll",_18,NO);
  67. _DOMWindow.addEventListener(CPDOMEventScrollWheel,_18,NO);
  68. }else{
  69. if(document.attachEvent){
  70. _DOMWindow.attachEvent("onresize",_1c);
  71. _22.attachEvent("on"+CPDOMEventMouseUp,_14);
  72. _22.attachEvent("on"+CPDOMEventMouseDown,_14);
  73. _22.attachEvent("on"+CPDOMEventMouseMoved,_14);
  74. _22.attachEvent("on"+CPDOMEventDoubleClick,_14);
  75. _22.attachEvent("on"+CPDOMEventKeyUp,_10);
  76. _22.attachEvent("on"+CPDOMEventKeyDown,_10);
  77. _22.attachEvent("on"+CPDOMEventKeyPress,_10);
  78. _DOMWindow.onmousewheel=_18;
  79. _22.onmousewheel=_18;
  80. _22.body.ondrag=function(){
  81. return NO;
  82. };
  83. _22.body.onselectstart=function(){
  84. return window.event.srcElement==_DOMPasteboardElement;
  85. };
  86. }
  87. }
  88. _1["INPUT"]=YES;
  89. _1["SELECT"]=YES;
  90. _1["TEXTAREA"]=YES;
  91. _1["OPTION"]=YES;
  92. }
  93. return _a;
  94. }
  95. }),new objj_method(sel_getUid("frame"),function(_23,_24){
  96. with(_23){
  97. return CGRectMakeCopy(_frame);
  98. }
  99. }),new objj_method(sel_getUid("visibleFrame"),function(_25,_26){
  100. with(_25){
  101. var _27=objj_msgSend(_25,"frame");
  102. _27.origin=CGPointMakeZero();
  103. if(objj_msgSend(CPMenu,"menuBarVisible")){
  104. var _28=objj_msgSend(objj_msgSend(CPApp,"mainMenu"),"menuBarHeight");
  105. _27.origin.y+=_28;
  106. _27.size.height-=_28;
  107. }
  108. return _27;
  109. }
  110. }),new objj_method(sel_getUid("contentBounds"),function(_29,_2a){
  111. with(_29){
  112. return CPRectCreateCopy(_contentBounds);
  113. }
  114. }),new objj_method(sel_getUid("orderedWindowsAtLevel:"),function(_2b,_2c,_2d){
  115. with(_2b){
  116. var _2e=objj_msgSend(_2b,"layerAtLevel:create:",_2d,NO);
  117. if(!_2e){
  118. return [];
  119. }
  120. return objj_msgSend(_2e,"orderedWindows");
  121. }
  122. }),new objj_method(sel_getUid("layerAtLevel:create:"),function(_2f,_30,_31,_32){
  123. with(_2f){
  124. var _33=objj_msgSend(_windowLayers,"objectForKey:",_31);
  125. if(!_33&&_32){
  126. _33=objj_msgSend(objj_msgSend(CPDOMWindowLayer,"alloc"),"initWithLevel:",_31);
  127. objj_msgSend(_windowLayers,"setObject:forKey:",_33,_31);
  128. var low=0,_35=_windowLevels.length-1,_36;
  129. while(low<=_35){
  130. _36=FLOOR((low+_35)/2);
  131. if(_windowLevels[_36]>_31){
  132. _35=_36-1;
  133. }else{
  134. low=_36+1;
  135. }
  136. }
  137. objj_msgSend(_windowLevels,"insertObject:atIndex:",_31,_windowLevels[_36]>_31?_36:_36+1);
  138. _33._DOMElement.style.zIndex=_31;
  139. _DOMBodyElement.appendChild(_33._DOMElement);
  140. }
  141. return _33;
  142. }
  143. }),new objj_method(sel_getUid("order:window:relativeTo:"),function(_37,_38,_39,_3a,_3b){
  144. with(_37){
  145. var _3c=objj_msgSend(_37,"layerAtLevel:create:",objj_msgSend(_3a,"level"),_39!=CPWindowOut);
  146. if(_39==CPWindowOut){
  147. return objj_msgSend(_3c,"removeWindow:",_3a);
  148. }
  149. objj_msgSend(_3c,"insertWindow:atIndex:",_3a,(_3b?(_39==CPWindowAbove?_3b._index+1:_3b._index):CPNotFound));
  150. }
  151. }),new objj_method(sel_getUid("_dragHitTest:pasteboard:"),function(_3d,_3e,_3f,_40){
  152. with(_3d){
  153. var _41=_windowLevels,_42=_windowLayers,_43=_41.length;
  154. while(_43--){
  155. if(_41[_43]>=CPDraggingWindowLevel){
  156. continue;
  157. }
  158. var _44=objj_msgSend(_42,"objectForKey:",_41[_43])._windows,_45=_44.length;
  159. while(_45--){
  160. var _46=_44[_45];
  161. if(objj_msgSend(_46,"containsPoint:",_3f)){
  162. return objj_msgSend(_46,"_dragHitTest:pasteboard:",_3f,_40);
  163. }
  164. }
  165. }
  166. return nil;
  167. }
  168. }),new objj_method(sel_getUid("_propagateCurrentDOMEvent:"),function(_47,_48,_49){
  169. with(_47){
  170. StopDOMEventPropagation=!_49;
  171. }
  172. }),new objj_method(sel_getUid("hitTest:"),function(_4a,_4b,_4c){
  173. with(_4a){
  174. var _4d=_windowLevels,_4e=_windowLayers,_4f=_4d.length,_50=nil;
  175. while(_4f--&&!_50){
  176. var _51=objj_msgSend(_4e,"objectForKey:",_4d[_4f])._windows,_52=_51.length;
  177. while(_52--&&!_50){
  178. var _53=_51[_52];
  179. if(!_53._ignoresMouseEvents&&objj_msgSend(_53,"containsPoint:",_4c)){
  180. _50=_53;
  181. }
  182. }
  183. }
  184. return _50;
  185. }
  186. })]);
  187. class_addMethods(_6,[new objj_method(sel_getUid("sharedDOMWindowBridge"),function(_54,_55){
  188. with(_54){
  189. if(!CPSharedDOMWindowBridge){
  190. CPSharedDOMWindowBridge=objj_msgSend(objj_msgSend(CPDOMWindowBridge,"alloc"),"_initWithDOMWindow:",window);
  191. }
  192. return CPSharedDOMWindowBridge;
  193. }
  194. })]);
  195. var _2=function(_56){
  196. var _57=nil;
  197. if(_56.outerWidth){
  198. _57=CGRectMake(0,0,_56.outerWidth,_56.outerHeight);
  199. }else{
  200. _57=CGRectMake(0,0,-1,-1);
  201. }
  202. if(window.screenTop){
  203. _57.origin=CGPointMake(_56.screenLeft,_56.screenTop,0);
  204. }else{
  205. if(window.screenX){
  206. _57.origin=CGPointMake(_56.screenX,_56.screenY,0);
  207. }
  208. }
  209. if(_56.innerWidth){
  210. _57.size=CGSizeMake(_56.innerWidth,_56.innerHeight);
  211. }else{
  212. if(document.documentElement&&document.documentElement.clientWidth){
  213. _57.size=CGSizeMake(_56.document.documentElement.clientWidth,_56.document.documentElement.clientHeight);
  214. }else{
  215. _57.size=CGSizeMake(_56.document.body.clientWidth,_56.document.body.clientHeight);
  216. }
  217. }
  218. return _57;
  219. };
  220. var _58={},_59={},_5a={"8":1,"9":1,"37":1,"38":1,"39":1,"40":1,"46":1,"33":1,"34":1};
  221. var _5b=17;
  222. var _5=objj_getClass("CPDOMWindowBridge");
  223. if(!_5){
  224. objj_exception_throw(new objj_exception(OBJJClassNotFoundException,"*** Could not find definition for class \"CPDOMWindowBridge\""));
  225. }
  226. var _6=_5.isa;
  227. class_addMethods(_5,[new objj_method(sel_getUid("preventCharacterKeysFromPropagating:"),function(_5c,_5d,_5e){
  228. with(_5c){
  229. for(var i=_5e.length;i>0;i--){
  230. _59[""+_5e[i-1].toLowerCase()]=YES;
  231. }
  232. }
  233. }),new objj_method(sel_getUid("preventCharacterKeyFromPropagating:"),function(_60,_61,_62){
  234. with(_60){
  235. _59[_62.toLowerCase()]=YES;
  236. }
  237. }),new objj_method(sel_getUid("clearCharacterKeysToPreventFromPropagating"),function(_63,_64){
  238. with(_63){
  239. _59={};
  240. }
  241. }),new objj_method(sel_getUid("preventKeyCodesFromPropagating:"),function(_65,_66,_67){
  242. with(_65){
  243. for(var i=_67.length;i>0;i--){
  244. _58[_67[i-1]]=YES;
  245. }
  246. }
  247. }),new objj_method(sel_getUid("preventKeyCodeFromPropagating:"),function(_69,_6a,_6b){
  248. with(_69){
  249. _58[_6b]=YES;
  250. }
  251. }),new objj_method(sel_getUid("clearKeyCodesToPreventFromPropagating"),function(_6c,_6d){
  252. with(_6c){
  253. _58={};
  254. }
  255. }),new objj_method(sel_getUid("_bridgeMouseEvent:"),function(_6e,_6f,_70){
  256. with(_6e){
  257. var _71=_overriddenEventType||_70.type;
  258. if(_71==CPDOMEventDoubleClick){
  259. _overriddenEventType=CPDOMEventMouseDown;
  260. objj_msgSend(_6e,"_bridgeMouseEvent:",_70);
  261. _overriddenEventType=CPDOMEventMouseUp;
  262. objj_msgSend(_6e,"_bridgeMouseEvent:",_70);
  263. _overriddenEventType=nil;
  264. return;
  265. }
  266. try{
  267. var _72,_73={x:_70.clientX,y:_70.clientY},_74=_70.timeStamp?_70.timeStamp:new Date(),_75=(_70.target||_70.srcElement),_76=0,_77=(_70.shiftKey?CPShiftKeyMask:0)|(_70.ctrlKey?CPControlKeyMask:0)|(_70.altKey?CPAlternateKeyMask:0)|(_70.metaKey?CPCommandKeyMask:0);
  268. StopDOMEventPropagation=YES;
  269. if(_mouseDownWindow){
  270. _76=objj_msgSend(_mouseDownWindow,"windowNumber");
  271. }else{
  272. var _78=objj_msgSend(_6e,"hitTest:",_73);
  273. if(_70.type==CPDOMEventMouseDown&&_78){
  274. _mouseDownWindow=_78;
  275. }
  276. _76=objj_msgSend(_78,"windowNumber");
  277. }
  278. if(_76){
  279. var _79=CPApp._windows[_76]._frame;
  280. _73.x-=(_79.origin.x);
  281. _73.y-=(_79.origin.y);
  282. }
  283. switch(_71){
  284. case CPDOMEventMouseUp:
  285. if(_mouseIsDown){
  286. _72=objj_msgSend(CPEvent,"mouseEventWithType:location:modifierFlags:timestamp:windowNumber:context:eventNumber:clickCount:pressure:",CPLeftMouseUp,_73,_77,_74,_76,nil,-1,_3(_lastMouseUp,_74,_73),0);
  287. _mouseIsDown=NO;
  288. _lastMouseUp=_72;
  289. _mouseDownWindow=nil;
  290. }
  291. if(_DOMEventMode){
  292. _DOMEventMode=NO;
  293. return;
  294. }
  295. break;
  296. case CPDOMEventMouseDown:
  297. if(_1[_75.tagName]&&_75!=_DOMFocusElement){
  298. _DOMEventMode=YES;
  299. _mouseIsDown=YES;
  300. objj_msgSend(CPApp,"sendEvent:",objj_msgSend(CPEvent,"mouseEventWithType:location:modifierFlags:timestamp:windowNumber:context:eventNumber:clickCount:pressure:",CPLeftMouseDown,_73,_77,_74,_76,nil,-1,_3(_lastMouseDown,_74,_73),0));
  301. objj_msgSend(CPApp,"sendEvent:",objj_msgSend(CPEvent,"mouseEventWithType:location:modifierFlags:timestamp:windowNumber:context:eventNumber:clickCount:pressure:",CPLeftMouseUp,_73,_77,_74,_76,nil,-1,_3(_lastMouseDown,_74,_73),0));
  302. return;
  303. }
  304. _72=objj_msgSend(CPEvent,"mouseEventWithType:location:modifierFlags:timestamp:windowNumber:context:eventNumber:clickCount:pressure:",CPLeftMouseDown,_73,_77,_74,_76,nil,-1,_3(_lastMouseDown,_74,_73),0);
  305. _mouseIsDown=YES;
  306. _lastMouseDown=_72;
  307. break;
  308. case CPDOMEventMouseMoved:
  309. if(_DOMEventMode){
  310. return;
  311. }
  312. _72=objj_msgSend(CPEvent,"mouseEventWithType:location:modifierFlags:timestamp:windowNumber:context:eventNumber:clickCount:pressure:",_mouseIsDown?CPLeftMouseDragged:CPMouseMoved,_73,_77,_74,_76,nil,-1,1,0);
  313. break;
  314. }
  315. if(_72){
  316. _72._DOMEvent=_70;
  317. objj_msgSend(CPApp,"sendEvent:",_72);
  318. }
  319. if(StopDOMEventPropagation){
  320. _4(_70);
  321. }
  322. objj_msgSend(objj_msgSend(CPRunLoop,"currentRunLoop"),"limitDateForMode:",CPDefaultRunLoopMode);
  323. }
  324. catch(anException){
  325. objj_exception_report(anException,{path:"CPDOMWindowBridge.j"});
  326. }
  327. }
  328. }),new objj_method(sel_getUid("_bridgeKeyEvent:"),function(_7a,_7b,_7c){
  329. with(_7a){
  330. try{
  331. var _7d,_7e=_7c.timeStamp?_7c.timeStamp:new Date(),_7f=(_7c.target||_7c.srcElement),_80=objj_msgSend(objj_msgSend(CPApp,"keyWindow"),"windowNumber"),_81=(_7c.shiftKey?CPShiftKeyMask:0)|(_7c.ctrlKey?CPControlKeyMask:0)|(_7c.altKey?CPAlternateKeyMask:0)|(_7c.metaKey?CPCommandKeyMask:0);
  332. if(_1[_7f.tagName]&&_7f!=_DOMFocusElement&&_7f!=_DOMPasteboardElement){
  333. return;
  334. }
  335. StopDOMEventPropagation=!(_81&(CPControlKeyMask|CPCommandKeyMask))||_59[String.fromCharCode(_7c.keyCode||_7c.charCode).toLowerCase()]||_58[_7c.keyCode];
  336. var _82=NO,_83=NO;
  337. switch(_7c.type){
  338. case CPDOMEventKeyDown:
  339. _keyCode=_7c.keyCode;
  340. var _84=String.fromCharCode(_keyCode).toLowerCase();
  341. if(_84=="v"&&(_81&CPPlatformActionKeyMask)){
  342. _DOMPasteboardElement.select();
  343. _DOMPasteboardElement.value="";
  344. _82=YES;
  345. }else{
  346. if((_84=="c"||_84=="x")&&(_81&CPPlatformActionKeyMask)){
  347. _83=YES;
  348. }else{
  349. if(!CPFeatureIsCompatible(CPJavascriptRemedialKeySupport)){
  350. return;
  351. }else{
  352. if(!_5a[_keyCode]&&(_keyCode==_5b||!(_81&CPControlKeyMask))){
  353. return;
  354. }
  355. }
  356. }
  357. }
  358. case CPDOMEventKeyPress:
  359. if((_7c.target||_7c.srcElement)==_DOMPasteboardElement){
  360. return;
  361. }
  362. var _85=_keyCode,_86=_7c.keyCode||_7c.charCode,_87=(_charCodes[_85]!=nil);
  363. _charCodes[_85]=_86;
  364. var _84=String.fromCharCode(_86),_88=_84.toLowerCase();
  365. _7d=objj_msgSend(CPEvent,"keyEventWithType:location:modifierFlags:timestamp:windowNumber:context:characters:charactersIgnoringModifiers:isARepeat:keyCode:",CPKeyDown,location,_81,_7e,_80,nil,_84,_88,_87,_85);
  366. if(_82){
  367. _pasteboardKeyDownEvent=_7d;
  368. window.setNativeTimeout(function(){
  369. objj_msgSend(_7a,"_checkPasteboardElement");
  370. },0);
  371. return;
  372. }
  373. break;
  374. case CPDOMEventKeyUp:
  375. var _85=_7c.keyCode,_86=_charCodes[_85];
  376. _charCodes[_85]=nil;
  377. var _84=String.fromCharCode(_86),_88=_84.toLowerCase();
  378. if(!(_81&CPShiftKeyMask)){
  379. _84=_88;
  380. }
  381. _7d=objj_msgSend(CPEvent,"keyEventWithType:location:modifierFlags:timestamp:windowNumber:context:characters:charactersIgnoringModifiers:isARepeat:keyCode:",CPKeyUp,location,_81,_7e,_80,nil,_84,_88,NO,_85);
  382. break;
  383. }
  384. if(_7d){
  385. _7d._DOMEvent=_7c;
  386. objj_msgSend(CPApp,"sendEvent:",_7d);
  387. if(_83){
  388. var _89=objj_msgSend(CPPasteboard,"generalPasteboard"),_8a=objj_msgSend(_89,"types");
  389. if(_8a.length){
  390. if(objj_msgSend(_8a,"indexOfObjectIdenticalTo:",CPStringPboardType)!=CPNotFound){
  391. _DOMPasteboardElement.value=objj_msgSend(_89,"stringForType:",CPStringPboardType);
  392. }else{
  393. _DOMPasteboardElement.value=objj_msgSend(_89,"_generateStateUID");
  394. }
  395. _DOMPasteboardElement.select();
  396. window.setNativeTimeout(function(){
  397. objj_msgSend(_7a,"_clearPasteboardElement");
  398. },0);
  399. }
  400. return;
  401. }
  402. }
  403. if(StopDOMEventPropagation){
  404. _4(_7c);
  405. }
  406. objj_msgSend(objj_msgSend(CPRunLoop,"currentRunLoop"),"limitDateForMode:",CPDefaultRunLoopMode);
  407. }
  408. catch(anException){
  409. objj_exception_report(anException,{path:"CPDOMWindowBridge.j"});
  410. }
  411. }
  412. }),new objj_method(sel_getUid("_bridgeScrollEvent:"),function(_8b,_8c,_8d){
  413. with(_8b){
  414. if(!_8d){
  415. _8d=window.event;
  416. }
  417. try{
  418. if(CPFeatureIsCompatible(CPJavaScriptMouseWheelValues_8_15)){
  419. var x=0,y=0,_90=_8d.target;
  420. while(_90.nodeType!==1){
  421. _90=_90.parentNode;
  422. }
  423. if(_90.offsetParent){
  424. do{
  425. x+=_90.offsetLeft;
  426. y+=_90.offsetTop;
  427. }while(_90=_90.offsetParent);
  428. }
  429. var _91={x:(x+((_8d.clientX-8)/15)),y:(y+((_8d.clientY-8)/15))};
  430. }else{
  431. var _91={x:_8d.clientX,y:_8d.clientY};
  432. }
  433. var _92=0,_93=0,_94=0,_95=_8d.timeStamp?_8d.timeStamp:new Date(),_96=(_8d.shiftKey?CPShiftKeyMask:0)|(_8d.ctrlKey?CPControlKeyMask:0)|(_8d.altKey?CPAlternateKeyMask:0)|(_8d.metaKey?CPCommandKeyMask:0);
  434. StopDOMEventPropagation=YES;
  435. _94=objj_msgSend(objj_msgSend(_8b,"hitTest:",_91),"windowNumber");
  436. if(!_94){
  437. return;
  438. }
  439. var _97=CPApp._windows[_94]._frame;
  440. _91.x-=CGRectGetMinX(_97);
  441. _91.y-=CGRectGetMinY(_97);
  442. if(typeof _8d.wheelDeltaX!="undefined"){
  443. _92=_8d.wheelDeltaX/120;
  444. _93=_8d.wheelDeltaY/120;
  445. }else{
  446. if(_8d.wheelDelta){
  447. _93=_8d.wheelDelta/120;
  448. }else{
  449. if(_8d.detail){
  450. _93=-_8d.detail/3;
  451. }else{
  452. return;
  453. }
  454. }
  455. }
  456. if(!CPFeatureIsCompatible(CPJavaScriptNegativeMouseWheelValues)){
  457. _92=-_92;
  458. _93=-_93;
  459. }
  460. var _98=objj_msgSend(CPEvent,"mouseEventWithType:location:modifierFlags:timestamp:windowNumber:context:eventNumber:clickCount:pressure:",CPScrollWheel,_91,_96,_95,_94,nil,-1,1,0);
  461. _98._DOMEvent=_8d;
  462. _98._deltaX=ROUND(_92*1.5);
  463. _98._deltaY=ROUND(_93*1.5);
  464. objj_msgSend(CPApp,"sendEvent:",_98);
  465. if(StopDOMEventPropagation){
  466. _4(_8d);
  467. }
  468. objj_msgSend(objj_msgSend(CPRunLoop,"currentRunLoop"),"limitDateForMode:",CPDefaultRunLoopMode);
  469. }
  470. catch(anException){
  471. objj_exception_report(anException,{path:"CPDOMWindowBridge.j"});
  472. }
  473. }
  474. }),new objj_method(sel_getUid("_bridgeResizeEvent:"),function(_99,_9a,_9b){
  475. with(_99){
  476. try{
  477. var _9c=_frame.size;
  478. _frame=_2(_DOMWindow);
  479. _contentBounds.size=CGSizeCreateCopy(_frame.size);
  480. var _9d=_windowLevels,_9e=_windowLayers,_9f=_9d.length;
  481. while(_9f--){
  482. var _a0=objj_msgSend(_9e,"objectForKey:",_9d[_9f])._windows,_a1=_a0.length;
  483. while(_a1--){
  484. objj_msgSend(_a0[_a1],"resizeWithOldBridgeSize:",_9c);
  485. }
  486. }
  487. objj_msgSend(objj_msgSend(CPRunLoop,"currentRunLoop"),"limitDateForMode:",CPDefaultRunLoopMode);
  488. }
  489. catch(anException){
  490. objj_exception_report(anException,{path:"CPDOMWindowBridge.j"});
  491. }
  492. }
  493. }),new objj_method(sel_getUid("_bridgeTouchEvent:"),function(_a2,_a3,_a4){
  494. with(_a2){
  495. try{
  496. if(_a4.touches&&(_a4.touches.length==1||(_a4.touches.length==0&&_a4.changedTouches.length==1))){
  497. var _a5={};
  498. switch(_a4.type){
  499. case CPDOMEventTouchStart:
  500. _a5.type=CPDOMEventMouseDown;
  501. break;
  502. case CPDOMEventTouchEnd:
  503. _a5.type=CPDOMEventMouseUp;
  504. break;
  505. case CPDOMEventTouchMove:
  506. _a5.type=CPDOMEventMouseMoved;
  507. break;
  508. case CPDOMEventTouchCancel:
  509. _a5.type=CPDOMEventMouseUp;
  510. break;
  511. }
  512. var _a6=_a4.touches.length?_a4.touches[0]:_a4.changedTouches[0];
  513. _a5.clientX=_a6.clientX;
  514. _a5.clientY=_a6.clientY;
  515. _a5.timestamp=_a4.timestamp;
  516. _a5.target=_a4.target;
  517. _a5.shiftKey=_a5.ctrlKey=_a5.altKey=_a5.metaKey=false;
  518. _a5.preventDefault=function(){
  519. if(_a4.preventDefault){
  520. _a4.preventDefault();
  521. }
  522. };
  523. _a5.stopPropagation=function(){
  524. if(_a4.stopPropagation){
  525. _a4.stopPropagation();
  526. }
  527. };
  528. objj_msgSend(_a2,"_bridgeMouseEvent:",_a5);
  529. return;
  530. }else{
  531. if(_a4.preventDefault){
  532. _a4.preventDefault();
  533. }
  534. if(_a4.stopPropagation){
  535. _a4.stopPropagation();
  536. }
  537. }
  538. }
  539. catch(e){
  540. objj_exception_report(e,{path:"CPDOMWindowBridge.j"});
  541. }
  542. }
  543. }),new objj_method(sel_getUid("_checkPasteboardElement"),function(_a7,_a8){
  544. with(_a7){
  545. try{
  546. var _a9=_DOMPasteboardElement.value;
  547. if(objj_msgSend(_a9,"length")){
  548. var _aa=objj_msgSend(CPPasteboard,"generalPasteboard");
  549. if(objj_msgSend(_aa,"_stateUID")!=_a9){
  550. objj_msgSend(_aa,"declareTypes:owner:",[CPStringPboardType],_a7);
  551. objj_msgSend(_aa,"setString:forType:",_a9,CPStringPboardType);
  552. }
  553. }
  554. objj_msgSend(_a7,"_clearPasteboardElement");
  555. objj_msgSend(CPApp,"sendEvent:",_pasteboardKeyDownEvent);
  556. _pasteboardKeyDownEvent=nil;
  557. objj_msgSend(objj_msgSend(CPRunLoop,"currentRunLoop"),"limitDateForMode:",CPDefaultRunLoopMode);
  558. }
  559. catch(anException){
  560. objj_exception_report(anException,{path:"CPDOMWindowBridge.j"});
  561. }
  562. }
  563. }),new objj_method(sel_getUid("_clearPasteboardElement"),function(_ab,_ac){
  564. with(_ab){
  565. _DOMPasteboardElement.value="";
  566. _DOMPasteboardElement.blur();
  567. }
  568. })]);
  569. var _ad=5,_ae=(typeof document!="undefined"&&document.addEventListener)?350:1000;
  570. var _3=function(_af,_b0,_b1){
  571. if(!_af){
  572. return 1;
  573. }
  574. var _b2=objj_msgSend(_af,"locationInWindow");
  575. return (_b0-objj_msgSend(_af,"timestamp")<_ae&&ABS(_b2.x-_b1.x)<_ad&&ABS(_b2.y-_b1.y)<_ad)?objj_msgSend(_af,"clickCount")+1:1;
  576. };
  577. var _4=function(_b3){
  578. _b3.cancelBubble=true;
  579. _b3.returnValue=false;
  580. if(_b3.preventDefault){
  581. _b3.preventDefault();
  582. }
  583. if(_b3.stopPropagation){
  584. _b3.stopPropagation();
  585. }
  586. if(_b3.type==CPDOMEventMouseDown){
  587. CPSharedDOMWindowBridge._DOMFocusElement.focus();
  588. CPSharedDOMWindowBridge._DOMFocusElement.blur();
  589. }
  590. };