1
0

Helios-KeyBindings.js 28 KB

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