DOMite.js 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926
  1. define("domite/DOMite", ["amber/boot", "amber_core/Kernel-Collections", "amber_core/Kernel-Infrastructure"], function($boot){
  2. var $core=$boot.api,nil=$boot.nil,$recv=$boot.asReceiver,$globals=$boot.globals;
  3. $core.addPackage('DOMite');
  4. $core.packages["DOMite"].innerEval = function (expr) { return eval(expr); };
  5. $core.packages["DOMite"].transport = {"type":"amd","amdNamespace":"domite"};
  6. $core.addClass('Domite', $globals.ProtoStream, ['element', 'reference'], 'DOMite');
  7. //>>excludeStart("ide", pragmas.excludeIdeData);
  8. $globals.Domite.comment="I am (hopefully thin) wrapper around the notion of \x22cursor in a page\x22.\x0aI represent a DOM node _and_ a point where\x0ato insert new content into it.\x0a\x0aSo I play both the role of a container that inserts\x0aas well as the role of an element being inserted.\x0a\x0aI inherit from `ProtoStream`.\x0a\x0aCreation API:\x0a\x0a - `Domite new` creates an insertion point at the bottom of `<body>`.\x0a - `Domite newStream` is unique way to create pieces of content. It creates an instance \x22floating in thin air\x22 (wrapper around DOM DocumentFragment) that can be filled with any contents and then inserted in a page.\x0a - `Domite fromElement: aDomElement` wraps an element and set the cursor to its end.\x0a\x0aCSS selector API:\x0a\x0a - `Domite at: aSelector` wraps an element found by `document.querySelector(aSelector)`.\x0a\x0aManipulation API:\x0a\x0a - `aDomite << obj` inserts obj at the insertion point.\x0a - `aDomite resetContents` deletes contents of the wrapped element.\x0a\x0aCursor moving API:\x0a\x0aTake this sample HTML, where `[n]` are just markers, not real content:\x0a\x0a```\x0a<body>\x0a <h1>header</h1>\x0a [4]<p>[2]Hello[1]world[3]</p>[5]\x0a <small>footer</small>\x0a</body>\x0a```\x0a\x0aIf `d` is a `Domite` representing `[1]`, then:\x0a\x0a - `d setToStart` would move `d` to be at `[2]`,\x0a - `d setToEnd` would move `d` to be at `[3]`,\x0a - `d setToBefore` would move `d` to be at `[4]`, and\x0a - `d setToAfter` would move `d` to be at `[5]`.\x0a\x0aIt is not presumed one would use `setToXxx`\x0ato actually move around in a single instance.\x0aIt is envisioned this API will be used mostly\x0ain combination with `copy`, like\x0a`afterMe := self copy setToAfter`.";
  9. //>>excludeEnd("ide");
  10. $core.addMethod(
  11. $core.method({
  12. selector: "=",
  13. protocol: 'accessing',
  14. fn: function (aDomite){
  15. var self=this;
  16. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17. return $core.withContext(function($ctx1) {
  18. //>>excludeEnd("ctx");
  19. var $3,$2,$5,$4,$6,$1;
  20. $3=self._class();
  21. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22. $ctx1.sendIdx["class"]=1;
  23. //>>excludeEnd("ctx");
  24. $2=$recv($3).__eq($recv(aDomite)._class());
  25. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  26. $ctx1.sendIdx["="]=1;
  27. //>>excludeEnd("ctx");
  28. $1=$recv($2)._and_((function(){
  29. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  30. return $core.withContext(function($ctx2) {
  31. //>>excludeEnd("ctx");
  32. $5=self._element();
  33. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  34. $ctx2.sendIdx["element"]=1;
  35. //>>excludeEnd("ctx");
  36. $4=$recv($5).__eq($recv(aDomite)._element());
  37. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  38. $ctx2.sendIdx["="]=2;
  39. //>>excludeEnd("ctx");
  40. return $recv($4)._and_((function(){
  41. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  42. return $core.withContext(function($ctx3) {
  43. //>>excludeEnd("ctx");
  44. $6=self._reference();
  45. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46. $ctx3.sendIdx["reference"]=1;
  47. //>>excludeEnd("ctx");
  48. return $recv($6).__eq($recv(aDomite)._reference());
  49. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  50. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  51. //>>excludeEnd("ctx");
  52. }));
  53. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  54. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  55. //>>excludeEnd("ctx");
  56. }));
  57. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  58. $ctx1.sendIdx["and:"]=1;
  59. //>>excludeEnd("ctx");
  60. return $1;
  61. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  62. }, function($ctx1) {$ctx1.fill(self,"=",{aDomite:aDomite},$globals.Domite)});
  63. //>>excludeEnd("ctx");
  64. },
  65. //>>excludeStart("ide", pragmas.excludeIdeData);
  66. args: ["aDomite"],
  67. source: "= aDomite\x0a\x09^ self class = aDomite class and: [\x0a\x09\x09self element = aDomite element and: [\x0a\x09\x09\x09self reference = aDomite reference ]]",
  68. referencedClasses: [],
  69. //>>excludeEnd("ide");
  70. messageSends: ["and:", "=", "class", "element", "reference"]
  71. }),
  72. $globals.Domite);
  73. $core.addMethod(
  74. $core.method({
  75. selector: "at:",
  76. protocol: 'accessing',
  77. fn: function (aString){
  78. var self=this;
  79. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  80. return $core.withContext(function($ctx1) {
  81. //>>excludeEnd("ctx");
  82. var $1;
  83. $1=$recv(self._class())._fromElement_($recv(self._element())._querySelector_(aString));
  84. return $1;
  85. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  86. }, function($ctx1) {$ctx1.fill(self,"at:",{aString:aString},$globals.Domite)});
  87. //>>excludeEnd("ctx");
  88. },
  89. //>>excludeStart("ide", pragmas.excludeIdeData);
  90. args: ["aString"],
  91. source: "at: aString\x0a\x09^ self class fromElement: (self element querySelector: aString)",
  92. referencedClasses: [],
  93. //>>excludeEnd("ide");
  94. messageSends: ["fromElement:", "class", "querySelector:", "element"]
  95. }),
  96. $globals.Domite);
  97. $core.addMethod(
  98. $core.method({
  99. selector: "atEnd",
  100. protocol: 'testing',
  101. fn: function (){
  102. var self=this;
  103. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  104. return $core.withContext(function($ctx1) {
  105. //>>excludeEnd("ctx");
  106. var $1;
  107. $1=$recv(self._reference())._isNil();
  108. return $1;
  109. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  110. }, function($ctx1) {$ctx1.fill(self,"atEnd",{},$globals.Domite)});
  111. //>>excludeEnd("ctx");
  112. },
  113. //>>excludeStart("ide", pragmas.excludeIdeData);
  114. args: [],
  115. source: "atEnd\x0a\x09^ self reference isNil",
  116. referencedClasses: [],
  117. //>>excludeEnd("ide");
  118. messageSends: ["isNil", "reference"]
  119. }),
  120. $globals.Domite);
  121. $core.addMethod(
  122. $core.method({
  123. selector: "atStart",
  124. protocol: 'testing',
  125. fn: function (){
  126. var self=this;
  127. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  128. return $core.withContext(function($ctx1) {
  129. //>>excludeEnd("ctx");
  130. var $1;
  131. $1=$recv(self._reference()).__eq($recv(self._element())._firstChild());
  132. return $1;
  133. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  134. }, function($ctx1) {$ctx1.fill(self,"atStart",{},$globals.Domite)});
  135. //>>excludeEnd("ctx");
  136. },
  137. //>>excludeStart("ide", pragmas.excludeIdeData);
  138. args: [],
  139. source: "atStart\x0a\x09^ self reference = self element firstChild",
  140. referencedClasses: [],
  141. //>>excludeEnd("ide");
  142. messageSends: ["=", "reference", "firstChild", "element"]
  143. }),
  144. $globals.Domite);
  145. $core.addMethod(
  146. $core.method({
  147. selector: "attrAt:",
  148. protocol: 'accessing',
  149. fn: function (aString){
  150. var self=this;
  151. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  152. return $core.withContext(function($ctx1) {
  153. //>>excludeEnd("ctx");
  154. var $1,$2;
  155. $1=$recv(self["@element"])._hasAttribute_(aString);
  156. if($core.assert($1)){
  157. $2=$recv(self["@element"])._getAttribute_(aString);
  158. return $2;
  159. } else {
  160. return nil;
  161. };
  162. return self;
  163. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  164. }, function($ctx1) {$ctx1.fill(self,"attrAt:",{aString:aString},$globals.Domite)});
  165. //>>excludeEnd("ctx");
  166. },
  167. //>>excludeStart("ide", pragmas.excludeIdeData);
  168. args: ["aString"],
  169. source: "attrAt: aString\x0a\x09(element hasAttribute: aString)\x0a\x09\x09ifTrue: [ ^ element getAttribute: aString ]\x0a\x09\x09ifFalse: [ ^ nil ]",
  170. referencedClasses: [],
  171. //>>excludeEnd("ide");
  172. messageSends: ["ifTrue:ifFalse:", "hasAttribute:", "getAttribute:"]
  173. }),
  174. $globals.Domite);
  175. $core.addMethod(
  176. $core.method({
  177. selector: "attrAt:put:",
  178. protocol: 'accessing',
  179. fn: function (aString,anotherString){
  180. var self=this;
  181. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  182. return $core.withContext(function($ctx1) {
  183. //>>excludeEnd("ctx");
  184. $recv(self["@element"])._setAttribute_to_(aString,anotherString);
  185. return self;
  186. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  187. }, function($ctx1) {$ctx1.fill(self,"attrAt:put:",{aString:aString,anotherString:anotherString},$globals.Domite)});
  188. //>>excludeEnd("ctx");
  189. },
  190. //>>excludeStart("ide", pragmas.excludeIdeData);
  191. args: ["aString", "anotherString"],
  192. source: "attrAt: aString put: anotherString\x0a\x09element setAttribute: aString to: anotherString",
  193. referencedClasses: [],
  194. //>>excludeEnd("ide");
  195. messageSends: ["setAttribute:to:"]
  196. }),
  197. $globals.Domite);
  198. $core.addMethod(
  199. $core.method({
  200. selector: "canSetToUpperLevel",
  201. protocol: 'testing',
  202. fn: function (){
  203. var self=this;
  204. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  205. return $core.withContext(function($ctx1) {
  206. //>>excludeEnd("ctx");
  207. var $1;
  208. $1=$recv($recv(self._element())._parentNode())._notNil();
  209. return $1;
  210. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  211. }, function($ctx1) {$ctx1.fill(self,"canSetToUpperLevel",{},$globals.Domite)});
  212. //>>excludeEnd("ctx");
  213. },
  214. //>>excludeStart("ide", pragmas.excludeIdeData);
  215. args: [],
  216. source: "canSetToUpperLevel\x0a\x09^ self element parentNode notNil",
  217. referencedClasses: [],
  218. //>>excludeEnd("ide");
  219. messageSends: ["notNil", "parentNode", "element"]
  220. }),
  221. $globals.Domite);
  222. $core.addMethod(
  223. $core.method({
  224. selector: "element",
  225. protocol: 'accessing',
  226. fn: function (){
  227. var self=this;
  228. var $1;
  229. $1=self["@element"];
  230. return $1;
  231. },
  232. //>>excludeStart("ide", pragmas.excludeIdeData);
  233. args: [],
  234. source: "element\x0a\x09^ element",
  235. referencedClasses: [],
  236. //>>excludeEnd("ide");
  237. messageSends: []
  238. }),
  239. $globals.Domite);
  240. $core.addMethod(
  241. $core.method({
  242. selector: "element:",
  243. protocol: 'accessing',
  244. fn: function (anObject){
  245. var self=this;
  246. self["@element"]=anObject;
  247. return self;
  248. },
  249. //>>excludeStart("ide", pragmas.excludeIdeData);
  250. args: ["anObject"],
  251. source: "element: anObject\x0a\x09element := anObject",
  252. referencedClasses: [],
  253. //>>excludeEnd("ide");
  254. messageSends: []
  255. }),
  256. $globals.Domite);
  257. $core.addMethod(
  258. $core.method({
  259. selector: "initialize",
  260. protocol: 'initialization',
  261. fn: function (){
  262. var self=this;
  263. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  264. return $core.withContext(function($ctx1) {
  265. //>>excludeEnd("ctx");
  266. (
  267. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  268. $ctx1.supercall = true,
  269. //>>excludeEnd("ctx");
  270. $globals.Domite.superclass.fn.prototype._initialize.apply($recv(self), []));
  271. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  272. $ctx1.supercall = false;
  273. //>>excludeEnd("ctx");;
  274. self["@element"]=$recv(document)._body();
  275. self["@reference"]=nil._asJSON();
  276. return self;
  277. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  278. }, function($ctx1) {$ctx1.fill(self,"initialize",{},$globals.Domite)});
  279. //>>excludeEnd("ctx");
  280. },
  281. //>>excludeStart("ide", pragmas.excludeIdeData);
  282. args: [],
  283. source: "initialize\x0a\x09super initialize.\x0a\x09element := document body.\x0a\x09reference := nil asJSON",
  284. referencedClasses: [],
  285. //>>excludeEnd("ide");
  286. messageSends: ["initialize", "body", "asJSON"]
  287. }),
  288. $globals.Domite);
  289. $core.addMethod(
  290. $core.method({
  291. selector: "isInvalid",
  292. protocol: 'testing',
  293. fn: function (){
  294. var self=this;
  295. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  296. return $core.withContext(function($ctx1) {
  297. //>>excludeEnd("ctx");
  298. var $1;
  299. $1=$recv(self._element())._isNil();
  300. return $1;
  301. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  302. }, function($ctx1) {$ctx1.fill(self,"isInvalid",{},$globals.Domite)});
  303. //>>excludeEnd("ctx");
  304. },
  305. //>>excludeStart("ide", pragmas.excludeIdeData);
  306. args: [],
  307. source: "isInvalid\x0a\x09^ self element isNil",
  308. referencedClasses: [],
  309. //>>excludeEnd("ide");
  310. messageSends: ["isNil", "element"]
  311. }),
  312. $globals.Domite);
  313. $core.addMethod(
  314. $core.method({
  315. selector: "nextPut:",
  316. protocol: 'insertion',
  317. fn: function (anObject){
  318. var self=this;
  319. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  320. return $core.withContext(function($ctx1) {
  321. //>>excludeEnd("ctx");
  322. self._nextPutString_($recv(anObject)._printString());
  323. return self;
  324. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  325. }, function($ctx1) {$ctx1.fill(self,"nextPut:",{anObject:anObject},$globals.Domite)});
  326. //>>excludeEnd("ctx");
  327. },
  328. //>>excludeStart("ide", pragmas.excludeIdeData);
  329. args: ["anObject"],
  330. source: "nextPut: anObject\x0a\x09self nextPutString: anObject printString",
  331. referencedClasses: [],
  332. //>>excludeEnd("ide");
  333. messageSends: ["nextPutString:", "printString"]
  334. }),
  335. $globals.Domite);
  336. $core.addMethod(
  337. $core.method({
  338. selector: "nextPutDomNode:",
  339. protocol: 'insertion',
  340. fn: function (aDomElement){
  341. var self=this;
  342. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  343. return $core.withContext(function($ctx1) {
  344. //>>excludeEnd("ctx");
  345. $recv(self._element())._insertBefore_reference_(aDomElement,self._reference());
  346. return self;
  347. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  348. }, function($ctx1) {$ctx1.fill(self,"nextPutDomNode:",{aDomElement:aDomElement},$globals.Domite)});
  349. //>>excludeEnd("ctx");
  350. },
  351. //>>excludeStart("ide", pragmas.excludeIdeData);
  352. args: ["aDomElement"],
  353. source: "nextPutDomNode: aDomElement\x0a\x09self element\x0a\x09\x09insertBefore: aDomElement\x0a\x09\x09reference: self reference",
  354. referencedClasses: [],
  355. //>>excludeEnd("ide");
  356. messageSends: ["insertBefore:reference:", "element", "reference"]
  357. }),
  358. $globals.Domite);
  359. $core.addMethod(
  360. $core.method({
  361. selector: "nextPutString:",
  362. protocol: 'insertion',
  363. fn: function (aString){
  364. var self=this;
  365. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  366. return $core.withContext(function($ctx1) {
  367. //>>excludeEnd("ctx");
  368. self._nextPutDomNode_($recv(document)._createTextNode_($recv(aString)._asString()));
  369. return self;
  370. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  371. }, function($ctx1) {$ctx1.fill(self,"nextPutString:",{aString:aString},$globals.Domite)});
  372. //>>excludeEnd("ctx");
  373. },
  374. //>>excludeStart("ide", pragmas.excludeIdeData);
  375. args: ["aString"],
  376. source: "nextPutString: aString\x0a\x09self nextPutDomNode: (\x0a\x09\x09document createTextNode: aString asString )",
  377. referencedClasses: [],
  378. //>>excludeEnd("ide");
  379. messageSends: ["nextPutDomNode:", "createTextNode:", "asString"]
  380. }),
  381. $globals.Domite);
  382. $core.addMethod(
  383. $core.method({
  384. selector: "off:unbind:",
  385. protocol: 'events',
  386. fn: function (aString,aBlock){
  387. var self=this;
  388. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  389. return $core.withContext(function($ctx1) {
  390. //>>excludeEnd("ctx");
  391. self._removeEventListener_block_useCapture_(aString,aBlock,false);
  392. return self;
  393. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  394. }, function($ctx1) {$ctx1.fill(self,"off:unbind:",{aString:aString,aBlock:aBlock},$globals.Domite)});
  395. //>>excludeEnd("ctx");
  396. },
  397. //>>excludeStart("ide", pragmas.excludeIdeData);
  398. args: ["aString", "aBlock"],
  399. source: "off: aString unbind: aBlock\x0a\x09self removeEventListener: aString block: aBlock useCapture: false",
  400. referencedClasses: [],
  401. //>>excludeEnd("ide");
  402. messageSends: ["removeEventListener:block:useCapture:"]
  403. }),
  404. $globals.Domite);
  405. $core.addMethod(
  406. $core.method({
  407. selector: "on:bind:",
  408. protocol: 'events',
  409. fn: function (aString,aBlock){
  410. var self=this;
  411. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  412. return $core.withContext(function($ctx1) {
  413. //>>excludeEnd("ctx");
  414. self._addEventListener_block_useCapture_(aString,aBlock,false);
  415. return self;
  416. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  417. }, function($ctx1) {$ctx1.fill(self,"on:bind:",{aString:aString,aBlock:aBlock},$globals.Domite)});
  418. //>>excludeEnd("ctx");
  419. },
  420. //>>excludeStart("ide", pragmas.excludeIdeData);
  421. args: ["aString", "aBlock"],
  422. source: "on: aString bind: aBlock\x0a\x09self addEventListener: aString block: aBlock useCapture: false",
  423. referencedClasses: [],
  424. //>>excludeEnd("ide");
  425. messageSends: ["addEventListener:block:useCapture:"]
  426. }),
  427. $globals.Domite);
  428. $core.addMethod(
  429. $core.method({
  430. selector: "propAt:",
  431. protocol: 'accessing',
  432. fn: function (aString){
  433. var self=this;
  434. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  435. return $core.withContext(function($ctx1) {
  436. //>>excludeEnd("ctx");
  437. var $1;
  438. $1=$recv(self["@element"])._at_(aString);
  439. return $1;
  440. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  441. }, function($ctx1) {$ctx1.fill(self,"propAt:",{aString:aString},$globals.Domite)});
  442. //>>excludeEnd("ctx");
  443. },
  444. //>>excludeStart("ide", pragmas.excludeIdeData);
  445. args: ["aString"],
  446. source: "propAt: aString\x0a\x09^ element at: aString",
  447. referencedClasses: [],
  448. //>>excludeEnd("ide");
  449. messageSends: ["at:"]
  450. }),
  451. $globals.Domite);
  452. $core.addMethod(
  453. $core.method({
  454. selector: "propAt:put:",
  455. protocol: 'accessing',
  456. fn: function (aString,anObject){
  457. var self=this;
  458. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  459. return $core.withContext(function($ctx1) {
  460. //>>excludeEnd("ctx");
  461. var $1;
  462. $1=$recv(self["@element"])._at_put_(aString,anObject);
  463. return $1;
  464. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  465. }, function($ctx1) {$ctx1.fill(self,"propAt:put:",{aString:aString,anObject:anObject},$globals.Domite)});
  466. //>>excludeEnd("ctx");
  467. },
  468. //>>excludeStart("ide", pragmas.excludeIdeData);
  469. args: ["aString", "anObject"],
  470. source: "propAt: aString put: anObject\x0a\x09^ element at: aString put: anObject",
  471. referencedClasses: [],
  472. //>>excludeEnd("ide");
  473. messageSends: ["at:put:"]
  474. }),
  475. $globals.Domite);
  476. $core.addMethod(
  477. $core.method({
  478. selector: "putOn:",
  479. protocol: 'streaming',
  480. fn: function (aStream){
  481. var self=this;
  482. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  483. return $core.withContext(function($ctx1) {
  484. //>>excludeEnd("ctx");
  485. $recv(aStream)._nextPutDomNode_(self._element());
  486. return self;
  487. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  488. }, function($ctx1) {$ctx1.fill(self,"putOn:",{aStream:aStream},$globals.Domite)});
  489. //>>excludeEnd("ctx");
  490. },
  491. //>>excludeStart("ide", pragmas.excludeIdeData);
  492. args: ["aStream"],
  493. source: "putOn: aStream\x0a\x09aStream nextPutDomNode: self element",
  494. referencedClasses: [],
  495. //>>excludeEnd("ide");
  496. messageSends: ["nextPutDomNode:", "element"]
  497. }),
  498. $globals.Domite);
  499. $core.addMethod(
  500. $core.method({
  501. selector: "reference",
  502. protocol: 'accessing',
  503. fn: function (){
  504. var self=this;
  505. var $1;
  506. $1=self["@reference"];
  507. return $1;
  508. },
  509. //>>excludeStart("ide", pragmas.excludeIdeData);
  510. args: [],
  511. source: "reference\x0a\x09^ reference",
  512. referencedClasses: [],
  513. //>>excludeEnd("ide");
  514. messageSends: []
  515. }),
  516. $globals.Domite);
  517. $core.addMethod(
  518. $core.method({
  519. selector: "reference:",
  520. protocol: 'accessing',
  521. fn: function (anObject){
  522. var self=this;
  523. self["@reference"]=anObject;
  524. return self;
  525. },
  526. //>>excludeStart("ide", pragmas.excludeIdeData);
  527. args: ["anObject"],
  528. source: "reference: anObject\x0a\x09reference := anObject",
  529. referencedClasses: [],
  530. //>>excludeEnd("ide");
  531. messageSends: []
  532. }),
  533. $globals.Domite);
  534. $core.addMethod(
  535. $core.method({
  536. selector: "reset",
  537. protocol: 'positioning',
  538. fn: function (){
  539. var self=this;
  540. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  541. return $core.withContext(function($ctx1) {
  542. //>>excludeEnd("ctx");
  543. self._reference_($recv(self._element())._firstChild());
  544. return self;
  545. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  546. }, function($ctx1) {$ctx1.fill(self,"reset",{},$globals.Domite)});
  547. //>>excludeEnd("ctx");
  548. },
  549. //>>excludeStart("ide", pragmas.excludeIdeData);
  550. args: [],
  551. source: "reset\x0a\x09self reference: self element firstChild",
  552. referencedClasses: [],
  553. //>>excludeEnd("ide");
  554. messageSends: ["reference:", "firstChild", "element"]
  555. }),
  556. $globals.Domite);
  557. $core.addMethod(
  558. $core.method({
  559. selector: "resetContents",
  560. protocol: 'deletion',
  561. fn: function (){
  562. var self=this;
  563. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  564. return $core.withContext(function($ctx1) {
  565. //>>excludeEnd("ctx");
  566. var element = self['@element'], child;
  567. while (child = element.firstChild) element.removeChild(child);
  568. self['@reference'] = null;;
  569. return self;
  570. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  571. }, function($ctx1) {$ctx1.fill(self,"resetContents",{},$globals.Domite)});
  572. //>>excludeEnd("ctx");
  573. },
  574. //>>excludeStart("ide", pragmas.excludeIdeData);
  575. args: [],
  576. source: "resetContents\x0a<\x0a\x09var element = self['@element'], child;\x0a\x09while (child = element.firstChild) element.removeChild(child);\x0a\x09self['@reference'] = null;\x0a>",
  577. referencedClasses: [],
  578. //>>excludeEnd("ide");
  579. messageSends: []
  580. }),
  581. $globals.Domite);
  582. $core.addMethod(
  583. $core.method({
  584. selector: "setToAfter",
  585. protocol: 'positioning',
  586. fn: function (){
  587. var self=this;
  588. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  589. return $core.withContext(function($ctx1) {
  590. //>>excludeEnd("ctx");
  591. var $2,$1,$3;
  592. $2=self._element();
  593. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  594. $ctx1.sendIdx["element"]=1;
  595. //>>excludeEnd("ctx");
  596. $1=$recv($2)._nextSibling();
  597. self._reference_($1);
  598. $3=self._element_($recv(self._element())._parentNode());
  599. return self;
  600. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  601. }, function($ctx1) {$ctx1.fill(self,"setToAfter",{},$globals.Domite)});
  602. //>>excludeEnd("ctx");
  603. },
  604. //>>excludeStart("ide", pragmas.excludeIdeData);
  605. args: [],
  606. source: "setToAfter\x0a\x09self\x0a\x09\x09reference: self element nextSibling;\x0a\x09\x09element: self element parentNode",
  607. referencedClasses: [],
  608. //>>excludeEnd("ide");
  609. messageSends: ["reference:", "nextSibling", "element", "element:", "parentNode"]
  610. }),
  611. $globals.Domite);
  612. $core.addMethod(
  613. $core.method({
  614. selector: "setToBefore",
  615. protocol: 'positioning',
  616. fn: function (){
  617. var self=this;
  618. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  619. return $core.withContext(function($ctx1) {
  620. //>>excludeEnd("ctx");
  621. var $1,$2;
  622. $1=self._element();
  623. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  624. $ctx1.sendIdx["element"]=1;
  625. //>>excludeEnd("ctx");
  626. self._reference_($1);
  627. $2=self._element_($recv(self._element())._parentNode());
  628. return self;
  629. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  630. }, function($ctx1) {$ctx1.fill(self,"setToBefore",{},$globals.Domite)});
  631. //>>excludeEnd("ctx");
  632. },
  633. //>>excludeStart("ide", pragmas.excludeIdeData);
  634. args: [],
  635. source: "setToBefore\x0a\x09self\x0a\x09\x09reference: self element;\x0a\x09\x09element: self element parentNode",
  636. referencedClasses: [],
  637. //>>excludeEnd("ide");
  638. messageSends: ["reference:", "element", "element:", "parentNode"]
  639. }),
  640. $globals.Domite);
  641. $core.addMethod(
  642. $core.method({
  643. selector: "setToEnd",
  644. protocol: 'positioning',
  645. fn: function (){
  646. var self=this;
  647. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  648. return $core.withContext(function($ctx1) {
  649. //>>excludeEnd("ctx");
  650. self._reference_(nil._asJSON());
  651. return self;
  652. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  653. }, function($ctx1) {$ctx1.fill(self,"setToEnd",{},$globals.Domite)});
  654. //>>excludeEnd("ctx");
  655. },
  656. //>>excludeStart("ide", pragmas.excludeIdeData);
  657. args: [],
  658. source: "setToEnd\x0a\x09self reference: nil asJSON \x22null\x22",
  659. referencedClasses: [],
  660. //>>excludeEnd("ide");
  661. messageSends: ["reference:", "asJSON"]
  662. }),
  663. $globals.Domite);
  664. $core.addMethod(
  665. $core.method({
  666. selector: "at:",
  667. protocol: 'instance creation',
  668. fn: function (aString){
  669. var self=this;
  670. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  671. return $core.withContext(function($ctx1) {
  672. //>>excludeEnd("ctx");
  673. var $1;
  674. $1=self._fromElement_($recv(document)._querySelector_(aString));
  675. return $1;
  676. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  677. }, function($ctx1) {$ctx1.fill(self,"at:",{aString:aString},$globals.Domite.klass)});
  678. //>>excludeEnd("ctx");
  679. },
  680. //>>excludeStart("ide", pragmas.excludeIdeData);
  681. args: ["aString"],
  682. source: "at: aString\x0a\x09^ self fromElement: (document querySelector: aString)",
  683. referencedClasses: [],
  684. //>>excludeEnd("ide");
  685. messageSends: ["fromElement:", "querySelector:"]
  686. }),
  687. $globals.Domite.klass);
  688. $core.addMethod(
  689. $core.method({
  690. selector: "fromElement:",
  691. protocol: 'instance creation',
  692. fn: function (aDomElement){
  693. var self=this;
  694. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  695. return $core.withContext(function($ctx1) {
  696. //>>excludeEnd("ctx");
  697. var $1,$3,$4,$2,$receiver;
  698. if(($receiver = aDomElement) == null || $receiver.isNil){
  699. aDomElement;
  700. } else {
  701. $1=self._isDomNode_(aDomElement);
  702. if(!$core.assert($1)){
  703. self._error_($recv(self._name()).__comma(": Need a DOM node"));
  704. };
  705. };
  706. $3=self._new();
  707. $recv($3)._element_(aDomElement);
  708. $4=$recv($3)._yourself();
  709. $2=$4;
  710. return $2;
  711. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  712. }, function($ctx1) {$ctx1.fill(self,"fromElement:",{aDomElement:aDomElement},$globals.Domite.klass)});
  713. //>>excludeEnd("ctx");
  714. },
  715. //>>excludeStart("ide", pragmas.excludeIdeData);
  716. args: ["aDomElement"],
  717. source: "fromElement: aDomElement\x0a\x09aDomElement ifNotNil: [\x0a\x09\x09(self isDomNode: aDomElement) ifFalse: [\x0a\x09\x09\x09self error: self name, ': Need a DOM node' ]].\x0a\x09^ self new\x0a\x09\x09element: aDomElement;\x0a\x09\x09yourself",
  718. referencedClasses: [],
  719. //>>excludeEnd("ide");
  720. messageSends: ["ifNotNil:", "ifFalse:", "isDomNode:", "error:", ",", "name", "element:", "new", "yourself"]
  721. }),
  722. $globals.Domite.klass);
  723. $core.addMethod(
  724. $core.method({
  725. selector: "fromElement:cursorBefore:",
  726. protocol: 'instance creation',
  727. fn: function (aDomElement,anotherDomElement){
  728. var self=this;
  729. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  730. return $core.withContext(function($ctx1) {
  731. //>>excludeEnd("ctx");
  732. var $1,$3,$4,$2,$receiver;
  733. if(($receiver = aDomElement) == null || $receiver.isNil){
  734. aDomElement;
  735. } else {
  736. $1=self._isDomNode_(aDomElement);
  737. if(!$core.assert($1)){
  738. self._error_($recv(self._name()).__comma(": Need a DOM node"));
  739. };
  740. };
  741. $3=self._new();
  742. $recv($3)._element_(aDomElement);
  743. $recv($3)._referenceElement_(anotherDomElement);
  744. $4=$recv($3)._yourself();
  745. $2=$4;
  746. return $2;
  747. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  748. }, function($ctx1) {$ctx1.fill(self,"fromElement:cursorBefore:",{aDomElement:aDomElement,anotherDomElement:anotherDomElement},$globals.Domite.klass)});
  749. //>>excludeEnd("ctx");
  750. },
  751. //>>excludeStart("ide", pragmas.excludeIdeData);
  752. args: ["aDomElement", "anotherDomElement"],
  753. source: "fromElement: aDomElement cursorBefore: anotherDomElement\x0a\x09aDomElement ifNotNil: [\x0a\x09\x09(self isDomNode: aDomElement) ifFalse: [\x0a\x09\x09\x09self error: self name, ': Need a DOM node' ]].\x0a\x09^ self new\x0a\x09\x09element: aDomElement;\x0a\x09\x09referenceElement: anotherDomElement;\x0a\x09\x09yourself",
  754. referencedClasses: [],
  755. //>>excludeEnd("ide");
  756. messageSends: ["ifNotNil:", "ifFalse:", "isDomNode:", "error:", ",", "name", "element:", "new", "referenceElement:", "yourself"]
  757. }),
  758. $globals.Domite.klass);
  759. $core.addMethod(
  760. $core.method({
  761. selector: "isDomNode:",
  762. protocol: 'testing',
  763. fn: function (anObject){
  764. var self=this;
  765. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  766. return $core.withContext(function($ctx1) {
  767. //>>excludeEnd("ctx");
  768. return anObject.nodeType > 0 &&
  769. Object.prototype.toString.call(anObject) !== "[object Object]";
  770. return self;
  771. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  772. }, function($ctx1) {$ctx1.fill(self,"isDomNode:",{anObject:anObject},$globals.Domite.klass)});
  773. //>>excludeEnd("ctx");
  774. },
  775. //>>excludeStart("ide", pragmas.excludeIdeData);
  776. args: ["anObject"],
  777. source: "isDomNode: anObject\x0a<\x0a\x09return anObject.nodeType >> 0 &&\x0a\x09\x09Object.prototype.toString.call(anObject) !== \x22[object Object]\x22\x0a>",
  778. referencedClasses: [],
  779. //>>excludeEnd("ide");
  780. messageSends: []
  781. }),
  782. $globals.Domite.klass);
  783. $core.addMethod(
  784. $core.method({
  785. selector: "newElement:",
  786. protocol: 'instance creation',
  787. fn: function (aString){
  788. var self=this;
  789. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  790. return $core.withContext(function($ctx1) {
  791. //>>excludeEnd("ctx");
  792. var $1;
  793. $1=self._fromElement_($recv(document)._createElement_(aString));
  794. return $1;
  795. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  796. }, function($ctx1) {$ctx1.fill(self,"newElement:",{aString:aString},$globals.Domite.klass)});
  797. //>>excludeEnd("ctx");
  798. },
  799. //>>excludeStart("ide", pragmas.excludeIdeData);
  800. args: ["aString"],
  801. source: "newElement: aString\x0a\x09^ self fromElement: (document createElement: aString)",
  802. referencedClasses: [],
  803. //>>excludeEnd("ide");
  804. messageSends: ["fromElement:", "createElement:"]
  805. }),
  806. $globals.Domite.klass);
  807. $core.addMethod(
  808. $core.method({
  809. selector: "newStream",
  810. protocol: 'instance creation',
  811. fn: function (){
  812. var self=this;
  813. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  814. return $core.withContext(function($ctx1) {
  815. //>>excludeEnd("ctx");
  816. var $1;
  817. $1=self._fromElement_($recv(document)._createDocumentFragment());
  818. return $1;
  819. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  820. }, function($ctx1) {$ctx1.fill(self,"newStream",{},$globals.Domite.klass)});
  821. //>>excludeEnd("ctx");
  822. },
  823. //>>excludeStart("ide", pragmas.excludeIdeData);
  824. args: [],
  825. source: "newStream\x0a\x09^ self fromElement: document createDocumentFragment",
  826. referencedClasses: [],
  827. //>>excludeEnd("ide");
  828. messageSends: ["fromElement:", "createDocumentFragment"]
  829. }),
  830. $globals.Domite.klass);
  831. $core.addMethod(
  832. $core.method({
  833. selector: "putOn:",
  834. protocol: '*DOMite',
  835. fn: function (aStream){
  836. var self=this;
  837. function $Domite(){return $globals.Domite||(typeof Domite=="undefined"?nil:Domite)}
  838. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  839. return $core.withContext(function($ctx1) {
  840. //>>excludeEnd("ctx");
  841. var $1;
  842. $1=$recv($Domite())._isDomNode_(self["@jsObject"]);
  843. if($core.assert($1)){
  844. $recv(aStream)._nextPutDomNode_(self["@jsObject"]);
  845. } else {
  846. $recv(aStream)._nextPut_(self);
  847. };
  848. return self;
  849. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  850. }, function($ctx1) {$ctx1.fill(self,"putOn:",{aStream:aStream},$globals.JSObjectProxy)});
  851. //>>excludeEnd("ctx");
  852. },
  853. //>>excludeStart("ide", pragmas.excludeIdeData);
  854. args: ["aStream"],
  855. source: "putOn: aStream\x0a\x09(Domite isDomNode: jsObject)\x0a\x09\x09ifTrue: [ aStream nextPutDomNode: jsObject ]\x0a\x09\x09ifFalse: [ aStream nextPut: self ]",
  856. referencedClasses: ["Domite"],
  857. //>>excludeEnd("ide");
  858. messageSends: ["ifTrue:ifFalse:", "isDomNode:", "nextPutDomNode:", "nextPut:"]
  859. }),
  860. $globals.JSObjectProxy);
  861. $core.addMethod(
  862. $core.method({
  863. selector: "nextPutDomNode:",
  864. protocol: '*DOMite',
  865. fn: function (aNode){
  866. var self=this;
  867. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  868. return $core.withContext(function($ctx1) {
  869. //>>excludeEnd("ctx");
  870. self._nextPut_(aNode);
  871. return self;
  872. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  873. }, function($ctx1) {$ctx1.fill(self,"nextPutDomNode:",{aNode:aNode},$globals.ProtoStream)});
  874. //>>excludeEnd("ctx");
  875. },
  876. //>>excludeStart("ide", pragmas.excludeIdeData);
  877. args: ["aNode"],
  878. source: "nextPutDomNode: aNode\x0a\x09self nextPut: aNode",
  879. referencedClasses: [],
  880. //>>excludeEnd("ide");
  881. messageSends: ["nextPut:"]
  882. }),
  883. $globals.ProtoStream);
  884. });