소스 검색

Some new docs about how JupyterLab deals with documents.

Jason Grout 7 년 전
부모
커밋
db40067709
2개의 변경된 파일36개의 추가작업 그리고 6개의 파일을 삭제
  1. 32 2
      docs/source/developer/documents.rst
  2. 4 4
      packages/docregistry/src/registry.ts

+ 32 - 2
docs/source/developer/documents.rst

@@ -3,7 +3,7 @@
 Documents
 ---------
 
-JupyterLab can be extended in two ways via:
+JupyterLab can be extended in several ways:
 
 -  Extensions (top level): Application extensions extend the
    functionality of JupyterLab itself, and we cover them in the
@@ -13,7 +13,7 @@ JupyterLab can be extended in two ways via:
    application, and we cover them in this section.
 
 For this section, the term 'document' refers to any visual thing that
-is backed by a file stored on disk (i.e. uses Contents API).
+is backed by a file stored on disk (e.g. uses Contents API).
 
 The `Document
 Registry <http://jupyterlab.github.io/jupyterlab/classes/_docregistry_src_registry_.documentregistry.html>`__
@@ -118,3 +118,33 @@ The *Document Manager* handles:
 
 The *File Browser* uses the *Document Manager* to open documents and
 manage them.
+
+
+New Documents Docs
+------------------
+
+A 'document' in JupyterLab is represented by a model instance implementing the `IModel http://jupyterlab.github.io/jupyterlab/interfaces/_docregistry_src_registry_.documentregistry.imodel.html`__ interface. The model interface is intentionally fairly small, and concentrates on representing the data in the document and signaling changes to that data. Each model has an associated `context http://jupyterlab.github.io/jupyterlab/interfaces/_docregistry_src_registry_.documentregistry.icontext.html`__ instance as well. The context for a model is the bridge between the internal data of the document, stored in the model, and the file metadata and operations possible on the file, such as save and revert. Since many objects will need both the context and the model, the context contains a reference to the model as its `.model` attribute.
+
+A single file path can have multiple different models (and hence different contexts) representing the file. For example, a notebook can be opened with a notebook model and with a text model. Models for the same file path do not directly communicate with each other.
+
+`Document widgets http://jupyterlab.github.io/jupyterlab/interfaces/_docregistry_src_registry_.documentregistry.ireadywidget.html`__ represent a view of a document model. There can be multiple document widgets associated with a single document model, and they can naturally stay in sync with each other since they are views on the same underlying data model.
+
+Registration
+^^^^^^^^^^^^
+
+Factory functions registered with the docregistry create document models and widgets.
+
+Models
+~~~~~~
+A plugin can register a model factory function associated with specific file types. A plugin can also register new file types with the docregistry.
+
+Widgets
+^^^^^^^
+
+A plugin can register a widget factory function associated with specific model factory names.
+
+
+Creation
+^^^^^^^^
+A document widget is created from JupyterLab (for example, by a user opening a file). The widget creation causes the associated model to be created if it is not already created.
+

+ 4 - 4
packages/docregistry/src/registry.ts

@@ -675,7 +675,7 @@ namespace DocumentRegistry {
     disposed: ISignal<this, void>;
 
     /**
-     * Get the model associated with the document.
+     * The data model for the document.
      */
     readonly model: T;
 
@@ -697,11 +697,11 @@ namespace DocumentRegistry {
     readonly localPath: string;
 
     /**
-     * The current contents model associated with the document
+     * The document metadata, stored as a services contents model.
      *
      * #### Notes
-     * The contents model will be null until the context is ready.
-     * It will have an  empty `contents` field.
+     * This will be null until the context is 'ready'. Since we only store
+     * metadata here, the `.contents` attribute will always be empty.
      */
     readonly contentsModel: Contents.IModel | null;