MiniMVP.st 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. Smalltalk createPackage: 'MiniMVP'!
  2. Object subclass: #MiniPresenter
  3. slots: {#frame. #dataBlock}
  4. package: 'MiniMVP'!
  5. !MiniPresenter methodsFor: 'accessing'!
  6. dataBlock
  7. ^ dataBlock
  8. !
  9. dataBlock: anObject
  10. dataBlock := anObject
  11. !
  12. frame
  13. ^ frame
  14. !
  15. frame: anObject
  16. frame := anObject
  17. ! !
  18. !MiniPresenter methodsFor: 'actions'!
  19. present: anObject
  20. self subclassResponsibility
  21. !
  22. refresh
  23. self dataBlock value
  24. ifNil: [ self hide ]
  25. ifNotNil: [ :data | self show; present: data ]
  26. ! !
  27. !MiniPresenter methodsFor: 'private'!
  28. hide
  29. (self frame asDomNode at: 'style') at: #display put: 'none'
  30. !
  31. show
  32. (self frame asDomNode at: 'style') removeProperty: 'display'
  33. ! !
  34. !MiniPresenter class methodsFor: 'instance creation'!
  35. shows: aBlock in: aDommable
  36. ^ super new
  37. dataBlock: aBlock;
  38. frame: aDommable;
  39. hide;
  40. yourself
  41. ! !
  42. MiniPresenter subclass: #MiniLeafPresenter
  43. slots: {#factory}
  44. package: 'MiniMVP'!
  45. !MiniLeafPresenter methodsFor: 'accessing'!
  46. factory
  47. ^ factory
  48. !
  49. factory: anObject
  50. factory := anObject
  51. ! !
  52. !MiniLeafPresenter methodsFor: 'rendering'!
  53. frameContents: anObject
  54. self subclassResponsibility
  55. !
  56. present: anObject
  57. (self factory value: anObject)
  58. ifNotNil: [ :payload | self frameContents: payload ]
  59. ! !
  60. !MiniLeafPresenter class methodsFor: 'instance creation'!
  61. shows: aDataBlock in: aDommable do: aFactoryBlock
  62. ^ (super shows: aDataBlock in: aDommable)
  63. factory: aFactoryBlock;
  64. yourself
  65. ! !
  66. MiniLeafPresenter subclass: #AmberWebLeafPresenter
  67. slots: {}
  68. package: 'MiniMVP'!
  69. !AmberWebLeafPresenter methodsFor: 'rendering'!
  70. frameContents: anObject
  71. self frame contents: anObject
  72. ! !
  73. MiniLeafPresenter subclass: #SilkLeafPresenter
  74. slots: {}
  75. package: 'MiniMVP'!
  76. !SilkLeafPresenter methodsFor: 'rendering'!
  77. frameContents: anObject
  78. self frame resetContents; << anObject
  79. ! !
  80. MiniPresenter subclass: #MiniParentPresenter
  81. slots: {}
  82. package: 'MiniMVP'!
  83. !MiniParentPresenter methodsFor: 'accessing'!
  84. childPresenters
  85. self subclassResponsibility
  86. ! !
  87. !MiniParentPresenter methodsFor: 'actions'!
  88. present: anObject
  89. self childPresenters do: [ :each | each refresh ]
  90. ! !
  91. !MiniParentPresenter class methodsFor: 'instance creation'!
  92. in: aDommable
  93. ^ super shows: [ true ] in: aDommable
  94. ! !