12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- Smalltalk current createPackage: 'Canvas-Snippet' properties: #{}!
- Object subclass: #HtmlSnippet
- instanceVariableNames: 'snippets'
- package: 'Canvas-Snippet'!
- !HtmlSnippet methodsFor: 'accessing'!
- addSnippet: anAssociation
- | snippet |
- (snippets ifNil: [ snippets := #{} ]) add: anAssociation.
- snippet := anAssociation value.
- ClassBuilder new
- installMethod: ([ :htmlReceiver | htmlReceiver snip: snippet ] currySelf asCompiledMethod: anAssociation key)
- forClass: HTMLCanvas
- category: '**snippets'
- !
- addSnippets: aCollection
- aCollection associationsDo: [ :each | self addSnippet: each ]
- !
- at: aString
- ^ snippets at: aString
- !
- at: aString ifAbsent: aBlock
- ^ snippets at: aString ifAbsent: aBlock
- ! !
- HtmlSnippet class instanceVariableNames: 'current'!
- !HtmlSnippet class methodsFor: 'action'!
- digFromJQuery: aJQuery
- "Finds and takes out all snippets out of aJQuery"
- | result |
- result := #{}.
- '[data-snippet]' asJQuery toArray do: [ :each |
- | jq name |
- jq := each asJQuery.
- name := jq attr: 'data-snippet'.
- name = '*' ifFalse: [
- ('^\*' asRegexp test: name) ifTrue: [ name := name allButFirst. jq attr: 'data-snippet' put: '*' ]
- ifFalse: [ jq removeAttr: 'data-snippet' ].
- result at: name put: (jq detach get: 0) ]].
- ^result
- ! !
- !HtmlSnippet class methodsFor: 'instance creation'!
- current
- ^ current ifNil: [
- current := self new addSnippets: (self digFromJQuery: document asJQuery); yourself ]
- ! !
- !CharacterArray methodsFor: '*Canvas-Snippet'!
- asSnippet
- ^ HtmlSnippet current at: self asString
- ! !
- !HTMLCanvas methodsFor: '*Canvas-Snippet'!
- snip: anElement
- "Adds clone of anElement, finds [data-snippet=""*""] subelement
- and returns TagBrush as if that subelement was just added.
-
- Use with asSnippet -- (html snip: #mySnip asSnippet) with: [...]"
- | clone caret |
- clone := anElement asJQuery clone.
- self with: (TagBrush fromJQuery: clone canvas: self).
- caret := clone find: '[data-snippet="*"]'.
- caret toArray isEmpty ifTrue: [ caret := clone ].
- ^TagBrush fromJQuery: (caret removeAttr: 'data-snippet') canvas: self
- ! !
|