Platform-Browser.st 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. Smalltalk createPackage: 'Platform-Browser'!
  2. (Smalltalk packageAt: 'Platform-Browser' ifAbsent: [ self error: 'Package not created: Platform-Browser' ]) imports: {'amber/core/Platform-Services'}!
  3. Object subclass: #BrowserPlatform
  4. slots: {}
  5. package: 'Platform-Browser'!
  6. !BrowserPlatform commentStamp!
  7. I am `Platform` service implementation for browser.!
  8. !BrowserPlatform methodsFor: 'accessing'!
  9. globals
  10. ^ window
  11. ! !
  12. !BrowserPlatform methodsFor: 'public API'!
  13. fetch: aStringOrObject
  14. ^ self globals at: #fetch
  15. ifPresent: [ :fetch | fetch value: aStringOrObject ]
  16. ifAbsent: [ Promise signal: 'fetch not available.' ]
  17. !
  18. fetchUrl: aString options: anObject
  19. ^ self globals at: #fetch
  20. ifPresent: [ :fetch | fetch value: aString value: anObject ]
  21. ifAbsent: [ Promise signal: 'fetch not available.' ]
  22. !
  23. initialize
  24. window
  25. addEventListener: 'error'
  26. do: [ :event | ErrorHandler handleError: event error ];
  27. addEventListener: 'unhandledrejection'
  28. do: [ :event | ErrorHandler handleError: event reason ]
  29. !
  30. newXhr
  31. XMLHttpRequest
  32. ifNotNil: [ ^ NativeFunction constructorOf: XMLHttpRequest ]
  33. ifNil: [ self error: 'XMLHttpRequest not available.' ]
  34. ! !
  35. !BrowserPlatform class methodsFor: 'testing'!
  36. initialize
  37. self isFeasible ifTrue: [ Platform registerIfNone: self new ]
  38. !
  39. isFeasible
  40. <inlineJS: 'return typeof window !!== "undefined"'>
  41. ! !
  42. Object subclass: #BrowserTerminal
  43. slots: {}
  44. package: 'Platform-Browser'!
  45. !BrowserTerminal commentStamp!
  46. I am `Terminal` service implementation for browser.!
  47. !BrowserTerminal methodsFor: 'actions'!
  48. alert: aString
  49. ^ window alert: aString
  50. !
  51. confirm: aString
  52. ^ window confirm: aString
  53. !
  54. prompt: aString
  55. ^ window prompt: aString
  56. !
  57. prompt: aString default: defaultString
  58. ^ window prompt: aString default: defaultString
  59. ! !
  60. !BrowserTerminal class methodsFor: 'testing'!
  61. initialize
  62. self isFeasible ifTrue: [ Terminal registerIfNone: self new ]
  63. !
  64. isFeasible
  65. <inlineJS: 'return typeof window !!== "undefined"'>
  66. ! !
  67. !Object methodsFor: '*Platform-Browser'!
  68. postMessageTo: aFrame
  69. ^ self postMessageTo: aFrame origin: '*'
  70. !
  71. postMessageTo: aFrame origin: aString
  72. <inlineJS: 'return aFrame.postMessage(self, aString)'>
  73. ! !