Jelajahi Sumber

aDomite at: aSelector. Fix #3.

Herbert Vojčík 9 tahun lalu
induk
melakukan
6fb5029ea5
2 mengubah file dengan 29 tambahan dan 0 penghapusan
  1. 25 0
      src/DOMite.js
  2. 4 0
      src/DOMite.st

+ 25 - 0
src/DOMite.js

@@ -8,6 +8,31 @@ $core.addClass('Domite', $globals.ProtoStream, ['element', 'reference'], 'DOMite
 //>>excludeStart("ide", pragmas.excludeIdeData);
 $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`.";
 //>>excludeEnd("ide");
+$core.addMethod(
+$core.method({
+selector: "at:",
+protocol: 'accessing',
+fn: function (aString){
+var self=this;
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+return $core.withContext(function($ctx1) {
+//>>excludeEnd("ctx");
+var $1;
+$1=$recv(self._class())._fromElement_($recv(self._element())._querySelector_(aString));
+return $1;
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+}, function($ctx1) {$ctx1.fill(self,"at:",{aString:aString},$globals.Domite)});
+//>>excludeEnd("ctx");
+},
+//>>excludeStart("ide", pragmas.excludeIdeData);
+args: ["aString"],
+source: "at: aString\x0a\x09^ self class fromElement: (self element querySelector: aString)",
+referencedClasses: [],
+//>>excludeEnd("ide");
+messageSends: ["fromElement:", "class", "querySelector:", "element"]
+}),
+$globals.Domite);
+
 $core.addMethod(
 $core.method({
 selector: "atEnd",

+ 4 - 0
src/DOMite.st

@@ -54,6 +54,10 @@ in combination with `copy`, like
 
 !Domite methodsFor: 'accessing'!
 
+at: aString
+	^ self class fromElement: (self element querySelector: aString)
+!
+
 attrAt: aString
 	(element hasAttribute: aString)
 		ifTrue: [ ^ element getAttribute: aString ]