Smalltalk createPackage: 'MiniMVP'! Object subclass: #MiniPresenter slots: {#frame. #dataBlock} package: 'MiniMVP'! !MiniPresenter methodsFor: 'accessing'! dataBlock ^ dataBlock ! dataBlock: anObject dataBlock := anObject ! frame ^ frame ! frame: anObject frame := anObject ! ! !MiniPresenter methodsFor: 'actions'! present: anObject self subclassResponsibility ! refresh self dataBlock value ifNil: [ self hide ] ifNotNil: [ :data | self show; present: data ] ! ! !MiniPresenter methodsFor: 'private'! hide (self frame asDomNode at: 'style') at: #display put: 'none' ! show (self frame asDomNode at: '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: [ true ] in: aDommable ! !