Platform-DOM.st 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. Smalltalk createPackage: 'Platform-DOM'!
  2. Object subclass: #PlatformDom
  3. instanceVariableNames: ''
  4. package: 'Platform-DOM'!
  5. !PlatformDom class methodsFor: 'converting'!
  6. toArray: aDomList
  7. <inlineJS: 'return Array.prototype.slice.call(aDomList)'>
  8. ! !
  9. !PlatformDom class methodsFor: 'node creation'!
  10. newCustomEvent: aString detail: anObject
  11. <inlineJS: 'return new CustomEvent(aString, {detail: anObject})'>
  12. !
  13. newDocumentFragment
  14. <inlineJS: 'return document.createDocumentFragment()'>
  15. !
  16. newElement: aString
  17. <inlineJS: 'return document.createElement(aString)'>
  18. !
  19. newElement: aString namespace: anotherString
  20. <inlineJS: 'return document.createElementNS(anotherString,aString)'>
  21. !
  22. newTextNode: aString
  23. <inlineJS: 'return document.createTextNode(aString)'>
  24. ! !
  25. !PlatformDom class methodsFor: 'testing'!
  26. isDomNode: anObject
  27. <inlineJS: '
  28. return anObject.nodeType > 0 &&
  29. Object.prototype.toString.call(anObject) !!== "[object Object]"
  30. '>
  31. !
  32. isFeasible
  33. <inlineJS: '
  34. if (typeof document === "undefined") return false;
  35. try {
  36. var d = document.createElement("div"),
  37. f = document.createDocumentFragment(),
  38. t = document.createTextNode("Hello, Amber!!");
  39. f.appendChild(t);
  40. d.insertBefore(f, null);
  41. return d.innerHTML === "Hello, Amber!!";
  42. } catch (e) {
  43. return false;
  44. }
  45. '>
  46. ! !
  47. !CharacterArray methodsFor: '*Platform-DOM'!
  48. asDomNode
  49. ^ PlatformDom newTextNode: self asString
  50. ! !
  51. !Collection methodsFor: '*Platform-DOM'!
  52. asDomNode
  53. | fragment |
  54. fragment := PlatformDom newDocumentFragment.
  55. self do: [ :each | fragment appendChild: each asDomNode ].
  56. ^ fragment
  57. ! !
  58. !JSObjectProxy methodsFor: '*Platform-DOM'!
  59. asDomNode
  60. (PlatformDom isDomNode: jsObject)
  61. ifTrue: [ ^ jsObject ]
  62. ifFalse: [ ^ super asDomNode ]
  63. ! !
  64. !String methodsFor: '*Platform-DOM'!
  65. htmlTextContent
  66. <inlineJS: 'var d=document.createElement("div");d.innerHTML=self;return d.textContent||d.innerText;'>
  67. ! !