1
0

Helios-KeyBindings.js 26 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016
  1. smalltalk.addPackage('Helios-KeyBindings', {});
  2. smalltalk.addClass('HLBinding', smalltalk.Object, ['key', 'label'], 'Helios-KeyBindings');
  3. smalltalk.addMethod(
  4. "_applyOn_",
  5. smalltalk.method({
  6. selector: "applyOn:",
  7. category: 'actions',
  8. fn: function (aKeyBinder){
  9. var self=this;
  10. smalltalk.send(self,"_subclassResponsibility",[]);
  11. return self},
  12. args: ["aKeyBinder"],
  13. source: "applyOn: aKeyBinder\x0a\x09self subclassResponsibility",
  14. messageSends: ["subclassResponsibility"],
  15. referencedClasses: []
  16. }),
  17. smalltalk.HLBinding);
  18. smalltalk.addMethod(
  19. "_isBindingAction",
  20. smalltalk.method({
  21. selector: "isBindingAction",
  22. category: 'testing',
  23. fn: function (){
  24. var self=this;
  25. return false;
  26. },
  27. args: [],
  28. source: "isBindingAction\x0a\x09^ false",
  29. messageSends: [],
  30. referencedClasses: []
  31. }),
  32. smalltalk.HLBinding);
  33. smalltalk.addMethod(
  34. "_isBindingGroup",
  35. smalltalk.method({
  36. selector: "isBindingGroup",
  37. category: 'testing',
  38. fn: function (){
  39. var self=this;
  40. return false;
  41. },
  42. args: [],
  43. source: "isBindingGroup\x0a\x09^ false",
  44. messageSends: [],
  45. referencedClasses: []
  46. }),
  47. smalltalk.HLBinding);
  48. smalltalk.addMethod(
  49. "_key",
  50. smalltalk.method({
  51. selector: "key",
  52. category: 'accessing',
  53. fn: function (){
  54. var self=this;
  55. return self["@key"];
  56. },
  57. args: [],
  58. source: "key\x0a\x09^ key",
  59. messageSends: [],
  60. referencedClasses: []
  61. }),
  62. smalltalk.HLBinding);
  63. smalltalk.addMethod(
  64. "_key_",
  65. smalltalk.method({
  66. selector: "key:",
  67. category: 'accessing',
  68. fn: function (anInteger){
  69. var self=this;
  70. self["@key"]=anInteger;
  71. return self},
  72. args: ["anInteger"],
  73. source: "key: anInteger\x0a\x09key := anInteger",
  74. messageSends: [],
  75. referencedClasses: []
  76. }),
  77. smalltalk.HLBinding);
  78. smalltalk.addMethod(
  79. "_label",
  80. smalltalk.method({
  81. selector: "label",
  82. category: 'accessing',
  83. fn: function (){
  84. var self=this;
  85. return self["@label"];
  86. },
  87. args: [],
  88. source: "label\x0a\x09^ label",
  89. messageSends: [],
  90. referencedClasses: []
  91. }),
  92. smalltalk.HLBinding);
  93. smalltalk.addMethod(
  94. "_label_",
  95. smalltalk.method({
  96. selector: "label:",
  97. category: 'accessing',
  98. fn: function (aString){
  99. var self=this;
  100. self["@label"]=aString;
  101. return self},
  102. args: ["aString"],
  103. source: "label: aString\x0a\x09label := aString",
  104. messageSends: [],
  105. referencedClasses: []
  106. }),
  107. smalltalk.HLBinding);
  108. smalltalk.addMethod(
  109. "_renderOn_html_",
  110. smalltalk.method({
  111. selector: "renderOn:html:",
  112. category: 'rendering',
  113. fn: function (aBindingHelper,html){
  114. var self=this;
  115. return self},
  116. args: ["aBindingHelper", "html"],
  117. source: "renderOn: aBindingHelper html: html",
  118. messageSends: [],
  119. referencedClasses: []
  120. }),
  121. smalltalk.HLBinding);
  122. smalltalk.addMethod(
  123. "_shortcut",
  124. smalltalk.method({
  125. selector: "shortcut",
  126. category: 'accessing',
  127. fn: function (){
  128. var self=this;
  129. var $1;
  130. $1=smalltalk.send((smalltalk.String || String),"_fromCharCode_",[smalltalk.send(self,"_key",[])]);
  131. return $1;
  132. },
  133. args: [],
  134. source: "shortcut\x0a\x09^ String fromCharCode: self key",
  135. messageSends: ["fromCharCode:", "key"],
  136. referencedClasses: ["String"]
  137. }),
  138. smalltalk.HLBinding);
  139. smalltalk.addMethod(
  140. "_on_labelled_",
  141. smalltalk.method({
  142. selector: "on:labelled:",
  143. category: 'instance creation',
  144. fn: function (anInteger,aString){
  145. var self=this;
  146. var $2,$3,$1;
  147. $2=smalltalk.send(self,"_new",[]);
  148. smalltalk.send($2,"_key_",[anInteger]);
  149. smalltalk.send($2,"_label_",[aString]);
  150. $3=smalltalk.send($2,"_yourself",[]);
  151. $1=$3;
  152. return $1;
  153. },
  154. args: ["anInteger", "aString"],
  155. source: "on: anInteger labelled: aString\x0a\x09^ self new\x0a \x09key: anInteger;\x0a label: aString;\x0a yourself",
  156. messageSends: ["key:", "new", "label:", "yourself"],
  157. referencedClasses: []
  158. }),
  159. smalltalk.HLBinding.klass);
  160. smalltalk.addClass('HLBindingAction', smalltalk.HLBinding, ['callback'], 'Helios-KeyBindings');
  161. smalltalk.addMethod(
  162. "_applyOn_",
  163. smalltalk.method({
  164. selector: "applyOn:",
  165. category: 'actions',
  166. fn: function (aKeyBinder){
  167. var self=this;
  168. smalltalk.send(aKeyBinder,"_applyBindingAction_",[self]);
  169. return self},
  170. args: ["aKeyBinder"],
  171. source: "applyOn: aKeyBinder\x0a\x09aKeyBinder applyBindingAction: self",
  172. messageSends: ["applyBindingAction:"],
  173. referencedClasses: []
  174. }),
  175. smalltalk.HLBindingAction);
  176. smalltalk.addMethod(
  177. "_callback",
  178. smalltalk.method({
  179. selector: "callback",
  180. category: 'accessing',
  181. fn: function (){
  182. var self=this;
  183. return self["@callback"];
  184. },
  185. args: [],
  186. source: "callback\x0a\x09^ callback",
  187. messageSends: [],
  188. referencedClasses: []
  189. }),
  190. smalltalk.HLBindingAction);
  191. smalltalk.addMethod(
  192. "_callback_",
  193. smalltalk.method({
  194. selector: "callback:",
  195. category: 'accessing',
  196. fn: function (aBlock){
  197. var self=this;
  198. self["@callback"]=aBlock;
  199. return self},
  200. args: ["aBlock"],
  201. source: "callback: aBlock\x0a\x09callback := aBlock",
  202. messageSends: [],
  203. referencedClasses: []
  204. }),
  205. smalltalk.HLBindingAction);
  206. smalltalk.addMethod(
  207. "_isBindingAction",
  208. smalltalk.method({
  209. selector: "isBindingAction",
  210. category: 'testing',
  211. fn: function (){
  212. var self=this;
  213. return true;
  214. },
  215. args: [],
  216. source: "isBindingAction\x0a\x09^ true",
  217. messageSends: [],
  218. referencedClasses: []
  219. }),
  220. smalltalk.HLBindingAction);
  221. smalltalk.addClass('HLBindingGroup', smalltalk.HLBinding, ['bindings'], 'Helios-KeyBindings');
  222. smalltalk.addMethod(
  223. "_add_",
  224. smalltalk.method({
  225. selector: "add:",
  226. category: 'accessing',
  227. fn: function (aBinding){
  228. var self=this;
  229. var $1;
  230. $1=smalltalk.send(smalltalk.send(self,"_bindings",[]),"_add_",[aBinding]);
  231. return $1;
  232. },
  233. args: ["aBinding"],
  234. source: "add: aBinding\x0a\x09^ self bindings add: aBinding",
  235. messageSends: ["add:", "bindings"],
  236. referencedClasses: []
  237. }),
  238. smalltalk.HLBindingGroup);
  239. smalltalk.addMethod(
  240. "_addActionKey_labelled_callback_",
  241. smalltalk.method({
  242. selector: "addActionKey:labelled:callback:",
  243. category: 'accessing',
  244. fn: function (anInteger,aString,aBlock){
  245. var self=this;
  246. var $1,$2;
  247. $1=smalltalk.send((smalltalk.HLBindingAction || HLBindingAction),"_on_labelled_",[anInteger,aString]);
  248. smalltalk.send($1,"_callback_",[aBlock]);
  249. $2=smalltalk.send($1,"_yourself",[]);
  250. smalltalk.send(self,"_add_",[$2]);
  251. return self},
  252. args: ["anInteger", "aString", "aBlock"],
  253. source: "addActionKey: anInteger labelled: aString callback: aBlock\x0a\x09self add: ((HLBindingAction on: anInteger labelled: aString)\x0a \x09callback: aBlock;\x0a yourself)",
  254. messageSends: ["add:", "callback:", "on:labelled:", "yourself"],
  255. referencedClasses: ["HLBindingAction"]
  256. }),
  257. smalltalk.HLBindingGroup);
  258. smalltalk.addMethod(
  259. "_addGroupKey_labelled_",
  260. smalltalk.method({
  261. selector: "addGroupKey:labelled:",
  262. category: 'accessing',
  263. fn: function (anInteger,aString){
  264. var self=this;
  265. smalltalk.send(self,"_add_",[smalltalk.send((smalltalk.HLBindingGroup || HLBindingGroup),"_on_labelled_",[anInteger,aString])]);
  266. return self},
  267. args: ["anInteger", "aString"],
  268. source: "addGroupKey: anInteger labelled: aString\x0a\x09self add: (HLBindingGroup on: anInteger labelled: aString)",
  269. messageSends: ["add:", "on:labelled:"],
  270. referencedClasses: ["HLBindingGroup"]
  271. }),
  272. smalltalk.HLBindingGroup);
  273. smalltalk.addMethod(
  274. "_applyOn_",
  275. smalltalk.method({
  276. selector: "applyOn:",
  277. category: 'actions',
  278. fn: function (aKeyBinder){
  279. var self=this;
  280. smalltalk.send(aKeyBinder,"_applyBindingGroup_",[self]);
  281. return self},
  282. args: ["aKeyBinder"],
  283. source: "applyOn: aKeyBinder\x0a\x09aKeyBinder applyBindingGroup: self",
  284. messageSends: ["applyBindingGroup:"],
  285. referencedClasses: []
  286. }),
  287. smalltalk.HLBindingGroup);
  288. smalltalk.addMethod(
  289. "_at_",
  290. smalltalk.method({
  291. selector: "at:",
  292. category: 'accessing',
  293. fn: function (aString){
  294. var self=this;
  295. var $1;
  296. $1=smalltalk.send(smalltalk.send(self,"_bindings",[]),"_detect_ifNone_",[(function(each){
  297. return smalltalk.send(smalltalk.send(each,"_label",[]),"__eq",[aString]);
  298. }),(function(){
  299. return nil;
  300. })]);
  301. return $1;
  302. },
  303. args: ["aString"],
  304. source: "at: aString\x0a\x09^ self bindings \x0a \x09detect: [ :each | each label = aString ]\x0a \x09ifNone: [ nil ]",
  305. messageSends: ["detect:ifNone:", "=", "label", "bindings"],
  306. referencedClasses: []
  307. }),
  308. smalltalk.HLBindingGroup);
  309. smalltalk.addMethod(
  310. "_atKey_",
  311. smalltalk.method({
  312. selector: "atKey:",
  313. category: 'accessing',
  314. fn: function (anInteger){
  315. var self=this;
  316. var $1;
  317. $1=smalltalk.send(smalltalk.send(self,"_bindings",[]),"_detect_ifNone_",[(function(each){
  318. return smalltalk.send(smalltalk.send(each,"_key",[]),"__eq",[anInteger]);
  319. }),(function(){
  320. return nil;
  321. })]);
  322. return $1;
  323. },
  324. args: ["anInteger"],
  325. source: "atKey: anInteger\x0a\x09^ self bindings \x0a \x09detect: [ :each | each key = anInteger ]\x0a \x09ifNone: [ nil ]",
  326. messageSends: ["detect:ifNone:", "=", "key", "bindings"],
  327. referencedClasses: []
  328. }),
  329. smalltalk.HLBindingGroup);
  330. smalltalk.addMethod(
  331. "_bindings",
  332. smalltalk.method({
  333. selector: "bindings",
  334. category: 'accessing',
  335. fn: function (){
  336. var self=this;
  337. var $1;
  338. if(($receiver = self["@bindings"]) == nil || $receiver == undefined){
  339. self["@bindings"]=smalltalk.send((smalltalk.OrderedCollection || OrderedCollection),"_new",[]);
  340. $1=self["@bindings"];
  341. } else {
  342. $1=self["@bindings"];
  343. };
  344. return $1;
  345. },
  346. args: [],
  347. source: "bindings\x0a\x09^ bindings ifNil: [ bindings := OrderedCollection new ]",
  348. messageSends: ["ifNil:", "new"],
  349. referencedClasses: ["OrderedCollection"]
  350. }),
  351. smalltalk.HLBindingGroup);
  352. smalltalk.addMethod(
  353. "_isBindingGroup",
  354. smalltalk.method({
  355. selector: "isBindingGroup",
  356. category: 'testing',
  357. fn: function (){
  358. var self=this;
  359. return true;
  360. },
  361. args: [],
  362. source: "isBindingGroup\x0a\x09^ true",
  363. messageSends: [],
  364. referencedClasses: []
  365. }),
  366. smalltalk.HLBindingGroup);
  367. smalltalk.addMethod(
  368. "_renderOn_html_",
  369. smalltalk.method({
  370. selector: "renderOn:html:",
  371. category: 'rendering',
  372. fn: function (aBindingHelper,html){
  373. var self=this;
  374. smalltalk.send(aBindingHelper,"_renderBindingGroup_on_",[self,html]);
  375. return self},
  376. args: ["aBindingHelper", "html"],
  377. source: "renderOn: aBindingHelper html: html\x0a\x09aBindingHelper renderBindingGroup: self on: html",
  378. messageSends: ["renderBindingGroup:on:"],
  379. referencedClasses: []
  380. }),
  381. smalltalk.HLBindingGroup);
  382. smalltalk.addClass('HLKeyBinder', smalltalk.Object, ['modifierKey', 'active', 'helper', 'bindings', 'selectedBinding'], 'Helios-KeyBindings');
  383. smalltalk.addMethod(
  384. "_activate",
  385. smalltalk.method({
  386. selector: "activate",
  387. category: 'actions',
  388. fn: function (){
  389. var self=this;
  390. self["@active"]=true;
  391. smalltalk.send(smalltalk.send(self,"_helper",[]),"_show",[]);
  392. return self},
  393. args: [],
  394. source: "activate\x0a\x09active := true.\x0a\x09self helper show",
  395. messageSends: ["show", "helper"],
  396. referencedClasses: []
  397. }),
  398. smalltalk.HLKeyBinder);
  399. smalltalk.addMethod(
  400. "_activationKey",
  401. smalltalk.method({
  402. selector: "activationKey",
  403. category: 'accessing',
  404. fn: function (){
  405. var self=this;
  406. return (32);
  407. },
  408. args: [],
  409. source: "activationKey\x0a\x09\x22SPACE\x22\x0a\x09^ 32",
  410. messageSends: [],
  411. referencedClasses: []
  412. }),
  413. smalltalk.HLKeyBinder);
  414. smalltalk.addMethod(
  415. "_applyBinding_",
  416. smalltalk.method({
  417. selector: "applyBinding:",
  418. category: 'actions',
  419. fn: function (aBinding){
  420. var self=this;
  421. smalltalk.send(aBinding,"_applyOn_",[self]);
  422. return self},
  423. args: ["aBinding"],
  424. source: "applyBinding: aBinding\x0a aBinding applyOn: self",
  425. messageSends: ["applyOn:"],
  426. referencedClasses: []
  427. }),
  428. smalltalk.HLKeyBinder);
  429. smalltalk.addMethod(
  430. "_applyBindingAction_",
  431. smalltalk.method({
  432. selector: "applyBindingAction:",
  433. category: 'actions',
  434. fn: function (aBinding){
  435. var self=this;
  436. smalltalk.send(smalltalk.send(aBinding,"_callback",[]),"_value",[]);
  437. smalltalk.send(self,"_deactivate",[]);
  438. return self},
  439. args: ["aBinding"],
  440. source: "applyBindingAction: aBinding\x0a aBinding callback value.\x0a\x09self deactivate",
  441. messageSends: ["value", "callback", "deactivate"],
  442. referencedClasses: []
  443. }),
  444. smalltalk.HLKeyBinder);
  445. smalltalk.addMethod(
  446. "_applyBindingGroup_",
  447. smalltalk.method({
  448. selector: "applyBindingGroup:",
  449. category: 'actions',
  450. fn: function (aBinding){
  451. var self=this;
  452. self["@selectedBinding"]=aBinding;
  453. smalltalk.send(smalltalk.send(self,"_helper",[]),"_refresh",[]);
  454. return self},
  455. args: ["aBinding"],
  456. source: "applyBindingGroup: aBinding\x0a selectedBinding := aBinding.\x0a self helper refresh",
  457. messageSends: ["refresh", "helper"],
  458. referencedClasses: []
  459. }),
  460. smalltalk.HLKeyBinder);
  461. smalltalk.addMethod(
  462. "_bindings",
  463. smalltalk.method({
  464. selector: "bindings",
  465. category: 'accessing',
  466. fn: function (){
  467. var self=this;
  468. var $1;
  469. if(($receiver = self["@bindings"]) == nil || $receiver == undefined){
  470. self["@bindings"]=smalltalk.send((smalltalk.HLBindingGroup || HLBindingGroup),"_new",[]);
  471. $1=self["@bindings"];
  472. } else {
  473. $1=self["@bindings"];
  474. };
  475. return $1;
  476. },
  477. args: [],
  478. source: "bindings\x0a\x09^ bindings ifNil: [ bindings := HLBindingGroup new ]",
  479. messageSends: ["ifNil:", "new"],
  480. referencedClasses: ["HLBindingGroup"]
  481. }),
  482. smalltalk.HLKeyBinder);
  483. smalltalk.addMethod(
  484. "_deactivate",
  485. smalltalk.method({
  486. selector: "deactivate",
  487. category: 'actions',
  488. fn: function (){
  489. var self=this;
  490. self["@active"]=false;
  491. self["@selectedBinding"]=nil;
  492. smalltalk.send(smalltalk.send(self,"_helper",[]),"_hide",[]);
  493. return self},
  494. args: [],
  495. source: "deactivate\x0a\x09active := false.\x0a selectedBinding := nil.\x0a\x09self helper hide",
  496. messageSends: ["hide", "helper"],
  497. referencedClasses: []
  498. }),
  499. smalltalk.HLKeyBinder);
  500. smalltalk.addMethod(
  501. "_escapeKey",
  502. smalltalk.method({
  503. selector: "escapeKey",
  504. category: 'accessing',
  505. fn: function (){
  506. var self=this;
  507. return (27);
  508. },
  509. args: [],
  510. source: "escapeKey\x0a\x09\x22ESC\x22\x0a\x09^ 27",
  511. messageSends: [],
  512. referencedClasses: []
  513. }),
  514. smalltalk.HLKeyBinder);
  515. smalltalk.addMethod(
  516. "_flushBindings",
  517. smalltalk.method({
  518. selector: "flushBindings",
  519. category: 'actions',
  520. fn: function (){
  521. var self=this;
  522. self["@bindings"]=nil;
  523. self["@helper"]=nil;
  524. return self},
  525. args: [],
  526. source: "flushBindings\x0a\x09bindings := nil.\x0a helper := nil",
  527. messageSends: [],
  528. referencedClasses: []
  529. }),
  530. smalltalk.HLKeyBinder);
  531. smalltalk.addMethod(
  532. "_handleActiveKeyDown_",
  533. smalltalk.method({
  534. selector: "handleActiveKeyDown:",
  535. category: 'events',
  536. fn: function (event){
  537. var self=this;
  538. var $1,$2;
  539. $1=smalltalk.send(smalltalk.send(smalltalk.send(event,"_which",[]),"__eq",[smalltalk.send(self,"_escapeKey",[])]),"_or_",[(function(){
  540. return smalltalk.send(smalltalk.send(smalltalk.send(event,"_which",[]),"__eq",[(71)]),"_and_",[(function(){
  541. return smalltalk.send(event,"_ctrlKey",[]);
  542. })]);
  543. })]);
  544. if(smalltalk.assert($1)){
  545. smalltalk.send(self,"_deactivate",[]);
  546. smalltalk.send(event,"_preventDefault",[]);
  547. return false;
  548. };
  549. $2=smalltalk.send(self,"_handleBindingFor_",[event]);
  550. return $2;
  551. },
  552. args: ["event"],
  553. source: "handleActiveKeyDown: event\x0a\x0a\x09\x22ESC or ctrl+g deactivate the keyBinder\x22\x0a\x09(event which = self escapeKey or: [\x0a\x09\x09event which = 71 and: [ event ctrlKey ] ])\x0a \x09ifTrue: [ \x0a \x09self deactivate.\x0a\x09\x09\x09\x09event preventDefault.\x0a\x09\x09\x09\x09^ false ].\x0a \x0a \x22Handle the keybinding\x22\x0a ^ self handleBindingFor: event",
  554. messageSends: ["ifTrue:", "deactivate", "preventDefault", "or:", "and:", "ctrlKey", "=", "which", "escapeKey", "handleBindingFor:"],
  555. referencedClasses: []
  556. }),
  557. smalltalk.HLKeyBinder);
  558. smalltalk.addMethod(
  559. "_handleBindingFor_",
  560. smalltalk.method({
  561. selector: "handleBindingFor:",
  562. category: 'events',
  563. fn: function (anEvent){
  564. var self=this;
  565. var binding;
  566. binding=smalltalk.send(smalltalk.send(self,"_selectedBinding",[]),"_atKey_",[smalltalk.send(anEvent,"_which",[])]);
  567. if(($receiver = binding) == nil || $receiver == undefined){
  568. binding;
  569. } else {
  570. smalltalk.send(self,"_applyBinding_",[binding]);
  571. smalltalk.send(anEvent,"_preventDefault",[]);
  572. return false;
  573. };
  574. return self},
  575. args: ["anEvent"],
  576. source: "handleBindingFor: anEvent\x0a\x09| binding |\x0a binding := self selectedBinding atKey: anEvent which.\x0a \x0a binding ifNotNil: [ \x0a \x09self applyBinding: binding.\x0a\x09\x09anEvent preventDefault.\x0a\x09\x09^ false ]",
  577. messageSends: ["atKey:", "which", "selectedBinding", "ifNotNil:", "applyBinding:", "preventDefault"],
  578. referencedClasses: []
  579. }),
  580. smalltalk.HLKeyBinder);
  581. smalltalk.addMethod(
  582. "_handleInactiveKeyDown_",
  583. smalltalk.method({
  584. selector: "handleInactiveKeyDown:",
  585. category: 'events',
  586. fn: function (event){
  587. var self=this;
  588. var $1,$3,$2;
  589. $1=smalltalk.send(smalltalk.send(event,"_which",[]),"__eq",[smalltalk.send(self,"_activationKey",[])]);
  590. if(smalltalk.assert($1)){
  591. $3=smalltalk.send(self,"_systemIsMac",[]);
  592. if(smalltalk.assert($3)){
  593. $2=smalltalk.send(event,"_metaKey",[]);
  594. } else {
  595. $2=smalltalk.send(event,"_ctrlKey",[]);
  596. };
  597. if(smalltalk.assert($2)){
  598. smalltalk.send(self,"_activate",[]);
  599. smalltalk.send(event,"_preventDefault",[]);
  600. return false;
  601. };
  602. };
  603. return self},
  604. args: ["event"],
  605. source: "handleInactiveKeyDown: event\x0a\x09event which = self activationKey ifTrue: [\x0a (self systemIsMac\x0a ifTrue: [ event metaKey ]\x0a ifFalse: [ event ctrlKey ]) ifTrue: [\x0a\x09\x09\x09\x09\x09self activate. \x0a \x09\x09 event preventDefault. \x0a \x09^ false ] ]",
  606. messageSends: ["ifTrue:", "activate", "preventDefault", "ifTrue:ifFalse:", "metaKey", "ctrlKey", "systemIsMac", "=", "activationKey", "which"],
  607. referencedClasses: []
  608. }),
  609. smalltalk.HLKeyBinder);
  610. smalltalk.addMethod(
  611. "_handleKeyDown_",
  612. smalltalk.method({
  613. selector: "handleKeyDown:",
  614. category: 'events',
  615. fn: function (event){
  616. var self=this;
  617. var $2,$1;
  618. $2=smalltalk.send(self,"_isActive",[]);
  619. if(smalltalk.assert($2)){
  620. $1=smalltalk.send(self,"_handleActiveKeyDown_",[event]);
  621. } else {
  622. $1=smalltalk.send(self,"_handleInactiveKeyDown_",[event]);
  623. };
  624. return $1;
  625. },
  626. args: ["event"],
  627. source: "handleKeyDown: event\x0a\x09^ self isActive\x0a \x09ifTrue: [ self handleActiveKeyDown: event ]\x0a \x09ifFalse: [ self handleInactiveKeyDown: event ]",
  628. messageSends: ["ifTrue:ifFalse:", "handleActiveKeyDown:", "handleInactiveKeyDown:", "isActive"],
  629. referencedClasses: []
  630. }),
  631. smalltalk.HLKeyBinder);
  632. smalltalk.addMethod(
  633. "_helper",
  634. smalltalk.method({
  635. selector: "helper",
  636. category: 'accessing',
  637. fn: function (){
  638. var self=this;
  639. var $1;
  640. if(($receiver = self["@helper"]) == nil || $receiver == undefined){
  641. self["@helper"]=smalltalk.send((smalltalk.HLKeyBinderHelper || HLKeyBinderHelper),"_on_",[self]);
  642. $1=self["@helper"];
  643. } else {
  644. $1=self["@helper"];
  645. };
  646. return $1;
  647. },
  648. args: [],
  649. source: "helper\x0a\x09^ helper ifNil: [ helper := HLKeyBinderHelper on: self ]",
  650. messageSends: ["ifNil:", "on:"],
  651. referencedClasses: ["HLKeyBinderHelper"]
  652. }),
  653. smalltalk.HLKeyBinder);
  654. smalltalk.addMethod(
  655. "_initialize",
  656. smalltalk.method({
  657. selector: "initialize",
  658. category: 'initialization',
  659. fn: function (){
  660. var self=this;
  661. smalltalk.send(self,"_initialize",[],smalltalk.Object);
  662. self["@active"]=false;
  663. return self},
  664. args: [],
  665. source: "initialize\x0a\x09super initialize.\x0a active := false",
  666. messageSends: ["initialize"],
  667. referencedClasses: []
  668. }),
  669. smalltalk.HLKeyBinder);
  670. smalltalk.addMethod(
  671. "_isActive",
  672. smalltalk.method({
  673. selector: "isActive",
  674. category: 'testing',
  675. fn: function (){
  676. var self=this;
  677. var $1;
  678. if(($receiver = self["@active"]) == nil || $receiver == undefined){
  679. $1=false;
  680. } else {
  681. $1=self["@active"];
  682. };
  683. return $1;
  684. },
  685. args: [],
  686. source: "isActive\x0a\x09^ active ifNil: [ false ]",
  687. messageSends: ["ifNil:"],
  688. referencedClasses: []
  689. }),
  690. smalltalk.HLKeyBinder);
  691. smalltalk.addMethod(
  692. "_selectedBinding",
  693. smalltalk.method({
  694. selector: "selectedBinding",
  695. category: 'accessing',
  696. fn: function (){
  697. var self=this;
  698. var $1;
  699. if(($receiver = self["@selectedBinding"]) == nil || $receiver == undefined){
  700. $1=smalltalk.send(self,"_bindings",[]);
  701. } else {
  702. $1=self["@selectedBinding"];
  703. };
  704. return $1;
  705. },
  706. args: [],
  707. source: "selectedBinding\x0a\x09^ selectedBinding ifNil: [ self bindings ]",
  708. messageSends: ["ifNil:", "bindings"],
  709. referencedClasses: []
  710. }),
  711. smalltalk.HLKeyBinder);
  712. smalltalk.addMethod(
  713. "_setupEvents",
  714. smalltalk.method({
  715. selector: "setupEvents",
  716. category: 'events',
  717. fn: function (){
  718. var self=this;
  719. smalltalk.send(smalltalk.send(window,"_jQuery_",["body"]),"_keydown_",[(function(event){
  720. return smalltalk.send(self,"_handleKeyDown_",[event]);
  721. })]);
  722. return self},
  723. args: [],
  724. source: "setupEvents\x0a\x09(window jQuery: 'body') keydown: [ :event | self handleKeyDown: event ]",
  725. messageSends: ["keydown:", "handleKeyDown:", "jQuery:"],
  726. referencedClasses: []
  727. }),
  728. smalltalk.HLKeyBinder);
  729. smalltalk.addMethod(
  730. "_systemIsMac",
  731. smalltalk.method({
  732. selector: "systemIsMac",
  733. category: 'testing',
  734. fn: function (){
  735. var self=this;
  736. var $1;
  737. $1=smalltalk.send(smalltalk.send(navigator,"_platform",[]),"_match_",["Mac"]);
  738. return $1;
  739. },
  740. args: [],
  741. source: "systemIsMac\x0a\x09^ navigator platform match: 'Mac'",
  742. messageSends: ["match:", "platform"],
  743. referencedClasses: []
  744. }),
  745. smalltalk.HLKeyBinder);
  746. smalltalk.addClass('HLKeyBinderHelper', smalltalk.HLWidget, ['keyBinder'], 'Helios-KeyBindings');
  747. smalltalk.addMethod(
  748. "_hide",
  749. smalltalk.method({
  750. selector: "hide",
  751. category: 'actions',
  752. fn: function (){
  753. var self=this;
  754. smalltalk.send(smalltalk.send(self["@rootDiv"],"_asJQuery",[]),"_remove",[]);
  755. return self},
  756. args: [],
  757. source: "hide\x0a\x09rootDiv asJQuery remove",
  758. messageSends: ["remove", "asJQuery"],
  759. referencedClasses: []
  760. }),
  761. smalltalk.HLKeyBinderHelper);
  762. smalltalk.addMethod(
  763. "_keyBinder",
  764. smalltalk.method({
  765. selector: "keyBinder",
  766. category: 'accessing',
  767. fn: function (){
  768. var self=this;
  769. return self["@keyBinder"];
  770. },
  771. args: [],
  772. source: "keyBinder\x0a\x09^ keyBinder",
  773. messageSends: [],
  774. referencedClasses: []
  775. }),
  776. smalltalk.HLKeyBinderHelper);
  777. smalltalk.addMethod(
  778. "_keyBinder_",
  779. smalltalk.method({
  780. selector: "keyBinder:",
  781. category: 'accessing',
  782. fn: function (aKeyBinder){
  783. var self=this;
  784. self["@keyBinder"]=aKeyBinder;
  785. return self},
  786. args: ["aKeyBinder"],
  787. source: "keyBinder: aKeyBinder\x0a\x09keyBinder := aKeyBinder",
  788. messageSends: [],
  789. referencedClasses: []
  790. }),
  791. smalltalk.HLKeyBinderHelper);
  792. smalltalk.addMethod(
  793. "_registerBindings",
  794. smalltalk.method({
  795. selector: "registerBindings",
  796. category: 'keyBindings',
  797. fn: function (){
  798. var self=this;
  799. return self},
  800. args: [],
  801. source: "registerBindings\x0a\x09\x22Do nothing\x22",
  802. messageSends: [],
  803. referencedClasses: []
  804. }),
  805. smalltalk.HLKeyBinderHelper);
  806. smalltalk.addMethod(
  807. "_renderBindingGroup_on_",
  808. smalltalk.method({
  809. selector: "renderBindingGroup:on:",
  810. category: 'rendering',
  811. fn: function (aBindingGroup,html){
  812. var self=this;
  813. var $1,$3,$4,$5,$6,$2;
  814. smalltalk.send(smalltalk.send(smalltalk.send(aBindingGroup,"_bindings",[]),"_sorted_",[(function(a,b){
  815. return smalltalk.send(smalltalk.send(a,"_key",[]),"__lt",[smalltalk.send(b,"_key",[])]);
  816. })]),"_do_",[(function(each){
  817. $1=smalltalk.send(html,"_span",[]);
  818. smalltalk.send($1,"_class_",["command"]);
  819. $2=smalltalk.send($1,"_with_",[(function(){
  820. $3=smalltalk.send(html,"_span",[]);
  821. smalltalk.send($3,"_class_",["label"]);
  822. $4=smalltalk.send($3,"_with_",[smalltalk.send(smalltalk.send(each,"_shortcut",[]),"_asLowercase",[])]);
  823. $4;
  824. $5=smalltalk.send(html,"_a",[]);
  825. smalltalk.send($5,"_class_",["action"]);
  826. smalltalk.send($5,"_with_",[smalltalk.send(each,"_label",[])]);
  827. $6=smalltalk.send($5,"_onClick_",[(function(){
  828. return smalltalk.send(smalltalk.send(self,"_keyBinder",[]),"_applyBinding_",[each]);
  829. })]);
  830. return $6;
  831. })]);
  832. return $2;
  833. })]);
  834. return self},
  835. args: ["aBindingGroup", "html"],
  836. source: "renderBindingGroup: aBindingGroup on: html\x0a\x09(aBindingGroup bindings \x0a \x09sorted: [ :a :b | a key < b key ])\x0a do: [ :each |\x0a\x09\x09\x09html span class: 'command'; with: [\x0a\x09\x09\x09\x09html span class: 'label'; with: each shortcut asLowercase.\x0a \x09\x09\x09\x09html a \x0a \x09class: 'action'; \x0a with: each label;\x0a \x09\x09\x09\x09\x09onClick: [ self keyBinder applyBinding: each ] ] ]",
  837. messageSends: ["do:", "class:", "span", "with:", "asLowercase", "shortcut", "a", "label", "onClick:", "applyBinding:", "keyBinder", "sorted:", "<", "key", "bindings"],
  838. referencedClasses: []
  839. }),
  840. smalltalk.HLKeyBinderHelper);
  841. smalltalk.addMethod(
  842. "_renderBindingOn_",
  843. smalltalk.method({
  844. selector: "renderBindingOn:",
  845. category: 'rendering',
  846. fn: function (html){
  847. var self=this;
  848. smalltalk.send(smalltalk.send(self,"_selectedBinding",[]),"_renderOn_html_",[self,html]);
  849. return self},
  850. args: ["html"],
  851. source: "renderBindingOn: html\x0a\x09self selectedBinding renderOn: self html: html",
  852. messageSends: ["renderOn:html:", "selectedBinding"],
  853. referencedClasses: []
  854. }),
  855. smalltalk.HLKeyBinderHelper);
  856. smalltalk.addMethod(
  857. "_renderContentOn_",
  858. smalltalk.method({
  859. selector: "renderContentOn:",
  860. category: 'rendering',
  861. fn: function (html){
  862. var self=this;
  863. var $1,$3,$2;
  864. $1=smalltalk.send(html,"_div",[]);
  865. smalltalk.send($1,"_class_",["key_helper"]);
  866. $2=smalltalk.send($1,"_with_",[(function(){
  867. smalltalk.send(self,"_renderSelectionOn_",[html]);
  868. $3=smalltalk.send(self,"_renderBindingOn_",[html]);
  869. return $3;
  870. })]);
  871. return self},
  872. args: ["html"],
  873. source: "renderContentOn: html\x0a\x09html div class: 'key_helper'; with: [\x0a \x09self \x0a \x09renderSelectionOn:html;\x0a \x09renderBindingOn: html ]",
  874. messageSends: ["class:", "div", "with:", "renderSelectionOn:", "renderBindingOn:"],
  875. referencedClasses: []
  876. }),
  877. smalltalk.HLKeyBinderHelper);
  878. smalltalk.addMethod(
  879. "_renderSelectionOn_",
  880. smalltalk.method({
  881. selector: "renderSelectionOn:",
  882. category: 'rendering',
  883. fn: function (html){
  884. var self=this;
  885. var $1,$4,$3,$2;
  886. $1=smalltalk.send(html,"_span",[]);
  887. smalltalk.send($1,"_class_",["selected"]);
  888. $4=smalltalk.send(smalltalk.send(self,"_selectedBinding",[]),"_label",[]);
  889. if(($receiver = $4) == nil || $receiver == undefined){
  890. $3="Action";
  891. } else {
  892. $3=$4;
  893. };
  894. $2=smalltalk.send($1,"_with_",[$3]);
  895. return self},
  896. args: ["html"],
  897. source: "renderSelectionOn: html\x0a\x09\x09html span \x0a \x09class: 'selected'; \x0a with: (self selectedBinding label ifNil: [ 'Action' ])",
  898. messageSends: ["class:", "span", "with:", "ifNil:", "label", "selectedBinding"],
  899. referencedClasses: []
  900. }),
  901. smalltalk.HLKeyBinderHelper);
  902. smalltalk.addMethod(
  903. "_selectedBinding",
  904. smalltalk.method({
  905. selector: "selectedBinding",
  906. category: 'accessing',
  907. fn: function (){
  908. var self=this;
  909. var $1;
  910. $1=smalltalk.send(smalltalk.send(self,"_keyBinder",[]),"_selectedBinding",[]);
  911. return $1;
  912. },
  913. args: [],
  914. source: "selectedBinding\x0a\x09^ self keyBinder selectedBinding",
  915. messageSends: ["selectedBinding", "keyBinder"],
  916. referencedClasses: []
  917. }),
  918. smalltalk.HLKeyBinderHelper);
  919. smalltalk.addMethod(
  920. "_show",
  921. smalltalk.method({
  922. selector: "show",
  923. category: 'actions',
  924. fn: function (){
  925. var self=this;
  926. smalltalk.send(self,"_appendToJQuery_",[smalltalk.send("body","_asJQuery",[])]);
  927. return self},
  928. args: [],
  929. source: "show\x0a\x09self appendToJQuery: 'body' asJQuery",
  930. messageSends: ["appendToJQuery:", "asJQuery"],
  931. referencedClasses: []
  932. }),
  933. smalltalk.HLKeyBinderHelper);
  934. smalltalk.addMethod(
  935. "_on_",
  936. smalltalk.method({
  937. selector: "on:",
  938. category: 'instance creation',
  939. fn: function (aKeyBinder){
  940. var self=this;
  941. var $2,$3,$1;
  942. $2=smalltalk.send(self,"_new",[]);
  943. smalltalk.send($2,"_keyBinder_",[aKeyBinder]);
  944. $3=smalltalk.send($2,"_yourself",[]);
  945. $1=$3;
  946. return $1;
  947. },
  948. args: ["aKeyBinder"],
  949. source: "on: aKeyBinder\x0a\x09^ self new\x0a \x09keyBinder: aKeyBinder;\x0a yourself",
  950. messageSends: ["keyBinder:", "new", "yourself"],
  951. referencedClasses: []
  952. }),
  953. smalltalk.HLKeyBinderHelper.klass);