Platform-DOM.st 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. Smalltalk createPackage: 'Platform-DOM'!
  2. Object subclass: #PlatformDom
  3. slots: {}
  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: 'creation'!
  10. newCustomEvent: aString detail: anObject
  11. <inlineJS: 'return new CustomEvent(aString, {detail: anObject})'>
  12. ! !
  13. !PlatformDom class methodsFor: 'testing'!
  14. isDomNode: anObject
  15. <inlineJS: '
  16. return anObject.nodeType > 0 &&
  17. Object.prototype.toString.call(anObject) !!== "[object Object]"
  18. '>
  19. !
  20. isFeasible
  21. <inlineJS: '
  22. if (typeof document === "undefined") return false;
  23. try {
  24. var d = document.createElement("div"),
  25. f = document.createDocumentFragment(),
  26. t = document.createTextNode("Hello, Amber!!");
  27. f.appendChild(t);
  28. d.insertBefore(f, null);
  29. return d.innerHTML === "Hello, Amber!!";
  30. } catch (e) {
  31. return false;
  32. }
  33. '>
  34. ! !
  35. !Collection methodsFor: '*Platform-DOM'!
  36. asDomNode
  37. | fragment |
  38. fragment := document createDocumentFragment.
  39. self do: [ :each | fragment appendChild: each asDomNode ].
  40. ^ fragment
  41. ! !
  42. !JSObjectProxy methodsFor: '*Platform-DOM'!
  43. asDomNode
  44. (PlatformDom isDomNode: jsObject)
  45. ifTrue: [ ^ jsObject ]
  46. ifFalse: [ ^ super asDomNode ]
  47. ! !
  48. !String methodsFor: '*Platform-DOM'!
  49. asDomNode
  50. ^ document createTextNode: self asString
  51. !
  52. htmlTextContent
  53. <inlineJS: 'var d=document.createElement("div");d.innerHTML=self;return d.textContent||d.innerText;'>
  54. ! !