123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- Smalltalk createPackage: 'MiniMVP'!
- Object subclass: #MiniPresenter
- slots: {#frame. #dataBlock. #currentData}
- package: 'MiniMVP'!
- !MiniPresenter methodsFor: 'accessing'!
- currentData
- ^ currentData
- !
- currentData: anObject
- currentData := anObject
- !
- dataBlock
- ^ dataBlock
- !
- dataBlock: anObject
- dataBlock := anObject
- !
- frame
- ^ frame
- !
- frame: anObject
- frame := anObject
- ! !
- !MiniPresenter methodsFor: 'actions'!
- currentData: anObject ifChangedToNil: aBlock ifChangedToNotNil: anotherBlock
- | oldData newData |
- oldData := self currentData.
- self currentData: anObject.
- newData := self currentData.
- oldData = newData ifFalse: [
- newData ifNil: [ aBlock value ] ifNotNil: [ anotherBlock value: newData ] ]
- !
- present: anObject
- self subclassResponsibility
- !
- refresh
- self
- currentData: self dataBlock value
- ifChangedToNil: [ self hide ]
- ifChangedToNotNil: [ :data | self show; present: data ]
- ! !
- !MiniPresenter methodsFor: 'private'!
- hide
- self frame asDomNode style setProperty: #display to: 'none'
- !
- show
- self frame asDomNode style removeProperty: 'display'
- ! !
- !MiniPresenter class methodsFor: 'instance creation'!
- shows: aBlock in: aDommable
- ^ super new
- dataBlock: aBlock;
- frame: aDommable;
- hide;
- yourself
- ! !
- MiniPresenter subclass: #MiniLeafPresenter
- slots: {#factory}
- package: 'MiniMVP'!
- !MiniLeafPresenter methodsFor: 'accessing'!
- factory
- ^ factory
- !
- factory: anObject
- factory := anObject
- ! !
- !MiniLeafPresenter methodsFor: 'rendering'!
- frameContents: anObject
- self subclassResponsibility
- !
- present: anObject
- (self factory value: anObject)
- ifNotNil: [ :payload | self frameContents: payload ]
- ! !
- !MiniLeafPresenter class methodsFor: 'instance creation'!
- shows: aDataBlock in: aDommable do: aFactoryBlock
- ^ (super shows: aDataBlock in: aDommable)
- factory: aFactoryBlock;
- yourself
- ! !
- MiniLeafPresenter subclass: #AmberWebLeafPresenter
- slots: {}
- package: 'MiniMVP'!
- !AmberWebLeafPresenter methodsFor: 'rendering'!
- frameContents: anObject
- self frame contents: anObject
- ! !
- MiniLeafPresenter subclass: #SilkLeafPresenter
- slots: {}
- package: 'MiniMVP'!
- !SilkLeafPresenter methodsFor: 'rendering'!
- frameContents: anObject
- self frame resetContents; << anObject
- ! !
- MiniPresenter subclass: #MiniParentPresenter
- slots: {}
- package: 'MiniMVP'!
- !MiniParentPresenter methodsFor: 'accessing'!
- childPresenters
- self subclassResponsibility
- ! !
- !MiniParentPresenter methodsFor: 'actions'!
- present: anObject
- self childPresenters do: [ :each | each refresh ]
- ! !
- !MiniParentPresenter class methodsFor: 'instance creation'!
- in: aDommable
- ^ super shows: [ Object new ] in: aDommable
- ! !
|