Browse Source

default in end of body; class comment

Herbert Vojčík 9 years ago
parent
commit
f3baa2213f
2 changed files with 87 additions and 0 deletions
  1. 36 0
      src/DOMite.js
  2. 51 0
      src/DOMite.st

+ 36 - 0
src/DOMite.js

@@ -5,6 +5,9 @@ $core.packages["DOMite"].innerEval = function (expr) { return eval(expr); };
 $core.packages["DOMite"].transport = {"type":"amd","amdNamespace":"domite"};
 
 $core.addClass('Domite', $globals.Object, ['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\x0aCreation API:\x0a\x0a - `Domite new` creates an insertion point at the bottom of `<body>`.\x0a - `Domite open` 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\x0aManipulation API:\x0a\x0a - `aDomite insertDomite:` and `aDomite insertString:` insert either a Domite or a text content at the insertion point.\x0a - `aDomite clearHere` 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 seekHereStart` would move `d` to be at `[2]`,\x0a - `d seekHereEnd` would move `d` to be at `[3]`,\x0a - `d seekBeforeHere` would move `d` to be at `[4]`, and\x0a - `d seekAfterHere` would move `d` to be at `[5]`.\x0a\x0aIt is not presumed one would use `seekXxx`\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 seekAfterHere`.";
+//>>excludeEnd("ide");
 $core.addMethod(
 $core.method({
 selector: "canSeekOutOfHere",
@@ -96,6 +99,39 @@ messageSends: []
 }),
 $globals.Domite);
 
+$core.addMethod(
+$core.method({
+selector: "initialize",
+protocol: 'initialization',
+fn: function (){
+var self=this;
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+return $core.withContext(function($ctx1) {
+//>>excludeEnd("ctx");
+(
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+$ctx1.supercall = true, 
+//>>excludeEnd("ctx");
+$globals.Domite.superclass.fn.prototype._initialize.apply($recv(self), []));
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+$ctx1.supercall = false;
+//>>excludeEnd("ctx");;
+self["@element"]=$recv(document)._body();
+self["@reference"]=nil._asJSON();
+return self;
+//>>excludeStart("ctx", pragmas.excludeDebugContexts);
+}, function($ctx1) {$ctx1.fill(self,"initialize",{},$globals.Domite)});
+//>>excludeEnd("ctx");
+},
+//>>excludeStart("ide", pragmas.excludeIdeData);
+args: [],
+source: "initialize\x0a\x09super initialize.\x0a\x09element := document body.\x0a\x09reference := nil asJSON",
+referencedClasses: [],
+//>>excludeEnd("ide");
+messageSends: ["initialize", "body", "asJSON"]
+}),
+$globals.Domite);
+
 $core.addMethod(
 $core.method({
 selector: "insertDomite:",

+ 51 - 0
src/DOMite.st

@@ -2,6 +2,49 @@ Smalltalk createPackage: 'DOMite'!
 Object subclass: #Domite
 	instanceVariableNames: 'element reference'
 	package: 'DOMite'!
+!Domite commentStamp!
+I am (hopefully thin) wrapper around the notion of "cursor in a page".
+I represent a DOM node _and_ a point where
+to insert new content into it.
+
+So I play both the role of a container that inserts
+as well as the role of an element being inserted.
+
+Creation API:
+
+ - `Domite new` creates an insertion point at the bottom of `<body>`.
+ - `Domite open` is unique way to create pieces of content. It creates an instance "floating in thin air" (wrapper around DOM DocumentFragment) that can be filled with any contents and then inserted in a page.
+ - `Domite fromElement: aDomElement` wraps an element and set the cursor to its end.
+
+Manipulation API:
+
+ - `aDomite insertDomite:` and `aDomite insertString:` insert either a Domite or a text content at the insertion point.
+ - `aDomite clearHere` deletes contents of the wrapped element.
+
+Cursor moving API:
+
+Take this sample HTML, where `[n]` are just markers, not real content:
+
+```
+<body>
+  <h1>header</h1>
+  [4]<p>[2]Hello[1]world[3]</p>[5]
+  <small>footer</small>
+</body>
+```
+
+If `d` is a `Domite` representing `[1]`, then:
+
+ - `d seekHereStart` would move `d` to be at `[2]`,
+ - `d seekHereEnd` would move `d` to be at `[3]`,
+ - `d seekBeforeHere` would move `d` to be at `[4]`, and
+ - `d seekAfterHere` would move `d` to be at `[5]`.
+
+It is not presumed one would use `seekXxx`
+to actually move around in a single instance.
+It is envisioned this API will be used mostly
+in combination with `copy`, like
+`afterMe := self copy seekAfterHere`.!
 
 !Domite methodsFor: 'accessing'!
 
@@ -31,6 +74,14 @@ clearHere
 >
 ! !
 
+!Domite methodsFor: 'initialization'!
+
+initialize
+	super initialize.
+	element := document body.
+	reference := nil asJSON
+! !
+
 !Domite methodsFor: 'insertion'!
 
 insertDomite: aDomite