Modules
Collaboration for Phoenix: one engine for people and agents working together live, under every component on a page.
Anyone or anything that takes part in a room: a user, an admin, a guest, a service, an agent. Issho never assumes your schema; implement this protocol for each struct that can join.
The one process that orders a document's changes, across every node of a cluster.
Where the people of a room are, and what they are doing: their places, selections, drags and locks, many times a second.
What a component brings to Issho: its engine (Issho.Engine) and its
place format (Issho.Place). The browser's half of a binding brings the
rest: drawing places, and reading and applying a view for following.
The channel a browser joins a room on: one per room per tab, on one socket for the whole page.
The colours of the people of a room.
The authorities (Issho.Authority) of an Issho instance: one for each
open document, found by name on every node of a cluster.
The model of a document: how its operations apply. Each binding brings
one (Kotoba's text, Hakushi's graph, a map for shared assigns), and the
authority (Issho.Authority) runs it.
A map that people and agents change together: values at paths, in the order the authority accepts them. It is the engine of shared assigns, the reference for writing an engine, and the engine of Issho's own tests.
An actor as a room knows it: its key, what others see of it, and on whose behalf it acts.
A LiveView in a room: the same session as a browser's channel or an
agent's process, in the LiveView's own process. Presence, awareness,
the room's documents and the policy work the same; the room's events
reach the LiveView's components with send_update/2, or the LiveView
itself.
An actor in a room from Elixir: an agent running in your app, a job, a script. It joins like a browser, with the same presence, awareness, locks, transactions and policy, and the people in the room see it.
Where someone is, in a component's own terms: a row and a column in a grid, a node and an offset in a text, a point on a canvas. Never screen pixels, because each person has their own order, filters and zoom.
Your app's answer to "may this actor do this here?", and to "what is this document?". Issho has no roles and no user model: it asks, and your app answers with whatever it already uses.
Who is in a room: Phoenix.Presence, as it is, on your app's PubSub.
Where documents last. Your app implements it on its database;
Issho.Store.Memory is for development and tests.
A store in memory, for development and tests. It outlives a document's authority, but loses everything when its node stops.
No store: a document that lasts as long as its authority, and starts again from its initial content when the next one opens it.
Helpers for testing an app or a binding with Issho, in ExUnit.
Short-lived, signed credentials to join one room as one actor.
The envelope of a change to a document, the same for every engine
Mix Tasks
Builds Issho's browser client into priv/static.
Checks the built files before a release of Issho.