Browse Source

Copy Domite class doc to README

Herbert Vojčík 8 years ago
parent
commit
9b00d2a3f6
1 changed files with 67 additions and 0 deletions
  1. 67 0
      README.md

+ 67 - 0
README.md

@@ -26,6 +26,73 @@ To do so in the Helios IDE change the `imports:` section of your packages which
 Or you may add it to the `deploy.js` / `devel.js` files.
 The former is preferred because of an easier deployment process.
 
+## API (class doc of class Domite)
+
+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.
+
+I inherit from `ProtoStream`.
+
+Creation API:
+
+ - `Domite new` creates an insertion point at the bottom of `<body>`.
+ - `Domite newStream` 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.
+ - `Domite newElement: 'div'` creates new `<div />` element (and returns it wrapped as a Domite).
+
+CSS selector API:
+
+ - `Domite at: aSelector` wraps an element found by `document.querySelector(aSelector)`.
+ - `aDomite at: aSelector` wraps an element found by `element.querySelector(aSelector)`.
+ - `Domite allAt: aSelector` return collection of wrapped results of `document.querySelectorAll(aSelector)`.
+ - `aDomite allAt: aSelector` return collection of wrapped results of `element.querySelectorAll(aSelector)`.
+
+Manipulation API:
+
+ - `aDomite << obj` inserts obj at the insertion point.
+ - `aDomite resetContents` deletes contents of the wrapped element.
+ - `aDomite cutUpTo: anotherDomite` removes contents between the two cursors (or up to the end of the receiver) and returns it collected in a wrapped DocumentFragment (IOW, you can `anotherPlace << theResult` to move the contents in the specified range).
+
+ - `aDomite attrAt: aString` returns attribute of the wrapped element or nil.
+ - `aDomite attrAt: aString put: anotherString` sets an attribute of the wrapped element.
+ - `aDomite propAt: aString` returns JS property of the wrapped element or nil.
+ - `aDomite propAt: aString put: anObject` sets JS property 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 setToStart` would move `d` to be at `[2]`,
+ - `d setToEnd` would move `d` to be at `[3]`,
+ - `d setToBefore` would move `d` to be at `[4]`, and
+ - `d setToAfter` would move `d` to be at `[5]`.
+
+It is not presumed one would use `setToXxx`
+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 setToAfter`.
+
+Event API:
+
+ - `aDomite on: aString bind: [ :ev | ... ]` binds a block to process an event.
+ - `aDomite off: aString unbind: aBlock` unbinds the block from processing an event.
+ - `aDomite fire: aString [detail: anObject]` triggers a CustomEvent with specified type and, optionally, a detail object.
+ - `aDomite fireEvent: anEvent` triggers existing DOM Event object!
 
 ## Contributing