Platform-DOM.js 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. define(["amber/boot", "amber_core/Kernel-Collections", "amber_core/Kernel-Infrastructure", "amber_core/Kernel-Objects"], function($boot){"use strict";
  2. if(!$boot.nilAsReceiver)$boot.nilAsReceiver=$boot.nil;
  3. var $core=$boot.api,nil=$boot.nilAsReceiver,$recv=$boot.asReceiver,$globals=$boot.globals;
  4. if(!$boot.nilAsClass)$boot.nilAsClass=$boot.dnu;
  5. $core.addPackage('Platform-DOM');
  6. $core.packages["Platform-DOM"].innerEval = function (expr) { return eval(expr); };
  7. $core.packages["Platform-DOM"].transport = {"type":"amd","amdNamespace":"amber_core"};
  8. $core.addClass('PlatformDom', $globals.Object, [], 'Platform-DOM');
  9. $core.addMethod(
  10. $core.method({
  11. selector: "isDomNode:",
  12. protocol: 'testing',
  13. fn: function (anObject){
  14. var self=this;
  15. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  16. return $core.withContext(function($ctx1) {
  17. //>>excludeEnd("ctx");
  18. return anObject.nodeType > 0 &&
  19. Object.prototype.toString.call(anObject) !== "[object Object]";
  20. return self;
  21. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22. }, function($ctx1) {$ctx1.fill(self,"isDomNode:",{anObject:anObject},$globals.PlatformDom.klass)});
  23. //>>excludeEnd("ctx");
  24. },
  25. //>>excludeStart("ide", pragmas.excludeIdeData);
  26. args: ["anObject"],
  27. source: "isDomNode: anObject\x0a<inlineJS: '\x0a\x09return anObject.nodeType > 0 &&\x0a\x09\x09Object.prototype.toString.call(anObject) !== \x22[object Object]\x22\x0a'>",
  28. referencedClasses: [],
  29. //>>excludeEnd("ide");
  30. messageSends: []
  31. }),
  32. $globals.PlatformDom.klass);
  33. $core.addMethod(
  34. $core.method({
  35. selector: "isFeasible",
  36. protocol: 'testing',
  37. fn: function (){
  38. var self=this;
  39. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40. return $core.withContext(function($ctx1) {
  41. //>>excludeEnd("ctx");
  42. if (typeof document === "undefined") return false;
  43. try {
  44. var d = document.createElement("div"),
  45. f = document.createDocumentFragment(),
  46. t = document.createTextNode("Hello, Amber!");
  47. f.appendChild(t);
  48. d.insertBefore(f, null);
  49. return d.innerHTML === "Hello, Amber!";
  50. } catch (e) {
  51. return false;
  52. };
  53. return self;
  54. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  55. }, function($ctx1) {$ctx1.fill(self,"isFeasible",{},$globals.PlatformDom.klass)});
  56. //>>excludeEnd("ctx");
  57. },
  58. //>>excludeStart("ide", pragmas.excludeIdeData);
  59. args: [],
  60. source: "isFeasible\x0a<inlineJS: '\x0a if (typeof document === \x22undefined\x22) return false;\x0a try {\x0a var d = document.createElement(\x22div\x22),\x0a\x09 f = document.createDocumentFragment(),\x0a\x09 t = document.createTextNode(\x22Hello, Amber!\x22);\x0a\x09f.appendChild(t);\x0a\x09d.insertBefore(f, null);\x0a\x09return d.innerHTML === \x22Hello, Amber!\x22;\x0a } catch (e) {\x0a return false;\x0a }\x0a'>",
  61. referencedClasses: [],
  62. //>>excludeEnd("ide");
  63. messageSends: []
  64. }),
  65. $globals.PlatformDom.klass);
  66. $core.addMethod(
  67. $core.method({
  68. selector: "newDocumentFragment",
  69. protocol: 'node creation',
  70. fn: function (){
  71. var self=this;
  72. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  73. return $core.withContext(function($ctx1) {
  74. //>>excludeEnd("ctx");
  75. return document.createDocumentFragment();
  76. return self;
  77. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78. }, function($ctx1) {$ctx1.fill(self,"newDocumentFragment",{},$globals.PlatformDom.klass)});
  79. //>>excludeEnd("ctx");
  80. },
  81. //>>excludeStart("ide", pragmas.excludeIdeData);
  82. args: [],
  83. source: "newDocumentFragment\x0a<inlineJS: 'return document.createDocumentFragment()'>",
  84. referencedClasses: [],
  85. //>>excludeEnd("ide");
  86. messageSends: []
  87. }),
  88. $globals.PlatformDom.klass);
  89. $core.addMethod(
  90. $core.method({
  91. selector: "newElement:",
  92. protocol: 'node creation',
  93. fn: function (aString){
  94. var self=this;
  95. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  96. return $core.withContext(function($ctx1) {
  97. //>>excludeEnd("ctx");
  98. return document.createElement(aString);
  99. return self;
  100. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  101. }, function($ctx1) {$ctx1.fill(self,"newElement:",{aString:aString},$globals.PlatformDom.klass)});
  102. //>>excludeEnd("ctx");
  103. },
  104. //>>excludeStart("ide", pragmas.excludeIdeData);
  105. args: ["aString"],
  106. source: "newElement: aString\x0a<inlineJS: 'return document.createElement(aString)'>",
  107. referencedClasses: [],
  108. //>>excludeEnd("ide");
  109. messageSends: []
  110. }),
  111. $globals.PlatformDom.klass);
  112. $core.addMethod(
  113. $core.method({
  114. selector: "newTextNode:",
  115. protocol: 'node creation',
  116. fn: function (aString){
  117. var self=this;
  118. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  119. return $core.withContext(function($ctx1) {
  120. //>>excludeEnd("ctx");
  121. return document.createTextNode(aString);
  122. return self;
  123. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  124. }, function($ctx1) {$ctx1.fill(self,"newTextNode:",{aString:aString},$globals.PlatformDom.klass)});
  125. //>>excludeEnd("ctx");
  126. },
  127. //>>excludeStart("ide", pragmas.excludeIdeData);
  128. args: ["aString"],
  129. source: "newTextNode: aString\x0a<inlineJS: 'return document.createTextNode(aString)'>",
  130. referencedClasses: [],
  131. //>>excludeEnd("ide");
  132. messageSends: []
  133. }),
  134. $globals.PlatformDom.klass);
  135. $core.addMethod(
  136. $core.method({
  137. selector: "asDomNode",
  138. protocol: '*Platform-DOM',
  139. fn: function (){
  140. var self=this;
  141. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  142. return $core.withContext(function($ctx1) {
  143. //>>excludeEnd("ctx");
  144. return $recv($globals.PlatformDom)._newTextNode_(self._asString());
  145. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  146. }, function($ctx1) {$ctx1.fill(self,"asDomNode",{},$globals.CharacterArray)});
  147. //>>excludeEnd("ctx");
  148. },
  149. //>>excludeStart("ide", pragmas.excludeIdeData);
  150. args: [],
  151. source: "asDomNode\x0a\x09^ PlatformDom newTextNode: self asString",
  152. referencedClasses: ["PlatformDom"],
  153. //>>excludeEnd("ide");
  154. messageSends: ["newTextNode:", "asString"]
  155. }),
  156. $globals.CharacterArray);
  157. $core.addMethod(
  158. $core.method({
  159. selector: "asDomNode",
  160. protocol: '*Platform-DOM',
  161. fn: function (){
  162. var self=this;
  163. var fragment;
  164. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  165. return $core.withContext(function($ctx1) {
  166. //>>excludeEnd("ctx");
  167. fragment=$recv($globals.PlatformDom)._newDocumentFragment();
  168. self._do_((function(each){
  169. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  170. return $core.withContext(function($ctx2) {
  171. //>>excludeEnd("ctx");
  172. return $recv(fragment)._appendChild_($recv(each)._asDomNode());
  173. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  174. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)});
  175. //>>excludeEnd("ctx");
  176. }));
  177. return fragment;
  178. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  179. }, function($ctx1) {$ctx1.fill(self,"asDomNode",{fragment:fragment},$globals.Collection)});
  180. //>>excludeEnd("ctx");
  181. },
  182. //>>excludeStart("ide", pragmas.excludeIdeData);
  183. args: [],
  184. source: "asDomNode\x0a\x09| fragment |\x0a\x09fragment := PlatformDom newDocumentFragment.\x0a\x09self do: [ :each | fragment appendChild: each asDomNode ].\x0a\x09^ fragment",
  185. referencedClasses: ["PlatformDom"],
  186. //>>excludeEnd("ide");
  187. messageSends: ["newDocumentFragment", "do:", "appendChild:", "asDomNode"]
  188. }),
  189. $globals.Collection);
  190. $core.addMethod(
  191. $core.method({
  192. selector: "asDomNode",
  193. protocol: '*Platform-DOM',
  194. fn: function (){
  195. var self=this;
  196. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  197. return $core.withContext(function($ctx1) {
  198. //>>excludeEnd("ctx");
  199. var $1,$2;
  200. $1=$recv($globals.PlatformDom)._isDomNode_(self["@jsObject"]);
  201. if($core.assert($1)){
  202. return self["@jsObject"];
  203. } else {
  204. $2=(
  205. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  206. $ctx1.supercall = true,
  207. //>>excludeEnd("ctx");
  208. ($globals.JSObjectProxy.superclass||$boot.nilAsClass).fn.prototype._asDomNode.apply($recv(self), []));
  209. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  210. $ctx1.supercall = false;
  211. //>>excludeEnd("ctx");;
  212. return $2;
  213. }
  214. return self;
  215. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  216. }, function($ctx1) {$ctx1.fill(self,"asDomNode",{},$globals.JSObjectProxy)});
  217. //>>excludeEnd("ctx");
  218. },
  219. //>>excludeStart("ide", pragmas.excludeIdeData);
  220. args: [],
  221. source: "asDomNode\x0a\x09(PlatformDom isDomNode: jsObject)\x0a\x09\x09ifTrue: [ ^ jsObject ]\x0a\x09\x09ifFalse: [ ^ super asDomNode ]",
  222. referencedClasses: ["PlatformDom"],
  223. //>>excludeEnd("ide");
  224. messageSends: ["ifTrue:ifFalse:", "isDomNode:", "asDomNode"]
  225. }),
  226. $globals.JSObjectProxy);
  227. });