Platform-Browser.js 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391
  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: "newXhr",
  109. protocol: "public API",
  110. //>>excludeStart("ide", pragmas.excludeIdeData);
  111. args: [],
  112. source: "newXhr\x0a\x09XMLHttpRequest\x0a\x09\x09ifNotNil: [ ^ NativeFunction constructorOf: XMLHttpRequest ]\x0a\x09\x09ifNil: [ self error: 'XMLHttpRequest not available.' ]",
  113. referencedClasses: ["XMLHttpRequest", "NativeFunction"],
  114. //>>excludeEnd("ide");
  115. pragmas: [],
  116. messageSends: ["ifNotNil:ifNil:", "constructorOf:", "error:"]
  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=$globals.XMLHttpRequest;
  124. if($1 == null || $1.a$nil){
  125. $self._error_("XMLHttpRequest not available.");
  126. } else {
  127. return $recv($globals.NativeFunction)._constructorOf_($globals.XMLHttpRequest);
  128. }
  129. return self;
  130. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  131. }, function($ctx1) {$ctx1.fill(self,"newXhr",{})});
  132. //>>excludeEnd("ctx");
  133. }; }),
  134. $globals.BrowserPlatform);
  135. $core.addMethod(
  136. $core.method({
  137. selector: "initialize",
  138. protocol: "testing",
  139. //>>excludeStart("ide", pragmas.excludeIdeData);
  140. args: [],
  141. source: "initialize\x0a\x09self isFeasible ifTrue: [ Platform registerIfNone: self new ]",
  142. referencedClasses: ["Platform"],
  143. //>>excludeEnd("ide");
  144. pragmas: [],
  145. messageSends: ["ifTrue:", "isFeasible", "registerIfNone:", "new"]
  146. }, function ($methodClass){ return function (){
  147. var self=this,$self=this;
  148. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  149. return $core.withContext(function($ctx1) {
  150. //>>excludeEnd("ctx");
  151. var $1;
  152. $1=$self._isFeasible();
  153. if($core.assert($1)){
  154. $recv($globals.Platform)._registerIfNone_($self._new());
  155. }
  156. return self;
  157. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  158. }, function($ctx1) {$ctx1.fill(self,"initialize",{})});
  159. //>>excludeEnd("ctx");
  160. }; }),
  161. $globals.BrowserPlatform.a$cls);
  162. $core.addMethod(
  163. $core.method({
  164. selector: "isFeasible",
  165. protocol: "testing",
  166. //>>excludeStart("ide", pragmas.excludeIdeData);
  167. args: [],
  168. source: "isFeasible\x0a<inlineJS: 'return typeof window !== \x22undefined\x22'>",
  169. referencedClasses: [],
  170. //>>excludeEnd("ide");
  171. pragmas: [["inlineJS:", ["return typeof window !== \x22undefined\x22"]]],
  172. messageSends: []
  173. }, function ($methodClass){ return function (){
  174. var self=this,$self=this;
  175. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  176. return $core.withContext(function($ctx1) {
  177. //>>excludeEnd("ctx");
  178. return typeof window !== "undefined";
  179. return self;
  180. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  181. }, function($ctx1) {$ctx1.fill(self,"isFeasible",{})});
  182. //>>excludeEnd("ctx");
  183. }; }),
  184. $globals.BrowserPlatform.a$cls);
  185. $core.addClass("BrowserTerminal", $globals.Object, [], "Platform-Browser");
  186. //>>excludeStart("ide", pragmas.excludeIdeData);
  187. $globals.BrowserTerminal.comment="I am `Terminal` service implementation for browser.";
  188. //>>excludeEnd("ide");
  189. $core.addMethod(
  190. $core.method({
  191. selector: "alert:",
  192. protocol: "actions",
  193. //>>excludeStart("ide", pragmas.excludeIdeData);
  194. args: ["aString"],
  195. source: "alert: aString\x0a\x09^ window alert: aString",
  196. referencedClasses: [],
  197. //>>excludeEnd("ide");
  198. pragmas: [],
  199. messageSends: ["alert:"]
  200. }, function ($methodClass){ return function (aString){
  201. var self=this,$self=this;
  202. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  203. return $core.withContext(function($ctx1) {
  204. //>>excludeEnd("ctx");
  205. return $recv(window)._alert_(aString);
  206. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  207. }, function($ctx1) {$ctx1.fill(self,"alert:",{aString:aString})});
  208. //>>excludeEnd("ctx");
  209. }; }),
  210. $globals.BrowserTerminal);
  211. $core.addMethod(
  212. $core.method({
  213. selector: "confirm:",
  214. protocol: "actions",
  215. //>>excludeStart("ide", pragmas.excludeIdeData);
  216. args: ["aString"],
  217. source: "confirm: aString\x0a\x09^ window confirm: aString",
  218. referencedClasses: [],
  219. //>>excludeEnd("ide");
  220. pragmas: [],
  221. messageSends: ["confirm:"]
  222. }, function ($methodClass){ return function (aString){
  223. var self=this,$self=this;
  224. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  225. return $core.withContext(function($ctx1) {
  226. //>>excludeEnd("ctx");
  227. return $recv(window)._confirm_(aString);
  228. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  229. }, function($ctx1) {$ctx1.fill(self,"confirm:",{aString:aString})});
  230. //>>excludeEnd("ctx");
  231. }; }),
  232. $globals.BrowserTerminal);
  233. $core.addMethod(
  234. $core.method({
  235. selector: "prompt:",
  236. protocol: "actions",
  237. //>>excludeStart("ide", pragmas.excludeIdeData);
  238. args: ["aString"],
  239. source: "prompt: aString\x0a\x09^ window prompt: aString",
  240. referencedClasses: [],
  241. //>>excludeEnd("ide");
  242. pragmas: [],
  243. messageSends: ["prompt:"]
  244. }, function ($methodClass){ return function (aString){
  245. var self=this,$self=this;
  246. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  247. return $core.withContext(function($ctx1) {
  248. //>>excludeEnd("ctx");
  249. return $recv(window)._prompt_(aString);
  250. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  251. }, function($ctx1) {$ctx1.fill(self,"prompt:",{aString:aString})});
  252. //>>excludeEnd("ctx");
  253. }; }),
  254. $globals.BrowserTerminal);
  255. $core.addMethod(
  256. $core.method({
  257. selector: "prompt:default:",
  258. protocol: "actions",
  259. //>>excludeStart("ide", pragmas.excludeIdeData);
  260. args: ["aString", "defaultString"],
  261. source: "prompt: aString default: defaultString\x0a\x09^ window prompt: aString default: defaultString",
  262. referencedClasses: [],
  263. //>>excludeEnd("ide");
  264. pragmas: [],
  265. messageSends: ["prompt:default:"]
  266. }, function ($methodClass){ return function (aString,defaultString){
  267. var self=this,$self=this;
  268. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  269. return $core.withContext(function($ctx1) {
  270. //>>excludeEnd("ctx");
  271. return $recv(window)._prompt_default_(aString,defaultString);
  272. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  273. }, function($ctx1) {$ctx1.fill(self,"prompt:default:",{aString:aString,defaultString:defaultString})});
  274. //>>excludeEnd("ctx");
  275. }; }),
  276. $globals.BrowserTerminal);
  277. $core.addMethod(
  278. $core.method({
  279. selector: "initialize",
  280. protocol: "testing",
  281. //>>excludeStart("ide", pragmas.excludeIdeData);
  282. args: [],
  283. source: "initialize\x0a\x09self isFeasible ifTrue: [ Terminal registerIfNone: self new ]",
  284. referencedClasses: ["Terminal"],
  285. //>>excludeEnd("ide");
  286. pragmas: [],
  287. messageSends: ["ifTrue:", "isFeasible", "registerIfNone:", "new"]
  288. }, function ($methodClass){ return function (){
  289. var self=this,$self=this;
  290. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  291. return $core.withContext(function($ctx1) {
  292. //>>excludeEnd("ctx");
  293. var $1;
  294. $1=$self._isFeasible();
  295. if($core.assert($1)){
  296. $recv($globals.Terminal)._registerIfNone_($self._new());
  297. }
  298. return self;
  299. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  300. }, function($ctx1) {$ctx1.fill(self,"initialize",{})});
  301. //>>excludeEnd("ctx");
  302. }; }),
  303. $globals.BrowserTerminal.a$cls);
  304. $core.addMethod(
  305. $core.method({
  306. selector: "isFeasible",
  307. protocol: "testing",
  308. //>>excludeStart("ide", pragmas.excludeIdeData);
  309. args: [],
  310. source: "isFeasible\x0a<inlineJS: 'return typeof window !== \x22undefined\x22'>",
  311. referencedClasses: [],
  312. //>>excludeEnd("ide");
  313. pragmas: [["inlineJS:", ["return typeof window !== \x22undefined\x22"]]],
  314. messageSends: []
  315. }, function ($methodClass){ return function (){
  316. var self=this,$self=this;
  317. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  318. return $core.withContext(function($ctx1) {
  319. //>>excludeEnd("ctx");
  320. return typeof window !== "undefined";
  321. return self;
  322. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  323. }, function($ctx1) {$ctx1.fill(self,"isFeasible",{})});
  324. //>>excludeEnd("ctx");
  325. }; }),
  326. $globals.BrowserTerminal.a$cls);
  327. $core.addMethod(
  328. $core.method({
  329. selector: "postMessageTo:",
  330. protocol: "*Platform-Browser",
  331. //>>excludeStart("ide", pragmas.excludeIdeData);
  332. args: ["aFrame"],
  333. source: "postMessageTo: aFrame\x0a^ self postMessageTo: aFrame origin: '*'",
  334. referencedClasses: [],
  335. //>>excludeEnd("ide");
  336. pragmas: [],
  337. messageSends: ["postMessageTo:origin:"]
  338. }, function ($methodClass){ return function (aFrame){
  339. var self=this,$self=this;
  340. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  341. return $core.withContext(function($ctx1) {
  342. //>>excludeEnd("ctx");
  343. return $self._postMessageTo_origin_(aFrame,"*");
  344. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  345. }, function($ctx1) {$ctx1.fill(self,"postMessageTo:",{aFrame:aFrame})});
  346. //>>excludeEnd("ctx");
  347. }; }),
  348. $globals.Object);
  349. $core.addMethod(
  350. $core.method({
  351. selector: "postMessageTo:origin:",
  352. protocol: "*Platform-Browser",
  353. //>>excludeStart("ide", pragmas.excludeIdeData);
  354. args: ["aFrame", "aString"],
  355. source: "postMessageTo: aFrame origin: aString\x0a<inlineJS: 'return aFrame.postMessage(self, aString)'>",
  356. referencedClasses: [],
  357. //>>excludeEnd("ide");
  358. pragmas: [["inlineJS:", ["return aFrame.postMessage(self, aString)"]]],
  359. messageSends: []
  360. }, function ($methodClass){ return function (aFrame,aString){
  361. var self=this,$self=this;
  362. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  363. return $core.withContext(function($ctx1) {
  364. //>>excludeEnd("ctx");
  365. return aFrame.postMessage(self, aString);
  366. return self;
  367. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  368. }, function($ctx1) {$ctx1.fill(self,"postMessageTo:origin:",{aFrame:aFrame,aString:aString})});
  369. //>>excludeEnd("ctx");
  370. }; }),
  371. $globals.Object);
  372. });