Platform-Browser.js 15 KB

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