Platform-Browser.js 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438
  1. define(["amber/boot", "require", "amber/core/Kernel-Objects"], function($boot,requirejs){"use strict";
  2. var $core=$boot.api,nil=$boot.nilAsValue,$nil=$boot.nilAsReceiver,$recv=$boot.asReceiver,$globals=$boot.globals;
  3. var $pkg = $core.addPackage("Platform-Browser");
  4. $pkg.innerEval = function (expr) { return eval(expr); };
  5. $pkg.imports = ["amber/core/Platform-Services"];
  6. //>>excludeStart("imports", pragmas.excludeImports);
  7. $pkg.isReady = new Promise(function (resolve, reject) { requirejs(["amber/core/Platform-Services"], function () {resolve();}, reject); });
  8. //>>excludeEnd("imports");
  9. $pkg.transport = {"type":"amd","amdNamespace":"amber/core"};
  10. $core.addClass("BrowserPlatform", $globals.Object, [], "Platform-Browser");
  11. //>>excludeStart("ide", pragmas.excludeIdeData);
  12. $globals.BrowserPlatform.comment="I am `Platform` service implementation for browser.";
  13. //>>excludeEnd("ide");
  14. $core.addMethod(
  15. $core.method({
  16. selector: "fetch:",
  17. protocol: "public API",
  18. //>>excludeStart("ide", pragmas.excludeIdeData);
  19. args: ["aStringOrObject"],
  20. source: "fetch: aStringOrObject\x0a\x09^ self globals at: #fetch\x0a\x09\x09ifPresent: [ :fetch | fetch value: aStringOrObject ]\x0a\x09\x09ifAbsent: [ Promise signal: 'fetch not available.' ]",
  21. referencedClasses: ["Promise"],
  22. //>>excludeEnd("ide");
  23. pragmas: [],
  24. messageSends: ["at:ifPresent:ifAbsent:", "globals", "value:", "signal:"]
  25. }, function ($methodClass){ return function (aStringOrObject){
  26. var self=this,$self=this;
  27. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  28. return $core.withContext(function($ctx1) {
  29. //>>excludeEnd("ctx");
  30. return $recv($self._globals())._at_ifPresent_ifAbsent_("fetch",(function(fetch){
  31. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  32. return $core.withContext(function($ctx2) {
  33. //>>excludeEnd("ctx");
  34. return $recv(fetch)._value_(aStringOrObject);
  35. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  36. }, function($ctx2) {$ctx2.fillBlock({fetch:fetch},$ctx1,1)});
  37. //>>excludeEnd("ctx");
  38. }),(function(){
  39. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40. return $core.withContext(function($ctx2) {
  41. //>>excludeEnd("ctx");
  42. return $recv($globals.Promise)._signal_("fetch not available.");
  43. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  44. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  45. //>>excludeEnd("ctx");
  46. }));
  47. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  48. }, function($ctx1) {$ctx1.fill(self,"fetch:",{aStringOrObject:aStringOrObject})});
  49. //>>excludeEnd("ctx");
  50. }; }),
  51. $globals.BrowserPlatform);
  52. $core.addMethod(
  53. $core.method({
  54. selector: "fetchUrl:options:",
  55. protocol: "public API",
  56. //>>excludeStart("ide", pragmas.excludeIdeData);
  57. args: ["aString", "anObject"],
  58. source: "fetchUrl: aString options: anObject\x0a\x09^ self globals at: #fetch\x0a\x09\x09ifPresent: [ :fetch | fetch value: aString value: anObject ]\x0a\x09\x09ifAbsent: [ Promise signal: 'fetch not available.' ]",
  59. referencedClasses: ["Promise"],
  60. //>>excludeEnd("ide");
  61. pragmas: [],
  62. messageSends: ["at:ifPresent:ifAbsent:", "globals", "value:value:", "signal:"]
  63. }, function ($methodClass){ return function (aString,anObject){
  64. var self=this,$self=this;
  65. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  66. return $core.withContext(function($ctx1) {
  67. //>>excludeEnd("ctx");
  68. return $recv($self._globals())._at_ifPresent_ifAbsent_("fetch",(function(fetch){
  69. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  70. return $core.withContext(function($ctx2) {
  71. //>>excludeEnd("ctx");
  72. return $recv(fetch)._value_value_(aString,anObject);
  73. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  74. }, function($ctx2) {$ctx2.fillBlock({fetch:fetch},$ctx1,1)});
  75. //>>excludeEnd("ctx");
  76. }),(function(){
  77. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  78. return $core.withContext(function($ctx2) {
  79. //>>excludeEnd("ctx");
  80. return $recv($globals.Promise)._signal_("fetch not available.");
  81. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  82. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  83. //>>excludeEnd("ctx");
  84. }));
  85. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  86. }, function($ctx1) {$ctx1.fill(self,"fetchUrl:options:",{aString:aString,anObject:anObject})});
  87. //>>excludeEnd("ctx");
  88. }; }),
  89. $globals.BrowserPlatform);
  90. $core.addMethod(
  91. $core.method({
  92. selector: "globals",
  93. protocol: "accessing",
  94. //>>excludeStart("ide", pragmas.excludeIdeData);
  95. args: [],
  96. source: "globals\x0a\x09^ window",
  97. referencedClasses: [],
  98. //>>excludeEnd("ide");
  99. pragmas: [],
  100. messageSends: []
  101. }, function ($methodClass){ return function (){
  102. var self=this,$self=this;
  103. return window;
  104. }; }),
  105. $globals.BrowserPlatform);
  106. $core.addMethod(
  107. $core.method({
  108. selector: "initialize",
  109. protocol: "public API",
  110. //>>excludeStart("ide", pragmas.excludeIdeData);
  111. args: [],
  112. source: "initialize\x0a\x09window\x0a\x09\x09addEventListener: 'error'\x0a\x09\x09do: [ :event | ErrorHandler handleError: event error ];\x0a\x09\x09addEventListener: 'unhandledrejection'\x0a\x09\x09do: [ :event | ErrorHandler handleError: event reason ]",
  113. referencedClasses: ["ErrorHandler"],
  114. //>>excludeEnd("ide");
  115. pragmas: [],
  116. messageSends: ["addEventListener:do:", "handleError:", "error", "reason"]
  117. }, function ($methodClass){ return function (){
  118. var self=this,$self=this;
  119. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  120. return $core.withContext(function($ctx1) {
  121. //>>excludeEnd("ctx");
  122. var $1;
  123. $1=window;
  124. [$recv($1)._addEventListener_do_("error",(function(event){
  125. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  126. return $core.withContext(function($ctx2) {
  127. //>>excludeEnd("ctx");
  128. return [$recv($globals.ErrorHandler)._handleError_($recv(event)._error())
  129. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  130. ,$ctx2.sendIdx["handleError:"]=1
  131. //>>excludeEnd("ctx");
  132. ][0];
  133. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  134. }, function($ctx2) {$ctx2.fillBlock({event:event},$ctx1,1)});
  135. //>>excludeEnd("ctx");
  136. }))
  137. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  138. ,$ctx1.sendIdx["addEventListener:do:"]=1
  139. //>>excludeEnd("ctx");
  140. ][0];
  141. $recv($1)._addEventListener_do_("unhandledrejection",(function(event){
  142. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  143. return $core.withContext(function($ctx2) {
  144. //>>excludeEnd("ctx");
  145. return $recv($globals.ErrorHandler)._handleError_($recv(event)._reason());
  146. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  147. }, function($ctx2) {$ctx2.fillBlock({event:event},$ctx1,2)});
  148. //>>excludeEnd("ctx");
  149. }));
  150. return self;
  151. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  152. }, function($ctx1) {$ctx1.fill(self,"initialize",{})});
  153. //>>excludeEnd("ctx");
  154. }; }),
  155. $globals.BrowserPlatform);
  156. $core.addMethod(
  157. $core.method({
  158. selector: "newXhr",
  159. protocol: "public API",
  160. //>>excludeStart("ide", pragmas.excludeIdeData);
  161. args: [],
  162. source: "newXhr\x0a\x09XMLHttpRequest\x0a\x09\x09ifNotNil: [ ^ NativeFunction constructorOf: XMLHttpRequest ]\x0a\x09\x09ifNil: [ self error: 'XMLHttpRequest not available.' ]",
  163. referencedClasses: ["XMLHttpRequest", "NativeFunction"],
  164. //>>excludeEnd("ide");
  165. pragmas: [],
  166. messageSends: ["ifNotNil:ifNil:", "constructorOf:", "error:"]
  167. }, function ($methodClass){ return function (){
  168. var self=this,$self=this;
  169. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  170. return $core.withContext(function($ctx1) {
  171. //>>excludeEnd("ctx");
  172. var $1;
  173. $1=$globals.XMLHttpRequest;
  174. if($1 == null || $1.a$nil){
  175. $self._error_("XMLHttpRequest not available.");
  176. } else {
  177. return $recv($globals.NativeFunction)._constructorOf_($globals.XMLHttpRequest);
  178. }
  179. return self;
  180. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  181. }, function($ctx1) {$ctx1.fill(self,"newXhr",{})});
  182. //>>excludeEnd("ctx");
  183. }; }),
  184. $globals.BrowserPlatform);
  185. $core.addMethod(
  186. $core.method({
  187. selector: "initialize",
  188. protocol: "testing",
  189. //>>excludeStart("ide", pragmas.excludeIdeData);
  190. args: [],
  191. source: "initialize\x0a\x09self isFeasible ifTrue: [ Platform registerIfNone: self new ]",
  192. referencedClasses: ["Platform"],
  193. //>>excludeEnd("ide");
  194. pragmas: [],
  195. messageSends: ["ifTrue:", "isFeasible", "registerIfNone:", "new"]
  196. }, function ($methodClass){ return function (){
  197. var self=this,$self=this;
  198. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  199. return $core.withContext(function($ctx1) {
  200. //>>excludeEnd("ctx");
  201. if($core.assert($self._isFeasible())){
  202. $recv($globals.Platform)._registerIfNone_($self._new());
  203. }
  204. return self;
  205. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  206. }, function($ctx1) {$ctx1.fill(self,"initialize",{})});
  207. //>>excludeEnd("ctx");
  208. }; }),
  209. $globals.BrowserPlatform.a$cls);
  210. $core.addMethod(
  211. $core.method({
  212. selector: "isFeasible",
  213. protocol: "testing",
  214. //>>excludeStart("ide", pragmas.excludeIdeData);
  215. args: [],
  216. source: "isFeasible\x0a<inlineJS: 'return typeof window !== \x22undefined\x22'>",
  217. referencedClasses: [],
  218. //>>excludeEnd("ide");
  219. pragmas: [["inlineJS:", ["return typeof window !== \x22undefined\x22"]]],
  220. messageSends: []
  221. }, function ($methodClass){ return function (){
  222. var self=this,$self=this;
  223. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  224. return $core.withContext(function($ctx1) {
  225. //>>excludeEnd("ctx");
  226. return typeof window !== "undefined";
  227. return self;
  228. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  229. }, function($ctx1) {$ctx1.fill(self,"isFeasible",{})});
  230. //>>excludeEnd("ctx");
  231. }; }),
  232. $globals.BrowserPlatform.a$cls);
  233. $core.addClass("BrowserTerminal", $globals.Object, [], "Platform-Browser");
  234. //>>excludeStart("ide", pragmas.excludeIdeData);
  235. $globals.BrowserTerminal.comment="I am `Terminal` service implementation for browser.";
  236. //>>excludeEnd("ide");
  237. $core.addMethod(
  238. $core.method({
  239. selector: "alert:",
  240. protocol: "actions",
  241. //>>excludeStart("ide", pragmas.excludeIdeData);
  242. args: ["aString"],
  243. source: "alert: aString\x0a\x09^ window alert: aString",
  244. referencedClasses: [],
  245. //>>excludeEnd("ide");
  246. pragmas: [],
  247. messageSends: ["alert:"]
  248. }, function ($methodClass){ return function (aString){
  249. var self=this,$self=this;
  250. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  251. return $core.withContext(function($ctx1) {
  252. //>>excludeEnd("ctx");
  253. return $recv(window)._alert_(aString);
  254. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  255. }, function($ctx1) {$ctx1.fill(self,"alert:",{aString:aString})});
  256. //>>excludeEnd("ctx");
  257. }; }),
  258. $globals.BrowserTerminal);
  259. $core.addMethod(
  260. $core.method({
  261. selector: "confirm:",
  262. protocol: "actions",
  263. //>>excludeStart("ide", pragmas.excludeIdeData);
  264. args: ["aString"],
  265. source: "confirm: aString\x0a\x09^ window confirm: aString",
  266. referencedClasses: [],
  267. //>>excludeEnd("ide");
  268. pragmas: [],
  269. messageSends: ["confirm:"]
  270. }, function ($methodClass){ return function (aString){
  271. var self=this,$self=this;
  272. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  273. return $core.withContext(function($ctx1) {
  274. //>>excludeEnd("ctx");
  275. return $recv(window)._confirm_(aString);
  276. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  277. }, function($ctx1) {$ctx1.fill(self,"confirm:",{aString:aString})});
  278. //>>excludeEnd("ctx");
  279. }; }),
  280. $globals.BrowserTerminal);
  281. $core.addMethod(
  282. $core.method({
  283. selector: "prompt:",
  284. protocol: "actions",
  285. //>>excludeStart("ide", pragmas.excludeIdeData);
  286. args: ["aString"],
  287. source: "prompt: aString\x0a\x09^ window prompt: aString",
  288. referencedClasses: [],
  289. //>>excludeEnd("ide");
  290. pragmas: [],
  291. messageSends: ["prompt:"]
  292. }, function ($methodClass){ return function (aString){
  293. var self=this,$self=this;
  294. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  295. return $core.withContext(function($ctx1) {
  296. //>>excludeEnd("ctx");
  297. return $recv(window)._prompt_(aString);
  298. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  299. }, function($ctx1) {$ctx1.fill(self,"prompt:",{aString:aString})});
  300. //>>excludeEnd("ctx");
  301. }; }),
  302. $globals.BrowserTerminal);
  303. $core.addMethod(
  304. $core.method({
  305. selector: "prompt:default:",
  306. protocol: "actions",
  307. //>>excludeStart("ide", pragmas.excludeIdeData);
  308. args: ["aString", "defaultString"],
  309. source: "prompt: aString default: defaultString\x0a\x09^ window prompt: aString default: defaultString",
  310. referencedClasses: [],
  311. //>>excludeEnd("ide");
  312. pragmas: [],
  313. messageSends: ["prompt:default:"]
  314. }, function ($methodClass){ return function (aString,defaultString){
  315. var self=this,$self=this;
  316. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  317. return $core.withContext(function($ctx1) {
  318. //>>excludeEnd("ctx");
  319. return $recv(window)._prompt_default_(aString,defaultString);
  320. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  321. }, function($ctx1) {$ctx1.fill(self,"prompt:default:",{aString:aString,defaultString:defaultString})});
  322. //>>excludeEnd("ctx");
  323. }; }),
  324. $globals.BrowserTerminal);
  325. $core.addMethod(
  326. $core.method({
  327. selector: "initialize",
  328. protocol: "testing",
  329. //>>excludeStart("ide", pragmas.excludeIdeData);
  330. args: [],
  331. source: "initialize\x0a\x09self isFeasible ifTrue: [ Terminal registerIfNone: self new ]",
  332. referencedClasses: ["Terminal"],
  333. //>>excludeEnd("ide");
  334. pragmas: [],
  335. messageSends: ["ifTrue:", "isFeasible", "registerIfNone:", "new"]
  336. }, function ($methodClass){ return function (){
  337. var self=this,$self=this;
  338. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  339. return $core.withContext(function($ctx1) {
  340. //>>excludeEnd("ctx");
  341. if($core.assert($self._isFeasible())){
  342. $recv($globals.Terminal)._registerIfNone_($self._new());
  343. }
  344. return self;
  345. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  346. }, function($ctx1) {$ctx1.fill(self,"initialize",{})});
  347. //>>excludeEnd("ctx");
  348. }; }),
  349. $globals.BrowserTerminal.a$cls);
  350. $core.addMethod(
  351. $core.method({
  352. selector: "isFeasible",
  353. protocol: "testing",
  354. //>>excludeStart("ide", pragmas.excludeIdeData);
  355. args: [],
  356. source: "isFeasible\x0a<inlineJS: 'return typeof window !== \x22undefined\x22'>",
  357. referencedClasses: [],
  358. //>>excludeEnd("ide");
  359. pragmas: [["inlineJS:", ["return typeof window !== \x22undefined\x22"]]],
  360. messageSends: []
  361. }, function ($methodClass){ return function (){
  362. var self=this,$self=this;
  363. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  364. return $core.withContext(function($ctx1) {
  365. //>>excludeEnd("ctx");
  366. return typeof window !== "undefined";
  367. return self;
  368. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  369. }, function($ctx1) {$ctx1.fill(self,"isFeasible",{})});
  370. //>>excludeEnd("ctx");
  371. }; }),
  372. $globals.BrowserTerminal.a$cls);
  373. $core.addMethod(
  374. $core.method({
  375. selector: "postMessageTo:",
  376. protocol: "*Platform-Browser",
  377. //>>excludeStart("ide", pragmas.excludeIdeData);
  378. args: ["aFrame"],
  379. source: "postMessageTo: aFrame\x0a^ self postMessageTo: aFrame origin: '*'",
  380. referencedClasses: [],
  381. //>>excludeEnd("ide");
  382. pragmas: [],
  383. messageSends: ["postMessageTo:origin:"]
  384. }, function ($methodClass){ return function (aFrame){
  385. var self=this,$self=this;
  386. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  387. return $core.withContext(function($ctx1) {
  388. //>>excludeEnd("ctx");
  389. return $self._postMessageTo_origin_(aFrame,"*");
  390. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  391. }, function($ctx1) {$ctx1.fill(self,"postMessageTo:",{aFrame:aFrame})});
  392. //>>excludeEnd("ctx");
  393. }; }),
  394. $globals.Object);
  395. $core.addMethod(
  396. $core.method({
  397. selector: "postMessageTo:origin:",
  398. protocol: "*Platform-Browser",
  399. //>>excludeStart("ide", pragmas.excludeIdeData);
  400. args: ["aFrame", "aString"],
  401. source: "postMessageTo: aFrame origin: aString\x0a<inlineJS: 'return aFrame.postMessage(self, aString)'>",
  402. referencedClasses: [],
  403. //>>excludeEnd("ide");
  404. pragmas: [["inlineJS:", ["return aFrame.postMessage(self, aString)"]]],
  405. messageSends: []
  406. }, function ($methodClass){ return function (aFrame,aString){
  407. var self=this,$self=this;
  408. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  409. return $core.withContext(function($ctx1) {
  410. //>>excludeEnd("ctx");
  411. return aFrame.postMessage(self, aString);
  412. return self;
  413. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  414. }, function($ctx1) {$ctx1.fill(self,"postMessageTo:origin:",{aFrame:aFrame,aString:aString})});
  415. //>>excludeEnd("ctx");
  416. }; }),
  417. $globals.Object);
  418. });