Canvas.st 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047
  1. Smalltalk current createPackage: 'Canvas' properties: #{}!
  2. Object subclass: #HTMLCanvas
  3. instanceVariableNames: 'root'
  4. package: 'Canvas'!
  5. !HTMLCanvas methodsFor: 'accessing'!
  6. root
  7. ^root
  8. !
  9. root: aTagBrush
  10. root := aTagBrush
  11. !
  12. snippet: anElement
  13. "Adds clone of anElement, finds [data-snippet=""*""] subelement
  14. and returns TagBrush as if that subelement was just added.
  15. Rarely needed to use directly, use `html foo` dynamically installed method
  16. for a snippet named foo."
  17. | clone caret |
  18. clone := anElement asJQuery clone.
  19. self with: (TagBrush fromJQuery: clone canvas: self).
  20. caret := clone find: '[data-snippet="*"]'.
  21. caret toArray isEmpty ifTrue: [ caret := clone ].
  22. ^TagBrush fromJQuery: (caret removeAttr: 'data-snippet') canvas: self
  23. ! !
  24. !HTMLCanvas methodsFor: 'adding'!
  25. with: anObject
  26. ^self root with: anObject
  27. ! !
  28. !HTMLCanvas methodsFor: 'initialization'!
  29. initialize
  30. super initialize.
  31. root ifNil: [root := TagBrush fromString: 'div' canvas: self]
  32. !
  33. initializeFromJQuery: aJQuery
  34. root := TagBrush fromJQuery: aJQuery canvas: self
  35. ! !
  36. !HTMLCanvas methodsFor: 'tags'!
  37. a
  38. ^self tag: 'a'
  39. !
  40. abbr
  41. ^self tag: 'abbr'
  42. !
  43. address
  44. ^self tag: 'address'
  45. !
  46. area
  47. ^self tag: 'area'
  48. !
  49. article
  50. ^self tag: 'article'
  51. !
  52. aside
  53. ^self tag: 'aside'
  54. !
  55. audio
  56. ^self tag: 'audio'
  57. !
  58. base
  59. ^self tag: 'base'
  60. !
  61. blockquote
  62. ^self tag: 'blockquote'
  63. !
  64. body
  65. ^self tag: 'body'
  66. !
  67. br
  68. ^self tag: 'br'
  69. !
  70. button
  71. ^self tag: 'button'
  72. !
  73. canvas
  74. ^self tag: 'canvas'
  75. !
  76. caption
  77. ^self tag: 'caption'
  78. !
  79. cite
  80. ^self tag: 'cite'
  81. !
  82. code
  83. ^self tag: 'code'
  84. !
  85. col
  86. ^self tag: 'col'
  87. !
  88. colgroup
  89. ^self tag: 'colgroup'
  90. !
  91. command
  92. ^self tag: 'command'
  93. !
  94. datalist
  95. ^self tag: 'datalist'
  96. !
  97. dd
  98. ^self tag: 'dd'
  99. !
  100. del
  101. ^self tag: 'del'
  102. !
  103. details
  104. ^self tag: 'details'
  105. !
  106. div
  107. ^self tag: 'div'
  108. !
  109. div: aBlock
  110. ^self div with: aBlock
  111. !
  112. dl
  113. ^self tag: 'dl'
  114. !
  115. dt
  116. ^self tag: 'dt'
  117. !
  118. em
  119. ^self tag: 'em'
  120. !
  121. embed
  122. ^self tag: 'embed'
  123. !
  124. fieldset
  125. ^self tag: 'fieldset'
  126. !
  127. figcaption
  128. ^self tag: 'figcaption'
  129. !
  130. figure
  131. ^self tag: 'figure'
  132. !
  133. footer
  134. ^self tag: 'footer'
  135. !
  136. form
  137. ^self tag: 'form'
  138. !
  139. h1
  140. ^self tag: 'h1'
  141. !
  142. h1: anObject
  143. ^self h1 with: anObject
  144. !
  145. h2
  146. ^self tag: 'h2'
  147. !
  148. h2: anObject
  149. ^ self h2 with: anObject
  150. !
  151. h3
  152. ^self tag: 'h3'
  153. !
  154. h3: anObject
  155. ^self h3 with: anObject
  156. !
  157. h4
  158. ^self tag: 'h4'
  159. !
  160. h4: anObject
  161. ^self h4 with: anObject
  162. !
  163. h5
  164. ^self tag: 'h5'
  165. !
  166. h5: anObject
  167. ^self h5 with: anObject
  168. !
  169. h6
  170. ^self tag: 'h6'
  171. !
  172. h6: anObject
  173. ^self h6 with: anObject
  174. !
  175. head
  176. ^self tag: 'head'
  177. !
  178. header
  179. ^self tag: 'header'
  180. !
  181. hgroup
  182. ^self tag: 'hgroup'
  183. !
  184. hr
  185. ^self tag: 'hr'
  186. !
  187. html
  188. ^self tag: 'html'
  189. !
  190. iframe
  191. ^self tag: 'iframe'
  192. !
  193. iframe: aString
  194. ^self iframe src: aString
  195. !
  196. img
  197. ^self tag: 'img'
  198. !
  199. img: aString
  200. ^self img src: aString
  201. !
  202. input
  203. ^self tag: 'input'
  204. !
  205. label
  206. ^self tag: 'label'
  207. !
  208. legend
  209. ^self tag: 'legend'
  210. !
  211. li
  212. ^self tag: 'li'
  213. !
  214. li: anObject
  215. ^self li with: anObject
  216. !
  217. link
  218. ^self tag: 'link'
  219. !
  220. map
  221. ^self tag: 'map'
  222. !
  223. mark
  224. ^self tag: 'mark'
  225. !
  226. menu
  227. ^self tag: 'menu'
  228. !
  229. meta
  230. ^self tag: 'meta'
  231. !
  232. nav
  233. ^self tag: 'nav'
  234. !
  235. newTag: aString
  236. ^TagBrush fromString: aString canvas: self
  237. !
  238. noscript
  239. ^self tag: 'noscript'
  240. !
  241. object
  242. ^self tag: 'object'
  243. !
  244. ol
  245. ^self tag: 'ol'
  246. !
  247. ol: anObject
  248. ^self ol with: anObject
  249. !
  250. optgroup
  251. ^self tag: 'optgroup'
  252. !
  253. option
  254. ^self tag: 'option'
  255. !
  256. output
  257. ^self tag: 'output'
  258. !
  259. p
  260. ^self tag: 'p'
  261. !
  262. p: anObject
  263. ^self p with: anObject
  264. !
  265. param
  266. ^self tag: 'param'
  267. !
  268. pre
  269. ^self tag: 'pre'
  270. !
  271. progress
  272. ^self tag: 'progress'
  273. !
  274. script
  275. ^self tag: 'script'
  276. !
  277. section
  278. ^self tag: 'section'
  279. !
  280. select
  281. ^self tag: 'select'
  282. !
  283. small
  284. ^self tag: 'small'
  285. !
  286. source
  287. ^self tag: 'source'
  288. !
  289. span
  290. ^self tag: 'span'
  291. !
  292. span: anObject
  293. ^self span with: anObject
  294. !
  295. strong
  296. ^self tag: 'strong'
  297. !
  298. strong: anObject
  299. ^self strong with: anObject
  300. !
  301. style
  302. ^ root addBrush: (StyleTag canvas: self)
  303. !
  304. style: aString
  305. ^ self style with: aString; yourself
  306. !
  307. sub
  308. ^self tag: 'sub'
  309. !
  310. summary
  311. ^self tag: 'summary'
  312. !
  313. sup
  314. ^self tag: 'sup'
  315. !
  316. table
  317. ^self tag: 'table'
  318. !
  319. tag: aString
  320. ^root addBrush: (self newTag: aString)
  321. !
  322. tbody
  323. ^self tag: 'tbody'
  324. !
  325. td
  326. ^self tag: 'td'
  327. !
  328. textarea
  329. ^self tag: 'textarea'
  330. !
  331. tfoot
  332. ^self tag: 'tfoot'
  333. !
  334. th
  335. ^self tag: 'th'
  336. !
  337. thead
  338. ^self tag: 'thead'
  339. !
  340. time
  341. ^self tag: 'time'
  342. !
  343. title
  344. ^self tag: 'title'
  345. !
  346. tr
  347. ^self tag: 'tr'
  348. !
  349. ul
  350. ^self tag: 'ul'
  351. !
  352. ul: anObject
  353. ^self ul with: anObject
  354. !
  355. video
  356. ^self tag: 'video'
  357. ! !
  358. !HTMLCanvas class methodsFor: 'instance creation'!
  359. browserVersion
  360. ^(jQuery at: #browser) version
  361. !
  362. isMSIE
  363. ^((jQuery at: #browser) at: #msie) notNil
  364. !
  365. isMozilla
  366. ^((jQuery at: #browser) at: #mozilla) notNil
  367. !
  368. isOpera
  369. ^((jQuery at: #browser) at: #opera) notNil
  370. !
  371. isWebkit
  372. ^((jQuery at: #browser) at: #webkit) notNil
  373. !
  374. onJQuery: aJQuery
  375. ^self basicNew
  376. initializeFromJQuery: aJQuery;
  377. initialize;
  378. yourself
  379. ! !
  380. Object subclass: #HTMLSnippet
  381. instanceVariableNames: 'snippets'
  382. package: 'Canvas'!
  383. !HTMLSnippet commentStamp!
  384. HTMLSnippet instance is the registry of html snippets.
  385. HTMLSnippet current is the public singleton instance.
  386. At the beginning, it scans the document for any html elements
  387. with 'data-snippet="foo"' attribute and takes them off the document,
  388. remembering them in the store under the specified name.
  389. It also install method #foo into HTMLCanvas dynamically.
  390. Every html snippet should mark a 'caret', a place where contents
  391. can be inserted, by 'data-snippet="*"' (a special name for caret).
  392. For example:
  393. <li data-snippet='menuelement' class='...'><a data-snippet='*'></a></li>
  394. defines a list element with a link inside; the link itself is marked as a caret.
  395. You can later issue
  396. html menuelement href: '/foo'; with: 'A foo'
  397. to insert the whole snippet and directly manipulate the caret, so it renders:
  398. <li class='...'><a href='/foo'>A foo</a></li>
  399. For a self-careting tags (not very useful, but you do not need to fill class etc.
  400. you can use
  401. <div class='lots of classes' attr1='one' attr2='two' data-snippet='*bar'></div>
  402. and in code later do:
  403. html bar with: [ xxx ]
  404. to render
  405. <div class='lots of classes' attr1='one' attr2='two'>...added by xxx...</div>!
  406. !HTMLSnippet methodsFor: 'accessing'!
  407. snippetAt: aString
  408. ^ self snippets at: aString
  409. !
  410. snippetAt: aString ifAbsent: aBlock
  411. ^ self snippets at: aString ifAbsent: aBlock
  412. !
  413. snippetAt: aString put: anElement
  414. self snippets at: aString put: anElement
  415. !
  416. snippets
  417. ^snippets ifNil: [ snippets := #{} ]
  418. ! !
  419. !HTMLSnippet methodsFor: 'initialization'!
  420. initializeFromJQuery: aJQuery
  421. "Finds and takes out all snippets out of aJQuery.
  422. Installs it into self."
  423. (self snippetsFromJQuery: aJQuery) do: [ :each |
  424. self installSnippetFromJQuery: each asJQuery ]
  425. ! !
  426. !HTMLSnippet methodsFor: 'method generation'!
  427. snippetAt: aString compile: anElement
  428. "Method generation for the snippet.
  429. The selector is aString, the method block uses anElement"
  430. ClassBuilder new
  431. installMethod: ([ :htmlReceiver | htmlReceiver snippet: anElement ]
  432. currySelf asCompiledMethod: aString)
  433. forClass: HTMLCanvas
  434. category: '**snippets'
  435. ! !
  436. !HTMLSnippet methodsFor: 'private'!
  437. snippetsFromJQuery: aJQuery
  438. ^ (aJQuery find: '[data-snippet]') toArray
  439. ! !
  440. !HTMLSnippet methodsFor: 'snippet installation'!
  441. installSnippetFromJQuery: element
  442. | name |
  443. name := element attr: 'data-snippet'.
  444. name = '*' ifFalse: [
  445. ('^\*' asRegexp test: name)
  446. ifTrue: [
  447. name := name allButFirst.
  448. element attr: 'data-snippet' put: '*' ]
  449. ifFalse: [
  450. element removeAttr: 'data-snippet' ].
  451. self snippetAt: name install: (element detach get: 0) ]
  452. !
  453. snippetAt: aString install: anElement
  454. self
  455. snippetAt: aString put: anElement;
  456. snippetAt: aString compile: anElement
  457. ! !
  458. HTMLSnippet class instanceVariableNames: 'current'!
  459. !HTMLSnippet class methodsFor: 'initialization'!
  460. ensureCurrent
  461. current ifNil: [
  462. current := super new
  463. initializeFromJQuery: document asJQuery;
  464. yourself ]
  465. !
  466. initialize
  467. super initialize.
  468. self ensureCurrent
  469. ! !
  470. !HTMLSnippet class methodsFor: 'instance creation'!
  471. current
  472. ^ current
  473. !
  474. new
  475. self shouldNotImplement
  476. ! !
  477. Object subclass: #TagBrush
  478. instanceVariableNames: 'canvas element'
  479. package: 'Canvas'!
  480. !TagBrush methodsFor: 'accessing'!
  481. element
  482. ^element
  483. ! !
  484. !TagBrush methodsFor: 'adding'!
  485. addBrush: aTagBrush
  486. self appendChild: aTagBrush element.
  487. ^aTagBrush
  488. !
  489. append: anObject
  490. anObject appendToBrush: self
  491. !
  492. appendBlock: aBlock
  493. | root |
  494. root := canvas root.
  495. canvas root: self.
  496. aBlock value: canvas.
  497. canvas root: root
  498. !
  499. appendChild: anElement
  500. "In IE7 and IE8 appendChild fails on several node types. So we need to check"
  501. <var element=self['@element'];
  502. if (null == element.canHaveChildren || element.canHaveChildren) {
  503. element.appendChild(anElement);
  504. } else {
  505. element.text = String(element.text) + anElement.innerHTML;
  506. } >
  507. !
  508. appendString: aString
  509. self appendChild: (self createTextNodeFor: aString)
  510. !
  511. appendToBrush: aTagBrush
  512. aTagBrush addBrush: self
  513. !
  514. contents: anObject
  515. self
  516. empty;
  517. append: anObject
  518. !
  519. empty
  520. self asJQuery empty
  521. !
  522. with: anObject
  523. self append: anObject
  524. ! !
  525. !TagBrush methodsFor: 'attributes'!
  526. accesskey: aString
  527. self at: 'accesskey' put: aString
  528. !
  529. action: aString
  530. self at: 'action' put: aString
  531. !
  532. align: aString
  533. self at: 'align' put: aString
  534. !
  535. alt: aString
  536. self at: 'alt' put: aString
  537. !
  538. at: aString put: aValue
  539. <self['@element'].setAttribute(aString, aValue)>
  540. !
  541. class: aString
  542. <self['@element'].className = aString>
  543. !
  544. cols: aString
  545. self at: 'cols' put: aString
  546. !
  547. contenteditable: aString
  548. self at: 'contenteditable' put: aString
  549. !
  550. contextmenu: aString
  551. self at: 'contextmenu' put: aString
  552. !
  553. draggable: aString
  554. self at: 'draggable' put: aString
  555. !
  556. for: aString
  557. self at: 'for' put: aString
  558. !
  559. height: aString
  560. self at: 'height' put: aString
  561. !
  562. hidden
  563. self at: 'hidden' put: 'hidden'
  564. !
  565. href: aString
  566. self at: 'href' put: aString
  567. !
  568. id: aString
  569. self at: 'id' put: aString
  570. !
  571. media: aString
  572. self at: 'media' put: aString
  573. !
  574. method: aString
  575. self at: 'method' put: aString
  576. !
  577. name: aString
  578. self at: 'name' put: aString
  579. !
  580. placeholder: aString
  581. self at: 'placeholder' put: aString
  582. !
  583. rel: aString
  584. self at: 'rel' put: aString
  585. !
  586. removeAt: aString
  587. <self['@element'].removeAttribute(aString)>
  588. !
  589. rows: aString
  590. self at: 'rows' put: aString
  591. !
  592. src: aString
  593. self at: 'src' put: aString
  594. !
  595. style: aString
  596. self at: 'style' put: aString
  597. !
  598. tabindex: aNumber
  599. self at: 'tabindex' put: aNumber
  600. !
  601. target: aString
  602. self at: 'target' put: aString
  603. !
  604. title: aString
  605. self at: 'title' put: aString
  606. !
  607. type: aString
  608. self at: 'type' put: aString
  609. !
  610. valign: aString
  611. self at: 'valign' put: aString
  612. !
  613. value: aString
  614. self at: 'value' put: aString
  615. !
  616. width: aString
  617. self at: 'width' put: aString
  618. ! !
  619. !TagBrush methodsFor: 'converting'!
  620. asJQuery
  621. ^window jQuery: self element
  622. ! !
  623. !TagBrush methodsFor: 'events'!
  624. onBlur: aBlock
  625. self asJQuery bind: 'blur' do: aBlock
  626. !
  627. onChange: aBlock
  628. self asJQuery bind: 'change' do: aBlock
  629. !
  630. onClick: aBlock
  631. self asJQuery bind: 'click' do: aBlock
  632. !
  633. onDblClick: aBlock
  634. self asJQuery bind: 'dblclick' do: aBlock
  635. !
  636. onFocus: aBlock
  637. self asJQuery bind: 'focus' do: aBlock
  638. !
  639. onFocusIn: aBlock
  640. self asJQuery bind: 'focusin' do: aBlock
  641. !
  642. onFocusOut: aBlock
  643. self asJQuery bind: 'focusout' do: aBlock
  644. !
  645. onHover: aBlock
  646. self asJQuery bind: 'hover' do: aBlock
  647. !
  648. onKeyDown: aBlock
  649. self asJQuery bind: 'keydown' do: aBlock
  650. !
  651. onKeyPress: aBlock
  652. self asJQuery bind: 'keypress' do: aBlock
  653. !
  654. onKeyUp: aBlock
  655. self asJQuery bind: 'keyup' do: aBlock
  656. !
  657. onMouseDown: aBlock
  658. self asJQuery bind: 'mousedown' do: aBlock
  659. !
  660. onMouseEnter: aBlock
  661. self asJQuery bind: 'mouseenter' do: aBlock
  662. !
  663. onMouseLeave: aBlock
  664. self asJQuery bind: 'mouseleave' do: aBlock
  665. !
  666. onMouseMove: aBlock
  667. self asJQuery bind: 'mousemove' do: aBlock
  668. !
  669. onMouseOut: aBlock
  670. self asJQuery bind: 'mouseout' do: aBlock
  671. !
  672. onMouseOver: aBlock
  673. self asJQuery bind: 'mouseover' do: aBlock
  674. !
  675. onMouseUp: aBlock
  676. self asJQuery bind: 'mouseup' do: aBlock
  677. !
  678. onSelect: aBlock
  679. self asJQuery bind: 'select' do: aBlock
  680. !
  681. onSubmit: aBlock
  682. self asJQuery bind: 'submit' do: aBlock
  683. !
  684. onUnload: aBlock
  685. self asJQuery bind: 'unload' do: aBlock
  686. ! !
  687. !TagBrush methodsFor: 'initialization'!
  688. initializeFromJQuery: aJQuery canvas: aCanvas
  689. element := aJQuery get: 0.
  690. canvas := aCanvas
  691. !
  692. initializeFromString: aString canvas: aCanvas
  693. element := self createElementFor: aString.
  694. canvas := aCanvas
  695. ! !
  696. !TagBrush methodsFor: 'private'!
  697. createElementFor: aString
  698. <return document.createElement(String(aString))>
  699. !
  700. createTextNodeFor: aString
  701. <return document.createTextNode(String(aString))>
  702. ! !
  703. !TagBrush class methodsFor: 'instance creation'!
  704. fromJQuery: aJQuery canvas: aCanvas
  705. ^self new
  706. initializeFromJQuery: aJQuery canvas: aCanvas;
  707. yourself
  708. !
  709. fromString: aString canvas: aCanvas
  710. ^self new
  711. initializeFromString: aString canvas: aCanvas;
  712. yourself
  713. ! !
  714. TagBrush subclass: #StyleTag
  715. instanceVariableNames: 'canvas element'
  716. package: 'Canvas'!
  717. !StyleTag commentStamp!
  718. I'm a <style> tag use to inline CSS or load a stylesheet.
  719. For inlining handle IE compatibility problems.!
  720. !StyleTag methodsFor: 'adding'!
  721. with: aString
  722. HTMLCanvas isMSIE
  723. ifTrue: [self element styleSheet cssText: aString ]
  724. ifFalse: [super with: aString ].
  725. ! !
  726. !StyleTag class methodsFor: 'instance creation'!
  727. canvas: aCanvas
  728. ^self new
  729. initializeFromString: 'style' canvas: aCanvas;
  730. yourself
  731. ! !
  732. Object subclass: #Widget
  733. instanceVariableNames: ''
  734. package: 'Canvas'!
  735. !Widget methodsFor: 'adding'!
  736. appendToBrush: aTagBrush
  737. self appendToJQuery: aTagBrush asJQuery
  738. !
  739. appendToJQuery: aJQuery
  740. self renderOn: (HTMLCanvas onJQuery: aJQuery)
  741. ! !
  742. !Widget methodsFor: 'rendering'!
  743. renderOn: html
  744. self
  745. ! !
  746. !Object methodsFor: '*Canvas'!
  747. appendToBrush: aTagBrush
  748. aTagBrush append: self asString
  749. !
  750. appendToJQuery: aJQuery
  751. aJQuery append: self asString
  752. ! !
  753. !BlockClosure methodsFor: '*Canvas'!
  754. appendToBrush: aTagBrush
  755. aTagBrush appendBlock: self
  756. !
  757. appendToJQuery: aJQuery
  758. self value: (HTMLCanvas onJQuery: aJQuery)
  759. ! !
  760. !CharacterArray methodsFor: '*Canvas'!
  761. asSnippet
  762. ^ HTMLSnippet current snippetAt: self asString
  763. ! !
  764. !String methodsFor: '*Canvas'!
  765. appendToBrush: aTagBrush
  766. aTagBrush appendString: self
  767. !
  768. appendToJQuery: aJQuery
  769. aJQuery append: self
  770. !
  771. asJQuery
  772. <return jQuery(String(self))>
  773. ! !
  774. !JSObjectProxy methodsFor: '*Canvas'!
  775. asJQuery
  776. <return jQuery(self['@jsObject'])>
  777. ! !